bootstack 0.2.1__tar.gz → 0.2.3__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.2.3/NOTICE +30 -0
- {bootstack-0.2.1/src/bootstack.egg-info → bootstack-0.2.3}/PKG-INFO +1 -1
- {bootstack-0.2.1 → bootstack-0.2.3}/pyproject.toml +2 -2
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/base.py +3 -1
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +50 -10
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/filter.py +3 -1
- bootstack-0.2.3/src/bootstack/widgets/_impl/composites/textarea/redirector.py +138 -0
- {bootstack-0.2.1 → bootstack-0.2.3/src/bootstack.egg-info}/PKG-INFO +1 -1
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack.egg-info/SOURCES.txt +1 -0
- bootstack-0.2.1/NOTICE +0 -10
- {bootstack-0.2.1 → bootstack-0.2.3}/LICENSE +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/MANIFEST.in +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/README.md +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/setup.cfg +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/__main__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/after.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/bind.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/bindtags.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/busy.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/clipboard.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/focus.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/grab.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/grid.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/localization.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/pack.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/place.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/selection.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/signals.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/capabilities/winfo.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/colorutils.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/exceptions.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/images.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/mixins/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/mixins/ttk_state.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/mixins/widget.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/paths.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/publisher.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_core/variables.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/app.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/base_window.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/events.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/shortcuts.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/tk_patch.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/toplevel.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/utility.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/visual_focus.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/wheel.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/_runtime/window_utilities.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/bootstack.ico +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/bootstack.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/badge-pill.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/badge-square.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/button-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/button-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/card.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/field.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/input-addon-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/input-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/input-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/list-item-separated.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/list-item.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/listrow-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/listrow-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/manifest.toml +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/menu-item.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/navitem-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/navitem-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/radiobutton.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/slider-handle.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/slider-track-h.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/slider-track-v.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/switch-off.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/switch-on.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/tab-h.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/tab-v.png +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/icons/glyphmap.json +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/icons/icon_metrics.json +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/__main__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/add.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/appicon.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/build.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/config.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/demo.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/dev.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/doctor.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/icons.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/promote.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/pyinstaller.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/run.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/start.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/cli/templates/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/clipboard.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/constants.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/README.md +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/_observable.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/base.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/file_source.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/memory_source.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/query.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/readers.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/sqlite_source.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/types.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/data/writers.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dev/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dev/_capture.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dev/_env.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dev/_registry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dev/_reloader.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dev/_reset.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dev/_watcher.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/colorchooser.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/datedialog.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/dialog.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/filterdialog.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/fontdialog.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/formdialog.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/message.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/dialogs/_impl/query.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/errors.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/events/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/events/_event.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/events/_payloads.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/events/_subscription.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/i18n/README.md +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/i18n/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/i18n/catalog.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/i18n/intl_format.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/i18n/msgcat.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/i18n/specs.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/images.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/py.typed +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/scheduling/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/scheduling/_schedule.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/shortcuts.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/signals/README.md +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/signals/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/signals/integration.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/signals/signal.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/signals/types.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/store.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/streams/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/streams/_stream.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/badge.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/button.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/buttongroup.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/calendar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/checkbutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/combobox.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/contextmenu.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/entry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/expander.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/field.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/frame.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/label.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/labelframe.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/listview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/menubar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/menubutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/panedwindow.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/progressbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/radiobutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/scale.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/scrollbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/separator.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/sidenav.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/sizegrip.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/spinbox.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/switch.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/tabitem.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/togglegroup.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/toolbutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/tooltip.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/treeview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders/utils.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders_tk/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/builders_tk/defaults.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/element.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/fonts.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/style.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/style_builder_base.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/style_builder_mixed.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/style_builder_tk.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/style_builder_ttk.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/style_resolver.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/theme.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/theme_provider.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/themes/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/tk_patch.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/token_maps.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/types.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/typography.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/style/utility.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/types.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/validation/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/validation/types.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/validation/validation_result.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/validation/validation_rules.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/app_config.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/choices.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/container.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/context.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/events.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/field_mixin.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/image_binding.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/kwargs.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/navmodel.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/options.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/selection_group.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/window_controls.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_core/window_menu.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/_parts/textentry_part.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/avatar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/buttongroup.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/calendar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/carousel.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/chart.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/compositeframe.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/contextmenu.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/field.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/form.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/gallery.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/list/listview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/menu/model.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/meter.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/pagestack.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/passwordentry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/pathentry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/picture.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/radiogroup.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/scrollview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/shell/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/shell/content_host.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/shell/layout.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/shell/providers.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/shell/shell.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/shell/workspace.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/slider/_shared.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/slider/slider.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/spinnerentry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tabs/tabs.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/core.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/timeentry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/togglegroup.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/toolbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tooltip.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/mixins/font_mixin.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/_menubutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/combobox.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/flexframe.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/frame.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/gridframe.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/optionmenu.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/packframe.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/app.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/appshell.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/avatar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/boolean_controls.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/button.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/buttongroup.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/calendar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/card.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/carousel.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/chart.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/codeeditor.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/contextmenu.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/datatable.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/datefield.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/divider.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/expander.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/form.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/gallery.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/gauge.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/grid.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/groupbox.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/label.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/listview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/menubutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/numberfield.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/pagestack.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/passwordfield.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/pathfield.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/picture.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/progressbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/radio_variants.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/radiogroup.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/scrollbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/scrollview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/select.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/selectbutton.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/sidebar_toggle.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/sizegrip.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/slider.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/spinbox.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/spinnerfield.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/splash.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/splitview.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/stacks.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/statusbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/tabs.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/textarea.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/textfield.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/theme_toggle.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/timefield.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/toast.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/togglegroup.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/toolbar.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/tooltip.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/tree.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/types.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/window.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack.egg-info/dependency_links.txt +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack.egg-info/entry_points.txt +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack.egg-info/requires.txt +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack.egg-info/top_level.txt +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_dialog_anchor.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_events_doc_coverage.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_hot_reload.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_images.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_images_gui.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_intl_format.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_navmodel.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_on_color_contrast.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_public_surface.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_store.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_theme_from_existing.py +0 -0
- {bootstack-0.2.1 → bootstack-0.2.3}/tests/test_validation_rules.py +0 -0
bootstack-0.2.3/NOTICE
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
bootstack
|
|
2
|
+
Copyright (c) 2021 - 2026 Israel Dryer
|
|
3
|
+
|
|
4
|
+
This project is derived from ttkbootstrap
|
|
5
|
+
(https://github.com/israel-dryer/ttkbootstrap),
|
|
6
|
+
Copyright (c) 2021 - 2026 Israel Dryer and ttkbootstrap contributors,
|
|
7
|
+
licensed under the MIT License.
|
|
8
|
+
|
|
9
|
+
The original ttkbootstrap license and copyright notice are preserved above
|
|
10
|
+
in compliance with the MIT License terms.
|
|
11
|
+
|
|
12
|
+
This project also contains code derived from IDLE, part of the CPython
|
|
13
|
+
standard library (https://github.com/python/cpython),
|
|
14
|
+
Copyright (c) 2001-2023 Python Software Foundation; All Rights Reserved,
|
|
15
|
+
licensed under the Python Software Foundation License Agreement, Version 2.
|
|
16
|
+
|
|
17
|
+
src/bootstack/widgets/_impl/composites/textarea/redirector.py
|
|
18
|
+
|
|
19
|
+
is a port of idlelib/redirector.py, carrying its WidgetRedirector and
|
|
20
|
+
OriginalCommand classes and their dispatch logic. Summary of the changes made,
|
|
21
|
+
as the Python Software Foundation License Agreement asks for: the
|
|
22
|
+
OriginalCommand interface was narrowed to three private attributes,
|
|
23
|
+
WidgetRedirector.__repr__ was dropped, the operation name is coerced to a
|
|
24
|
+
string before lookup, the widget reference is retained after close() rather
|
|
25
|
+
than deleted, and type hints and rewritten documentation were added.
|
|
26
|
+
|
|
27
|
+
Other modules in the same package implement designs described in IDLE — the
|
|
28
|
+
Delegator and Percolator chain, UndoDelegator, the editor sidebar, and
|
|
29
|
+
parenmatch's flash-and-restore highlighting — but share no substantial code
|
|
30
|
+
with it and are original implementations.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bootstack
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
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.2.
|
|
7
|
+
version = "0.2.3"
|
|
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.2.
|
|
117
|
+
current_version = "0.2.3"
|
|
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}",
|
|
@@ -282,7 +282,9 @@ class PublicWidgetBase:
|
|
|
282
282
|
Example:
|
|
283
283
|
.. code-block:: python
|
|
284
284
|
|
|
285
|
-
|
|
285
|
+
from bootstack.events import ChangeEvent
|
|
286
|
+
|
|
287
|
+
field.emit("change", data=ChangeEvent(value=new_value))
|
|
286
288
|
"""
|
|
287
289
|
sequence = resolve_event(self, str(event))
|
|
288
290
|
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/tableview/tableview.py
RENAMED
|
@@ -29,7 +29,7 @@ from bootstack.style.style import get_style
|
|
|
29
29
|
from bootstack.data.sqlite_source import SqliteDataSource
|
|
30
30
|
from bootstack.data.query import col, any_of, all_of
|
|
31
31
|
from bootstack.widgets._impl.primitives.button import Button
|
|
32
|
-
from bootstack._runtime.utility import bind_right_click
|
|
32
|
+
from bootstack._runtime.utility import bind_right_click, debug_log_exception
|
|
33
33
|
from bootstack.widgets._impl.composites.contextmenu import ContextMenu
|
|
34
34
|
from bootstack.widgets._impl.composites.tooltip import ToolTip
|
|
35
35
|
from bootstack.widgets._impl.composites.dropdownbutton import DropdownButton
|
|
@@ -1148,8 +1148,8 @@ class TableView(Frame):
|
|
|
1148
1148
|
self._tree.bind("<Button-1>", self._on_header_click)
|
|
1149
1149
|
self._tree.bind("<<TreeviewSelect>>", self._on_selection_event)
|
|
1150
1150
|
# Keep group-header chevrons in sync with their open/closed state.
|
|
1151
|
-
self._tree.bind("<<TreeviewOpen>>", self.
|
|
1152
|
-
self._tree.bind("<<TreeviewClose>>", self.
|
|
1151
|
+
self._tree.bind("<<TreeviewOpen>>", self._refresh_group_chevrons_deferred, add="+")
|
|
1152
|
+
self._tree.bind("<<TreeviewClose>>", self._refresh_group_chevrons_deferred, add="+")
|
|
1153
1153
|
self._tree.bind("<ButtonRelease-1>", self._on_row_click_event)
|
|
1154
1154
|
# Escape clears the selection (also reachable in single-select mode, where
|
|
1155
1155
|
# clicking can't return to an empty selection). Bound on the tree widget
|
|
@@ -1158,8 +1158,10 @@ class TableView(Frame):
|
|
|
1158
1158
|
self._tree.bind("<Escape>", lambda _e: self.deselect_all(), add="+")
|
|
1159
1159
|
if self._context_menus != "none":
|
|
1160
1160
|
bind_right_click(self._tree, self._on_tree_context)
|
|
1161
|
-
|
|
1162
|
-
|
|
1161
|
+
# Bound unconditionally: `on_row_double_click` is public API and does not
|
|
1162
|
+
# depend on editing. The handler itself gates the built-in edit dialog on
|
|
1163
|
+
# `_editing['updating']`, so editing behavior is unchanged.
|
|
1164
|
+
self._tree.bind("<Double-1>", self._on_row_double_click)
|
|
1163
1165
|
# Track resize events to rebalance grouped layouts
|
|
1164
1166
|
self._tree.bind("<Configure>", self._on_tree_configure)
|
|
1165
1167
|
|
|
@@ -1690,9 +1692,12 @@ class TableView(Frame):
|
|
|
1690
1692
|
col_idx = 0
|
|
1691
1693
|
# Right-click does not alter the selection (left-click owns that); it
|
|
1692
1694
|
# only records which row the menu targets and opens the menu there.
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
+
# A group header is a real tree item but holds no record — it is absent
|
|
1696
|
+
# from `_row_map` — so it targets nothing, exactly like empty space.
|
|
1697
|
+
if not iid or iid not in self._row_map:
|
|
1698
|
+
self._context_iid = None
|
|
1695
1699
|
return # empty space or a group-header row — no row menu
|
|
1700
|
+
self._context_iid = iid
|
|
1696
1701
|
rec = self._row_map.get(iid, {})
|
|
1697
1702
|
self.event_generate("<<RowRightClick>>", data=RowEvent(record=self._public_record(rec), id=self._record_id(rec)))
|
|
1698
1703
|
self._row_menu_col = col_idx
|
|
@@ -1704,8 +1709,8 @@ class TableView(Frame):
|
|
|
1704
1709
|
if region == "heading":
|
|
1705
1710
|
return
|
|
1706
1711
|
iid = self._tree.identify_row(event.y)
|
|
1707
|
-
if not iid:
|
|
1708
|
-
return
|
|
1712
|
+
if not iid or iid not in self._row_map:
|
|
1713
|
+
return # empty space or a group-header row (no record)
|
|
1709
1714
|
rec = self._row_map.get(iid, {})
|
|
1710
1715
|
self.event_generate("<<RowDoubleClick>>", data=RowEvent(record=self._public_record(rec), id=self._record_id(rec)))
|
|
1711
1716
|
if self._editing['updating']:
|
|
@@ -2343,6 +2348,19 @@ class TableView(Frame):
|
|
|
2343
2348
|
except Exception:
|
|
2344
2349
|
pass
|
|
2345
2350
|
|
|
2351
|
+
def _refresh_group_chevrons_deferred(self, _event=None) -> None:
|
|
2352
|
+
"""Refresh chevrons once Tk has applied the item's new open state.
|
|
2353
|
+
|
|
2354
|
+
The toolkit reports an expand *before* it records it, so reading the
|
|
2355
|
+
state inside the notification paints the previous chevron. Deferring to
|
|
2356
|
+
the next idle point reads the settled state. Scheduled on the root so
|
|
2357
|
+
the pending callback outlives any widget being torn down.
|
|
2358
|
+
"""
|
|
2359
|
+
try:
|
|
2360
|
+
self._root().after_idle(self._refresh_group_chevrons)
|
|
2361
|
+
except Exception:
|
|
2362
|
+
pass
|
|
2363
|
+
|
|
2346
2364
|
def _refresh_group_chevrons(self, _event=None) -> None:
|
|
2347
2365
|
"""Sync every group header's chevron to its current open/closed state."""
|
|
2348
2366
|
if not self._group_by_key:
|
|
@@ -2845,6 +2863,23 @@ class TableView(Frame):
|
|
|
2845
2863
|
"""
|
|
2846
2864
|
return self._selection_markers_active()
|
|
2847
2865
|
|
|
2866
|
+
def _take_click_focus(self, iid) -> None:
|
|
2867
|
+
"""Give the body keyboard focus, and point it at the clicked row.
|
|
2868
|
+
|
|
2869
|
+
Both branches that call this answer the click themselves and stop it,
|
|
2870
|
+
which also stops the built-in handling that would otherwise have done
|
|
2871
|
+
this. Without it a click leaves the keyboard aimed somewhere else, so
|
|
2872
|
+
the row the user just clicked is not the row the arrow keys move from.
|
|
2873
|
+
"""
|
|
2874
|
+
try:
|
|
2875
|
+
self._tree.focus_set()
|
|
2876
|
+
if iid:
|
|
2877
|
+
self._tree.focus(iid)
|
|
2878
|
+
except Exception:
|
|
2879
|
+
# Silence here would restore the very bug this method exists to
|
|
2880
|
+
# fix, with nothing to show for it on any channel.
|
|
2881
|
+
debug_log_exception("could not move keyboard focus to the clicked row")
|
|
2882
|
+
|
|
2848
2883
|
def _on_header_click(self, event):
|
|
2849
2884
|
"""Handle left-click: header sorting, or toggle-select with checkboxes."""
|
|
2850
2885
|
# A left-click on the tree dismisses an open context menu. Do it
|
|
@@ -2873,20 +2908,25 @@ class TableView(Frame):
|
|
|
2873
2908
|
# fall through to normal selection below.
|
|
2874
2909
|
iid = self._tree.identify_row(event.y)
|
|
2875
2910
|
if iid and self._tree.get_children(iid):
|
|
2911
|
+
self._take_click_focus(iid)
|
|
2876
2912
|
self._toggle_group_open(iid)
|
|
2877
2913
|
return "break"
|
|
2878
2914
|
|
|
2879
2915
|
# Body click with checkboxes showing: treat the list like a checklist —
|
|
2880
2916
|
# a plain click toggles the row in/out of the selection (no modifier),
|
|
2881
2917
|
# and "break" suppresses ttk's default replace-the-selection behavior.
|
|
2918
|
+
# Only a click that lands on a row earns that "break" — a click on a
|
|
2919
|
+
# column separator reports no row, and stopping it there would kill the
|
|
2920
|
+
# drag that resizes the column.
|
|
2882
2921
|
if self._toggle_select_active():
|
|
2883
2922
|
iid = self._tree.identify_row(event.y)
|
|
2884
2923
|
if iid:
|
|
2924
|
+
self._take_click_focus(iid)
|
|
2885
2925
|
if iid in self._tree.selection():
|
|
2886
2926
|
self._tree.selection_remove(iid)
|
|
2887
2927
|
else:
|
|
2888
2928
|
self._tree.selection_add(iid)
|
|
2889
|
-
|
|
2929
|
+
return "break"
|
|
2890
2930
|
return None
|
|
2891
2931
|
|
|
2892
2932
|
def _filter_header_column(self) -> None:
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/widgets/_impl/composites/textarea/filter.py
RENAMED
|
@@ -12,7 +12,9 @@ which are clean Python callables, not raw Tcl strings.
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
14
|
import tkinter as tk
|
|
15
|
-
from
|
|
15
|
+
from bootstack.widgets._impl.composites.textarea.redirector import (
|
|
16
|
+
WidgetRedirector,
|
|
17
|
+
)
|
|
16
18
|
from typing import TYPE_CHECKING
|
|
17
19
|
|
|
18
20
|
if TYPE_CHECKING:
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"""Tk command interception for the edit filter chain.
|
|
2
|
+
|
|
3
|
+
Port of IDLE's `idlelib/redirector.py`. The rest of this package already ports
|
|
4
|
+
that design rather than importing it — `filter.py` adapts Delegator and
|
|
5
|
+
Percolator, `undo.py` adapts UndoDelegator, `sidebar.py` and
|
|
6
|
+
`extensions/line_numbers.py` port the sidebar — and this was the one piece left
|
|
7
|
+
as a live import. `idlelib` is standard library, but not every Python build
|
|
8
|
+
ships it, so that import made the whole framework unimportable on those builds
|
|
9
|
+
rather than degrading the code editor.
|
|
10
|
+
|
|
11
|
+
A Tk widget is backed by a Tcl command named after the widget's path, and every
|
|
12
|
+
operation on the widget goes through it — including the ones Tk's own key
|
|
13
|
+
bindings perform, which never reach Python at all. Renaming that command and
|
|
14
|
+
putting a dispatcher in its place is what lets the filter chain see an insert
|
|
15
|
+
that came from a keystroke, which is the whole reason this exists.
|
|
16
|
+
"""
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import tkinter as tk
|
|
20
|
+
from typing import Any, Callable
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class WidgetRedirector:
|
|
24
|
+
"""Intercepts operations on a Tk widget, including the toolkit's own.
|
|
25
|
+
|
|
26
|
+
Renames the widget's Tcl command out of the way and installs a dispatcher
|
|
27
|
+
under the original name. Registered operations are routed to a Python
|
|
28
|
+
callable; everything else passes straight through to the renamed command.
|
|
29
|
+
|
|
30
|
+
Only one redirector can exist for a given widget — the rename fails once
|
|
31
|
+
the name it renames to is taken.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
widget: The widget whose operations are to be intercepted.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, widget: tk.Misc) -> None:
|
|
38
|
+
self._operations: dict[str, Callable[..., Any]] = {}
|
|
39
|
+
self.widget = widget
|
|
40
|
+
self.tk = widget.tk
|
|
41
|
+
path = widget._w
|
|
42
|
+
self.orig = path + "_orig"
|
|
43
|
+
self.tk.call("rename", path, self.orig)
|
|
44
|
+
self.tk.createcommand(path, self.dispatch)
|
|
45
|
+
|
|
46
|
+
def register(
|
|
47
|
+
self, operation: str, function: Callable[..., Any]
|
|
48
|
+
) -> OriginalCommand:
|
|
49
|
+
"""Route `operation` to `function`, returning a way to call the original.
|
|
50
|
+
|
|
51
|
+
The function is also set on the widget, so a call written in Python —
|
|
52
|
+
`text.insert(...)` — is intercepted the same way a keystroke is.
|
|
53
|
+
Registering a second function for the same operation replaces the first
|
|
54
|
+
in both places.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
operation: Name of the widget operation, such as `insert`.
|
|
58
|
+
function: What to call in its place. It receives the operation's
|
|
59
|
+
arguments, and is handed the returned callable to pass the call
|
|
60
|
+
on with.
|
|
61
|
+
"""
|
|
62
|
+
self._operations[operation] = function
|
|
63
|
+
setattr(self.widget, operation, function)
|
|
64
|
+
return OriginalCommand(self, operation)
|
|
65
|
+
|
|
66
|
+
def unregister(self, operation: str) -> Callable[..., Any] | None:
|
|
67
|
+
"""Stop routing `operation`, returning whatever was handling it.
|
|
68
|
+
|
|
69
|
+
Returns None if the operation was not registered. Dropping the widget
|
|
70
|
+
attribute that `register` set unmasks the widget's own method again.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
operation: Name of the widget operation to stop intercepting.
|
|
74
|
+
"""
|
|
75
|
+
function = self._operations.pop(operation, None)
|
|
76
|
+
if function is None:
|
|
77
|
+
return None
|
|
78
|
+
try:
|
|
79
|
+
delattr(self.widget, operation)
|
|
80
|
+
except AttributeError:
|
|
81
|
+
pass
|
|
82
|
+
return function
|
|
83
|
+
|
|
84
|
+
def dispatch(self, operation, *args):
|
|
85
|
+
"""Handle one call to the widget, invoked from Tcl.
|
|
86
|
+
|
|
87
|
+
A registered operation goes to its function and does not continue on to
|
|
88
|
+
the widget — the function decides whether to pass the call along, using
|
|
89
|
+
the callable it was given at registration. Everything else goes
|
|
90
|
+
straight through.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
operation: The operation being performed. Tcl may hand this over as
|
|
94
|
+
its own object type rather than a string.
|
|
95
|
+
args: The operation's arguments, exactly as Tcl passed them.
|
|
96
|
+
"""
|
|
97
|
+
operation = str(operation)
|
|
98
|
+
function = self._operations.get(operation)
|
|
99
|
+
try:
|
|
100
|
+
if function is not None:
|
|
101
|
+
return function(*args)
|
|
102
|
+
return self.tk.call((self.orig, operation) + args)
|
|
103
|
+
except tk.TclError:
|
|
104
|
+
# What the toolkit itself does with a failed widget command. The
|
|
105
|
+
# caller here is Tcl, which has nowhere useful to put an exception.
|
|
106
|
+
return ""
|
|
107
|
+
|
|
108
|
+
def close(self) -> None:
|
|
109
|
+
"""Undo the interception and restore the widget's own Tcl command."""
|
|
110
|
+
for operation in list(self._operations):
|
|
111
|
+
self.unregister(operation)
|
|
112
|
+
path = self.widget._w
|
|
113
|
+
self.tk.deletecommand(path)
|
|
114
|
+
self.tk.call("rename", self.orig, path)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class OriginalCommand:
|
|
118
|
+
"""The widget operation a redirector displaced, as a plain callable.
|
|
119
|
+
|
|
120
|
+
Returned by `WidgetRedirector.register` so a registered function can pass
|
|
121
|
+
the call on to the widget after inspecting or changing it. Calling this
|
|
122
|
+
reaches the widget directly and does not re-enter the chain.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
redirector: The redirector that displaced the operation.
|
|
126
|
+
operation: Name of the displaced operation.
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
def __init__(self, redirector: WidgetRedirector, operation: str) -> None:
|
|
130
|
+
self._operation = operation
|
|
131
|
+
self._call = redirector.tk.call
|
|
132
|
+
self._target = (redirector.orig, operation)
|
|
133
|
+
|
|
134
|
+
def __call__(self, *args):
|
|
135
|
+
return self._call(self._target + args)
|
|
136
|
+
|
|
137
|
+
def __repr__(self) -> str:
|
|
138
|
+
return f"OriginalCommand({self._operation!r})"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bootstack
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
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
|
|
@@ -426,6 +426,7 @@ src/bootstack/widgets/_impl/composites/textarea/core.py
|
|
|
426
426
|
src/bootstack/widgets/_impl/composites/textarea/decoration.py
|
|
427
427
|
src/bootstack/widgets/_impl/composites/textarea/diff.py
|
|
428
428
|
src/bootstack/widgets/_impl/composites/textarea/filter.py
|
|
429
|
+
src/bootstack/widgets/_impl/composites/textarea/redirector.py
|
|
429
430
|
src/bootstack/widgets/_impl/composites/textarea/search_overlay.py
|
|
430
431
|
src/bootstack/widgets/_impl/composites/textarea/sidebar.py
|
|
431
432
|
src/bootstack/widgets/_impl/composites/textarea/style_registry.py
|
bootstack-0.2.1/NOTICE
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
bootstack
|
|
2
|
-
Copyright (c) 2021 - 2026 Israel Dryer
|
|
3
|
-
|
|
4
|
-
This project is derived from ttkbootstrap
|
|
5
|
-
(https://github.com/israel-dryer/ttkbootstrap),
|
|
6
|
-
Copyright (c) 2021 - 2026 Israel Dryer and ttkbootstrap contributors,
|
|
7
|
-
licensed under the MIT License.
|
|
8
|
-
|
|
9
|
-
The original ttkbootstrap license and copyright notice are preserved above
|
|
10
|
-
in compliance with the MIT License terms.
|
|
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
|
|
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.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-after-h-compact.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-after-h-default.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-after-v-compact.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-after-v-default.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-before-h-compact.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-before-h-default.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-before-v-compact.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-before-v-default.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-center-h-compact.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-center-h-default.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-center-v-compact.png
RENAMED
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/src/bootstack/assets/elements/buttongroup-center-v-default.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bootstack-0.2.1 → bootstack-0.2.3}/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
|