bootstack 0.1.0a15__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 (478) hide show
  1. {bootstack-0.1.0a15/src/bootstack.egg-info → bootstack-0.1.0a16}/PKG-INFO +3 -3
  2. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/README.md +2 -2
  3. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/pyproject.toml +2 -2
  4. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/__init__.py +2 -1
  5. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/app.py +11 -1
  6. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/toplevel.py +23 -3
  7. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/utility.py +21 -0
  8. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/events/__init__.py +5 -0
  9. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/events/_payloads.py +18 -0
  10. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/images.py +3 -2
  11. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/menubutton.py +3 -1
  12. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/utils.py +12 -3
  13. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tooltip.py +15 -1
  14. bootstack-0.1.0a16/src/bootstack/widgets/splash.py +367 -0
  15. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/tooltip.py +12 -2
  16. {bootstack-0.1.0a15 → bootstack-0.1.0a16/src/bootstack.egg-info}/PKG-INFO +3 -3
  17. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/SOURCES.txt +2 -0
  18. bootstack-0.1.0a16/tests/test_events_doc_coverage.py +32 -0
  19. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_images.py +27 -0
  20. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_public_surface.py +1 -1
  21. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/LICENSE +0 -0
  22. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/MANIFEST.in +0 -0
  23. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/NOTICE +0 -0
  24. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/setup.cfg +0 -0
  25. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/__main__.py +0 -0
  26. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/__init__.py +0 -0
  27. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/__init__.py +0 -0
  28. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/after.py +0 -0
  29. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/bind.py +0 -0
  30. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/bindtags.py +0 -0
  31. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/busy.py +0 -0
  32. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/clipboard.py +0 -0
  33. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/focus.py +0 -0
  34. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/grab.py +0 -0
  35. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/grid.py +0 -0
  36. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/localization.py +0 -0
  37. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/pack.py +0 -0
  38. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/place.py +0 -0
  39. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/selection.py +0 -0
  40. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/signals.py +0 -0
  41. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/capabilities/winfo.py +0 -0
  42. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/colorutils.py +0 -0
  43. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/exceptions.py +0 -0
  44. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/images.py +0 -0
  45. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/__init__.py +0 -0
  46. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/ttk_state.py +0 -0
  47. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/mixins/widget.py +0 -0
  48. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/paths.py +0 -0
  49. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/publisher.py +0 -0
  50. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_core/variables.py +0 -0
  51. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/__init__.py +0 -0
  52. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/base_window.py +0 -0
  53. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/events.py +0 -0
  54. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/shortcuts.py +0 -0
  55. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/tk_patch.py +0 -0
  56. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/visual_focus.py +0 -0
  57. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/_runtime/window_utilities.py +0 -0
  58. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/__init__.py +0 -0
  59. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/bootstack.ico +0 -0
  60. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/bootstack.png +0 -0
  61. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/__init__.py +0 -0
  62. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/badge-pill.png +0 -0
  63. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/badge-square.png +0 -0
  64. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/button-compact.png +0 -0
  65. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/button-default.png +0 -0
  66. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
  67. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
  68. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
  69. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
  70. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
  71. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
  72. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
  73. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
  74. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
  75. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
  76. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
  77. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
  78. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/card.png +0 -0
  79. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
  80. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
  81. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
  82. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/field.png +0 -0
  83. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
  84. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-addon-default.png +0 -0
  85. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-compact.png +0 -0
  86. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/input-default.png +0 -0
  87. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/list-item-separated.png +0 -0
  88. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/list-item.png +0 -0
  89. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/listrow-compact.png +0 -0
  90. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/listrow-default.png +0 -0
  91. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/manifest.toml +0 -0
  92. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/menu-item.png +0 -0
  93. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/navitem-compact.png +0 -0
  94. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/navitem-default.png +0 -0
  95. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
  96. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
  97. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
  98. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
  99. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/radiobutton.png +0 -0
  100. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
  101. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
  102. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-handle.png +0 -0
  103. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-track-h.png +0 -0
  104. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/slider-track-v.png +0 -0
  105. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/switch-off.png +0 -0
  106. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/switch-on.png +0 -0
  107. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/tab-h.png +0 -0
  108. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/elements/tab-v.png +0 -0
  109. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
  110. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/icons/glyphmap.json +0 -0
  111. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/icons/icon_metrics.json +0 -0
  112. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
  113. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
  114. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
  115. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
  116. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
  117. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
  118. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
  119. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
  120. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
  121. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
  122. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
  123. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
  124. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
  125. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
  126. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
  127. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
  128. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
  129. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
  130. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
  131. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
  132. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
  133. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
  134. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
  135. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
  136. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
  137. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
  138. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
  139. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
  140. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
  141. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
  142. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
  143. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
  144. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
  145. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
  146. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
  147. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
  148. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
  149. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
  150. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
  151. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
  152. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
  153. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
  154. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
  155. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
  156. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
  157. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
  158. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/__init__.py +0 -0
  159. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/__main__.py +0 -0
  160. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/add.py +0 -0
  161. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/appicon.py +0 -0
  162. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/build.py +0 -0
  163. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/config.py +0 -0
  164. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/demo.py +0 -0
  165. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/doctor.py +0 -0
  166. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/icons.py +0 -0
  167. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/promote.py +0 -0
  168. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/pyinstaller.py +0 -0
  169. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/run.py +0 -0
  170. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/start.py +0 -0
  171. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/cli/templates/__init__.py +0 -0
  172. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/clipboard.py +0 -0
  173. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/constants.py +0 -0
  174. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/README.md +0 -0
  175. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/__init__.py +0 -0
  176. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/_observable.py +0 -0
  177. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/base.py +0 -0
  178. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/file_source.py +0 -0
  179. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/memory_source.py +0 -0
  180. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/query.py +0 -0
  181. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/readers.py +0 -0
  182. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/sqlite_source.py +0 -0
  183. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/types.py +0 -0
  184. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/data/writers.py +0 -0
  185. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/__init__.py +0 -0
  186. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/__init__.py +0 -0
  187. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/colorchooser.py +0 -0
  188. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/datedialog.py +0 -0
  189. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/dialog.py +0 -0
  190. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/filterdialog.py +0 -0
  191. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/fontdialog.py +0 -0
  192. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/formdialog.py +0 -0
  193. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/message.py +0 -0
  194. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/dialogs/_impl/query.py +0 -0
  195. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/errors.py +0 -0
  196. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/events/_event.py +0 -0
  197. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/events/_subscription.py +0 -0
  198. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/README.md +0 -0
  199. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/__init__.py +0 -0
  200. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/catalog.py +0 -0
  201. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/intl_format.py +0 -0
  202. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/msgcat.py +0 -0
  203. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/i18n/specs.py +0 -0
  204. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/py.typed +0 -0
  205. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/scheduling/__init__.py +0 -0
  206. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/scheduling/_schedule.py +0 -0
  207. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/shortcuts.py +0 -0
  208. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/README.md +0 -0
  209. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/__init__.py +0 -0
  210. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/integration.py +0 -0
  211. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/signal.py +0 -0
  212. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/signals/types.py +0 -0
  213. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/store.py +0 -0
  214. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/streams/__init__.py +0 -0
  215. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/streams/_stream.py +0 -0
  216. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/__init__.py +0 -0
  217. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/__init__.py +0 -0
  218. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/badge.py +0 -0
  219. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/button.py +0 -0
  220. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/buttongroup.py +0 -0
  221. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/calendar.py +0 -0
  222. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/checkbutton.py +0 -0
  223. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/combobox.py +0 -0
  224. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/contextmenu.py +0 -0
  225. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/entry.py +0 -0
  226. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/expander.py +0 -0
  227. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/field.py +0 -0
  228. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/frame.py +0 -0
  229. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/label.py +0 -0
  230. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/labelframe.py +0 -0
  231. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/listview.py +0 -0
  232. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/menubar.py +0 -0
  233. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/panedwindow.py +0 -0
  234. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/progressbar.py +0 -0
  235. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/radiobutton.py +0 -0
  236. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/scale.py +0 -0
  237. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/scrollbar.py +0 -0
  238. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/separator.py +0 -0
  239. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/sidenav.py +0 -0
  240. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/sizegrip.py +0 -0
  241. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/spinbox.py +0 -0
  242. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/switch.py +0 -0
  243. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/tabitem.py +0 -0
  244. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/togglegroup.py +0 -0
  245. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/toolbutton.py +0 -0
  246. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/tooltip.py +0 -0
  247. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders/treeview.py +0 -0
  248. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders_tk/__init__.py +0 -0
  249. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/builders_tk/defaults.py +0 -0
  250. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/element.py +0 -0
  251. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/fonts.py +0 -0
  252. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style.py +0 -0
  253. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_base.py +0 -0
  254. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_mixed.py +0 -0
  255. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_tk.py +0 -0
  256. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_builder_ttk.py +0 -0
  257. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/style_resolver.py +0 -0
  258. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/theme.py +0 -0
  259. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/theme_provider.py +0 -0
  260. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/themes/__init__.py +0 -0
  261. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/tk_patch.py +0 -0
  262. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/token_maps.py +0 -0
  263. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/types.py +0 -0
  264. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/typography.py +0 -0
  265. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/style/utility.py +0 -0
  266. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/types.py +0 -0
  267. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/validation/__init__.py +0 -0
  268. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/validation/types.py +0 -0
  269. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/validation/validation_result.py +0 -0
  270. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/validation/validation_rules.py +0 -0
  271. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/__init__.py +0 -0
  272. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/__init__.py +0 -0
  273. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/app_config.py +0 -0
  274. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/base.py +0 -0
  275. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/container.py +0 -0
  276. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/context.py +0 -0
  277. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/events.py +0 -0
  278. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/field_mixin.py +0 -0
  279. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
  280. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/image_binding.py +0 -0
  281. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/navmodel.py +0 -0
  282. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/options.py +0 -0
  283. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/selection_group.py +0 -0
  284. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/window_controls.py +0 -0
  285. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_core/window_menu.py +0 -0
  286. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/__init__.py +0 -0
  287. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
  288. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +0 -0
  289. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
  290. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +0 -0
  291. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +0 -0
  292. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/_parts/textentry_part.py +0 -0
  293. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
  294. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
  295. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
  296. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
  297. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/avatar.py +0 -0
  298. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/buttongroup.py +0 -0
  299. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/calendar.py +0 -0
  300. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/carousel.py +0 -0
  301. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/chart.py +0 -0
  302. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/compositeframe.py +0 -0
  303. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/contextmenu.py +0 -0
  304. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
  305. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +0 -0
  306. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
  307. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/field.py +0 -0
  308. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/form.py +0 -0
  309. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/gallery.py +0 -0
  310. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
  311. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
  312. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/list/listview.py +0 -0
  313. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -0
  314. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/model.py +0 -0
  315. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
  316. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +0 -0
  317. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/meter.py +0 -0
  318. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
  319. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/pagestack.py +0 -0
  320. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/passwordentry.py +0 -0
  321. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/pathentry.py +0 -0
  322. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/picture.py +0 -0
  323. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/radiogroup.py +0 -0
  324. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
  325. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
  326. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/scrollview.py +0 -0
  327. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
  328. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/__init__.py +0 -0
  329. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/content_host.py +0 -0
  330. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/layout.py +0 -0
  331. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +0 -0
  332. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/providers.py +0 -0
  333. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
  334. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/shell.py +0 -0
  335. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/shell/workspace.py +0 -0
  336. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
  337. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
  338. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
  339. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
  340. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/_shared.py +0 -0
  341. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +0 -0
  342. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/slider/slider.py +0 -0
  343. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/spinnerentry.py +0 -0
  344. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
  345. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +0 -0
  346. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
  347. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
  348. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
  349. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabs.py +0 -0
  350. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +0 -0
  351. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
  352. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
  353. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +0 -0
  354. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/core.py +0 -0
  355. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
  356. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
  357. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
  358. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
  359. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +0 -0
  360. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
  361. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +0 -0
  362. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -0
  363. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/filter.py +0 -0
  364. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +0 -0
  365. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
  366. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +0 -0
  367. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +0 -0
  368. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
  369. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
  370. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/timeentry.py +0 -0
  371. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
  372. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
  373. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/togglegroup.py +0 -0
  374. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/toolbar.py +0 -0
  375. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
  376. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
  377. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
  378. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
  379. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
  380. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
  381. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +0 -0
  382. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
  383. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/font_mixin.py +0 -0
  384. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +0 -0
  385. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
  386. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
  387. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +0 -0
  388. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
  389. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/_menubutton.py +0 -0
  390. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
  391. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
  392. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
  393. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
  394. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
  395. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/combobox.py +0 -0
  396. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
  397. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/flexframe.py +0 -0
  398. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/frame.py +0 -0
  399. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/gridframe.py +0 -0
  400. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
  401. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
  402. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/optionmenu.py +0 -0
  403. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/packframe.py +0 -0
  404. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
  405. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
  406. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
  407. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
  408. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
  409. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
  410. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
  411. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
  412. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
  413. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
  414. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/app.py +0 -0
  415. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/appshell.py +0 -0
  416. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/avatar.py +0 -0
  417. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/boolean_controls.py +0 -0
  418. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/button.py +0 -0
  419. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/buttongroup.py +0 -0
  420. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/calendar.py +0 -0
  421. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/card.py +0 -0
  422. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/carousel.py +0 -0
  423. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/chart.py +0 -0
  424. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/codeeditor.py +0 -0
  425. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/contextmenu.py +0 -0
  426. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/datatable.py +0 -0
  427. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/datefield.py +0 -0
  428. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/divider.py +0 -0
  429. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/expander.py +0 -0
  430. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/form.py +0 -0
  431. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/gallery.py +0 -0
  432. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/gauge.py +0 -0
  433. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/grid.py +0 -0
  434. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/groupbox.py +0 -0
  435. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/label.py +0 -0
  436. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/listview.py +0 -0
  437. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/menubutton.py +0 -0
  438. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/numberfield.py +0 -0
  439. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/pagestack.py +0 -0
  440. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/passwordfield.py +0 -0
  441. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/pathfield.py +0 -0
  442. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/picture.py +0 -0
  443. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/progressbar.py +0 -0
  444. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/radio_variants.py +0 -0
  445. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/radiogroup.py +0 -0
  446. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/scrollbar.py +0 -0
  447. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/scrollview.py +0 -0
  448. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/select.py +0 -0
  449. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/selectbutton.py +0 -0
  450. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/sidebar_toggle.py +0 -0
  451. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/sizegrip.py +0 -0
  452. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/slider.py +0 -0
  453. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/spinbox.py +0 -0
  454. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/spinnerfield.py +0 -0
  455. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/splitview.py +0 -0
  456. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/stacks.py +0 -0
  457. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/statusbar.py +0 -0
  458. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/tabs.py +0 -0
  459. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/textarea.py +0 -0
  460. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/textfield.py +0 -0
  461. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/theme_toggle.py +0 -0
  462. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/timefield.py +0 -0
  463. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/toast.py +0 -0
  464. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/togglegroup.py +0 -0
  465. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/toolbar.py +0 -0
  466. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/tree.py +0 -0
  467. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/types.py +0 -0
  468. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack/widgets/window.py +0 -0
  469. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/dependency_links.txt +0 -0
  470. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/entry_points.txt +0 -0
  471. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/requires.txt +0 -0
  472. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/src/bootstack.egg-info/top_level.txt +0 -0
  473. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_images_gui.py +0 -0
  474. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_intl_format.py +0 -0
  475. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_navmodel.py +0 -0
  476. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_store.py +0 -0
  477. {bootstack-0.1.0a15 → bootstack-0.1.0a16}/tests/test_theme_from_existing.py +0 -0
  478. {bootstack-0.1.0a15 → 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.0a15
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.0a15"
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.0a15"
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:
@@ -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
@@ -37,6 +37,8 @@ from bootstack.events._payloads import (
37
37
  SelectionEvent,
38
38
  SliderCommitEvent,
39
39
  SliderEvent,
40
+ SplashDismissEvent,
41
+ SplashDismissReason,
40
42
  TabActivateEvent,
41
43
  TabChangeEvent,
42
44
  TabCloseEvent,
@@ -103,4 +105,7 @@ __all__ = [
103
105
  "SashMoveEvent",
104
106
  # Payloads — scroll view
105
107
  "ScrollEvent",
108
+ # Payloads — splash
109
+ "SplashDismissEvent",
110
+ "SplashDismissReason",
106
111
  ]
@@ -519,3 +519,21 @@ class ScrollEvent:
519
519
 
520
520
  x: float = 0.0
521
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:
@@ -65,7 +65,9 @@ def _create_chevron_images(
65
65
  icon_name: Name of the icon to use (default: 'caret-down-fill')
66
66
  density: Button density ('default' or 'compact')
67
67
  """
68
- size = _chevron_size(density)
68
+ # Scale to physical pixels for DPI (#267); matches the combobox/spinbox
69
+ # chevrons (which scale via entry_icon_size) so all chevrons render crisp.
70
+ size = b.scale(_chevron_size(density))
69
71
  normal_chevron = _ImageService.get_icon(icon_name, size, foreground)
70
72
  disabled_chevron = _ImageService.get_icon(icon_name, size, disabled)
71
73
 
@@ -211,12 +211,21 @@ def icon_size(icon_only: bool, density: str) -> int:
211
211
  if icon_only:
212
212
  return 20 if density != 'compact' else 17
213
213
 
214
- # Get icon size from font ascent for proper alignment with text
215
- # Different buffers compensate for y_bias effect per density
214
+ # Size the icon to the label's cap height (font ascent) for alignment.
215
+ # Different buffers compensate for y_bias effect per density.
216
216
  font_name = 'caption' if density == 'compact' else 'body'
217
217
  f = font.nametofont(font_name)
218
218
  buffer = 4 if density == 'compact' else 3
219
- return f.metrics()['ascent'] + buffer
219
+ ascent = f.metrics()['ascent'] + buffer
220
+
221
+ # The ascent is already in physical pixels (named Tk fonts render at the
222
+ # current scaling), but this value is handed to normalize_icon_spec, which
223
+ # re-applies DPI scaling. Return the logical size (divide the scaling back
224
+ # out) so the icon is scaled exactly once and tracks the cap height at any
225
+ # DPI, instead of double-scaling to ~ui_scale x too large (#305).
226
+ from bootstack._runtime.utility import _ScalingState
227
+ ui_scale = _ScalingState.get_ui_scale() or 1.0
228
+ return round(ascent / ui_scale)
220
229
 
221
230
 
222
231
  def button_font(density: str) -> str:
@@ -130,8 +130,22 @@ class ToolTip:
130
130
  # Tk events don't bubble, so hovering a child of a container target
131
131
  # would otherwise never reach these bindings. Extend them across the
132
132
  # subtree so the tip shows anywhere inside the container.
133
+ self.refresh_bindings()
134
+
135
+ def refresh_bindings(self) -> None:
136
+ """Re-cover the target's subtree after children were added post-attach.
137
+
138
+ `propagate_target_bindings` only tags the descendants present when it
139
+ runs, so children added to a container target after the tooltip was
140
+ created are not covered until this is called again. The call is
141
+ idempotent — already-tagged descendants are left untouched.
142
+ """
133
143
  from bootstack._runtime.utility import propagate_target_bindings
134
- propagate_target_bindings(self._widget)
144
+ try:
145
+ if self._widget.winfo_exists():
146
+ propagate_target_bindings(self._widget)
147
+ except tk.TclError:
148
+ pass
135
149
 
136
150
  def destroy(self) -> None:
137
151
  """Cleanup tooltip resources and unbind all event handlers.