bootstack 0.1.0a7__tar.gz → 0.1.0a8__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 (432) hide show
  1. {bootstack-0.1.0a7/src/bootstack.egg-info → bootstack-0.1.0a8}/PKG-INFO +1 -1
  2. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/pyproject.toml +2 -2
  3. bootstack-0.1.0a8/src/bootstack/style/builders/checkbutton.py +125 -0
  4. bootstack-0.1.0a8/src/bootstack/style/builders/radiobutton.py +97 -0
  5. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/utils.py +28 -2
  6. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/radiogroup.py +8 -0
  7. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/checkbutton.py +12 -2
  8. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/checktoggle.py +6 -1
  9. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/radiobutton.py +12 -2
  10. {bootstack-0.1.0a7 → bootstack-0.1.0a8/src/bootstack.egg-info}/PKG-INFO +1 -1
  11. bootstack-0.1.0a7/src/bootstack/style/builders/checkbutton.py +0 -95
  12. bootstack-0.1.0a7/src/bootstack/style/builders/radiobutton.py +0 -68
  13. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/LICENSE +0 -0
  14. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/MANIFEST.in +0 -0
  15. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/NOTICE +0 -0
  16. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/README.md +0 -0
  17. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/setup.cfg +0 -0
  18. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/__init__.py +0 -0
  19. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/__main__.py +0 -0
  20. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/__init__.py +0 -0
  21. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/app.py +0 -0
  22. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/constants.py +0 -0
  23. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/data.py +0 -0
  24. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/dialogs.py +0 -0
  25. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/i18n.py +0 -0
  26. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/localization.py +0 -0
  27. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/menu.py +0 -0
  28. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/style.py +0 -0
  29. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/utils.py +0 -0
  30. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/api/widgets.py +0 -0
  31. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/__init__.py +0 -0
  32. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/bootstack-dark.ico +0 -0
  33. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/bootstack-light.ico +0 -0
  34. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/bootstack-transparent.png +0 -0
  35. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/bootstack.ico +0 -0
  36. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/bootstack.png +0 -0
  37. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/__init__.py +0 -0
  38. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/badge-pill.png +0 -0
  39. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/badge-square.png +0 -0
  40. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/border.png +0 -0
  41. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-compact.png +0 -0
  42. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-default.png +0 -0
  43. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-horizontal-after-compact.png +0 -0
  44. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-horizontal-after-default.png +0 -0
  45. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-horizontal-before-compact.png +0 -0
  46. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-horizontal-before-default.png +0 -0
  47. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-horizontal-center-compact.png +0 -0
  48. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-horizontal-center-default.png +0 -0
  49. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-vertical-after-compact.png +0 -0
  50. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-vertical-after-default.png +0 -0
  51. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-vertical-before-compact.png +0 -0
  52. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-vertical-before-default.png +0 -0
  53. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-vertical-center-compact.png +0 -0
  54. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/button-group-vertical-center-default.png +0 -0
  55. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/checkbox-checked.png +0 -0
  56. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
  57. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
  58. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/field.png +0 -0
  59. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/input-after-compact.png +0 -0
  60. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/input-after-default.png +0 -0
  61. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/input-before-compact.png +0 -0
  62. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/input-before-default.png +0 -0
  63. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/input-compact.png +0 -0
  64. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/input-default.png +0 -0
  65. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/list-item-separated.png +0 -0
  66. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/list-item.png +0 -0
  67. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/manifest.toml +0 -0
  68. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/menu-item.png +0 -0
  69. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/nav-button-compact.png +0 -0
  70. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/nav-button-default.png +0 -0
  71. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/nav-icon-button-compact.png +0 -0
  72. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/nav-icon-button-default.png +0 -0
  73. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/notebook-client-border.png +0 -0
  74. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/notebook-tab-active.png +0 -0
  75. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/notebook-tab-bar.png +0 -0
  76. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/notebook-tab-normal.png +0 -0
  77. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/notebook-tab-pill.png +0 -0
  78. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/progress-bar-horizontal-striped.png +0 -0
  79. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/progress-bar-solid.png +0 -0
  80. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/progress-bar-thin.png +0 -0
  81. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/progress-bar-vertical-striped.png +0 -0
  82. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/radio-selected.png +0 -0
  83. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/radio-unselected.png +0 -0
  84. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
  85. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
  86. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/slider-handle-focus.png +0 -0
  87. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/slider-handle.png +0 -0
  88. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/slider-track-horizontal.png +0 -0
  89. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/slider-track-vertical.png +0 -0
  90. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/switch-off.png +0 -0
  91. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/switch-on.png +0 -0
  92. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/tabs-bar-horizontal.png +0 -0
  93. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/tabs-bar-vertical.png +0 -0
  94. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/elements/tabs-pill.png +0 -0
  95. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
  96. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +0 -0
  97. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +0 -0
  98. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
  99. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +0 -0
  100. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
  101. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +0 -0
  102. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
  103. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +0 -0
  104. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
  105. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +0 -0
  106. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
  107. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +0 -0
  108. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
  109. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +0 -0
  110. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
  111. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +0 -0
  112. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
  113. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +0 -0
  114. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
  115. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +0 -0
  116. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
  117. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +0 -0
  118. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
  119. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +0 -0
  120. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
  121. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +0 -0
  122. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
  123. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +0 -0
  124. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
  125. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +0 -0
  126. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
  127. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +0 -0
  128. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
  129. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +0 -0
  130. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
  131. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +0 -0
  132. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
  133. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +0 -0
  134. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
  135. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +0 -0
  136. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
  137. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +0 -0
  138. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
  139. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +0 -0
  140. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/__init__.py +0 -0
  141. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/amber-dark.json +0 -0
  142. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/amber-light.json +0 -0
  143. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/aurora-dark.json +0 -0
  144. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/aurora-light.json +0 -0
  145. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/bootstrap-dark.json +0 -0
  146. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/bootstrap-light.json +0 -0
  147. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/classic-dark.json +0 -0
  148. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/classic-light.json +0 -0
  149. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/docs-dark.json +0 -0
  150. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/docs-light.json +0 -0
  151. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/forest-dark.json +0 -0
  152. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/forest-light.json +0 -0
  153. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/ocean-dark.json +0 -0
  154. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/ocean-light.json +0 -0
  155. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/rose-dark.json +0 -0
  156. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/themes/rose-light.json +0 -0
  157. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/__init__.py +0 -0
  158. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/badge-default.png +0 -0
  159. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/badge-pill.png +0 -0
  160. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/border.png +0 -0
  161. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/button-group-horizontal-after.png +0 -0
  162. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/button-group-horizontal-before.png +0 -0
  163. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/button-group-horizontal-center.png +0 -0
  164. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/button-group-vertical-after.png +0 -0
  165. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/button-group-vertical-before.png +0 -0
  166. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/button-group-vertical-center.png +0 -0
  167. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/button.png +0 -0
  168. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/checkbox-checked.png +0 -0
  169. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/checkbox-indeterminate.png +0 -0
  170. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/checkbox-unchecked.png +0 -0
  171. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/field.png +0 -0
  172. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/icon-button.png +0 -0
  173. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/input-inner.png +0 -0
  174. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/input-prefix.png +0 -0
  175. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/input-suffix.png +0 -0
  176. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/input.png +0 -0
  177. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/list-item-focus.png +0 -0
  178. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/list-item-separated.png +0 -0
  179. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/menu-item-separated.png +0 -0
  180. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/notebook-client-border.png +0 -0
  181. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/notebook-pill-active.png +0 -0
  182. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/notebook-pill-inactive.png +0 -0
  183. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/notebook-tab-active.png +0 -0
  184. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/notebook-tab-border.png +0 -0
  185. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/notebook-tab-normal.png +0 -0
  186. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/notebook-underline.png +0 -0
  187. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/progress-bar-horizontal-default.png +0 -0
  188. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/progress-bar-horizontal-striped.png +0 -0
  189. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/progress-bar-vertical-default.png +0 -0
  190. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/progress-bar-vertical-striped.png +0 -0
  191. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/progress-trough-horizontal.png +0 -0
  192. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/progress-trough-vertical.png +0 -0
  193. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/radio-selected.png +0 -0
  194. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/radio-unselected.png +0 -0
  195. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/scrollbar-horizontal-rounded.png +0 -0
  196. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/scrollbar-vertical-rounded.png +0 -0
  197. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/separator-horizontal.png +0 -0
  198. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/separator-vertical.png +0 -0
  199. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/slider-handle-focus.png +0 -0
  200. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/slider-handle.png +0 -0
  201. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/slider-track-horizontal.png +0 -0
  202. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/slider-track-vertical.png +0 -0
  203. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/switch-off.png +0 -0
  204. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/switch-on.png +0 -0
  205. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/tabs-bar-horizontal.png +0 -0
  206. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/tabs-bar-vertical.png +0 -0
  207. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/assets/widgets/tabs-pill.png +0 -0
  208. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/__init__.py +0 -0
  209. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/__main__.py +0 -0
  210. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/add.py +0 -0
  211. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/build.py +0 -0
  212. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/config.py +0 -0
  213. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/demo.py +0 -0
  214. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/doctor.py +0 -0
  215. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/icons.py +0 -0
  216. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/list_cmd.py +0 -0
  217. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/promote.py +0 -0
  218. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/pyinstaller.py +0 -0
  219. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/run.py +0 -0
  220. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/start.py +0 -0
  221. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/cli/templates/__init__.py +0 -0
  222. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/constants.py +0 -0
  223. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/__init__.py +0 -0
  224. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/__init__.py +0 -0
  225. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/after.py +0 -0
  226. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/bind.py +0 -0
  227. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/bindtags.py +0 -0
  228. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/busy.py +0 -0
  229. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/clipboard.py +0 -0
  230. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/focus.py +0 -0
  231. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/grab.py +0 -0
  232. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/grid.py +0 -0
  233. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/localization.py +0 -0
  234. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/pack.py +0 -0
  235. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/place.py +0 -0
  236. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/selection.py +0 -0
  237. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/signals.py +0 -0
  238. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/capabilities/winfo.py +0 -0
  239. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/colorutils.py +0 -0
  240. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/exceptions.py +0 -0
  241. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/images.py +0 -0
  242. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/localization/README.md +0 -0
  243. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/localization/__init__.py +0 -0
  244. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/localization/intl_format.py +0 -0
  245. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/localization/msgcat.py +0 -0
  246. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/localization/specs.py +0 -0
  247. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/mixins/__init__.py +0 -0
  248. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/mixins/ttk_state.py +0 -0
  249. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/mixins/widget.py +0 -0
  250. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/publisher.py +0 -0
  251. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/signals/README.md +0 -0
  252. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/signals/__init__.py +0 -0
  253. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/signals/integration.py +0 -0
  254. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/signals/signal.py +0 -0
  255. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/signals/types.py +0 -0
  256. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/validation/__init__.py +0 -0
  257. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/validation/types.py +0 -0
  258. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/validation/validation_result.py +0 -0
  259. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/validation/validation_rules.py +0 -0
  260. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/core/variables.py +0 -0
  261. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/datasource/README.md +0 -0
  262. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/datasource/__init__.py +0 -0
  263. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/datasource/base.py +0 -0
  264. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/datasource/file_source.py +0 -0
  265. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/datasource/memory_source.py +0 -0
  266. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/datasource/sqlite_source.py +0 -0
  267. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/datasource/types.py +0 -0
  268. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/__init__.py +0 -0
  269. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/colorchooser.py +0 -0
  270. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/colordropper.py +0 -0
  271. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/datedialog.py +0 -0
  272. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/dialog.py +0 -0
  273. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/filterdialog.py +0 -0
  274. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/fontdialog.py +0 -0
  275. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/formdialog.py +0 -0
  276. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/message.py +0 -0
  277. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/dialogs/query.py +0 -0
  278. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/py.typed +0 -0
  279. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/__init__.py +0 -0
  280. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/app.py +0 -0
  281. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/base_window.py +0 -0
  282. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/events.py +0 -0
  283. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/menu.py +0 -0
  284. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/shortcuts.py +0 -0
  285. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/tk_patch.py +0 -0
  286. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/toplevel.py +0 -0
  287. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/utility.py +0 -0
  288. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/visual_focus.py +0 -0
  289. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/runtime/window_utilities.py +0 -0
  290. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/__init__.py +0 -0
  291. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/bootstyle.py +0 -0
  292. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/bootstyle_builder_base.py +0 -0
  293. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/bootstyle_builder_mixed.py +0 -0
  294. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/bootstyle_builder_tk.py +0 -0
  295. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/bootstyle_builder_ttk.py +0 -0
  296. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/__init__.py +0 -0
  297. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/badge.py +0 -0
  298. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/button.py +0 -0
  299. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/buttongroup.py +0 -0
  300. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/calendar.py +0 -0
  301. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/combobox.py +0 -0
  302. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/contextmenu.py +0 -0
  303. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/entry.py +0 -0
  304. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/expander.py +0 -0
  305. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/field.py +0 -0
  306. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/frame.py +0 -0
  307. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/label.py +0 -0
  308. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/labelframe.py +0 -0
  309. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/listview.py +0 -0
  310. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/menubar.py +0 -0
  311. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/menubutton.py +0 -0
  312. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/notebook.py +0 -0
  313. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/panedwindow.py +0 -0
  314. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/progressbar.py +0 -0
  315. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/scale.py +0 -0
  316. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/scrollbar.py +0 -0
  317. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/separator.py +0 -0
  318. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/sidenav.py +0 -0
  319. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/sizegrip.py +0 -0
  320. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/spinbox.py +0 -0
  321. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/switch.py +0 -0
  322. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/tabitem.py +0 -0
  323. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/toolbutton.py +0 -0
  324. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/tooltip.py +0 -0
  325. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders/treeview.py +0 -0
  326. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders_tk/__init__.py +0 -0
  327. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/builders_tk/defaults.py +0 -0
  328. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/element.py +0 -0
  329. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/style.py +0 -0
  330. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/theme_provider.py +0 -0
  331. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/tk_patch.py +0 -0
  332. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/token_maps.py +0 -0
  333. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/types.py +0 -0
  334. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/typography.py +0 -0
  335. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/style/utility.py +0 -0
  336. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/themes/__init__.py +0 -0
  337. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/themes/standard.py +0 -0
  338. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/themes/user.py +0 -0
  339. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/__init__.py +0 -0
  340. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/__init__.py +0 -0
  341. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/accordion.py +0 -0
  342. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/appshell.py +0 -0
  343. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/buttongroup.py +0 -0
  344. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/calendar.py +0 -0
  345. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/compositeframe.py +0 -0
  346. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/contextmenu.py +0 -0
  347. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/dateentry.py +0 -0
  348. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/dropdownbutton.py +0 -0
  349. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/expander.py +0 -0
  350. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/field.py +0 -0
  351. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/floodgauge.py +0 -0
  352. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/form.py +0 -0
  353. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/labeledscale.py +0 -0
  354. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/list/__init__.py +0 -0
  355. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/list/listitem.py +0 -0
  356. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/list/listview.py +0 -0
  357. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/menubar.py +0 -0
  358. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/meter.py +0 -0
  359. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/numericentry.py +0 -0
  360. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/pagestack.py +0 -0
  361. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/passwordentry.py +0 -0
  362. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/pathentry.py +0 -0
  363. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/scrolledtext.py +0 -0
  364. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/scrolledtext.pyi +0 -0
  365. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/scrollview.py +0 -0
  366. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/selectbox.py +0 -0
  367. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/sidenav/__init__.py +0 -0
  368. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/sidenav/group.py +0 -0
  369. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/sidenav/header.py +0 -0
  370. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/sidenav/item.py +0 -0
  371. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/sidenav/separator.py +0 -0
  372. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/sidenav/view.py +0 -0
  373. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/spinnerentry.py +0 -0
  374. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/tableview/__init__.py +0 -0
  375. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/tableview/tableview.py +0 -0
  376. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/tableview/types.py +0 -0
  377. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/tabs/__init__.py +0 -0
  378. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/tabs/tabitem.py +0 -0
  379. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/tabs/tabs.py +0 -0
  380. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/tabs/tabview.py +0 -0
  381. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/textentry.py +0 -0
  382. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/timeentry.py +0 -0
  383. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/toast.py +0 -0
  384. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/togglegroup.py +0 -0
  385. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/toolbar.py +0 -0
  386. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/composites/tooltip.py +0 -0
  387. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/internal/__init__.py +0 -0
  388. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/internal/wrapper_base.py +0 -0
  389. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/mixins/__init__.py +0 -0
  390. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/mixins/configure_mixin.py +0 -0
  391. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/mixins/entry_mixin.py +0 -0
  392. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/mixins/font_mixin.py +0 -0
  393. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/mixins/icon_mixin.py +0 -0
  394. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/mixins/localization_mixin.py +0 -0
  395. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/mixins/signal_mixin.py +0 -0
  396. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/mixins/validation_mixin.py +0 -0
  397. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/parts/__init__.py +0 -0
  398. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/parts/numberentry_part.py +0 -0
  399. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/parts/spinnerentry_part.py +0 -0
  400. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/parts/textentry_part.py +0 -0
  401. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/__init__.py +0 -0
  402. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/badge.py +0 -0
  403. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/button.py +0 -0
  404. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/card.py +0 -0
  405. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/combobox.py +0 -0
  406. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/entry.py +0 -0
  407. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/frame.py +0 -0
  408. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/gridframe.py +0 -0
  409. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/label.py +0 -0
  410. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/labelframe.py +0 -0
  411. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/menubutton.py +0 -0
  412. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/notebook.py +0 -0
  413. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/optionmenu.py +0 -0
  414. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/packframe.py +0 -0
  415. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/panedwindow.py +0 -0
  416. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/progressbar.py +0 -0
  417. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/radiotoggle.py +0 -0
  418. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/scale.py +0 -0
  419. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/scrollbar.py +0 -0
  420. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/separator.py +0 -0
  421. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/sizegrip.py +0 -0
  422. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/spinbox.py +0 -0
  423. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/switch.py +0 -0
  424. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/primitives/treeview.py +0 -0
  425. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack/widgets/types.py +0 -0
  426. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack.egg-info/SOURCES.txt +0 -0
  427. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack.egg-info/dependency_links.txt +0 -0
  428. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack.egg-info/entry_points.txt +0 -0
  429. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack.egg-info/requires.txt +0 -0
  430. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/src/bootstack.egg-info/top_level.txt +0 -0
  431. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/tests/test_togglegroup.py +0 -0
  432. {bootstack-0.1.0a7 → bootstack-0.1.0a8}/tests/test_variables.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bootstack
3
- Version: 0.1.0a7
3
+ Version: 0.1.0a8
4
4
  Summary: A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box.
5
5
  Author-email: Israel Dryer <israel.dryer@gmail.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "bootstack"
7
- version = "0.1.0a7"
7
+ version = "0.1.0a8"
8
8
  description = "A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -82,7 +82,7 @@ where = ["src"]
82
82
  ]
83
83
 
84
84
  [tool.bumpversion]
85
- current_version = "0.1.0a7"
85
+ current_version = "0.1.0a8"
86
86
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)((?P<pre>a|b|rc)(?P<pre_n>\\d+))?"
87
87
  serialize = [
88
88
  "{major}.{minor}.{patch}{pre}{pre_n}",
@@ -0,0 +1,125 @@
1
+ """Checkbutton widget style builders.
2
+
3
+ This module contains style builders for ttk.Checkbutton widgets and variants.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from bootstack.style.bootstyle_builder_ttk import BootstyleBuilderTTk
9
+ from bootstack.style.element import Element, ElementImage
10
+ from bootstack.style.utility import create_transparent_image, recolor_element_image
11
+ from bootstack.style.builders.utils import icon_size, resolve_icon_spec
12
+
13
+
14
+ @BootstyleBuilderTTk.register_builder('default', 'TCheckbutton')
15
+ def build_checkbutton_style(b: BootstyleBuilderTTk, ttk_style: str, accent: str = 'primary', **options):
16
+ accent_token = accent or 'primary'
17
+ surface_token = options.get('surface', 'content')
18
+
19
+ background = b.color(surface_token)
20
+ background_hover = b.active(background)
21
+ foreground = b.on_color(background)
22
+ foreground_disabled = b.disabled('text', background)
23
+
24
+ normal = b.color(accent_token)
25
+ pressed = b.pressed(normal)
26
+ hovered = b.active(normal)
27
+ border = b.border(background)
28
+ focus = hovered
29
+ focus_ring = b.focus_ring(normal, background)
30
+ disabled = b.disabled()
31
+
32
+ show_indicator = options.get('show_indicator', True)
33
+
34
+ if show_indicator:
35
+ spacer_img = create_transparent_image(6, 1)
36
+ b.create_style_element_image(ElementImage(f'{ttk_style}.spacer', spacer_img, sticky="ew"))
37
+
38
+ normal_checked_img = recolor_element_image('checkbox_checked', background, normal, background)
39
+ normal_unchecked_img = recolor_element_image('checkbox_unchecked', background, border, background)
40
+ normal_indeterminate_img = recolor_element_image('checkbox_indeterminate', background, normal, background)
41
+
42
+ hovered_checked_img = recolor_element_image('checkbox_checked', background, hovered, background)
43
+ hovered_unchecked_img = recolor_element_image('checkbox_unchecked', background_hover, border, background)
44
+ hovered_indeterminate_img = recolor_element_image('checkbox_indeterminate', background, hovered, background)
45
+
46
+ pressed_checked_img = recolor_element_image('checkbox_checked', background, pressed, background)
47
+ pressed_unchecked_img = recolor_element_image('checkbox_unchecked', background_hover, pressed, background)
48
+ pressed_indeterminate_img = recolor_element_image('checkbox_indeterminate', background, pressed, background)
49
+
50
+ focus_checked_img = recolor_element_image('checkbox_checked', background, focus, focus_ring)
51
+ focus_unchecked_img = recolor_element_image('checkbox_unchecked', background_hover, focus, focus_ring)
52
+ focus_indeterminate_img = recolor_element_image('checkbox_indeterminate', background, focus, focus_ring)
53
+
54
+ disabled_checked_img = recolor_element_image('checkbox_checked', disabled, foreground_disabled, background)
55
+ disabled_unchecked_img = recolor_element_image(
56
+ 'checkbox_unchecked', foreground_disabled, foreground_disabled, background)
57
+ disabled_indeterminate_img = recolor_element_image(
58
+ 'checkbox_indeterminate', disabled, foreground_disabled, background)
59
+
60
+ b.create_style_element_image(
61
+ ElementImage(f'{ttk_style}.indicator', normal_unchecked_img.image, sticky="ns").state_specs(
62
+ [
63
+ # Disabled states
64
+ ('disabled alternate !selected', disabled_indeterminate_img.image),
65
+ ('disabled selected', disabled_checked_img.image),
66
+ ('disabled !selected !alternate', disabled_unchecked_img.image),
67
+
68
+ # Focused states
69
+ ('focus alternate !selected', focus_indeterminate_img.image),
70
+ ('focus selected', focus_checked_img.image),
71
+ ('focus !selected !alternate', focus_unchecked_img.image),
72
+
73
+ # Pressed states
74
+ ('pressed alternate !selected', pressed_indeterminate_img.image),
75
+ ('pressed selected', pressed_checked_img.image),
76
+ ('pressed !selected !alternate', pressed_unchecked_img.image),
77
+
78
+ # Hover states
79
+ ('hover alternate !selected', hovered_indeterminate_img.image),
80
+ ('hover selected', hovered_checked_img.image),
81
+ ('hover !selected !alternate', hovered_unchecked_img.image),
82
+
83
+ # Normal base states
84
+ ('alternate !selected', normal_indeterminate_img.image),
85
+ ('selected', normal_checked_img.image),
86
+ ('!selected !alternate', normal_unchecked_img.image),
87
+ ]
88
+ ))
89
+
90
+ # Label-area icon: stateful, independent of show_indicator.
91
+ # Accent color when selected, foreground when unselected.
92
+ icon_images = []
93
+ icon_spec_raw = resolve_icon_spec(options)
94
+ if icon_spec_raw is not None:
95
+ icon_spec = b.normalize_icon_spec(icon_spec_raw, icon_size(False, 'default'))
96
+ fg_spec = [
97
+ ('disabled', foreground_disabled),
98
+ ('selected !disabled', normal),
99
+ ('', foreground),
100
+ ]
101
+ icon_images = b.map_stateful_icons(icon_spec, fg_spec)
102
+
103
+ layout_children = []
104
+ if show_indicator:
105
+ layout_children += [
106
+ Element(f'{ttk_style}.indicator', side="left", sticky=""),
107
+ Element(f'{ttk_style}.spacer', side="left"),
108
+ ]
109
+ layout_children.append(Element('Checkbutton.label', side="left", sticky="nsew"))
110
+
111
+ b.create_style_layout(
112
+ ttk_style, Element('Checkbutton.padding', sticky="nsew").children(layout_children)
113
+ )
114
+
115
+ b.configure_style(ttk_style, background=background, foreground=foreground, font="body")
116
+
117
+ map_kwargs = {
118
+ 'background': [],
119
+ 'foreground': [('disabled', foreground_disabled), ('', foreground)],
120
+ }
121
+ if icon_images:
122
+ map_kwargs['image'] = icon_images
123
+ if not options.get('icon_only', False):
124
+ map_kwargs['compound'] = 'left'
125
+ b.map_style(ttk_style, **map_kwargs)
@@ -0,0 +1,97 @@
1
+ """Radio Button widget style builders.
2
+
3
+ This module contains style builders for ttk.Radiobutton widgets and variants.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from bootstack.style.bootstyle_builder_ttk import BootstyleBuilderTTk
9
+ from bootstack.style.element import Element, ElementImage
10
+ from bootstack.style.utility import create_transparent_image, recolor_element_image
11
+ from bootstack.style.builders.utils import icon_size, resolve_icon_spec
12
+
13
+
14
+ @BootstyleBuilderTTk.register_builder('default', 'TRadiobutton')
15
+ def build_radiobutton_style(b: BootstyleBuilderTTk, ttk_style: str, accent: str = 'primary', **options):
16
+ accent_token = accent or 'primary'
17
+ surface_token = options.get('surface', 'content')
18
+
19
+ background = b.color(surface_token)
20
+ background_hover = b.active(background)
21
+ foreground = b.on_color(background)
22
+ foreground_disabled = b.disabled('text', background)
23
+
24
+ normal = b.color(accent_token)
25
+ hovered = b.active(normal)
26
+ border = b.border(background)
27
+ focus = hovered
28
+ focus_ring = b.focus_ring(normal, background)
29
+
30
+ show_indicator = options.get('show_indicator', True)
31
+
32
+ if show_indicator:
33
+ spacer_img = create_transparent_image(6, 1)
34
+ b.create_style_element_image(ElementImage(f'{ttk_style}.spacer', spacer_img, sticky="ew"))
35
+
36
+ normal_checked_img = recolor_element_image('radio_selected', background, normal, background)
37
+ normal_unchecked_img = recolor_element_image('radio_unselected', background, border, background)
38
+
39
+ focus_checked_img = recolor_element_image('radio_selected', background, focus, focus_ring)
40
+ focus_unchecked_img = recolor_element_image('radio_unselected', background_hover, focus, focus_ring)
41
+
42
+ disabled_checked_img = recolor_element_image('radio_selected', background, foreground_disabled, background)
43
+ disabled_unchecked_img = recolor_element_image('radio_unselected', background, foreground_disabled, background)
44
+
45
+ b.create_style_element_image(
46
+ ElementImage(f'{ttk_style}.indicator', normal_unchecked_img.image, sticky="ns", padding=b.scale(4)).state_specs(
47
+ [
48
+ # Disabled states
49
+ ('disabled selected', disabled_checked_img.image),
50
+ ('disabled !selected !alternate', disabled_unchecked_img.image),
51
+
52
+ # Focused states
53
+ ('focus selected', focus_checked_img.image),
54
+ ('focus !selected !alternate', focus_unchecked_img.image),
55
+
56
+ # Normal base states
57
+ ('selected', normal_checked_img.image),
58
+ ('!selected !alternate', normal_unchecked_img.image),
59
+ ]
60
+ ))
61
+
62
+ # Label-area icon: stateful, independent of show_indicator.
63
+ # Accent color when selected, foreground when unselected.
64
+ icon_images = []
65
+ icon_spec_raw = resolve_icon_spec(options)
66
+ if icon_spec_raw is not None:
67
+ icon_spec = b.normalize_icon_spec(icon_spec_raw, icon_size(False, 'default'))
68
+ fg_spec = [
69
+ ('disabled', foreground_disabled),
70
+ ('selected !disabled', normal),
71
+ ('', foreground),
72
+ ]
73
+ icon_images = b.map_stateful_icons(icon_spec, fg_spec)
74
+
75
+ layout_children = []
76
+ if show_indicator:
77
+ layout_children += [
78
+ Element(f'{ttk_style}.indicator', side="left", sticky=""),
79
+ Element(f'{ttk_style}.spacer', side="left"),
80
+ ]
81
+ layout_children.append(Element('Radiobutton.label', side="left", sticky="nsew"))
82
+
83
+ b.create_style_layout(
84
+ ttk_style, Element('Radiobutton.padding', sticky="nsew").children(layout_children)
85
+ )
86
+
87
+ b.configure_style(ttk_style, background=background, foreground=foreground, font="body")
88
+
89
+ map_kwargs = {
90
+ 'background': [],
91
+ 'foreground': [('disabled', foreground_disabled), ('', foreground)],
92
+ }
93
+ if icon_images:
94
+ map_kwargs['image'] = icon_images
95
+ if not options.get('icon_only', False):
96
+ map_kwargs['compound'] = 'left'
97
+ b.map_style(ttk_style, **map_kwargs)
@@ -251,6 +251,31 @@ def button_padding(b: BootstyleBuilderTTk, icon_only: bool, density: Any) -> int
251
251
  return b.scale((8, 0))
252
252
 
253
253
 
254
+ def resolve_icon_spec(options: dict) -> 'str | dict | None':
255
+ """Resolve on_icon/off_icon/icon kwargs into a unified icon spec.
256
+
257
+ Handles the three icon kwargs accepted by toggle-style widgets:
258
+ - icon: base icon for all states (color changes with state)
259
+ - off_icon: icon for the unselected/off state
260
+ - on_icon: icon for the selected/on state
261
+
262
+ Returns an IconSpec dict (or plain name string) suitable for passing
263
+ to normalize_icon_spec, or None if no icon was provided.
264
+ """
265
+ on_icon = options.get('on_icon')
266
+ off_icon = options.get('off_icon')
267
+ icon = options.get('icon')
268
+
269
+ if not on_icon and not off_icon:
270
+ return icon # None, str, or full IconSpec dict
271
+
272
+ base = off_icon or icon or on_icon
273
+ spec: dict = {'name': base}
274
+ if on_icon:
275
+ spec['state'] = [('selected', on_icon)]
276
+ return spec
277
+
278
+
254
279
  def apply_icon_mapping(
255
280
  b: BootstyleBuilderTTk,
256
281
  options: dict,
@@ -261,14 +286,15 @@ def apply_icon_mapping(
261
286
 
262
287
  Args:
263
288
  b: The bootstyle builder instance.
264
- options: Style options dictionary containing 'icon' and 'icon_only' keys.
289
+ options: Style options dictionary containing 'icon', 'on_icon', 'off_icon',
290
+ and 'icon_only' keys.
265
291
  state_spec: The state specification dictionary to update.
266
292
  default_size: Default icon size, or None to use normalize_icon_spec defaults.
267
293
 
268
294
  Returns:
269
295
  Updated state_spec with icon mappings applied.
270
296
  """
271
- icon = options.get('icon')
297
+ icon = resolve_icon_spec(options)
272
298
  if icon is None:
273
299
  return state_spec
274
300
 
@@ -25,6 +25,7 @@ class RadioGroupKwargs(TypedDict, total=False):
25
25
  text: str
26
26
  labelanchor: Literal['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw']
27
27
  state: Literal['normal', 'disabled']
28
+ show_indicator: bool
28
29
  show_border: bool
29
30
  surface: str
30
31
  style_options: dict[str, Any]
@@ -64,6 +65,9 @@ class RadioGroup(Frame):
64
65
  signal (Signal): Optional Signal instance for reactive programming.
65
66
  value (str): Initial selected value.
66
67
  state (str): Initial state for all buttons - 'normal' (default) or 'disabled'.
68
+ show_indicator (bool): Whether child buttons show the standard radio indicator.
69
+ Defaults to True. Set to False for icon-only or custom-styled groups.
70
+ Can be overridden per-button in ``add()``.
67
71
  show_border (bool): If True, draws a border around the group.
68
72
  surface (str): Optional surface token; otherwise inherited.
69
73
  style_options (dict): Additional style options passed to child buttons.
@@ -78,6 +82,7 @@ class RadioGroup(Frame):
78
82
  self._labeltext = kwargs.pop('text', None)
79
83
  self._labelanchor = kwargs.pop('labelanchor', 'n')
80
84
  self._state = kwargs.pop('state', 'normal')
85
+ self._show_indicator = kwargs.pop('show_indicator', True)
81
86
 
82
87
  # Handle signal/variable/value
83
88
  initial_value = kwargs.pop('value', None)
@@ -242,6 +247,9 @@ class RadioGroup(Frame):
242
247
  # Apply current state if not explicitly provided
243
248
  if 'state' not in btn_kwargs:
244
249
  btn_kwargs['state'] = self._state
250
+ # Forward group-level show_indicator unless overridden per-button
251
+ if 'show_indicator' not in btn_kwargs:
252
+ btn_kwargs['show_indicator'] = self._show_indicator
245
253
 
246
254
  button = RadioButton(
247
255
  self._button_container,
@@ -22,7 +22,10 @@ class CheckButtonKwargs(TypedDict, total=False):
22
22
  command: Optional[Callable[[], Any]]
23
23
  image: Any
24
24
  icon: Any
25
+ on_icon: Any
26
+ off_icon: Any
25
27
  icon_only: bool
28
+ show_indicator: bool
26
29
  compound: Literal['text', 'image', 'top', 'bottom', 'left', 'right', 'center', 'none'] | str
27
30
  variable: Any
28
31
  signal: Signal[Any]
@@ -68,8 +71,15 @@ class CheckButton(LocalizationMixin, SignalMixin, TextSignalMixin, IconMixin, TT
68
71
  textsignal (Signal[str]): Reactive Signal linked to the text (auto-synced with textvariable).
69
72
  command (Callable): Callable invoked when the value toggles.
70
73
  image (PhotoImage): Image to display.
71
- icon (str | dict): Theme-aware icon spec handled by the style system.
74
+ icon (str | dict): Icon shown in the label area for all states. Color shifts
75
+ from foreground (unselected) to accent (selected) automatically.
76
+ on_icon (str | dict): Icon shown in the label area when the button is selected.
77
+ Shortcut for ``state=[("selected", name)]`` inside a full icon spec.
78
+ off_icon (str | dict): Icon shown in the label area when the button is unselected.
79
+ Used as the base icon when ``on_icon`` is also provided.
72
80
  icon_only (bool): If True, removes the additional padding reserved for text.
81
+ show_indicator (bool): Whether to show the standard checkbox indicator. Defaults
82
+ to True. Set to False to hide the indicator (e.g. when using icons alone).
73
83
  compound (str): Placement of the image relative to text.
74
84
  variable (Variable): Linked variable controlling the on/off state.
75
85
  localize (bool | Literal['auto']): Determines the widget's localization mode.
@@ -94,7 +104,7 @@ class CheckButton(LocalizationMixin, SignalMixin, TextSignalMixin, IconMixin, TT
94
104
  signal_provided = 'signal' in kwargs
95
105
  variable_provided = 'variable' in kwargs
96
106
  initial_value = kwargs.pop('value', None)
97
- kwargs.update(style_options=self._capture_style_options(['icon_only', 'icon', 'anchor'], kwargs))
107
+ kwargs.update(style_options=self._capture_style_options(['icon_only', 'icon', 'on_icon', 'off_icon', 'show_indicator', 'anchor'], kwargs))
98
108
  super().__init__(master, **kwargs)
99
109
  if initial_value is not None and not signal_provided and not variable_provided:
100
110
  self.variable.set(initial_value)
@@ -19,7 +19,12 @@ class CheckToggle(CheckButton):
19
19
  textsignal (Signal[str]): Reactive Signal linked to the text (auto-synced with textvariable).
20
20
  command (Callable): Callable invoked when the toggle changes state.
21
21
  image (PhotoImage): Image to display.
22
- icon (str | dict): Theme-aware icon spec handled by the style system.
22
+ icon (str | dict): Icon shown in the label area for all states. Color shifts
23
+ with the button's pressed/selected state automatically.
24
+ on_icon (str | dict): Icon shown when the toggle is selected (on). Shortcut
25
+ for ``state=[("selected", name)]`` inside a full icon spec.
26
+ off_icon (str | dict): Icon shown when the toggle is unselected (off). Used
27
+ as the base icon when ``on_icon`` is also provided.
23
28
  icon_only (bool): If True, removes the additional padding reserved for text.
24
29
  compound (str): Placement of the image relative to text.
25
30
  variable (Variable): Linked variable controlling the on/off state.
@@ -22,7 +22,10 @@ class RadioButtonKwargs(TypedDict, total=False):
22
22
  command: Optional[Callable[[], Any]]
23
23
  image: Any
24
24
  icon: Any
25
+ on_icon: Any
26
+ off_icon: Any
25
27
  icon_only: bool
28
+ show_indicator: bool
26
29
  compound: Literal['text', 'image', 'top', 'bottom', 'left', 'right', 'center', 'none'] | str
27
30
  variable: Any
28
31
  signal: Signal[Any]
@@ -66,8 +69,15 @@ class RadioButton(LocalizationMixin, SignalMixin, TextSignalMixin, IconMixin, TT
66
69
  textsignal (Signal[str]): Reactive Signal linked to the text (auto-synced with textvariable).
67
70
  command (Callable): Callable invoked when the value is selected.
68
71
  image (PhotoImage): Image to display.
69
- icon (str | dict): Theme-aware icon spec handled by the style system.
72
+ icon (str | dict): Icon shown in the label area for all states. Color shifts
73
+ from foreground (unselected) to accent (selected) automatically.
74
+ on_icon (str | dict): Icon shown in the label area when the button is selected.
75
+ Shortcut for ``state=[("selected", name)]`` inside a full icon spec.
76
+ off_icon (str | dict): Icon shown in the label area when the button is unselected.
77
+ Used as the base icon when ``on_icon`` is also provided.
70
78
  icon_only (bool): Removes the additional padding added for label.
79
+ show_indicator (bool): Whether to show the standard radio indicator. Defaults
80
+ to True. Set to False to hide the indicator (e.g. for icon-only radio groups).
71
81
  compound (str): Placement of the image relative to text.
72
82
  variable (Variable): Linked Tk variable that receives the selected value.
73
83
  signal (Signal): Reactive Signal that receives the selected value (auto-synced with variable).
@@ -87,7 +97,7 @@ class RadioButton(LocalizationMixin, SignalMixin, TextSignalMixin, IconMixin, TT
87
97
  style_options (dict): Optional dict forwarded to the style builder.
88
98
  localize (bool | Literal['auto']): Determines the widget's localization mode.
89
99
  """
90
- kwargs.update(style_options=self._capture_style_options(['icon_only', 'icon', 'anchor'], kwargs))
100
+ kwargs.update(style_options=self._capture_style_options(['icon_only', 'icon', 'on_icon', 'off_icon', 'show_indicator', 'anchor'], kwargs))
91
101
  super().__init__(master, **kwargs)
92
102
 
93
103
  def get(self) -> Any:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bootstack
3
- Version: 0.1.0a7
3
+ Version: 0.1.0a8
4
4
  Summary: A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box.
5
5
  Author-email: Israel Dryer <israel.dryer@gmail.com>
6
6
  License-Expression: MIT
@@ -1,95 +0,0 @@
1
- """Checkbutton widget style builders.
2
-
3
- This module contains style builders for ttk.Checkbutton widgets and variants.
4
- """
5
-
6
- from __future__ import annotations
7
-
8
- from bootstack.style.bootstyle_builder_ttk import BootstyleBuilderTTk
9
- from bootstack.style.element import Element, ElementImage
10
- from bootstack.style.utility import create_transparent_image, recolor_element_image
11
-
12
-
13
- @BootstyleBuilderTTk.register_builder('default', 'TCheckbutton')
14
- def build_checkbutton_style(b: BootstyleBuilderTTk, ttk_style: str, accent: str = 'primary', **options):
15
- accent_token = accent or 'primary'
16
- surface_token = options.get('surface', 'content')
17
-
18
- background = b.color(surface_token)
19
- background_hover = b.active(background)
20
- foreground = b.on_color(background)
21
- foreground_disabled = b.disabled('text', background)
22
-
23
- normal = b.color(accent_token)
24
- pressed = b.pressed(normal)
25
- hovered = b.active(normal)
26
- border = b.border(background)
27
- focus = hovered
28
- focus_ring = b.focus_ring(normal, background)
29
- disabled = b.disabled()
30
-
31
- normal_checked_img = recolor_element_image('checkbox_checked', background, normal, background)
32
- normal_unchecked_img = recolor_element_image('checkbox_unchecked', background, border, background)
33
- normal_indeterminate_img = recolor_element_image('checkbox_indeterminate', background, normal, background)
34
-
35
- hovered_checked_img = recolor_element_image('checkbox_checked', background, hovered, background)
36
- hovered_unchecked_img = recolor_element_image('checkbox_unchecked', background_hover, border, background)
37
- hovered_indeterminate_img = recolor_element_image('checkbox_indeterminate', background, hovered, background)
38
-
39
- pressed_checked_img = recolor_element_image('checkbox_checked', background, pressed, background)
40
- pressed_unchecked_img = recolor_element_image('checkbox_unchecked', background_hover, pressed, background)
41
- pressed_indeterminate_img = recolor_element_image('checkbox_indeterminate', background, pressed, background)
42
-
43
- focus_checked_img = recolor_element_image('checkbox_checked', background, focus, focus_ring)
44
- focus_unchecked_img = recolor_element_image('checkbox_unchecked', background_hover, focus, focus_ring)
45
- focus_indeterminate_img = recolor_element_image('checkbox_indeterminate', background, focus, focus_ring)
46
-
47
- disabled_checked_img = recolor_element_image('checkbox_checked', disabled, foreground_disabled, background)
48
- disabled_unchecked_img = recolor_element_image(
49
- 'checkbox_unchecked', foreground_disabled, foreground_disabled, background)
50
- disabled_indeterminate_img = recolor_element_image('checkbox_indeterminate', disabled, foreground_disabled, background)
51
-
52
- spacer_img = create_transparent_image(6, 1)
53
- b.create_style_element_image(ElementImage(f'{ttk_style}.spacer', spacer_img, sticky="ew"))
54
-
55
- b.create_style_element_image(
56
- ElementImage(f'{ttk_style}.indicator', normal_unchecked_img.image, sticky="ns").state_specs(
57
- [
58
- # Disabled states
59
- ('disabled alternate !selected', disabled_indeterminate_img.image),
60
- ('disabled selected', disabled_checked_img.image),
61
- ('disabled !selected !alternate', disabled_unchecked_img.image),
62
-
63
- # Focused states
64
- ('focus alternate !selected', focus_indeterminate_img.image),
65
- ('focus selected', focus_checked_img.image),
66
- ('focus !selected !alternate', focus_unchecked_img.image),
67
-
68
- # Pressed states
69
- ('pressed alternate !selected', pressed_indeterminate_img.image),
70
- ('pressed selected', pressed_checked_img.image),
71
- ('pressed !selected !alternate', pressed_unchecked_img.image),
72
-
73
- # Hover states
74
- ('hover alternate !selected', hovered_indeterminate_img.image),
75
- ('hover selected', hovered_checked_img.image),
76
- ('hover !selected !alternate', hovered_unchecked_img.image),
77
-
78
- # Normal base states
79
- ('alternate !selected', normal_indeterminate_img.image),
80
- ('selected', normal_checked_img.image),
81
- ('!selected !alternate', normal_unchecked_img.image),
82
- ]
83
- ))
84
-
85
- b.create_style_layout(
86
- ttk_style, Element('Checkbutton.padding', sticky="nsew").children(
87
- [
88
- Element(f'{ttk_style}.indicator', side="left", sticky=""),
89
- Element(f'{ttk_style}.spacer', side="left"),
90
- Element('Checkbutton.label', side="left", sticky="nsew")
91
- ])
92
- )
93
-
94
- b.configure_style(ttk_style, background=background, foreground=foreground, font="body")
95
- b.map_style(ttk_style, background=[], foreground=[('disabled', foreground_disabled), ('', foreground)])
@@ -1,68 +0,0 @@
1
- """Radio Button widget style builders.
2
-
3
- This module contains style builders for ttk.Radiobutton widgets and variants.
4
- """
5
-
6
- from __future__ import annotations
7
-
8
- from bootstack.style.bootstyle_builder_ttk import BootstyleBuilderTTk
9
- from bootstack.style.element import Element, ElementImage
10
- from bootstack.style.utility import create_transparent_image, recolor_element_image
11
-
12
-
13
- @BootstyleBuilderTTk.register_builder('default', 'TRadiobutton')
14
- def build_radiobutton_style(b: BootstyleBuilderTTk, ttk_style: str, accent: str = 'primary', **options):
15
- accent_token = accent or 'primary'
16
- surface_token = options.get('surface', 'content')
17
-
18
- background = b.color(surface_token)
19
- background_hover = b.active(background)
20
- foreground = b.on_color(background)
21
- foreground_disabled = b.disabled('text', background)
22
-
23
- normal = b.color(accent_token)
24
- hovered = b.active(normal)
25
- border = b.border(background)
26
- focus = hovered
27
- focus_ring = b.focus_ring(normal, background)
28
-
29
- normal_checked_img = recolor_element_image('radio_selected', background, normal, background)
30
- normal_unchecked_img = recolor_element_image('radio_unselected', background, border, background)
31
-
32
- focus_checked_img = recolor_element_image('radio_selected', background, focus, focus_ring)
33
- focus_unchecked_img = recolor_element_image('radio_unselected', background_hover, focus, focus_ring)
34
-
35
- disabled_checked_img = recolor_element_image('radio_selected', background, foreground_disabled, background)
36
- disabled_unchecked_img = recolor_element_image('radio_unselected', background, foreground_disabled, background)
37
-
38
- spacer_img = create_transparent_image(6, 1)
39
- b.create_style_element_image(ElementImage(f'{ttk_style}.spacer', spacer_img, sticky="ew"))
40
-
41
- b.create_style_element_image(
42
- ElementImage(f'{ttk_style}.indicator', normal_unchecked_img.image, sticky="ns", padding=b.scale(4)).state_specs(
43
- [
44
- # Disabled states
45
- ('disabled selected', disabled_checked_img.image),
46
- ('disabled !selected !alternate', disabled_unchecked_img.image),
47
-
48
- # Focused states
49
- ('focus selected', focus_checked_img.image),
50
- ('focus !selected !alternate', focus_unchecked_img.image),
51
-
52
- # Normal base states
53
- ('selected', normal_checked_img.image),
54
- ('!selected !alternate', normal_unchecked_img.image),
55
- ]
56
- ))
57
-
58
- b.create_style_layout(
59
- ttk_style, Element('Radiobutton.padding', sticky="nsew").children(
60
- [
61
- Element(f'{ttk_style}.indicator', side="left", sticky=""),
62
- Element(f'{ttk_style}.spacer', side="left"),
63
- Element('Radiobutton.label', side="left", sticky="nsew")
64
- ])
65
- )
66
-
67
- b.configure_style(ttk_style, background=background, foreground=foreground, font="body")
68
- b.map_style(ttk_style, background=[], foreground=[('disabled', foreground_disabled), ('', foreground)])
File without changes
File without changes
File without changes
File without changes
File without changes