bootstack 0.4.2__tar.gz → 0.4.4__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.4.2/src/bootstack.egg-info → bootstack-0.4.4}/PKG-INFO +1 -1
- {bootstack-0.4.2 → bootstack-0.4.4}/pyproject.toml +2 -2
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -2
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/pathentry.py +1 -13
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/__init__.py +1 -1
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/layout.py +34 -3
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +18 -16
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/slider/slider.py +3 -2
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +19 -3
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/optionmenu.py +10 -5
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/codeeditor.py +17 -4
- {bootstack-0.4.2 → bootstack-0.4.4/src/bootstack.egg-info}/PKG-INFO +1 -1
- {bootstack-0.4.2 → bootstack-0.4.4}/LICENSE +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/MANIFEST.in +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/NOTICE +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/README.md +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/setup.cfg +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/__main__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/capture.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/exceptions.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/images.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/localization.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/mixins/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/mixins/ttk_state.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/mixins/widget.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/paths.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/signal_binding.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_core/variables.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/app.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/base_window.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/events.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/grab.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/shortcuts.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/tk_patch.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/toplevel.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/utility.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/visual_focus.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/wheel.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/_runtime/window_utilities.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/bootstack.ico +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/bootstack.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/badge-pill.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/badge-square.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/button-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/button-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/card.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/field.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/input-addon-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/input-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/input-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/list-item-separated.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/list-item.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/listrow-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/listrow-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/manifest.toml +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/menu-item.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/navitem-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/navitem-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/radiobutton.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/slider-handle.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/slider-track-h.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/slider-track-v.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/switch-off.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/switch-on.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/tab-h.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/tab-v.png +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/icons/glyphmap.json +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/icons/icon_metrics.json +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/__main__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/add.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/appicon.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/build.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/config.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/demo.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/dev.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/doctor.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/icons.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/promote.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/pyinstaller.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/run.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/start.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/cli/templates/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/clipboard.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/constants.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/README.md +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/_observable.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/base.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/file_source.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/memory_source.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/query.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/readers.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/sqlite_source.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/types.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/data/writers.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dev/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dev/_capture.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dev/_env.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dev/_registry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dev/_reloader.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dev/_reset.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dev/_watcher.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/colorchooser.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/datedialog.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/dialog.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/filterdialog.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/fontdialog.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/formdialog.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/message.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/dialogs/_impl/query.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/errors.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/events/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/events/_event.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/events/_payloads.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/events/_subscription.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/i18n/README.md +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/i18n/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/i18n/catalog.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/i18n/intl_format.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/i18n/msgcat.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/i18n/specs.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/images.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/py.typed +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/scheduling/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/scheduling/_schedule.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/shortcuts.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/signals/README.md +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/signals/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/signals/integration.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/signals/signal.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/signals/types.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/store.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/streams/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/streams/_stream.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/badge.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/button.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/buttongroup.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/calendar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/checkbutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/combobox.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/contextmenu.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/entry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/expander.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/field.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/frame.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/label.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/labelframe.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/listview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/menubar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/menubutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/panedwindow.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/progressbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/radiobutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/scale.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/scrollbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/separator.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/sidenav.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/sizegrip.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/spinbox.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/switch.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/tabitem.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/togglegroup.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/toolbutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/tooltip.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/treeview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders/utils.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders_tk/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/builders_tk/defaults.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/element.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/fonts.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/style.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/style_builder_base.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/style_builder_mixed.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/style_builder_tk.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/style_builder_ttk.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/style_resolver.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/theme.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/theme_provider.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/themes/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/tk_patch.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/token_maps.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/types.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/typography.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/style/utility.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/types.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/validation/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/validation/types.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/validation/validation_result.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/validation/validation_rules.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/app_config.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/base.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/choices.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/container.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/context.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/events.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/field_mixin.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/image_binding.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/kwargs.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/navmodel.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/options.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/selection_group.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/window_controls.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_core/window_menu.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/_parts/textentry_part.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/avatar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/buttongroup.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/calendar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/carousel.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/chart.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/compositeframe.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/contextmenu.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/field.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/form.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/gallery.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/list/listview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/menu/model.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/meter.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/pagestack.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/passwordentry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/picture.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/radiogroup.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/scrollview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/content_host.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/providers.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/shell.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/workspace.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/slider/_shared.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/spinnerentry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tabs/tabs.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/core.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/filter.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/redirector.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/timeentry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/togglegroup.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/toolbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tooltip.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/mixins/font_mixin.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/_menubutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/combobox.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/flexframe.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/frame.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/gridframe.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/packframe.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/app.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/appshell.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/avatar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/boolean_controls.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/button.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/buttongroup.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/calendar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/card.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/carousel.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/chart.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/contextmenu.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/datatable.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/datefield.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/divider.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/expander.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/form.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/gallery.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/gauge.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/grid.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/groupbox.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/label.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/listview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/menubutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/numberfield.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/pagestack.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/passwordfield.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/pathfield.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/picture.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/progressbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/radio_variants.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/radiogroup.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/scrollbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/scrollview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/select.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/selectbutton.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/sidebar_toggle.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/sizegrip.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/slider.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/spinbox.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/spinnerfield.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/splash.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/splitview.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/stacks.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/statusbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/tabs.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/textarea.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/textfield.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/theme_toggle.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/timefield.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/toast.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/togglegroup.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/toolbar.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/tooltip.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/tree.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/types.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/window.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack.egg-info/SOURCES.txt +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack.egg-info/dependency_links.txt +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack.egg-info/entry_points.txt +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack.egg-info/requires.txt +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack.egg-info/top_level.txt +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_dialog_anchor.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_events_doc_coverage.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_hot_reload.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_images.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_images_gui.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_intl_format.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_navmodel.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_on_color_contrast.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_public_surface.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_store.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_theme_from_existing.py +0 -0
- {bootstack-0.4.2 → bootstack-0.4.4}/tests/test_validation_rules.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bootstack
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: Build desktop GUI apps in pure Python and ship them as a standalone executable — built on Tk, no Tkinter boilerplate.
|
|
5
5
|
Author-email: Israel Dryer <israel.dryer@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "bootstack"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.4"
|
|
8
8
|
description = "Build desktop GUI apps in pure Python and ship them as a standalone executable — built on Tk, no Tkinter boilerplate."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -114,7 +114,7 @@ where = ["src"]
|
|
|
114
114
|
]
|
|
115
115
|
|
|
116
116
|
[tool.bumpversion]
|
|
117
|
-
current_version = "0.4.
|
|
117
|
+
current_version = "0.4.4"
|
|
118
118
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
|
|
119
119
|
serialize = [
|
|
120
120
|
"{major}.{minor}.{patch}{pre}{pre_n}",
|
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
A single platform-neutral menu *model* (`MenuModel` / `MenuGroup` / `MenuItem`)
|
|
4
4
|
is the source of truth; platform renderers consume it — a themed in-window strip
|
|
5
5
|
on Windows/Linux and the native global menu bar on macOS.
|
|
6
|
-
|
|
7
|
-
See `docs/_dev/menu-redesign.md` for the design.
|
|
8
6
|
"""
|
|
9
7
|
from __future__ import annotations
|
|
10
8
|
|
|
@@ -5,7 +5,6 @@ from typing import Any, Literal
|
|
|
5
5
|
|
|
6
6
|
from typing_extensions import Unpack
|
|
7
7
|
|
|
8
|
-
from bootstack.events import ChangeEvent
|
|
9
8
|
from bootstack.widgets._impl.primitives.button import Button
|
|
10
9
|
from bootstack.widgets._impl.composites.field import Field, FieldOptions
|
|
11
10
|
from bootstack.widgets._impl.mixins import configure_delegate
|
|
@@ -62,7 +61,6 @@ class PathEntry(Field):
|
|
|
62
61
|
self._default_extension = default_extension
|
|
63
62
|
self._default_filename = default_filename
|
|
64
63
|
self._dialog_result = None
|
|
65
|
-
self._prev_value: str | None = value
|
|
66
64
|
|
|
67
65
|
super().__init__(master=master, label=label, message=message, value=value, **kwargs)
|
|
68
66
|
|
|
@@ -154,15 +152,5 @@ class PathEntry(Field):
|
|
|
154
152
|
display_text = result
|
|
155
153
|
|
|
156
154
|
if result:
|
|
157
|
-
prev_value = self._prev_value
|
|
158
|
-
self._prev_value = display_text
|
|
159
155
|
self.value = display_text
|
|
160
|
-
self.
|
|
161
|
-
'<<Change>>',
|
|
162
|
-
data=ChangeEvent(
|
|
163
|
-
value=display_text,
|
|
164
|
-
prev_value=prev_value,
|
|
165
|
-
text=display_text,
|
|
166
|
-
),
|
|
167
|
-
when="tail"
|
|
168
|
-
)
|
|
156
|
+
self._entry._check_if_changed()
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/shell/__init__.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Internal composites for the clean-slate application shell.
|
|
2
2
|
|
|
3
|
-
Layered
|
|
3
|
+
Layered as:
|
|
4
4
|
|
|
5
5
|
- `layout.ShellLayout` — Layer 1, the dumb region/slot band layout.
|
|
6
6
|
- `nav_panel.NavPanel` — the static single-select nav list (sidebar).
|
|
@@ -23,14 +23,14 @@ only the body row knows whether the rail/sidebar/dock exist. That invariant lets
|
|
|
23
23
|
"sidebar + chrome", "chrome only", and "sidebar only" be the same layout with
|
|
24
24
|
slots toggled rather than separate code paths.
|
|
25
25
|
|
|
26
|
-
Note: the
|
|
27
|
-
|
|
28
|
-
in `docs/_dev/appshell-navigation-spec.md`.
|
|
26
|
+
Note: the body uses fixed-width pack slots; a resizable sidebar/content sash
|
|
27
|
+
(a `PanedWindow`) is not built.
|
|
29
28
|
"""
|
|
30
29
|
|
|
31
30
|
from __future__ import annotations
|
|
32
31
|
|
|
33
32
|
import sys
|
|
33
|
+
from tkinter import TclError
|
|
34
34
|
from typing import Any
|
|
35
35
|
|
|
36
36
|
from bootstack._runtime.app import App
|
|
@@ -128,6 +128,7 @@ class ShellLayout(App):
|
|
|
128
128
|
self._show_rail = False
|
|
129
129
|
self._show_sidebar = True
|
|
130
130
|
self._show_dock = False
|
|
131
|
+
self._recolor_pending = False
|
|
131
132
|
|
|
132
133
|
self._build_regions()
|
|
133
134
|
self._relayout_window()
|
|
@@ -206,6 +207,7 @@ class ShellLayout(App):
|
|
|
206
207
|
self._status_sep.pack(side="bottom", fill="x")
|
|
207
208
|
# Body fills whatever the bands leave; packed last so it claims the middle.
|
|
208
209
|
self._body.pack(side="top", fill="both", expand=True)
|
|
210
|
+
self._recolor_show_slots()
|
|
209
211
|
|
|
210
212
|
def _relayout_body(self) -> None:
|
|
211
213
|
"""Re-pack the rail / sidebar / content / dock slots left-to-right."""
|
|
@@ -221,6 +223,35 @@ class ShellLayout(App):
|
|
|
221
223
|
self._content.pack(side="left", fill="both", expand=True)
|
|
222
224
|
if self._show_dock:
|
|
223
225
|
self._dock.pack(side="right", fill="y")
|
|
226
|
+
self._recolor_show_slots()
|
|
227
|
+
|
|
228
|
+
def _recolor_show_slots(self):
|
|
229
|
+
"""Repaint slots that just became visible after a theme change"""
|
|
230
|
+
if self._recolor_pending:
|
|
231
|
+
return
|
|
232
|
+
self._recolor_pending = True
|
|
233
|
+
|
|
234
|
+
def _recolor():
|
|
235
|
+
self._recolor_pending = False
|
|
236
|
+
from bootstack.style.style import get_style
|
|
237
|
+
style = get_style()
|
|
238
|
+
shown = [self._content]
|
|
239
|
+
if self._show_rail:
|
|
240
|
+
shown.append(self._rail)
|
|
241
|
+
if self._show_sidebar:
|
|
242
|
+
shown.append(self._sidebar)
|
|
243
|
+
if self._show_statusbar:
|
|
244
|
+
shown.append(self._statusbar)
|
|
245
|
+
for slot in shown:
|
|
246
|
+
try:
|
|
247
|
+
style.apply_theme_walk(slot, only_stale=True)
|
|
248
|
+
except TclError:
|
|
249
|
+
pass # destroyed between relayout and the idle callback
|
|
250
|
+
|
|
251
|
+
try:
|
|
252
|
+
self.after_idle(_recolor)
|
|
253
|
+
except (TclError, AttributeError):
|
|
254
|
+
pass
|
|
224
255
|
|
|
225
256
|
# ----- Region sizing -----
|
|
226
257
|
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py
RENAMED
|
@@ -716,27 +716,29 @@ class RangeSlider(ConfigureDelegationMixin, tk.Frame):
|
|
|
716
716
|
self._sync()
|
|
717
717
|
lo = self._lo_var.get()
|
|
718
718
|
hi = self._hi_var.get()
|
|
719
|
-
self.
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
719
|
+
if hi != self._prev_hivalue or lo != self._prev_lovalue:
|
|
720
|
+
self.event_generate("<<Change>>", data=RangeSliderEvent(
|
|
721
|
+
low_value=lo,
|
|
722
|
+
high_value=hi,
|
|
723
|
+
prev_low_value=self._prev_lovalue,
|
|
724
|
+
prev_high_value=self._prev_hivalue,
|
|
725
|
+
))
|
|
726
|
+
self._prev_lovalue = lo
|
|
727
|
+
self._prev_hivalue = hi
|
|
727
728
|
|
|
728
729
|
def _on_hi_write(self, *_: Any) -> None:
|
|
729
730
|
self._sync()
|
|
730
731
|
lo = self._lo_var.get()
|
|
731
732
|
hi = self._hi_var.get()
|
|
732
|
-
self.
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
733
|
+
if lo != self._prev_lovalue or hi != self._prev_hivalue:
|
|
734
|
+
self.event_generate("<<Change>>", data=RangeSliderEvent(
|
|
735
|
+
low_value=lo,
|
|
736
|
+
high_value=hi,
|
|
737
|
+
prev_low_value=self._prev_lovalue,
|
|
738
|
+
prev_high_value=self._prev_hivalue,
|
|
739
|
+
))
|
|
740
|
+
self._prev_lovalue = lo
|
|
741
|
+
self._prev_hivalue = hi
|
|
740
742
|
|
|
741
743
|
def _on_map(self) -> None:
|
|
742
744
|
if getattr(self, '_theme_update_pending', False):
|
|
@@ -579,8 +579,9 @@ class Slider(ConfigureDelegationMixin, tk.Frame):
|
|
|
579
579
|
def _on_var_write(self, *_: Any) -> None:
|
|
580
580
|
self._sync()
|
|
581
581
|
val = self._var.get()
|
|
582
|
-
|
|
583
|
-
|
|
582
|
+
if val != self._prev_value:
|
|
583
|
+
self.event_generate("<<Change>>", data=SliderEvent(value=val, prev_value=self._prev_value))
|
|
584
|
+
self._prev_value = val
|
|
584
585
|
|
|
585
586
|
def _mouse_focus_set(self, _event: tk.Event) -> None:
|
|
586
587
|
self._mouse_pressed = True
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/widgets/_impl/composites/textarea/textarea.py
RENAMED
|
@@ -114,6 +114,9 @@ class TextArea(GridFrame):
|
|
|
114
114
|
self._valid_signal: Signal = Signal(True)
|
|
115
115
|
self._error_signal: Signal = Signal("")
|
|
116
116
|
|
|
117
|
+
self._prev_changed_value = value
|
|
118
|
+
self._prev_input_text = value
|
|
119
|
+
|
|
117
120
|
# ── label (row 0) ─────────────────────────────────────────────────
|
|
118
121
|
if label:
|
|
119
122
|
_lbl_text = f"{label} *" if required else label
|
|
@@ -192,6 +195,7 @@ class TextArea(GridFrame):
|
|
|
192
195
|
self._core._signal_text_sink = lambda text: setattr(self, "value", text)
|
|
193
196
|
if textsignal is not None:
|
|
194
197
|
self._core.bind_signal(textsignal)
|
|
198
|
+
self._prev_input_text = self.value
|
|
195
199
|
|
|
196
200
|
# ── placeholder ───────────────────────────────────────────────────
|
|
197
201
|
self._default_fg = self._core.text.cget("foreground")
|
|
@@ -223,6 +227,7 @@ class TextArea(GridFrame):
|
|
|
223
227
|
# Fire <<Input>> on every edit, <<Changed>> + validation on blur.
|
|
224
228
|
self._core.text.bind("<<Change>>", self._on_core_change, add="+")
|
|
225
229
|
self._core.text.bind("<FocusOut>", self._on_focus_out, add="+")
|
|
230
|
+
self._core.text.bind("<FocusIn>", self._on_focus_in, add="+")
|
|
226
231
|
|
|
227
232
|
# ── constructor callbacks ─────────────────────────────────────────
|
|
228
233
|
if on_input is not None:
|
|
@@ -348,24 +353,35 @@ class TextArea(GridFrame):
|
|
|
348
353
|
|
|
349
354
|
def _on_core_change(self, _event: tk.Event) -> None:
|
|
350
355
|
if not self._showing_placeholder:
|
|
356
|
+
text = self.value
|
|
357
|
+
if text == self._prev_input_text:
|
|
358
|
+
return
|
|
359
|
+
self._prev_input_text = text
|
|
351
360
|
self.event_generate(
|
|
352
361
|
"<<Input>>",
|
|
353
|
-
data=InputEvent(text=
|
|
362
|
+
data=InputEvent(text=text),
|
|
354
363
|
when="tail",
|
|
355
364
|
)
|
|
356
365
|
|
|
357
366
|
def _on_focus_out(self, _event: tk.Event) -> None:
|
|
358
367
|
if self._placeholder_text and not self._core.value:
|
|
359
368
|
self._show_placeholder()
|
|
360
|
-
if not self._showing_placeholder:
|
|
369
|
+
if not self._showing_placeholder and self.value != self._prev_changed_value:
|
|
361
370
|
self.event_generate(
|
|
362
371
|
"<<Changed>>",
|
|
363
|
-
data=ChangeEvent(
|
|
372
|
+
data=ChangeEvent(
|
|
373
|
+
value=self.value,
|
|
374
|
+
text=self.value,
|
|
375
|
+
prev_value=self._prev_changed_value),
|
|
364
376
|
when="tail",
|
|
365
377
|
)
|
|
378
|
+
self._prev_changed_value = self.value
|
|
366
379
|
if self._rules:
|
|
367
380
|
self._run_validation(trigger="blur")
|
|
368
381
|
|
|
382
|
+
def _on_focus_in(self, _event: tk.Event) -> None:
|
|
383
|
+
self._prev_changed_value = self.value
|
|
384
|
+
|
|
369
385
|
# ── public value API ──────────────────────────────────────────────────
|
|
370
386
|
|
|
371
387
|
@property
|
|
@@ -102,9 +102,11 @@ class OptionMenu(MenuButton):
|
|
|
102
102
|
# Store the textvariable if provided, or create a new one. This variable
|
|
103
103
|
# holds the raw VALUE-KEY text (untranslated): it drives the radio
|
|
104
104
|
# highlight, the public value/selection, and <<Change>> in value-space.
|
|
105
|
+
_initial_text = self._resolve_initial_text(value)
|
|
106
|
+
self._prev_value = self._value_by_text.get(_initial_text, _initial_text) if _initial_text else None
|
|
105
107
|
self._textvariable = kwargs.pop('textvariable', None)
|
|
106
108
|
if self._textvariable is None:
|
|
107
|
-
self._textvariable = StringVar(value=
|
|
109
|
+
self._textvariable = StringVar(value=_initial_text)
|
|
108
110
|
|
|
109
111
|
# A separate variable backs the visible button face, holding the
|
|
110
112
|
# (optionally translated) DISPLAY text — decoupled from the value key so
|
|
@@ -208,14 +210,17 @@ class OptionMenu(MenuButton):
|
|
|
208
210
|
|
|
209
211
|
def _on_change(text: str) -> None:
|
|
210
212
|
self._sync_display()
|
|
213
|
+
value = self._value_by_text.get(text, text) if text else None
|
|
211
214
|
self.event_generate(
|
|
212
215
|
'<<Change>>',
|
|
213
|
-
data=ChangeEvent(
|
|
216
|
+
data=ChangeEvent(
|
|
217
|
+
value=value,
|
|
218
|
+
prev_value=self._prev_value,
|
|
219
|
+
text=self._display_text(text)
|
|
220
|
+
)
|
|
214
221
|
)
|
|
222
|
+
self._prev_value = value
|
|
215
223
|
|
|
216
|
-
# Store it here, not at the call site (#476). A caller that discards the
|
|
217
|
-
# return leaves an untracked subscription the guard above can never
|
|
218
|
-
# cancel, and every one of them emits its own <<Change>>.
|
|
219
224
|
self._bind_id = self.textsignal.subscribe(_on_change)
|
|
220
225
|
return self._bind_id
|
|
221
226
|
|
|
@@ -140,21 +140,34 @@ class CodeEditor(PublicWidgetBase):
|
|
|
140
140
|
internal_kwargs["extensions"] = extensions
|
|
141
141
|
|
|
142
142
|
self._internal = _InternalCodeEditor(tk_master, **internal_kwargs)
|
|
143
|
+
self._prev_value = self._internal.value
|
|
144
|
+
self._prev_input_text = self._internal.value
|
|
143
145
|
|
|
144
146
|
# Generate <<CursorMove>> so on_cursor_move() subscribers always work.
|
|
145
147
|
t = self._internal.core.text
|
|
146
148
|
t.bind("<KeyRelease>", lambda e: t.event_generate("<<CursorMove>>"), add="+")
|
|
147
149
|
t.bind("<ButtonRelease-1>", lambda e: t.event_generate("<<CursorMove>>"), add="+")
|
|
148
150
|
|
|
149
|
-
# Re-emit the core's raw <<Change>> (which carries a low-level
|
|
150
|
-
# {"op", "index"} dict) as typed payloads on the public widget, so
|
|
151
|
-
# on_change()/on_input() deliver the editor text — like TextArea.
|
|
152
151
|
def _emit_typed_change(_e: Any = None) -> None:
|
|
153
152
|
text = self._internal.value
|
|
154
|
-
|
|
153
|
+
if text == self._prev_input_text:
|
|
154
|
+
return
|
|
155
|
+
self._prev_input_text = text
|
|
155
156
|
self._internal.event_generate("<<BsInput>>", data=InputEvent(text=text))
|
|
156
157
|
t.bind("<<Change>>", _emit_typed_change, add="+")
|
|
157
158
|
|
|
159
|
+
def _emit_typed_blur(_e: Any = None) -> None:
|
|
160
|
+
text = self._internal.value
|
|
161
|
+
if text != self._prev_value:
|
|
162
|
+
self._internal.event_generate("<<BsChange>>",
|
|
163
|
+
data=ChangeEvent(value=text, text=text, prev_value=self._prev_value))
|
|
164
|
+
self._prev_value = text
|
|
165
|
+
t.bind("<FocusOut>", _emit_typed_blur, add="+")
|
|
166
|
+
|
|
167
|
+
def _on_focus_in(_e: Any = None) -> None:
|
|
168
|
+
self._prev_value = self._internal.value
|
|
169
|
+
t.bind("<FocusIn>", _on_focus_in, add="+")
|
|
170
|
+
|
|
158
171
|
self._attach_to_parent(layout_kw)
|
|
159
172
|
|
|
160
173
|
# ----- Event routing -----
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bootstack
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: Build desktop GUI apps in pure Python and ship them as a standalone executable — built on Tk, no Tkinter boilerplate.
|
|
5
5
|
Author-email: Israel Dryer <israel.dryer@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-after-h-compact.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-after-h-default.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-after-v-compact.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-after-v-default.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-before-h-compact.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-before-h-default.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-before-v-compact.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-before-v-default.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-center-h-compact.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-center-h-default.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-center-v-compact.png
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/buttongroup-center-v-default.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/elements/checkbox-indeterminate.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo
RENAMED
|
File without changes
|
{bootstack-0.4.2 → bootstack-0.4.4}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po
RENAMED
|
File without changes
|