bootstack 0.1.0a3__tar.gz → 0.1.0a5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bootstack-0.1.0a3/src/bootstack.egg-info → bootstack-0.1.0a5}/PKG-INFO +20 -4
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/README.md +19 -3
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/pyproject.toml +2 -2
- bootstack-0.1.0a5/src/bootstack/assets/bootstack-dark.ico +0 -0
- bootstack-0.1.0a5/src/bootstack/assets/bootstack-light.ico +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/__init__.py +11 -4
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/demo.py +3 -3
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/app.py +10 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/base_window.py +37 -12
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/window_utilities.py +12 -5
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/toast.py +8 -1
- {bootstack-0.1.0a3 → bootstack-0.1.0a5/src/bootstack.egg-info}/PKG-INFO +20 -4
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack.egg-info/SOURCES.txt +2 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/LICENSE +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/MANIFEST.in +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/NOTICE +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/setup.cfg +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/__main__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/app.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/constants.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/data.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/dialogs.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/i18n.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/localization.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/menu.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/style.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/utils.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/api/widgets.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/bootstack-transparent.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/bootstack.ico +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/bootstack.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/badge-pill.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/badge-square.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/border.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-horizontal-after-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-horizontal-after-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-horizontal-before-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-horizontal-before-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-horizontal-center-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-horizontal-center-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-vertical-after-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-vertical-after-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-vertical-before-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-vertical-before-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-vertical-center-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/button-group-vertical-center-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/field.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-after-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-after-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-before-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-before-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/list-item-separated.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/list-item.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/manifest.toml +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/menu-item.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/nav-button-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/nav-button-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/nav-icon-button-compact.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/nav-icon-button-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/notebook-client-border.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/notebook-tab-active.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/notebook-tab-bar.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/notebook-tab-normal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/notebook-tab-pill.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/progress-bar-horizontal-striped.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/progress-bar-solid.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/progress-bar-thin.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/progress-bar-vertical-striped.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/radio-selected.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/radio-unselected.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/slider-handle-focus.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/slider-handle.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/slider-track-horizontal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/slider-track-vertical.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/switch-off.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/switch-on.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/tabs-bar-horizontal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/tabs-bar-vertical.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/tabs-pill.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/amber-dark.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/amber-light.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/aurora-dark.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/aurora-light.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/bootstrap-dark.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/bootstrap-light.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/classic-dark.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/classic-light.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/docs-dark.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/docs-light.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/forest-dark.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/forest-light.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/ocean-dark.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/ocean-light.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/rose-dark.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/themes/rose-light.json +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/badge-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/badge-pill.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/border.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/button-group-horizontal-after.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/button-group-horizontal-before.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/button-group-horizontal-center.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/button-group-vertical-after.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/button-group-vertical-before.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/button-group-vertical-center.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/button.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/checkbox-checked.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/checkbox-indeterminate.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/checkbox-unchecked.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/field.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/icon-button.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/input-inner.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/input-prefix.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/input-suffix.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/input.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/list-item-focus.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/list-item-separated.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/menu-item-separated.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/notebook-client-border.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/notebook-pill-active.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/notebook-pill-inactive.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/notebook-tab-active.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/notebook-tab-border.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/notebook-tab-normal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/notebook-underline.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/progress-bar-horizontal-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/progress-bar-horizontal-striped.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/progress-bar-vertical-default.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/progress-bar-vertical-striped.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/progress-trough-horizontal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/progress-trough-vertical.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/radio-selected.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/radio-unselected.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/scrollbar-horizontal-rounded.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/scrollbar-vertical-rounded.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/separator-horizontal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/separator-vertical.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/slider-handle-focus.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/slider-handle.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/slider-track-horizontal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/slider-track-vertical.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/switch-off.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/switch-on.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/tabs-bar-horizontal.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/tabs-bar-vertical.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/widgets/tabs-pill.png +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/__main__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/add.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/build.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/config.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/doctor.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/list_cmd.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/promote.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/pyinstaller.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/run.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/start.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/cli/templates/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/constants.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/after.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/bind.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/bindtags.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/busy.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/clipboard.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/focus.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/grab.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/grid.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/localization.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/pack.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/place.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/selection.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/signals.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/capabilities/winfo.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/colorutils.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/exceptions.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/images.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/localization/README.md +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/localization/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/localization/intl_format.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/localization/msgcat.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/localization/specs.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/mixins/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/mixins/ttk_state.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/mixins/widget.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/publisher.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/signals/README.md +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/signals/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/signals/integration.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/signals/signal.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/signals/types.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/validation/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/validation/types.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/validation/validation_result.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/validation/validation_rules.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/core/variables.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/datasource/README.md +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/datasource/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/datasource/base.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/datasource/file_source.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/datasource/memory_source.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/datasource/sqlite_source.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/datasource/types.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/colorchooser.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/colordropper.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/datedialog.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/dialog.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/filterdialog.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/fontdialog.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/formdialog.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/message.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/dialogs/query.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/py.typed +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/events.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/menu.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/shortcuts.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/tk_patch.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/toplevel.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/utility.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/runtime/visual_focus.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/bootstyle.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/bootstyle_builder_base.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/bootstyle_builder_mixed.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/bootstyle_builder_tk.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/bootstyle_builder_ttk.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/badge.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/button.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/buttongroup.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/calendar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/checkbutton.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/combobox.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/contextmenu.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/entry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/expander.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/field.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/frame.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/label.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/labelframe.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/listview.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/menubar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/menubutton.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/notebook.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/panedwindow.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/progressbar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/radiobutton.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/scale.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/scrollbar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/separator.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/sidenav.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/sizegrip.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/spinbox.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/switch.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/tabitem.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/toolbutton.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/tooltip.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/treeview.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders/utils.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders_tk/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/builders_tk/defaults.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/element.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/style.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/theme_provider.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/tk_patch.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/token_maps.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/types.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/typography.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/style/utility.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/themes/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/themes/standard.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/themes/user.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/accordion.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/appshell.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/buttongroup.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/calendar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/compositeframe.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/contextmenu.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/dateentry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/dropdownbutton.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/expander.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/field.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/floodgauge.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/form.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/labeledscale.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/list/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/list/listitem.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/list/listview.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/menubar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/meter.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/numericentry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/pagestack.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/passwordentry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/pathentry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/radiogroup.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/scrolledtext.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/scrolledtext.pyi +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/scrollview.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/selectbox.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/sidenav/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/sidenav/group.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/sidenav/header.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/sidenav/item.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/sidenav/separator.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/sidenav/view.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/spinnerentry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/tableview/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/tableview/tableview.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/tableview/types.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/tabs/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/tabs/tabitem.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/tabs/tabs.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/tabs/tabview.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/textentry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/timeentry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/togglegroup.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/toolbar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/composites/tooltip.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/internal/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/internal/wrapper_base.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/mixins/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/mixins/configure_mixin.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/mixins/entry_mixin.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/mixins/font_mixin.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/mixins/icon_mixin.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/mixins/localization_mixin.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/mixins/signal_mixin.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/mixins/validation_mixin.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/parts/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/parts/numberentry_part.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/parts/spinnerentry_part.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/parts/textentry_part.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/__init__.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/badge.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/button.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/card.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/checkbutton.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/checktoggle.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/combobox.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/entry.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/frame.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/gridframe.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/label.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/labelframe.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/menubutton.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/notebook.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/optionmenu.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/packframe.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/panedwindow.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/progressbar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/radiobutton.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/radiotoggle.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/scale.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/scrollbar.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/separator.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/sizegrip.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/spinbox.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/switch.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/primitives/treeview.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/widgets/types.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack.egg-info/dependency_links.txt +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack.egg-info/entry_points.txt +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack.egg-info/requires.txt +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack.egg-info/top_level.txt +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/tests/test_togglegroup.py +0 -0
- {bootstack-0.1.0a3 → bootstack-0.1.0a5}/tests/test_variables.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bootstack
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0a5
|
|
4
4
|
Summary: A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box.
|
|
5
5
|
Author-email: Israel Dryer <israel.dryer@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,9 +44,16 @@ Dynamic: license-file
|
|
|
44
44
|

|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
**
|
|
47
|
+
> **From the maker of [ttkbootstrap](https://github.com/israel-dryer/ttkbootstrap).**
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
**bootstack** is a batteries-included desktop framework for Python, built on Tk.
|
|
50
|
+
|
|
51
|
+
60+ themed widgets. Reactive state. Declarative layout. Built-in icons and localization. A CLI that scaffolds, builds, and ships. Everything ttkbootstrap was missing.
|
|
52
|
+
|
|
53
|
+
<p align="center">
|
|
54
|
+
<img src="docs/assets/hero-demo-app-light.png" width="49%" alt="bootstack Data Analysis Workbench — light theme">
|
|
55
|
+
<img src="docs/assets/hero-demo-app-dark.png" width="49%" alt="bootstack Data Analysis Workbench — dark theme">
|
|
56
|
+
</p>
|
|
50
57
|
|
|
51
58
|
> **Active alpha.** APIs may change before the first stable release.
|
|
52
59
|
> See the [documentation](https://bootstack.org) for guides and the API reference.
|
|
@@ -61,6 +68,14 @@ bootstack is currently in **active alpha**, so the `--pre` flag is required to o
|
|
|
61
68
|
pip install --pre bootstack
|
|
62
69
|
```
|
|
63
70
|
|
|
71
|
+
## See it
|
|
72
|
+
|
|
73
|
+
The widget gallery is a single-window tour of everything bootstack ships — every widget, theme switcher, accent variants, and layout containers. Fastest way to see the framework in action without writing a line of code:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
bootstack gallery
|
|
77
|
+
```
|
|
78
|
+
|
|
64
79
|
## Quick Start
|
|
65
80
|
|
|
66
81
|
```python
|
|
@@ -136,7 +151,7 @@ bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))
|
|
|
136
151
|
## Features
|
|
137
152
|
|
|
138
153
|
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, frameless windows with custom chrome
|
|
139
|
-
- **60+ widgets** — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
|
|
154
|
+
- **60+ themed widgets** — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
|
|
140
155
|
- **9 dialogs** — Message, Query, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog, plus a `Dialog` base
|
|
141
156
|
- **Layout containers** — `PackFrame` and `GridFrame` for declarative layouts; `ScrollView`, `PanedWindow`, `Accordion`, `Card`, `Expander`
|
|
142
157
|
- **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost, link, text), consistent across widgets
|
|
@@ -168,6 +183,7 @@ bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))
|
|
|
168
183
|
bootstack ships with an optional CLI for scaffolding, running, and packaging applications:
|
|
169
184
|
|
|
170
185
|
```bash
|
|
186
|
+
bootstack gallery # Launch the interactive widget gallery
|
|
171
187
|
bootstack start MyApp # Create a new project (basic template)
|
|
172
188
|
bootstack start MyApp --template appshell # ...or with sidebar navigation
|
|
173
189
|
bootstack run # Run the app defined in the project config
|
|
@@ -10,9 +10,16 @@
|
|
|
10
10
|

|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
**
|
|
13
|
+
> **From the maker of [ttkbootstrap](https://github.com/israel-dryer/ttkbootstrap).**
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
**bootstack** is a batteries-included desktop framework for Python, built on Tk.
|
|
16
|
+
|
|
17
|
+
60+ themed widgets. Reactive state. Declarative layout. Built-in icons and localization. A CLI that scaffolds, builds, and ships. Everything ttkbootstrap was missing.
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<img src="docs/assets/hero-demo-app-light.png" width="49%" alt="bootstack Data Analysis Workbench — light theme">
|
|
21
|
+
<img src="docs/assets/hero-demo-app-dark.png" width="49%" alt="bootstack Data Analysis Workbench — dark theme">
|
|
22
|
+
</p>
|
|
16
23
|
|
|
17
24
|
> **Active alpha.** APIs may change before the first stable release.
|
|
18
25
|
> See the [documentation](https://bootstack.org) for guides and the API reference.
|
|
@@ -27,6 +34,14 @@ bootstack is currently in **active alpha**, so the `--pre` flag is required to o
|
|
|
27
34
|
pip install --pre bootstack
|
|
28
35
|
```
|
|
29
36
|
|
|
37
|
+
## See it
|
|
38
|
+
|
|
39
|
+
The widget gallery is a single-window tour of everything bootstack ships — every widget, theme switcher, accent variants, and layout containers. Fastest way to see the framework in action without writing a line of code:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
bootstack gallery
|
|
43
|
+
```
|
|
44
|
+
|
|
30
45
|
## Quick Start
|
|
31
46
|
|
|
32
47
|
```python
|
|
@@ -102,7 +117,7 @@ bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))
|
|
|
102
117
|
## Features
|
|
103
118
|
|
|
104
119
|
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, frameless windows with custom chrome
|
|
105
|
-
- **60+ widgets** — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
|
|
120
|
+
- **60+ themed widgets** — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
|
|
106
121
|
- **9 dialogs** — Message, Query, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog, plus a `Dialog` base
|
|
107
122
|
- **Layout containers** — `PackFrame` and `GridFrame` for declarative layouts; `ScrollView`, `PanedWindow`, `Accordion`, `Card`, `Expander`
|
|
108
123
|
- **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost, link, text), consistent across widgets
|
|
@@ -134,6 +149,7 @@ bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))
|
|
|
134
149
|
bootstack ships with an optional CLI for scaffolding, running, and packaging applications:
|
|
135
150
|
|
|
136
151
|
```bash
|
|
152
|
+
bootstack gallery # Launch the interactive widget gallery
|
|
137
153
|
bootstack start MyApp # Create a new project (basic template)
|
|
138
154
|
bootstack start MyApp --template appshell # ...or with sidebar navigation
|
|
139
155
|
bootstack run # Run the app defined in the project config
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "bootstack"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.0a5"
|
|
8
8
|
description = "A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -82,7 +82,7 @@ where = ["src"]
|
|
|
82
82
|
]
|
|
83
83
|
|
|
84
84
|
[tool.bumpversion]
|
|
85
|
-
current_version = "0.1.
|
|
85
|
+
current_version = "0.1.0a5"
|
|
86
86
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
|
|
87
87
|
serialize = [
|
|
88
88
|
"{major}.{minor}.{patch}{pre}{pre_n}",
|
|
Binary file
|
|
Binary file
|
|
@@ -19,7 +19,7 @@ Usage:
|
|
|
19
19
|
bootstack add i18n Add i18n support
|
|
20
20
|
bootstack list themes List available themes
|
|
21
21
|
bootstack doctor Diagnose project and environment health
|
|
22
|
-
bootstack
|
|
22
|
+
bootstack gallery Launch the widget gallery
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
25
|
from __future__ import annotations
|
|
@@ -49,7 +49,7 @@ Examples:
|
|
|
49
49
|
bootstack add view SettingsView Add a new view
|
|
50
50
|
bootstack list themes List available themes
|
|
51
51
|
bootstack doctor Diagnose project and environment health
|
|
52
|
-
bootstack
|
|
52
|
+
bootstack gallery Launch the widget gallery
|
|
53
53
|
|
|
54
54
|
For more information on a command:
|
|
55
55
|
bootstack <command> --help
|
|
@@ -83,10 +83,17 @@ For more information on a command:
|
|
|
83
83
|
list_cmd.add_parser(subparsers)
|
|
84
84
|
doctor.add_parser(subparsers)
|
|
85
85
|
|
|
86
|
-
#
|
|
86
|
+
# Gallery command
|
|
87
|
+
gallery_parser = subparsers.add_parser(
|
|
88
|
+
"gallery",
|
|
89
|
+
help="Launch the widget gallery",
|
|
90
|
+
)
|
|
91
|
+
gallery_parser.set_defaults(func=lambda args: run_demo())
|
|
92
|
+
|
|
93
|
+
# demo is kept as a backwards-compatible alias
|
|
87
94
|
demo_parser = subparsers.add_parser(
|
|
88
95
|
"demo",
|
|
89
|
-
help=
|
|
96
|
+
help=argparse.SUPPRESS,
|
|
90
97
|
)
|
|
91
98
|
demo_parser.set_defaults(func=lambda args: run_demo())
|
|
92
99
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
2
|
+
Widget Gallery
|
|
3
3
|
|
|
4
4
|
An AppShell-based showcase of bootstack widgets, organized by category
|
|
5
5
|
to mirror the documentation structure. Each sidebar item opens a page
|
|
@@ -1170,7 +1170,7 @@ def _build_theme_page(page):
|
|
|
1170
1170
|
def run_demo():
|
|
1171
1171
|
"""Run the bootstack widget gallery as an AppShell application."""
|
|
1172
1172
|
shell = bs.AppShell(
|
|
1173
|
-
title="
|
|
1173
|
+
title="Widget Gallery",
|
|
1174
1174
|
theme="bootstrap-light",
|
|
1175
1175
|
size=(1100, 750),
|
|
1176
1176
|
)
|
|
@@ -1261,7 +1261,7 @@ def setup_demo(master):
|
|
|
1261
1261
|
|
|
1262
1262
|
bs.Label(
|
|
1263
1263
|
master,
|
|
1264
|
-
text="Use 'bootstack
|
|
1264
|
+
text="Use 'bootstack gallery' to launch the Widget Gallery.",
|
|
1265
1265
|
font="heading-lg",
|
|
1266
1266
|
padding=40,
|
|
1267
1267
|
).pack(fill=BOTH, expand=YES)
|
|
@@ -540,6 +540,16 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
|
|
|
540
540
|
if self._hdpi:
|
|
541
541
|
enable_high_dpi_awareness()
|
|
542
542
|
|
|
543
|
+
# Tell Windows this is a distinct app so the taskbar uses our icon
|
|
544
|
+
# instead of the generic python.exe icon.
|
|
545
|
+
if sys.platform == 'win32':
|
|
546
|
+
try:
|
|
547
|
+
import ctypes
|
|
548
|
+
app_id = f"bootstack.{(self.settings.app_name or 'app').lower().replace(' ', '.')}"
|
|
549
|
+
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(app_id)
|
|
550
|
+
except Exception:
|
|
551
|
+
pass
|
|
552
|
+
|
|
543
553
|
# Initialize Tk
|
|
544
554
|
tkinter.Tk.__init__(self, **kwargs)
|
|
545
555
|
self.withdraw() # hide immediately until ready to show.
|
|
@@ -18,6 +18,7 @@ The BaseWindow mixin provides:
|
|
|
18
18
|
|
|
19
19
|
from __future__ import annotations
|
|
20
20
|
|
|
21
|
+
import sys
|
|
21
22
|
import tkinter
|
|
22
23
|
from typing import Literal, Optional, Tuple, Callable, Any
|
|
23
24
|
|
|
@@ -185,9 +186,25 @@ class BaseWindow:
|
|
|
185
186
|
import pywinstyles
|
|
186
187
|
pywinstyles.apply_style(self, window_style)
|
|
187
188
|
self._window_style_applied = True
|
|
189
|
+
self.after(0, self._update_chrome_color)
|
|
190
|
+
self.bind('<<ThemeChanged>>', lambda e: self.after(0, self._update_chrome_color), add='+')
|
|
188
191
|
except Exception:
|
|
189
192
|
pass
|
|
190
193
|
|
|
194
|
+
def _update_chrome_color(self) -> None:
|
|
195
|
+
if getattr(self, '_updating_chrome', False):
|
|
196
|
+
return
|
|
197
|
+
self._updating_chrome = True
|
|
198
|
+
try:
|
|
199
|
+
import pywinstyles
|
|
200
|
+
from bootstack.style.style import get_theme_provider
|
|
201
|
+
color = get_theme_provider().colors['chrome']
|
|
202
|
+
pywinstyles.change_header_color(self, color)
|
|
203
|
+
except Exception:
|
|
204
|
+
pass
|
|
205
|
+
finally:
|
|
206
|
+
self._updating_chrome = False
|
|
207
|
+
|
|
191
208
|
def _setup_alpha(self, alpha: float) -> None:
|
|
192
209
|
"""Configure window alpha transparency in a platform-aware manner.
|
|
193
210
|
|
|
@@ -229,40 +246,48 @@ class BaseWindow:
|
|
|
229
246
|
On failure to load custom icon, falls back to default icon if enabled.
|
|
230
247
|
"""
|
|
231
248
|
if iconphoto is None:
|
|
232
|
-
# No custom icon provided - use default if enabled
|
|
233
249
|
if default_icon_enabled:
|
|
234
250
|
try:
|
|
235
251
|
from pathlib import Path
|
|
236
252
|
import bootstack
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
253
|
+
assets = Path(bootstack.__file__).parent / 'assets'
|
|
254
|
+
if sys.platform == 'win32':
|
|
255
|
+
ico = assets / 'bootstack-light.ico'
|
|
256
|
+
if not ico.exists():
|
|
257
|
+
ico = assets / 'bootstack.ico'
|
|
258
|
+
self.wm_iconbitmap(str(ico))
|
|
259
|
+
else:
|
|
260
|
+
self._icon = tkinter.PhotoImage(file=str(assets / 'bootstack.png'), master=self)
|
|
261
|
+
self.iconphoto(True, self._icon)
|
|
240
262
|
except (ImportError, FileNotFoundError, tkinter.TclError, Exception):
|
|
241
|
-
# Icon file not available or failed to load - silently continue
|
|
242
263
|
pass
|
|
243
264
|
return
|
|
244
265
|
|
|
245
266
|
# User provided a custom icon
|
|
246
267
|
try:
|
|
247
|
-
# Check if it's already a PhotoImage object
|
|
248
268
|
if isinstance(iconphoto, tkinter.PhotoImage):
|
|
249
269
|
self._icon = iconphoto
|
|
250
270
|
self.iconphoto(True, self._icon)
|
|
271
|
+
elif str(iconphoto).lower().endswith('.ico'):
|
|
272
|
+
self.wm_iconbitmap(str(iconphoto))
|
|
251
273
|
else:
|
|
252
|
-
# Assume it's a file path
|
|
253
274
|
self._icon = tkinter.PhotoImage(file=iconphoto, master=self)
|
|
254
275
|
self.iconphoto(True, self._icon)
|
|
255
276
|
except (tkinter.TclError, Exception) as e:
|
|
256
|
-
# Failed to load user icon
|
|
257
277
|
print(f'Failed to load icon: {iconphoto} - {e}')
|
|
258
278
|
if default_icon_enabled:
|
|
259
|
-
# Fall back to default bootstack.png
|
|
260
279
|
try:
|
|
261
280
|
from pathlib import Path
|
|
262
281
|
import bootstack
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
282
|
+
assets = Path(bootstack.__file__).parent / 'assets'
|
|
283
|
+
if sys.platform == 'win32':
|
|
284
|
+
ico = assets / 'bootstack-light.ico'
|
|
285
|
+
if not ico.exists():
|
|
286
|
+
ico = assets / 'bootstack.ico'
|
|
287
|
+
self.wm_iconbitmap(str(ico))
|
|
288
|
+
else:
|
|
289
|
+
self._icon = tkinter.PhotoImage(file=str(assets / 'bootstack.png'), master=self)
|
|
290
|
+
self.iconphoto(True, self._icon)
|
|
266
291
|
except (ImportError, FileNotFoundError, tkinter.TclError, Exception):
|
|
267
292
|
pass
|
|
268
293
|
|
|
@@ -224,11 +224,18 @@ import bootstack.runtime.toplevel >>> parent = tkinter.Tk()
|
|
|
224
224
|
w_width = window.winfo_reqwidth()
|
|
225
225
|
w_height = window.winfo_reqheight()
|
|
226
226
|
|
|
227
|
-
# Use
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
227
|
+
# Use the monitor containing the proposed position when screeninfo is
|
|
228
|
+
# available — on Windows, winfo_vroot* only covers the primary monitor,
|
|
229
|
+
# so clamping with it moves windows that legitimately belong on a
|
|
230
|
+
# secondary monitor back onto the primary.
|
|
231
|
+
monitor = WindowPositioning._get_monitor_at_point(x, y)
|
|
232
|
+
if monitor:
|
|
233
|
+
screen_x0, screen_y0, screen_width, screen_height = monitor
|
|
234
|
+
else:
|
|
235
|
+
screen_x0 = window.winfo_vrootx()
|
|
236
|
+
screen_y0 = window.winfo_vrooty()
|
|
237
|
+
screen_width = window.winfo_vrootwidth()
|
|
238
|
+
screen_height = window.winfo_vrootheight()
|
|
232
239
|
|
|
233
240
|
# Calculate screen boundaries
|
|
234
241
|
screen_x1 = screen_x0 + screen_width
|
|
@@ -311,7 +311,14 @@ class Toast:
|
|
|
311
311
|
|
|
312
312
|
# ------ Positioning -------
|
|
313
313
|
|
|
314
|
-
#
|
|
314
|
+
# Deiconify off-screen first so the geometry manager runs a full
|
|
315
|
+
# layout pass on a mapped window. winfo_height() returns 1 on a
|
|
316
|
+
# withdrawn window, causing the toast to be placed with ~0 height
|
|
317
|
+
# and therefore positioned flush against the screen edge.
|
|
318
|
+
top.deiconify()
|
|
319
|
+
top.geometry(
|
|
320
|
+
f"+{top.winfo_screenwidth() * 2}+{top.winfo_screenheight() * 2}"
|
|
321
|
+
)
|
|
315
322
|
top.update_idletasks()
|
|
316
323
|
|
|
317
324
|
# Apply positioning using WindowPositioning utilities
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bootstack
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0a5
|
|
4
4
|
Summary: A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box.
|
|
5
5
|
Author-email: Israel Dryer <israel.dryer@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,9 +44,16 @@ Dynamic: license-file
|
|
|
44
44
|

|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
**
|
|
47
|
+
> **From the maker of [ttkbootstrap](https://github.com/israel-dryer/ttkbootstrap).**
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
**bootstack** is a batteries-included desktop framework for Python, built on Tk.
|
|
50
|
+
|
|
51
|
+
60+ themed widgets. Reactive state. Declarative layout. Built-in icons and localization. A CLI that scaffolds, builds, and ships. Everything ttkbootstrap was missing.
|
|
52
|
+
|
|
53
|
+
<p align="center">
|
|
54
|
+
<img src="docs/assets/hero-demo-app-light.png" width="49%" alt="bootstack Data Analysis Workbench — light theme">
|
|
55
|
+
<img src="docs/assets/hero-demo-app-dark.png" width="49%" alt="bootstack Data Analysis Workbench — dark theme">
|
|
56
|
+
</p>
|
|
50
57
|
|
|
51
58
|
> **Active alpha.** APIs may change before the first stable release.
|
|
52
59
|
> See the [documentation](https://bootstack.org) for guides and the API reference.
|
|
@@ -61,6 +68,14 @@ bootstack is currently in **active alpha**, so the `--pre` flag is required to o
|
|
|
61
68
|
pip install --pre bootstack
|
|
62
69
|
```
|
|
63
70
|
|
|
71
|
+
## See it
|
|
72
|
+
|
|
73
|
+
The widget gallery is a single-window tour of everything bootstack ships — every widget, theme switcher, accent variants, and layout containers. Fastest way to see the framework in action without writing a line of code:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
bootstack gallery
|
|
77
|
+
```
|
|
78
|
+
|
|
64
79
|
## Quick Start
|
|
65
80
|
|
|
66
81
|
```python
|
|
@@ -136,7 +151,7 @@ bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))
|
|
|
136
151
|
## Features
|
|
137
152
|
|
|
138
153
|
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, frameless windows with custom chrome
|
|
139
|
-
- **60+ widgets** — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
|
|
154
|
+
- **60+ themed widgets** — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
|
|
140
155
|
- **9 dialogs** — Message, Query, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog, plus a `Dialog` base
|
|
141
156
|
- **Layout containers** — `PackFrame` and `GridFrame` for declarative layouts; `ScrollView`, `PanedWindow`, `Accordion`, `Card`, `Expander`
|
|
142
157
|
- **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost, link, text), consistent across widgets
|
|
@@ -168,6 +183,7 @@ bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))
|
|
|
168
183
|
bootstack ships with an optional CLI for scaffolding, running, and packaging applications:
|
|
169
184
|
|
|
170
185
|
```bash
|
|
186
|
+
bootstack gallery # Launch the interactive widget gallery
|
|
171
187
|
bootstack start MyApp # Create a new project (basic template)
|
|
172
188
|
bootstack start MyApp --template appshell # ...or with sidebar navigation
|
|
173
189
|
bootstack run # Run the app defined in the project config
|
|
@@ -25,6 +25,8 @@ src/bootstack/api/style.py
|
|
|
25
25
|
src/bootstack/api/utils.py
|
|
26
26
|
src/bootstack/api/widgets.py
|
|
27
27
|
src/bootstack/assets/__init__.py
|
|
28
|
+
src/bootstack/assets/bootstack-dark.ico
|
|
29
|
+
src/bootstack/assets/bootstack-light.ico
|
|
28
30
|
src/bootstack/assets/bootstack-transparent.png
|
|
29
31
|
src/bootstack/assets/bootstack.ico
|
|
30
32
|
src/bootstack/assets/bootstack.png
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/checkbox-indeterminate.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/checkbox-unchecked.png
RENAMED
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-after-compact.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-after-default.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-before-compact.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/input-before-default.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/list-item-separated.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/nav-button-compact.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/nav-button-default.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/nav-icon-button-compact.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/nav-icon-button-default.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/notebook-client-border.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/notebook-tab-active.png
RENAMED
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/notebook-tab-normal.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/progress-bar-solid.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/scrollbar-horizontal.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/scrollbar-vertical.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/slider-handle-focus.png
RENAMED
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/slider-track-horizontal.png
RENAMED
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/slider-track-vertical.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.1.0a3 → bootstack-0.1.0a5}/src/bootstack/assets/elements/tabs-bar-horizontal.png
RENAMED
|
File without changes
|