bootstack 0.1.0a10__tar.gz → 0.1.0a12__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 (509) hide show
  1. {bootstack-0.1.0a10/src/bootstack.egg-info → bootstack-0.1.0a12}/PKG-INFO +37 -20
  2. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/README.md +36 -19
  3. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/pyproject.toml +2 -2
  4. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/__init__.py +11 -10
  5. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/__init__.py +3 -13
  6. bootstack-0.1.0a12/src/bootstack/_core/exceptions.py +25 -0
  7. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/images.py +2 -2
  8. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/app.py +3 -3
  9. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/base_window.py +37 -17
  10. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/tk_patch.py +3 -3
  11. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/toplevel.py +14 -14
  12. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/utility.py +69 -3
  13. bootstack-0.1.0a12/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
  14. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +3 -0
  15. bootstack-0.1.0a12/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
  16. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +3 -0
  17. bootstack-0.1.0a12/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
  18. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +3 -0
  19. bootstack-0.1.0a12/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
  20. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +3 -0
  21. bootstack-0.1.0a12/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
  22. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +3 -0
  23. bootstack-0.1.0a12/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
  24. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +3 -0
  25. bootstack-0.1.0a12/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
  26. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +3 -0
  27. bootstack-0.1.0a12/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
  28. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +3 -0
  29. bootstack-0.1.0a12/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
  30. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +3 -0
  31. bootstack-0.1.0a12/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
  32. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +3 -0
  33. bootstack-0.1.0a12/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
  34. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +3 -0
  35. bootstack-0.1.0a12/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
  36. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +3 -0
  37. bootstack-0.1.0a12/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
  38. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +3 -0
  39. bootstack-0.1.0a12/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
  40. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +3 -0
  41. bootstack-0.1.0a12/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
  42. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +3 -0
  43. bootstack-0.1.0a12/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
  44. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +3 -0
  45. bootstack-0.1.0a12/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
  46. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +3 -0
  47. bootstack-0.1.0a12/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
  48. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +3 -0
  49. bootstack-0.1.0a12/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
  50. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +3 -0
  51. bootstack-0.1.0a12/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
  52. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +3 -0
  53. bootstack-0.1.0a12/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
  54. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +3 -0
  55. bootstack-0.1.0a12/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
  56. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +3 -0
  57. bootstack-0.1.0a12/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
  58. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +3 -0
  59. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/add.py +5 -4
  60. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/appicon.py +24 -23
  61. bootstack-0.1.0a12/src/bootstack/cli/demo.py +564 -0
  62. bootstack-0.1.0a12/src/bootstack/cli/icons.py +98 -0
  63. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/templates/__init__.py +68 -65
  64. bootstack-0.1.0a12/src/bootstack/clipboard.py +48 -0
  65. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/constants.py +11 -12
  66. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/file_source.py +3 -3
  67. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/memory_source.py +34 -14
  68. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/writers.py +1 -1
  69. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/__init__.py +13 -12
  70. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/__init__.py +10 -14
  71. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/colorchooser.py +82 -33
  72. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/datedialog.py +43 -19
  73. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/dialog.py +63 -9
  74. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/filterdialog.py +16 -11
  75. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/fontdialog.py +3 -16
  76. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/formdialog.py +25 -6
  77. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/message.py +6 -5
  78. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/dialogs/_impl/query.py +1 -0
  79. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/errors.py +27 -0
  80. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/i18n/__init__.py +3 -3
  81. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/i18n/catalog.py +3 -3
  82. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/i18n/specs.py +2 -2
  83. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/images.py +18 -2
  84. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/scheduling/__init__.py +2 -2
  85. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/shortcuts.py +2 -2
  86. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/signals/signal.py +42 -20
  87. bootstack-0.1.0a12/src/bootstack/streams/__init__.py +12 -0
  88. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/__init__.py +1 -1
  89. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/badge.py +6 -6
  90. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/button.py +10 -10
  91. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/buttongroup.py +8 -8
  92. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/calendar.py +9 -9
  93. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/checkbutton.py +3 -3
  94. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/combobox.py +3 -3
  95. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/contextmenu.py +11 -11
  96. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/entry.py +3 -3
  97. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/expander.py +9 -9
  98. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/field.py +13 -13
  99. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/frame.py +14 -6
  100. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/label.py +3 -3
  101. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/labelframe.py +4 -4
  102. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/listview.py +27 -27
  103. bootstack-0.1.0a12/src/bootstack/style/builders/menubar.py +91 -0
  104. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/menubutton.py +11 -11
  105. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/panedwindow.py +3 -3
  106. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/progressbar.py +6 -6
  107. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/radiobutton.py +3 -3
  108. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/scale.py +3 -3
  109. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/scrollbar.py +9 -9
  110. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/separator.py +3 -3
  111. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/sidenav.py +21 -21
  112. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/sizegrip.py +3 -3
  113. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/spinbox.py +3 -3
  114. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/switch.py +3 -3
  115. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/tabitem.py +11 -11
  116. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/togglegroup.py +8 -8
  117. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/toolbutton.py +8 -8
  118. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/tooltip.py +3 -3
  119. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/treeview.py +4 -4
  120. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders/utils.py +21 -21
  121. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders_tk/__init__.py +1 -1
  122. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/builders_tk/defaults.py +33 -33
  123. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/style.py +16 -16
  124. bootstack-0.1.0a10/src/bootstack/style/bootstyle_builder_base.py → bootstack-0.1.0a12/src/bootstack/style/style_builder_base.py +3 -3
  125. bootstack-0.1.0a10/src/bootstack/style/bootstyle_builder_mixed.py → bootstack-0.1.0a12/src/bootstack/style/style_builder_mixed.py +5 -5
  126. bootstack-0.1.0a10/src/bootstack/style/bootstyle_builder_tk.py → bootstack-0.1.0a12/src/bootstack/style/style_builder_tk.py +7 -7
  127. bootstack-0.1.0a10/src/bootstack/style/bootstyle_builder_ttk.py → bootstack-0.1.0a12/src/bootstack/style/style_builder_ttk.py +26 -26
  128. bootstack-0.1.0a10/src/bootstack/style/bootstyle.py → bootstack-0.1.0a12/src/bootstack/style/style_resolver.py +15 -97
  129. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/theme.py +62 -1
  130. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/theme_provider.py +1 -1
  131. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/typography.py +3 -3
  132. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/types.py +4 -2
  133. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/validation/types.py +4 -4
  134. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/validation/validation_rules.py +70 -4
  135. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/__init__.py +6 -5
  136. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/base.py +58 -28
  137. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/container.py +133 -1
  138. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/field_mixin.py +81 -9
  139. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/navmodel.py +13 -9
  140. bootstack-0.1.0a12/src/bootstack/widgets/_core/window_menu.py +230 -0
  141. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/_internal/wrapper_base.py +14 -16
  142. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/_parts/numberentry_part.py +31 -3
  143. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/_parts/spinnerentry_part.py +51 -2
  144. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/_parts/textentry_part.py +26 -2
  145. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/avatar.py +1 -1
  146. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/buttongroup.py +4 -4
  147. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/calendar.py +30 -15
  148. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/carousel.py +15 -1
  149. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/compositeframe.py +2 -2
  150. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/contextmenu.py +50 -13
  151. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/dropdownbutton.py +3 -3
  152. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/field.py +24 -14
  153. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/form.py +63 -27
  154. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/gallery.py +63 -4
  155. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/list/listview.py +7 -14
  156. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/menu/model.py +4 -4
  157. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/menu/render_themed.py +55 -47
  158. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/meter.py +20 -9
  159. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/pagestack.py +23 -9
  160. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/passwordentry.py +12 -1
  161. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/picture.py +3 -3
  162. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/radiogroup.py +4 -3
  163. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/scrollview.py +3 -4
  164. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/shell/content_host.py +8 -2
  165. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/shell/layout.py +30 -34
  166. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/shell/nav_panel.py +3 -3
  167. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/shell/providers.py +3 -3
  168. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/shell/shell.py +17 -4
  169. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/shell/workspace.py +16 -3
  170. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/slider/_shared.py +34 -8
  171. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/slider/rangeslider.py +186 -57
  172. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/slider/slider.py +141 -49
  173. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/spinnerentry.py +8 -0
  174. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tableview/tableview.py +72 -32
  175. bootstack-0.1.0a12/src/bootstack/widgets/_impl/composites/tabs/tabs.py +974 -0
  176. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tabs/tabview.py +42 -22
  177. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/core.py +35 -4
  178. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +17 -2
  179. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +2 -2
  180. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/search_overlay.py +22 -1
  181. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/style_registry.py +25 -3
  182. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/textarea.py +33 -1
  183. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/timeentry.py +15 -11
  184. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/togglegroup.py +6 -5
  185. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/toolbar.py +224 -25
  186. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tooltip.py +83 -10
  187. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/mixins/configure_mixin.py +12 -12
  188. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/mixins/font_mixin.py +5 -5
  189. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/mixins/icon_mixin.py +5 -5
  190. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/mixins/validation_mixin.py +17 -3
  191. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/_menubutton.py +2 -2
  192. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/combobox.py +2 -2
  193. bootstack-0.1.0a12/src/bootstack/widgets/_impl/primitives/flexframe.py +448 -0
  194. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/frame.py +53 -10
  195. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/gridframe.py +25 -6
  196. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/optionmenu.py +6 -6
  197. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/packframe.py +5 -2
  198. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/app.py +51 -45
  199. bootstack-0.1.0a12/src/bootstack/widgets/appshell.py +1046 -0
  200. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/button.py +51 -13
  201. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/buttongroup.py +1 -1
  202. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/card.py +56 -43
  203. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/carousel.py +11 -0
  204. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/codeeditor.py +20 -5
  205. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/contextmenu.py +11 -8
  206. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/datefield.py +11 -17
  207. bootstack-0.1.0a10/src/bootstack/widgets/separator.py → bootstack-0.1.0a12/src/bootstack/widgets/divider.py +6 -5
  208. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/expander.py +119 -114
  209. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/form.py +31 -0
  210. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/gallery.py +6 -0
  211. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/grid.py +36 -20
  212. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/groupbox.py +56 -43
  213. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/label.py +5 -3
  214. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/listview.py +2 -2
  215. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/menubutton.py +43 -42
  216. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/numberfield.py +11 -9
  217. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/pagestack.py +71 -47
  218. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/passwordfield.py +2 -3
  219. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/pathfield.py +58 -3
  220. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/scrollview.py +14 -12
  221. bootstack-0.1.0a12/src/bootstack/widgets/sidebar_toggle.py +130 -0
  222. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/slider.py +33 -1
  223. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/spinnerfield.py +26 -3
  224. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/splitview.py +137 -105
  225. bootstack-0.1.0a12/src/bootstack/widgets/stacks.py +249 -0
  226. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/statusbar.py +46 -14
  227. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/tabs.py +92 -52
  228. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/textarea.py +5 -3
  229. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/textfield.py +10 -5
  230. bootstack-0.1.0a12/src/bootstack/widgets/theme_toggle.py +92 -0
  231. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/timefield.py +13 -19
  232. bootstack-0.1.0a12/src/bootstack/widgets/toolbar.py +324 -0
  233. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/tooltip.py +13 -0
  234. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/tree.py +2 -2
  235. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/types.py +21 -8
  236. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/window.py +56 -40
  237. {bootstack-0.1.0a10 → bootstack-0.1.0a12/src/bootstack.egg-info}/PKG-INFO +37 -20
  238. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack.egg-info/SOURCES.txt +12 -9
  239. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/tests/test_navmodel.py +6 -5
  240. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/tests/test_public_surface.py +8 -6
  241. bootstack-0.1.0a12/tests/test_theme_from_existing.py +64 -0
  242. bootstack-0.1.0a10/src/bootstack/_core/exceptions.py +0 -95
  243. bootstack-0.1.0a10/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
  244. bootstack-0.1.0a10/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
  245. bootstack-0.1.0a10/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
  246. bootstack-0.1.0a10/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
  247. bootstack-0.1.0a10/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
  248. bootstack-0.1.0a10/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
  249. bootstack-0.1.0a10/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
  250. bootstack-0.1.0a10/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
  251. bootstack-0.1.0a10/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
  252. bootstack-0.1.0a10/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
  253. bootstack-0.1.0a10/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
  254. bootstack-0.1.0a10/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
  255. bootstack-0.1.0a10/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
  256. bootstack-0.1.0a10/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
  257. bootstack-0.1.0a10/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
  258. bootstack-0.1.0a10/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
  259. bootstack-0.1.0a10/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
  260. bootstack-0.1.0a10/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
  261. bootstack-0.1.0a10/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
  262. bootstack-0.1.0a10/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
  263. bootstack-0.1.0a10/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
  264. bootstack-0.1.0a10/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
  265. bootstack-0.1.0a10/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
  266. bootstack-0.1.0a10/src/bootstack/cli/demo.py +0 -923
  267. bootstack-0.1.0a10/src/bootstack/cli/icons.py +0 -327
  268. bootstack-0.1.0a10/src/bootstack/dialogs/_impl/colordropper.py +0 -257
  269. bootstack-0.1.0a10/src/bootstack/streams/__init__.py +0 -12
  270. bootstack-0.1.0a10/src/bootstack/style/builders/menubar.py +0 -74
  271. bootstack-0.1.0a10/src/bootstack/widgets/_core/window_menu.py +0 -299
  272. bootstack-0.1.0a10/src/bootstack/widgets/_impl/composites/floodgauge.py +0 -427
  273. bootstack-0.1.0a10/src/bootstack/widgets/_impl/composites/tabs/tabs.py +0 -565
  274. bootstack-0.1.0a10/src/bootstack/widgets/appshell.py +0 -815
  275. bootstack-0.1.0a10/src/bootstack/widgets/commandbar.py +0 -177
  276. bootstack-0.1.0a10/src/bootstack/widgets/stacks.py +0 -214
  277. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/LICENSE +0 -0
  278. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/MANIFEST.in +0 -0
  279. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/NOTICE +0 -0
  280. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/setup.cfg +0 -0
  281. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/__main__.py +0 -0
  282. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/__init__.py +0 -0
  283. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/after.py +0 -0
  284. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/bind.py +0 -0
  285. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/bindtags.py +0 -0
  286. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/busy.py +0 -0
  287. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/clipboard.py +0 -0
  288. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/focus.py +0 -0
  289. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/grab.py +0 -0
  290. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/grid.py +0 -0
  291. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/localization.py +0 -0
  292. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/pack.py +0 -0
  293. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/place.py +0 -0
  294. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/selection.py +0 -0
  295. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/signals.py +0 -0
  296. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/capabilities/winfo.py +0 -0
  297. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/colorutils.py +0 -0
  298. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/mixins/__init__.py +0 -0
  299. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/mixins/ttk_state.py +0 -0
  300. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/mixins/widget.py +0 -0
  301. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/paths.py +0 -0
  302. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/publisher.py +0 -0
  303. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_core/variables.py +0 -0
  304. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/__init__.py +0 -0
  305. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/events.py +0 -0
  306. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/shortcuts.py +0 -0
  307. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/visual_focus.py +0 -0
  308. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/_runtime/window_utilities.py +0 -0
  309. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/__init__.py +0 -0
  310. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/bootstack.ico +0 -0
  311. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/bootstack.png +0 -0
  312. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/__init__.py +0 -0
  313. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/badge-pill.png +0 -0
  314. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/badge-square.png +0 -0
  315. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/button-compact.png +0 -0
  316. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/button-default.png +0 -0
  317. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
  318. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
  319. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
  320. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
  321. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
  322. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
  323. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
  324. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
  325. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
  326. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
  327. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
  328. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
  329. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/card.png +0 -0
  330. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
  331. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
  332. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
  333. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/field.png +0 -0
  334. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/input-addon-compact.png +0 -0
  335. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/input-addon-default.png +0 -0
  336. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/input-compact.png +0 -0
  337. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/input-default.png +0 -0
  338. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/list-item-separated.png +0 -0
  339. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/list-item.png +0 -0
  340. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/listrow-compact.png +0 -0
  341. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/listrow-default.png +0 -0
  342. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/manifest.toml +0 -0
  343. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/menu-item.png +0 -0
  344. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/navitem-compact.png +0 -0
  345. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/navitem-default.png +0 -0
  346. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/progressbar-h-compact.png +0 -0
  347. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/progressbar-h-default.png +0 -0
  348. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/progressbar-v-compact.png +0 -0
  349. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/progressbar-v-default.png +0 -0
  350. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/radiobutton.png +0 -0
  351. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
  352. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
  353. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/slider-handle.png +0 -0
  354. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/slider-track-h.png +0 -0
  355. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/slider-track-v.png +0 -0
  356. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/switch-off.png +0 -0
  357. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/switch-on.png +0 -0
  358. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/tab-h.png +0 -0
  359. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/elements/tab-v.png +0 -0
  360. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/icons/bootstrap.ttf +0 -0
  361. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/icons/glyphmap.json +0 -0
  362. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/assets/icons/icon_metrics.json +0 -0
  363. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/__init__.py +0 -0
  364. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/__main__.py +0 -0
  365. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/build.py +0 -0
  366. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/config.py +0 -0
  367. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/doctor.py +0 -0
  368. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/promote.py +0 -0
  369. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/pyinstaller.py +0 -0
  370. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/run.py +0 -0
  371. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/cli/start.py +0 -0
  372. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/README.md +0 -0
  373. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/__init__.py +0 -0
  374. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/_observable.py +0 -0
  375. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/base.py +0 -0
  376. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/query.py +0 -0
  377. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/readers.py +0 -0
  378. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/sqlite_source.py +0 -0
  379. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/data/types.py +0 -0
  380. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/events/__init__.py +0 -0
  381. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/events/_event.py +0 -0
  382. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/events/_payloads.py +0 -0
  383. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/events/_subscription.py +0 -0
  384. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/i18n/README.md +0 -0
  385. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/i18n/intl_format.py +0 -0
  386. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/i18n/msgcat.py +0 -0
  387. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/py.typed +0 -0
  388. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/scheduling/_schedule.py +0 -0
  389. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/signals/README.md +0 -0
  390. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/signals/__init__.py +0 -0
  391. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/signals/integration.py +0 -0
  392. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/signals/types.py +0 -0
  393. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/store.py +0 -0
  394. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/streams/_stream.py +0 -0
  395. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/__init__.py +0 -0
  396. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/element.py +0 -0
  397. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/fonts.py +0 -0
  398. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/themes/__init__.py +0 -0
  399. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/tk_patch.py +0 -0
  400. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/token_maps.py +0 -0
  401. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/types.py +0 -0
  402. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/style/utility.py +0 -0
  403. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/validation/__init__.py +0 -0
  404. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/validation/validation_result.py +0 -0
  405. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/__init__.py +0 -0
  406. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/app_config.py +0 -0
  407. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/context.py +0 -0
  408. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/events.py +0 -0
  409. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/icon_image_props.py +0 -0
  410. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/image_binding.py +0 -0
  411. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/options.py +0 -0
  412. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/selection_group.py +0 -0
  413. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_core/window_controls.py +0 -0
  414. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/__init__.py +0 -0
  415. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/_internal/__init__.py +0 -0
  416. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/_parts/__init__.py +0 -0
  417. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/__init__.py +0 -0
  418. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/_dateutils.py +0 -0
  419. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/_image_fit.py +0 -0
  420. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/accordion.py +0 -0
  421. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/dateentry.py +0 -0
  422. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/expander.py +0 -0
  423. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/list/__init__.py +0 -0
  424. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/list/listitem.py +0 -0
  425. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/menu/__init__.py +0 -0
  426. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/menu/render_native.py +0 -0
  427. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/numericentry.py +0 -0
  428. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/pathentry.py +0 -0
  429. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/scrolledtext.py +0 -0
  430. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/scrolledtext.pyi +0 -0
  431. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/selectbox.py +0 -0
  432. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/shell/__init__.py +0 -0
  433. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/shell/rail.py +0 -0
  434. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/sidenav/__init__.py +0 -0
  435. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/sidenav/header.py +0 -0
  436. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/sidenav/separator.py +0 -0
  437. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/slider/__init__.py +0 -0
  438. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tableview/__init__.py +0 -0
  439. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tableview/types.py +0 -0
  440. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tabs/__init__.py +0 -0
  441. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tabs/tabitem.py +0 -0
  442. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/__init__.py +0 -0
  443. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/change.py +0 -0
  444. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/codeeditor.py +0 -0
  445. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/decoration.py +0 -0
  446. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/diff.py +0 -0
  447. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +0 -0
  448. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +0 -0
  449. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +0 -0
  450. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +0 -0
  451. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/filter.py +0 -0
  452. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/sidebar.py +0 -0
  453. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textarea/undo.py +0 -0
  454. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/textentry.py +0 -0
  455. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/toast.py +0 -0
  456. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/toast_stack.py +0 -0
  457. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tree/__init__.py +0 -0
  458. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tree/source_binding.py +0 -0
  459. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tree/treeitem.py +0 -0
  460. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tree/treenode.py +0 -0
  461. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/composites/tree/treeview.py +0 -0
  462. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/mixins/__init__.py +0 -0
  463. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/mixins/entry_mixin.py +0 -0
  464. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/mixins/localization_mixin.py +0 -0
  465. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/mixins/signal_mixin.py +0 -0
  466. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/__init__.py +0 -0
  467. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/badge.py +0 -0
  468. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/button.py +0 -0
  469. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/card.py +0 -0
  470. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/checkbutton.py +0 -0
  471. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/checktoggle.py +0 -0
  472. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/entry.py +0 -0
  473. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/label.py +0 -0
  474. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/labelframe.py +0 -0
  475. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/panedwindow.py +0 -0
  476. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/progressbar.py +0 -0
  477. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/radiobutton.py +0 -0
  478. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/radiotoggle.py +0 -0
  479. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/scrollbar.py +0 -0
  480. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/separator.py +0 -0
  481. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/sizegrip.py +0 -0
  482. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/spinbox.py +0 -0
  483. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/switch.py +0 -0
  484. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/_impl/primitives/treeview.py +0 -0
  485. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/avatar.py +0 -0
  486. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/boolean_controls.py +0 -0
  487. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/calendar.py +0 -0
  488. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/datatable.py +0 -0
  489. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/gauge.py +0 -0
  490. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/picture.py +0 -0
  491. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/progressbar.py +0 -0
  492. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/radio_variants.py +0 -0
  493. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/radiogroup.py +0 -0
  494. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/scrollbar.py +0 -0
  495. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/select.py +0 -0
  496. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/selectbutton.py +0 -0
  497. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/sizegrip.py +0 -0
  498. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/spinbox.py +0 -0
  499. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/toast.py +0 -0
  500. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack/widgets/togglegroup.py +0 -0
  501. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack.egg-info/dependency_links.txt +0 -0
  502. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack.egg-info/entry_points.txt +0 -0
  503. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack.egg-info/requires.txt +0 -0
  504. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/src/bootstack.egg-info/top_level.txt +0 -0
  505. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/tests/test_images.py +0 -0
  506. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/tests/test_images_gui.py +0 -0
  507. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/tests/test_intl_format.py +0 -0
  508. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/tests/test_store.py +0 -0
  509. {bootstack-0.1.0a10 → bootstack-0.1.0a12}/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.0a10
3
+ Version: 0.1.0a12
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
@@ -63,11 +63,13 @@ bootstack gives engineers, data scientists, and hobbyists everything to build a
63
63
  polished desktop interface and package it into a standalone executable —
64
64
  declarative, reactive, and batteries-included, all in pure Python.
65
65
 
66
+ <p align="center">
66
67
  <picture>
67
68
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-dark.png">
68
69
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-light.png">
69
70
  <img alt="bootstack hero demo" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-light.png">
70
71
  </picture>
72
+ </p>
71
73
 
72
74
  ## Why bootstack?
73
75
 
@@ -75,14 +77,14 @@ Most Python desktop frameworks make you fight the framework. bootstack gets out
75
77
 
76
78
  - **30% less code** — the declarative, context-manager layout eliminates geometry calls, explicit parenting, and most of the wiring boilerplate
77
79
  - **Reads like Python** — nested `with` blocks mirror your UI structure; the code hierarchy *is* the layout
78
- - **Modern layout system** — `HStack`, `VStack`, and `Grid` containers handle spacing, alignment, and fill automatically; CSS conventions (`gap`, `padding`, `margin`, `fill`, `anchor`) without writing CSS
80
+ - **Modern layout system** — `Row`, `Column`, and `Grid` containers handle spacing, alignment, and growth automatically; a screen-axis vocabulary (`gap`, `padding`, `margin`, `horizontal`, `vertical`, `grow`) without writing CSS
79
81
  - **60+ widgets out of the box** — primitives through full composites: tables, trees, calendars, date pickers, gauges, sliders, and more — including a full `CodeEditor` with syntax highlighting, line numbers, bracket matching, smart indent, and search; no external editor dependency required
80
82
  - **Reactive signals** — observable state that flows between widgets; bind once, update everywhere
81
83
  - **Event and stream pipelines** — compose, filter, debounce, and throttle UI events with a chainable stream API
82
- - **Built-in icons** — the full Bootstrap Icons catalog, theme-aware and DPI-scaled, bundled with the framework
84
+ - **Built-in icons** — the full Bootstrap Icons catalog, theme-aware and recolorable, bundled with the framework
83
85
  - **Built-in localization** — 23 language catalogs, locale-aware number/date/time formatting, runtime language switching
84
86
  - **Semantic styling** — `accent="primary"`, `variant="outline"` — no hard-coded colors; looks right across every theme automatically
85
- - **8 paired light/dark themes** — with a runtime switcher and a custom-theme API
87
+ - **10 paired light/dark themes** — popular dev color schemes plus Bootstrap, with a runtime switcher and a custom-theme API
86
88
  - **Forms and validation** — field-level validators, inline error messages, and a `FormDialog` for quick modal forms
87
89
  - **DataSource abstraction** — one interface over SQLite, in-memory, and file backends with filtering, sorting, pagination, and CRUD
88
90
  - **A real CLI** — scaffold, run, add pages/views/dialogs/themes, and package for distribution
@@ -108,11 +110,13 @@ The widget gallery is a single-window tour of everything bootstack ships — eve
108
110
  bootstack gallery
109
111
  ```
110
112
 
113
+ <p align="center">
111
114
  <picture>
112
115
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-dark.png">
113
116
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-light.png">
114
117
  <img alt="bootstack widget gallery" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-light.png">
115
118
  </picture>
119
+ </p>
116
120
 
117
121
  ## Quick Start
118
122
 
@@ -128,24 +132,26 @@ with bs.App(title="Hello", padding=16, gap=16) as app:
128
132
  app.run()
129
133
  ```
130
134
 
135
+ <p align="center">
131
136
  <picture>
132
137
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-dark.png">
133
138
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
134
139
  <img alt="bootstack quick start example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
135
140
  </picture>
141
+ </p>
136
142
 
137
- For navigation-based apps, use `AppShell` — it gives you a command bar, sidebar, and page stack in one call:
143
+ For navigation-based apps, use `AppShell` — it gives you stacked toolbars, a sidebar, and a page stack in one call:
138
144
 
139
145
  ```python
140
146
  import bootstack as bs
141
147
 
142
148
  shell = bs.AppShell(title="My App", size=(1000, 650))
143
149
 
144
- with shell.add_page("home", text="Home", icon="house"):
145
- bs.Label("Welcome!")
146
-
147
- with shell.add_page("docs", text="Documents", icon="file-earmark-text"):
148
- bs.Label("Your documents.")
150
+ with shell.page_nav() as nav:
151
+ with nav.add_page("home", text="Home", icon="house"):
152
+ bs.Label("Welcome!")
153
+ with nav.add_page("docs", text="Documents", icon="file-earmark-text"):
154
+ bs.Label("Your documents.")
149
155
 
150
156
  shell.run()
151
157
  ```
@@ -154,11 +160,11 @@ shell.run()
154
160
 
155
161
  ### Layout containers
156
162
 
157
- `VStack`, `HStack`, and `Grid` let you describe a layout once instead of repeating geometry calls on each child:
163
+ `Column`, `Row`, and `Grid` let you describe a layout once instead of repeating geometry calls on each child:
158
164
 
159
165
  ```python
160
166
  with bs.App(title="Sign In") as app:
161
- with bs.Grid(columns=["auto", 1], gap=(12, 6), sticky_items="ew", padding=16):
167
+ with bs.Grid(columns=["auto", 1], gap=(12, 6), horizontal_items="stretch", padding=16):
162
168
  bs.Label("Name:")
163
169
  bs.TextField(placeholder="Full name")
164
170
  bs.Label("Email:")
@@ -170,11 +176,13 @@ with bs.App(title="Sign In") as app:
170
176
  app.run()
171
177
  ```
172
178
 
179
+ <p align="center">
173
180
  <picture>
174
181
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-dark.png">
175
182
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-light.png">
176
183
  <img alt="bootstack layout containers example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-light.png">
177
184
  </picture>
185
+ </p>
178
186
 
179
187
  ### Semantic styling
180
188
 
@@ -186,11 +194,13 @@ bs.Button("Cancel", accent="secondary", variant="outline")
186
194
  bs.Label("Heading", font="heading-lg")
187
195
  ```
188
196
 
197
+ <p align="center">
189
198
  <picture>
190
199
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-dark.png">
191
200
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-light.png">
192
201
  <img alt="bootstack semantic styling example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-light.png">
193
202
  </picture>
203
+ </p>
194
204
 
195
205
  ### Signals (optional)
196
206
 
@@ -207,17 +217,17 @@ app.run()
207
217
 
208
218
  ## Features
209
219
 
210
- - **Application scaffolding** — `App` for blank windows, `AppShell` for command-bar + sidebar + page-stack apps, undecorated windows with custom chrome
220
+ - **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, undecorated windows with custom chrome
211
221
  - **60+ themed widgets** — primitives plus higher-level composites (DataTable, Tree, ListView, Calendar, DateField, Form, Gauge, ToggleGroup, PageStack, Carousel, Tooltip, and more)
212
222
  - **Dialogs and messages** — `alert()` / `confirm()` / `ask_*()` prompts and `FormDialog` / `FontDialog` / `FilterDialog`, plus non-blocking `toast()`, `Notification`, and `Snackbar` surfaces
213
- - **Layout containers** — `VStack`, `HStack`, and `Grid` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Expander`
223
+ - **Layout containers** — `Column`, `Row`, `Grid`, and `Spacer` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Divider`
214
224
  - **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost), consistent across widgets
215
- - **Built-in themes** — paired light/dark variants (amber, aurora, bootstrap, classic, docs, forest, ocean, rose) with runtime theme switching and a custom-theme API
225
+ - **Built-in themes** — 10 paired light/dark variants (bootstrap, catppuccin, dracula, everforest, gruvbox, nord, one, pydata, solarized, tokyo-night) with runtime theme switching and a custom-theme API
216
226
  - **Reactive signals** — observable state with subscribe/set, integrates with widgets via `signal=` / `textsignal=`
217
227
  - **Forms & validation** — `Form` with built-in field-level validators and inline error messages
218
228
  - **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV/TSV/Excel export
219
229
  - **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
220
- - **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring, DPI scaling, and caching
230
+ - **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring and caching
221
231
  - **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
222
232
  - **CLI (`bootstack`)** — project scaffolding, run, add components, theme/i18n setup, doctor, build/package
223
233
 
@@ -225,13 +235,13 @@ app.run()
225
235
 
226
236
  | Category | Widgets |
227
237
  |----------|---------|
228
- | **Actions** | Button, ButtonGroup, MenuButton, ContextMenu, CommandBar |
238
+ | **Actions** | Button, ButtonGroup, MenuButton, ContextMenu, Toolbar, ThemeToggle |
229
239
  | **Inputs** | TextField, PasswordField, PathField, NumberField, SpinnerField, Slider, RangeSlider, TextArea, CodeEditor, DateField, TimeField |
230
240
  | **Selection** | Checkbox, Switch, ToggleButton, Radio, RadioGroup, ToggleGroup, Select, SelectButton, Calendar |
231
241
  | **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
232
242
  | **Media** | Avatar, Picture, Gallery, Carousel |
233
- | **Layout** | VStack, HStack, Grid, Card, GroupBox, SplitView, ScrollView, Accordion, Separator |
234
- | **Navigation** | AppShell, CommandBar, SideNav, StatusBar, Tabs, PageStack |
243
+ | **Layout** | Column, Row, Grid, Spacer, Card, GroupBox, SplitView, ScrollView, Accordion, Divider |
244
+ | **Navigation** | AppShell, Workbench, Window, StatusBar, Tabs, PageStack |
235
245
  | **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
236
246
  | **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
237
247
  | **Forms** | Form, with field-level validation |
@@ -243,14 +253,15 @@ bootstack ships with an optional CLI for scaffolding, running, and packaging app
243
253
  ```bash
244
254
  bootstack gallery # Launch the interactive widget gallery
245
255
  bootstack icons # Browse the built-in icon catalog
256
+ bootstack appicon # Design an app icon and export it
246
257
  bootstack start MyApp # Create a new project (basic template)
247
258
  bootstack start MyApp --template appshell # ...or with sidebar navigation
248
259
  bootstack run # Run the app defined in the project config
249
260
  bootstack add page Dashboard # Add a new page (appshell)
250
261
  bootstack add view Settings # Add a new view (basic)
251
262
  bootstack add dialog Preferences # Add a new dialog
252
- bootstack add i18n --languages en es fr # Add i18n support
253
263
  bootstack doctor # Diagnose project & environment
264
+ bootstack promote # Make the project packaging-ready
254
265
  bootstack build # Package for distribution
255
266
  ```
256
267
 
@@ -259,6 +270,12 @@ bootstack build # Package for distribution
259
270
  Full documentation — guides, the widget catalog, and the API reference — lives at
260
271
  **[bootstack.org](https://bootstack.org)**.
261
272
 
273
+ ## Contributing
274
+
275
+ Contributions are welcome — code, bug reports, and especially **translations**.
276
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, the pull-request
277
+ workflow, and how to review the bundled language catalogs.
278
+
262
279
  ## Links
263
280
 
264
281
  - **GitHub**: https://github.com/israel-dryer/bootstack
@@ -18,11 +18,13 @@ bootstack gives engineers, data scientists, and hobbyists everything to build a
18
18
  polished desktop interface and package it into a standalone executable —
19
19
  declarative, reactive, and batteries-included, all in pure Python.
20
20
 
21
+ <p align="center">
21
22
  <picture>
22
23
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-dark.png">
23
24
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-light.png">
24
25
  <img alt="bootstack hero demo" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/hero-light.png">
25
26
  </picture>
27
+ </p>
26
28
 
27
29
  ## Why bootstack?
28
30
 
@@ -30,14 +32,14 @@ Most Python desktop frameworks make you fight the framework. bootstack gets out
30
32
 
31
33
  - **30% less code** — the declarative, context-manager layout eliminates geometry calls, explicit parenting, and most of the wiring boilerplate
32
34
  - **Reads like Python** — nested `with` blocks mirror your UI structure; the code hierarchy *is* the layout
33
- - **Modern layout system** — `HStack`, `VStack`, and `Grid` containers handle spacing, alignment, and fill automatically; CSS conventions (`gap`, `padding`, `margin`, `fill`, `anchor`) without writing CSS
35
+ - **Modern layout system** — `Row`, `Column`, and `Grid` containers handle spacing, alignment, and growth automatically; a screen-axis vocabulary (`gap`, `padding`, `margin`, `horizontal`, `vertical`, `grow`) without writing CSS
34
36
  - **60+ widgets out of the box** — primitives through full composites: tables, trees, calendars, date pickers, gauges, sliders, and more — including a full `CodeEditor` with syntax highlighting, line numbers, bracket matching, smart indent, and search; no external editor dependency required
35
37
  - **Reactive signals** — observable state that flows between widgets; bind once, update everywhere
36
38
  - **Event and stream pipelines** — compose, filter, debounce, and throttle UI events with a chainable stream API
37
- - **Built-in icons** — the full Bootstrap Icons catalog, theme-aware and DPI-scaled, bundled with the framework
39
+ - **Built-in icons** — the full Bootstrap Icons catalog, theme-aware and recolorable, bundled with the framework
38
40
  - **Built-in localization** — 23 language catalogs, locale-aware number/date/time formatting, runtime language switching
39
41
  - **Semantic styling** — `accent="primary"`, `variant="outline"` — no hard-coded colors; looks right across every theme automatically
40
- - **8 paired light/dark themes** — with a runtime switcher and a custom-theme API
42
+ - **10 paired light/dark themes** — popular dev color schemes plus Bootstrap, with a runtime switcher and a custom-theme API
41
43
  - **Forms and validation** — field-level validators, inline error messages, and a `FormDialog` for quick modal forms
42
44
  - **DataSource abstraction** — one interface over SQLite, in-memory, and file backends with filtering, sorting, pagination, and CRUD
43
45
  - **A real CLI** — scaffold, run, add pages/views/dialogs/themes, and package for distribution
@@ -63,11 +65,13 @@ The widget gallery is a single-window tour of everything bootstack ships — eve
63
65
  bootstack gallery
64
66
  ```
65
67
 
68
+ <p align="center">
66
69
  <picture>
67
70
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-dark.png">
68
71
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-light.png">
69
72
  <img alt="bootstack widget gallery" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/gallery-light.png">
70
73
  </picture>
74
+ </p>
71
75
 
72
76
  ## Quick Start
73
77
 
@@ -83,24 +87,26 @@ with bs.App(title="Hello", padding=16, gap=16) as app:
83
87
  app.run()
84
88
  ```
85
89
 
90
+ <p align="center">
86
91
  <picture>
87
92
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-dark.png">
88
93
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
89
94
  <img alt="bootstack quick start example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-quickstart-light.png">
90
95
  </picture>
96
+ </p>
91
97
 
92
- For navigation-based apps, use `AppShell` — it gives you a command bar, sidebar, and page stack in one call:
98
+ For navigation-based apps, use `AppShell` — it gives you stacked toolbars, a sidebar, and a page stack in one call:
93
99
 
94
100
  ```python
95
101
  import bootstack as bs
96
102
 
97
103
  shell = bs.AppShell(title="My App", size=(1000, 650))
98
104
 
99
- with shell.add_page("home", text="Home", icon="house"):
100
- bs.Label("Welcome!")
101
-
102
- with shell.add_page("docs", text="Documents", icon="file-earmark-text"):
103
- bs.Label("Your documents.")
105
+ with shell.page_nav() as nav:
106
+ with nav.add_page("home", text="Home", icon="house"):
107
+ bs.Label("Welcome!")
108
+ with nav.add_page("docs", text="Documents", icon="file-earmark-text"):
109
+ bs.Label("Your documents.")
104
110
 
105
111
  shell.run()
106
112
  ```
@@ -109,11 +115,11 @@ shell.run()
109
115
 
110
116
  ### Layout containers
111
117
 
112
- `VStack`, `HStack`, and `Grid` let you describe a layout once instead of repeating geometry calls on each child:
118
+ `Column`, `Row`, and `Grid` let you describe a layout once instead of repeating geometry calls on each child:
113
119
 
114
120
  ```python
115
121
  with bs.App(title="Sign In") as app:
116
- with bs.Grid(columns=["auto", 1], gap=(12, 6), sticky_items="ew", padding=16):
122
+ with bs.Grid(columns=["auto", 1], gap=(12, 6), horizontal_items="stretch", padding=16):
117
123
  bs.Label("Name:")
118
124
  bs.TextField(placeholder="Full name")
119
125
  bs.Label("Email:")
@@ -125,11 +131,13 @@ with bs.App(title="Sign In") as app:
125
131
  app.run()
126
132
  ```
127
133
 
134
+ <p align="center">
128
135
  <picture>
129
136
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-dark.png">
130
137
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-light.png">
131
138
  <img alt="bootstack layout containers example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-layout-light.png">
132
139
  </picture>
140
+ </p>
133
141
 
134
142
  ### Semantic styling
135
143
 
@@ -141,11 +149,13 @@ bs.Button("Cancel", accent="secondary", variant="outline")
141
149
  bs.Label("Heading", font="heading-lg")
142
150
  ```
143
151
 
152
+ <p align="center">
144
153
  <picture>
145
154
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-dark.png">
146
155
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-light.png">
147
156
  <img alt="bootstack semantic styling example" src="https://raw.githubusercontent.com/israel-dryer/bootstack/main/assets/readme/ex-semantic-styling-light.png">
148
157
  </picture>
158
+ </p>
149
159
 
150
160
  ### Signals (optional)
151
161
 
@@ -162,17 +172,17 @@ app.run()
162
172
 
163
173
  ## Features
164
174
 
165
- - **Application scaffolding** — `App` for blank windows, `AppShell` for command-bar + sidebar + page-stack apps, undecorated windows with custom chrome
175
+ - **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, `Workbench` for two-tier workspace apps, undecorated windows with custom chrome
166
176
  - **60+ themed widgets** — primitives plus higher-level composites (DataTable, Tree, ListView, Calendar, DateField, Form, Gauge, ToggleGroup, PageStack, Carousel, Tooltip, and more)
167
177
  - **Dialogs and messages** — `alert()` / `confirm()` / `ask_*()` prompts and `FormDialog` / `FontDialog` / `FilterDialog`, plus non-blocking `toast()`, `Notification`, and `Snackbar` surfaces
168
- - **Layout containers** — `VStack`, `HStack`, and `Grid` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Expander`
178
+ - **Layout containers** — `Column`, `Row`, `Grid`, and `Spacer` for declarative layouts; `Card`, `GroupBox`, `ScrollView`, `SplitView`, `Accordion`, `Divider`
169
179
  - **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost), consistent across widgets
170
- - **Built-in themes** — paired light/dark variants (amber, aurora, bootstrap, classic, docs, forest, ocean, rose) with runtime theme switching and a custom-theme API
180
+ - **Built-in themes** — 10 paired light/dark variants (bootstrap, catppuccin, dracula, everforest, gruvbox, nord, one, pydata, solarized, tokyo-night) with runtime theme switching and a custom-theme API
171
181
  - **Reactive signals** — observable state with subscribe/set, integrates with widgets via `signal=` / `textsignal=`
172
182
  - **Forms & validation** — `Form` with built-in field-level validators and inline error messages
173
183
  - **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV/TSV/Excel export
174
184
  - **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
175
- - **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring, DPI scaling, and caching
185
+ - **Icons & images** — Bootstrap Icons catalog with theme-aware recoloring and caching
176
186
  - **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
177
187
  - **CLI (`bootstack`)** — project scaffolding, run, add components, theme/i18n setup, doctor, build/package
178
188
 
@@ -180,13 +190,13 @@ app.run()
180
190
 
181
191
  | Category | Widgets |
182
192
  |----------|---------|
183
- | **Actions** | Button, ButtonGroup, MenuButton, ContextMenu, CommandBar |
193
+ | **Actions** | Button, ButtonGroup, MenuButton, ContextMenu, Toolbar, ThemeToggle |
184
194
  | **Inputs** | TextField, PasswordField, PathField, NumberField, SpinnerField, Slider, RangeSlider, TextArea, CodeEditor, DateField, TimeField |
185
195
  | **Selection** | Checkbox, Switch, ToggleButton, Radio, RadioGroup, ToggleGroup, Select, SelectButton, Calendar |
186
196
  | **Data Display** | Label, Badge, ListView, Tree, DataTable, ProgressBar, Gauge |
187
197
  | **Media** | Avatar, Picture, Gallery, Carousel |
188
- | **Layout** | VStack, HStack, Grid, Card, GroupBox, SplitView, ScrollView, Accordion, Separator |
189
- | **Navigation** | AppShell, CommandBar, SideNav, StatusBar, Tabs, PageStack |
198
+ | **Layout** | Column, Row, Grid, Spacer, Card, GroupBox, SplitView, ScrollView, Accordion, Divider |
199
+ | **Navigation** | AppShell, Workbench, Window, StatusBar, Tabs, PageStack |
190
200
  | **Dialogs** | `alert()`, `confirm()`, `ask_*()` prompts, FormDialog, FontDialog, FilterDialog |
191
201
  | **Overlays** | `toast()`, Notification, Snackbar, Tooltip |
192
202
  | **Forms** | Form, with field-level validation |
@@ -198,14 +208,15 @@ bootstack ships with an optional CLI for scaffolding, running, and packaging app
198
208
  ```bash
199
209
  bootstack gallery # Launch the interactive widget gallery
200
210
  bootstack icons # Browse the built-in icon catalog
211
+ bootstack appicon # Design an app icon and export it
201
212
  bootstack start MyApp # Create a new project (basic template)
202
213
  bootstack start MyApp --template appshell # ...or with sidebar navigation
203
214
  bootstack run # Run the app defined in the project config
204
215
  bootstack add page Dashboard # Add a new page (appshell)
205
216
  bootstack add view Settings # Add a new view (basic)
206
217
  bootstack add dialog Preferences # Add a new dialog
207
- bootstack add i18n --languages en es fr # Add i18n support
208
218
  bootstack doctor # Diagnose project & environment
219
+ bootstack promote # Make the project packaging-ready
209
220
  bootstack build # Package for distribution
210
221
  ```
211
222
 
@@ -214,6 +225,12 @@ bootstack build # Package for distribution
214
225
  Full documentation — guides, the widget catalog, and the API reference — lives at
215
226
  **[bootstack.org](https://bootstack.org)**.
216
227
 
228
+ ## Contributing
229
+
230
+ Contributions are welcome — code, bug reports, and especially **translations**.
231
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, the pull-request
232
+ workflow, and how to review the bundled language catalogs.
233
+
217
234
  ## Links
218
235
 
219
236
  - **GitHub**: https://github.com/israel-dryer/bootstack
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "bootstack"
7
- version = "0.1.0a10"
7
+ version = "0.1.0a12"
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"
@@ -100,7 +100,7 @@ where = ["src"]
100
100
  ]
101
101
 
102
102
  [tool.bumpversion]
103
- current_version = "0.1.0a10"
103
+ current_version = "0.1.0a12"
104
104
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
105
105
  serialize = [
106
106
  "{major}.{minor}.{patch}{pre}{pre_n}",
@@ -11,9 +11,9 @@ Example:
11
11
  app.run()
12
12
  ```
13
13
 
14
- The top-level ``bootstack`` namespace holds what you *compose a UI* with: every
15
- widget, ``App``/``AppShell``/``Window``, ``Signal``, the dialog verbs
16
- (``alert``/``confirm``/``ask_*``/``toast``), and ``set_theme``/``toggle_theme``.
14
+ The top-level `bootstack` namespace holds what you *compose a UI* with: every
15
+ widget, `App`/`AppShell`/`Window`, `Signal`, the dialog verbs
16
+ (`alert`/`confirm`/`ask_*`/`toast`), and `set_theme`/`toggle_theme`.
17
17
  Framework primitives you reference *by type to configure behavior* live in
18
18
  submodules — for example::
19
19
 
@@ -56,13 +56,14 @@ from bootstack.dialogs import (
56
56
 
57
57
  # ── Application & windows ─────────────────────────────────────────────────────
58
58
  from bootstack.widgets.app import App
59
- from bootstack.widgets.appshell import AppShell
59
+ from bootstack.widgets.appshell import AppShell, Workbench
60
60
  from bootstack.widgets.window import Window
61
61
 
62
62
  # ── Public widget layer ───────────────────────────────────────────────────────
63
- from bootstack.widgets.stacks import HStack, VStack
63
+ from bootstack.widgets.stacks import Row, Column, Spacer
64
64
  from bootstack.widgets.grid import Grid
65
65
  from bootstack.widgets.boolean_controls import Checkbox, Switch, ToggleButton
66
+ from bootstack.widgets.theme_toggle import ThemeToggle
66
67
  from bootstack.widgets.button import Button
67
68
  from bootstack.widgets.card import Card
68
69
  from bootstack.widgets.buttongroup import ButtonGroup
@@ -89,7 +90,7 @@ from bootstack.widgets.radiogroup import RadioGroup
89
90
  from bootstack.widgets.scrollview import ScrollView
90
91
  from bootstack.widgets.select import Select
91
92
  from bootstack.widgets.selectbutton import SelectButton
92
- from bootstack.widgets.separator import Separator
93
+ from bootstack.widgets.divider import Divider
93
94
  from bootstack.widgets.splitview import SplitView, SplitPane
94
95
  from bootstack.widgets.slider import RangeSlider, Slider
95
96
  from bootstack.widgets.spinnerfield import SpinnerField
@@ -101,7 +102,7 @@ from bootstack.widgets.tree import Tree, TreeNode
101
102
  from bootstack.widgets.textfield import TextField
102
103
  from bootstack.widgets.toast import toast, Notification, Snackbar, snackbar
103
104
  from bootstack.widgets.togglegroup import ToggleGroup
104
- from bootstack.widgets.commandbar import CommandBar
105
+ from bootstack.widgets.toolbar import Toolbar
105
106
  from bootstack.widgets.statusbar import StatusBar
106
107
  from bootstack.widgets.tooltip import Tooltip
107
108
 
@@ -126,12 +127,12 @@ __all__ = [
126
127
  "ask_date_range", "ask_item", "ask_color", "ask_font", "ask_filter",
127
128
  "ask_save_file", "ask_open_file", "ask_open_files", "ask_directory",
128
129
  # Application & windows
129
- "App", "AppShell", "Window",
130
+ "App", "AppShell", "Workbench", "Window",
130
131
  # Layout
131
- "HStack", "VStack", "Grid", "Card", "GroupBox", "Separator", "ScrollView",
132
+ "Row", "Column", "Spacer", "Grid", "Card", "GroupBox", "Divider", "ScrollView",
132
133
  "SplitView", "SplitPane", "Accordion", "AccordionSection",
133
134
  # Actions
134
- "Button", "ButtonGroup", "MenuButton", "CommandBar", "StatusBar",
135
+ "Button", "ButtonGroup", "ThemeToggle", "MenuButton", "Toolbar", "StatusBar",
135
136
  "ContextMenu", "ContextMenuItem",
136
137
  # Inputs
137
138
  "TextField", "PasswordField", "NumberField", "PathField", "SpinnerField",
@@ -4,14 +4,9 @@ from __future__ import annotations
4
4
 
5
5
  from . import colorutils, publisher, capabilities
6
6
  from bootstack._core.exceptions import (
7
- TTKBootstrapError,
8
- LayoutError,
9
7
  ThemeError,
10
- ConfigError,
11
- StateError,
12
8
  NavigationError,
13
- BootstyleBuilderError,
14
- BootstyleParsingError,
9
+ StyleBuilderError,
15
10
  ConfigurationWarning,
16
11
  )
17
12
 
@@ -19,13 +14,8 @@ __all__ = [
19
14
  "colorutils",
20
15
  "publisher",
21
16
  "capabilities",
22
- "TTKBootstrapError",
23
- "LayoutError",
24
17
  "ThemeError",
25
- "ConfigError",
26
- "StateError",
27
18
  "NavigationError",
28
- "BootstyleBuilderError",
29
- "BootstyleParsingError",
19
+ "StyleBuilderError",
30
20
  "ConfigurationWarning",
31
- ]
21
+ ]
@@ -0,0 +1,25 @@
1
+ from __future__ import annotations
2
+
3
+ # These are defined in the public `bootstack.errors` home and re-exported here
4
+ # for the internal call sites that import from `bootstack._core`.
5
+ from bootstack.errors import (
6
+ NavigationError,
7
+ StyleBuilderError,
8
+ ThemeError,
9
+ )
10
+
11
+
12
+ class ConfigurationWarning(Warning):
13
+ """Issued when a widget receives a deprecated or questionable configuration option.
14
+
15
+ Examples: supplying an unsupported value for a configuration key, or
16
+ passing mutually exclusive options.
17
+ """
18
+
19
+
20
+ __all__ = [
21
+ "ConfigurationWarning",
22
+ "NavigationError",
23
+ "StyleBuilderError",
24
+ "ThemeError",
25
+ ]
@@ -354,9 +354,9 @@ class _ImageService:
354
354
  LANCZOS blur at non-integer DPI scale factors (e.g., 125%, 150%).
355
355
 
356
356
  Args:
357
- name: Bootstrap icon name (e.g., ``"house"``, ``"arrow-right-fill"``).
357
+ name: Bootstrap icon name (e.g., `"house"`, `"arrow-right-fill"`).
358
358
  size: Requested pixel size. Snapped to the nearest even integer.
359
- color: Foreground color as a hex string (e.g., ``"#ffffff"``).
359
+ color: Foreground color as a hex string (e.g., `"#ffffff"`).
360
360
 
361
361
  Returns:
362
362
  A cached Tk-compatible PhotoImage for the icon.
@@ -476,10 +476,10 @@ class App(BaseWindow, WidgetCapabilitiesMixin, tkinter.Tk):
476
476
  override_redirect: If `True`, creates a window without standard
477
477
  decorations (title bar, borders, etc.).
478
478
  center_on_screen: If True (default), center the app window on
479
- the screen when ``mainloop()`` starts.
479
+ the screen when `mainloop()` starts.
480
480
  on_close: Callback invoked when the user clicks the close button.
481
- Return ``False`` to veto the close; return ``None`` or ``True``
482
- to allow it. Equivalent to calling ``add_close_handler(fn)``
481
+ Return `False` to veto the close; return `None` or `True`
482
+ to allow it. Equivalent to calling `add_close_handler(fn)`
483
483
  after construction.
484
484
  **kwargs: Additional keyword arguments to pass to the
485
485
  underlying `tkinter.Tk` constructor.