bootstack 0.1.0a12__tar.gz → 0.1.0a13__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 (476) hide show
  1. {bootstack-0.1.0a12/src/bootstack.egg-info → bootstack-0.1.0a13}/PKG-INFO +8 -1
  2. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/README.md +2 -0
  3. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/pyproject.toml +13 -3
  4. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/__init__.py +2 -1
  5. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/app.py +26 -0
  6. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/visual_focus.py +12 -0
  7. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style.py +15 -0
  8. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/typography.py +15 -0
  9. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/__init__.py +1 -0
  10. bootstack-0.1.0a13/src/bootstack/widgets/_impl/composites/chart.py +883 -0
  11. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/scrollview.py +37 -0
  12. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +29 -23
  13. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/slider/slider.py +33 -19
  14. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +5 -4
  15. bootstack-0.1.0a13/src/bootstack/widgets/chart.py +302 -0
  16. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/codeeditor.py +41 -14
  17. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/label.py +8 -1
  18. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/textarea.py +17 -7
  19. {bootstack-0.1.0a12 → bootstack-0.1.0a13/src/bootstack.egg-info}/PKG-INFO +8 -1
  20. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/SOURCES.txt +2 -0
  21. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/requires.txt +7 -0
  22. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_public_surface.py +1 -1
  23. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/LICENSE +0 -0
  24. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/MANIFEST.in +0 -0
  25. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/NOTICE +0 -0
  26. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/setup.cfg +0 -0
  27. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/__main__.py +0 -0
  28. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/__init__.py +0 -0
  29. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/__init__.py +0 -0
  30. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/after.py +0 -0
  31. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/bind.py +0 -0
  32. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/bindtags.py +0 -0
  33. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/busy.py +0 -0
  34. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/clipboard.py +0 -0
  35. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/focus.py +0 -0
  36. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/grab.py +0 -0
  37. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/grid.py +0 -0
  38. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/localization.py +0 -0
  39. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/pack.py +0 -0
  40. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/place.py +0 -0
  41. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/selection.py +0 -0
  42. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/signals.py +0 -0
  43. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/capabilities/winfo.py +0 -0
  44. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/colorutils.py +0 -0
  45. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/exceptions.py +0 -0
  46. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/images.py +0 -0
  47. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/mixins/__init__.py +0 -0
  48. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/mixins/ttk_state.py +0 -0
  49. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/mixins/widget.py +0 -0
  50. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/paths.py +0 -0
  51. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/publisher.py +0 -0
  52. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_core/variables.py +0 -0
  53. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/__init__.py +0 -0
  54. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/base_window.py +0 -0
  55. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/events.py +0 -0
  56. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/shortcuts.py +0 -0
  57. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/tk_patch.py +0 -0
  58. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/toplevel.py +0 -0
  59. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/utility.py +0 -0
  60. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/_runtime/window_utilities.py +0 -0
  61. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/__init__.py +0 -0
  62. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/bootstack.ico +0 -0
  63. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/bootstack.png +0 -0
  64. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/__init__.py +0 -0
  65. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/badge-pill.png +0 -0
  66. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/badge-square.png +0 -0
  67. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/button-compact.png +0 -0
  68. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/button-default.png +0 -0
  69. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
  70. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
  71. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
  72. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
  73. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
  74. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
  75. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
  76. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
  77. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
  78. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
  79. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
  80. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
  81. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/card.png +0 -0
  82. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
  83. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
  84. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
  85. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/field.png +0 -0
  86. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
  87. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/input-addon-default.png +0 -0
  88. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/input-compact.png +0 -0
  89. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/input-default.png +0 -0
  90. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/list-item-separated.png +0 -0
  91. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/list-item.png +0 -0
  92. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/listrow-compact.png +0 -0
  93. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/listrow-default.png +0 -0
  94. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/manifest.toml +0 -0
  95. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/menu-item.png +0 -0
  96. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/navitem-compact.png +0 -0
  97. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/navitem-default.png +0 -0
  98. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
  99. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
  100. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
  101. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
  102. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/radiobutton.png +0 -0
  103. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
  104. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
  105. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/slider-handle.png +0 -0
  106. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/slider-track-h.png +0 -0
  107. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/slider-track-v.png +0 -0
  108. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/switch-off.png +0 -0
  109. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/switch-on.png +0 -0
  110. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/tab-h.png +0 -0
  111. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/elements/tab-v.png +0 -0
  112. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
  113. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/icons/glyphmap.json +0 -0
  114. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/icons/icon_metrics.json +0 -0
  115. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
  116. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
  117. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
  118. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
  119. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
  120. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
  121. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
  122. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
  123. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
  124. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
  125. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
  126. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
  127. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
  128. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
  129. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
  130. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
  131. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
  132. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
  133. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
  134. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
  135. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
  136. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
  137. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
  138. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
  139. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
  140. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
  141. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
  142. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
  143. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
  144. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
  145. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
  146. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
  147. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
  148. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
  149. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
  150. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
  151. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
  152. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
  153. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
  154. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
  155. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
  156. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
  157. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
  158. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
  159. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
  160. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
  161. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/__init__.py +0 -0
  162. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/__main__.py +0 -0
  163. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/add.py +0 -0
  164. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/appicon.py +0 -0
  165. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/build.py +0 -0
  166. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/config.py +0 -0
  167. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/demo.py +0 -0
  168. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/doctor.py +0 -0
  169. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/icons.py +0 -0
  170. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/promote.py +0 -0
  171. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/pyinstaller.py +0 -0
  172. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/run.py +0 -0
  173. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/start.py +0 -0
  174. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/cli/templates/__init__.py +0 -0
  175. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/clipboard.py +0 -0
  176. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/constants.py +0 -0
  177. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/README.md +0 -0
  178. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/__init__.py +0 -0
  179. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/_observable.py +0 -0
  180. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/base.py +0 -0
  181. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/file_source.py +0 -0
  182. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/memory_source.py +0 -0
  183. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/query.py +0 -0
  184. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/readers.py +0 -0
  185. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/sqlite_source.py +0 -0
  186. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/types.py +0 -0
  187. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/data/writers.py +0 -0
  188. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/__init__.py +0 -0
  189. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/__init__.py +0 -0
  190. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/colorchooser.py +0 -0
  191. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/datedialog.py +0 -0
  192. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/dialog.py +0 -0
  193. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/filterdialog.py +0 -0
  194. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/fontdialog.py +0 -0
  195. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/formdialog.py +0 -0
  196. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/message.py +0 -0
  197. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/dialogs/_impl/query.py +0 -0
  198. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/errors.py +0 -0
  199. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/events/__init__.py +0 -0
  200. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/events/_event.py +0 -0
  201. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/events/_payloads.py +0 -0
  202. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/events/_subscription.py +0 -0
  203. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/README.md +0 -0
  204. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/__init__.py +0 -0
  205. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/catalog.py +0 -0
  206. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/intl_format.py +0 -0
  207. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/msgcat.py +0 -0
  208. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/i18n/specs.py +0 -0
  209. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/images.py +0 -0
  210. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/py.typed +0 -0
  211. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/scheduling/__init__.py +0 -0
  212. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/scheduling/_schedule.py +0 -0
  213. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/shortcuts.py +0 -0
  214. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/README.md +0 -0
  215. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/__init__.py +0 -0
  216. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/integration.py +0 -0
  217. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/signal.py +0 -0
  218. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/signals/types.py +0 -0
  219. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/store.py +0 -0
  220. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/streams/__init__.py +0 -0
  221. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/streams/_stream.py +0 -0
  222. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/__init__.py +0 -0
  223. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/__init__.py +0 -0
  224. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/badge.py +0 -0
  225. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/button.py +0 -0
  226. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/buttongroup.py +0 -0
  227. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/calendar.py +0 -0
  228. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/checkbutton.py +0 -0
  229. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/combobox.py +0 -0
  230. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/contextmenu.py +0 -0
  231. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/entry.py +0 -0
  232. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/expander.py +0 -0
  233. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/field.py +0 -0
  234. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/frame.py +0 -0
  235. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/label.py +0 -0
  236. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/labelframe.py +0 -0
  237. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/listview.py +0 -0
  238. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/menubar.py +0 -0
  239. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/menubutton.py +0 -0
  240. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/panedwindow.py +0 -0
  241. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/progressbar.py +0 -0
  242. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/radiobutton.py +0 -0
  243. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/scale.py +0 -0
  244. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/scrollbar.py +0 -0
  245. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/separator.py +0 -0
  246. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/sidenav.py +0 -0
  247. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/sizegrip.py +0 -0
  248. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/spinbox.py +0 -0
  249. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/switch.py +0 -0
  250. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/tabitem.py +0 -0
  251. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/togglegroup.py +0 -0
  252. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/toolbutton.py +0 -0
  253. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/tooltip.py +0 -0
  254. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/treeview.py +0 -0
  255. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders/utils.py +0 -0
  256. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders_tk/__init__.py +0 -0
  257. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/builders_tk/defaults.py +0 -0
  258. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/element.py +0 -0
  259. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/fonts.py +0 -0
  260. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_builder_base.py +0 -0
  261. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_builder_mixed.py +0 -0
  262. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_builder_tk.py +0 -0
  263. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_builder_ttk.py +0 -0
  264. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/style_resolver.py +0 -0
  265. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/theme.py +0 -0
  266. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/theme_provider.py +0 -0
  267. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/themes/__init__.py +0 -0
  268. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/tk_patch.py +0 -0
  269. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/token_maps.py +0 -0
  270. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/types.py +0 -0
  271. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/style/utility.py +0 -0
  272. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/types.py +0 -0
  273. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/validation/__init__.py +0 -0
  274. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/validation/types.py +0 -0
  275. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/validation/validation_result.py +0 -0
  276. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/validation/validation_rules.py +0 -0
  277. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/__init__.py +0 -0
  278. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/app_config.py +0 -0
  279. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/base.py +0 -0
  280. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/container.py +0 -0
  281. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/context.py +0 -0
  282. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/events.py +0 -0
  283. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/field_mixin.py +0 -0
  284. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
  285. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/image_binding.py +0 -0
  286. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/navmodel.py +0 -0
  287. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/options.py +0 -0
  288. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/selection_group.py +0 -0
  289. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/window_controls.py +0 -0
  290. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_core/window_menu.py +0 -0
  291. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/__init__.py +0 -0
  292. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
  293. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +0 -0
  294. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
  295. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +0 -0
  296. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +0 -0
  297. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/_parts/textentry_part.py +0 -0
  298. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
  299. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
  300. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
  301. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
  302. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/avatar.py +0 -0
  303. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/buttongroup.py +0 -0
  304. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/calendar.py +0 -0
  305. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/carousel.py +0 -0
  306. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/compositeframe.py +0 -0
  307. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/contextmenu.py +0 -0
  308. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
  309. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +0 -0
  310. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
  311. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/field.py +0 -0
  312. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/form.py +0 -0
  313. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/gallery.py +0 -0
  314. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
  315. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
  316. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/list/listview.py +0 -0
  317. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -0
  318. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/menu/model.py +0 -0
  319. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
  320. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +0 -0
  321. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/meter.py +0 -0
  322. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
  323. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/pagestack.py +0 -0
  324. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/passwordentry.py +0 -0
  325. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/pathentry.py +0 -0
  326. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/picture.py +0 -0
  327. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/radiogroup.py +0 -0
  328. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
  329. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
  330. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
  331. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/__init__.py +0 -0
  332. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/content_host.py +0 -0
  333. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/layout.py +0 -0
  334. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +0 -0
  335. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/providers.py +0 -0
  336. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
  337. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/shell.py +0 -0
  338. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/shell/workspace.py +0 -0
  339. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
  340. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
  341. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
  342. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
  343. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/slider/_shared.py +0 -0
  344. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/spinnerentry.py +0 -0
  345. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
  346. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +0 -0
  347. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
  348. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
  349. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
  350. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tabs/tabs.py +0 -0
  351. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +0 -0
  352. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
  353. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
  354. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/core.py +0 -0
  355. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
  356. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
  357. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
  358. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
  359. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +0 -0
  360. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
  361. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +0 -0
  362. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -0
  363. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/filter.py +0 -0
  364. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +0 -0
  365. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
  366. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +0 -0
  367. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +0 -0
  368. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
  369. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
  370. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/timeentry.py +0 -0
  371. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
  372. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
  373. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/togglegroup.py +0 -0
  374. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/toolbar.py +0 -0
  375. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tooltip.py +0 -0
  376. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
  377. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
  378. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
  379. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
  380. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
  381. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
  382. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +0 -0
  383. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
  384. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/font_mixin.py +0 -0
  385. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +0 -0
  386. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
  387. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
  388. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +0 -0
  389. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
  390. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/_menubutton.py +0 -0
  391. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
  392. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
  393. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
  394. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
  395. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
  396. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/combobox.py +0 -0
  397. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
  398. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/flexframe.py +0 -0
  399. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/frame.py +0 -0
  400. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/gridframe.py +0 -0
  401. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
  402. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
  403. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/optionmenu.py +0 -0
  404. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/packframe.py +0 -0
  405. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
  406. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
  407. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
  408. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
  409. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
  410. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
  411. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
  412. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
  413. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
  414. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
  415. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/app.py +0 -0
  416. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/appshell.py +0 -0
  417. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/avatar.py +0 -0
  418. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/boolean_controls.py +0 -0
  419. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/button.py +0 -0
  420. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/buttongroup.py +0 -0
  421. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/calendar.py +0 -0
  422. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/card.py +0 -0
  423. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/carousel.py +0 -0
  424. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/contextmenu.py +0 -0
  425. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/datatable.py +0 -0
  426. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/datefield.py +0 -0
  427. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/divider.py +0 -0
  428. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/expander.py +0 -0
  429. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/form.py +0 -0
  430. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/gallery.py +0 -0
  431. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/gauge.py +0 -0
  432. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/grid.py +0 -0
  433. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/groupbox.py +0 -0
  434. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/listview.py +0 -0
  435. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/menubutton.py +0 -0
  436. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/numberfield.py +0 -0
  437. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/pagestack.py +0 -0
  438. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/passwordfield.py +0 -0
  439. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/pathfield.py +0 -0
  440. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/picture.py +0 -0
  441. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/progressbar.py +0 -0
  442. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/radio_variants.py +0 -0
  443. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/radiogroup.py +0 -0
  444. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/scrollbar.py +0 -0
  445. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/scrollview.py +0 -0
  446. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/select.py +0 -0
  447. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/selectbutton.py +0 -0
  448. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/sidebar_toggle.py +0 -0
  449. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/sizegrip.py +0 -0
  450. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/slider.py +0 -0
  451. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/spinbox.py +0 -0
  452. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/spinnerfield.py +0 -0
  453. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/splitview.py +0 -0
  454. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/stacks.py +0 -0
  455. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/statusbar.py +0 -0
  456. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/tabs.py +0 -0
  457. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/textfield.py +0 -0
  458. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/theme_toggle.py +0 -0
  459. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/timefield.py +0 -0
  460. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/toast.py +0 -0
  461. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/togglegroup.py +0 -0
  462. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/toolbar.py +0 -0
  463. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/tooltip.py +0 -0
  464. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/tree.py +0 -0
  465. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/types.py +0 -0
  466. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack/widgets/window.py +0 -0
  467. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/dependency_links.txt +0 -0
  468. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/entry_points.txt +0 -0
  469. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/src/bootstack.egg-info/top_level.txt +0 -0
  470. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_images.py +0 -0
  471. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_images_gui.py +0 -0
  472. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_intl_format.py +0 -0
  473. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_navmodel.py +0 -0
  474. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_store.py +0 -0
  475. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/tests/test_theme_from_existing.py +0 -0
  476. {bootstack-0.1.0a12 → bootstack-0.1.0a13}/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.0a12
3
+ Version: 0.1.0a13
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
@@ -35,6 +35,11 @@ Requires-Dist: pyarrow>=14; extra == "parquet"
35
35
  Provides-Extra: hdf5
36
36
  Requires-Dist: pandas>=2; extra == "hdf5"
37
37
  Requires-Dist: tables>=3.8; extra == "hdf5"
38
+ Provides-Extra: viz
39
+ Requires-Dist: matplotlib>=3.8; extra == "viz"
40
+ Provides-Extra: viz-seaborn
41
+ Requires-Dist: matplotlib>=3.8; extra == "viz-seaborn"
42
+ Requires-Dist: seaborn>=0.13; extra == "viz-seaborn"
38
43
  Provides-Extra: docs
39
44
  Requires-Dist: sphinx>=7.2; extra == "docs"
40
45
  Requires-Dist: pydata-sphinx-theme; extra == "docs"
@@ -87,6 +92,7 @@ Most Python desktop frameworks make you fight the framework. bootstack gets out
87
92
  - **10 paired light/dark themes** — popular dev color schemes plus Bootstrap, with a runtime switcher and a custom-theme API
88
93
  - **Forms and validation** — field-level validators, inline error messages, and a `FormDialog` for quick modal forms
89
94
  - **DataSource abstraction** — one interface over SQLite, in-memory, and file backends with filtering, sorting, pagination, and CRUD
95
+ - **Data visualization** — embed `matplotlib` (and `seaborn`) figures with `Chart`; they recolor with the theme and live-update from a `Signal` or `DataSource` (optional `viz` extra)
90
96
  - **A real CLI** — scaffold, run, add pages/views/dialogs/themes, and package for distribution
91
97
  - **PyInstaller packaging built in** — `bootstack build` produces a standalone executable; no separate toolchain required
92
98
 
@@ -226,6 +232,7 @@ app.run()
226
232
  - **Reactive signals** — observable state with subscribe/set, integrates with widgets via `signal=` / `textsignal=`
227
233
  - **Forms & validation** — `Form` with built-in field-level validators and inline error messages
228
234
  - **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV/TSV/Excel export
235
+ - **Data visualization** — `Chart` embeds `matplotlib`/`seaborn` figures that theme themselves and live-update from a `Signal` or `DataSource`; managed render, blitting animation, and a themed navigation toolbar (optional `viz` / `viz-seaborn` extras)
229
236
  - **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
230
237
  - **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring and caching
231
238
  - **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
@@ -42,6 +42,7 @@ Most Python desktop frameworks make you fight the framework. bootstack gets out
42
42
  - **10 paired light/dark themes** — popular dev color schemes plus Bootstrap, with a runtime switcher and a custom-theme API
43
43
  - **Forms and validation** — field-level validators, inline error messages, and a `FormDialog` for quick modal forms
44
44
  - **DataSource abstraction** — one interface over SQLite, in-memory, and file backends with filtering, sorting, pagination, and CRUD
45
+ - **Data visualization** — embed `matplotlib` (and `seaborn`) figures with `Chart`; they recolor with the theme and live-update from a `Signal` or `DataSource` (optional `viz` extra)
45
46
  - **A real CLI** — scaffold, run, add pages/views/dialogs/themes, and package for distribution
46
47
  - **PyInstaller packaging built in** — `bootstack build` produces a standalone executable; no separate toolchain required
47
48
 
@@ -181,6 +182,7 @@ app.run()
181
182
  - **Reactive signals** — observable state with subscribe/set, integrates with widgets via `signal=` / `textsignal=`
182
183
  - **Forms & validation** — `Form` with built-in field-level validators and inline error messages
183
184
  - **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV/TSV/Excel export
185
+ - **Data visualization** — `Chart` embeds `matplotlib`/`seaborn` figures that theme themselves and live-update from a `Signal` or `DataSource`; managed render, blitting animation, and a themed navigation toolbar (optional `viz` / `viz-seaborn` extras)
184
186
  - **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
185
187
  - **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring and caching
186
188
  - **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "bootstack"
7
- version = "0.1.0a12"
7
+ version = "0.1.0a13"
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"
@@ -73,6 +73,15 @@ hdf5 = [
73
73
  "pandas>=2",
74
74
  "tables>=3.8",
75
75
  ]
76
+ # Visualization — embed matplotlib figures in a Chart widget.
77
+ viz = [
78
+ "matplotlib>=3.8",
79
+ ]
80
+ # Visualization with seaborn convenience layer on top of matplotlib.
81
+ viz-seaborn = [
82
+ "matplotlib>=3.8",
83
+ "seaborn>=0.13",
84
+ ]
76
85
  docs = [
77
86
  "sphinx>=7.2",
78
87
  "pydata-sphinx-theme",
@@ -100,7 +109,7 @@ where = ["src"]
100
109
  ]
101
110
 
102
111
  [tool.bumpversion]
103
- current_version = "0.1.0a12"
112
+ current_version = "0.1.0a13"
104
113
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
105
114
  serialize = [
106
115
  "{major}.{minor}.{patch}{pre}{pre_n}",
@@ -129,9 +138,10 @@ search = "version = \"{current_version}\""
129
138
  replace = "version = \"{new_version}\""
130
139
 
131
140
  [tool.pytest.ini_options]
132
- testpaths = ["tests/cli", "tests/widgets/public"]
141
+ testpaths = ["tests/cli", "tests/widgets/public", "tests/data"]
133
142
  markers = [
134
143
  "gui: requires a Tk display (deselect with -m 'not gui')",
144
+ "isolated: constructs its own Tk root (App/AppShell/Window kwargs); must run in a dedicated process. Run the suite via `python tests/run_gui.py`, which executes the shared-root suite once and each isolated module in its own process.",
135
145
  ]
136
146
 
137
147
  [tool.ruff.lint]
@@ -81,6 +81,7 @@ from bootstack.widgets.pagestack import PageStack, StackPage
81
81
  from bootstack.widgets.pathfield import PathField
82
82
  from bootstack.widgets.avatar import Avatar
83
83
  from bootstack.widgets.carousel import Carousel
84
+ from bootstack.widgets.chart import Chart
84
85
  from bootstack.widgets.gallery import Gallery
85
86
  from bootstack.widgets.passwordfield import PasswordField
86
87
  from bootstack.widgets.picture import Picture
@@ -143,7 +144,7 @@ __all__ = [
143
144
  # Data display
144
145
  "Label", "Badge", "ProgressBar", "Gauge", "ListView", "DataTable", "Tree", "TreeNode",
145
146
  # Media
146
- "Picture", "Gallery", "Carousel", "Avatar",
147
+ "Picture", "Gallery", "Carousel", "Avatar", "Chart",
147
148
  # Navigation
148
149
  "PageStack", "StackPage", "Tabs", "TabPage",
149
150
  # Overlays
@@ -675,6 +675,32 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
675
675
  except tkinter.TclError:
676
676
  pass
677
677
  clear_current_app(self)
678
+ # Drop every process-wide cache that holds a Tk object bound to THIS
679
+ # root's interpreter — the Style singleton, the named/derived font
680
+ # caches, the nine-patch PhotoImage cache, and the visual-focus root
681
+ # ref. This must happen *before* super().destroy(): those cached
682
+ # PhotoImage/TkFont objects run `image delete`/`font delete` in their
683
+ # finalizers, and if they outlive the interpreter that owns them the
684
+ # call lands on a foreign/dead interpreter — a native crash in ttk
685
+ # element_create on the *next* root (the C layer, so Python can't catch
686
+ # it). Releasing + gc.collect() while this root is still alive lets the
687
+ # finalizers run cleanly. Only when no other App is live (single-App is
688
+ # the norm; this also lets the GUI test suite run module-after-module in
689
+ # one process, and fixes reopen-an-app-after-close in production).
690
+ if not has_current_app():
691
+ try:
692
+ import gc
693
+ from bootstack.style.style import reset_style
694
+ from bootstack.style.typography import Typography
695
+ from bootstack._core.images import _ImageService
696
+ from bootstack._runtime.visual_focus import reset_visual_focus_root
697
+ reset_style()
698
+ Typography.reset()
699
+ _ImageService.clear_cache()
700
+ reset_visual_focus_root()
701
+ gc.collect()
702
+ except Exception:
703
+ pass
678
704
  super().destroy()
679
705
 
680
706
  # ----- Window state persistence ------------------------------------------
@@ -205,6 +205,17 @@ def uninstall_visual_focus() -> None:
205
205
  _installed = False
206
206
 
207
207
 
208
+ def reset_visual_focus_root() -> None:
209
+ """Forget the cached root reference without un-patching `bind_all`.
210
+
211
+ `_root_ref` is captured lazily from the first root that binds. After that
212
+ root is destroyed the reference is stale; clearing it lets the next root
213
+ re-bind. The `bind_all` patch (installed once at import) stays in place.
214
+ """
215
+ global _root_ref
216
+ _root_ref = None
217
+
218
+
208
219
  def is_keyboard_focus(widget: tk.Misc) -> bool:
209
220
  """Check if a widget currently has keyboard-initiated focus.
210
221
 
@@ -224,5 +235,6 @@ def is_keyboard_focus(widget: tk.Misc) -> bool:
224
235
  __all__ = [
225
236
  'install_visual_focus',
226
237
  'uninstall_visual_focus',
238
+ 'reset_visual_focus_root',
227
239
  'is_keyboard_focus',
228
240
  ]
@@ -453,6 +453,21 @@ def get_style(master: Master = None) -> Style:
453
453
  return Style(master)
454
454
 
455
455
 
456
+ def reset_style() -> None:
457
+ """Drop the process-wide Style singleton.
458
+
459
+ The Style singleton is a `ttk.Style` bound to the Tk root that created it.
460
+ Once that root is destroyed its interpreter is gone, so the singleton can no
461
+ longer be used — a fresh App must rebuild Style against the new root. Call
462
+ this after destroying the root (App.destroy does) so the next
463
+ `get_style()`/`Style()` constructs cleanly instead of reusing a dead
464
+ instance (whose `theme_use` would fail, e.g. "named font body does not
465
+ already exist").
466
+ """
467
+ global _style_instance
468
+ _style_instance = None
469
+
470
+
456
471
  def get_style_builder() -> StyleBuilderTtk:
457
472
  """Return the style builder for the currently active theme.
458
473
 
@@ -168,6 +168,21 @@ class Typography:
168
168
  cls._ensure_named_token_fonts()
169
169
  cls._override_tk_fonts()
170
170
 
171
+ @classmethod
172
+ def reset(cls) -> None:
173
+ """Forget the Tk-bound named-font cache and root reference.
174
+
175
+ The cached named fonts (`body`, `heading-lg`, ...) and the derived
176
+ fonts (`body[bold]`, ...) are `TkFont`s bound to the root that created
177
+ them; once that root is destroyed they are stale, and their finalizers
178
+ would later run against a foreign interpreter. Clearing them lets the
179
+ next `initialize()` rebuild against a fresh root. Called from
180
+ App.destroy so a subsequent App starts clean.
181
+ """
182
+ cls._root = None
183
+ cls._named_fonts = {}
184
+ _DERIVED_FONTS.clear()
185
+
171
186
  @classmethod
172
187
  def use_fonts(cls, fonts: FontTokens) -> None:
173
188
  cls._fonts = fonts
@@ -39,6 +39,7 @@ _EXPORTS: dict[str, str] = {
39
39
  "Label": "label", "Badge": "label", "Picture": "picture", "Gallery": "gallery",
40
40
  "Carousel": "carousel", "Avatar": "avatar", "ProgressBar": "progressbar",
41
41
  "Gauge": "gauge", "ListView": "listview", "DataTable": "datatable", "Tree": "tree",
42
+ "Chart": "chart",
42
43
  # Navigation
43
44
  "PageStack": "pagestack", "StackPage": "pagestack",
44
45
  "Tabs": "tabs", "TabPage": "tabs",