bootstack 0.1.0a15__tar.gz → 0.1.0a16__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.0a15/src/bootstack.egg-info → bootstack-0.1.0a16}/PKG-INFO +3 -3
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/README.md +2 -2
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/pyproject.toml +2 -2
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/__init__.py +2 -1
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/app.py +11 -1
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/toplevel.py +23 -3
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/utility.py +21 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/events/__init__.py +5 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/events/_payloads.py +18 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/images.py +3 -2
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/menubutton.py +3 -1
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/utils.py +12 -3
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tooltip.py +15 -1
- bootstack-0.1.0a16/src/bootstack/widgets/splash.py +367 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/tooltip.py +12 -2
- {bootstack-0.1.0a15 → bootstack-0.1.0a16/src/bootstack.egg-info}/PKG-INFO +3 -3
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/SOURCES.txt +2 -0
- bootstack-0.1.0a16/tests/test_events_doc_coverage.py +32 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_images.py +27 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_public_surface.py +1 -1
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/LICENSE +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/MANIFEST.in +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/NOTICE +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/setup.cfg +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/__main__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/after.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/bind.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/bindtags.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/busy.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/clipboard.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/focus.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/grab.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/grid.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/localization.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/pack.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/place.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/selection.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/signals.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/winfo.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/colorutils.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/exceptions.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/images.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/ttk_state.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/widget.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/paths.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/publisher.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/variables.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/base_window.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/events.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/shortcuts.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/tk_patch.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/visual_focus.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/window_utilities.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/bootstack.ico +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/bootstack.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/badge-pill.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/badge-square.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/button-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/button-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/card.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/field.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-addon-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/list-item-separated.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/list-item.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/listrow-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/listrow-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/manifest.toml +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/menu-item.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/navitem-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/navitem-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/radiobutton.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-handle.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-track-h.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-track-v.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/switch-off.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/switch-on.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/tab-h.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/tab-v.png +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/icons/glyphmap.json +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/icons/icon_metrics.json +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/__main__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/add.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/appicon.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/build.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/config.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/demo.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/doctor.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/icons.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/promote.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/pyinstaller.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/run.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/start.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/templates/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/clipboard.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/constants.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/README.md +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/_observable.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/base.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/file_source.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/memory_source.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/query.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/readers.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/sqlite_source.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/types.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/writers.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/colorchooser.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/datedialog.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/dialog.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/filterdialog.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/fontdialog.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/formdialog.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/message.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/query.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/errors.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/events/_event.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/events/_subscription.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/README.md +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/catalog.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/intl_format.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/msgcat.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/specs.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/py.typed +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/scheduling/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/scheduling/_schedule.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/shortcuts.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/README.md +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/integration.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/signal.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/types.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/store.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/streams/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/streams/_stream.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/badge.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/button.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/buttongroup.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/calendar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/checkbutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/combobox.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/contextmenu.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/entry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/expander.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/field.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/frame.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/label.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/labelframe.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/listview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/menubar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/panedwindow.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/progressbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/radiobutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/scale.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/scrollbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/separator.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/sidenav.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/sizegrip.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/spinbox.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/switch.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/tabitem.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/togglegroup.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/toolbutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/tooltip.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/treeview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders_tk/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders_tk/defaults.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/element.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/fonts.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_base.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_mixed.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_tk.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_ttk.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_resolver.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/theme.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/theme_provider.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/themes/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/tk_patch.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/token_maps.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/types.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/typography.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/utility.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/types.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/validation/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/validation/types.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/validation/validation_result.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/validation/validation_rules.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/app_config.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/base.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/container.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/context.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/events.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/field_mixin.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/image_binding.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/navmodel.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/options.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/selection_group.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/window_controls.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/window_menu.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/textentry_part.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/avatar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/buttongroup.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/calendar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/carousel.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/chart.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/compositeframe.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/contextmenu.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/field.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/form.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/gallery.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/listview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/model.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/meter.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/pagestack.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/passwordentry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/pathentry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/picture.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/radiogroup.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrollview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/content_host.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/layout.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/providers.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/shell.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/workspace.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/_shared.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/slider.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/spinnerentry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabs.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/core.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/filter.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/timeentry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/togglegroup.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toolbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/font_mixin.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/_menubutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/combobox.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/flexframe.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/frame.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/gridframe.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/optionmenu.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/packframe.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/app.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/appshell.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/avatar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/boolean_controls.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/button.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/buttongroup.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/calendar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/card.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/carousel.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/chart.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/codeeditor.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/contextmenu.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/datatable.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/datefield.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/divider.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/expander.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/form.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/gallery.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/gauge.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/grid.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/groupbox.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/label.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/listview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/menubutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/numberfield.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/pagestack.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/passwordfield.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/pathfield.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/picture.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/progressbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/radio_variants.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/radiogroup.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/scrollbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/scrollview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/select.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/selectbutton.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/sidebar_toggle.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/sizegrip.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/slider.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/spinbox.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/spinnerfield.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/splitview.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/stacks.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/statusbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/tabs.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/textarea.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/textfield.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/theme_toggle.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/timefield.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/toast.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/togglegroup.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/toolbar.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/tree.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/types.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/window.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/dependency_links.txt +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/entry_points.txt +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/requires.txt +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/top_level.txt +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_images_gui.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_intl_format.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_navmodel.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_store.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_theme_from_existing.py +0 -0
- {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_validation_rules.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.0a16
|
|
4
4
|
Summary: From idea to a shipped desktop app, fast — a declarative, reactive, batteries-included Python UI framework with 60+ widgets, semantic theming, and built-in packaging.
|
|
5
5
|
Author-email: Israel Dryer <israel.dryer@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -223,7 +223,7 @@ app.run()
|
|
|
223
223
|
|
|
224
224
|
## Features
|
|
225
225
|
|
|
226
|
-
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, undecorated windows with custom chrome
|
|
226
|
+
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, `Splash` for a startup intro screen, undecorated windows with custom chrome
|
|
227
227
|
- **60+ themed widgets** — primitives plus higher-level composites (DataTable, Tree, ListView, Calendar, DateField, Form, Gauge, ToggleGroup, PageStack, Carousel, Tooltip, and more)
|
|
228
228
|
- **Dialogs and messages** — `alert()` / `confirm()` / `ask_*()` prompts and `FormDialog` / `FontDialog` / `FilterDialog`, plus non-blocking `toast()`, `Notification`, and `Snackbar` surfaces
|
|
229
229
|
- **Layout containers** — `Column`, `Row`, `Grid`, and `Spacer` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Divider`
|
|
@@ -248,7 +248,7 @@ app.run()
|
|
|
248
248
|
| **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
|
|
249
249
|
| **Media** | Avatar, Picture, Gallery, Carousel |
|
|
250
250
|
| **Layout** | Column, Row, Grid, Spacer, Card, GroupBox, SplitView, ScrollView, Accordion, Divider |
|
|
251
|
-
| **Navigation** | AppShell, Workbench, Window, StatusBar, Tabs, PageStack |
|
|
251
|
+
| **Navigation** | AppShell, Workbench, Window, Splash, StatusBar, Tabs, PageStack |
|
|
252
252
|
| **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
|
|
253
253
|
| **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
|
|
254
254
|
| **Forms** | Form, with field-level validation |
|
|
@@ -173,7 +173,7 @@ app.run()
|
|
|
173
173
|
|
|
174
174
|
## Features
|
|
175
175
|
|
|
176
|
-
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, undecorated windows with custom chrome
|
|
176
|
+
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, `Splash` for a startup intro screen, undecorated windows with custom chrome
|
|
177
177
|
- **60+ themed widgets** — primitives plus higher-level composites (DataTable, Tree, ListView, Calendar, DateField, Form, Gauge, ToggleGroup, PageStack, Carousel, Tooltip, and more)
|
|
178
178
|
- **Dialogs and messages** — `alert()` / `confirm()` / `ask_*()` prompts and `FormDialog` / `FontDialog` / `FilterDialog`, plus non-blocking `toast()`, `Notification`, and `Snackbar` surfaces
|
|
179
179
|
- **Layout containers** — `Column`, `Row`, `Grid`, and `Spacer` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Divider`
|
|
@@ -198,7 +198,7 @@ app.run()
|
|
|
198
198
|
| **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
|
|
199
199
|
| **Media** | Avatar, Picture, Gallery, Carousel |
|
|
200
200
|
| **Layout** | Column, Row, Grid, Spacer, Card, GroupBox, SplitView, ScrollView, Accordion, Divider |
|
|
201
|
-
| **Navigation** | AppShell, Workbench, Window, StatusBar, Tabs, PageStack |
|
|
201
|
+
| **Navigation** | AppShell, Workbench, Window, Splash, StatusBar, Tabs, PageStack |
|
|
202
202
|
| **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
|
|
203
203
|
| **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
|
|
204
204
|
| **Forms** | Form, with field-level validation |
|
|
@@ -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.0a16"
|
|
8
8
|
description = "From idea to a shipped desktop app, fast — a declarative, reactive, batteries-included Python UI framework with 60+ widgets, semantic theming, and built-in packaging."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -109,7 +109,7 @@ where = ["src"]
|
|
|
109
109
|
]
|
|
110
110
|
|
|
111
111
|
[tool.bumpversion]
|
|
112
|
-
current_version = "0.1.
|
|
112
|
+
current_version = "0.1.0a16"
|
|
113
113
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
|
|
114
114
|
serialize = [
|
|
115
115
|
"{major}.{minor}.{patch}{pre}{pre_n}",
|
|
@@ -60,6 +60,7 @@ from bootstack.dialogs import (
|
|
|
60
60
|
from bootstack.widgets.app import App
|
|
61
61
|
from bootstack.widgets.appshell import AppShell, Workbench
|
|
62
62
|
from bootstack.widgets.window import Window
|
|
63
|
+
from bootstack.widgets.splash import Splash
|
|
63
64
|
|
|
64
65
|
# ── Public widget layer ───────────────────────────────────────────────────────
|
|
65
66
|
from bootstack.widgets.stacks import Row, Column, Spacer
|
|
@@ -130,7 +131,7 @@ __all__ = [
|
|
|
130
131
|
"ask_date_range", "ask_item", "ask_color", "ask_font", "ask_filter",
|
|
131
132
|
"ask_save_file", "ask_open_file", "ask_open_files", "ask_directory",
|
|
132
133
|
# Application & windows
|
|
133
|
-
"App", "AppShell", "Workbench", "Window",
|
|
134
|
+
"App", "AppShell", "Workbench", "Window", "Splash",
|
|
134
135
|
# Layout
|
|
135
136
|
"Row", "Column", "Spacer", "Grid", "Card", "GroupBox", "Divider", "ScrollView",
|
|
136
137
|
"SplitView", "SplitPane", "Accordion", "AccordionSection",
|
|
@@ -630,6 +630,10 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
|
|
|
630
630
|
if self._on_close_kwarg is not None:
|
|
631
631
|
self.add_close_handler(self._on_close_kwarg)
|
|
632
632
|
|
|
633
|
+
# A registered intro splash (bs.Splash), or None. Set by the splash on
|
|
634
|
+
# construction; read at reveal time to defer the app's own appearance.
|
|
635
|
+
self._splash: Any = None
|
|
636
|
+
|
|
633
637
|
def mainloop(self, n=0) -> None:
|
|
634
638
|
"""Start the application event loop
|
|
635
639
|
|
|
@@ -639,7 +643,13 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
|
|
|
639
643
|
"""
|
|
640
644
|
if self._center_on_screen:
|
|
641
645
|
self.place_window_center()
|
|
642
|
-
self
|
|
646
|
+
splash = getattr(self, "_splash", None)
|
|
647
|
+
if splash is not None and splash.is_showing:
|
|
648
|
+
# An intro splash is up — defer the app's reveal until it dismisses,
|
|
649
|
+
# then reveal via this callback (see Splash._notify_app_ready).
|
|
650
|
+
splash._notify_app_ready(self.show)
|
|
651
|
+
else:
|
|
652
|
+
self.show()
|
|
643
653
|
super().mainloop(n=n)
|
|
644
654
|
|
|
645
655
|
def _do_close(self) -> None:
|
|
@@ -62,7 +62,13 @@ class Toplevel(BaseWindow, WidgetCapabilitiesMixin, tkinter.Toplevel):
|
|
|
62
62
|
resizable: Whether the user may resize the window as (x, y).
|
|
63
63
|
transient: Mark this window as transient for the given master.
|
|
64
64
|
overrideredirect: If True, instruct the window manager to ignore this window.
|
|
65
|
-
windowtype:
|
|
65
|
+
windowtype: Request a native window type, resolved per platform from a
|
|
66
|
+
single switch. Values: `'splash'`, `'tooltip'`, `'dock'`, `'utility'`.
|
|
67
|
+
On X11 it sets `-type`; on macOS it maps to a `MacWindowStyle`; on
|
|
68
|
+
Windows the chromeless types (`'splash'`/`'tooltip'`/`'dock'`) resolve
|
|
69
|
+
to override-redirect (borderless, no taskbar button) and `'utility'`
|
|
70
|
+
resolves to a tool window. The caller does not also need to pass
|
|
71
|
+
`overrideredirect=True` to get a chromeless window on Windows.
|
|
66
72
|
topmost: If True, keep this window above others (`-topmost`).
|
|
67
73
|
toolwindow: On Windows, request a toolwindow style (`-toolwindow`).
|
|
68
74
|
alpha: On Windows, the window alpha transparency (0.0–1.0) via `-alpha`.
|
|
@@ -124,6 +130,20 @@ class Toplevel(BaseWindow, WidgetCapabilitiesMixin, tkinter.Toplevel):
|
|
|
124
130
|
except tkinter.TclError:
|
|
125
131
|
pass
|
|
126
132
|
|
|
133
|
+
# Windows has no native window-type attribute, so translate windowtype
|
|
134
|
+
# to the matching primitive: the chromeless types resolve to
|
|
135
|
+
# override-redirect (borderless + no taskbar/Alt-Tab button), and
|
|
136
|
+
# 'utility' resolves to a tool window (minimal chrome). One switch then
|
|
137
|
+
# yields the right native window on all three platforms. (On Aqua the
|
|
138
|
+
# overrideredirect call is a no-op — MacWindowStyle handled it above.)
|
|
139
|
+
_effective_overrideredirect = overrideredirect
|
|
140
|
+
_effective_toolwindow = toolwindow
|
|
141
|
+
if windowtype is not None and self.winsys == "win32":
|
|
142
|
+
if windowtype in ("splash", "tooltip", "dock"):
|
|
143
|
+
_effective_overrideredirect = True
|
|
144
|
+
elif windowtype == "utility":
|
|
145
|
+
_effective_toolwindow = True
|
|
146
|
+
|
|
127
147
|
# Setup icon (use default bootstack icon if no icon provided)
|
|
128
148
|
self._setup_icon(icon, default_icon_enabled=True)
|
|
129
149
|
|
|
@@ -169,7 +189,7 @@ class Toplevel(BaseWindow, WidgetCapabilitiesMixin, tkinter.Toplevel):
|
|
|
169
189
|
maxsize=maxsize,
|
|
170
190
|
resizable=resizable,
|
|
171
191
|
transient=_resolved_transient,
|
|
172
|
-
overrideredirect=
|
|
192
|
+
overrideredirect=_effective_overrideredirect,
|
|
173
193
|
alpha=alpha,
|
|
174
194
|
window_style=window_style,
|
|
175
195
|
center_on_parent=_center_parent,
|
|
@@ -188,7 +208,7 @@ class Toplevel(BaseWindow, WidgetCapabilitiesMixin, tkinter.Toplevel):
|
|
|
188
208
|
if topmost:
|
|
189
209
|
self.attributes("-topmost", 1)
|
|
190
210
|
|
|
191
|
-
if
|
|
211
|
+
if _effective_toolwindow and self.winsys == "win32":
|
|
192
212
|
self.attributes("-toolwindow", 1)
|
|
193
213
|
|
|
194
214
|
# Register on_close handler
|
|
@@ -247,6 +247,27 @@ def scale_padding_floor(base: int) -> int:
|
|
|
247
247
|
return max(base, round(base * _ScalingState.get_ui_scale()))
|
|
248
248
|
|
|
249
249
|
|
|
250
|
+
def scale_icon_size(base: int) -> int:
|
|
251
|
+
"""Scale a logical icon size to physical pixels for the current DPI.
|
|
252
|
+
|
|
253
|
+
Icons are authored at logical (96-DPI) sizes. On a higher-DPI display the
|
|
254
|
+
surrounding fonts and layout scale up via Tk scaling, so an icon rendered at
|
|
255
|
+
its literal logical size lands too small for its container and gets resampled
|
|
256
|
+
by the display, reading as soft (#267). Rendering at the physical size makes
|
|
257
|
+
the glyph land 1:1 in the scaled layout, so it stays crisp.
|
|
258
|
+
|
|
259
|
+
Floors at `base` (mirrors `scale_padding_floor`) so an uninitialized scale
|
|
260
|
+
state or a sub-baseline display never renders an icon smaller than requested.
|
|
261
|
+
|
|
262
|
+
Args:
|
|
263
|
+
base: The logical icon size in pixels at standard (96-DPI) scaling.
|
|
264
|
+
|
|
265
|
+
Returns:
|
|
266
|
+
The DPI-scaled size, at least `base`.
|
|
267
|
+
"""
|
|
268
|
+
return max(base, round(base * _ScalingState.get_ui_scale()))
|
|
269
|
+
|
|
270
|
+
|
|
250
271
|
def scale_size(widget=None, size=None):
|
|
251
272
|
"""Scale the size based on the scaling factor of tkinter.
|
|
252
273
|
This is used most frequently to adjust the assets for
|
|
@@ -37,6 +37,8 @@ from bootstack.events._payloads import (
|
|
|
37
37
|
SelectionEvent,
|
|
38
38
|
SliderCommitEvent,
|
|
39
39
|
SliderEvent,
|
|
40
|
+
SplashDismissEvent,
|
|
41
|
+
SplashDismissReason,
|
|
40
42
|
TabActivateEvent,
|
|
41
43
|
TabChangeEvent,
|
|
42
44
|
TabCloseEvent,
|
|
@@ -103,4 +105,7 @@ __all__ = [
|
|
|
103
105
|
"SashMoveEvent",
|
|
104
106
|
# Payloads — scroll view
|
|
105
107
|
"ScrollEvent",
|
|
108
|
+
# Payloads — splash
|
|
109
|
+
"SplashDismissEvent",
|
|
110
|
+
"SplashDismissReason",
|
|
106
111
|
]
|
|
@@ -519,3 +519,21 @@ class ScrollEvent:
|
|
|
519
519
|
|
|
520
520
|
x: float = 0.0
|
|
521
521
|
"""Horizontal scroll position — 0.0 (left) to 1.0 (right)."""
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
# ---------------------------------------------------------------------------
|
|
525
|
+
# Splash
|
|
526
|
+
# ---------------------------------------------------------------------------
|
|
527
|
+
|
|
528
|
+
SplashDismissReason = Literal["ready", "timer", "manual", "skip"]
|
|
529
|
+
"""Why a splash screen dismissed — `'ready'` (the app finished building),
|
|
530
|
+
`'timer'` (its timed duration elapsed), `'manual'` (an explicit `dismiss()`),
|
|
531
|
+
or `'skip'` (the user clicked or pressed Escape)."""
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
@dataclass(frozen=True, slots=True)
|
|
535
|
+
class SplashDismissEvent:
|
|
536
|
+
"""Fires when a splash screen begins dismissing."""
|
|
537
|
+
|
|
538
|
+
reason: SplashDismissReason = "ready"
|
|
539
|
+
"""Why the splash dismissed."""
|
|
@@ -37,6 +37,7 @@ from pathlib import Path
|
|
|
37
37
|
from typing import TYPE_CHECKING
|
|
38
38
|
|
|
39
39
|
from bootstack._core.images import _ImageService
|
|
40
|
+
from bootstack._runtime.utility import scale_icon_size
|
|
40
41
|
|
|
41
42
|
if TYPE_CHECKING:
|
|
42
43
|
from PIL.Image import Image as _PILImage
|
|
@@ -248,7 +249,7 @@ class Image:
|
|
|
248
249
|
# every scroll doesn't re-render the glyph each time; dropped by
|
|
249
250
|
# _invalidate() on a theme change so token colors re-render.
|
|
250
251
|
if self._icon_pil is None:
|
|
251
|
-
size = self._icon.size
|
|
252
|
+
size = scale_icon_size(self._icon.size)
|
|
252
253
|
size = size if size % 2 == 0 else size + 1
|
|
253
254
|
self._icon_pil = _ImageService._render_icon(
|
|
254
255
|
self._icon.name, size, self._resolve_icon_color()
|
|
@@ -285,7 +286,7 @@ class Image:
|
|
|
285
286
|
return self._photo
|
|
286
287
|
if self._icon is not None:
|
|
287
288
|
color = self._resolve_icon_color()
|
|
288
|
-
photo = _ImageService.get_icon(self._icon.name, self._icon.size, color)
|
|
289
|
+
photo = _ImageService.get_icon(self._icon.name, scale_icon_size(self._icon.size), color)
|
|
289
290
|
elif self._path is not None:
|
|
290
291
|
photo = _ImageService.open(self._path)
|
|
291
292
|
elif self._data is not None:
|
|
@@ -65,7 +65,9 @@ def _create_chevron_images(
|
|
|
65
65
|
icon_name: Name of the icon to use (default: 'caret-down-fill')
|
|
66
66
|
density: Button density ('default' or 'compact')
|
|
67
67
|
"""
|
|
68
|
-
|
|
68
|
+
# Scale to physical pixels for DPI (#267); matches the combobox/spinbox
|
|
69
|
+
# chevrons (which scale via entry_icon_size) so all chevrons render crisp.
|
|
70
|
+
size = b.scale(_chevron_size(density))
|
|
69
71
|
normal_chevron = _ImageService.get_icon(icon_name, size, foreground)
|
|
70
72
|
disabled_chevron = _ImageService.get_icon(icon_name, size, disabled)
|
|
71
73
|
|
|
@@ -211,12 +211,21 @@ def icon_size(icon_only: bool, density: str) -> int:
|
|
|
211
211
|
if icon_only:
|
|
212
212
|
return 20 if density != 'compact' else 17
|
|
213
213
|
|
|
214
|
-
#
|
|
215
|
-
# Different buffers compensate for y_bias effect per density
|
|
214
|
+
# Size the icon to the label's cap height (font ascent) for alignment.
|
|
215
|
+
# Different buffers compensate for y_bias effect per density.
|
|
216
216
|
font_name = 'caption' if density == 'compact' else 'body'
|
|
217
217
|
f = font.nametofont(font_name)
|
|
218
218
|
buffer = 4 if density == 'compact' else 3
|
|
219
|
-
|
|
219
|
+
ascent = f.metrics()['ascent'] + buffer
|
|
220
|
+
|
|
221
|
+
# The ascent is already in physical pixels (named Tk fonts render at the
|
|
222
|
+
# current scaling), but this value is handed to normalize_icon_spec, which
|
|
223
|
+
# re-applies DPI scaling. Return the logical size (divide the scaling back
|
|
224
|
+
# out) so the icon is scaled exactly once and tracks the cap height at any
|
|
225
|
+
# DPI, instead of double-scaling to ~ui_scale x too large (#305).
|
|
226
|
+
from bootstack._runtime.utility import _ScalingState
|
|
227
|
+
ui_scale = _ScalingState.get_ui_scale() or 1.0
|
|
228
|
+
return round(ascent / ui_scale)
|
|
220
229
|
|
|
221
230
|
|
|
222
231
|
def button_font(density: str) -> str:
|
|
@@ -130,8 +130,22 @@ class ToolTip:
|
|
|
130
130
|
# Tk events don't bubble, so hovering a child of a container target
|
|
131
131
|
# would otherwise never reach these bindings. Extend them across the
|
|
132
132
|
# subtree so the tip shows anywhere inside the container.
|
|
133
|
+
self.refresh_bindings()
|
|
134
|
+
|
|
135
|
+
def refresh_bindings(self) -> None:
|
|
136
|
+
"""Re-cover the target's subtree after children were added post-attach.
|
|
137
|
+
|
|
138
|
+
`propagate_target_bindings` only tags the descendants present when it
|
|
139
|
+
runs, so children added to a container target after the tooltip was
|
|
140
|
+
created are not covered until this is called again. The call is
|
|
141
|
+
idempotent — already-tagged descendants are left untouched.
|
|
142
|
+
"""
|
|
133
143
|
from bootstack._runtime.utility import propagate_target_bindings
|
|
134
|
-
|
|
144
|
+
try:
|
|
145
|
+
if self._widget.winfo_exists():
|
|
146
|
+
propagate_target_bindings(self._widget)
|
|
147
|
+
except tk.TclError:
|
|
148
|
+
pass
|
|
135
149
|
|
|
136
150
|
def destroy(self) -> None:
|
|
137
151
|
"""Cleanup tooltip resources and unbind all event handlers.
|