bootstack 0.1.0a10__tar.gz → 0.1.0a11__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.0a10/src/bootstack.egg-info → bootstack-0.1.0a11}/PKG-INFO +4 -4
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/README.md +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/pyproject.toml +2 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/__init__.py +3 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/__init__.py +3 -13
- bootstack-0.1.0a11/src/bootstack/_core/exceptions.py +25 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/tk_patch.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/utility.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/appicon.py +2 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/demo.py +102 -88
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/templates/__init__.py +13 -13
- bootstack-0.1.0a11/src/bootstack/clipboard.py +48 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/constants.py +1 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/dialog.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/message.py +5 -5
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/errors.py +27 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/signals/signal.py +7 -20
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/__init__.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/badge.py +6 -6
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/button.py +10 -10
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/buttongroup.py +8 -8
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/calendar.py +9 -9
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/checkbutton.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/combobox.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/contextmenu.py +11 -11
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/entry.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/expander.py +9 -9
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/field.py +13 -13
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/frame.py +5 -5
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/label.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/labelframe.py +4 -4
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/listview.py +27 -27
- bootstack-0.1.0a11/src/bootstack/style/builders/menubar.py +91 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/menubutton.py +11 -11
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/panedwindow.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/progressbar.py +6 -6
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/radiobutton.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/scale.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/scrollbar.py +9 -9
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/separator.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/sidenav.py +21 -21
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/sizegrip.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/spinbox.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/switch.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/tabitem.py +11 -11
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/togglegroup.py +8 -8
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/toolbutton.py +8 -8
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/tooltip.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/treeview.py +4 -4
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders/utils.py +21 -21
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders_tk/__init__.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/builders_tk/defaults.py +33 -33
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/style.py +16 -16
- bootstack-0.1.0a10/src/bootstack/style/bootstyle_builder_base.py → bootstack-0.1.0a11/src/bootstack/style/style_builder_base.py +3 -3
- bootstack-0.1.0a10/src/bootstack/style/bootstyle_builder_mixed.py → bootstack-0.1.0a11/src/bootstack/style/style_builder_mixed.py +5 -5
- bootstack-0.1.0a10/src/bootstack/style/bootstyle_builder_tk.py → bootstack-0.1.0a11/src/bootstack/style/style_builder_tk.py +7 -7
- bootstack-0.1.0a10/src/bootstack/style/bootstyle_builder_ttk.py → bootstack-0.1.0a11/src/bootstack/style/style_builder_ttk.py +26 -26
- bootstack-0.1.0a10/src/bootstack/style/bootstyle.py → bootstack-0.1.0a11/src/bootstack/style/style_resolver.py +15 -97
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/theme.py +62 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/theme_provider.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/types.py +2 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/__init__.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/base.py +0 -22
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/field_mixin.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/navmodel.py +13 -9
- bootstack-0.1.0a11/src/bootstack/widgets/_core/window_menu.py +188 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +14 -16
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +2 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/_parts/textentry_part.py +2 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/buttongroup.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/carousel.py +9 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/contextmenu.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +3 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/field.py +2 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/gallery.py +9 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/list/listview.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +55 -47
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/pagestack.py +16 -9
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/radiogroup.py +4 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/shell/layout.py +21 -34
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +2 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tabs/tabs.py +10 -8
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +30 -14
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/core.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/togglegroup.py +6 -5
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/toolbar.py +196 -25
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/mixins/font_mixin.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +1 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/_menubutton.py +2 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/combobox.py +2 -2
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/frame.py +0 -10
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/optionmenu.py +6 -6
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/app.py +0 -19
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/appshell.py +8 -25
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/carousel.py +10 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/gallery.py +6 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/label.py +5 -3
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/pagestack.py +14 -1
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/statusbar.py +18 -6
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/tabs.py +26 -4
- bootstack-0.1.0a11/src/bootstack/widgets/theme_toggle.py +92 -0
- bootstack-0.1.0a11/src/bootstack/widgets/toolbar.py +280 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/types.py +2 -5
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/window.py +0 -15
- {bootstack-0.1.0a10 → bootstack-0.1.0a11/src/bootstack.egg-info}/PKG-INFO +4 -4
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack.egg-info/SOURCES.txt +9 -6
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/tests/test_navmodel.py +6 -5
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/tests/test_public_surface.py +6 -4
- bootstack-0.1.0a11/tests/test_theme_from_existing.py +64 -0
- bootstack-0.1.0a10/src/bootstack/_core/exceptions.py +0 -95
- bootstack-0.1.0a10/src/bootstack/style/builders/menubar.py +0 -74
- bootstack-0.1.0a10/src/bootstack/widgets/_core/window_menu.py +0 -299
- bootstack-0.1.0a10/src/bootstack/widgets/commandbar.py +0 -177
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/LICENSE +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/MANIFEST.in +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/NOTICE +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/setup.cfg +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/__main__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/after.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/bind.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/bindtags.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/busy.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/clipboard.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/focus.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/grab.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/grid.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/localization.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/pack.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/place.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/selection.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/signals.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/capabilities/winfo.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/colorutils.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/images.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/mixins/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/mixins/ttk_state.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/mixins/widget.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/paths.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/publisher.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_core/variables.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/app.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/base_window.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/events.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/shortcuts.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/toplevel.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/visual_focus.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/_runtime/window_utilities.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/bootstack.ico +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/bootstack.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/badge-pill.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/badge-square.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/button-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/button-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/card.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/field.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/input-addon-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/input-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/input-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/list-item-separated.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/list-item.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/listrow-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/listrow-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/manifest.toml +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/menu-item.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/navitem-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/navitem-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/radiobutton.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/slider-handle.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/slider-track-h.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/slider-track-v.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/switch-off.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/switch-on.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/tab-h.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/elements/tab-v.png +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/icons/glyphmap.json +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/icons/icon_metrics.json +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/__main__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/add.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/build.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/config.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/doctor.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/icons.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/promote.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/pyinstaller.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/run.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/cli/start.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/README.md +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/_observable.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/base.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/file_source.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/memory_source.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/query.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/readers.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/sqlite_source.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/types.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/data/writers.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/colorchooser.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/colordropper.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/datedialog.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/filterdialog.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/fontdialog.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/formdialog.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/dialogs/_impl/query.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/events/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/events/_event.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/events/_payloads.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/events/_subscription.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/i18n/README.md +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/i18n/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/i18n/catalog.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/i18n/intl_format.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/i18n/msgcat.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/i18n/specs.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/images.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/py.typed +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/scheduling/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/scheduling/_schedule.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/shortcuts.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/signals/README.md +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/signals/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/signals/integration.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/signals/types.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/store.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/streams/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/streams/_stream.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/element.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/fonts.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/themes/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/tk_patch.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/token_maps.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/types.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/typography.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/style/utility.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/validation/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/validation/types.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/validation/validation_result.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/validation/validation_rules.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/app_config.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/container.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/context.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/events.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/image_binding.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/options.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/selection_group.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_core/window_controls.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/avatar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/calendar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/compositeframe.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/floodgauge.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/form.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/menu/model.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/meter.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/passwordentry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/pathentry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/picture.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/scrollview.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/shell/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/shell/content_host.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/shell/providers.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/shell/shell.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/shell/workspace.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/slider/_shared.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/slider/slider.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/spinnerentry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/filter.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/timeentry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tooltip.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/gridframe.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/packframe.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/avatar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/boolean_controls.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/button.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/buttongroup.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/calendar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/card.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/codeeditor.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/contextmenu.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/datatable.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/datefield.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/expander.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/form.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/gauge.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/grid.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/groupbox.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/listview.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/menubutton.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/numberfield.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/passwordfield.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/pathfield.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/picture.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/progressbar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/radio_variants.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/radiogroup.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/scrollbar.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/scrollview.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/select.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/selectbutton.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/separator.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/sizegrip.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/slider.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/spinbox.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/spinnerfield.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/splitview.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/stacks.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/textarea.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/textfield.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/timefield.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/toast.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/togglegroup.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/tooltip.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack/widgets/tree.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack.egg-info/dependency_links.txt +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack.egg-info/entry_points.txt +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack.egg-info/requires.txt +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/src/bootstack.egg-info/top_level.txt +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/tests/test_images.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/tests/test_images_gui.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/tests/test_intl_format.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/tests/test_store.py +0 -0
- {bootstack-0.1.0a10 → bootstack-0.1.0a11}/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.0a11
|
|
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
|
|
@@ -134,7 +134,7 @@ app.run()
|
|
|
134
134
|
<img alt="bootstack quick start example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
|
|
135
135
|
</picture>
|
|
136
136
|
|
|
137
|
-
For navigation-based apps, use `AppShell` — it gives you
|
|
137
|
+
For navigation-based apps, use `AppShell` — it gives you stacked toolbars, a sidebar, and a page stack in one call:
|
|
138
138
|
|
|
139
139
|
```python
|
|
140
140
|
import bootstack as bs
|
|
@@ -225,13 +225,13 @@ app.run()
|
|
|
225
225
|
|
|
226
226
|
| Category | Widgets |
|
|
227
227
|
|----------|---------|
|
|
228
|
-
| **Actions** | Button, ButtonGroup, MenuButton, ContextMenu,
|
|
228
|
+
| **Actions** | Button, ButtonGroup, MenuButton, ContextMenu, Toolbar |
|
|
229
229
|
| **Inputs** | TextField, PasswordField, PathField, NumberField, SpinnerField, Slider, RangeSlider, TextArea, CodeEditor, DateField, TimeField |
|
|
230
230
|
| **Selection** | Checkbox, Switch, ToggleButton, Radio, RadioGroup, ToggleGroup, Select, SelectButton, Calendar |
|
|
231
231
|
| **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
|
|
232
232
|
| **Media** | Avatar, Picture, Gallery, Carousel |
|
|
233
233
|
| **Layout** | VStack, HStack, Grid, Card, GroupBox, SplitView, ScrollView, Accordion, Separator |
|
|
234
|
-
| **Navigation** | AppShell,
|
|
234
|
+
| **Navigation** | AppShell, SideNav, StatusBar, Tabs, PageStack |
|
|
235
235
|
| **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
|
|
236
236
|
| **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
|
|
237
237
|
| **Forms** | Form, with field-level validation |
|
|
@@ -89,7 +89,7 @@ app.run()
|
|
|
89
89
|
<img alt="bootstack quick start example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
|
|
90
90
|
</picture>
|
|
91
91
|
|
|
92
|
-
For navigation-based apps, use `AppShell` — it gives you
|
|
92
|
+
For navigation-based apps, use `AppShell` — it gives you stacked toolbars, a sidebar, and a page stack in one call:
|
|
93
93
|
|
|
94
94
|
```python
|
|
95
95
|
import bootstack as bs
|
|
@@ -180,13 +180,13 @@ app.run()
|
|
|
180
180
|
|
|
181
181
|
| Category | Widgets |
|
|
182
182
|
|----------|---------|
|
|
183
|
-
| **Actions** | Button, ButtonGroup, MenuButton, ContextMenu,
|
|
183
|
+
| **Actions** | Button, ButtonGroup, MenuButton, ContextMenu, Toolbar |
|
|
184
184
|
| **Inputs** | TextField, PasswordField, PathField, NumberField, SpinnerField, Slider, RangeSlider, TextArea, CodeEditor, DateField, TimeField |
|
|
185
185
|
| **Selection** | Checkbox, Switch, ToggleButton, Radio, RadioGroup, ToggleGroup, Select, SelectButton, Calendar |
|
|
186
186
|
| **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
|
|
187
187
|
| **Media** | Avatar, Picture, Gallery, Carousel |
|
|
188
188
|
| **Layout** | VStack, HStack, Grid, Card, GroupBox, SplitView, ScrollView, Accordion, Separator |
|
|
189
|
-
| **Navigation** | AppShell,
|
|
189
|
+
| **Navigation** | AppShell, SideNav, StatusBar, Tabs, PageStack |
|
|
190
190
|
| **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
|
|
191
191
|
| **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
|
|
192
192
|
| **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.0a11"
|
|
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"
|
|
@@ -100,7 +100,7 @@ where = ["src"]
|
|
|
100
100
|
]
|
|
101
101
|
|
|
102
102
|
[tool.bumpversion]
|
|
103
|
-
current_version = "0.1.
|
|
103
|
+
current_version = "0.1.0a11"
|
|
104
104
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
|
|
105
105
|
serialize = [
|
|
106
106
|
"{major}.{minor}.{patch}{pre}{pre_n}",
|
|
@@ -63,6 +63,7 @@ from bootstack.widgets.window import Window
|
|
|
63
63
|
from bootstack.widgets.stacks import HStack, VStack
|
|
64
64
|
from bootstack.widgets.grid import Grid
|
|
65
65
|
from bootstack.widgets.boolean_controls import Checkbox, Switch, ToggleButton
|
|
66
|
+
from bootstack.widgets.theme_toggle import ThemeToggle
|
|
66
67
|
from bootstack.widgets.button import Button
|
|
67
68
|
from bootstack.widgets.card import Card
|
|
68
69
|
from bootstack.widgets.buttongroup import ButtonGroup
|
|
@@ -101,7 +102,7 @@ from bootstack.widgets.tree import Tree, TreeNode
|
|
|
101
102
|
from bootstack.widgets.textfield import TextField
|
|
102
103
|
from bootstack.widgets.toast import toast, Notification, Snackbar, snackbar
|
|
103
104
|
from bootstack.widgets.togglegroup import ToggleGroup
|
|
104
|
-
from bootstack.widgets.
|
|
105
|
+
from bootstack.widgets.toolbar import Toolbar
|
|
105
106
|
from bootstack.widgets.statusbar import StatusBar
|
|
106
107
|
from bootstack.widgets.tooltip import Tooltip
|
|
107
108
|
|
|
@@ -131,7 +132,7 @@ __all__ = [
|
|
|
131
132
|
"HStack", "VStack", "Grid", "Card", "GroupBox", "Separator", "ScrollView",
|
|
132
133
|
"SplitView", "SplitPane", "Accordion", "AccordionSection",
|
|
133
134
|
# Actions
|
|
134
|
-
"Button", "ButtonGroup", "MenuButton", "
|
|
135
|
+
"Button", "ButtonGroup", "ThemeToggle", "MenuButton", "Toolbar", "StatusBar",
|
|
135
136
|
"ContextMenu", "ContextMenuItem",
|
|
136
137
|
# Inputs
|
|
137
138
|
"TextField", "PasswordField", "NumberField", "PathField", "SpinnerField",
|
|
@@ -4,14 +4,9 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from . import colorutils, publisher, capabilities
|
|
6
6
|
from bootstack._core.exceptions import (
|
|
7
|
-
TTKBootstrapError,
|
|
8
|
-
LayoutError,
|
|
9
7
|
ThemeError,
|
|
10
|
-
ConfigError,
|
|
11
|
-
StateError,
|
|
12
8
|
NavigationError,
|
|
13
|
-
|
|
14
|
-
BootstyleParsingError,
|
|
9
|
+
StyleBuilderError,
|
|
15
10
|
ConfigurationWarning,
|
|
16
11
|
)
|
|
17
12
|
|
|
@@ -19,13 +14,8 @@ __all__ = [
|
|
|
19
14
|
"colorutils",
|
|
20
15
|
"publisher",
|
|
21
16
|
"capabilities",
|
|
22
|
-
"TTKBootstrapError",
|
|
23
|
-
"LayoutError",
|
|
24
17
|
"ThemeError",
|
|
25
|
-
"ConfigError",
|
|
26
|
-
"StateError",
|
|
27
18
|
"NavigationError",
|
|
28
|
-
"
|
|
29
|
-
"BootstyleParsingError",
|
|
19
|
+
"StyleBuilderError",
|
|
30
20
|
"ConfigurationWarning",
|
|
31
|
-
]
|
|
21
|
+
]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
# These are defined in the public `bootstack.errors` home and re-exported here
|
|
4
|
+
# for the internal call sites that import from `bootstack._core`.
|
|
5
|
+
from bootstack.errors import (
|
|
6
|
+
NavigationError,
|
|
7
|
+
StyleBuilderError,
|
|
8
|
+
ThemeError,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ConfigurationWarning(Warning):
|
|
13
|
+
"""Issued when a widget receives a deprecated or questionable configuration option.
|
|
14
|
+
|
|
15
|
+
Examples: supplying an unsupported value for a configuration key, or
|
|
16
|
+
passing mutually exclusive options.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"ConfigurationWarning",
|
|
22
|
+
"NavigationError",
|
|
23
|
+
"StyleBuilderError",
|
|
24
|
+
"ThemeError",
|
|
25
|
+
]
|
|
@@ -9,7 +9,7 @@ from __future__ import annotations
|
|
|
9
9
|
|
|
10
10
|
import tkinter as tk
|
|
11
11
|
|
|
12
|
-
from bootstack.style.
|
|
12
|
+
from bootstack.style.style_resolver import StyleResolver
|
|
13
13
|
|
|
14
14
|
# Native Tk widget classes whose constructors get the autostyle wrapper.
|
|
15
15
|
# Limited to the raw Tk widgets the framework actually instantiates or
|
|
@@ -26,7 +26,7 @@ _TK_WIDGETS = (
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def install_tk_autostyle() -> None:
|
|
29
|
-
"""Patch Tk widgets to enable autostyle via
|
|
29
|
+
"""Patch Tk widgets to enable autostyle via StyleResolver.
|
|
30
30
|
|
|
31
31
|
- Wraps Tk widget `__init__` with surface color inheritance and theme
|
|
32
32
|
background application using registered Tk builders.
|
|
@@ -36,7 +36,7 @@ def install_tk_autostyle() -> None:
|
|
|
36
36
|
import bootstack.style.builders_tk # noqa: F401
|
|
37
37
|
|
|
38
38
|
for widget in _TK_WIDGETS:
|
|
39
|
-
_init =
|
|
39
|
+
_init = StyleResolver.override_tk_widget_constructor(widget.__init__)
|
|
40
40
|
widget.__init__ = _init
|
|
41
41
|
|
|
42
42
|
|
|
@@ -283,11 +283,11 @@ def scale_size(widget=None, size=None):
|
|
|
283
283
|
def _debug_enabled() -> bool:
|
|
284
284
|
"""Return True if debug logging is enabled.
|
|
285
285
|
|
|
286
|
-
Controlled via the environment variable `
|
|
286
|
+
Controlled via the environment variable `BOOTSTACK_DEBUG`.
|
|
287
287
|
Accepts: "1", "true", "yes" (case-insensitive) as truthy values.
|
|
288
288
|
"""
|
|
289
289
|
import os
|
|
290
|
-
return str(os.environ.get("
|
|
290
|
+
return str(os.environ.get("BOOTSTACK_DEBUG", "")).lower() in {"1", "true", "yes"}
|
|
291
291
|
|
|
292
292
|
|
|
293
293
|
def debug_log_exception(message: str = "") -> None:
|
|
@@ -301,7 +301,7 @@ def debug_log_exception(message: str = "") -> None:
|
|
|
301
301
|
try:
|
|
302
302
|
import traceback
|
|
303
303
|
if message:
|
|
304
|
-
print(f"
|
|
304
|
+
print(f"bootstack DEBUG: {message}")
|
|
305
305
|
traceback.print_exc()
|
|
306
306
|
except Exception:
|
|
307
307
|
# Never raise from debug logging
|
|
@@ -9,6 +9,7 @@ from __future__ import annotations
|
|
|
9
9
|
import argparse
|
|
10
10
|
|
|
11
11
|
from bootstack.widgets.types import IconSpec
|
|
12
|
+
from bootstack.clipboard import set_clipboard
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
def add_parser(subparsers: argparse._SubParsersAction) -> None:
|
|
@@ -266,7 +267,7 @@ def run_appicon() -> None:
|
|
|
266
267
|
f'foreground = "{fg_sig()}"\n'
|
|
267
268
|
f"radius = {round(radius_sig(), 3)}\n"
|
|
268
269
|
)
|
|
269
|
-
|
|
270
|
+
set_clipboard(snippet)
|
|
270
271
|
status_sig.set("Copied [build.icon] snippet to the clipboard.")
|
|
271
272
|
|
|
272
273
|
_build_preview()
|
|
@@ -751,7 +751,7 @@ def _build_theme_page():
|
|
|
751
751
|
|
|
752
752
|
with bs.HStack(gap=8):
|
|
753
753
|
bs.Label("Quick:", width=10)
|
|
754
|
-
bs.
|
|
754
|
+
bs.ThemeToggle()
|
|
755
755
|
|
|
756
756
|
with bs.GroupBox("Accent Colors", fill="horizontal"):
|
|
757
757
|
with bs.HStack(gap=4, fill="horizontal", fill_items="horizontal", expand_items=True):
|
|
@@ -807,20 +807,116 @@ def _build_media_page():
|
|
|
807
807
|
bs.Picture(photos[1]["image"], width=180, height=120, fit="contain")
|
|
808
808
|
bs.Picture(photos[2]["image"], width=120, height=120, fit="cover", corner_radius=60)
|
|
809
809
|
|
|
810
|
-
with bs.GroupBox("Gallery", fill="both", expand=True):
|
|
811
|
-
bs.Gallery(items=photos, image_field="image", caption_field="title",
|
|
812
|
-
tile_size=(120, 120), fill="both", expand=True)
|
|
813
|
-
|
|
814
810
|
with bs.GroupBox("Carousel", fill="horizontal"):
|
|
815
811
|
bs.Carousel(items=photos, image_field="image", caption_field="title",
|
|
816
812
|
fit="cover", fill="horizontal")
|
|
817
813
|
|
|
814
|
+
# Gallery last: it scrolls internally and swallows the wheel event, so
|
|
815
|
+
# keeping it at the bottom leaves the carousel/picture rows above it as
|
|
816
|
+
# places to grab and scroll the page itself.
|
|
817
|
+
with bs.GroupBox("Gallery", fill="both", expand=True):
|
|
818
|
+
bs.Gallery(items=photos, image_field="image", caption_field="title",
|
|
819
|
+
tile_size=(120, 120), fill="both", expand=True)
|
|
820
|
+
|
|
818
821
|
|
|
819
822
|
# =============================================================================
|
|
820
823
|
# Gallery app
|
|
821
824
|
# =============================================================================
|
|
822
825
|
|
|
823
826
|
|
|
827
|
+
def build_gallery_shell(shell) -> None:
|
|
828
|
+
"""Populate a Widget Gallery `AppShell` (toolbar, status bar, and pages).
|
|
829
|
+
|
|
830
|
+
Shared by `run_demo()` and the docs gallery screenshot so the captured
|
|
831
|
+
gallery always matches the live demo. Pages are lazy-built on first visit.
|
|
832
|
+
"""
|
|
833
|
+
with shell.add_toolbar() as bar:
|
|
834
|
+
with bar.add_menu("File") as file_menu:
|
|
835
|
+
file_menu.add_action("Quit", shortcut="Mod+Q", on_click=shell.close)
|
|
836
|
+
with bar.add_menu("View") as view_menu:
|
|
837
|
+
view_menu.add_action("Toggle theme", on_click=bs.toggle_theme)
|
|
838
|
+
bar.add_spacer()
|
|
839
|
+
bar.add_theme_toggle()
|
|
840
|
+
|
|
841
|
+
shell.statusbar.add_text("Ready")
|
|
842
|
+
shell.statusbar.add_spacer()
|
|
843
|
+
shell.statusbar.add_text(f"bootstack v{bs.__version__}")
|
|
844
|
+
|
|
845
|
+
# Page registry: key → (page_frame, builder)
|
|
846
|
+
_pages: dict[str, tuple[object, object]] = {}
|
|
847
|
+
|
|
848
|
+
def _register(key, builder, *, text, icon, scrollable=False):
|
|
849
|
+
page = shell.add_page(key, text=text, icon=icon, scrollable=scrollable)
|
|
850
|
+
_pages[key] = (page, builder)
|
|
851
|
+
|
|
852
|
+
_register("home", _build_home_page, text="Home", icon="house")
|
|
853
|
+
|
|
854
|
+
shell.add_separator()
|
|
855
|
+
shell.add_header("Actions")
|
|
856
|
+
_register("buttons", _build_buttons_page, text="Buttons", icon="hand-index-thumb", scrollable=True)
|
|
857
|
+
|
|
858
|
+
shell.add_separator()
|
|
859
|
+
shell.add_header("Inputs")
|
|
860
|
+
_register("text-inputs", _build_text_inputs_page, text="Text Inputs", icon="input-cursor-text", scrollable=True)
|
|
861
|
+
_register("numeric", _build_numeric_page, text="Numeric & Date", icon="123", scrollable=True)
|
|
862
|
+
_register("forms", _build_forms_page, text="Forms", icon="journal-text", scrollable=True)
|
|
863
|
+
_register("code-editor", _build_code_editor_page, text="Code Editor", icon="code-slash", scrollable=True)
|
|
864
|
+
|
|
865
|
+
shell.add_separator()
|
|
866
|
+
shell.add_header("Selection")
|
|
867
|
+
_register("selection", _build_selection_page, text="Selection", icon="ui-checks", scrollable=True)
|
|
868
|
+
_register("calendar", _build_calendar_page, text="Calendar", icon="calendar3", scrollable=True)
|
|
869
|
+
|
|
870
|
+
shell.add_separator()
|
|
871
|
+
shell.add_header("Data Display")
|
|
872
|
+
_register("data", _build_data_page, text="Data Tables", icon="table", scrollable=True)
|
|
873
|
+
_register("progress", _build_progress_page, text="Progress", icon="speedometer2", scrollable=True)
|
|
874
|
+
|
|
875
|
+
shell.add_separator()
|
|
876
|
+
shell.add_header("Media")
|
|
877
|
+
_register("media", _build_media_page, text="Media", icon="images", scrollable=True)
|
|
878
|
+
|
|
879
|
+
shell.add_separator()
|
|
880
|
+
shell.add_header("Layout")
|
|
881
|
+
_register("layout", _build_layout_page, text="Containers", icon="layout-wtf", scrollable=True)
|
|
882
|
+
_register("navigation", _build_navigation_page, text="Navigation", icon="window-stack", scrollable=True)
|
|
883
|
+
|
|
884
|
+
shell.add_separator()
|
|
885
|
+
shell.add_header("Overlays & Dialogs")
|
|
886
|
+
_register("overlays", _build_overlays_page, text="Overlays", icon="layers", scrollable=True)
|
|
887
|
+
_register("dialogs", _build_dialogs_page, text="Dialogs", icon="chat-square-text", scrollable=True)
|
|
888
|
+
|
|
889
|
+
shell.add_separator()
|
|
890
|
+
shell.add_header("Design System")
|
|
891
|
+
_register("themes", _build_theme_page, text="Themes", icon="palette", scrollable=True)
|
|
892
|
+
_register("typography", _build_typography_page, text="Typography", icon="fonts", scrollable=True)
|
|
893
|
+
_register("icons", _build_icons_page, text="Icons", icon="grid-3x3-gap", scrollable=True)
|
|
894
|
+
|
|
895
|
+
# Lazy-build: construct page content only on first visit
|
|
896
|
+
_built: set[str] = set()
|
|
897
|
+
|
|
898
|
+
def _build_page(key: str) -> None:
|
|
899
|
+
if key in _built or key not in _pages:
|
|
900
|
+
return
|
|
901
|
+
page, builder = _pages[key]
|
|
902
|
+
with page:
|
|
903
|
+
builder()
|
|
904
|
+
_built.add(key)
|
|
905
|
+
|
|
906
|
+
# Build home page immediately; all others on first navigation
|
|
907
|
+
_build_page("home")
|
|
908
|
+
|
|
909
|
+
def _on_page_change(event) -> None:
|
|
910
|
+
# on_page_change delivers a PageChangeEvent (unpacked); .page is the
|
|
911
|
+
# key of the now-active page.
|
|
912
|
+
key = getattr(event, "page", None)
|
|
913
|
+
if key:
|
|
914
|
+
_build_page(key)
|
|
915
|
+
|
|
916
|
+
shell.on_page_change(_on_page_change)
|
|
917
|
+
shell.navigate("home")
|
|
918
|
+
|
|
919
|
+
|
|
824
920
|
def run_demo():
|
|
825
921
|
"""Run the bootstack widget gallery as an AppShell application."""
|
|
826
922
|
with bs.AppShell(
|
|
@@ -828,89 +924,7 @@ def run_demo():
|
|
|
828
924
|
theme="bootstrap-light",
|
|
829
925
|
size=(1100, 750),
|
|
830
926
|
) as shell:
|
|
831
|
-
|
|
832
|
-
shell.commandbar.add_label("Widget Gallery")
|
|
833
|
-
shell.commandbar.add_spacer()
|
|
834
|
-
shell.commandbar.add_button(icon="circle-half", on_click=bs.toggle_theme)
|
|
835
|
-
|
|
836
|
-
shell.statusbar.add_text("Ready")
|
|
837
|
-
shell.statusbar.add_spacer()
|
|
838
|
-
shell.statusbar.add_text(f"bootstack v{bs.__version__}")
|
|
839
|
-
|
|
840
|
-
# Page registry: key → (page_frame, builder)
|
|
841
|
-
_pages: dict[str, tuple[object, object]] = {}
|
|
842
|
-
|
|
843
|
-
def _register(key, builder, *, text, icon, scrollable=False):
|
|
844
|
-
page = shell.add_page(key, text=text, icon=icon, scrollable=scrollable)
|
|
845
|
-
_pages[key] = (page, builder)
|
|
846
|
-
|
|
847
|
-
_register("home", _build_home_page, text="Home", icon="house")
|
|
848
|
-
|
|
849
|
-
shell.add_separator()
|
|
850
|
-
shell.add_header("Actions")
|
|
851
|
-
_register("buttons", _build_buttons_page, text="Buttons", icon="hand-index-thumb", scrollable=True)
|
|
852
|
-
|
|
853
|
-
shell.add_separator()
|
|
854
|
-
shell.add_header("Inputs")
|
|
855
|
-
_register("text-inputs", _build_text_inputs_page, text="Text Inputs", icon="input-cursor-text", scrollable=True)
|
|
856
|
-
_register("numeric", _build_numeric_page, text="Numeric & Date", icon="123", scrollable=True)
|
|
857
|
-
_register("forms", _build_forms_page, text="Forms", icon="journal-text", scrollable=True)
|
|
858
|
-
_register("code-editor", _build_code_editor_page, text="Code Editor", icon="code-slash", scrollable=True)
|
|
859
|
-
|
|
860
|
-
shell.add_separator()
|
|
861
|
-
shell.add_header("Selection")
|
|
862
|
-
_register("selection", _build_selection_page, text="Selection", icon="ui-checks", scrollable=True)
|
|
863
|
-
_register("calendar", _build_calendar_page, text="Calendar", icon="calendar3", scrollable=True)
|
|
864
|
-
|
|
865
|
-
shell.add_separator()
|
|
866
|
-
shell.add_header("Data Display")
|
|
867
|
-
_register("data", _build_data_page, text="Data Tables", icon="table", scrollable=True)
|
|
868
|
-
_register("progress", _build_progress_page, text="Progress", icon="speedometer2", scrollable=True)
|
|
869
|
-
|
|
870
|
-
shell.add_separator()
|
|
871
|
-
shell.add_header("Media")
|
|
872
|
-
_register("media", _build_media_page, text="Media", icon="images", scrollable=True)
|
|
873
|
-
|
|
874
|
-
shell.add_separator()
|
|
875
|
-
shell.add_header("Layout")
|
|
876
|
-
_register("layout", _build_layout_page, text="Containers", icon="layout-wtf", scrollable=True)
|
|
877
|
-
_register("navigation", _build_navigation_page, text="Navigation", icon="window-stack", scrollable=True)
|
|
878
|
-
|
|
879
|
-
shell.add_separator()
|
|
880
|
-
shell.add_header("Overlays & Dialogs")
|
|
881
|
-
_register("overlays", _build_overlays_page, text="Overlays", icon="layers", scrollable=True)
|
|
882
|
-
_register("dialogs", _build_dialogs_page, text="Dialogs", icon="chat-square-text", scrollable=True)
|
|
883
|
-
|
|
884
|
-
shell.add_separator()
|
|
885
|
-
shell.add_header("Design System")
|
|
886
|
-
_register("themes", _build_theme_page, text="Themes", icon="palette", scrollable=True)
|
|
887
|
-
_register("typography", _build_typography_page, text="Typography", icon="fonts", scrollable=True)
|
|
888
|
-
_register("icons", _build_icons_page, text="Icons", icon="grid-3x3-gap", scrollable=True)
|
|
889
|
-
|
|
890
|
-
# Lazy-build: construct page content only on first visit
|
|
891
|
-
_built: set[str] = set()
|
|
892
|
-
|
|
893
|
-
def _build_page(key: str) -> None:
|
|
894
|
-
if key in _built or key not in _pages:
|
|
895
|
-
return
|
|
896
|
-
page, builder = _pages[key]
|
|
897
|
-
with page:
|
|
898
|
-
builder()
|
|
899
|
-
_built.add(key)
|
|
900
|
-
|
|
901
|
-
# Build home page immediately; all others on first navigation
|
|
902
|
-
_build_page("home")
|
|
903
|
-
|
|
904
|
-
def _on_page_change(event) -> None:
|
|
905
|
-
# on_page_change delivers a PageChangeEvent (unpacked); .page is the
|
|
906
|
-
# key of the now-active page.
|
|
907
|
-
key = getattr(event, "page", None)
|
|
908
|
-
if key:
|
|
909
|
-
_build_page(key)
|
|
910
|
-
|
|
911
|
-
shell.on_page_change(_on_page_change)
|
|
912
|
-
shell.navigate("home")
|
|
913
|
-
|
|
927
|
+
build_gallery_shell(shell)
|
|
914
928
|
shell.run()
|
|
915
929
|
|
|
916
930
|
|
|
@@ -290,20 +290,20 @@ Application settings are defined in `bootstack.toml`:
|
|
|
290
290
|
# =============================================================================
|
|
291
291
|
|
|
292
292
|
def _appshell_chrome(app_name: str) -> str:
|
|
293
|
-
"""The shared
|
|
293
|
+
"""The shared toolbar (menus + commands) and status bar baseline for AppShell
|
|
294
294
|
scaffolds. Delete what you do not need."""
|
|
295
295
|
return f'''\
|
|
296
|
-
# ---
|
|
297
|
-
with shell.
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
296
|
+
# --- Toolbar (menus + commands) -------------------------------------
|
|
297
|
+
with shell.add_toolbar() as bar:
|
|
298
|
+
with bar.add_menu("File") as file_menu:
|
|
299
|
+
file_menu.add_action("Quit", shortcut="Mod+Q", on_click=shell.close)
|
|
300
|
+
with bar.add_menu("Help") as help_menu:
|
|
301
|
+
help_menu.add_action(
|
|
302
|
+
"About",
|
|
303
|
+
on_click=lambda: bs.alert("{app_name}", title="About"),
|
|
304
|
+
)
|
|
305
|
+
bar.add_spacer()
|
|
306
|
+
bar.add_theme_toggle()
|
|
307
307
|
|
|
308
308
|
# --- Status bar -----------------------------------------------------
|
|
309
309
|
shell.statusbar.add_text("Ready")
|
|
@@ -536,7 +536,7 @@ class SettingsPage:
|
|
|
536
536
|
with bs.GroupBox("Preferences", fill="both", expand=True):
|
|
537
537
|
with bs.HStack(gap=8):
|
|
538
538
|
bs.Label("Theme:")
|
|
539
|
-
bs.
|
|
539
|
+
bs.ThemeToggle()
|
|
540
540
|
'''
|
|
541
541
|
|
|
542
542
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""System clipboard helpers.
|
|
2
|
+
|
|
3
|
+
The clipboard is global to the running application, so these are module-level
|
|
4
|
+
functions rather than per-widget methods. They operate on the current `App`'s
|
|
5
|
+
clipboard, so **an `App` must exist when they are called** (i.e. call them from
|
|
6
|
+
within your app's runtime, not at import time).
|
|
7
|
+
|
|
8
|
+
from bootstack.clipboard import get_clipboard, set_clipboard
|
|
9
|
+
|
|
10
|
+
set_clipboard("hello")
|
|
11
|
+
text = get_clipboard()
|
|
12
|
+
|
|
13
|
+
Platform note: on Linux/X11 the clipboard is owned by the running process, so its
|
|
14
|
+
contents are cleared when the `App` exits unless a system clipboard manager is
|
|
15
|
+
running. On Windows and macOS the operating system owns the clipboard, so contents
|
|
16
|
+
persist after the app closes.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from bootstack._runtime.app import get_current_app
|
|
22
|
+
|
|
23
|
+
__all__ = ["get_clipboard", "set_clipboard"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def set_clipboard(text: str) -> None:
|
|
27
|
+
"""Replace the system clipboard contents with `text`.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
text: The text to place on the clipboard.
|
|
31
|
+
|
|
32
|
+
Raises:
|
|
33
|
+
RuntimeError: If called when no `App` is running.
|
|
34
|
+
"""
|
|
35
|
+
get_current_app().clipboard_set(text)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def get_clipboard() -> str:
|
|
39
|
+
"""Return the current text contents of the system clipboard.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
The clipboard text, or an empty string when the clipboard is empty,
|
|
43
|
+
holds non-text data, or no `App` is running.
|
|
44
|
+
"""
|
|
45
|
+
try:
|
|
46
|
+
return get_current_app().clipboard_get()
|
|
47
|
+
except Exception:
|
|
48
|
+
return ""
|
|
@@ -32,7 +32,6 @@ from bootstack.widgets.types import (
|
|
|
32
32
|
Sticky,
|
|
33
33
|
AccentToken,
|
|
34
34
|
SurfaceToken,
|
|
35
|
-
VariantToken,
|
|
36
35
|
WidgetDensity,
|
|
37
36
|
WidgetState,
|
|
38
37
|
)
|
|
@@ -276,7 +275,7 @@ INDETERMINATE: Final[ProgressMode] = 'indeterminate'
|
|
|
276
275
|
__all__ = [
|
|
277
276
|
# Re-exported type aliases (canonical source: bootstack.widgets.types)
|
|
278
277
|
'Anchor', 'AccentToken', 'BorderMode', 'CompoundMode', 'Fill', 'Justify',
|
|
279
|
-
'Orient', 'Relief', 'Side', 'Sticky', 'SurfaceToken',
|
|
278
|
+
'Orient', 'Relief', 'Side', 'Sticky', 'SurfaceToken',
|
|
280
279
|
'WidgetDensity', 'WidgetState',
|
|
281
280
|
# Literal types canonical to this module
|
|
282
281
|
'ActiveStyle', 'Align', 'IndexPos', 'LineJoin', 'LineCap', 'MenuItemType',
|
|
@@ -15,7 +15,7 @@ from typing import Any, Callable, Iterable, Literal, Mapping, Optional, Tuple, T
|
|
|
15
15
|
from bootstack.widgets._impl.primitives.button import Button as _Button
|
|
16
16
|
from bootstack.widgets._impl.primitives.frame import Frame as _Frame
|
|
17
17
|
from bootstack.widgets._impl.primitives.separator import Separator as _Separator
|
|
18
|
-
from bootstack.widgets.types import Master, AccentToken,
|
|
18
|
+
from bootstack.widgets.types import Master, AccentToken, ButtonVariant, SurfaceToken, WindowStyle
|
|
19
19
|
from bootstack._runtime.toplevel import Toplevel
|
|
20
20
|
from bootstack._runtime.window_utilities import AnchorPoint, WindowPositioning
|
|
21
21
|
|
|
@@ -56,8 +56,8 @@ class DialogButton:
|
|
|
56
56
|
accent: AccentToken | str | None = None
|
|
57
57
|
"""Accent token for styling (e.g. `'primary'`, `'danger'`)."""
|
|
58
58
|
|
|
59
|
-
variant:
|
|
60
|
-
"""
|
|
59
|
+
variant: ButtonVariant | str | None = None
|
|
60
|
+
"""Button style variant — `'default'`, `'solid'`, `'outline'`, or `'ghost'`."""
|
|
61
61
|
|
|
62
62
|
icon: str | dict[str, Any] | None = None # passed straight to _Button(icon=...)
|
|
63
63
|
"""Optional icon specification for the button."""
|
|
@@ -49,14 +49,14 @@ class MessageDialog:
|
|
|
49
49
|
Args:
|
|
50
50
|
message: The message text to display. Supports multiline strings.
|
|
51
51
|
title: The dialog window title.
|
|
52
|
-
buttons: List of button labels. Can specify
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
buttons: List of button labels. Can specify an accent as
|
|
53
|
+
"label:accent" (e.g., "OK:primary"). If None, defaults to
|
|
54
|
+
["Cancel", "OK"].
|
|
55
55
|
command: Optional callback function to execute when any button is pressed.
|
|
56
56
|
width: Maximum width in characters for text wrapping.
|
|
57
57
|
master: Parent widget for the dialog.
|
|
58
58
|
alert: If True, rings the system bell when shown.
|
|
59
|
-
default: The button label to use as default. Receives primary
|
|
59
|
+
default: The button label to use as default. Receives the primary accent and focus.
|
|
60
60
|
padding: Padding around the message content.
|
|
61
61
|
icon: Optional icon specification. Can be a string (icon name) or dict with
|
|
62
62
|
keys: 'name' (required), 'size' (default 32), 'color' (optional).
|
|
@@ -139,7 +139,7 @@ class MessageDialog:
|
|
|
139
139
|
button_specs: List[DialogButton] = []
|
|
140
140
|
|
|
141
141
|
for i, button in enumerate(button_labels):
|
|
142
|
-
# Parse "text:
|
|
142
|
+
# Parse "text:accent" format
|
|
143
143
|
cnf = button.split(":")
|
|
144
144
|
text = cnf[0]
|
|
145
145
|
|
|
@@ -31,10 +31,37 @@ class SerializationError(BootstackError):
|
|
|
31
31
|
"""
|
|
32
32
|
|
|
33
33
|
|
|
34
|
+
class NavigationError(BootstackError):
|
|
35
|
+
"""Raised when a navigation operation references a wrong key.
|
|
36
|
+
|
|
37
|
+
Examples: adding a page, tab, or workspace whose key already exists, or
|
|
38
|
+
selecting, looking up, or removing one whose key does not exist.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class ThemeError(BootstackError):
|
|
43
|
+
"""Raised when a theme-related operation fails.
|
|
44
|
+
|
|
45
|
+
Examples: requesting an unknown theme name, or loading a malformed theme
|
|
46
|
+
definition.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class StyleBuilderError(BootstackError):
|
|
51
|
+
"""Raised when a widget style cannot be built.
|
|
52
|
+
|
|
53
|
+
Examples: an unsupported `variant` for a widget, or a missing required
|
|
54
|
+
theme color token.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
|
|
34
58
|
__all__ = [
|
|
35
59
|
"BootstackError",
|
|
36
60
|
"DuplicateIdError",
|
|
61
|
+
"NavigationError",
|
|
37
62
|
"ParentResolutionError",
|
|
38
63
|
"SerializationError",
|
|
64
|
+
"StyleBuilderError",
|
|
65
|
+
"ThemeError",
|
|
39
66
|
"UnknownEventError",
|
|
40
67
|
]
|