bootstack 0.1.0a9__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.0a11/LICENSE +21 -0
- bootstack-0.1.0a11/PKG-INFO +264 -0
- bootstack-0.1.0a11/README.md +219 -0
- bootstack-0.1.0a11/pyproject.toml +139 -0
- bootstack-0.1.0a11/src/bootstack/__init__.py +153 -0
- bootstack-0.1.0a11/src/bootstack/_core/__init__.py +21 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/__init__.py +45 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/bind.py +192 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/busy.py +72 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/clipboard.py +89 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/grid.py +211 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/localization.py +231 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/pack.py +140 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/place.py +113 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/selection.py +136 -0
- bootstack-0.1.0a11/src/bootstack/_core/capabilities/signals.py +244 -0
- bootstack-0.1.0a11/src/bootstack/_core/exceptions.py +25 -0
- bootstack-0.1.0a11/src/bootstack/_core/images.py +463 -0
- bootstack-0.1.0a11/src/bootstack/_core/mixins/widget.py +132 -0
- bootstack-0.1.0a11/src/bootstack/_core/paths.py +49 -0
- bootstack-0.1.0a11/src/bootstack/_core/publisher.py +149 -0
- bootstack-0.1.0a11/src/bootstack/_runtime/app.py +892 -0
- bootstack-0.1.0a11/src/bootstack/_runtime/base_window.py +925 -0
- bootstack-0.1.0a11/src/bootstack/_runtime/shortcuts.py +496 -0
- bootstack-0.1.0a11/src/bootstack/_runtime/tk_patch.py +43 -0
- bootstack-0.1.0a11/src/bootstack/_runtime/toplevel.py +256 -0
- bootstack-0.1.0a11/src/bootstack/_runtime/utility.py +370 -0
- bootstack-0.1.0a11/src/bootstack/_runtime/window_utilities.py +1050 -0
- bootstack-0.1.0a11/src/bootstack/assets/__init__.py +21 -0
- bootstack-0.1.0a11/src/bootstack/assets/bootstack.ico +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/bootstack.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/badge-pill.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/badge-square.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/button-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/button-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/card.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/field.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/input-addon-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/input-addon-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/input-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/input-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/listrow-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/listrow-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/manifest.toml +361 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/navitem-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/navitem-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/radiobutton.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/slider-handle.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/slider-track-h.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/slider-track-v.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/switch-off.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/switch-on.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/tab-h.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/elements/tab-v.png +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/icons/bootstrap.ttf +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/icons/glyphmap.json +2080 -0
- bootstack-0.1.0a11/src/bootstack/assets/icons/icon_metrics.json +12470 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +875 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +875 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +851 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +841 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +914 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +841 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +841 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a11/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a11/src/bootstack/cli/__init__.py +130 -0
- bootstack-0.1.0a11/src/bootstack/cli/add.py +387 -0
- bootstack-0.1.0a11/src/bootstack/cli/appicon.py +285 -0
- bootstack-0.1.0a11/src/bootstack/cli/config.py +313 -0
- bootstack-0.1.0a11/src/bootstack/cli/demo.py +937 -0
- bootstack-0.1.0a11/src/bootstack/cli/icons.py +327 -0
- bootstack-0.1.0a11/src/bootstack/cli/pyinstaller.py +267 -0
- bootstack-0.1.0a11/src/bootstack/cli/run.py +95 -0
- bootstack-0.1.0a11/src/bootstack/cli/start.py +117 -0
- bootstack-0.1.0a11/src/bootstack/cli/templates/__init__.py +959 -0
- bootstack-0.1.0a11/src/bootstack/clipboard.py +48 -0
- bootstack-0.1.0a11/src/bootstack/constants.py +318 -0
- bootstack-0.1.0a11/src/bootstack/data/README.md +615 -0
- bootstack-0.1.0a11/src/bootstack/data/__init__.py +78 -0
- bootstack-0.1.0a11/src/bootstack/data/_observable.py +276 -0
- bootstack-0.1.0a11/src/bootstack/data/base.py +780 -0
- bootstack-0.1.0a11/src/bootstack/data/file_source.py +367 -0
- bootstack-0.1.0a11/src/bootstack/data/memory_source.py +430 -0
- bootstack-0.1.0a11/src/bootstack/data/query.py +367 -0
- bootstack-0.1.0a11/src/bootstack/data/readers.py +289 -0
- bootstack-0.1.0a11/src/bootstack/data/sqlite_source.py +869 -0
- bootstack-0.1.0a11/src/bootstack/data/types.py +354 -0
- bootstack-0.1.0a11/src/bootstack/data/writers.py +232 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/__init__.py +947 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/__init__.py +51 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/colorchooser.py +539 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/colordropper.py +257 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/datedialog.py +426 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/dialog.py +524 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/filterdialog.py +353 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/fontdialog.py +377 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/formdialog.py +545 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/message.py +485 -0
- bootstack-0.1.0a11/src/bootstack/dialogs/_impl/query.py +569 -0
- bootstack-0.1.0a11/src/bootstack/errors.py +67 -0
- bootstack-0.1.0a11/src/bootstack/events/__init__.py +100 -0
- bootstack-0.1.0a11/src/bootstack/events/_event.py +135 -0
- bootstack-0.1.0a11/src/bootstack/events/_payloads.py +489 -0
- bootstack-0.1.0a11/src/bootstack/events/_subscription.py +38 -0
- bootstack-0.1.0a11/src/bootstack/i18n/README.md +77 -0
- bootstack-0.1.0a11/src/bootstack/i18n/__init__.py +23 -0
- bootstack-0.1.0a11/src/bootstack/i18n/catalog.py +121 -0
- bootstack-0.1.0a11/src/bootstack/i18n/intl_format.py +584 -0
- bootstack-0.1.0a11/src/bootstack/i18n/msgcat.py +425 -0
- bootstack-0.1.0a11/src/bootstack/i18n/specs.py +156 -0
- bootstack-0.1.0a11/src/bootstack/images.py +546 -0
- bootstack-0.1.0a11/src/bootstack/scheduling/__init__.py +11 -0
- bootstack-0.1.0a11/src/bootstack/scheduling/_schedule.py +218 -0
- bootstack-0.1.0a11/src/bootstack/shortcuts.py +21 -0
- bootstack-0.1.0a11/src/bootstack/signals/README.md +112 -0
- bootstack-0.1.0a11/src/bootstack/signals/__init__.py +10 -0
- bootstack-0.1.0a11/src/bootstack/signals/integration.py +100 -0
- bootstack-0.1.0a11/src/bootstack/signals/signal.py +310 -0
- bootstack-0.1.0a11/src/bootstack/signals/types.py +6 -0
- bootstack-0.1.0a11/src/bootstack/store.py +286 -0
- bootstack-0.1.0a11/src/bootstack/streams/__init__.py +12 -0
- bootstack-0.1.0a11/src/bootstack/streams/_stream.py +321 -0
- bootstack-0.1.0a11/src/bootstack/style/__init__.py +38 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/__init__.py +51 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/badge.py +46 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/button.py +339 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/buttongroup.py +311 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/calendar.py +271 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/checkbutton.py +110 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/combobox.py +113 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/contextmenu.py +268 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/entry.py +82 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/expander.py +148 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/field.py +335 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/frame.py +42 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/label.py +28 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/labelframe.py +34 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/listview.py +369 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/menubar.py +91 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/menubutton.py +357 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/panedwindow.py +25 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/progressbar.py +67 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/radiobutton.py +99 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/scale.py +64 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/scrollbar.py +225 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/separator.py +49 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/sidenav.py +643 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/sizegrip.py +15 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/spinbox.py +119 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/switch.py +70 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/tabitem.py +204 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/togglegroup.py +294 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/toolbutton.py +275 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/tooltip.py +26 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/treeview.py +193 -0
- bootstack-0.1.0a11/src/bootstack/style/builders/utils.py +446 -0
- bootstack-0.1.0a11/src/bootstack/style/builders_tk/__init__.py +16 -0
- bootstack-0.1.0a11/src/bootstack/style/builders_tk/defaults.py +229 -0
- bootstack-0.1.0a11/src/bootstack/style/fonts.py +123 -0
- bootstack-0.1.0a11/src/bootstack/style/style.py +566 -0
- bootstack-0.1.0a11/src/bootstack/style/style_builder_base.py +693 -0
- bootstack-0.1.0a11/src/bootstack/style/style_builder_mixed.py +93 -0
- bootstack-0.1.0a11/src/bootstack/style/style_builder_tk.py +109 -0
- bootstack-0.1.0a11/src/bootstack/style/style_builder_ttk.py +353 -0
- bootstack-0.1.0a11/src/bootstack/style/style_resolver.py +443 -0
- bootstack-0.1.0a11/src/bootstack/style/theme.py +245 -0
- bootstack-0.1.0a11/src/bootstack/style/theme_provider.py +471 -0
- bootstack-0.1.0a11/src/bootstack/style/themes/__init__.py +128 -0
- bootstack-0.1.0a11/src/bootstack/style/tk_patch.py +5 -0
- bootstack-0.1.0a11/src/bootstack/style/token_maps.py +41 -0
- bootstack-0.1.0a11/src/bootstack/style/types.py +32 -0
- bootstack-0.1.0a11/src/bootstack/style/typography.py +508 -0
- bootstack-0.1.0a11/src/bootstack/style/utility.py +746 -0
- bootstack-0.1.0a11/src/bootstack/types.py +37 -0
- bootstack-0.1.0a11/src/bootstack/validation/__init__.py +6 -0
- bootstack-0.1.0a11/src/bootstack/validation/types.py +15 -0
- bootstack-0.1.0a11/src/bootstack/validation/validation_rules.py +139 -0
- bootstack-0.1.0a11/src/bootstack/widgets/__init__.py +77 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/__init__.py +31 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/app_config.py +266 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/base.py +377 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/container.py +202 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/context.py +35 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/events.py +130 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/field_mixin.py +281 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/icon_image_props.py +72 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/image_binding.py +93 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/navmodel.py +345 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/options.py +210 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/selection_group.py +130 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/window_controls.py +96 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_core/window_menu.py +188 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/__init__.py +1 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/_internal/wrapper_base.py +307 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/_parts/__init__.py +11 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/_parts/numberentry_part.py +357 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +385 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/_parts/textentry_part.py +382 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/__init__.py +33 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/_dateutils.py +33 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/_image_fit.py +105 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/accordion.py +381 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/avatar.py +192 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/buttongroup.py +371 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/calendar.py +957 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/carousel.py +558 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/compositeframe.py +298 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/contextmenu.py +1914 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/dateentry.py +404 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/dropdownbutton.py +325 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/expander.py +508 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/field.py +660 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/floodgauge.py +427 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/form.py +1030 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/gallery.py +502 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/list/__init__.py +15 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/list/listitem.py +802 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/list/listview.py +1441 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/menu/__init__.py +18 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/menu/model.py +358 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/menu/render_native.py +134 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/menu/render_themed.py +134 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/meter.py +851 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/numericentry.py +201 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/pagestack.py +344 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/passwordentry.py +131 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/pathentry.py +168 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/picture.py +290 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/radiogroup.py +511 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/scrolledtext.py +375 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/scrollview.py +698 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/selectbox.py +1026 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/shell/__init__.py +40 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/shell/content_host.py +46 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/shell/layout.py +326 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +343 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/shell/providers.py +558 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/shell/rail.py +117 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/shell/shell.py +526 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/shell/workspace.py +260 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +16 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/sidenav/header.py +81 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/sidenav/separator.py +44 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/slider/__init__.py +7 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/slider/_shared.py +161 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +843 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/slider/slider.py +741 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/spinnerentry.py +177 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tableview/tableview.py +3281 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tabs/__init__.py +23 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +389 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tabs/tabs.py +567 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tabs/tabview.py +646 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/__init__.py +26 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/change.py +46 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +382 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/core.py +464 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/decoration.py +42 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/diff.py +127 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +1 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +138 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +143 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +138 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +312 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +87 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/filter.py +171 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +438 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +88 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +156 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/textarea.py +565 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textarea/undo.py +217 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/textentry.py +57 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/timeentry.py +172 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/toast.py +390 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/toast_stack.py +151 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/togglegroup.py +418 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/toolbar.py +577 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tooltip.py +404 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tree/__init__.py +7 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tree/source_binding.py +136 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tree/treeitem.py +393 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tree/treenode.py +174 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/composites/tree/treeview.py +841 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/mixins/__init__.py +24 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/mixins/configure_mixin.py +216 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/mixins/entry_mixin.py +134 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/mixins/font_mixin.py +368 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/mixins/icon_mixin.py +61 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/mixins/localization_mixin.py +253 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/mixins/signal_mixin.py +268 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/mixins/validation_mixin.py +212 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/__init__.py +49 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/_menubutton.py +107 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/badge.py +45 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/button.py +76 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/card.py +45 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/checkbutton.py +124 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/checktoggle.py +62 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/combobox.py +155 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/entry.py +87 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/frame.py +180 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/gridframe.py +527 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/label.py +84 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/labelframe.py +54 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/optionmenu.py +387 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/packframe.py +224 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/panedwindow.py +45 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/progressbar.py +83 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/radiobutton.py +115 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/radiotoggle.py +54 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/scrollbar.py +42 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/separator.py +43 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/sizegrip.py +33 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/spinbox.py +95 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/switch.py +44 -0
- bootstack-0.1.0a11/src/bootstack/widgets/_impl/primitives/treeview.py +69 -0
- bootstack-0.1.0a11/src/bootstack/widgets/app.py +235 -0
- bootstack-0.1.0a11/src/bootstack/widgets/appshell.py +798 -0
- bootstack-0.1.0a11/src/bootstack/widgets/avatar.py +140 -0
- bootstack-0.1.0a11/src/bootstack/widgets/boolean_controls.py +455 -0
- bootstack-0.1.0a11/src/bootstack/widgets/button.py +176 -0
- bootstack-0.1.0a11/src/bootstack/widgets/buttongroup.py +239 -0
- bootstack-0.1.0a11/src/bootstack/widgets/calendar.py +195 -0
- bootstack-0.1.0a11/src/bootstack/widgets/card.py +146 -0
- bootstack-0.1.0a11/src/bootstack/widgets/carousel.py +240 -0
- bootstack-0.1.0a11/src/bootstack/widgets/codeeditor.py +491 -0
- bootstack-0.1.0a11/src/bootstack/widgets/contextmenu.py +368 -0
- bootstack-0.1.0a11/src/bootstack/widgets/datatable.py +674 -0
- bootstack-0.1.0a11/src/bootstack/widgets/datefield.py +401 -0
- bootstack-0.1.0a11/src/bootstack/widgets/expander.py +574 -0
- bootstack-0.1.0a11/src/bootstack/widgets/form.py +169 -0
- bootstack-0.1.0a11/src/bootstack/widgets/gallery.py +250 -0
- bootstack-0.1.0a11/src/bootstack/widgets/gauge.py +168 -0
- bootstack-0.1.0a11/src/bootstack/widgets/grid.py +105 -0
- bootstack-0.1.0a11/src/bootstack/widgets/groupbox.py +149 -0
- bootstack-0.1.0a11/src/bootstack/widgets/label.py +221 -0
- bootstack-0.1.0a11/src/bootstack/widgets/listview.py +354 -0
- bootstack-0.1.0a11/src/bootstack/widgets/menubutton.py +394 -0
- bootstack-0.1.0a11/src/bootstack/widgets/numberfield.py +429 -0
- bootstack-0.1.0a11/src/bootstack/widgets/pagestack.py +334 -0
- bootstack-0.1.0a11/src/bootstack/widgets/passwordfield.py +384 -0
- bootstack-0.1.0a11/src/bootstack/widgets/pathfield.py +399 -0
- bootstack-0.1.0a11/src/bootstack/widgets/picture.py +251 -0
- bootstack-0.1.0a11/src/bootstack/widgets/progressbar.py +106 -0
- bootstack-0.1.0a11/src/bootstack/widgets/radio_variants.py +271 -0
- bootstack-0.1.0a11/src/bootstack/widgets/radiogroup.py +228 -0
- bootstack-0.1.0a11/src/bootstack/widgets/scrollbar.py +64 -0
- bootstack-0.1.0a11/src/bootstack/widgets/scrollview.py +134 -0
- bootstack-0.1.0a11/src/bootstack/widgets/select.py +302 -0
- bootstack-0.1.0a11/src/bootstack/widgets/selectbutton.py +182 -0
- bootstack-0.1.0a11/src/bootstack/widgets/separator.py +59 -0
- bootstack-0.1.0a11/src/bootstack/widgets/sizegrip.py +42 -0
- bootstack-0.1.0a11/src/bootstack/widgets/slider.py +376 -0
- bootstack-0.1.0a11/src/bootstack/widgets/spinbox.py +147 -0
- bootstack-0.1.0a11/src/bootstack/widgets/spinnerfield.py +390 -0
- bootstack-0.1.0a11/src/bootstack/widgets/splitview.py +392 -0
- bootstack-0.1.0a11/src/bootstack/widgets/stacks.py +214 -0
- bootstack-0.1.0a11/src/bootstack/widgets/statusbar.py +169 -0
- bootstack-0.1.0a11/src/bootstack/widgets/tabs.py +407 -0
- bootstack-0.1.0a11/src/bootstack/widgets/textarea.py +427 -0
- bootstack-0.1.0a11/src/bootstack/widgets/textfield.py +405 -0
- bootstack-0.1.0a11/src/bootstack/widgets/theme_toggle.py +92 -0
- bootstack-0.1.0a11/src/bootstack/widgets/timefield.py +346 -0
- bootstack-0.1.0a11/src/bootstack/widgets/toast.py +314 -0
- bootstack-0.1.0a11/src/bootstack/widgets/togglegroup.py +231 -0
- bootstack-0.1.0a11/src/bootstack/widgets/toolbar.py +280 -0
- bootstack-0.1.0a11/src/bootstack/widgets/tooltip.py +71 -0
- bootstack-0.1.0a11/src/bootstack/widgets/tree.py +648 -0
- bootstack-0.1.0a11/src/bootstack/widgets/types.py +289 -0
- bootstack-0.1.0a11/src/bootstack/widgets/window.py +276 -0
- bootstack-0.1.0a11/src/bootstack.egg-info/PKG-INFO +264 -0
- bootstack-0.1.0a11/src/bootstack.egg-info/SOURCES.txt +472 -0
- bootstack-0.1.0a11/src/bootstack.egg-info/requires.txt +26 -0
- bootstack-0.1.0a11/tests/test_images.py +112 -0
- bootstack-0.1.0a11/tests/test_images_gui.py +72 -0
- bootstack-0.1.0a11/tests/test_intl_format.py +99 -0
- bootstack-0.1.0a11/tests/test_navmodel.py +327 -0
- bootstack-0.1.0a11/tests/test_public_surface.py +142 -0
- bootstack-0.1.0a11/tests/test_store.py +169 -0
- bootstack-0.1.0a11/tests/test_theme_from_existing.py +64 -0
- bootstack-0.1.0a11/tests/test_validation_rules.py +152 -0
- bootstack-0.1.0a9/LICENSE +0 -22
- bootstack-0.1.0a9/PKG-INFO +0 -214
- bootstack-0.1.0a9/README.md +0 -180
- bootstack-0.1.0a9/pyproject.toml +0 -111
- bootstack-0.1.0a9/src/bootstack/__init__.py +0 -254
- bootstack-0.1.0a9/src/bootstack/api/__init__.py +0 -128
- bootstack-0.1.0a9/src/bootstack/api/app.py +0 -30
- bootstack-0.1.0a9/src/bootstack/api/constants.py +0 -3
- bootstack-0.1.0a9/src/bootstack/api/data.py +0 -23
- bootstack-0.1.0a9/src/bootstack/api/dialogs.py +0 -44
- bootstack-0.1.0a9/src/bootstack/api/i18n.py +0 -17
- bootstack-0.1.0a9/src/bootstack/api/localization.py +0 -16
- bootstack-0.1.0a9/src/bootstack/api/menu.py +0 -7
- bootstack-0.1.0a9/src/bootstack/api/style.py +0 -26
- bootstack-0.1.0a9/src/bootstack/api/utils.py +0 -24
- bootstack-0.1.0a9/src/bootstack/api/widgets.py +0 -140
- bootstack-0.1.0a9/src/bootstack/assets/__init__.py +0 -24
- bootstack-0.1.0a9/src/bootstack/assets/bootstack-dark.ico +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/bootstack-light.ico +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/bootstack-transparent.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/bootstack.ico +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/bootstack.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/badge-pill.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/badge-square.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/border.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-horizontal-after-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-horizontal-after-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-horizontal-before-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-horizontal-before-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-horizontal-center-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-horizontal-center-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-vertical-after-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-vertical-after-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-vertical-before-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-vertical-before-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-vertical-center-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/button-group-vertical-center-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/field.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/input-after-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/input-after-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/input-before-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/input-before-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/input-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/input-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/manifest.toml +0 -480
- bootstack-0.1.0a9/src/bootstack/assets/elements/nav-button-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/nav-button-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/nav-icon-button-compact.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/nav-icon-button-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/notebook-client-border.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/notebook-tab-active.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/notebook-tab-bar.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/notebook-tab-normal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/notebook-tab-pill.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/progress-bar-horizontal-striped.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/progress-bar-solid.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/progress-bar-thin.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/progress-bar-vertical-striped.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/radio-selected.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/radio-unselected.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/slider-handle-focus.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/slider-handle.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/slider-track-horizontal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/slider-track-vertical.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/switch-off.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/switch-on.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/tabs-bar-horizontal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/tabs-bar-vertical.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/elements/tabs-pill.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -853
- bootstack-0.1.0a9/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -875
- bootstack-0.1.0a9/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -853
- bootstack-0.1.0a9/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -853
- bootstack-0.1.0a9/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -853
- bootstack-0.1.0a9/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -875
- bootstack-0.1.0a9/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -853
- bootstack-0.1.0a9/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -853
- bootstack-0.1.0a9/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -851
- bootstack-0.1.0a9/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -841
- bootstack-0.1.0a9/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -914
- bootstack-0.1.0a9/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -841
- bootstack-0.1.0a9/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -841
- bootstack-0.1.0a9/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -842
- bootstack-0.1.0a9/src/bootstack/assets/themes/amber-dark.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/amber-light.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/aurora-dark.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/aurora-light.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/bootstrap-dark.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/bootstrap-light.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/classic-dark.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/classic-light.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/docs-dark.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/docs-light.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/forest-dark.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/forest-light.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/ocean-dark.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/ocean-light.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/rose-dark.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/themes/rose-light.json +0 -32
- bootstack-0.1.0a9/src/bootstack/assets/widgets/__init__.py +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/badge-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/badge-pill.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/border.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/button-group-horizontal-after.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/button-group-horizontal-before.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/button-group-horizontal-center.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/button-group-vertical-after.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/button-group-vertical-before.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/button-group-vertical-center.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/button.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/checkbox-checked.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/checkbox-indeterminate.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/checkbox-unchecked.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/field.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/icon-button.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/input-inner.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/input-prefix.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/input-suffix.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/input.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/list-item-focus.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/list-item-separated.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/menu-item-separated.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/notebook-client-border.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/notebook-pill-active.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/notebook-pill-inactive.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/notebook-tab-active.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/notebook-tab-border.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/notebook-tab-normal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/notebook-underline.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/progress-bar-horizontal-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/progress-bar-horizontal-striped.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/progress-bar-vertical-default.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/progress-bar-vertical-striped.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/progress-trough-horizontal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/progress-trough-vertical.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/radio-selected.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/radio-unselected.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/scrollbar-horizontal-rounded.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/scrollbar-vertical-rounded.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/separator-horizontal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/separator-vertical.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/slider-handle-focus.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/slider-handle.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/slider-track-horizontal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/slider-track-vertical.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/switch-off.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/switch-on.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/tabs-bar-horizontal.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/tabs-bar-vertical.png +0 -0
- bootstack-0.1.0a9/src/bootstack/assets/widgets/tabs-pill.png +0 -0
- bootstack-0.1.0a9/src/bootstack/cli/__init__.py +0 -134
- bootstack-0.1.0a9/src/bootstack/cli/add.py +0 -439
- bootstack-0.1.0a9/src/bootstack/cli/config.py +0 -287
- bootstack-0.1.0a9/src/bootstack/cli/demo.py +0 -1267
- bootstack-0.1.0a9/src/bootstack/cli/icons.py +0 -28
- bootstack-0.1.0a9/src/bootstack/cli/list_cmd.py +0 -71
- bootstack-0.1.0a9/src/bootstack/cli/pyinstaller.py +0 -246
- bootstack-0.1.0a9/src/bootstack/cli/run.py +0 -99
- bootstack-0.1.0a9/src/bootstack/cli/start.py +0 -105
- bootstack-0.1.0a9/src/bootstack/cli/templates/__init__.py +0 -861
- bootstack-0.1.0a9/src/bootstack/constants.py +0 -325
- bootstack-0.1.0a9/src/bootstack/core/__init__.py +0 -34
- bootstack-0.1.0a9/src/bootstack/core/capabilities/__init__.py +0 -45
- bootstack-0.1.0a9/src/bootstack/core/capabilities/bind.py +0 -154
- bootstack-0.1.0a9/src/bootstack/core/capabilities/busy.py +0 -61
- bootstack-0.1.0a9/src/bootstack/core/capabilities/clipboard.py +0 -88
- bootstack-0.1.0a9/src/bootstack/core/capabilities/grid.py +0 -188
- bootstack-0.1.0a9/src/bootstack/core/capabilities/localization.py +0 -231
- bootstack-0.1.0a9/src/bootstack/core/capabilities/pack.py +0 -119
- bootstack-0.1.0a9/src/bootstack/core/capabilities/place.py +0 -92
- bootstack-0.1.0a9/src/bootstack/core/capabilities/selection.py +0 -136
- bootstack-0.1.0a9/src/bootstack/core/capabilities/signals.py +0 -242
- bootstack-0.1.0a9/src/bootstack/core/exceptions.py +0 -95
- bootstack-0.1.0a9/src/bootstack/core/images.py +0 -283
- bootstack-0.1.0a9/src/bootstack/core/localization/README.md +0 -90
- bootstack-0.1.0a9/src/bootstack/core/localization/__init__.py +0 -13
- bootstack-0.1.0a9/src/bootstack/core/localization/intl_format.py +0 -580
- bootstack-0.1.0a9/src/bootstack/core/localization/msgcat.py +0 -425
- bootstack-0.1.0a9/src/bootstack/core/localization/specs.py +0 -143
- bootstack-0.1.0a9/src/bootstack/core/mixins/widget.py +0 -132
- bootstack-0.1.0a9/src/bootstack/core/publisher.py +0 -147
- bootstack-0.1.0a9/src/bootstack/core/signals/README.md +0 -112
- bootstack-0.1.0a9/src/bootstack/core/signals/__init__.py +0 -8
- bootstack-0.1.0a9/src/bootstack/core/signals/integration.py +0 -100
- bootstack-0.1.0a9/src/bootstack/core/signals/signal.py +0 -317
- bootstack-0.1.0a9/src/bootstack/core/signals/types.py +0 -4
- bootstack-0.1.0a9/src/bootstack/core/validation/__init__.py +0 -5
- bootstack-0.1.0a9/src/bootstack/core/validation/types.py +0 -13
- bootstack-0.1.0a9/src/bootstack/core/validation/validation_rules.py +0 -112
- bootstack-0.1.0a9/src/bootstack/datasource/README.md +0 -612
- bootstack-0.1.0a9/src/bootstack/datasource/__init__.py +0 -51
- bootstack-0.1.0a9/src/bootstack/datasource/base.py +0 -510
- bootstack-0.1.0a9/src/bootstack/datasource/file_source.py +0 -541
- bootstack-0.1.0a9/src/bootstack/datasource/memory_source.py +0 -524
- bootstack-0.1.0a9/src/bootstack/datasource/sqlite_source.py +0 -472
- bootstack-0.1.0a9/src/bootstack/datasource/types.py +0 -292
- bootstack-0.1.0a9/src/bootstack/dialogs/__init__.py +0 -56
- bootstack-0.1.0a9/src/bootstack/dialogs/colorchooser.py +0 -674
- bootstack-0.1.0a9/src/bootstack/dialogs/colordropper.py +0 -257
- bootstack-0.1.0a9/src/bootstack/dialogs/datedialog.py +0 -430
- bootstack-0.1.0a9/src/bootstack/dialogs/dialog.py +0 -514
- bootstack-0.1.0a9/src/bootstack/dialogs/filterdialog.py +0 -358
- bootstack-0.1.0a9/src/bootstack/dialogs/fontdialog.py +0 -339
- bootstack-0.1.0a9/src/bootstack/dialogs/formdialog.py +0 -541
- bootstack-0.1.0a9/src/bootstack/dialogs/message.py +0 -489
- bootstack-0.1.0a9/src/bootstack/dialogs/query.py +0 -561
- bootstack-0.1.0a9/src/bootstack/runtime/app.py +0 -889
- bootstack-0.1.0a9/src/bootstack/runtime/base_window.py +0 -811
- bootstack-0.1.0a9/src/bootstack/runtime/menu.py +0 -463
- bootstack-0.1.0a9/src/bootstack/runtime/shortcuts.py +0 -423
- bootstack-0.1.0a9/src/bootstack/runtime/tk_patch.py +0 -31
- bootstack-0.1.0a9/src/bootstack/runtime/toplevel.py +0 -131
- bootstack-0.1.0a9/src/bootstack/runtime/utility.py +0 -371
- bootstack-0.1.0a9/src/bootstack/runtime/window_utilities.py +0 -1050
- bootstack-0.1.0a9/src/bootstack/style/__init__.py +0 -5498
- bootstack-0.1.0a9/src/bootstack/style/bootstyle.py +0 -507
- bootstack-0.1.0a9/src/bootstack/style/bootstyle_builder_base.py +0 -752
- bootstack-0.1.0a9/src/bootstack/style/bootstyle_builder_mixed.py +0 -93
- bootstack-0.1.0a9/src/bootstack/style/bootstyle_builder_tk.py +0 -109
- bootstack-0.1.0a9/src/bootstack/style/bootstyle_builder_ttk.py +0 -354
- bootstack-0.1.0a9/src/bootstack/style/builders/__init__.py +0 -51
- bootstack-0.1.0a9/src/bootstack/style/builders/badge.py +0 -44
- bootstack-0.1.0a9/src/bootstack/style/builders/button.py +0 -453
- bootstack-0.1.0a9/src/bootstack/style/builders/buttongroup.py +0 -344
- bootstack-0.1.0a9/src/bootstack/style/builders/calendar.py +0 -271
- bootstack-0.1.0a9/src/bootstack/style/builders/checkbutton.py +0 -125
- bootstack-0.1.0a9/src/bootstack/style/builders/combobox.py +0 -112
- bootstack-0.1.0a9/src/bootstack/style/builders/contextmenu.py +0 -268
- bootstack-0.1.0a9/src/bootstack/style/builders/entry.py +0 -83
- bootstack-0.1.0a9/src/bootstack/style/builders/expander.py +0 -171
- bootstack-0.1.0a9/src/bootstack/style/builders/field.py +0 -318
- bootstack-0.1.0a9/src/bootstack/style/builders/frame.py +0 -27
- bootstack-0.1.0a9/src/bootstack/style/builders/label.py +0 -28
- bootstack-0.1.0a9/src/bootstack/style/builders/labelframe.py +0 -41
- bootstack-0.1.0a9/src/bootstack/style/builders/listview.py +0 -264
- bootstack-0.1.0a9/src/bootstack/style/builders/menubar.py +0 -74
- bootstack-0.1.0a9/src/bootstack/style/builders/menubutton.py +0 -408
- bootstack-0.1.0a9/src/bootstack/style/builders/notebook.py +0 -316
- bootstack-0.1.0a9/src/bootstack/style/builders/panedwindow.py +0 -25
- bootstack-0.1.0a9/src/bootstack/style/builders/progressbar.py +0 -71
- bootstack-0.1.0a9/src/bootstack/style/builders/radiobutton.py +0 -97
- bootstack-0.1.0a9/src/bootstack/style/builders/scale.py +0 -66
- bootstack-0.1.0a9/src/bootstack/style/builders/scrollbar.py +0 -360
- bootstack-0.1.0a9/src/bootstack/style/builders/separator.py +0 -45
- bootstack-0.1.0a9/src/bootstack/style/builders/sidenav.py +0 -313
- bootstack-0.1.0a9/src/bootstack/style/builders/sizegrip.py +0 -15
- bootstack-0.1.0a9/src/bootstack/style/builders/spinbox.py +0 -119
- bootstack-0.1.0a9/src/bootstack/style/builders/switch.py +0 -67
- bootstack-0.1.0a9/src/bootstack/style/builders/tabitem.py +0 -205
- bootstack-0.1.0a9/src/bootstack/style/builders/toolbutton.py +0 -260
- bootstack-0.1.0a9/src/bootstack/style/builders/tooltip.py +0 -26
- bootstack-0.1.0a9/src/bootstack/style/builders/treeview.py +0 -269
- bootstack-0.1.0a9/src/bootstack/style/builders/utils.py +0 -430
- bootstack-0.1.0a9/src/bootstack/style/builders_tk/__init__.py +0 -16
- bootstack-0.1.0a9/src/bootstack/style/builders_tk/defaults.py +0 -229
- bootstack-0.1.0a9/src/bootstack/style/style.py +0 -499
- bootstack-0.1.0a9/src/bootstack/style/theme_provider.py +0 -449
- bootstack-0.1.0a9/src/bootstack/style/tk_patch.py +0 -5
- bootstack-0.1.0a9/src/bootstack/style/token_maps.py +0 -42
- bootstack-0.1.0a9/src/bootstack/style/types.py +0 -32
- bootstack-0.1.0a9/src/bootstack/style/typography.py +0 -527
- bootstack-0.1.0a9/src/bootstack/style/utility.py +0 -696
- bootstack-0.1.0a9/src/bootstack/themes/__init__.py +0 -12
- bootstack-0.1.0a9/src/bootstack/themes/standard.py +0 -415
- bootstack-0.1.0a9/src/bootstack/themes/user.py +0 -45
- bootstack-0.1.0a9/src/bootstack/widgets/__init__.py +0 -53
- bootstack-0.1.0a9/src/bootstack/widgets/composites/__init__.py +0 -38
- bootstack-0.1.0a9/src/bootstack/widgets/composites/accordion.py +0 -385
- bootstack-0.1.0a9/src/bootstack/widgets/composites/appshell.py +0 -476
- bootstack-0.1.0a9/src/bootstack/widgets/composites/buttongroup.py +0 -391
- bootstack-0.1.0a9/src/bootstack/widgets/composites/calendar.py +0 -914
- bootstack-0.1.0a9/src/bootstack/widgets/composites/compositeframe.py +0 -282
- bootstack-0.1.0a9/src/bootstack/widgets/composites/contextmenu.py +0 -1754
- bootstack-0.1.0a9/src/bootstack/widgets/composites/dateentry.py +0 -434
- bootstack-0.1.0a9/src/bootstack/widgets/composites/dropdownbutton.py +0 -188
- bootstack-0.1.0a9/src/bootstack/widgets/composites/expander.py +0 -508
- bootstack-0.1.0a9/src/bootstack/widgets/composites/field.py +0 -474
- bootstack-0.1.0a9/src/bootstack/widgets/composites/floodgauge.py +0 -434
- bootstack-0.1.0a9/src/bootstack/widgets/composites/form.py +0 -982
- bootstack-0.1.0a9/src/bootstack/widgets/composites/labeledscale.py +0 -209
- bootstack-0.1.0a9/src/bootstack/widgets/composites/list/__init__.py +0 -15
- bootstack-0.1.0a9/src/bootstack/widgets/composites/list/listitem.py +0 -715
- bootstack-0.1.0a9/src/bootstack/widgets/composites/list/listview.py +0 -1212
- bootstack-0.1.0a9/src/bootstack/widgets/composites/menubar.py +0 -303
- bootstack-0.1.0a9/src/bootstack/widgets/composites/meter.py +0 -882
- bootstack-0.1.0a9/src/bootstack/widgets/composites/numericentry.py +0 -183
- bootstack-0.1.0a9/src/bootstack/widgets/composites/pagestack.py +0 -330
- bootstack-0.1.0a9/src/bootstack/widgets/composites/passwordentry.py +0 -149
- bootstack-0.1.0a9/src/bootstack/widgets/composites/pathentry.py +0 -223
- bootstack-0.1.0a9/src/bootstack/widgets/composites/radiogroup.py +0 -474
- bootstack-0.1.0a9/src/bootstack/widgets/composites/scrolledtext.py +0 -388
- bootstack-0.1.0a9/src/bootstack/widgets/composites/scrollview.py +0 -684
- bootstack-0.1.0a9/src/bootstack/widgets/composites/selectbox.py +0 -551
- bootstack-0.1.0a9/src/bootstack/widgets/composites/sidenav/__init__.py +0 -24
- bootstack-0.1.0a9/src/bootstack/widgets/composites/sidenav/group.py +0 -485
- bootstack-0.1.0a9/src/bootstack/widgets/composites/sidenav/header.py +0 -83
- bootstack-0.1.0a9/src/bootstack/widgets/composites/sidenav/item.py +0 -413
- bootstack-0.1.0a9/src/bootstack/widgets/composites/sidenav/separator.py +0 -51
- bootstack-0.1.0a9/src/bootstack/widgets/composites/sidenav/view.py +0 -910
- bootstack-0.1.0a9/src/bootstack/widgets/composites/spinnerentry.py +0 -232
- bootstack-0.1.0a9/src/bootstack/widgets/composites/tableview/tableview.py +0 -2254
- bootstack-0.1.0a9/src/bootstack/widgets/composites/tabs/__init__.py +0 -6
- bootstack-0.1.0a9/src/bootstack/widgets/composites/tabs/tabitem.py +0 -372
- bootstack-0.1.0a9/src/bootstack/widgets/composites/tabs/tabs.py +0 -478
- bootstack-0.1.0a9/src/bootstack/widgets/composites/tabs/tabview.py +0 -352
- bootstack-0.1.0a9/src/bootstack/widgets/composites/textentry.py +0 -87
- bootstack-0.1.0a9/src/bootstack/widgets/composites/timeentry.py +0 -196
- bootstack-0.1.0a9/src/bootstack/widgets/composites/toast.py +0 -371
- bootstack-0.1.0a9/src/bootstack/widgets/composites/togglegroup.py +0 -382
- bootstack-0.1.0a9/src/bootstack/widgets/composites/toolbar.py +0 -393
- bootstack-0.1.0a9/src/bootstack/widgets/composites/tooltip.py +0 -404
- bootstack-0.1.0a9/src/bootstack/widgets/internal/__init__.py +0 -0
- bootstack-0.1.0a9/src/bootstack/widgets/internal/wrapper_base.py +0 -304
- bootstack-0.1.0a9/src/bootstack/widgets/mixins/__init__.py +0 -25
- bootstack-0.1.0a9/src/bootstack/widgets/mixins/configure_mixin.py +0 -186
- bootstack-0.1.0a9/src/bootstack/widgets/mixins/entry_mixin.py +0 -70
- bootstack-0.1.0a9/src/bootstack/widgets/mixins/font_mixin.py +0 -346
- bootstack-0.1.0a9/src/bootstack/widgets/mixins/icon_mixin.py +0 -38
- bootstack-0.1.0a9/src/bootstack/widgets/mixins/localization_mixin.py +0 -255
- bootstack-0.1.0a9/src/bootstack/widgets/mixins/signal_mixin.py +0 -272
- bootstack-0.1.0a9/src/bootstack/widgets/mixins/validation_mixin.py +0 -204
- bootstack-0.1.0a9/src/bootstack/widgets/parts/__init__.py +0 -11
- bootstack-0.1.0a9/src/bootstack/widgets/parts/numberentry_part.py +0 -345
- bootstack-0.1.0a9/src/bootstack/widgets/parts/spinnerentry_part.py +0 -394
- bootstack-0.1.0a9/src/bootstack/widgets/parts/textentry_part.py +0 -346
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/__init__.py +0 -55
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/badge.py +0 -44
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/button.py +0 -89
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/card.py +0 -66
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/checkbutton.py +0 -134
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/checktoggle.py +0 -58
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/combobox.py +0 -165
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/entry.py +0 -98
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/frame.py +0 -206
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/gridframe.py +0 -479
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/label.py +0 -95
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/labelframe.py +0 -63
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/menubutton.py +0 -118
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/notebook.py +0 -551
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/optionmenu.py +0 -248
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/packframe.py +0 -228
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/panedwindow.py +0 -58
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/progressbar.py +0 -95
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/radiobutton.py +0 -125
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/radiotoggle.py +0 -50
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/scale.py +0 -85
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/scrollbar.py +0 -56
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/separator.py +0 -56
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/sizegrip.py +0 -47
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/spinbox.py +0 -91
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/switch.py +0 -41
- bootstack-0.1.0a9/src/bootstack/widgets/primitives/treeview.py +0 -77
- bootstack-0.1.0a9/src/bootstack/widgets/types.py +0 -20
- bootstack-0.1.0a9/src/bootstack.egg-info/PKG-INFO +0 -214
- bootstack-0.1.0a9/src/bootstack.egg-info/SOURCES.txt +0 -428
- bootstack-0.1.0a9/src/bootstack.egg-info/requires.txt +0 -11
- bootstack-0.1.0a9/tests/test_togglegroup.py +0 -147
- bootstack-0.1.0a9/tests/test_variables.py +0 -81
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/MANIFEST.in +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/NOTICE +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/setup.cfg +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/__main__.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/capabilities/after.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/capabilities/bindtags.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/capabilities/focus.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/capabilities/grab.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/capabilities/winfo.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/colorutils.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/mixins/__init__.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/mixins/ttk_state.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack/_core}/variables.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/runtime → bootstack-0.1.0a11/src/bootstack/_runtime}/__init__.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/runtime → bootstack-0.1.0a11/src/bootstack/_runtime}/events.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/runtime → bootstack-0.1.0a11/src/bootstack/_runtime}/visual_focus.py +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/assets/elements/__init__.py +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/assets/elements/list-item-separated.png +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/assets/elements/list-item.png +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/assets/elements/menu-item.png +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/cli/__main__.py +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/cli/build.py +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/cli/doctor.py +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/cli/promote.py +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/py.typed +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack/style/element.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/core → bootstack-0.1.0a11/src/bootstack}/validation/validation_result.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/assets/themes → bootstack-0.1.0a11/src/bootstack/widgets/_impl/_internal}/__init__.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/widgets → bootstack-0.1.0a11/src/bootstack/widgets/_impl}/composites/scrolledtext.pyi +0 -0
- {bootstack-0.1.0a9/src/bootstack/widgets → bootstack-0.1.0a11/src/bootstack/widgets/_impl}/composites/tableview/__init__.py +0 -0
- {bootstack-0.1.0a9/src/bootstack/widgets → bootstack-0.1.0a11/src/bootstack/widgets/_impl}/composites/tableview/types.py +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack.egg-info/dependency_links.txt +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack.egg-info/entry_points.txt +0 -0
- {bootstack-0.1.0a9 → bootstack-0.1.0a11}/src/bootstack.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 - 2026 Israel Dryer
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: bootstack
|
|
3
|
+
Version: 0.1.0a11
|
|
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
|
+
Author-email: Israel Dryer <israel.dryer@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/israel-dryer/bootstack
|
|
8
|
+
Project-URL: Documentation, https://bootstack.org/
|
|
9
|
+
Keywords: tkinter,ttk,gui,desktop,python3,ui,widgets,theming,cross-platform,modern,framework,application-framework,desktop-ui,python-gui
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Win32 (MS Windows)
|
|
12
|
+
Classifier: Environment :: X11 Applications :: GTK
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
18
|
+
Classifier: Topic :: Software Development :: User Interfaces
|
|
19
|
+
Classifier: Operating System :: OS Independent
|
|
20
|
+
Requires-Python: >=3.12
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
License-File: NOTICE
|
|
24
|
+
Requires-Dist: pillow<=12,>=10
|
|
25
|
+
Requires-Dist: typing-extensions>=4.10
|
|
26
|
+
Requires-Dist: Babel>=2.12
|
|
27
|
+
Requires-Dist: python-dateutil>=2.9
|
|
28
|
+
Requires-Dist: dateparser>=1.1
|
|
29
|
+
Requires-Dist: pywinstyles>=1.8; sys_platform == "win32"
|
|
30
|
+
Requires-Dist: screeninfo>=0.8
|
|
31
|
+
Provides-Extra: excel
|
|
32
|
+
Requires-Dist: XlsxWriter>=3; extra == "excel"
|
|
33
|
+
Provides-Extra: parquet
|
|
34
|
+
Requires-Dist: pyarrow>=14; extra == "parquet"
|
|
35
|
+
Provides-Extra: hdf5
|
|
36
|
+
Requires-Dist: pandas>=2; extra == "hdf5"
|
|
37
|
+
Requires-Dist: tables>=3.8; extra == "hdf5"
|
|
38
|
+
Provides-Extra: docs
|
|
39
|
+
Requires-Dist: sphinx>=7.2; extra == "docs"
|
|
40
|
+
Requires-Dist: pydata-sphinx-theme; extra == "docs"
|
|
41
|
+
Requires-Dist: sphinx-design; extra == "docs"
|
|
42
|
+
Requires-Dist: sphinx-copybutton; extra == "docs"
|
|
43
|
+
Requires-Dist: sphinx-autobuild; extra == "docs"
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+

|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
[](https://pepy.tech/project/bootstack)
|
|
50
|
+
[](https://pepy.tech/project/bootstack)
|
|
51
|
+

|
|
52
|
+

|
|
53
|
+

|
|
54
|
+

|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
> **Pre-release.** The API may still change before 1.0. Full documentation is at
|
|
58
|
+
> **[bootstack.org](https://bootstack.org)**.
|
|
59
|
+
|
|
60
|
+
### From idea to a shipped desktop app — fast.
|
|
61
|
+
|
|
62
|
+
bootstack gives engineers, data scientists, and hobbyists everything to build a
|
|
63
|
+
polished desktop interface and package it into a standalone executable —
|
|
64
|
+
declarative, reactive, and batteries-included, all in pure Python.
|
|
65
|
+
|
|
66
|
+
<picture>
|
|
67
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-dark.png">
|
|
68
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-light.png">
|
|
69
|
+
<img alt="bootstack hero demo" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-light.png">
|
|
70
|
+
</picture>
|
|
71
|
+
|
|
72
|
+
## Why bootstack?
|
|
73
|
+
|
|
74
|
+
Most Python desktop frameworks make you fight the framework. bootstack gets out of the way.
|
|
75
|
+
|
|
76
|
+
- **30% less code** — the declarative, context-manager layout eliminates geometry calls, explicit parenting, and most of the wiring boilerplate
|
|
77
|
+
- **Reads like Python** — nested `with` blocks mirror your UI structure; the code hierarchy *is* the layout
|
|
78
|
+
- **Modern layout system** — `HStack`, `VStack`, and `Grid` containers handle spacing, alignment, and fill automatically; CSS conventions (`gap`, `padding`, `margin`, `fill`, `anchor`) without writing CSS
|
|
79
|
+
- **60+ widgets out of the box** — primitives through full composites: tables, trees, calendars, date pickers, gauges, sliders, and more — including a full `CodeEditor` with syntax highlighting, line numbers, bracket matching, smart indent, and search; no external editor dependency required
|
|
80
|
+
- **Reactive signals** — observable state that flows between widgets; bind once, update everywhere
|
|
81
|
+
- **Event and stream pipelines** — compose, filter, debounce, and throttle UI events with a chainable stream API
|
|
82
|
+
- **Built-in icons** — the full Bootstrap Icons catalog, theme-aware and DPI-scaled, bundled with the framework
|
|
83
|
+
- **Built-in localization** — 23 language catalogs, locale-aware number/date/time formatting, runtime language switching
|
|
84
|
+
- **Semantic styling** — `accent="primary"`, `variant="outline"` — no hard-coded colors; looks right across every theme automatically
|
|
85
|
+
- **8 paired light/dark themes** — with a runtime switcher and a custom-theme API
|
|
86
|
+
- **Forms and validation** — field-level validators, inline error messages, and a `FormDialog` for quick modal forms
|
|
87
|
+
- **DataSource abstraction** — one interface over SQLite, in-memory, and file backends with filtering, sorting, pagination, and CRUD
|
|
88
|
+
- **A real CLI** — scaffold, run, add pages/views/dialogs/themes, and package for distribution
|
|
89
|
+
- **PyInstaller packaging built in** — `bootstack build` produces a standalone executable; no separate toolchain required
|
|
90
|
+
|
|
91
|
+
## Installation
|
|
92
|
+
|
|
93
|
+
Requires Python 3.12+ and Tk/Tcl (bundled with most Python distributions).
|
|
94
|
+
bootstack is in pre-release, so opt in with `--pre`:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
python -m pip install --pre bootstack
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
See the [installation guide](https://bootstack.org/getting-started/installation/)
|
|
101
|
+
for platform-specific Tk setup and the optional data-format extras.
|
|
102
|
+
|
|
103
|
+
## See it
|
|
104
|
+
|
|
105
|
+
The widget gallery is a single-window tour of everything bootstack ships — every widget, theme switcher, accent variants, and layout containers. Fastest way to see the framework in action without writing a line of code:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
bootstack gallery
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
<picture>
|
|
112
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-dark.png">
|
|
113
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-light.png">
|
|
114
|
+
<img alt="bootstack widget gallery" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-light.png">
|
|
115
|
+
</picture>
|
|
116
|
+
|
|
117
|
+
## Quick Start
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
import bootstack as bs
|
|
121
|
+
|
|
122
|
+
with bs.App(title="Hello", padding=16, gap=16) as app:
|
|
123
|
+
bs.Label("Hello from bootstack!")
|
|
124
|
+
bs.Button("Primary", accent="primary")
|
|
125
|
+
bs.Button("Success", accent="success")
|
|
126
|
+
bs.Button("Danger Outline", accent="danger", variant="outline")
|
|
127
|
+
|
|
128
|
+
app.run()
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
<picture>
|
|
132
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-dark.png">
|
|
133
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
|
|
134
|
+
<img alt="bootstack quick start example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
|
|
135
|
+
</picture>
|
|
136
|
+
|
|
137
|
+
For navigation-based apps, use `AppShell` — it gives you stacked toolbars, a sidebar, and a page stack in one call:
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
import bootstack as bs
|
|
141
|
+
|
|
142
|
+
shell = bs.AppShell(title="My App", size=(1000, 650))
|
|
143
|
+
|
|
144
|
+
with shell.add_page("home", text="Home", icon="house"):
|
|
145
|
+
bs.Label("Welcome!")
|
|
146
|
+
|
|
147
|
+
with shell.add_page("docs", text="Documents", icon="file-earmark-text"):
|
|
148
|
+
bs.Label("Your documents.")
|
|
149
|
+
|
|
150
|
+
shell.run()
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## How it works
|
|
154
|
+
|
|
155
|
+
### Layout containers
|
|
156
|
+
|
|
157
|
+
`VStack`, `HStack`, and `Grid` let you describe a layout once instead of repeating geometry calls on each child:
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
with bs.App(title="Sign In") as app:
|
|
161
|
+
with bs.Grid(columns=["auto", 1], gap=(12, 6), sticky_items="ew", padding=16):
|
|
162
|
+
bs.Label("Name:")
|
|
163
|
+
bs.TextField(placeholder="Full name")
|
|
164
|
+
bs.Label("Email:")
|
|
165
|
+
bs.TextField(placeholder="email@example.com")
|
|
166
|
+
bs.Label("Role:")
|
|
167
|
+
bs.Select(options=["Admin", "User", "Viewer"], value="User")
|
|
168
|
+
bs.Button("Submit", accent="primary", columnspan=2)
|
|
169
|
+
|
|
170
|
+
app.run()
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
<picture>
|
|
174
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-dark.png">
|
|
175
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-light.png">
|
|
176
|
+
<img alt="bootstack layout containers example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-light.png">
|
|
177
|
+
</picture>
|
|
178
|
+
|
|
179
|
+
### Semantic styling
|
|
180
|
+
|
|
181
|
+
Widgets take an `accent` (color intent) and `variant` (visual weight) instead of hard-coded colors, so the same code looks right across themes and light/dark modes:
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
bs.Button("Save", accent="primary")
|
|
185
|
+
bs.Button("Cancel", accent="secondary", variant="outline")
|
|
186
|
+
bs.Label("Heading", font="heading-lg")
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
<picture>
|
|
190
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-dark.png">
|
|
191
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-light.png">
|
|
192
|
+
<img alt="bootstack semantic styling example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-light.png">
|
|
193
|
+
</picture>
|
|
194
|
+
|
|
195
|
+
### Signals (optional)
|
|
196
|
+
|
|
197
|
+
Plain callbacks work fine for most things. When state needs to flow between widgets, signals give you a small reactive primitive with two-way binding:
|
|
198
|
+
|
|
199
|
+
```python
|
|
200
|
+
with bs.App(title="Hello") as app:
|
|
201
|
+
name = bs.Signal("World")
|
|
202
|
+
bs.Label(textsignal=name) # updates automatically when name changes
|
|
203
|
+
bs.TextField(textsignal=name) # two-way binding to the same state
|
|
204
|
+
|
|
205
|
+
app.run()
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Features
|
|
209
|
+
|
|
210
|
+
- **Application scaffolding** — `App` for blank windows, `AppShell` for command-bar + sidebar + page-stack apps, undecorated windows with custom chrome
|
|
211
|
+
- **60+ themed widgets** — primitives plus higher-level composites (DataTable, Tree, ListView, Calendar, DateField, Form, Gauge, ToggleGroup, PageStack, Carousel, Tooltip, and more)
|
|
212
|
+
- **Dialogs and messages** — `alert()` / `confirm()` / `ask_*()` prompts and `FormDialog` / `FontDialog` / `FilterDialog`, plus non-blocking `toast()`, `Notification`, and `Snackbar` surfaces
|
|
213
|
+
- **Layout containers** — `VStack`, `HStack`, and `Grid` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Expander`
|
|
214
|
+
- **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost), consistent across widgets
|
|
215
|
+
- **Built-in themes** — paired light/dark variants (amber, aurora, bootstrap, classic, docs, forest, ocean, rose) with runtime theme switching and a custom-theme API
|
|
216
|
+
- **Reactive signals** — observable state with subscribe/set, integrates with widgets via `signal=` / `textsignal=`
|
|
217
|
+
- **Forms & validation** — `Form` with built-in field-level validators and inline error messages
|
|
218
|
+
- **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV/TSV/Excel export
|
|
219
|
+
- **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
|
|
220
|
+
- **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring, DPI scaling, and caching
|
|
221
|
+
- **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
|
|
222
|
+
- **CLI (`bootstack`)** — project scaffolding, run, add components, theme/i18n setup, doctor, build/package
|
|
223
|
+
|
|
224
|
+
## Widget Categories
|
|
225
|
+
|
|
226
|
+
| Category | Widgets |
|
|
227
|
+
|----------|---------|
|
|
228
|
+
| **Actions** | Button, ButtonGroup, MenuButton, ContextMenu, Toolbar |
|
|
229
|
+
| **Inputs** | TextField, PasswordField, PathField, NumberField, SpinnerField, Slider, RangeSlider, TextArea, CodeEditor, DateField, TimeField |
|
|
230
|
+
| **Selection** | Checkbox, Switch, ToggleButton, Radio, RadioGroup, ToggleGroup, Select, SelectButton, Calendar |
|
|
231
|
+
| **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
|
|
232
|
+
| **Media** | Avatar, Picture, Gallery, Carousel |
|
|
233
|
+
| **Layout** | VStack, HStack, Grid, Card, GroupBox, SplitView, ScrollView, Accordion, Separator |
|
|
234
|
+
| **Navigation** | AppShell, SideNav, StatusBar, Tabs, PageStack |
|
|
235
|
+
| **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
|
|
236
|
+
| **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
|
|
237
|
+
| **Forms** | Form, with field-level validation |
|
|
238
|
+
|
|
239
|
+
## CLI
|
|
240
|
+
|
|
241
|
+
bootstack ships with an optional CLI for scaffolding, running, and packaging applications:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
bootstack gallery # Launch the interactive widget gallery
|
|
245
|
+
bootstack icons # Browse the built-in icon catalog
|
|
246
|
+
bootstack start MyApp # Create a new project (basic template)
|
|
247
|
+
bootstack start MyApp --template appshell # ...or with sidebar navigation
|
|
248
|
+
bootstack run # Run the app defined in the project config
|
|
249
|
+
bootstack add page Dashboard # Add a new page (appshell)
|
|
250
|
+
bootstack add view Settings # Add a new view (basic)
|
|
251
|
+
bootstack add dialog Preferences # Add a new dialog
|
|
252
|
+
bootstack add i18n --languages en es fr # Add i18n support
|
|
253
|
+
bootstack doctor # Diagnose project & environment
|
|
254
|
+
bootstack build # Package for distribution
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Documentation
|
|
258
|
+
|
|
259
|
+
Full documentation — guides, the widget catalog, and the API reference — lives at
|
|
260
|
+
**[bootstack.org](https://bootstack.org)**.
|
|
261
|
+
|
|
262
|
+
## Links
|
|
263
|
+
|
|
264
|
+
- **GitHub**: https://github.com/israel-dryer/bootstack
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
[](https://pepy.tech/project/bootstack)
|
|
5
|
+
[](https://pepy.tech/project/bootstack)
|
|
6
|
+

|
|
7
|
+

|
|
8
|
+

|
|
9
|
+

|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
> **Pre-release.** The API may still change before 1.0. Full documentation is at
|
|
13
|
+
> **[bootstack.org](https://bootstack.org)**.
|
|
14
|
+
|
|
15
|
+
### From idea to a shipped desktop app — fast.
|
|
16
|
+
|
|
17
|
+
bootstack gives engineers, data scientists, and hobbyists everything to build a
|
|
18
|
+
polished desktop interface and package it into a standalone executable —
|
|
19
|
+
declarative, reactive, and batteries-included, all in pure Python.
|
|
20
|
+
|
|
21
|
+
<picture>
|
|
22
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-dark.png">
|
|
23
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-light.png">
|
|
24
|
+
<img alt="bootstack hero demo" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-light.png">
|
|
25
|
+
</picture>
|
|
26
|
+
|
|
27
|
+
## Why bootstack?
|
|
28
|
+
|
|
29
|
+
Most Python desktop frameworks make you fight the framework. bootstack gets out of the way.
|
|
30
|
+
|
|
31
|
+
- **30% less code** — the declarative, context-manager layout eliminates geometry calls, explicit parenting, and most of the wiring boilerplate
|
|
32
|
+
- **Reads like Python** — nested `with` blocks mirror your UI structure; the code hierarchy *is* the layout
|
|
33
|
+
- **Modern layout system** — `HStack`, `VStack`, and `Grid` containers handle spacing, alignment, and fill automatically; CSS conventions (`gap`, `padding`, `margin`, `fill`, `anchor`) without writing CSS
|
|
34
|
+
- **60+ widgets out of the box** — primitives through full composites: tables, trees, calendars, date pickers, gauges, sliders, and more — including a full `CodeEditor` with syntax highlighting, line numbers, bracket matching, smart indent, and search; no external editor dependency required
|
|
35
|
+
- **Reactive signals** — observable state that flows between widgets; bind once, update everywhere
|
|
36
|
+
- **Event and stream pipelines** — compose, filter, debounce, and throttle UI events with a chainable stream API
|
|
37
|
+
- **Built-in icons** — the full Bootstrap Icons catalog, theme-aware and DPI-scaled, bundled with the framework
|
|
38
|
+
- **Built-in localization** — 23 language catalogs, locale-aware number/date/time formatting, runtime language switching
|
|
39
|
+
- **Semantic styling** — `accent="primary"`, `variant="outline"` — no hard-coded colors; looks right across every theme automatically
|
|
40
|
+
- **8 paired light/dark themes** — with a runtime switcher and a custom-theme API
|
|
41
|
+
- **Forms and validation** — field-level validators, inline error messages, and a `FormDialog` for quick modal forms
|
|
42
|
+
- **DataSource abstraction** — one interface over SQLite, in-memory, and file backends with filtering, sorting, pagination, and CRUD
|
|
43
|
+
- **A real CLI** — scaffold, run, add pages/views/dialogs/themes, and package for distribution
|
|
44
|
+
- **PyInstaller packaging built in** — `bootstack build` produces a standalone executable; no separate toolchain required
|
|
45
|
+
|
|
46
|
+
## Installation
|
|
47
|
+
|
|
48
|
+
Requires Python 3.12+ and Tk/Tcl (bundled with most Python distributions).
|
|
49
|
+
bootstack is in pre-release, so opt in with `--pre`:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
python -m pip install --pre bootstack
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
See the [installation guide](https://bootstack.org/getting-started/installation/)
|
|
56
|
+
for platform-specific Tk setup and the optional data-format extras.
|
|
57
|
+
|
|
58
|
+
## See it
|
|
59
|
+
|
|
60
|
+
The widget gallery is a single-window tour of everything bootstack ships — every widget, theme switcher, accent variants, and layout containers. Fastest way to see the framework in action without writing a line of code:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
bootstack gallery
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
<picture>
|
|
67
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-dark.png">
|
|
68
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-light.png">
|
|
69
|
+
<img alt="bootstack widget gallery" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-light.png">
|
|
70
|
+
</picture>
|
|
71
|
+
|
|
72
|
+
## Quick Start
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
import bootstack as bs
|
|
76
|
+
|
|
77
|
+
with bs.App(title="Hello", padding=16, gap=16) as app:
|
|
78
|
+
bs.Label("Hello from bootstack!")
|
|
79
|
+
bs.Button("Primary", accent="primary")
|
|
80
|
+
bs.Button("Success", accent="success")
|
|
81
|
+
bs.Button("Danger Outline", accent="danger", variant="outline")
|
|
82
|
+
|
|
83
|
+
app.run()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
<picture>
|
|
87
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-dark.png">
|
|
88
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
|
|
89
|
+
<img alt="bootstack quick start example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
|
|
90
|
+
</picture>
|
|
91
|
+
|
|
92
|
+
For navigation-based apps, use `AppShell` — it gives you stacked toolbars, a sidebar, and a page stack in one call:
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
import bootstack as bs
|
|
96
|
+
|
|
97
|
+
shell = bs.AppShell(title="My App", size=(1000, 650))
|
|
98
|
+
|
|
99
|
+
with shell.add_page("home", text="Home", icon="house"):
|
|
100
|
+
bs.Label("Welcome!")
|
|
101
|
+
|
|
102
|
+
with shell.add_page("docs", text="Documents", icon="file-earmark-text"):
|
|
103
|
+
bs.Label("Your documents.")
|
|
104
|
+
|
|
105
|
+
shell.run()
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## How it works
|
|
109
|
+
|
|
110
|
+
### Layout containers
|
|
111
|
+
|
|
112
|
+
`VStack`, `HStack`, and `Grid` let you describe a layout once instead of repeating geometry calls on each child:
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
with bs.App(title="Sign In") as app:
|
|
116
|
+
with bs.Grid(columns=["auto", 1], gap=(12, 6), sticky_items="ew", padding=16):
|
|
117
|
+
bs.Label("Name:")
|
|
118
|
+
bs.TextField(placeholder="Full name")
|
|
119
|
+
bs.Label("Email:")
|
|
120
|
+
bs.TextField(placeholder="email@example.com")
|
|
121
|
+
bs.Label("Role:")
|
|
122
|
+
bs.Select(options=["Admin", "User", "Viewer"], value="User")
|
|
123
|
+
bs.Button("Submit", accent="primary", columnspan=2)
|
|
124
|
+
|
|
125
|
+
app.run()
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
<picture>
|
|
129
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-dark.png">
|
|
130
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-light.png">
|
|
131
|
+
<img alt="bootstack layout containers example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-light.png">
|
|
132
|
+
</picture>
|
|
133
|
+
|
|
134
|
+
### Semantic styling
|
|
135
|
+
|
|
136
|
+
Widgets take an `accent` (color intent) and `variant` (visual weight) instead of hard-coded colors, so the same code looks right across themes and light/dark modes:
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
bs.Button("Save", accent="primary")
|
|
140
|
+
bs.Button("Cancel", accent="secondary", variant="outline")
|
|
141
|
+
bs.Label("Heading", font="heading-lg")
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
<picture>
|
|
145
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-dark.png">
|
|
146
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-light.png">
|
|
147
|
+
<img alt="bootstack semantic styling example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-light.png">
|
|
148
|
+
</picture>
|
|
149
|
+
|
|
150
|
+
### Signals (optional)
|
|
151
|
+
|
|
152
|
+
Plain callbacks work fine for most things. When state needs to flow between widgets, signals give you a small reactive primitive with two-way binding:
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
with bs.App(title="Hello") as app:
|
|
156
|
+
name = bs.Signal("World")
|
|
157
|
+
bs.Label(textsignal=name) # updates automatically when name changes
|
|
158
|
+
bs.TextField(textsignal=name) # two-way binding to the same state
|
|
159
|
+
|
|
160
|
+
app.run()
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Features
|
|
164
|
+
|
|
165
|
+
- **Application scaffolding** — `App` for blank windows, `AppShell` for command-bar + sidebar + page-stack apps, undecorated windows with custom chrome
|
|
166
|
+
- **60+ themed widgets** — primitives plus higher-level composites (DataTable, Tree, ListView, Calendar, DateField, Form, Gauge, ToggleGroup, PageStack, Carousel, Tooltip, and more)
|
|
167
|
+
- **Dialogs and messages** — `alert()` / `confirm()` / `ask_*()` prompts and `FormDialog` / `FontDialog` / `FilterDialog`, plus non-blocking `toast()`, `Notification`, and `Snackbar` surfaces
|
|
168
|
+
- **Layout containers** — `VStack`, `HStack`, and `Grid` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Expander`
|
|
169
|
+
- **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost), consistent across widgets
|
|
170
|
+
- **Built-in themes** — paired light/dark variants (amber, aurora, bootstrap, classic, docs, forest, ocean, rose) with runtime theme switching and a custom-theme API
|
|
171
|
+
- **Reactive signals** — observable state with subscribe/set, integrates with widgets via `signal=` / `textsignal=`
|
|
172
|
+
- **Forms & validation** — `Form` with built-in field-level validators and inline error messages
|
|
173
|
+
- **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV/TSV/Excel export
|
|
174
|
+
- **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
|
|
175
|
+
- **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring, DPI scaling, and caching
|
|
176
|
+
- **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
|
|
177
|
+
- **CLI (`bootstack`)** — project scaffolding, run, add components, theme/i18n setup, doctor, build/package
|
|
178
|
+
|
|
179
|
+
## Widget Categories
|
|
180
|
+
|
|
181
|
+
| Category | Widgets |
|
|
182
|
+
|----------|---------|
|
|
183
|
+
| **Actions** | Button, ButtonGroup, MenuButton, ContextMenu, Toolbar |
|
|
184
|
+
| **Inputs** | TextField, PasswordField, PathField, NumberField, SpinnerField, Slider, RangeSlider, TextArea, CodeEditor, DateField, TimeField |
|
|
185
|
+
| **Selection** | Checkbox, Switch, ToggleButton, Radio, RadioGroup, ToggleGroup, Select, SelectButton, Calendar |
|
|
186
|
+
| **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
|
|
187
|
+
| **Media** | Avatar, Picture, Gallery, Carousel |
|
|
188
|
+
| **Layout** | VStack, HStack, Grid, Card, GroupBox, SplitView, ScrollView, Accordion, Separator |
|
|
189
|
+
| **Navigation** | AppShell, SideNav, StatusBar, Tabs, PageStack |
|
|
190
|
+
| **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
|
|
191
|
+
| **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
|
|
192
|
+
| **Forms** | Form, with field-level validation |
|
|
193
|
+
|
|
194
|
+
## CLI
|
|
195
|
+
|
|
196
|
+
bootstack ships with an optional CLI for scaffolding, running, and packaging applications:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
bootstack gallery # Launch the interactive widget gallery
|
|
200
|
+
bootstack icons # Browse the built-in icon catalog
|
|
201
|
+
bootstack start MyApp # Create a new project (basic template)
|
|
202
|
+
bootstack start MyApp --template appshell # ...or with sidebar navigation
|
|
203
|
+
bootstack run # Run the app defined in the project config
|
|
204
|
+
bootstack add page Dashboard # Add a new page (appshell)
|
|
205
|
+
bootstack add view Settings # Add a new view (basic)
|
|
206
|
+
bootstack add dialog Preferences # Add a new dialog
|
|
207
|
+
bootstack add i18n --languages en es fr # Add i18n support
|
|
208
|
+
bootstack doctor # Diagnose project & environment
|
|
209
|
+
bootstack build # Package for distribution
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Documentation
|
|
213
|
+
|
|
214
|
+
Full documentation — guides, the widget catalog, and the API reference — lives at
|
|
215
|
+
**[bootstack.org](https://bootstack.org)**.
|
|
216
|
+
|
|
217
|
+
## Links
|
|
218
|
+
|
|
219
|
+
- **GitHub**: https://github.com/israel-dryer/bootstack
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "bootstack"
|
|
7
|
+
version = "0.1.0a11"
|
|
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
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Israel Dryer", email = "israel.dryer@gmail.com" }
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"tkinter",
|
|
17
|
+
"ttk",
|
|
18
|
+
"gui",
|
|
19
|
+
"desktop",
|
|
20
|
+
"python3",
|
|
21
|
+
"ui",
|
|
22
|
+
"widgets",
|
|
23
|
+
"theming",
|
|
24
|
+
"cross-platform",
|
|
25
|
+
"modern",
|
|
26
|
+
"framework",
|
|
27
|
+
"application-framework",
|
|
28
|
+
"desktop-ui",
|
|
29
|
+
"python-gui"
|
|
30
|
+
]
|
|
31
|
+
classifiers = [
|
|
32
|
+
"Development Status :: 3 - Alpha",
|
|
33
|
+
"Environment :: Win32 (MS Windows)",
|
|
34
|
+
"Environment :: X11 Applications :: GTK",
|
|
35
|
+
"Intended Audience :: Developers",
|
|
36
|
+
"Programming Language :: Python :: 3",
|
|
37
|
+
"Programming Language :: Python :: 3.12",
|
|
38
|
+
"Programming Language :: Python :: 3.13",
|
|
39
|
+
"Programming Language :: Python :: 3.14",
|
|
40
|
+
"Topic :: Software Development :: User Interfaces",
|
|
41
|
+
"Operating System :: OS Independent",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
dependencies = [
|
|
45
|
+
"pillow>=10,<=12",
|
|
46
|
+
|
|
47
|
+
# Backported typing primitives (Self, Unpack, ParamSpec, etc.)
|
|
48
|
+
"typing-extensions>=4.10",
|
|
49
|
+
|
|
50
|
+
# Runtime localization/formatting stack
|
|
51
|
+
"Babel>=2.12",
|
|
52
|
+
"python-dateutil>=2.9",
|
|
53
|
+
"dateparser>=1.1",
|
|
54
|
+
|
|
55
|
+
# Windows-specific: modern window effects (mica, acrylic, etc.)
|
|
56
|
+
"pywinstyles>=1.8; sys_platform == 'win32'",
|
|
57
|
+
|
|
58
|
+
# Multi-monitor support for proper window centering
|
|
59
|
+
"screeninfo>=0.8",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
[project.optional-dependencies]
|
|
63
|
+
# Excel (.xlsx) export for Table. Write-only, zero-dependency, pure Python.
|
|
64
|
+
excel = [
|
|
65
|
+
"XlsxWriter>=3",
|
|
66
|
+
]
|
|
67
|
+
# Columnar formats — read/write Parquet and Feather/Arrow via pyarrow.
|
|
68
|
+
parquet = [
|
|
69
|
+
"pyarrow>=14",
|
|
70
|
+
]
|
|
71
|
+
# Scientific tabular format — read/write HDF5 via pandas + PyTables.
|
|
72
|
+
hdf5 = [
|
|
73
|
+
"pandas>=2",
|
|
74
|
+
"tables>=3.8",
|
|
75
|
+
]
|
|
76
|
+
docs = [
|
|
77
|
+
"sphinx>=7.2",
|
|
78
|
+
"pydata-sphinx-theme",
|
|
79
|
+
"sphinx-design",
|
|
80
|
+
"sphinx-copybutton",
|
|
81
|
+
"sphinx-autobuild",
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
[project.urls]
|
|
85
|
+
Homepage = "https://github.com/israel-dryer/bootstack"
|
|
86
|
+
Documentation = "https://bootstack.org/"
|
|
87
|
+
|
|
88
|
+
[project.scripts]
|
|
89
|
+
bootstack = "bootstack.cli:main"
|
|
90
|
+
|
|
91
|
+
[tool.setuptools.packages.find]
|
|
92
|
+
where = ["src"]
|
|
93
|
+
|
|
94
|
+
[tool.setuptools.package-data]
|
|
95
|
+
"bootstack" = [
|
|
96
|
+
"assets/*",
|
|
97
|
+
"assets/icons/*",
|
|
98
|
+
# ship compiled gettext catalogs within the package
|
|
99
|
+
"assets/locales/**/LC_MESSAGES/*.mo",
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
[tool.bumpversion]
|
|
103
|
+
current_version = "0.1.0a11"
|
|
104
|
+
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
|
|
105
|
+
serialize = [
|
|
106
|
+
"{major}.{minor}.{patch}{pre}{pre_n}",
|
|
107
|
+
"{major}.{minor}.{patch}",
|
|
108
|
+
]
|
|
109
|
+
search = "version = \"{current_version}\""
|
|
110
|
+
replace = "version = \"{new_version}\""
|
|
111
|
+
commit = true
|
|
112
|
+
tag = true
|
|
113
|
+
tag_name = "v{new_version}"
|
|
114
|
+
tag_message = "Release {new_version}"
|
|
115
|
+
message = "Release {new_version}"
|
|
116
|
+
allow_dirty = false
|
|
117
|
+
|
|
118
|
+
[tool.bumpversion.parts.pre]
|
|
119
|
+
optional_value = ""
|
|
120
|
+
first_value = ""
|
|
121
|
+
values = ["", "a", "b", "rc"]
|
|
122
|
+
|
|
123
|
+
[tool.bumpversion.parts.pre_n]
|
|
124
|
+
first_value = "1"
|
|
125
|
+
|
|
126
|
+
[[tool.bumpversion.files]]
|
|
127
|
+
filename = "pyproject.toml"
|
|
128
|
+
search = "version = \"{current_version}\""
|
|
129
|
+
replace = "version = \"{new_version}\""
|
|
130
|
+
|
|
131
|
+
[tool.pytest.ini_options]
|
|
132
|
+
testpaths = ["tests/cli", "tests/widgets/public"]
|
|
133
|
+
markers = [
|
|
134
|
+
"gui: requires a Tk display (deselect with -m 'not gui')",
|
|
135
|
+
]
|
|
136
|
+
|
|
137
|
+
[tool.ruff.lint]
|
|
138
|
+
# F401: imported but unused — suppress for __init__.py where all imports are public re-exports
|
|
139
|
+
per-file-ignores = { "src/bootstack/__init__.py" = ["F401"] }
|