Metadata-Version: 2.4
Name: shadcn-qt
Version: 0.2.4
Summary: shadcn-aligned Qt widgets and design tokens for PySide and PyQt
Author: Felorx
License-Expression: GPL-3.0-only OR LicenseRef-Shadcn-Qt-Commercial
Project-URL: Homepage, https://felorx.com
Project-URL: Source, https://github.com/felorx/shadcn-qt
Project-URL: Issues, https://github.com/felorx/shadcn-qt/issues
Project-URL: Documentation, https://github.com/felorx/shadcn-qt/tree/main/apps/docs
Project-URL: Commercial, https://felorx.com
Keywords: qt,pyside,pyqt,shadcn,qss,widgets
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: User Interfaces
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: LICENSES/GPL-3.0-only.txt
License-File: LICENSES/LicenseRef-Shadcn-Qt-Commercial.txt
License-File: NOTICE.md
Provides-Extra: pyside6
Requires-Dist: PySide6>=6.5.0; extra == "pyside6"
Provides-Extra: pyqt6
Requires-Dist: PyQt6>=6.5.0; extra == "pyqt6"
Provides-Extra: pyside2
Requires-Dist: PySide2>=5.15.0; extra == "pyside2"
Provides-Extra: pyqt5
Requires-Dist: PyQt5>=5.15.0; extra == "pyqt5"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: ruff>=0.9; extra == "dev"
Provides-Extra: designer
Requires-Dist: PySide6>=6.5.0; extra == "designer"
Dynamic: license-file

# shadcn-qt (Python)

The free Core package is published at
[PyPI](https://pypi.org/project/shadcn-qt/). The distribution name is
`shadcn-qt`; its normalized Python import name is `shadcn_qt`. Python 3.9 or
newer is required.

Core uses the classic shadcn/ui `new-york` visual profile with the Zinc
light/dark palette. `STYLE_PROFILE` and `BASE_COLOR` expose that identity to
applications and tooling.

For a new environment, install with exactly **one** Qt binding extra:

This is an independent Qt implementation and is not affiliated with or
endorsed by the upstream shadcn project. It is published by
[Felorx](https://felorx.com).

```bash
python -m pip install "shadcn-qt[pyside6]"
# or: pyqt6 | pyside2 | pyqt5
```

If an existing project already has PySide or PyQt, preserve it and install Core
without a binding extra:

```bash
python -m pip install shadcn-qt
```

Verify the installed version with:

```bash
python -c "from importlib.metadata import version; print(version('shadcn-qt'))"
```

For source development, use
`python -m pip install -e ".[pyside6,dev]"` in this directory.

Regenerate styles after editing `packages/design-tokens/tokens.json`:

```bash
python ../../tools/token-codegen/generate.py
```

## Global and custom themes

```python
from shadcn_qt import apply_theme, configure, create_theme

brand = create_theme(
    "brand",
    base="light",
    colors={"primary": "#7c3aed", "ring": "#8b5cf6"},
    radius={"md": "10px"},
)
configure(theme=brand, extra_qss="QWidget#sidebar { border: none; }")
apply_theme()  # uses the current QApplication
```

JSON theme files can be loaded with `load_theme("brand.json")`.

## High-DPI startup

Configure DPI handling before creating `QApplication`. This keeps fractional
Windows display scales such as 125%, 150%, and 175% exact instead of allowing
Qt 5 to round them to a larger integer scale:

```python
from shadcn_qt import apply_theme, configure_high_dpi
from shadcn_qt._qt import QtWidgets

configure_high_dpi()
app = QtWidgets.QApplication([])
apply_theme(app, "light")
```

Qt 6 already enables high-DPI rendering; the initializer selects precise
fractional scaling. On Qt 5 it also enables high-DPI widgets and pixmaps. Do
not combine normal Windows display scaling with a production
`QT_SCALE_FACTOR`; Qt multiplies that override by the native scale.

## Existing native widgets

Apply full default shadcn-qt styling to the complete existing and future QtWidgets family without replacing classes. Known controls use component-specific rules; uncommon or third-party QWidget subclasses receive a neutral themed fallback:

```python
from shadcn_qt import apply_theme, enable_native_widget_styling

enable_native_widget_styling(app)
apply_theme(app, "light")
```

Use `adopt_native_widgets(page)` for one subtree, and `disable_native_widget_styling(app)` to remove unchanged adapter defaults. Set `shadcn_qt_native_styling=False` on custom-painted or third-party widgets that should be left alone.

Known QtWidgets receive dedicated `new-york` + Zinc rules. QSS-inexpressible
checkbox/radio glyphs, editor arrows, calendar cells, and elevation use
reversible adapter enhancements. The repository Gallery includes four pages
built exclusively from stock QtWidgets plus eight light/dark screenshot
baselines.

## Qt Designer

Install the recommended plugin host, then launch Designer with the registration path already configured:

```bash
pip install "shadcn-qt[designer]"
shadcn-qt-designer
```

Use `from shadcn_qt.designer import load_ui` to load the saved form under PySide or PyQt.

The public package exports 66 Qt-native classes covering the current named shadcn/ui catalog plus the Chrome-style `TabPane` convenience. Compound widgets retain normal Qt signals, models, layouts, and Designer-editable properties.

## Core and Pro

This distribution is shadcn-qt Core. The separately ordered private
`shadcn-qt-pro` distribution uses the `shadcn_qt_pro` import name. The
`shadcn_qt.pro` namespace in Core only forwards to that package when it is
installed; no Pro implementation or customer entitlement is included in this
wheel. Core commercial rights and Pro access are separate Order Form items.

## License

Core is publicly downloadable at no cost under GPL-3.0-only. Proprietary
projects need a valid shadcn-qt commercial Order Form instead. Installing from
PyPI does not grant commercial rights. The commercial license does not include
the separate Qt, PySide, or PyQt licenses. See the `LICENSE`, `LICENSES`, and
`NOTICE.md` files included in every wheel and source distribution.
