bootstack 0.1.0a12__tar.gz → 0.1.0a13__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.0a12/src/bootstack.egg-info → bootstack-0.1.0a13}/PKG-INFO +8 -1
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/README.md +2 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/pyproject.toml +13 -3
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/__init__.py +2 -1
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/app.py +26 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/visual_focus.py +12 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style.py +15 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/typography.py +15 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/__init__.py +1 -0
- bootstack-0.1.0a13/src/bootstack/widgets/_impl/composites/chart.py +883 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/scrollview.py +37 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +29 -23
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/slider/slider.py +33 -19
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +5 -4
- bootstack-0.1.0a13/src/bootstack/widgets/chart.py +302 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/codeeditor.py +41 -14
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/label.py +8 -1
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/textarea.py +17 -7
- {bootstack-0.1.0a12 → bootstack-0.1.0a13/src/bootstack.egg-info}/PKG-INFO +8 -1
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/SOURCES.txt +2 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/requires.txt +7 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_public_surface.py +1 -1
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/LICENSE +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/MANIFEST.in +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/NOTICE +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/setup.cfg +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/__main__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/after.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/bind.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/bindtags.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/busy.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/clipboard.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/focus.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/grab.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/grid.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/localization.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/pack.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/place.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/selection.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/signals.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/winfo.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/colorutils.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/exceptions.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/images.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/mixins/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/mixins/ttk_state.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/mixins/widget.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/paths.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/publisher.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/variables.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/base_window.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/events.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/shortcuts.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/tk_patch.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/toplevel.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/utility.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/window_utilities.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/bootstack.ico +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/bootstack.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/badge-pill.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/badge-square.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/button-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/button-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/card.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/field.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/input-addon-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/input-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/input-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/list-item-separated.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/list-item.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/listrow-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/listrow-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/manifest.toml +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/menu-item.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/navitem-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/navitem-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/radiobutton.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/slider-handle.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/slider-track-h.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/slider-track-v.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/switch-off.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/switch-on.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/tab-h.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/tab-v.png +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/icons/glyphmap.json +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/icons/icon_metrics.json +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/__main__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/add.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/appicon.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/build.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/config.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/demo.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/doctor.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/icons.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/promote.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/pyinstaller.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/run.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/start.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/templates/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/clipboard.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/constants.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/README.md +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/_observable.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/base.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/file_source.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/memory_source.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/query.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/readers.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/sqlite_source.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/types.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/writers.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/colorchooser.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/datedialog.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/dialog.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/filterdialog.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/fontdialog.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/formdialog.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/message.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/query.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/errors.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/events/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/events/_event.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/events/_payloads.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/events/_subscription.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/README.md +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/catalog.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/intl_format.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/msgcat.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/specs.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/images.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/py.typed +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/scheduling/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/scheduling/_schedule.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/shortcuts.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/README.md +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/integration.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/signal.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/types.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/store.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/streams/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/streams/_stream.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/badge.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/button.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/buttongroup.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/calendar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/checkbutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/combobox.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/contextmenu.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/entry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/expander.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/field.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/frame.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/label.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/labelframe.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/listview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/menubar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/menubutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/panedwindow.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/progressbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/radiobutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/scale.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/scrollbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/separator.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/sidenav.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/sizegrip.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/spinbox.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/switch.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/tabitem.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/togglegroup.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/toolbutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/tooltip.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/treeview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/utils.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders_tk/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders_tk/defaults.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/element.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/fonts.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_builder_base.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_builder_mixed.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_builder_tk.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_builder_ttk.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_resolver.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/theme.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/theme_provider.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/themes/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/tk_patch.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/token_maps.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/types.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/utility.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/types.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/validation/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/validation/types.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/validation/validation_result.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/validation/validation_rules.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/app_config.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/base.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/container.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/context.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/events.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/field_mixin.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/image_binding.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/navmodel.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/options.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/selection_group.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/window_controls.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/window_menu.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_parts/textentry_part.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/avatar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/buttongroup.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/calendar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/carousel.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/compositeframe.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/contextmenu.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/field.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/form.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/gallery.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/list/listview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/menu/model.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/meter.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/pagestack.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/passwordentry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/pathentry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/picture.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/radiogroup.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/content_host.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/layout.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/providers.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/shell.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/workspace.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/slider/_shared.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/spinnerentry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tabs/tabs.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/core.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/filter.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/timeentry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/togglegroup.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/toolbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tooltip.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/font_mixin.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/_menubutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/combobox.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/flexframe.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/frame.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/gridframe.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/optionmenu.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/packframe.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/app.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/appshell.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/avatar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/boolean_controls.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/button.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/buttongroup.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/calendar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/card.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/carousel.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/contextmenu.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/datatable.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/datefield.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/divider.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/expander.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/form.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/gallery.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/gauge.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/grid.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/groupbox.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/listview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/menubutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/numberfield.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/pagestack.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/passwordfield.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/pathfield.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/picture.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/progressbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/radio_variants.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/radiogroup.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/scrollbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/scrollview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/select.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/selectbutton.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/sidebar_toggle.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/sizegrip.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/slider.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/spinbox.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/spinnerfield.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/splitview.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/stacks.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/statusbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/tabs.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/textfield.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/theme_toggle.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/timefield.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/toast.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/togglegroup.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/toolbar.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/tooltip.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/tree.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/types.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/window.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/dependency_links.txt +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/entry_points.txt +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/top_level.txt +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_images.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_images_gui.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_intl_format.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_navmodel.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_store.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_theme_from_existing.py +0 -0
- {bootstack-0.1.0a12 → bootstack-0.1.0a13}/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.0a13
|
|
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
|
|
@@ -35,6 +35,11 @@ Requires-Dist: pyarrow>=14; extra == "parquet"
|
|
|
35
35
|
Provides-Extra: hdf5
|
|
36
36
|
Requires-Dist: pandas>=2; extra == "hdf5"
|
|
37
37
|
Requires-Dist: tables>=3.8; extra == "hdf5"
|
|
38
|
+
Provides-Extra: viz
|
|
39
|
+
Requires-Dist: matplotlib>=3.8; extra == "viz"
|
|
40
|
+
Provides-Extra: viz-seaborn
|
|
41
|
+
Requires-Dist: matplotlib>=3.8; extra == "viz-seaborn"
|
|
42
|
+
Requires-Dist: seaborn>=0.13; extra == "viz-seaborn"
|
|
38
43
|
Provides-Extra: docs
|
|
39
44
|
Requires-Dist: sphinx>=7.2; extra == "docs"
|
|
40
45
|
Requires-Dist: pydata-sphinx-theme; extra == "docs"
|
|
@@ -87,6 +92,7 @@ Most Python desktop frameworks make you fight the framework. bootstack gets out
|
|
|
87
92
|
- **10 paired light/dark themes** — popular dev color schemes plus Bootstrap, with a runtime switcher and a custom-theme API
|
|
88
93
|
- **Forms and validation** — field-level validators, inline error messages, and a `FormDialog` for quick modal forms
|
|
89
94
|
- **DataSource abstraction** — one interface over SQLite, in-memory, and file backends with filtering, sorting, pagination, and CRUD
|
|
95
|
+
- **Data visualization** — embed `matplotlib` (and `seaborn`) figures with `Chart`; they recolor with the theme and live-update from a `Signal` or `DataSource` (optional `viz` extra)
|
|
90
96
|
- **A real CLI** — scaffold, run, add pages/views/dialogs/themes, and package for distribution
|
|
91
97
|
- **PyInstaller packaging built in** — `bootstack build` produces a standalone executable; no separate toolchain required
|
|
92
98
|
|
|
@@ -226,6 +232,7 @@ app.run()
|
|
|
226
232
|
- **Reactive signals** — observable state with subscribe/set, integrates with widgets via `signal=` / `textsignal=`
|
|
227
233
|
- **Forms & validation** — `Form` with built-in field-level validators and inline error messages
|
|
228
234
|
- **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV/TSV/Excel export
|
|
235
|
+
- **Data visualization** — `Chart` embeds `matplotlib`/`seaborn` figures that theme themselves and live-update from a `Signal` or `DataSource`; managed render, blitting animation, and a themed navigation toolbar (optional `viz` / `viz-seaborn` extras)
|
|
229
236
|
- **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
|
|
230
237
|
- **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring and caching
|
|
231
238
|
- **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
|
|
@@ -42,6 +42,7 @@ Most Python desktop frameworks make you fight the framework. bootstack gets out
|
|
|
42
42
|
- **10 paired light/dark themes** — popular dev color schemes plus Bootstrap, with a runtime switcher and a custom-theme API
|
|
43
43
|
- **Forms and validation** — field-level validators, inline error messages, and a `FormDialog` for quick modal forms
|
|
44
44
|
- **DataSource abstraction** — one interface over SQLite, in-memory, and file backends with filtering, sorting, pagination, and CRUD
|
|
45
|
+
- **Data visualization** — embed `matplotlib` (and `seaborn`) figures with `Chart`; they recolor with the theme and live-update from a `Signal` or `DataSource` (optional `viz` extra)
|
|
45
46
|
- **A real CLI** — scaffold, run, add pages/views/dialogs/themes, and package for distribution
|
|
46
47
|
- **PyInstaller packaging built in** — `bootstack build` produces a standalone executable; no separate toolchain required
|
|
47
48
|
|
|
@@ -181,6 +182,7 @@ app.run()
|
|
|
181
182
|
- **Reactive signals** — observable state with subscribe/set, integrates with widgets via `signal=` / `textsignal=`
|
|
182
183
|
- **Forms & validation** — `Form` with built-in field-level validators and inline error messages
|
|
183
184
|
- **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV/TSV/Excel export
|
|
185
|
+
- **Data visualization** — `Chart` embeds `matplotlib`/`seaborn` figures that theme themselves and live-update from a `Signal` or `DataSource`; managed render, blitting animation, and a themed navigation toolbar (optional `viz` / `viz-seaborn` extras)
|
|
184
186
|
- **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
|
|
185
187
|
- **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring and caching
|
|
186
188
|
- **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
|
|
@@ -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.0a13"
|
|
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"
|
|
@@ -73,6 +73,15 @@ hdf5 = [
|
|
|
73
73
|
"pandas>=2",
|
|
74
74
|
"tables>=3.8",
|
|
75
75
|
]
|
|
76
|
+
# Visualization — embed matplotlib figures in a Chart widget.
|
|
77
|
+
viz = [
|
|
78
|
+
"matplotlib>=3.8",
|
|
79
|
+
]
|
|
80
|
+
# Visualization with seaborn convenience layer on top of matplotlib.
|
|
81
|
+
viz-seaborn = [
|
|
82
|
+
"matplotlib>=3.8",
|
|
83
|
+
"seaborn>=0.13",
|
|
84
|
+
]
|
|
76
85
|
docs = [
|
|
77
86
|
"sphinx>=7.2",
|
|
78
87
|
"pydata-sphinx-theme",
|
|
@@ -100,7 +109,7 @@ where = ["src"]
|
|
|
100
109
|
]
|
|
101
110
|
|
|
102
111
|
[tool.bumpversion]
|
|
103
|
-
current_version = "0.1.
|
|
112
|
+
current_version = "0.1.0a13"
|
|
104
113
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
|
|
105
114
|
serialize = [
|
|
106
115
|
"{major}.{minor}.{patch}{pre}{pre_n}",
|
|
@@ -129,9 +138,10 @@ search = "version = \"{current_version}\""
|
|
|
129
138
|
replace = "version = \"{new_version}\""
|
|
130
139
|
|
|
131
140
|
[tool.pytest.ini_options]
|
|
132
|
-
testpaths = ["tests/cli", "tests/widgets/public"]
|
|
141
|
+
testpaths = ["tests/cli", "tests/widgets/public", "tests/data"]
|
|
133
142
|
markers = [
|
|
134
143
|
"gui: requires a Tk display (deselect with -m 'not gui')",
|
|
144
|
+
"isolated: constructs its own Tk root (App/AppShell/Window kwargs); must run in a dedicated process. Run the suite via `python tests/run_gui.py`, which executes the shared-root suite once and each isolated module in its own process.",
|
|
135
145
|
]
|
|
136
146
|
|
|
137
147
|
[tool.ruff.lint]
|
|
@@ -81,6 +81,7 @@ from bootstack.widgets.pagestack import PageStack, StackPage
|
|
|
81
81
|
from bootstack.widgets.pathfield import PathField
|
|
82
82
|
from bootstack.widgets.avatar import Avatar
|
|
83
83
|
from bootstack.widgets.carousel import Carousel
|
|
84
|
+
from bootstack.widgets.chart import Chart
|
|
84
85
|
from bootstack.widgets.gallery import Gallery
|
|
85
86
|
from bootstack.widgets.passwordfield import PasswordField
|
|
86
87
|
from bootstack.widgets.picture import Picture
|
|
@@ -143,7 +144,7 @@ __all__ = [
|
|
|
143
144
|
# Data display
|
|
144
145
|
"Label", "Badge", "ProgressBar", "Gauge", "ListView", "DataTable", "Tree", "TreeNode",
|
|
145
146
|
# Media
|
|
146
|
-
"Picture", "Gallery", "Carousel", "Avatar",
|
|
147
|
+
"Picture", "Gallery", "Carousel", "Avatar", "Chart",
|
|
147
148
|
# Navigation
|
|
148
149
|
"PageStack", "StackPage", "Tabs", "TabPage",
|
|
149
150
|
# Overlays
|
|
@@ -675,6 +675,32 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
|
|
|
675
675
|
except tkinter.TclError:
|
|
676
676
|
pass
|
|
677
677
|
clear_current_app(self)
|
|
678
|
+
# Drop every process-wide cache that holds a Tk object bound to THIS
|
|
679
|
+
# root's interpreter — the Style singleton, the named/derived font
|
|
680
|
+
# caches, the nine-patch PhotoImage cache, and the visual-focus root
|
|
681
|
+
# ref. This must happen *before* super().destroy(): those cached
|
|
682
|
+
# PhotoImage/TkFont objects run `image delete`/`font delete` in their
|
|
683
|
+
# finalizers, and if they outlive the interpreter that owns them the
|
|
684
|
+
# call lands on a foreign/dead interpreter — a native crash in ttk
|
|
685
|
+
# element_create on the *next* root (the C layer, so Python can't catch
|
|
686
|
+
# it). Releasing + gc.collect() while this root is still alive lets the
|
|
687
|
+
# finalizers run cleanly. Only when no other App is live (single-App is
|
|
688
|
+
# the norm; this also lets the GUI test suite run module-after-module in
|
|
689
|
+
# one process, and fixes reopen-an-app-after-close in production).
|
|
690
|
+
if not has_current_app():
|
|
691
|
+
try:
|
|
692
|
+
import gc
|
|
693
|
+
from bootstack.style.style import reset_style
|
|
694
|
+
from bootstack.style.typography import Typography
|
|
695
|
+
from bootstack._core.images import _ImageService
|
|
696
|
+
from bootstack._runtime.visual_focus import reset_visual_focus_root
|
|
697
|
+
reset_style()
|
|
698
|
+
Typography.reset()
|
|
699
|
+
_ImageService.clear_cache()
|
|
700
|
+
reset_visual_focus_root()
|
|
701
|
+
gc.collect()
|
|
702
|
+
except Exception:
|
|
703
|
+
pass
|
|
678
704
|
super().destroy()
|
|
679
705
|
|
|
680
706
|
# ----- Window state persistence ------------------------------------------
|
|
@@ -205,6 +205,17 @@ def uninstall_visual_focus() -> None:
|
|
|
205
205
|
_installed = False
|
|
206
206
|
|
|
207
207
|
|
|
208
|
+
def reset_visual_focus_root() -> None:
|
|
209
|
+
"""Forget the cached root reference without un-patching `bind_all`.
|
|
210
|
+
|
|
211
|
+
`_root_ref` is captured lazily from the first root that binds. After that
|
|
212
|
+
root is destroyed the reference is stale; clearing it lets the next root
|
|
213
|
+
re-bind. The `bind_all` patch (installed once at import) stays in place.
|
|
214
|
+
"""
|
|
215
|
+
global _root_ref
|
|
216
|
+
_root_ref = None
|
|
217
|
+
|
|
218
|
+
|
|
208
219
|
def is_keyboard_focus(widget: tk.Misc) -> bool:
|
|
209
220
|
"""Check if a widget currently has keyboard-initiated focus.
|
|
210
221
|
|
|
@@ -224,5 +235,6 @@ def is_keyboard_focus(widget: tk.Misc) -> bool:
|
|
|
224
235
|
__all__ = [
|
|
225
236
|
'install_visual_focus',
|
|
226
237
|
'uninstall_visual_focus',
|
|
238
|
+
'reset_visual_focus_root',
|
|
227
239
|
'is_keyboard_focus',
|
|
228
240
|
]
|
|
@@ -453,6 +453,21 @@ def get_style(master: Master = None) -> Style:
|
|
|
453
453
|
return Style(master)
|
|
454
454
|
|
|
455
455
|
|
|
456
|
+
def reset_style() -> None:
|
|
457
|
+
"""Drop the process-wide Style singleton.
|
|
458
|
+
|
|
459
|
+
The Style singleton is a `ttk.Style` bound to the Tk root that created it.
|
|
460
|
+
Once that root is destroyed its interpreter is gone, so the singleton can no
|
|
461
|
+
longer be used — a fresh App must rebuild Style against the new root. Call
|
|
462
|
+
this after destroying the root (App.destroy does) so the next
|
|
463
|
+
`get_style()`/`Style()` constructs cleanly instead of reusing a dead
|
|
464
|
+
instance (whose `theme_use` would fail, e.g. "named font body does not
|
|
465
|
+
already exist").
|
|
466
|
+
"""
|
|
467
|
+
global _style_instance
|
|
468
|
+
_style_instance = None
|
|
469
|
+
|
|
470
|
+
|
|
456
471
|
def get_style_builder() -> StyleBuilderTtk:
|
|
457
472
|
"""Return the style builder for the currently active theme.
|
|
458
473
|
|
|
@@ -168,6 +168,21 @@ class Typography:
|
|
|
168
168
|
cls._ensure_named_token_fonts()
|
|
169
169
|
cls._override_tk_fonts()
|
|
170
170
|
|
|
171
|
+
@classmethod
|
|
172
|
+
def reset(cls) -> None:
|
|
173
|
+
"""Forget the Tk-bound named-font cache and root reference.
|
|
174
|
+
|
|
175
|
+
The cached named fonts (`body`, `heading-lg`, ...) and the derived
|
|
176
|
+
fonts (`body[bold]`, ...) are `TkFont`s bound to the root that created
|
|
177
|
+
them; once that root is destroyed they are stale, and their finalizers
|
|
178
|
+
would later run against a foreign interpreter. Clearing them lets the
|
|
179
|
+
next `initialize()` rebuild against a fresh root. Called from
|
|
180
|
+
App.destroy so a subsequent App starts clean.
|
|
181
|
+
"""
|
|
182
|
+
cls._root = None
|
|
183
|
+
cls._named_fonts = {}
|
|
184
|
+
_DERIVED_FONTS.clear()
|
|
185
|
+
|
|
171
186
|
@classmethod
|
|
172
187
|
def use_fonts(cls, fonts: FontTokens) -> None:
|
|
173
188
|
cls._fonts = fonts
|
|
@@ -39,6 +39,7 @@ _EXPORTS: dict[str, str] = {
|
|
|
39
39
|
"Label": "label", "Badge": "label", "Picture": "picture", "Gallery": "gallery",
|
|
40
40
|
"Carousel": "carousel", "Avatar": "avatar", "ProgressBar": "progressbar",
|
|
41
41
|
"Gauge": "gauge", "ListView": "listview", "DataTable": "datatable", "Tree": "tree",
|
|
42
|
+
"Chart": "chart",
|
|
42
43
|
# Navigation
|
|
43
44
|
"PageStack": "pagestack", "StackPage": "pagestack",
|
|
44
45
|
"Tabs": "tabs", "TabPage": "tabs",
|