bootstack 0.1.0a14__tar.gz → 0.1.0a16__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.
Files changed (480) hide show
  1. {bootstack-0.1.0a14/src/bootstack.egg-info → bootstack-0.1.0a16}/PKG-INFO +3 -3
  2. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/README.md +2 -2
  3. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/pyproject.toml +2 -2
  4. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/__init__.py +2 -1
  5. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/app.py +13 -1
  6. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/toplevel.py +23 -3
  7. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/utility.py +21 -0
  8. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/events/__init__.py +11 -0
  9. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/events/_payloads.py +50 -0
  10. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/images.py +3 -2
  11. bootstack-0.1.0a16/src/bootstack/signals/README.md +98 -0
  12. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/signals/signal.py +110 -102
  13. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/menubutton.py +3 -1
  14. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/utils.py +12 -3
  15. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrollview.py +30 -0
  16. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +110 -58
  17. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +145 -2
  18. bootstack-0.1.0a16/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +177 -0
  19. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +11 -2
  20. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toolbar.py +17 -14
  21. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tooltip.py +15 -1
  22. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/button.py +10 -1
  23. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/codeeditor.py +163 -21
  24. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/datatable.py +14 -0
  25. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/menubutton.py +23 -0
  26. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/scrollview.py +52 -2
  27. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/spinnerfield.py +1 -1
  28. bootstack-0.1.0a16/src/bootstack/widgets/splash.py +367 -0
  29. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/splitview.py +61 -3
  30. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/textarea.py +20 -0
  31. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/timefield.py +2 -2
  32. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/toolbar.py +41 -18
  33. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/tooltip.py +12 -2
  34. {bootstack-0.1.0a14 → bootstack-0.1.0a16/src/bootstack.egg-info}/PKG-INFO +3 -3
  35. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack.egg-info/SOURCES.txt +2 -0
  36. bootstack-0.1.0a16/tests/test_events_doc_coverage.py +32 -0
  37. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/tests/test_images.py +27 -0
  38. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/tests/test_public_surface.py +1 -1
  39. bootstack-0.1.0a14/src/bootstack/signals/README.md +0 -112
  40. bootstack-0.1.0a14/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -87
  41. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/LICENSE +0 -0
  42. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/MANIFEST.in +0 -0
  43. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/NOTICE +0 -0
  44. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/setup.cfg +0 -0
  45. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/__main__.py +0 -0
  46. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/__init__.py +0 -0
  47. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/__init__.py +0 -0
  48. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/after.py +0 -0
  49. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/bind.py +0 -0
  50. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/bindtags.py +0 -0
  51. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/busy.py +0 -0
  52. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/clipboard.py +0 -0
  53. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/focus.py +0 -0
  54. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/grab.py +0 -0
  55. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/grid.py +0 -0
  56. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/localization.py +0 -0
  57. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/pack.py +0 -0
  58. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/place.py +0 -0
  59. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/selection.py +0 -0
  60. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/signals.py +0 -0
  61. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/winfo.py +0 -0
  62. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/colorutils.py +0 -0
  63. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/exceptions.py +0 -0
  64. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/images.py +0 -0
  65. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/__init__.py +0 -0
  66. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/ttk_state.py +0 -0
  67. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/widget.py +0 -0
  68. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/paths.py +0 -0
  69. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/publisher.py +0 -0
  70. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_core/variables.py +0 -0
  71. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/__init__.py +0 -0
  72. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/base_window.py +0 -0
  73. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/events.py +0 -0
  74. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/shortcuts.py +0 -0
  75. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/tk_patch.py +0 -0
  76. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/visual_focus.py +0 -0
  77. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/_runtime/window_utilities.py +0 -0
  78. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/__init__.py +0 -0
  79. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/bootstack.ico +0 -0
  80. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/bootstack.png +0 -0
  81. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/__init__.py +0 -0
  82. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/badge-pill.png +0 -0
  83. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/badge-square.png +0 -0
  84. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/button-compact.png +0 -0
  85. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/button-default.png +0 -0
  86. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
  87. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
  88. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
  89. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
  90. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
  91. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
  92. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
  93. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
  94. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
  95. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
  96. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
  97. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
  98. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/card.png +0 -0
  99. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
  100. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
  101. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
  102. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/field.png +0 -0
  103. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
  104. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-addon-default.png +0 -0
  105. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-compact.png +0 -0
  106. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-default.png +0 -0
  107. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/list-item-separated.png +0 -0
  108. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/list-item.png +0 -0
  109. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/listrow-compact.png +0 -0
  110. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/listrow-default.png +0 -0
  111. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/manifest.toml +0 -0
  112. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/menu-item.png +0 -0
  113. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/navitem-compact.png +0 -0
  114. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/navitem-default.png +0 -0
  115. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
  116. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
  117. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
  118. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
  119. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/radiobutton.png +0 -0
  120. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
  121. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
  122. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-handle.png +0 -0
  123. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-track-h.png +0 -0
  124. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-track-v.png +0 -0
  125. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/switch-off.png +0 -0
  126. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/switch-on.png +0 -0
  127. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/tab-h.png +0 -0
  128. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/elements/tab-v.png +0 -0
  129. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
  130. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/icons/glyphmap.json +0 -0
  131. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/icons/icon_metrics.json +0 -0
  132. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
  133. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
  134. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
  135. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
  136. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
  137. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
  138. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
  139. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
  140. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
  141. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
  142. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
  143. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
  144. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
  145. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
  146. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
  147. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
  148. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
  149. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
  150. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
  151. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
  152. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
  153. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
  154. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
  155. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
  156. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
  157. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
  158. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
  159. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
  160. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
  161. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
  162. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
  163. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
  164. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
  165. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
  166. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
  167. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
  168. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
  169. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
  170. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
  171. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
  172. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
  173. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
  174. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
  175. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
  176. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
  177. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
  178. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/__init__.py +0 -0
  179. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/__main__.py +0 -0
  180. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/add.py +0 -0
  181. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/appicon.py +0 -0
  182. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/build.py +0 -0
  183. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/config.py +0 -0
  184. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/demo.py +0 -0
  185. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/doctor.py +0 -0
  186. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/icons.py +0 -0
  187. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/promote.py +0 -0
  188. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/pyinstaller.py +0 -0
  189. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/run.py +0 -0
  190. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/start.py +0 -0
  191. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/cli/templates/__init__.py +0 -0
  192. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/clipboard.py +0 -0
  193. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/constants.py +0 -0
  194. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/README.md +0 -0
  195. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/__init__.py +0 -0
  196. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/_observable.py +0 -0
  197. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/base.py +0 -0
  198. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/file_source.py +0 -0
  199. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/memory_source.py +0 -0
  200. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/query.py +0 -0
  201. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/readers.py +0 -0
  202. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/sqlite_source.py +0 -0
  203. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/types.py +0 -0
  204. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/data/writers.py +0 -0
  205. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/__init__.py +0 -0
  206. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/__init__.py +0 -0
  207. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/colorchooser.py +0 -0
  208. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/datedialog.py +0 -0
  209. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/dialog.py +0 -0
  210. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/filterdialog.py +0 -0
  211. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/fontdialog.py +0 -0
  212. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/formdialog.py +0 -0
  213. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/message.py +0 -0
  214. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/query.py +0 -0
  215. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/errors.py +0 -0
  216. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/events/_event.py +0 -0
  217. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/events/_subscription.py +0 -0
  218. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/i18n/README.md +0 -0
  219. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/i18n/__init__.py +0 -0
  220. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/i18n/catalog.py +0 -0
  221. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/i18n/intl_format.py +0 -0
  222. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/i18n/msgcat.py +0 -0
  223. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/i18n/specs.py +0 -0
  224. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/py.typed +0 -0
  225. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/scheduling/__init__.py +0 -0
  226. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/scheduling/_schedule.py +0 -0
  227. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/shortcuts.py +0 -0
  228. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/signals/__init__.py +0 -0
  229. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/signals/integration.py +0 -0
  230. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/signals/types.py +0 -0
  231. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/store.py +0 -0
  232. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/streams/__init__.py +0 -0
  233. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/streams/_stream.py +0 -0
  234. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/__init__.py +0 -0
  235. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/__init__.py +0 -0
  236. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/badge.py +0 -0
  237. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/button.py +0 -0
  238. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/buttongroup.py +0 -0
  239. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/calendar.py +0 -0
  240. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/checkbutton.py +0 -0
  241. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/combobox.py +0 -0
  242. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/contextmenu.py +0 -0
  243. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/entry.py +0 -0
  244. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/expander.py +0 -0
  245. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/field.py +0 -0
  246. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/frame.py +0 -0
  247. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/label.py +0 -0
  248. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/labelframe.py +0 -0
  249. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/listview.py +0 -0
  250. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/menubar.py +0 -0
  251. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/panedwindow.py +0 -0
  252. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/progressbar.py +0 -0
  253. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/radiobutton.py +0 -0
  254. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/scale.py +0 -0
  255. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/scrollbar.py +0 -0
  256. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/separator.py +0 -0
  257. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/sidenav.py +0 -0
  258. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/sizegrip.py +0 -0
  259. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/spinbox.py +0 -0
  260. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/switch.py +0 -0
  261. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/tabitem.py +0 -0
  262. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/togglegroup.py +0 -0
  263. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/toolbutton.py +0 -0
  264. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/tooltip.py +0 -0
  265. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders/treeview.py +0 -0
  266. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders_tk/__init__.py +0 -0
  267. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/builders_tk/defaults.py +0 -0
  268. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/element.py +0 -0
  269. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/fonts.py +0 -0
  270. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/style.py +0 -0
  271. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_base.py +0 -0
  272. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_mixed.py +0 -0
  273. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_tk.py +0 -0
  274. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_ttk.py +0 -0
  275. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/style_resolver.py +0 -0
  276. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/theme.py +0 -0
  277. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/theme_provider.py +0 -0
  278. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/themes/__init__.py +0 -0
  279. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/tk_patch.py +0 -0
  280. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/token_maps.py +0 -0
  281. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/types.py +0 -0
  282. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/typography.py +0 -0
  283. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/style/utility.py +0 -0
  284. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/types.py +0 -0
  285. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/validation/__init__.py +0 -0
  286. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/validation/types.py +0 -0
  287. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/validation/validation_result.py +0 -0
  288. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/validation/validation_rules.py +0 -0
  289. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/__init__.py +0 -0
  290. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/__init__.py +0 -0
  291. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/app_config.py +0 -0
  292. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/base.py +0 -0
  293. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/container.py +0 -0
  294. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/context.py +0 -0
  295. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/events.py +0 -0
  296. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/field_mixin.py +0 -0
  297. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
  298. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/image_binding.py +0 -0
  299. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/navmodel.py +0 -0
  300. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/options.py +0 -0
  301. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/selection_group.py +0 -0
  302. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/window_controls.py +0 -0
  303. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/window_menu.py +0 -0
  304. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/__init__.py +0 -0
  305. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
  306. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +0 -0
  307. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
  308. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +0 -0
  309. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +0 -0
  310. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/textentry_part.py +0 -0
  311. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
  312. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
  313. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
  314. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
  315. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/avatar.py +0 -0
  316. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/buttongroup.py +0 -0
  317. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/calendar.py +0 -0
  318. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/carousel.py +0 -0
  319. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/chart.py +0 -0
  320. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/compositeframe.py +0 -0
  321. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/contextmenu.py +0 -0
  322. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
  323. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +0 -0
  324. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
  325. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/field.py +0 -0
  326. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/form.py +0 -0
  327. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/gallery.py +0 -0
  328. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
  329. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
  330. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/listview.py +0 -0
  331. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -0
  332. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/model.py +0 -0
  333. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
  334. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +0 -0
  335. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/meter.py +0 -0
  336. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
  337. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/pagestack.py +0 -0
  338. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/passwordentry.py +0 -0
  339. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/pathentry.py +0 -0
  340. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/picture.py +0 -0
  341. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/radiogroup.py +0 -0
  342. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
  343. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
  344. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
  345. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/__init__.py +0 -0
  346. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/content_host.py +0 -0
  347. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/layout.py +0 -0
  348. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +0 -0
  349. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/providers.py +0 -0
  350. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
  351. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/shell.py +0 -0
  352. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/workspace.py +0 -0
  353. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
  354. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
  355. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
  356. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
  357. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/_shared.py +0 -0
  358. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +0 -0
  359. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/slider.py +0 -0
  360. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/spinnerentry.py +0 -0
  361. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
  362. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
  363. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
  364. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
  365. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabs.py +0 -0
  366. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +0 -0
  367. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
  368. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
  369. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/core.py +0 -0
  370. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
  371. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
  372. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
  373. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
  374. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +0 -0
  375. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
  376. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +0 -0
  377. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/filter.py +0 -0
  378. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +0 -0
  379. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
  380. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +0 -0
  381. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
  382. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
  383. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/timeentry.py +0 -0
  384. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
  385. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
  386. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/togglegroup.py +0 -0
  387. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
  388. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
  389. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
  390. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
  391. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
  392. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
  393. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +0 -0
  394. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
  395. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/font_mixin.py +0 -0
  396. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +0 -0
  397. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
  398. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
  399. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +0 -0
  400. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
  401. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/_menubutton.py +0 -0
  402. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
  403. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
  404. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
  405. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
  406. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
  407. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/combobox.py +0 -0
  408. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
  409. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/flexframe.py +0 -0
  410. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/frame.py +0 -0
  411. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/gridframe.py +0 -0
  412. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
  413. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
  414. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/optionmenu.py +0 -0
  415. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/packframe.py +0 -0
  416. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
  417. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
  418. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
  419. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
  420. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
  421. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
  422. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
  423. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
  424. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
  425. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
  426. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/app.py +0 -0
  427. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/appshell.py +0 -0
  428. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/avatar.py +0 -0
  429. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/boolean_controls.py +0 -0
  430. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/buttongroup.py +0 -0
  431. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/calendar.py +0 -0
  432. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/card.py +0 -0
  433. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/carousel.py +0 -0
  434. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/chart.py +0 -0
  435. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/contextmenu.py +0 -0
  436. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/datefield.py +0 -0
  437. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/divider.py +0 -0
  438. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/expander.py +0 -0
  439. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/form.py +0 -0
  440. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/gallery.py +0 -0
  441. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/gauge.py +0 -0
  442. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/grid.py +0 -0
  443. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/groupbox.py +0 -0
  444. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/label.py +0 -0
  445. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/listview.py +0 -0
  446. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/numberfield.py +0 -0
  447. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/pagestack.py +0 -0
  448. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/passwordfield.py +0 -0
  449. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/pathfield.py +0 -0
  450. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/picture.py +0 -0
  451. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/progressbar.py +0 -0
  452. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/radio_variants.py +0 -0
  453. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/radiogroup.py +0 -0
  454. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/scrollbar.py +0 -0
  455. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/select.py +0 -0
  456. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/selectbutton.py +0 -0
  457. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/sidebar_toggle.py +0 -0
  458. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/sizegrip.py +0 -0
  459. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/slider.py +0 -0
  460. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/spinbox.py +0 -0
  461. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/stacks.py +0 -0
  462. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/statusbar.py +0 -0
  463. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/tabs.py +0 -0
  464. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/textfield.py +0 -0
  465. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/theme_toggle.py +0 -0
  466. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/toast.py +0 -0
  467. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/togglegroup.py +0 -0
  468. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/tree.py +0 -0
  469. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/types.py +0 -0
  470. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack/widgets/window.py +0 -0
  471. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack.egg-info/dependency_links.txt +0 -0
  472. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack.egg-info/entry_points.txt +0 -0
  473. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack.egg-info/requires.txt +0 -0
  474. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/src/bootstack.egg-info/top_level.txt +0 -0
  475. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/tests/test_images_gui.py +0 -0
  476. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/tests/test_intl_format.py +0 -0
  477. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/tests/test_navmodel.py +0 -0
  478. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/tests/test_store.py +0 -0
  479. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/tests/test_theme_from_existing.py +0 -0
  480. {bootstack-0.1.0a14 → bootstack-0.1.0a16}/tests/test_validation_rules.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bootstack
3
- Version: 0.1.0a14
3
+ Version: 0.1.0a16
4
4
  Summary: From idea to a shipped desktop app, fast — a declarative, reactive, batteries-included Python UI framework with 60+ widgets, semantic theming, and built-in packaging.
5
5
  Author-email: Israel Dryer <israel.dryer@gmail.com>
6
6
  License-Expression: MIT
@@ -223,7 +223,7 @@ app.run()
223
223
 
224
224
  ## Features
225
225
 
226
- - **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, undecorated windows with custom chrome
226
+ - **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, `Splash` for a startup intro screen, undecorated windows with custom chrome
227
227
  - **60+ themed widgets** — primitives plus higher-level composites (DataTable, Tree, ListView, Calendar, DateField, Form, Gauge, ToggleGroup, PageStack, Carousel, Tooltip, and more)
228
228
  - **Dialogs and messages** — `alert()` / `confirm()` / `ask_*()` prompts and `FormDialog` / `FontDialog` / `FilterDialog`, plus non-blocking `toast()`, `Notification`, and `Snackbar` surfaces
229
229
  - **Layout containers** — `Column`, `Row`, `Grid`, and `Spacer` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Divider`
@@ -248,7 +248,7 @@ app.run()
248
248
  | **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
249
249
  | **Media** | Avatar, Picture, Gallery, Carousel |
250
250
  | **Layout** | Column, Row, Grid, Spacer, Card, GroupBox, SplitView, ScrollView, Accordion, Divider |
251
- | **Navigation** | AppShell, Workbench, Window, StatusBar, Tabs, PageStack |
251
+ | **Navigation** | AppShell, Workbench, Window, Splash, StatusBar, Tabs, PageStack |
252
252
  | **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
253
253
  | **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
254
254
  | **Forms** | Form, with field-level validation |
@@ -173,7 +173,7 @@ app.run()
173
173
 
174
174
  ## Features
175
175
 
176
- - **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, undecorated windows with custom chrome
176
+ - **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, `Splash` for a startup intro screen, undecorated windows with custom chrome
177
177
  - **60+ themed widgets** — primitives plus higher-level composites (DataTable, Tree, ListView, Calendar, DateField, Form, Gauge, ToggleGroup, PageStack, Carousel, Tooltip, and more)
178
178
  - **Dialogs and messages** — `alert()` / `confirm()` / `ask_*()` prompts and `FormDialog` / `FontDialog` / `FilterDialog`, plus non-blocking `toast()`, `Notification`, and `Snackbar` surfaces
179
179
  - **Layout containers** — `Column`, `Row`, `Grid`, and `Spacer` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Divider`
@@ -198,7 +198,7 @@ app.run()
198
198
  | **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
199
199
  | **Media** | Avatar, Picture, Gallery, Carousel |
200
200
  | **Layout** | Column, Row, Grid, Spacer, Card, GroupBox, SplitView, ScrollView, Accordion, Divider |
201
- | **Navigation** | AppShell, Workbench, Window, StatusBar, Tabs, PageStack |
201
+ | **Navigation** | AppShell, Workbench, Window, Splash, StatusBar, Tabs, PageStack |
202
202
  | **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
203
203
  | **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
204
204
  | **Forms** | Form, with field-level validation |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "bootstack"
7
- version = "0.1.0a14"
7
+ version = "0.1.0a16"
8
8
  description = "From idea to a shipped desktop app, fast — a declarative, reactive, batteries-included Python UI framework with 60+ widgets, semantic theming, and built-in packaging."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -109,7 +109,7 @@ where = ["src"]
109
109
  ]
110
110
 
111
111
  [tool.bumpversion]
112
- current_version = "0.1.0a14"
112
+ current_version = "0.1.0a16"
113
113
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
114
114
  serialize = [
115
115
  "{major}.{minor}.{patch}{pre}{pre_n}",
@@ -60,6 +60,7 @@ from bootstack.dialogs import (
60
60
  from bootstack.widgets.app import App
61
61
  from bootstack.widgets.appshell import AppShell, Workbench
62
62
  from bootstack.widgets.window import Window
63
+ from bootstack.widgets.splash import Splash
63
64
 
64
65
  # ── Public widget layer ───────────────────────────────────────────────────────
65
66
  from bootstack.widgets.stacks import Row, Column, Spacer
@@ -130,7 +131,7 @@ __all__ = [
130
131
  "ask_date_range", "ask_item", "ask_color", "ask_font", "ask_filter",
131
132
  "ask_save_file", "ask_open_file", "ask_open_files", "ask_directory",
132
133
  # Application & windows
133
- "App", "AppShell", "Workbench", "Window",
134
+ "App", "AppShell", "Workbench", "Window", "Splash",
134
135
  # Layout
135
136
  "Row", "Column", "Spacer", "Grid", "Card", "GroupBox", "Divider", "ScrollView",
136
137
  "SplitView", "SplitPane", "Accordion", "AccordionSection",
@@ -630,6 +630,10 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
630
630
  if self._on_close_kwarg is not None:
631
631
  self.add_close_handler(self._on_close_kwarg)
632
632
 
633
+ # A registered intro splash (bs.Splash), or None. Set by the splash on
634
+ # construction; read at reveal time to defer the app's own appearance.
635
+ self._splash: Any = None
636
+
633
637
  def mainloop(self, n=0) -> None:
634
638
  """Start the application event loop
635
639
 
@@ -639,7 +643,13 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
639
643
  """
640
644
  if self._center_on_screen:
641
645
  self.place_window_center()
642
- self.show()
646
+ splash = getattr(self, "_splash", None)
647
+ if splash is not None and splash.is_showing:
648
+ # An intro splash is up — defer the app's reveal until it dismisses,
649
+ # then reveal via this callback (see Splash._notify_app_ready).
650
+ splash._notify_app_ready(self.show)
651
+ else:
652
+ self.show()
643
653
  super().mainloop(n=n)
644
654
 
645
655
  def _do_close(self) -> None:
@@ -694,10 +704,12 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
694
704
  from bootstack.style.typography import Typography
695
705
  from bootstack._core.images import _ImageService
696
706
  from bootstack._runtime.visual_focus import reset_visual_focus_root
707
+ from bootstack.signals.signal import reset_realized_signals
697
708
  reset_style()
698
709
  Typography.reset()
699
710
  _ImageService.clear_cache()
700
711
  reset_visual_focus_root()
712
+ reset_realized_signals()
701
713
  gc.collect()
702
714
  except Exception:
703
715
  pass
@@ -62,7 +62,13 @@ class Toplevel(BaseWindow, WidgetCapabilitiesMixin, tkinter.Toplevel):
62
62
  resizable: Whether the user may resize the window as (x, y).
63
63
  transient: Mark this window as transient for the given master.
64
64
  overrideredirect: If True, instruct the window manager to ignore this window.
65
- windowtype: On X11, request a specific window manager type via `-type`.
65
+ windowtype: Request a native window type, resolved per platform from a
66
+ single switch. Values: `'splash'`, `'tooltip'`, `'dock'`, `'utility'`.
67
+ On X11 it sets `-type`; on macOS it maps to a `MacWindowStyle`; on
68
+ Windows the chromeless types (`'splash'`/`'tooltip'`/`'dock'`) resolve
69
+ to override-redirect (borderless, no taskbar button) and `'utility'`
70
+ resolves to a tool window. The caller does not also need to pass
71
+ `overrideredirect=True` to get a chromeless window on Windows.
66
72
  topmost: If True, keep this window above others (`-topmost`).
67
73
  toolwindow: On Windows, request a toolwindow style (`-toolwindow`).
68
74
  alpha: On Windows, the window alpha transparency (0.0–1.0) via `-alpha`.
@@ -124,6 +130,20 @@ class Toplevel(BaseWindow, WidgetCapabilitiesMixin, tkinter.Toplevel):
124
130
  except tkinter.TclError:
125
131
  pass
126
132
 
133
+ # Windows has no native window-type attribute, so translate windowtype
134
+ # to the matching primitive: the chromeless types resolve to
135
+ # override-redirect (borderless + no taskbar/Alt-Tab button), and
136
+ # 'utility' resolves to a tool window (minimal chrome). One switch then
137
+ # yields the right native window on all three platforms. (On Aqua the
138
+ # overrideredirect call is a no-op — MacWindowStyle handled it above.)
139
+ _effective_overrideredirect = overrideredirect
140
+ _effective_toolwindow = toolwindow
141
+ if windowtype is not None and self.winsys == "win32":
142
+ if windowtype in ("splash", "tooltip", "dock"):
143
+ _effective_overrideredirect = True
144
+ elif windowtype == "utility":
145
+ _effective_toolwindow = True
146
+
127
147
  # Setup icon (use default bootstack icon if no icon provided)
128
148
  self._setup_icon(icon, default_icon_enabled=True)
129
149
 
@@ -169,7 +189,7 @@ class Toplevel(BaseWindow, WidgetCapabilitiesMixin, tkinter.Toplevel):
169
189
  maxsize=maxsize,
170
190
  resizable=resizable,
171
191
  transient=_resolved_transient,
172
- overrideredirect=overrideredirect,
192
+ overrideredirect=_effective_overrideredirect,
173
193
  alpha=alpha,
174
194
  window_style=window_style,
175
195
  center_on_parent=_center_parent,
@@ -188,7 +208,7 @@ class Toplevel(BaseWindow, WidgetCapabilitiesMixin, tkinter.Toplevel):
188
208
  if topmost:
189
209
  self.attributes("-topmost", 1)
190
210
 
191
- if toolwindow and self.winsys == "win32":
211
+ if _effective_toolwindow and self.winsys == "win32":
192
212
  self.attributes("-toolwindow", 1)
193
213
 
194
214
  # Register on_close handler
@@ -247,6 +247,27 @@ def scale_padding_floor(base: int) -> int:
247
247
  return max(base, round(base * _ScalingState.get_ui_scale()))
248
248
 
249
249
 
250
+ def scale_icon_size(base: int) -> int:
251
+ """Scale a logical icon size to physical pixels for the current DPI.
252
+
253
+ Icons are authored at logical (96-DPI) sizes. On a higher-DPI display the
254
+ surrounding fonts and layout scale up via Tk scaling, so an icon rendered at
255
+ its literal logical size lands too small for its container and gets resampled
256
+ by the display, reading as soft (#267). Rendering at the physical size makes
257
+ the glyph land 1:1 in the scaled layout, so it stays crisp.
258
+
259
+ Floors at `base` (mirrors `scale_padding_floor`) so an uninitialized scale
260
+ state or a sub-baseline display never renders an icon smaller than requested.
261
+
262
+ Args:
263
+ base: The logical icon size in pixels at standard (96-DPI) scaling.
264
+
265
+ Returns:
266
+ The DPI-scaled size, at least `base`.
267
+ """
268
+ return max(base, round(base * _ScalingState.get_ui_scale()))
269
+
270
+
250
271
  def scale_size(widget=None, size=None):
251
272
  """Scale the size based on the scaling factor of tkinter.
252
273
  This is used most frequently to adjust the assets for
@@ -32,9 +32,13 @@ from bootstack.events._payloads import (
32
32
  RangeSliderEvent,
33
33
  RowEvent,
34
34
  RowsEvent,
35
+ SashMoveEvent,
36
+ ScrollEvent,
35
37
  SelectionEvent,
36
38
  SliderCommitEvent,
37
39
  SliderEvent,
40
+ SplashDismissEvent,
41
+ SplashDismissReason,
38
42
  TabActivateEvent,
39
43
  TabChangeEvent,
40
44
  TabCloseEvent,
@@ -97,4 +101,11 @@ __all__ = [
97
101
  # Payloads — data source
98
102
  "DataChangeEvent",
99
103
  "ChangeKind",
104
+ # Payloads — split view
105
+ "SashMoveEvent",
106
+ # Payloads — scroll view
107
+ "ScrollEvent",
108
+ # Payloads — splash
109
+ "SplashDismissEvent",
110
+ "SplashDismissReason",
100
111
  ]
@@ -487,3 +487,53 @@ class DataChangeEvent:
487
487
  record: Mapping[str, Any] | None = None
488
488
  """The affected record (or the applied updates) where cheaply available on
489
489
  `insert`/`update`; `None` otherwise."""
490
+
491
+
492
+ # ---------------------------------------------------------------------------
493
+ # SplitView
494
+ # ---------------------------------------------------------------------------
495
+
496
+
497
+ @dataclass(frozen=True, slots=True)
498
+ class SashMoveEvent:
499
+ """Fires when a `SplitView` sash is released after being dragged."""
500
+
501
+ index: int = 0
502
+ """Zero-based index of the sash that moved."""
503
+
504
+ position: int = 0
505
+ """New pixel position of the sash in pixels from the leading edge."""
506
+
507
+
508
+ # ---------------------------------------------------------------------------
509
+ # ScrollView
510
+ # ---------------------------------------------------------------------------
511
+
512
+
513
+ @dataclass(frozen=True, slots=True)
514
+ class ScrollEvent:
515
+ """Fires when a `ScrollView`'s viewport position changes."""
516
+
517
+ y: float = 0.0
518
+ """Vertical scroll position — 0.0 (top) to 1.0 (bottom)."""
519
+
520
+ x: float = 0.0
521
+ """Horizontal scroll position — 0.0 (left) to 1.0 (right)."""
522
+
523
+
524
+ # ---------------------------------------------------------------------------
525
+ # Splash
526
+ # ---------------------------------------------------------------------------
527
+
528
+ SplashDismissReason = Literal["ready", "timer", "manual", "skip"]
529
+ """Why a splash screen dismissed — `'ready'` (the app finished building),
530
+ `'timer'` (its timed duration elapsed), `'manual'` (an explicit `dismiss()`),
531
+ or `'skip'` (the user clicked or pressed Escape)."""
532
+
533
+
534
+ @dataclass(frozen=True, slots=True)
535
+ class SplashDismissEvent:
536
+ """Fires when a splash screen begins dismissing."""
537
+
538
+ reason: SplashDismissReason = "ready"
539
+ """Why the splash dismissed."""
@@ -37,6 +37,7 @@ from pathlib import Path
37
37
  from typing import TYPE_CHECKING
38
38
 
39
39
  from bootstack._core.images import _ImageService
40
+ from bootstack._runtime.utility import scale_icon_size
40
41
 
41
42
  if TYPE_CHECKING:
42
43
  from PIL.Image import Image as _PILImage
@@ -248,7 +249,7 @@ class Image:
248
249
  # every scroll doesn't re-render the glyph each time; dropped by
249
250
  # _invalidate() on a theme change so token colors re-render.
250
251
  if self._icon_pil is None:
251
- size = self._icon.size
252
+ size = scale_icon_size(self._icon.size)
252
253
  size = size if size % 2 == 0 else size + 1
253
254
  self._icon_pil = _ImageService._render_icon(
254
255
  self._icon.name, size, self._resolve_icon_color()
@@ -285,7 +286,7 @@ class Image:
285
286
  return self._photo
286
287
  if self._icon is not None:
287
288
  color = self._resolve_icon_color()
288
- photo = _ImageService.get_icon(self._icon.name, self._icon.size, color)
289
+ photo = _ImageService.get_icon(self._icon.name, scale_icon_size(self._icon.size), color)
289
290
  elif self._path is not None:
290
291
  photo = _ImageService.open(self._path)
291
292
  elif self._data is not None:
@@ -0,0 +1,98 @@
1
+ Signals for bootstack
2
+ =====================
3
+
4
+ Lightweight reactive state. A ``Signal[T]`` holds a value, notifies subscribers
5
+ when it changes, and can be bound two-way to widgets. It is backed by a Tk
6
+ variable, but that variable is created lazily, so the Tk surface never leaks
7
+ into the public API.
8
+
9
+ > The user-facing guide is ``docs/reference/signals.rst`` (teaching) and the
10
+ > API Reference page for ``bootstack.signals`` (lookup). This README covers the
11
+ > package internals; keep it in sync with ``signal.py``.
12
+
13
+ Architecture
14
+ - ``Signal[T]`` (public): the reactive cell — ``signal()`` to read, ``set()`` to
15
+ write, ``subscribe()`` to observe, ``map()`` to derive.
16
+ - Lazy Tk-var realization: ``Signal(...)`` creates **no** Tk variable at
17
+ construction, so a signal can be created at module level (before any ``App``).
18
+ The backing variable is realized on first bind/escape-hatch access against the
19
+ running interpreter, and re-realized cleanly across ``App`` lifecycles.
20
+ - Object mode: values that are not Tk-native (anything other than
21
+ ``bool``/``int``/``float``/``str``/``set`` — e.g. a ``date`` or a dataclass)
22
+ are held as the authoritative Python object; the Tk variable is used only as a
23
+ change-notification bus. Native values are stored in the Tk variable directly.
24
+ - ``_SignalTrace`` (internal): manages the Tcl variable trace
25
+ (``trace_add``/``trace_remove``).
26
+
27
+ Key behaviors
28
+ - Read / write: ``signal()`` returns the current value; ``signal.set(v)`` updates
29
+ it. A ``set()`` to an equal value is a no-op (no notification).
30
+ - Subscriptions: ``subscribe(callback, *, immediate=False)`` returns a
31
+ ``streams.Handle``; call ``handle.cancel()`` to unsubscribe. ``immediate=True``
32
+ fires the callback once with the current value at subscribe time.
33
+ - Derived signals: ``map(transform)`` returns a new signal that follows this one.
34
+ A weak reference keeps the parent from holding the derived signal alive.
35
+ - Robustness: the last value is cached and returned even if the backing variable
36
+ has been dropped (e.g. between ``App`` lifecycles).
37
+ - Escape hatch: ``Signal.from_variable(tk_var)`` wraps an existing Tk variable,
38
+ and ``signal.var`` exposes the backing variable. These are the only Tk-aware
39
+ paths; everything else stays Tk-free.
40
+
41
+ Usage
42
+ 1) Quick start (works at module level — no ``App`` required)
43
+ ```python
44
+ from bootstack.signals import Signal
45
+
46
+ count = Signal(0)
47
+ print(count()) # -> 0
48
+ count.set(1)
49
+ print(count()) # -> 1
50
+ ```
51
+
52
+ 2) Two-way binding to a widget
53
+ ```python
54
+ import bootstack as bs
55
+
56
+ with bs.App() as app:
57
+ name = bs.Signal("")
58
+ bs.TextField(textsignal=name) # edits flow into the signal
59
+ bs.Label(textsignal=name.map(lambda v: f"Hello, {v}!")) # derived display
60
+ app.run()
61
+ ```
62
+
63
+ 3) Subscribing and unsubscribing
64
+ ```python
65
+ import bootstack as bs
66
+
67
+ with bs.App() as app:
68
+ flag = bs.Signal(False)
69
+
70
+ def on_flag(value):
71
+ print("flag:", value)
72
+
73
+ handle = flag.subscribe(on_flag, immediate=True) # prints: flag: False
74
+ flag.set(True) # prints: flag: True
75
+ handle.cancel() # stop observing
76
+ app.run()
77
+ ```
78
+
79
+ 4) Typed (object-mode) values
80
+ ```python
81
+ from datetime import date
82
+ import bootstack as bs
83
+
84
+ with bs.App():
85
+ due = bs.Signal(date.today())
86
+ bs.DateField(signal=due) # binds the typed value
87
+ print(type(due())) # -> <class 'datetime.date'> (not str)
88
+ ```
89
+
90
+ Import path
91
+ - ``import bootstack as bs; bs.Signal``
92
+ - ``from bootstack.signals import Signal``
93
+
94
+ Notes
95
+ - The UI toolkit is not thread-safe. Marshal cross-thread updates onto the UI
96
+ via the framework's scheduling, not by touching the signal from a worker
97
+ thread.
98
+ - Keep subscriber callbacks fast; offload long-running work.