@brandsync/wc 1.21.0 → 1.22.0

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 (576) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/REFERENCE.md +2 -1
  3. package/custom-elements.json +136 -4
  4. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  5. package/dist/brandsync-wc/{p-7ee43b50.entry.js → p-018ab194.entry.js} +1 -1
  6. package/dist/brandsync-wc/{p-faea22be.entry.js → p-020a274b.entry.js} +1 -1
  7. package/dist/brandsync-wc/{p-3937bc23.entry.js → p-0276bca4.entry.js} +1 -1
  8. package/dist/brandsync-wc/p-03acdd56.entry.js +1 -0
  9. package/dist/brandsync-wc/{p-f5bbbff2.entry.js → p-06a5fe99.entry.js} +1 -1
  10. package/dist/brandsync-wc/{p-383c076f.entry.js → p-0a0798c4.entry.js} +1 -1
  11. package/dist/brandsync-wc/{p-b6b880c0.entry.js → p-0b92d0d7.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-bd37c086.entry.js → p-0be65af0.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-c700a860.entry.js → p-0ce29fc2.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-34dd0976.entry.js → p-1436ae47.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-6cf303f1.entry.js → p-181a8372.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-2eed5ff2.entry.js → p-1bd3756c.entry.js} +1 -1
  17. package/dist/brandsync-wc/p-1c2402eb.entry.js +1 -0
  18. package/dist/brandsync-wc/{p-c1207ce6.entry.js → p-214b32bb.entry.js} +1 -1
  19. package/dist/brandsync-wc/{p-c305bde7.entry.js → p-21a592a4.entry.js} +1 -1
  20. package/dist/brandsync-wc/{p-64ef4a9f.entry.js → p-23e3bffe.entry.js} +1 -1
  21. package/dist/brandsync-wc/{p-324f0d11.entry.js → p-284e4e1e.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-fbd33eb3.entry.js → p-2c167f83.entry.js} +1 -1
  23. package/dist/brandsync-wc/p-2e2dc322.entry.js +1 -0
  24. package/dist/brandsync-wc/{p-b3284eca.entry.js → p-37da7465.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-56bd821c.entry.js → p-38f4552f.entry.js} +1 -1
  26. package/dist/brandsync-wc/{p-c542d67f.entry.js → p-39afd9b8.entry.js} +1 -1
  27. package/dist/brandsync-wc/{p-08af052c.entry.js → p-3a13747b.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-c5fa5d02.entry.js → p-3b3a9587.entry.js} +1 -1
  29. package/dist/brandsync-wc/{p-1ddcd867.entry.js → p-3de7989e.entry.js} +1 -1
  30. package/dist/brandsync-wc/{p-189eb922.entry.js → p-43a792a3.entry.js} +1 -1
  31. package/dist/brandsync-wc/{p-cf615c99.entry.js → p-4907f66e.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-0d3d8b6c.entry.js → p-4a8c2eca.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-da934f7b.entry.js → p-4ff5bc4b.entry.js} +1 -1
  34. package/dist/brandsync-wc/{p-2be42af3.entry.js → p-51e9d375.entry.js} +1 -1
  35. package/dist/brandsync-wc/{p-a30d456d.entry.js → p-5399e163.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-2e654764.entry.js → p-55db935b.entry.js} +1 -1
  37. package/dist/brandsync-wc/p-5f26d601.entry.js +1 -0
  38. package/dist/brandsync-wc/{p-83ea17b6.entry.js → p-60e4e07a.entry.js} +1 -1
  39. package/dist/brandsync-wc/{p-ea4ea55d.entry.js → p-645e1a78.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-05698f65.entry.js → p-682b9f3e.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-59ddf12e.entry.js → p-697de2b2.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-fc859e89.entry.js → p-6aa3dcef.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-9065d825.entry.js → p-6b11aebb.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-aea1e4f9.entry.js → p-6d18ba79.entry.js} +1 -1
  45. package/dist/brandsync-wc/p-6fcfd7d7.entry.js +1 -0
  46. package/dist/brandsync-wc/{p-4ec0dca9.entry.js → p-71ea6c1c.entry.js} +1 -1
  47. package/dist/brandsync-wc/{p-205a1ccf.entry.js → p-74dd9146.entry.js} +1 -1
  48. package/dist/brandsync-wc/{p-b9014d87.entry.js → p-75ec385a.entry.js} +1 -1
  49. package/dist/brandsync-wc/{p-82c8fde1.entry.js → p-78fdcd05.entry.js} +1 -1
  50. package/dist/brandsync-wc/{p-b0b73f22.entry.js → p-7a291cfc.entry.js} +1 -1
  51. package/dist/brandsync-wc/{p-0762a4dd.entry.js → p-7f3c8416.entry.js} +1 -1
  52. package/dist/brandsync-wc/{p-1187a158.entry.js → p-7f50ae81.entry.js} +1 -1
  53. package/dist/brandsync-wc/{p-21781ce5.entry.js → p-82533674.entry.js} +1 -1
  54. package/dist/brandsync-wc/{p-40aeeacf.entry.js → p-83977d40.entry.js} +1 -1
  55. package/dist/brandsync-wc/{p-5c1ccf35.entry.js → p-851c1498.entry.js} +1 -1
  56. package/dist/brandsync-wc/{p-cd1adef0.entry.js → p-87b91d38.entry.js} +1 -1
  57. package/dist/brandsync-wc/{p-1b41823c.entry.js → p-8a85e144.entry.js} +1 -1
  58. package/dist/brandsync-wc/{p-e56cc6ac.entry.js → p-9301f01e.entry.js} +1 -1
  59. package/dist/brandsync-wc/{p-dae0348e.entry.js → p-978c46d9.entry.js} +1 -1
  60. package/dist/brandsync-wc/{p-5f96d808.entry.js → p-9988ebab.entry.js} +1 -1
  61. package/dist/brandsync-wc/p-9a45899c.entry.js +1 -0
  62. package/dist/brandsync-wc/{p-7c627563.entry.js → p-9bd0c4a7.entry.js} +1 -1
  63. package/dist/brandsync-wc/{p-ab74da02.entry.js → p-9c1ea6f0.entry.js} +1 -1
  64. package/dist/brandsync-wc/{p-abaab890.entry.js → p-9c353a03.entry.js} +1 -1
  65. package/dist/brandsync-wc/{p-001f3790.entry.js → p-9d90d3b8.entry.js} +1 -1
  66. package/dist/brandsync-wc/{p-05a9cbda.entry.js → p-a59b4c08.entry.js} +1 -1
  67. package/dist/brandsync-wc/{p-4cdb1c8c.entry.js → p-ad53d283.entry.js} +1 -1
  68. package/dist/brandsync-wc/{p-8a3095d5.entry.js → p-ad9c3eea.entry.js} +1 -1
  69. package/dist/brandsync-wc/{p-1d2bc5b4.entry.js → p-aeb99b7d.entry.js} +1 -1
  70. package/dist/brandsync-wc/{p-f89d12d7.entry.js → p-b145997c.entry.js} +1 -1
  71. package/dist/brandsync-wc/{p-f0596399.entry.js → p-b6350eab.entry.js} +1 -1
  72. package/dist/brandsync-wc/{p-fe070433.entry.js → p-b90c8b7d.entry.js} +1 -1
  73. package/dist/brandsync-wc/{p-ac7f9aa0.entry.js → p-b93ce581.entry.js} +1 -1
  74. package/dist/brandsync-wc/p-ba933f3b.entry.js +1 -0
  75. package/dist/brandsync-wc/{p-dd8f593a.entry.js → p-bb1b2350.entry.js} +1 -1
  76. package/dist/brandsync-wc/{p-8560fb54.entry.js → p-bcb09ba4.entry.js} +1 -1
  77. package/dist/brandsync-wc/{p-9ca0d2db.entry.js → p-bde099fb.entry.js} +1 -1
  78. package/dist/brandsync-wc/{p-237f583d.entry.js → p-bf8da1b5.entry.js} +1 -1
  79. package/dist/brandsync-wc/{p-5e3fcc47.entry.js → p-c36f68a2.entry.js} +1 -1
  80. package/dist/brandsync-wc/{p-023dae02.entry.js → p-c4026551.entry.js} +1 -1
  81. package/dist/brandsync-wc/{p-513fa325.entry.js → p-c7c3c4ae.entry.js} +1 -1
  82. package/dist/brandsync-wc/{p-3592e6f3.entry.js → p-ca71e180.entry.js} +1 -1
  83. package/dist/brandsync-wc/p-cc664465.entry.js +1 -0
  84. package/dist/brandsync-wc/{p-953d0191.entry.js → p-ce3a762e.entry.js} +1 -1
  85. package/dist/brandsync-wc/{p-7cdcf7e7.entry.js → p-d38394ce.entry.js} +1 -1
  86. package/dist/brandsync-wc/{p-171db2b0.entry.js → p-d4caa814.entry.js} +1 -1
  87. package/dist/brandsync-wc/{p-1cf40f44.entry.js → p-d8dd2230.entry.js} +1 -1
  88. package/dist/brandsync-wc/{p-bc489296.entry.js → p-da091255.entry.js} +1 -1
  89. package/dist/brandsync-wc/{p-eb8da874.entry.js → p-dd7bb223.entry.js} +1 -1
  90. package/dist/brandsync-wc/{p-44c7fa4a.entry.js → p-e0d47019.entry.js} +1 -1
  91. package/dist/brandsync-wc/{p-eadbc160.entry.js → p-e8fe79bc.entry.js} +1 -1
  92. package/dist/brandsync-wc/{p-ffeea95f.entry.js → p-e90e4991.entry.js} +1 -1
  93. package/dist/brandsync-wc/{p-5cd95a12.entry.js → p-ee4f3b3d.entry.js} +1 -1
  94. package/dist/brandsync-wc/{p-cf297373.entry.js → p-f43615f7.entry.js} +1 -1
  95. package/dist/brandsync-wc/{p-64fbd43a.entry.js → p-fca95aae.entry.js} +1 -1
  96. package/dist/cjs/brandsync-wc.cjs.js +1 -1
  97. package/dist/cjs/bs-accordion-group.cjs.entry.js +1 -1
  98. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +1 -1
  99. package/dist/cjs/bs-ai-greeting.cjs.entry.js +1 -1
  100. package/dist/cjs/bs-ai-thinking.cjs.entry.js +1 -1
  101. package/dist/cjs/bs-app-recent-item_3.cjs.entry.js +4 -4
  102. package/dist/cjs/bs-app-shell.cjs.entry.js +1 -1
  103. package/dist/cjs/bs-attachment-list.cjs.entry.js +1 -1
  104. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +1 -1
  105. package/dist/cjs/bs-button-skeleton.cjs.entry.js +1 -1
  106. package/dist/cjs/bs-button_2.cjs.entry.js +1 -1
  107. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +1 -1
  108. package/dist/cjs/bs-chatbot-header.cjs.entry.js +1 -1
  109. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +1 -1
  110. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +1 -1
  111. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +1 -1
  112. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +1 -1
  113. package/dist/cjs/bs-chip-informative.cjs.entry.js +31 -2
  114. package/dist/cjs/bs-chip-input.cjs.entry.js +1 -1
  115. package/dist/cjs/bs-citation-preview.cjs.entry.js +1 -1
  116. package/dist/cjs/bs-command-palette.cjs.entry.js +1 -1
  117. package/dist/cjs/bs-compact-menu-block_2.cjs.entry.js +4 -4
  118. package/dist/cjs/bs-company-switcher.cjs.entry.js +2 -2
  119. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +1 -1
  120. package/dist/cjs/bs-composer.cjs.entry.js +1 -1
  121. package/dist/cjs/bs-container.cjs.entry.js +1 -1
  122. package/dist/cjs/bs-data-table.cjs.entry.js +4 -2
  123. package/dist/cjs/bs-datepicker.cjs.entry.js +1 -1
  124. package/dist/cjs/bs-description-item.cjs.entry.js +1 -1
  125. package/dist/cjs/bs-description-list.cjs.entry.js +1 -1
  126. package/dist/cjs/bs-divider.cjs.entry.js +1 -1
  127. package/dist/cjs/bs-dropdown.cjs.entry.js +1 -1
  128. package/dist/cjs/bs-empty-state.cjs.entry.js +1 -1
  129. package/dist/cjs/bs-error-page.cjs.entry.js +1 -1
  130. package/dist/cjs/bs-file-upload-item.cjs.entry.js +1 -1
  131. package/dist/cjs/bs-file-upload.cjs.entry.js +1 -1
  132. package/dist/cjs/bs-global-search.cjs.entry.js +2 -2
  133. package/dist/cjs/bs-grid.cjs.entry.js +2 -2
  134. package/dist/cjs/bs-heading.cjs.entry.js +1 -1
  135. package/dist/cjs/bs-icon-button.cjs.entry.js +1 -1
  136. package/dist/cjs/bs-icon-tile.cjs.entry.js +2 -2
  137. package/dist/cjs/bs-icon.cjs.entry.js +1 -1
  138. package/dist/cjs/bs-inline-tab.cjs.entry.js +1 -1
  139. package/dist/cjs/bs-input_4.cjs.entry.js +9 -6
  140. package/dist/cjs/bs-key-caps.cjs.entry.js +1 -1
  141. package/dist/cjs/bs-key.cjs.entry.js +1 -1
  142. package/dist/cjs/bs-keyboard-shortcuts.cjs.entry.js +2 -2
  143. package/dist/cjs/bs-link.cjs.entry.js +1 -1
  144. package/dist/cjs/bs-list-item.cjs.entry.js +1 -1
  145. package/dist/cjs/bs-list.cjs.entry.js +1 -1
  146. package/dist/cjs/bs-mega-menu.cjs.entry.js +1 -1
  147. package/dist/cjs/bs-message-list.cjs.entry.js +1 -1
  148. package/dist/cjs/bs-message.cjs.entry.js +1 -1
  149. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +1 -1
  150. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +2 -2
  151. package/dist/cjs/bs-navigation-header.cjs.entry.js +2 -2
  152. package/dist/cjs/bs-page-header.cjs.entry.js +1 -1
  153. package/dist/cjs/bs-pagination.cjs.entry.js +1 -1
  154. package/dist/cjs/bs-popover.cjs.entry.js +1 -1
  155. package/dist/cjs/bs-presence.cjs.entry.js +1 -1
  156. package/dist/cjs/bs-progress-linear.cjs.entry.js +2 -2
  157. package/dist/cjs/bs-progress.cjs.entry.js +2 -2
  158. package/dist/cjs/bs-qr-code.cjs.entry.js +1 -1
  159. package/dist/cjs/bs-radio-group.cjs.entry.js +1 -1
  160. package/dist/cjs/bs-radio.cjs.entry.js +1 -1
  161. package/dist/cjs/bs-search-item.cjs.entry.js +1 -1
  162. package/dist/cjs/bs-select.cjs.entry.js +1 -1
  163. package/dist/cjs/bs-session-timeout.cjs.entry.js +1 -1
  164. package/dist/cjs/bs-shortcut-row.cjs.entry.js +1 -1
  165. package/dist/cjs/bs-skip-link.cjs.entry.js +1 -1
  166. package/dist/cjs/bs-slider.cjs.entry.js +1 -1
  167. package/dist/cjs/bs-snackbar.cjs.entry.js +1 -1
  168. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  169. package/dist/cjs/bs-split-pane.cjs.entry.js +27 -2
  170. package/dist/cjs/bs-stack.cjs.entry.js +1 -1
  171. package/dist/cjs/bs-stat.cjs.entry.js +1 -1
  172. package/dist/cjs/bs-stepper-step.cjs.entry.js +1 -1
  173. package/dist/cjs/bs-stepper.cjs.entry.js +1 -1
  174. package/dist/cjs/bs-switch.cjs.entry.js +1 -1
  175. package/dist/cjs/bs-tab_3.cjs.entry.js +3 -3
  176. package/dist/cjs/bs-table-of-contents.cjs.entry.js +1 -1
  177. package/dist/cjs/bs-tag.cjs.entry.js +2 -2
  178. package/dist/cjs/bs-text.cjs.entry.js +1 -1
  179. package/dist/cjs/bs-timepicker.cjs.entry.js +2 -2
  180. package/dist/cjs/bs-toast.cjs.entry.js +1 -1
  181. package/dist/cjs/bs-toggle-button-group.cjs.entry.js +1 -1
  182. package/dist/cjs/bs-toggle-button.cjs.entry.js +9 -1
  183. package/dist/cjs/bs-toolbar.cjs.entry.js +1 -1
  184. package/dist/cjs/bs-tooltip-trigger.cjs.entry.js +1 -1
  185. package/dist/cjs/bs-tooltip.cjs.entry.js +1 -1
  186. package/dist/cjs/bs-tree-item.cjs.entry.js +2 -2
  187. package/dist/cjs/bs-tree.cjs.entry.js +1 -1
  188. package/dist/cjs/loader.cjs.js +1 -1
  189. package/dist/collection/components/bs-accordion/bs-accordion.stories.js +25 -1
  190. package/dist/collection/components/bs-accordion-group/bs-accordion-group.js +1 -1
  191. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  192. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  193. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  194. package/dist/collection/components/bs-app-recent-item/bs-app-recent-item.js +3 -3
  195. package/dist/collection/components/bs-app-shell/bs-app-shell.js +1 -1
  196. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  197. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  198. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +1 -1
  199. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  200. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  201. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  202. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  203. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  204. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  205. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  206. package/dist/collection/components/bs-checkbox/bs-checkbox.stories.js +25 -1
  207. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.cmp.test.js +44 -0
  208. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.css +30 -0
  209. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.js +139 -7
  210. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.stories.js +7 -0
  211. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.js +1 -1
  212. package/dist/collection/components/bs-citation-preview/bs-citation-preview.js +1 -1
  213. package/dist/collection/components/bs-command-palette/bs-command-palette.js +1 -1
  214. package/dist/collection/components/bs-compact-menu-block/bs-compact-menu-block.js +1 -1
  215. package/dist/collection/components/bs-company-switcher/bs-company-switcher.js +2 -2
  216. package/dist/collection/components/bs-composer/bs-composer.js +1 -1
  217. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +1 -1
  218. package/dist/collection/components/bs-container/bs-container.js +1 -1
  219. package/dist/collection/components/bs-data-table/bs-data-table.cmp.test.js +9 -0
  220. package/dist/collection/components/bs-data-table/bs-data-table.js +24 -2
  221. package/dist/collection/components/bs-datepicker/bs-datepicker.js +1 -1
  222. package/dist/collection/components/bs-description-item/bs-description-item.js +1 -1
  223. package/dist/collection/components/bs-description-list/bs-description-list.js +1 -1
  224. package/dist/collection/components/bs-divider/bs-divider.js +1 -1
  225. package/dist/collection/components/bs-dropdown/bs-dropdown.js +1 -1
  226. package/dist/collection/components/bs-empty-state/bs-empty-state.js +1 -1
  227. package/dist/collection/components/bs-error-page/bs-error-page.js +1 -1
  228. package/dist/collection/components/bs-file-upload/bs-file-upload.js +1 -1
  229. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +1 -1
  230. package/dist/collection/components/bs-global-search/bs-global-search.js +2 -2
  231. package/dist/collection/components/bs-grid/bs-grid.js +2 -2
  232. package/dist/collection/components/bs-heading/bs-heading.js +1 -1
  233. package/dist/collection/components/bs-icon/bs-icon.js +1 -1
  234. package/dist/collection/components/bs-icon-tile/bs-icon-tile.js +2 -2
  235. package/dist/collection/components/bs-input/bs-input.cmp.test.js +12 -0
  236. package/dist/collection/components/bs-input/bs-input.js +26 -3
  237. package/dist/collection/components/bs-input/bs-input.stories.js +14 -0
  238. package/dist/collection/components/bs-key/bs-key.js +1 -1
  239. package/dist/collection/components/bs-key-caps/bs-key-caps.js +1 -1
  240. package/dist/collection/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.js +2 -2
  241. package/dist/collection/components/bs-link/bs-link.js +1 -1
  242. package/dist/collection/components/bs-list/bs-list.js +1 -1
  243. package/dist/collection/components/bs-list-item/bs-list-item.js +1 -1
  244. package/dist/collection/components/bs-mega-menu/bs-mega-menu.js +1 -1
  245. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  246. package/dist/collection/components/bs-menu-block/bs-menu-block.js +3 -3
  247. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  248. package/dist/collection/components/bs-message/bs-message.js +1 -1
  249. package/dist/collection/components/bs-message-list/bs-message-list.js +1 -1
  250. package/dist/collection/components/bs-page-header/bs-page-header.js +1 -1
  251. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  252. package/dist/collection/components/bs-popover/bs-popover.js +1 -1
  253. package/dist/collection/components/bs-presence/bs-presence.js +1 -1
  254. package/dist/collection/components/bs-progress/bs-progress.js +2 -2
  255. package/dist/collection/components/bs-progress/bs-progress.stories.js +6 -3
  256. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +2 -2
  257. package/dist/collection/components/bs-progress-linear/bs-progress-linear.stories.js +7 -5
  258. package/dist/collection/components/bs-qr-code/bs-qr-code.js +1 -1
  259. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  260. package/dist/collection/components/bs-radio-group/bs-radio-group.js +1 -1
  261. package/dist/collection/components/bs-radio-group/bs-radio-group.stories.js +15 -1
  262. package/dist/collection/components/bs-ripple/bs-ripple.js +1 -1
  263. package/dist/collection/components/bs-search-item/bs-search-item.js +1 -1
  264. package/dist/collection/components/bs-select/bs-select.js +1 -1
  265. package/dist/collection/components/bs-select/bs-select.stories.js +21 -1
  266. package/dist/collection/components/bs-session-timeout/bs-session-timeout.js +1 -1
  267. package/dist/collection/components/bs-shortcut-row/bs-shortcut-row.js +1 -1
  268. package/dist/collection/components/bs-skeleton/bs-skeleton.js +1 -1
  269. package/dist/collection/components/bs-skip-link/bs-skip-link.js +1 -1
  270. package/dist/collection/components/bs-slider/bs-slider.js +1 -1
  271. package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
  272. package/dist/collection/components/bs-source-link/bs-source-link.js +3 -3
  273. package/dist/collection/components/bs-spinner/bs-spinner.js +1 -1
  274. package/dist/collection/components/bs-split-pane/bs-split-pane.cmp.test.js +8 -0
  275. package/dist/collection/components/bs-split-pane/bs-split-pane.js +26 -1
  276. package/dist/collection/components/bs-stack/bs-stack.js +1 -1
  277. package/dist/collection/components/bs-stat/bs-stat.js +1 -1
  278. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  279. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  280. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  281. package/dist/collection/components/bs-switch/bs-switch.stories.js +33 -9
  282. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  283. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  284. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  285. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.stories.js +19 -1
  286. package/dist/collection/components/bs-table-of-contents/bs-table-of-contents.js +1 -1
  287. package/dist/collection/components/bs-tag/bs-tag.js +6 -2
  288. package/dist/collection/components/bs-text/bs-text.js +1 -1
  289. package/dist/collection/components/bs-timepicker/bs-timepicker.js +2 -2
  290. package/dist/collection/components/bs-toast/bs-toast.js +1 -1
  291. package/dist/collection/components/bs-toggle-button/bs-toggle-button.cmp.test.js +11 -0
  292. package/dist/collection/components/bs-toggle-button/bs-toggle-button.js +9 -1
  293. package/dist/collection/components/bs-toggle-button/bs-toggle-button.stories.js +1 -1
  294. package/dist/collection/components/bs-toggle-button-group/bs-toggle-button-group.js +1 -1
  295. package/dist/collection/components/bs-toggle-button-group/bs-toggle-button-group.stories.js +33 -3
  296. package/dist/collection/components/bs-toolbar/bs-toolbar.js +1 -1
  297. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  298. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.js +1 -1
  299. package/dist/collection/components/bs-tree/bs-tree.js +1 -1
  300. package/dist/collection/components/bs-tree-item/bs-tree-item.js +2 -2
  301. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.js +1 -1
  302. package/dist/collection/components/tokens/tokens.stories.js +90 -0
  303. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +2 -2
  304. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  305. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +2 -2
  306. package/dist/collection/play-utils.js +24 -0
  307. package/dist/components/bs-accordion-group.js +1 -1
  308. package/dist/components/bs-ai-disclaimer.js +1 -1
  309. package/dist/components/bs-ai-greeting.js +1 -1
  310. package/dist/components/bs-ai-thinking.js +1 -1
  311. package/dist/components/bs-app-recent-item.js +1 -1
  312. package/dist/components/bs-app-shell.js +1 -1
  313. package/dist/components/bs-app-switcher.js +1 -1
  314. package/dist/components/bs-app-tile.js +1 -1
  315. package/dist/components/bs-attachment-list.js +1 -1
  316. package/dist/components/bs-attachment.js +1 -1
  317. package/dist/components/bs-avatar.js +1 -1
  318. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  319. package/dist/components/bs-breadcrumbs.js +1 -1
  320. package/dist/components/bs-button-skeleton.js +1 -1
  321. package/dist/components/bs-button.js +1 -1
  322. package/dist/components/bs-carousel.js +1 -1
  323. package/dist/components/bs-chatbot-feedback.js +1 -1
  324. package/dist/components/bs-chatbot-header.js +1 -1
  325. package/dist/components/bs-chatbot-response-action.js +1 -1
  326. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  327. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  328. package/dist/components/bs-checkbox-skeleton.js +1 -1
  329. package/dist/components/bs-checkbox.js +1 -1
  330. package/dist/components/bs-chip-filter.js +1 -1
  331. package/dist/components/bs-chip-informative.js +1 -1
  332. package/dist/components/bs-chip-input.js +1 -1
  333. package/dist/components/bs-citation-preview.js +1 -1
  334. package/dist/components/bs-code-block.js +1 -1
  335. package/dist/components/bs-command-palette.js +1 -1
  336. package/dist/components/bs-compact-menu-block.js +1 -1
  337. package/dist/components/bs-company-switcher.js +1 -1
  338. package/dist/components/bs-composer-status-banner.js +1 -1
  339. package/dist/components/bs-composer.js +1 -1
  340. package/dist/components/bs-container.js +1 -1
  341. package/dist/components/bs-cookie-consent.js +1 -1
  342. package/dist/components/bs-data-table.js +1 -1
  343. package/dist/components/bs-datepicker.js +1 -1
  344. package/dist/components/bs-description-item.js +1 -1
  345. package/dist/components/bs-description-list.js +1 -1
  346. package/dist/components/bs-dialog.js +1 -1
  347. package/dist/components/bs-divider.js +1 -1
  348. package/dist/components/bs-dropdown.js +1 -1
  349. package/dist/components/bs-empty-state.js +1 -1
  350. package/dist/components/bs-error-page.js +1 -1
  351. package/dist/components/bs-file-upload-item.js +1 -1
  352. package/dist/components/bs-file-upload.js +1 -1
  353. package/dist/components/bs-global-search.js +1 -1
  354. package/dist/components/bs-grid.js +1 -1
  355. package/dist/components/bs-heading.js +1 -1
  356. package/dist/components/bs-icon-button.js +1 -1
  357. package/dist/components/bs-icon-tile.js +1 -1
  358. package/dist/components/bs-icon.js +1 -1
  359. package/dist/components/bs-inline-tab.js +1 -1
  360. package/dist/components/bs-input.js +1 -1
  361. package/dist/components/bs-key-caps.js +1 -1
  362. package/dist/components/bs-key.js +1 -1
  363. package/dist/components/bs-keyboard-shortcuts.js +1 -1
  364. package/dist/components/bs-link.js +1 -1
  365. package/dist/components/bs-list-item.js +1 -1
  366. package/dist/components/bs-list.js +1 -1
  367. package/dist/components/bs-mega-menu.js +1 -1
  368. package/dist/components/bs-menu-block.js +1 -1
  369. package/dist/components/bs-menu-item.js +1 -1
  370. package/dist/components/bs-menu.js +1 -1
  371. package/dist/components/bs-message-list.js +1 -1
  372. package/dist/components/bs-message.js +1 -1
  373. package/dist/components/bs-navigation-drawer-item.js +1 -1
  374. package/dist/components/bs-navigation-drawer.js +1 -1
  375. package/dist/components/bs-navigation-header.js +1 -1
  376. package/dist/components/bs-onboarding-checklist.js +1 -1
  377. package/dist/components/bs-page-header.js +1 -1
  378. package/dist/components/bs-pagination.js +1 -1
  379. package/dist/components/bs-popover.js +1 -1
  380. package/dist/components/bs-presence.js +1 -1
  381. package/dist/components/bs-product-tour.js +1 -1
  382. package/dist/components/bs-progress-linear.js +1 -1
  383. package/dist/components/bs-progress.js +1 -1
  384. package/dist/components/bs-qr-code.js +1 -1
  385. package/dist/components/bs-radio-group.js +1 -1
  386. package/dist/components/bs-radio.js +1 -1
  387. package/dist/components/bs-ripple.js +1 -1
  388. package/dist/components/bs-search-item.js +1 -1
  389. package/dist/components/bs-select.js +1 -1
  390. package/dist/components/bs-session-timeout.js +1 -1
  391. package/dist/components/bs-shortcut-row.js +1 -1
  392. package/dist/components/bs-side-panel.js +1 -1
  393. package/dist/components/bs-skeleton.js +1 -1
  394. package/dist/components/bs-skip-link.js +1 -1
  395. package/dist/components/bs-slider.js +1 -1
  396. package/dist/components/bs-snackbar.js +1 -1
  397. package/dist/components/bs-source-link.js +1 -1
  398. package/dist/components/bs-spinner.js +1 -1
  399. package/dist/components/bs-split-pane.js +1 -1
  400. package/dist/components/bs-stack.js +1 -1
  401. package/dist/components/bs-stat.js +1 -1
  402. package/dist/components/bs-stepper-step.js +1 -1
  403. package/dist/components/bs-stepper.js +1 -1
  404. package/dist/components/bs-switch.js +1 -1
  405. package/dist/components/bs-tab.js +1 -1
  406. package/dist/components/bs-table-of-contents.js +1 -1
  407. package/dist/components/bs-tabs.js +1 -1
  408. package/dist/components/bs-tag.js +1 -1
  409. package/dist/components/bs-text.js +1 -1
  410. package/dist/components/bs-timepicker.js +1 -1
  411. package/dist/components/bs-toast.js +1 -1
  412. package/dist/components/bs-toggle-button-group.js +1 -1
  413. package/dist/components/bs-toggle-button.js +1 -1
  414. package/dist/components/bs-toolbar.js +1 -1
  415. package/dist/components/bs-tooltip-trigger.js +1 -1
  416. package/dist/components/bs-tooltip.js +1 -1
  417. package/dist/components/bs-tree-item.js +1 -1
  418. package/dist/components/bs-tree.js +1 -1
  419. package/dist/components/bs-whats-new-entry.js +1 -1
  420. package/dist/components/bs-whats-new.js +1 -1
  421. package/dist/components/{p-B1Id2OKX.js → p--3dR13A5.js} +1 -1
  422. package/dist/components/{p-CJw83LkA.js → p-5OSJi5Hq.js} +1 -1
  423. package/dist/components/{p-Bn3Yxpe1.js → p-5yADpXI0.js} +1 -1
  424. package/dist/components/p-B1pqQBKC.js +1 -0
  425. package/dist/components/{p-i5Q__opK.js → p-B6bXreGu.js} +1 -1
  426. package/dist/components/{p-BabS3w3f.js → p-BDqzHL7T.js} +1 -1
  427. package/dist/components/{p-DY2EHN4U.js → p-BSaspygR.js} +1 -1
  428. package/dist/components/{p-CGFmvCoE.js → p-BYZ1TxxS.js} +1 -1
  429. package/dist/components/{p-BVX8P6fl.js → p-BenlMTiB.js} +1 -1
  430. package/dist/components/{p-BFv-3K2u.js → p-BkzRLgh4.js} +1 -1
  431. package/dist/components/{p-CWcci6TX.js → p-BpD6hqIE.js} +1 -1
  432. package/dist/components/{p-CvaS1abm.js → p-Bu47NRjs.js} +1 -1
  433. package/dist/components/{p-C7Qr4akd.js → p-C4NrLy_y.js} +1 -1
  434. package/dist/components/{p-AlcZrDeY.js → p-CA1qkJ9m.js} +1 -1
  435. package/dist/components/{p-C0RV5-An.js → p-CMhON6jB.js} +1 -1
  436. package/dist/components/{p-CFjeYXmC.js → p-Cau06t9C.js} +1 -1
  437. package/dist/components/{p-Bm1A449h.js → p-D9TQ0LLX.js} +1 -1
  438. package/dist/components/{p-DrlNm0Cv.js → p-DJqNdSU4.js} +1 -1
  439. package/dist/components/{p-hfcWxH0R.js → p-DLGXRivO.js} +1 -1
  440. package/dist/components/{p-bsKorXp2.js → p-DPIDWFCa.js} +1 -1
  441. package/dist/components/{p-C7IrV6pt.js → p-DQY3n0nR.js} +1 -1
  442. package/dist/components/{p-BanNal67.js → p-DfYJCczy.js} +1 -1
  443. package/dist/components/p-DoCH1kV9.js +1 -0
  444. package/dist/components/p-DpMqdknQ.js +1 -0
  445. package/dist/components/p-Dsyt34TD.js +1 -0
  446. package/dist/components/{p--AN2lu8b.js → p-Dx10cRTc.js} +1 -1
  447. package/dist/components/p-EQrsaDKp.js +1 -0
  448. package/dist/components/{p-BPxT7mqc.js → p-ESiaIgGU.js} +1 -1
  449. package/dist/components/p-OhKj-S2c.js +1 -0
  450. package/dist/components/{p-CrSwhBz7.js → p-TRtv6fbe.js} +1 -1
  451. package/dist/components/{p-B-gdXga9.js → p-_oStzQSx.js} +1 -1
  452. package/dist/components/{p-oc6e6_D0.js → p-bOSY8sKI.js} +1 -1
  453. package/dist/components/{p-Cm-s0vin.js → p-hjzkd-La.js} +1 -1
  454. package/dist/esm/brandsync-wc.js +1 -1
  455. package/dist/esm/bs-accordion-group.entry.js +1 -1
  456. package/dist/esm/bs-ai-disclaimer.entry.js +1 -1
  457. package/dist/esm/bs-ai-greeting.entry.js +1 -1
  458. package/dist/esm/bs-ai-thinking.entry.js +1 -1
  459. package/dist/esm/bs-app-recent-item_3.entry.js +4 -4
  460. package/dist/esm/bs-app-shell.entry.js +1 -1
  461. package/dist/esm/bs-attachment-list.entry.js +1 -1
  462. package/dist/esm/bs-breadcrumbs.entry.js +1 -1
  463. package/dist/esm/bs-button-skeleton.entry.js +1 -1
  464. package/dist/esm/bs-button_2.entry.js +1 -1
  465. package/dist/esm/bs-chatbot-feedback.entry.js +1 -1
  466. package/dist/esm/bs-chatbot-header.entry.js +1 -1
  467. package/dist/esm/bs-chatbot-response-action.entry.js +1 -1
  468. package/dist/esm/bs-chatbot-sources-drawer.entry.js +1 -1
  469. package/dist/esm/bs-chatbot-suggestion-button.entry.js +1 -1
  470. package/dist/esm/bs-checkbox-skeleton.entry.js +1 -1
  471. package/dist/esm/bs-chip-informative.entry.js +32 -3
  472. package/dist/esm/bs-chip-input.entry.js +1 -1
  473. package/dist/esm/bs-citation-preview.entry.js +1 -1
  474. package/dist/esm/bs-command-palette.entry.js +1 -1
  475. package/dist/esm/bs-compact-menu-block_2.entry.js +4 -4
  476. package/dist/esm/bs-company-switcher.entry.js +2 -2
  477. package/dist/esm/bs-composer-status-banner.entry.js +1 -1
  478. package/dist/esm/bs-composer.entry.js +1 -1
  479. package/dist/esm/bs-container.entry.js +1 -1
  480. package/dist/esm/bs-data-table.entry.js +4 -2
  481. package/dist/esm/bs-datepicker.entry.js +1 -1
  482. package/dist/esm/bs-description-item.entry.js +1 -1
  483. package/dist/esm/bs-description-list.entry.js +1 -1
  484. package/dist/esm/bs-divider.entry.js +1 -1
  485. package/dist/esm/bs-dropdown.entry.js +1 -1
  486. package/dist/esm/bs-empty-state.entry.js +1 -1
  487. package/dist/esm/bs-error-page.entry.js +1 -1
  488. package/dist/esm/bs-file-upload-item.entry.js +1 -1
  489. package/dist/esm/bs-file-upload.entry.js +1 -1
  490. package/dist/esm/bs-global-search.entry.js +2 -2
  491. package/dist/esm/bs-grid.entry.js +2 -2
  492. package/dist/esm/bs-heading.entry.js +1 -1
  493. package/dist/esm/bs-icon-button.entry.js +1 -1
  494. package/dist/esm/bs-icon-tile.entry.js +2 -2
  495. package/dist/esm/bs-icon.entry.js +1 -1
  496. package/dist/esm/bs-inline-tab.entry.js +1 -1
  497. package/dist/esm/bs-input_4.entry.js +9 -6
  498. package/dist/esm/bs-key-caps.entry.js +1 -1
  499. package/dist/esm/bs-key.entry.js +1 -1
  500. package/dist/esm/bs-keyboard-shortcuts.entry.js +2 -2
  501. package/dist/esm/bs-link.entry.js +1 -1
  502. package/dist/esm/bs-list-item.entry.js +1 -1
  503. package/dist/esm/bs-list.entry.js +1 -1
  504. package/dist/esm/bs-mega-menu.entry.js +1 -1
  505. package/dist/esm/bs-message-list.entry.js +1 -1
  506. package/dist/esm/bs-message.entry.js +1 -1
  507. package/dist/esm/bs-navigation-drawer-item.entry.js +1 -1
  508. package/dist/esm/bs-navigation-drawer.entry.js +2 -2
  509. package/dist/esm/bs-navigation-header.entry.js +2 -2
  510. package/dist/esm/bs-page-header.entry.js +1 -1
  511. package/dist/esm/bs-pagination.entry.js +1 -1
  512. package/dist/esm/bs-popover.entry.js +1 -1
  513. package/dist/esm/bs-presence.entry.js +1 -1
  514. package/dist/esm/bs-progress-linear.entry.js +2 -2
  515. package/dist/esm/bs-progress.entry.js +2 -2
  516. package/dist/esm/bs-qr-code.entry.js +1 -1
  517. package/dist/esm/bs-radio-group.entry.js +1 -1
  518. package/dist/esm/bs-radio.entry.js +1 -1
  519. package/dist/esm/bs-search-item.entry.js +1 -1
  520. package/dist/esm/bs-select.entry.js +1 -1
  521. package/dist/esm/bs-session-timeout.entry.js +1 -1
  522. package/dist/esm/bs-shortcut-row.entry.js +1 -1
  523. package/dist/esm/bs-skip-link.entry.js +1 -1
  524. package/dist/esm/bs-slider.entry.js +1 -1
  525. package/dist/esm/bs-snackbar.entry.js +1 -1
  526. package/dist/esm/bs-source-link.entry.js +3 -3
  527. package/dist/esm/bs-split-pane.entry.js +27 -2
  528. package/dist/esm/bs-stack.entry.js +1 -1
  529. package/dist/esm/bs-stat.entry.js +1 -1
  530. package/dist/esm/bs-stepper-step.entry.js +1 -1
  531. package/dist/esm/bs-stepper.entry.js +1 -1
  532. package/dist/esm/bs-switch.entry.js +1 -1
  533. package/dist/esm/bs-tab_3.entry.js +3 -3
  534. package/dist/esm/bs-table-of-contents.entry.js +1 -1
  535. package/dist/esm/bs-tag.entry.js +2 -2
  536. package/dist/esm/bs-text.entry.js +1 -1
  537. package/dist/esm/bs-timepicker.entry.js +2 -2
  538. package/dist/esm/bs-toast.entry.js +1 -1
  539. package/dist/esm/bs-toggle-button-group.entry.js +1 -1
  540. package/dist/esm/bs-toggle-button.entry.js +9 -1
  541. package/dist/esm/bs-toolbar.entry.js +1 -1
  542. package/dist/esm/bs-tooltip-trigger.entry.js +1 -1
  543. package/dist/esm/bs-tooltip.entry.js +1 -1
  544. package/dist/esm/bs-tree-item.entry.js +2 -2
  545. package/dist/esm/bs-tree.entry.js +1 -1
  546. package/dist/esm/loader.js +1 -1
  547. package/dist/types/components/bs-chip/bs-chip-informative/bs-chip-informative.d.ts +29 -5
  548. package/dist/types/components/bs-chip/bs-chip-informative/bs-chip-informative.stories.d.ts +2 -0
  549. package/dist/types/components/bs-data-table/bs-data-table.d.ts +2 -0
  550. package/dist/types/components/bs-input/bs-input.d.ts +3 -0
  551. package/dist/types/components/bs-progress/bs-progress.stories.d.ts +1 -0
  552. package/dist/types/components/bs-progress-linear/bs-progress-linear.stories.d.ts +1 -0
  553. package/dist/types/components/bs-split-pane/bs-split-pane.d.ts +3 -0
  554. package/dist/types/components/bs-tag/bs-tag.d.ts +4 -0
  555. package/dist/types/components/bs-toggle-button/bs-toggle-button.d.ts +1 -0
  556. package/dist/types/components/tokens/tokens.stories.d.ts +12 -0
  557. package/dist/types/components.d.ts +129 -16
  558. package/dist/types/play-utils.d.ts +6 -0
  559. package/dist/types/raw-css.d.ts +4 -0
  560. package/package.json +1 -1
  561. package/reference.d.ts +1 -1
  562. package/reference.json +6 -1
  563. package/dist/brandsync-wc/p-06277bb8.entry.js +0 -1
  564. package/dist/brandsync-wc/p-0d3d56ef.entry.js +0 -1
  565. package/dist/brandsync-wc/p-4865d4e1.entry.js +0 -1
  566. package/dist/brandsync-wc/p-48ce098c.entry.js +0 -1
  567. package/dist/brandsync-wc/p-6f0b5a91.entry.js +0 -1
  568. package/dist/brandsync-wc/p-80feac7e.entry.js +0 -1
  569. package/dist/brandsync-wc/p-99db8fca.entry.js +0 -1
  570. package/dist/brandsync-wc/p-bcb1730e.entry.js +0 -1
  571. package/dist/components/p-BCbaDQnq.js +0 -1
  572. package/dist/components/p-BoAmKy-C.js +0 -1
  573. package/dist/components/p-CkQ7TJdL.js +0 -1
  574. package/dist/components/p-Cz7CuNiM.js +0 -1
  575. package/dist/components/p-DE2x8-lX.js +0 -1
  576. package/dist/components/p-U9f09E0n.js +0 -1
@@ -1,5 +1,7 @@
1
1
  import { html } from "lit";
2
2
  import { componentDescription, propDescription } from "../../stories-utils";
3
+ import { expect, userEvent, waitFor } from "storybook/test";
4
+ import { ready, inShadow, recordEvents } from "../../play-utils";
3
5
  const sizes = ['md', 'lg'];
4
6
  const meta = {
5
7
  title: 'Components/bs-switch',
@@ -23,12 +25,34 @@ const meta = {
23
25
  },
24
26
  };
25
27
  export default meta;
26
- export const Default = {};
28
+ export const Default = {
29
+ play: async ({ canvasElement }) => {
30
+ const host = await ready(canvasElement, 'bs-switch');
31
+ const changes = recordEvents(host, 'bsChange');
32
+ const control = inShadow(host, 'input[role="switch"]');
33
+ await expect(control).toHaveAttribute('aria-checked', 'false');
34
+ await userEvent.click(control);
35
+ await waitFor(() => expect(control).toHaveAttribute('aria-checked', 'true'));
36
+ await expect(changes.map(e => e.detail)).toEqual([true]);
37
+ await userEvent.click(control);
38
+ await waitFor(() => expect(control).toHaveAttribute('aria-checked', 'false'));
39
+ await expect(changes.map(e => e.detail)).toEqual([true, false]);
40
+ },
41
+ };
27
42
  export const Checked = {
28
43
  args: { checked: true },
29
44
  };
30
45
  export const Disabled = {
31
46
  args: { disabled: true },
47
+ play: async ({ canvasElement }) => {
48
+ const host = await ready(canvasElement, 'bs-switch');
49
+ const changes = recordEvents(host, 'bsChange');
50
+ const control = inShadow(host, 'input[role="switch"]');
51
+ await expect(control).toBeDisabled();
52
+ await userEvent.click(control);
53
+ await expect(control).toHaveAttribute('aria-checked', 'false');
54
+ await expect(changes).toHaveLength(0);
55
+ },
32
56
  };
33
57
  export const Medium = {
34
58
  args: { size: 'md', checked: true },
@@ -46,15 +70,15 @@ export const AllCombinations = {
46
70
  <strong>Disabled</strong>
47
71
  <strong>Disabled + checked</strong>
48
72
  <strong>Md</strong>
49
- <bs-switch size="md"></bs-switch>
50
- <bs-switch size="md" checked></bs-switch>
51
- <bs-switch size="md" disabled></bs-switch>
52
- <bs-switch size="md" disabled checked></bs-switch>
73
+ <bs-switch size="md" aria-label="Md unchecked"></bs-switch>
74
+ <bs-switch size="md" aria-label="Md checked" checked></bs-switch>
75
+ <bs-switch size="md" aria-label="Md disabled" disabled></bs-switch>
76
+ <bs-switch size="md" aria-label="Md disabled and checked" disabled checked></bs-switch>
53
77
  <strong>Lg</strong>
54
- <bs-switch size="lg"></bs-switch>
55
- <bs-switch size="lg" checked></bs-switch>
56
- <bs-switch size="lg" disabled></bs-switch>
57
- <bs-switch size="lg" disabled checked></bs-switch>
78
+ <bs-switch size="lg" aria-label="Lg unchecked"></bs-switch>
79
+ <bs-switch size="lg" aria-label="Lg checked" checked></bs-switch>
80
+ <bs-switch size="lg" aria-label="Lg disabled" disabled></bs-switch>
81
+ <bs-switch size="lg" aria-label="Lg disabled and checked" disabled checked></bs-switch>
58
82
  </div>
59
83
  `,
60
84
  };
@@ -95,7 +95,7 @@ export class BsInlineTab {
95
95
  };
96
96
  render() {
97
97
  const iconOnly = this.hasIcon && !this.hasLabel;
98
- return (h("button", { key: '2b72dc07fdcc65d132a5c89fa7d20a172e1709d2', type: "button", part: "tab", role: "tab", class: `bs-inline-tab ${this.selected ? 'bs-inline-tab--selected' : ''} ${this.disabled ? 'bs-inline-tab--disabled' : ''} ${iconOnly ? 'bs-inline-tab--icon-only' : ''} ${this.hasIcon ? 'bs-inline-tab--has-icon' : ''}`, disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel, tabIndex: this.tabbable === undefined ? undefined : this.tabbable ? 0 : -1, onClick: this.onClick }, h("bs-ripple", { key: '7f05b1962383007cef24e34d782401d0bb5e0b17', part: "ripple", centered: false, disabled: this.disabled }), h("span", { key: '358ec65108c746311bb23d729f4d6461c62f3b7b', part: "icon", class: `bs-inline-tab__icon ${this.hasIcon ? 'bs-inline-tab__icon--has-content' : ''}` }, h("slot", { key: '88f3ead3ebfef0e2cad25a2cebbcc21b026b5995', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '67cbc0103d4c458113508cc61ebad5002c141ac4', part: "label", class: `bs-inline-tab__label ${this.hasLabel ? 'bs-inline-tab__label--has-content' : ''}` }, h("slot", { key: '5679e945c154f5a7cd4c4a411c4b28cd4baf3124', onSlotchange: this.onLabelSlotchange }))));
98
+ return (h("button", { key: '72a7b79df2f920240bb9e800b1a662b91481d090', type: "button", part: "tab", role: "tab", class: `bs-inline-tab ${this.selected ? 'bs-inline-tab--selected' : ''} ${this.disabled ? 'bs-inline-tab--disabled' : ''} ${iconOnly ? 'bs-inline-tab--icon-only' : ''} ${this.hasIcon ? 'bs-inline-tab--has-icon' : ''}`, disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel, tabIndex: this.tabbable === undefined ? undefined : this.tabbable ? 0 : -1, onClick: this.onClick }, h("bs-ripple", { key: '62d5478adf647dcf8e61f9cbcb8485edb355d9e2', part: "ripple", centered: false, disabled: this.disabled }), h("span", { key: 'c14a5ede027fc8b5ac941fce332451b4bf5232b6', part: "icon", class: `bs-inline-tab__icon ${this.hasIcon ? 'bs-inline-tab__icon--has-content' : ''}` }, h("slot", { key: '2997b46d314089103fe5738c0cde2600c9fa4121', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'b42c580e6468ad84c30e01b6dddd257f5d0b078d', part: "label", class: `bs-inline-tab__label ${this.hasLabel ? 'bs-inline-tab__label--has-content' : ''}` }, h("slot", { key: '99a55082aa21cca4003033e284bf9c049acc6d52', onSlotchange: this.onLabelSlotchange }))));
99
99
  }
100
100
  static get is() { return "bs-inline-tab"; }
101
101
  static get encapsulation() { return "shadow"; }
@@ -108,7 +108,7 @@ export class BsTab {
108
108
  const iconOnly = this.hasIcon && !this.hasLabel;
109
109
  const vertical = this.hasIcon && this.hasLabel && this.iconPosition === 'top';
110
110
  const showBadge = this.hasBadge && !iconOnly && !vertical;
111
- return (h("button", { key: '654e4473493ad7523de424a459eb5ef019060e69', type: "button", part: "tab", role: "tab", class: `bs-tab ${this.selected ? 'bs-tab--selected' : ''} ${this.disabled ? 'bs-tab--disabled' : ''} ${iconOnly ? 'bs-tab--icon-only' : ''} ${vertical ? 'bs-tab--vertical' : ''}`, disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel, tabIndex: this.tabbable === undefined ? undefined : this.tabbable ? 0 : -1, onClick: this.onClick }, h("bs-ripple", { key: '6de73aa7bd4aef7f835bcba421af52a8dbe84c12', part: "ripple", centered: false, disabled: this.disabled }), h("span", { key: 'b700ddfae91f06999435633b874e7a5c36f421a8', part: "icon", class: `bs-tab__icon ${this.hasIcon ? 'bs-tab__icon--has-content' : ''}` }, h("slot", { key: '9bcbf714ecc276aaf17b85f6a15821d7b1e5ad82', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'aecb0faa30a561eec6190e892c1c3efe83c01e36', part: "label", class: `bs-tab__label ${this.hasLabel ? 'bs-tab__label--has-content' : ''}` }, h("slot", { key: 'a8a593d9df938d59af43dec2639d7a55a190e83a', onSlotchange: this.onLabelSlotchange })), h("span", { key: '35d29f0572a84b49d4909532aa0a3c4087db1bfb', part: "badge", class: `bs-tab__badge ${showBadge ? 'bs-tab__badge--has-content' : ''}` }, h("slot", { key: '12caeca4d914f1ecc59331e8ce96b6424876c916', name: "badge", onSlotchange: this.onBadgeSlotchange })), h("span", { key: '5ca57ce091c8ee9e4bcc453ee2163e98a87e2b01', part: "indicator", class: "bs-tab__indicator" })));
111
+ return (h("button", { key: 'a74abcd56b3dbe37c84543b6f9c7ffca1e5519d6', type: "button", part: "tab", role: "tab", class: `bs-tab ${this.selected ? 'bs-tab--selected' : ''} ${this.disabled ? 'bs-tab--disabled' : ''} ${iconOnly ? 'bs-tab--icon-only' : ''} ${vertical ? 'bs-tab--vertical' : ''}`, disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel, tabIndex: this.tabbable === undefined ? undefined : this.tabbable ? 0 : -1, onClick: this.onClick }, h("bs-ripple", { key: 'c0d7e7a0612ca60facde0d07345406148d43dd89', part: "ripple", centered: false, disabled: this.disabled }), h("span", { key: '0decf034c01ec42325d55e071405c2ab9d84180e', part: "icon", class: `bs-tab__icon ${this.hasIcon ? 'bs-tab__icon--has-content' : ''}` }, h("slot", { key: '9bfad6e083a8df7afde382e6db551b0d59201f82', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'd9376434f2c2780dcc4f7f0fba92bec00bc8b31c', part: "label", class: `bs-tab__label ${this.hasLabel ? 'bs-tab__label--has-content' : ''}` }, h("slot", { key: '6be3d55acf8e2da19d32f2c821d2f2d956cb0e0c', onSlotchange: this.onLabelSlotchange })), h("span", { key: '9fc2c317d7dcd5fc66225b56619105897c974bf6', part: "badge", class: `bs-tab__badge ${showBadge ? 'bs-tab__badge--has-content' : ''}` }, h("slot", { key: '6174f294d93d4102f21dbff094d505b7e929cae9', name: "badge", onSlotchange: this.onBadgeSlotchange })), h("span", { key: '0723083e4b00d00111b0f0cade36de63b805185d', part: "indicator", class: "bs-tab__indicator" })));
112
112
  }
113
113
  static get is() { return "bs-tab"; }
114
114
  static get encapsulation() { return "shadow"; }
@@ -142,7 +142,7 @@ export class BsTabs {
142
142
  }
143
143
  render() {
144
144
  const vertical = this.orientation === 'vertical';
145
- return (h("div", { key: '34e3ebfc19d97609fce90bda304107bd966534a0', part: "tablist", role: "tablist", "aria-orientation": this.orientation, class: `bs-tabs bs-tabs--${this.type} ${vertical ? 'bs-tabs--vertical' : ''}` }, h("slot", { key: '12db22c05fbed6277beb93761b71021594b32a1d', onSlotchange: () => this.syncRovingTabindex() })));
145
+ return (h("div", { key: 'a48d2ee16e78ca21fce532f10c009d092d889dbb', part: "tablist", role: "tablist", "aria-orientation": this.orientation, class: `bs-tabs bs-tabs--${this.type} ${vertical ? 'bs-tabs--vertical' : ''}` }, h("slot", { key: 'd4a32f7486fdc2c86bbf6cdd9f5bb79197878d9b', onSlotchange: () => this.syncRovingTabindex() })));
146
146
  }
147
147
  static get is() { return "bs-tabs"; }
148
148
  static get encapsulation() { return "shadow"; }
@@ -1,5 +1,7 @@
1
1
  import { html } from "lit";
2
2
  import { componentDescription, propDescription } from "../../../stories-utils";
3
+ import { expect, userEvent, waitFor } from "storybook/test";
4
+ import { ready, inShadow, recordEvents } from "../../../play-utils";
3
5
  const types = ['bs-tab', 'bs-inline-tab'];
4
6
  const orientations = ['horizontal', 'vertical'];
5
7
  const tabLabels = ['Overview', 'Details', 'Settings', 'Archived'];
@@ -29,7 +31,23 @@ const meta = {
29
31
  },
30
32
  };
31
33
  export default meta;
32
- export const Default = {};
34
+ export const Default = {
35
+ play: async ({ canvasElement }) => {
36
+ const tabs = await ready(canvasElement, 'bs-tabs');
37
+ const changes = recordEvents(tabs, 'bsChange');
38
+ const tabButton = (index) => inShadow(canvasElement.querySelectorAll('bs-tab')[index], '[part="tab"]');
39
+ await expect(tabButton(0)).toHaveAttribute('aria-selected', 'true');
40
+ await userEvent.click(tabButton(1));
41
+ await waitFor(() => expect(tabButton(1)).toHaveAttribute('aria-selected', 'true'));
42
+ await expect(tabButton(0)).toHaveAttribute('aria-selected', 'false');
43
+ await expect(changes).toHaveLength(1);
44
+ await expect(tabs.value).toBe(changes[0].detail.value);
45
+ // The last tab is disabled: clicking it must not select it or emit another change.
46
+ await userEvent.click(tabButton(3));
47
+ await expect(tabButton(3)).toHaveAttribute('aria-selected', 'false');
48
+ await expect(changes).toHaveLength(1);
49
+ },
50
+ };
33
51
  export const InlineTabGroup = {
34
52
  name: 'Inline tab group',
35
53
  args: { type: 'bs-inline-tab' },
@@ -177,7 +177,7 @@ export class BsTableOfContents {
177
177
  }
178
178
  render() {
179
179
  const nodes = this.tree();
180
- return (h("nav", { key: '268a5805f66e15beedc713f655c17c53c0bf4e49', part: "container", class: "bs-toc", "aria-label": this.label }, !this.hideTitle && (h("p", { key: '40eae36371714f3d34c43eff90d7ee6e3a63722c', part: "title", id: this.titleId, class: "bs-toc__title" }, this.label)), nodes.length > 0 && this.renderList(nodes, 1), h("slot", { key: '56d428adfb4370bca0f674d018fb3844cd31a4a1', onSlotchange: this.readSlotted })));
180
+ return (h("nav", { key: 'd804da8cde3c5e97f62ce8c9d7bfba30d6a493b0', part: "container", class: "bs-toc", "aria-label": this.label }, !this.hideTitle && (h("p", { key: 'f797d4a7cb59639cede25a91b5ad3074dda98774', part: "title", id: this.titleId, class: "bs-toc__title" }, this.label)), nodes.length > 0 && this.renderList(nodes, 1), h("slot", { key: '06732b5cf28a816e4a504b3f64a699ec29c2697c', onSlotchange: this.readSlotted })));
181
181
  }
182
182
  static get is() { return "bs-table-of-contents"; }
183
183
  static get encapsulation() { return "shadow"; }
@@ -1,5 +1,9 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  /**
3
+ * @deprecated Use `bs-chip-informative` with `removable` and/or `href` instead -- it has the same colours and
4
+ * sizes plus the remove button and link option, so a separate tag component is redundant. `bs-tag` keeps
5
+ * working unchanged and will be removed in a later major version.
6
+ *
3
7
  * A small label that categorises or annotates an item (a topic, a keyword, a status of a record). It can be
4
8
  * neutral or coloured, optionally removable, and optionally a link.
5
9
  *
@@ -56,8 +60,8 @@ export class BsTag {
56
60
  };
57
61
  render() {
58
62
  const rel = this.href && this.target === '_blank' ? 'noopener noreferrer' : undefined;
59
- const label = h("slot", { key: '23fda868497edb8f251ed3e0ffb72a0b60b1674b', onSlotchange: () => (this.labelText = this.readLabel()) });
60
- return (h(Host, { key: 'e0083836e1bd71f9c976f6ede368e2af7036965f' }, h("span", { key: 'cf6951fbeb6402757317d2fff194f0812184f1ba', part: "container", class: { 'bs-tag': true, 'bs-tag--removable': this.removable } }, h("span", { key: '6922fb233c612ac5b6bdedbb21f50d0487cb6458', part: "icon", class: { 'bs-tag__icon': true, 'bs-tag__icon--visible': this.hasIcon } }, h("slot", { key: 'fbacf7c7549cbc31b6a41c9a345aeed5cfc2cdd5', name: "icon", onSlotchange: (e) => (this.hasIcon = e.target.assignedNodes().length > 0) })), this.href ? (h("a", { part: "label", class: "bs-tag__label bs-tag__label--link", href: this.href, target: this.target, rel: rel }, label)) : (h("span", { part: "label", class: "bs-tag__label" }, label)), this.removable && (h("bs-icon-button", { key: '75f28012c090cdb4ee5817f4fdde2ac0716b7e1d', part: "remove", class: "bs-tag__remove", size: "xs", variant: "subtle", ariaLabel: `${this.removeLabel} ${this.labelText}`.trim(), onClick: this.onRemove }, h("svg", { key: 'f621174e822ac00907dbed900e245d581ab61af5', viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { key: 'd7e90796fb3eac85e4c71ab267937143ebfd03ff', d: "M12.5 3.5L3.5 12.5M12.5 12.5L3.5 3.5", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" })))))));
63
+ const label = h("slot", { key: '9f9ee0444b576ad3e258c942222580112acf9278', onSlotchange: () => (this.labelText = this.readLabel()) });
64
+ return (h(Host, { key: '0e7e0b30816237f8b1ff4e188989bf5494ebe5b2' }, h("span", { key: '71a97a157c57a9e4bae9f2606f8670913d92f1e2', part: "container", class: { 'bs-tag': true, 'bs-tag--removable': this.removable } }, h("span", { key: '870efd02cc59cc348465aee33f1232660353cc25', part: "icon", class: { 'bs-tag__icon': true, 'bs-tag__icon--visible': this.hasIcon } }, h("slot", { key: '6b44752833f018db3b2c4efe72fab6db9742e017', name: "icon", onSlotchange: (e) => (this.hasIcon = e.target.assignedNodes().length > 0) })), this.href ? (h("a", { part: "label", class: "bs-tag__label bs-tag__label--link", href: this.href, target: this.target, rel: rel }, label)) : (h("span", { part: "label", class: "bs-tag__label" }, label)), this.removable && (h("bs-icon-button", { key: '4cf3c5b4f886806d56fbfe453221130186ac9130', part: "remove", class: "bs-tag__remove", size: "xs", variant: "subtle", ariaLabel: `${this.removeLabel} ${this.labelText}`.trim(), onClick: this.onRemove }, h("svg", { key: '0c3313fdfd20098b98f9d864ac3143dcd647d10a', viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { key: 'eecaf5e9b0880265a5eb64973c1b9b7b5c02ab56', d: "M12.5 3.5L3.5 12.5M12.5 12.5L3.5 3.5", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" })))))));
61
65
  }
62
66
  static get is() { return "bs-tag"; }
63
67
  static get encapsulation() { return "shadow"; }
@@ -27,7 +27,7 @@ export class BsText {
27
27
  tone = 'default';
28
28
  render() {
29
29
  const Tag = this.as;
30
- return (h(Tag, { key: 'a15f1ac4c4bd9bd2f1518046fb6297d6669fa834', part: "text", class: `bs-text bs-text--${this.variant}` }, h("slot", { key: '58682202f777666c9c454441b8f9cd279df1547b' })));
30
+ return (h(Tag, { key: '39b932702ac56ba72165816fefadecc19899b302', part: "text", class: `bs-text bs-text--${this.variant}` }, h("slot", { key: '10c274f769fdc64b6994c967eb517997f6a00742' })));
31
31
  }
32
32
  static get is() { return "bs-text"; }
33
33
  static get encapsulation() { return "shadow"; }
@@ -200,14 +200,14 @@ export class BsTimepicker {
200
200
  return (h("div", { part: "spinner", class: "bs-timepicker__spinner" }, h("button", { part: "step", type: "button", class: "bs-timepicker__step", "aria-label": stepLabel(this.increaseLabel), tabindex: -1, onClick: () => this.stepBy(col, 1) }, h("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true" }, h("path", { d: "M18 15L12 9L6 15", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }))), h("div", { part: "value", class: "bs-timepicker__value", role: "spinbutton", tabindex: 0, "aria-label": label, "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": n, "aria-valuetext": pad(n), onKeyDown: this.onKeyDown(col), onBlur: () => (this.typed = '') }, pad(n)), h("button", { part: "step", type: "button", class: "bs-timepicker__step", "aria-label": stepLabel(this.decreaseLabel), tabindex: -1, onClick: () => this.stepBy(col, -1) }, h("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true" }, h("path", { d: "M6 9L12 15L18 9", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })))));
201
201
  }
202
202
  render() {
203
- return (h("bs-card", { key: '6c39211476895cba77bd0d71720707de71a7ca77', part: "container", class: "bs-timepicker", surface: "raised" }, h("div", { key: 'bd0f8c5d6ecedc015e513385579d7a0bac411e28', class: "bs-timepicker__body" }, h("div", { key: 'f23edc581c8e9f8e71ffdeb0308b31024df9c903', part: "header", class: "bs-timepicker__header" }, h("div", { key: '59f19ab0dcafe6b9e88753d51a775e5858908521', part: "title", class: "bs-timepicker__title" }, this.heading), h("label", { key: 'f893f5004b80d81c4d24e80650c421b9a3693ee2', class: "bs-timepicker__format" }, h("span", { key: 'ab25241558e5bfb13272d3dcf988b932734ad088' }, this.formatLabel), h("bs-switch", { key: '1a10a8c9dadb2685c69f6fe8eb9f1a2a99da9947', part: "format-toggle", size: "md", ariaLabel: this.formatLabel, checked: !this.is12h, onBsChange: (ev) => (this.format = ev.detail ? '24h' : '12h') }))), h("div", { key: '2d28fa7cbc6ffd8a5571b465ebb08725721a1562', class: "bs-timepicker__divider" }), h("div", { key: 'd76698067c871ff65541c80af059361af2df6bd9', part: "selector", class: "bs-timepicker__selector" }, this.renderColumn('hour', this.hourLabel), h("div", { key: '1fb97bb0ec1304c850ed29d43043afb998de7a85', part: "separator", class: "bs-timepicker__separator", "aria-hidden": "true" }, h("svg", { key: '4394c594a84e89b7eee6cdc99924e37cccb972d5', viewBox: "0 0 4 32", fill: "currentColor" }, h("circle", { key: 'd49adf2c12c3f306e0f391e9f9ceafde48816bc0', cx: "2", cy: "10", r: "2" }), h("circle", { key: '28a40a7892cee72c14b544dbecd3876e39122978', cx: "2", cy: "22", r: "2" }))), this.renderColumn('minute', this.minuteLabel), this.is12h && (h("bs-input", { key: '6ab743da6d258633490dee94730d0aa660020546', part: "period", class: "bs-timepicker__period", type: "dropdown", label: this.periodLabel, value: this.isPm ? 'PM' : 'AM', options: [
203
+ return (h("bs-card", { key: '57964e003d5d7d6abccb13a17e759721e2aa272e', part: "container", class: "bs-timepicker", surface: "raised" }, h("div", { key: '664469ea766475d939684231e4c1c5f01afe824a', class: "bs-timepicker__body" }, h("div", { key: '75aa6484e5fd2735ef972f3a29ebba5ce89838d4', part: "header", class: "bs-timepicker__header" }, h("div", { key: '06978e8b2b3f245d723bbf8099bc542a1ffcce78', part: "title", class: "bs-timepicker__title" }, this.heading), h("label", { key: '69154fd6015f1d945adcdf954841da6bf2d4d539', class: "bs-timepicker__format" }, h("span", { key: 'f8dadb20d719f379e5f47a888706af6b2ab0202b' }, this.formatLabel), h("bs-switch", { key: '5411272d1141e5c0c9d3742c81df88f78eb113ed', part: "format-toggle", size: "md", ariaLabel: this.formatLabel, checked: !this.is12h, onBsChange: (ev) => (this.format = ev.detail ? '24h' : '12h') }))), h("div", { key: '3cb6c8ccad07ec88afab6f9f40a1115f82ed477e', class: "bs-timepicker__divider" }), h("div", { key: '54f473f57a0c498a3267cabf84db3c1a8ba285ab', part: "selector", class: "bs-timepicker__selector" }, this.renderColumn('hour', this.hourLabel), h("div", { key: '92e9520755d52e58fe4412a073748e9928b3cff7', part: "separator", class: "bs-timepicker__separator", "aria-hidden": "true" }, h("svg", { key: 'cd55a6677dd695e5e93d296302cc429d84e01887', viewBox: "0 0 4 32", fill: "currentColor" }, h("circle", { key: 'ef746f64ebb5a49ee0f56c0c50b167316aec5053', cx: "2", cy: "10", r: "2" }), h("circle", { key: '65852107527c34a4aaec9c00fca8d5be4ef2d5aa', cx: "2", cy: "22", r: "2" }))), this.renderColumn('minute', this.minuteLabel), this.is12h && (h("bs-input", { key: '9d17f6c9401969e52ff99a4b84560617c2525300', part: "period", class: "bs-timepicker__period", type: "dropdown", label: this.periodLabel, value: this.isPm ? 'PM' : 'AM', options: [
204
204
  { label: 'AM', value: 'AM' },
205
205
  { label: 'PM', value: 'PM' },
206
206
  ], onBsChange: (ev) => {
207
207
  const pm = ev.detail === 'PM';
208
208
  if (pm !== this.isPm)
209
209
  this.hour = (this.hour + 12) % 24;
210
- } }))), h("div", { key: '59c34d3ba15c1603262c8d3c08b2a6891477252d', class: "bs-timepicker__divider" }), h("div", { key: '7629f6b868857d48947f74e63991c8370e5e6431', part: "footer", class: "bs-timepicker__footer" }, h("bs-button", { key: 'c96e079ba9d3103db5e0d5e361491bbf2098486c', part: "cancel", variant: "subtle", onClick: this.cancel }, this.cancelLabel), h("bs-button", { key: '6157268548b8facf83a2efa81a85dab8d2063aef', part: "confirm", variant: "primary", onClick: this.confirm }, this.confirmLabel)))));
210
+ } }))), h("div", { key: '914705bd05bf0a3d1a8d85c671241325cc564369', class: "bs-timepicker__divider" }), h("div", { key: '1c1849dde9807f507dc0c7b1446f725f8e5971a0', part: "footer", class: "bs-timepicker__footer" }, h("bs-button", { key: '2e3bd483d598b9539b28742fba2a2dbff56a38ea', part: "cancel", variant: "subtle", onClick: this.cancel }, this.cancelLabel), h("bs-button", { key: '667c14ac6847e9d27439ea0637038deb019f0ccc', part: "confirm", variant: "primary", onClick: this.confirm }, this.confirmLabel)))));
211
211
  }
212
212
  static get is() { return "bs-timepicker"; }
213
213
  static get encapsulation() { return "shadow"; }
@@ -27,7 +27,7 @@ export class BsToast {
27
27
  this.bsDismiss.emit();
28
28
  };
29
29
  render() {
30
- return (h("div", { key: '709a8a42f030c927c032eadefbfe2e9f62a01f86', part: "container", class: `bs-toast bs-toast--${this.state}`, role: "status", "aria-live": this.state === 'error' ? 'assertive' : 'polite' }, h("div", { key: '2895b376ebe8e35ef4ae0fe6b0a943c02e2c5c83', class: "bs-toast__content" }, h("span", { key: '2b90fe16b40215eac33d92b7a05e5c86d5ed3a16', part: "icon", class: "bs-toast__icon", "aria-hidden": "true" }, h(StateIcon, { key: 'ef1016e3d1035b73110e0fe5728b41f6d2992787', state: this.state })), h("span", { key: '6c63a7d4d38fc71c66336cd1d9bbfa21b8608e7f', part: "message", class: "bs-toast__message" }, h("slot", { key: '5ba3c4fa6b524c466e0d825df6a74bb776d179ef' }))), h("div", { key: '5fdc3cb4c8b1c9c4fb9e34265e13e32ced2666d1', class: "bs-toast__actions" }, h("button", { key: 'cc647daec4eeca19cf674e72fae642cabb03ed05', part: "close", type: "button", class: "bs-toast__close", "aria-label": this.dismissLabel, onClick: this.onDismiss }, h(CloseIcon, { key: '95828c7c5248a65beaf13ffad4fd55c7530999ff' })))));
30
+ return (h("div", { key: '5bc681de86bd983ebe893b9ea8ed94b473896982', part: "container", class: `bs-toast bs-toast--${this.state}`, role: "status", "aria-live": this.state === 'error' ? 'assertive' : 'polite' }, h("div", { key: '4842f349978fedfcceb535da81e90029d98b3432', class: "bs-toast__content" }, h("span", { key: 'c396041be59b6088c2a50ef156b218c7c2cc70d0', part: "icon", class: "bs-toast__icon", "aria-hidden": "true" }, h(StateIcon, { key: '33342d2bab947b9144e2bee18abb8292c75fe339', state: this.state })), h("span", { key: 'c6b2840d95a518e5d91dc281a81a83e6442bab1b', part: "message", class: "bs-toast__message" }, h("slot", { key: '1505051e3ce412f7b6bcefd82183717f870418b5' }))), h("div", { key: '50e3f96e3f7b325b97d3cf90771374f60aa87f24', class: "bs-toast__actions" }, h("button", { key: '69962e5d154c55372b562b45e06c07b8e16ce306', part: "close", type: "button", class: "bs-toast__close", "aria-label": this.dismissLabel, onClick: this.onDismiss }, h(CloseIcon, { key: '96d3547e268179d3f4799d43bf2d71abfbe8dc07' })))));
31
31
  }
32
32
  static get is() { return "bs-toast"; }
33
33
  static get encapsulation() { return "shadow"; }
@@ -40,6 +40,17 @@ describe('bs-toggle-button', () => {
40
40
  expect(btn.getAttribute('aria-label')).toBe('Grid view');
41
41
  expect(btn).toHaveClass('bs-toggle-button--icon-only');
42
42
  });
43
+ it('is not icon-only on the very first render when it has label text', async () => {
44
+ // The class must be right before any `slotchange` fires, or the label is hidden for a frame
45
+ // and the button briefly has no accessible name.
46
+ const el = document.createElement('bs-toggle-button');
47
+ el.textContent = 'Bold';
48
+ document.body.appendChild(el);
49
+ await el.componentOnReady();
50
+ const btn = el.shadowRoot.querySelector('button');
51
+ expect(btn).not.toHaveClass('bs-toggle-button--icon-only');
52
+ el.remove();
53
+ });
43
54
  it('tabbable=false sets tabindex -1', async () => {
44
55
  const { root } = await render(h("bs-toggle-button", { tabbable: false }, "A"));
45
56
  expect(root.shadowRoot.querySelector('button').getAttribute('tabindex')).toBe('-1');
@@ -41,6 +41,14 @@ export class BsToggleButton {
41
41
  bsChange;
42
42
  hasLabel = false;
43
43
  hasIcon = false;
44
+ // Seed from the light DOM so the first render is already correct. Waiting for `slotchange` leaves
45
+ // a frame where a labelled button is styled icon-only (label hidden, so no accessible name).
46
+ componentWillLoad() {
47
+ const children = Array.from(this.el.childNodes);
48
+ const slotOf = (n) => (n.nodeType === 1 ? n.getAttribute('slot') : null);
49
+ this.hasIcon = children.some(n => slotOf(n) === 'icon');
50
+ this.hasLabel = children.some(n => slotOf(n) === null && (n.nodeType === 1 || !!n.textContent?.trim()));
51
+ }
44
52
  onIconSlotchange = (ev) => {
45
53
  this.hasIcon = ev.target.assignedNodes().length > 0;
46
54
  };
@@ -62,7 +70,7 @@ export class BsToggleButton {
62
70
  };
63
71
  render() {
64
72
  const radio = this.mode === 'radio';
65
- return (h("button", { key: '444c2161afae1af1e82ee454014c61b938ef2b23', type: "button", part: "button", class: `bs-toggle-button ${this.pressed ? 'bs-toggle-button--pressed' : ''} ${this.hasLabel ? '' : 'bs-toggle-button--icon-only'}`, role: radio ? 'radio' : undefined, "aria-pressed": radio ? undefined : String(this.pressed), "aria-checked": radio ? String(this.pressed) : undefined, "aria-label": this.ariaLabel, disabled: this.disabled, tabindex: this.tabbable ? undefined : -1, onClick: this.onClick }, h("bs-ripple", { key: '392b1d00b0d5dda96d0eb7161989579830e31cf9', part: "ripple", centered: false, disabled: this.disabled }), h("span", { key: 'b59e51d2bf13a3ea0a4eedab7dc120d07e812bc2', part: "icon", class: `bs-toggle-button__icon ${this.hasIcon ? 'bs-toggle-button__icon--has-content' : ''}` }, h("slot", { key: '34c7b4c9830b479b57aaef951423c19b551c026f', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '402c92bcd76b444df01aee9f42dfbc765fc8ec96', part: "label", class: "bs-toggle-button__label" }, h("slot", { key: 'de6cbdf862a8dbb028733e25c58312b4a707f827', onSlotchange: this.onLabelSlotchange }))));
73
+ return (h("button", { key: 'f0d0b857c75ded029be27ec9adb00d5f181a3d50', type: "button", part: "button", class: `bs-toggle-button ${this.pressed ? 'bs-toggle-button--pressed' : ''} ${this.hasLabel ? '' : 'bs-toggle-button--icon-only'}`, role: radio ? 'radio' : undefined, "aria-pressed": radio ? undefined : String(this.pressed), "aria-checked": radio ? String(this.pressed) : undefined, "aria-label": this.ariaLabel, disabled: this.disabled, tabindex: this.tabbable ? undefined : -1, onClick: this.onClick }, h("bs-ripple", { key: '4aec0e3eee4ae6a5a407833de52533fc03f6b8f3', part: "ripple", centered: false, disabled: this.disabled }), h("span", { key: '3917ef305cf87dbbda33c4770cf86e6892423b39', part: "icon", class: `bs-toggle-button__icon ${this.hasIcon ? 'bs-toggle-button__icon--has-content' : ''}` }, h("slot", { key: '4bd9d1e4da1a7a37efa980e36a07266911c04afe', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'e33eeb741ebda53df820aaec814892082fb1076d', part: "label", class: "bs-toggle-button__label" }, h("slot", { key: 'ab303182f9bcc5bb6330f59e4a1d7e2fef698db8', onSlotchange: this.onLabelSlotchange }))));
66
74
  }
67
75
  static get is() { return "bs-toggle-button"; }
68
76
  static get encapsulation() { return "shadow"; }
@@ -18,5 +18,5 @@ export const Pressed = { args: { pressed: true } };
18
18
  export const Disabled = { args: { disabled: true } };
19
19
  export const IconOnly = {
20
20
  name: 'Icon only',
21
- render: () => html `<bs-toggle-button ariaLabel="Grid view">${gridIcon}</bs-toggle-button>`,
21
+ render: () => html `<bs-toggle-button aria-label="Grid view">${gridIcon}</bs-toggle-button>`,
22
22
  };
@@ -97,7 +97,7 @@ export class BsToggleButtonGroup {
97
97
  btn?.click();
98
98
  }
99
99
  render() {
100
- return (h("div", { key: '1ca052e150356a59c2a6341a8de13a8b6a99a868', part: "group", class: "bs-toggle-button-group", role: this.multiple ? 'group' : 'radiogroup', "aria-label": this.ariaLabel, "aria-disabled": this.disabled ? 'true' : undefined }, h("slot", { key: 'e31c4ee55e0501bee85e3772e86f1e3fd326ad2a', onSlotchange: () => this.sync() })));
100
+ return (h("div", { key: '61d043efa2ecdf437d48bc2ca0b3d75f17a00b43', part: "group", class: "bs-toggle-button-group", role: this.multiple ? 'group' : 'radiogroup', "aria-label": this.ariaLabel, "aria-disabled": this.disabled ? 'true' : undefined }, h("slot", { key: '4b1c8e64b23cd54607c19b214b938e44dee99fef', onSlotchange: () => this.sync() })));
101
101
  }
102
102
  static get is() { return "bs-toggle-button-group"; }
103
103
  static get encapsulation() { return "shadow"; }
@@ -1,5 +1,7 @@
1
1
  import { html } from "lit";
2
2
  import { componentDescription, propDescription } from "../../stories-utils";
3
+ import { expect, userEvent, waitFor } from "storybook/test";
4
+ import { ready, inShadow, recordEvents } from "../../play-utils";
3
5
  const icon = (d) => html `<svg slot="icon" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d=${d} stroke="currentColor" stroke-width="1.5"/></svg>`;
4
6
  const meta = {
5
7
  title: 'Components/bs-toggle-button-group',
@@ -19,9 +21,37 @@ const meta = {
19
21
  args: { multiple: false, disabled: false, value: 'week' },
20
22
  };
21
23
  export default meta;
22
- export const Default = {};
24
+ export const Default = {
25
+ play: async ({ canvasElement }) => {
26
+ const group = await ready(canvasElement, 'bs-toggle-button-group');
27
+ const changes = recordEvents(group, 'bsChange');
28
+ const button = async (value) => {
29
+ const item = await ready(canvasElement, `bs-toggle-button[value="${value}"]`);
30
+ return inShadow(item, '[part="button"]');
31
+ };
32
+ await expect(group.value).toBe('week');
33
+ await waitFor(async () => expect(await button('week')).toHaveAttribute('aria-checked', 'true'));
34
+ // Single choice: picking one deselects the other.
35
+ await userEvent.click(await button('day'));
36
+ await waitFor(() => expect(group.value).toBe('day'));
37
+ await waitFor(async () => expect(await button('day')).toHaveAttribute('aria-checked', 'true'));
38
+ await waitFor(async () => expect(await button('week')).toHaveAttribute('aria-checked', 'false'));
39
+ await expect(changes.at(-1)?.detail).toBe('day');
40
+ },
41
+ };
23
42
  export const MultipleChoice = {
24
43
  name: 'Multiple choice',
44
+ play: async ({ canvasElement }) => {
45
+ const group = await ready(canvasElement, 'bs-toggle-button-group');
46
+ const changes = recordEvents(group, 'bsChange');
47
+ const italic = inShadow(await ready(canvasElement, 'bs-toggle-button[value="italic"]'), '[part="button"]');
48
+ await expect(italic).toHaveAttribute('aria-pressed', 'false');
49
+ // Multiple choice: adds to the existing selection instead of replacing it.
50
+ await userEvent.click(italic);
51
+ await waitFor(() => expect(italic).toHaveAttribute('aria-pressed', 'true'));
52
+ await expect([...(group.values ?? [])].sort()).toEqual(['bold', 'italic']);
53
+ await expect([...(changes.at(-1)?.detail ?? [])].sort()).toEqual(['bold', 'italic']);
54
+ },
25
55
  render: () => html `
26
56
  <bs-toggle-button-group ariaLabel="Text format" multiple .values=${['bold']}>
27
57
  <bs-toggle-button value="bold">Bold</bs-toggle-button>
@@ -34,8 +64,8 @@ export const IconOnly = {
34
64
  name: 'Icon only',
35
65
  render: () => html `
36
66
  <bs-toggle-button-group ariaLabel="Layout" value="grid">
37
- <bs-toggle-button value="list" ariaLabel="List view">${icon('M4 6h16M4 12h16M4 18h16')}</bs-toggle-button>
38
- <bs-toggle-button value="grid" ariaLabel="Grid view">${icon('M4 4h7v7H4zM13 4h7v7h-7zM4 13h7v7H4zM13 13h7v7h-7z')}</bs-toggle-button>
67
+ <bs-toggle-button value="list" aria-label="List view">${icon('M4 6h16M4 12h16M4 18h16')}</bs-toggle-button>
68
+ <bs-toggle-button value="grid" aria-label="Grid view">${icon('M4 4h7v7H4zM13 4h7v7h-7zM4 13h7v7H4zM13 13h7v7h-7z')}</bs-toggle-button>
39
69
  </bs-toggle-button-group>
40
70
  `,
41
71
  };
@@ -208,7 +208,7 @@ export class BsToolbar {
208
208
  }
209
209
  render() {
210
210
  const showOverflow = this.overflowActive();
211
- return (h("div", { key: 'ca305772db802c2c868857c29b03f0b90dfad46f', part: "container", role: "toolbar", "aria-label": this.label, "aria-orientation": this.orientation, class: `bs-toolbar bs-toolbar--${this.orientation}`, ref: el => (this.containerEl = el) }, h("div", { key: '91ddd8a5b79473d01de05c0880f74a0b4dbc9a70', part: "left", class: "bs-toolbar__group bs-toolbar__group--left" }, h("slot", { key: '57107d0c02dad6082ddb708a5184ab1f32b792e7', name: "left", onSlotchange: this.syncItems })), h("div", { key: '3877575130450cfadd5f48087cd5bc74fc0d97d2', part: "right", class: "bs-toolbar__group bs-toolbar__group--right" }, h("slot", { key: '9aa0176cbb57c372bf4c8ffaf92fbf1bfcab2aee', name: "right", onSlotchange: this.syncItems })), showOverflow && (h("bs-popover", { key: '33481714df4a931d2bb5f902d81ed11f242c53b1', part: "overflow", class: "bs-toolbar__overflow", placement: "bottom-end", hidden: this.overflowed.length === 0, ref: el => (this.popoverEl = el) }, h("bs-icon-button", { key: '5919b7506e2edcdc4af2c80fc676607a55e79d6c', slot: "trigger", variant: "subtle", size: "md", ariaLabel: this.overflowLabel, title: this.overflowLabel, ref: el => (this.triggerEl = el) }, h(MoreIcon, { key: '4f377ac2af7eb805645164df5f79d9b0ecdfb498' })), h("bs-menu", { key: '238caa865b1755ab45a9c2694c535f72199e9ebc' }, this.overflowed.map(entry => (h("bs-menu-item", { onBsSelect: () => this.activate(entry) }, entry.label))))))));
211
+ return (h("div", { key: 'f868afcd242c835df7455e1a299b7b4eeb259fac', part: "container", role: "toolbar", "aria-label": this.label, "aria-orientation": this.orientation, class: `bs-toolbar bs-toolbar--${this.orientation}`, ref: el => (this.containerEl = el) }, h("div", { key: '7fabc6343f6eac5bea9199493c86a0d6d0a36823', part: "left", class: "bs-toolbar__group bs-toolbar__group--left" }, h("slot", { key: 'f05d2cbfbe92dd3d367f05a63c2f74435e434b14', name: "left", onSlotchange: this.syncItems })), h("div", { key: '3abe008852778989a32e7b5f427fc721e19a5d3b', part: "right", class: "bs-toolbar__group bs-toolbar__group--right" }, h("slot", { key: '99f09d60839240ca98daafd867c0df55e1f1b7be', name: "right", onSlotchange: this.syncItems })), showOverflow && (h("bs-popover", { key: '03cb9fab4b0dbb951d3691e3b3adbaf579b97027', part: "overflow", class: "bs-toolbar__overflow", placement: "bottom-end", hidden: this.overflowed.length === 0, ref: el => (this.popoverEl = el) }, h("bs-icon-button", { key: 'bb379ad418223d25c65bfb3c6217f7812bae39d0', slot: "trigger", variant: "subtle", size: "md", ariaLabel: this.overflowLabel, title: this.overflowLabel, ref: el => (this.triggerEl = el) }, h(MoreIcon, { key: '934a48b6148a20f62e409a89202e33dbeaa6a0b0' })), h("bs-menu", { key: 'b00b7aeed798883576dd8241c4a83a2604861526' }, this.overflowed.map(entry => (h("bs-menu-item", { onBsSelect: () => this.activate(entry) }, entry.label))))))));
212
212
  }
213
213
  static get is() { return "bs-toolbar"; }
214
214
  static get encapsulation() { return "shadow"; }
@@ -42,7 +42,7 @@ export class BsTooltip {
42
42
  */
43
43
  placement = 'top';
44
44
  render() {
45
- return (h("div", { key: 'b873cd9f8733295d91bf062563c085225742e284', class: "bs-tooltip" }, h("span", { key: '811f91b8d71169e5646c6a7676596f5353fc05ab', part: "arrow", class: "bs-tooltip__arrow" }), h("div", { key: '680f7ca007f4dfa868ee18371ab8829524ea2e64', part: "bubble", class: "bs-tooltip__bubble" }, h("slot", { key: 'dd6d3e478e8d244f7050ac6c52cc248abe8b5889' }))));
45
+ return (h("div", { key: 'caf2503c9f387f7c66e438cec848daa77fb1b750', class: "bs-tooltip" }, h("span", { key: 'eecef927ed27fa9f4fb46eae25adc3314439ae70', part: "arrow", class: "bs-tooltip__arrow" }), h("div", { key: '5dab353dad2f1c0c09451971f9e435c63298ba0c', part: "bubble", class: "bs-tooltip__bubble" }, h("slot", { key: 'bfe731316620db86b129e64df6a0eb0671d79fa4' }))));
46
46
  }
47
47
  static get is() { return "bs-tooltip"; }
48
48
  static get encapsulation() { return "shadow"; }
@@ -107,7 +107,7 @@ export class BsTooltipTrigger {
107
107
  };
108
108
  render() {
109
109
  const show = (this.visible && !!this.text) || (this.closing && !!this.text);
110
- return (h("div", { key: '011fa829af16715e0c5d85014e9545382e535238', part: "trigger", class: "bs-tooltip-trigger", "aria-describedby": this.tooltipId, onMouseEnter: this.show, onMouseLeave: this.hide, onFocusin: this.show, onFocusout: this.hide, onKeyDown: this.onKeyDown }, h("slot", { key: '7ea208deb719672d9e81c09b589d1a603647a30d' }), h("div", { key: '9219573ef6b0b65a4ec044a1e225fdeb13c5e702', part: "tooltip", id: this.tooltipId, class: "bs-tooltip-trigger__tooltip", role: "tooltip", hidden: !show, ref: el => (this.tipEl = el) }, h("bs-tooltip", { key: '1ae3d77cec6055cfbd308ffc6b6638331fb1ee9e', ref: el => (this.bubbleEl = el) }, this.text))));
110
+ return (h("div", { key: '23dc0d2d778acade15e99d7a1ecafecafc8aeea1', part: "trigger", class: "bs-tooltip-trigger", "aria-describedby": this.tooltipId, onMouseEnter: this.show, onMouseLeave: this.hide, onFocusin: this.show, onFocusout: this.hide, onKeyDown: this.onKeyDown }, h("slot", { key: 'b51a6b71ca1f656b3e3a3a07c5bcc788bdb4abf9' }), h("div", { key: '7fa243b2d8513bb47e42c7bd3a42a68d38f9f835', part: "tooltip", id: this.tooltipId, class: "bs-tooltip-trigger__tooltip", role: "tooltip", hidden: !show, ref: el => (this.tipEl = el) }, h("bs-tooltip", { key: 'dad6fac056f96ce2e64d731b5c477aee6b1bea64', ref: el => (this.bubbleEl = el) }, this.text))));
111
111
  }
112
112
  static get is() { return "bs-tooltip-trigger"; }
113
113
  static get encapsulation() { return "shadow"; }
@@ -189,7 +189,7 @@ export class BsTree {
189
189
  e.preventDefault();
190
190
  }
191
191
  render() {
192
- return (h("div", { key: '136cc1baec52b088edfc88dbf65391b6553cb41d', part: "container", class: "bs-tree", role: "tree", "aria-label": this.ariaLabel }, h("slot", { key: '8d056b0f524d3dadea4f03b81c5e7b2637a94ae6' })));
192
+ return (h("div", { key: 'a44ab667d778f523810e576f64c9b859932c40d1', part: "container", class: "bs-tree", role: "tree", "aria-label": this.ariaLabel }, h("slot", { key: '2b9aae53d7cdd5cf276d6fea7d806337a2247842' })));
193
193
  }
194
194
  static get is() { return "bs-tree"; }
195
195
  static get encapsulation() { return "shadow"; }
@@ -93,11 +93,11 @@ export class BsTreeItem {
93
93
  const isParent = this.hasChildren;
94
94
  const managed = !!this.el.closest('bs-tree');
95
95
  const showChildren = isParent && this.expanded;
96
- return (h(Host, { key: '03682589cf5a34887e061889d758bd99fe44af7e', role: "treeitem", "aria-level": String(this.level), "aria-expanded": isParent ? String(this.expanded) : null, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : null, ...(managed || this.disabled ? {} : { tabindex: '0' }) }, h("div", { key: 'd939fe6d91686205bf41ededec514871959c0962', class: "bs-tree-item__row", style: { '--bs-tree-item-level': String(this.level) } }, h("div", { key: 'a20a86ad078cdd6ad9ad453e295e939d05e1cb33', part: "container", class: {
96
+ return (h(Host, { key: 'b11ed915ade513d084c9d45d41ccc6a74ac030ec', role: "treeitem", "aria-level": String(this.level), "aria-expanded": isParent ? String(this.expanded) : null, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : null, ...(managed || this.disabled ? {} : { tabindex: '0' }) }, h("div", { key: '35f5ea00e89ba7972a7e1dd17fb0d8bda2edfbe6', class: "bs-tree-item__row", style: { '--bs-tree-item-level': String(this.level) } }, h("div", { key: 'a48c3d314f1ba8d2caaeaf94427952de3889f96d', part: "container", class: {
97
97
  'bs-tree-item__container': true,
98
98
  'bs-tree-item__container--selected': this.selected,
99
99
  'bs-tree-item__container--disabled': this.disabled,
100
- }, onClick: this.onRowClick }, !this.disabled && h("bs-ripple", { key: '7f4d48b4fa71d17e26b2cd3a0f90e866ace4c89d', part: "ripple" }), isParent && (h("span", { key: 'ace4fc43cb4713e9bce6e6b52e06d1b0d5593d1b', part: "caret", class: { 'bs-tree-item__caret': true, 'bs-tree-item__caret--open': this.expanded }, "aria-hidden": "true", onClick: this.onCaretClick }, h(CaretRightIcon, { key: 'fdc8560db355733d451dc39cc3f180bd74503428' }))), h("span", { key: 'fb5d33b63f60c2a9a7cc818eab4f246976cf712a', class: "bs-tree-item__content" }, this.showIcon && (h("span", { key: '445d9e91bc0fde1520818727a749ff6202f2a72c', part: "icon", class: "bs-tree-item__icon", "aria-hidden": "true" }, h("slot", { key: '2ed3eec4ca215c78f7ed0b43c836267e3cbe9676', name: "icon" }, isParent ? h(FolderIcon, null) : h(FileIcon, null)))), h("span", { key: '8930c00196136ed661de224d0efa75df44684069', part: "label", class: "bs-tree-item__label" }, h("slot", { key: '98b93991c6cf28a2f8d0892699fa9e0f66c94114', name: "label" }, this.label))))), showChildren && (h("div", { key: '84a4ae3903553b0b53e3ae7e6a9bc10e30a78878', part: "group", class: "bs-tree-item__group", role: "group" }, h("slot", { key: '2215b424caf9817a165bad25bb85625aa7fd40f3' })))));
100
+ }, onClick: this.onRowClick }, !this.disabled && h("bs-ripple", { key: 'f4a3412c475a136d8cbb1992f3e72d2599e51220', part: "ripple" }), isParent && (h("span", { key: '157b2dd21a6e2e9b5442b0751b280fd2a6d5aeca', part: "caret", class: { 'bs-tree-item__caret': true, 'bs-tree-item__caret--open': this.expanded }, "aria-hidden": "true", onClick: this.onCaretClick }, h(CaretRightIcon, { key: 'cfc6494cf35d532fdcae854f7cb248f4ad530ec5' }))), h("span", { key: 'cf1792c53d54257b23710a4c1c5f42f3aa5f7a16', class: "bs-tree-item__content" }, this.showIcon && (h("span", { key: '0c140478f7f4d4e4fc33386efa010ee7e3459cf8', part: "icon", class: "bs-tree-item__icon", "aria-hidden": "true" }, h("slot", { key: '5413186d19d7b11e26bd7ac04c36e41ffd4abfcb', name: "icon" }, isParent ? h(FolderIcon, null) : h(FileIcon, null)))), h("span", { key: 'cbbdf25c5c4dac64991cd5b59ee7d0c32f30e2d9', part: "label", class: "bs-tree-item__label" }, h("slot", { key: 'cf863304a5041e080e09607cff921016a9435ae5', name: "label" }, this.label))))), showChildren && (h("div", { key: 'e0a16b7ca65e562d902b0b059329e7ce0c701f4e', part: "group", class: "bs-tree-item__group", role: "group" }, h("slot", { key: 'f77d21abe579e32b2d44f912db90ba6501e820f5' })))));
101
101
  }
102
102
  static get is() { return "bs-tree-item"; }
103
103
  static get encapsulation() { return "shadow"; }
@@ -50,7 +50,7 @@ export class BsWhatsNewEntry {
50
50
  hasImage = false;
51
51
  render() {
52
52
  const level = Math.min(6, Math.max(1, Math.trunc(Number(this.headingLevel)) || 3));
53
- return (h("div", { key: '84feaae60753eae3c9ed85a2e73be9e663813c50', class: "bs-whats-new-entry" }, (this.tag || this.date || this.unread) && (h("div", { key: 'aa57aaed80480b544f9fb4063530d20507c88e42', part: "meta", class: "bs-whats-new-entry__meta" }, this.tag && (h("bs-chip-informative", { key: '77c6e8343bb8b2861cc269a84391e71c6326c2d3', part: "tag", size: "sm", color: this.tagColor }, this.tag)), this.date && (h("span", { key: '7da15d5f57d1b16e09f5fdaf0554ac7a15721736', part: "date", class: "bs-whats-new-entry__date" }, this.date)), this.unread && (h("span", { key: '998272ae71c247c2ce37aa51f64deba6e5504b18', part: "unread", class: "bs-whats-new-entry__unread" }, h("span", { key: 'f68bad8ebff25260f3f0ef46427588b7402ace2d', class: "bs-whats-new-entry__sr-only" }, this.unreadLabel))))), h("div", { key: 'd4d73a1b0965fe19694b4a91b356e2b356ff2b1c', part: "image", class: { 'bs-whats-new-entry__image': true, 'bs-whats-new-entry__image--visible': this.hasImage } }, h("slot", { key: '2fbd8b4f5314a3d4e805cbe9c4f6d9dee2df77b3', name: "image", onSlotchange: (ev) => (this.hasImage = ev.target.assignedNodes().length > 0) })), h("div", { key: '8a1223ca6e9504e22c4da3da7baf255377c2f9cb', class: "bs-whats-new-entry__content" }, this.heading && h(`h${level}`, { part: 'heading', class: { 'bs-whats-new-entry__heading': true } }, this.heading), this.description && (h("p", { key: '0a01cb48cba1868e0ee812a81aa51beaefbe0fc3', part: "description", class: "bs-whats-new-entry__description" }, this.description)), this.actionLabel && (h("bs-button", { key: '90af1787ba0e553e3f67454928cb9f72ed86a3be', part: "action", class: "bs-whats-new-entry__action", variant: "subtle", size: "sm", onClick: () => this.bsAction.emit() }, this.actionLabel, h("svg", { key: 'fe06d8fa3ede2e14c68138539c124b97c70a6b30', slot: "end-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("path", { key: '4135e8a848a40ae92d881253573285ff84854721', d: "M5 12H19" }), h("path", { key: '3d244f4ef7a4510d601f186c171afc5764af07e4', d: "M13 6L19 12L13 18" }))))), this.divider && h("div", { key: 'f2edb7bbef5a462a5d51c7e4025f82e59514476c', part: "divider", class: "bs-whats-new-entry__divider" })));
53
+ return (h("div", { key: '9588791a73ea1dc3dd59f255127022bc8e7ca84f', class: "bs-whats-new-entry" }, (this.tag || this.date || this.unread) && (h("div", { key: 'ef7933c404e9369fa575bba61c93b9c6d0fc137f', part: "meta", class: "bs-whats-new-entry__meta" }, this.tag && (h("bs-chip-informative", { key: 'e14464ce12f087fe6e7cc9c22c1ca0cde6f13d87', part: "tag", size: "sm", color: this.tagColor }, this.tag)), this.date && (h("span", { key: '1fa80cbc1f289ddd570622dd4e888ccff056280e', part: "date", class: "bs-whats-new-entry__date" }, this.date)), this.unread && (h("span", { key: '2375dddb04e4cf90c6ae0f39cf43dcb53f7e2916', part: "unread", class: "bs-whats-new-entry__unread" }, h("span", { key: 'c71150186bfe44d01f32736c21ea0b381d01874a', class: "bs-whats-new-entry__sr-only" }, this.unreadLabel))))), h("div", { key: '59fe2922cdae6e40b8f14f4507977c9f763d24b4', part: "image", class: { 'bs-whats-new-entry__image': true, 'bs-whats-new-entry__image--visible': this.hasImage } }, h("slot", { key: '3f7be28fa279ee63967012cc50a74390a0d2854e', name: "image", onSlotchange: (ev) => (this.hasImage = ev.target.assignedNodes().length > 0) })), h("div", { key: '8e5c05f312216a68fc48fba7dd92271c443e2a65', class: "bs-whats-new-entry__content" }, this.heading && h(`h${level}`, { part: 'heading', class: { 'bs-whats-new-entry__heading': true } }, this.heading), this.description && (h("p", { key: '5699f4c1088fa2aab962cb4f966dc2ed0f45f067', part: "description", class: "bs-whats-new-entry__description" }, this.description)), this.actionLabel && (h("bs-button", { key: 'a003e06ec25ac21075d77050fdc0a072717688f0', part: "action", class: "bs-whats-new-entry__action", variant: "subtle", size: "sm", onClick: () => this.bsAction.emit() }, this.actionLabel, h("svg", { key: '487886a08b44220904edced24176aea518e8d284', slot: "end-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("path", { key: '10c8b2f40b39386f9f06a1b91a6e6d0f4a5006c9', d: "M5 12H19" }), h("path", { key: '30bffa1e6b136e035d57ad1d539b6d53ee03ef2a', d: "M13 6L19 12L13 18" }))))), this.divider && h("div", { key: '7cb0b59588e494d376a631138b5d077b3e6aaaa3', part: "divider", class: "bs-whats-new-entry__divider" })));
54
54
  }
55
55
  static get is() { return "bs-whats-new-entry"; }
56
56
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,90 @@
1
+ import { html, render as litRender } from "lit";
2
+ import tokensCss from "../../global/tokens.css?raw";
3
+ // Live reference for the design tokens (tokens.mdx). The token names are parsed out of the same
4
+ // tokens.css this package ships, so this page can't drift from it, and every value is read back
5
+ // with getComputedStyle -- so the Theme and Brand toolbar switches change what you see here.
6
+ const allNames = [...new Set([...tokensCss.matchAll(/^\s*(--bs-[a-z0-9-]+)\s*:/gm)].map(m => m[1]))];
7
+ const named = (re) => allNames.filter(n => re.test(n));
8
+ // Sort numeric scales by number, everything else alphabetically.
9
+ const byScale = (a, b) => (parseInt(a.match(/(\d+)$/)?.[1] ?? '0') - parseInt(b.match(/(\d+)$/)?.[1] ?? '0')) || a.localeCompare(b);
10
+ // Fills each [data-token] element's [data-value] child with the token's resolved value. Runs after
11
+ // render because the value depends on the active theme/brand, which only the live DOM knows.
12
+ const resolveValues = (root) => requestAnimationFrame(() => {
13
+ root.querySelectorAll('[data-token]').forEach(el => {
14
+ const out = el.querySelector('[data-value]');
15
+ if (out)
16
+ out.textContent = getComputedStyle(el).getPropertyValue(el.dataset.token).trim() || '(unset)';
17
+ });
18
+ });
19
+ // t-shirt sizes have no numeric suffix to sort on, so list them smallest to largest explicitly.
20
+ const sizeOrder = ['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl'].map(s => `--bs-font-size-${s}`);
21
+ const grid = (content) => html `<div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;">${content}</div>`;
22
+ const label = (name) => html `<div style="font:12px/1.4 var(--bs-typography-font-family-body, sans-serif);color:var(--bs-text-neutral-default);word-break:break-all;"><code>${name}</code></div>`;
23
+ const value = html `<div data-value style="font:11px/1.4 monospace;color:var(--bs-text-neutral-default);opacity:.7;"></div>`;
24
+ const colorTile = (name) => html `
25
+ <div data-token=${name} style="display:flex;flex-direction:column;gap:6px;">
26
+ <div style="height:48px;border-radius:6px;border:1px solid var(--bs-border-neutral-container, #8884);background:var(${name});"></div>
27
+ ${label(name)}${value}
28
+ </div>`;
29
+ const section = (render) => () => {
30
+ const host = document.createElement('div');
31
+ host.style.cssText = 'padding:8px;background:var(--bs-surface-base);';
32
+ litRender(render(), host);
33
+ resolveValues(host);
34
+ return host;
35
+ };
36
+ const meta = {
37
+ title: 'Guides/Tokens & Theme',
38
+ parameters: { layout: 'padded' },
39
+ };
40
+ export default meta;
41
+ export const BrandScale = {
42
+ render: section(() => grid(named(/^--bs-brand-\d+$/).sort(byScale).map(colorTile))),
43
+ };
44
+ export const Surfaces = {
45
+ render: section(() => grid(named(/^--bs-surface-[a-z0-9-]+$/).map(colorTile))),
46
+ };
47
+ export const SemanticColors = {
48
+ render: section(() => grid(named(/^--bs-color-[a-z0-9-]+$/).map(colorTile))),
49
+ };
50
+ export const TextColors = {
51
+ render: section(() => grid(named(/^--bs-text-(?!style)[a-z0-9]+(-[a-z0-9]+)*$/).filter(n => !n.includes('---')).map(name => html `
52
+ <div data-token=${name} style="display:flex;flex-direction:column;gap:6px;padding:12px;border:1px solid var(--bs-border-neutral-container, #8884);border-radius:6px;">
53
+ <div style="font:600 20px/1.2 var(--bs-typography-font-family-body, sans-serif);color:var(${name});">Aa Sample text</div>
54
+ ${label(name)}${value}
55
+ </div>`))),
56
+ };
57
+ export const Spacing = {
58
+ render: section(() => html `<div style="display:flex;flex-direction:column;gap:8px;">${named(/^--bs-spacing-\d+$/).sort(byScale).map(name => html `
59
+ <div data-token=${name} style="display:grid;grid-template-columns:230px 90px 1fr;align-items:center;gap:12px;">
60
+ ${label(name)}${value}
61
+ <div style="height:12px;width:var(${name});background:var(--bs-brand-500);border-radius:2px;"></div>
62
+ </div>`)}</div>`),
63
+ };
64
+ export const BorderRadius = {
65
+ render: section(() => grid(named(/^--bs-border-radius-[a-z0-9]+$/).sort(byScale).map(name => html `
66
+ <div data-token=${name} style="display:flex;flex-direction:column;gap:6px;">
67
+ <div style="height:64px;background:var(--bs-brand-100);border:2px solid var(--bs-brand-500);border-radius:var(${name});"></div>
68
+ ${label(name)}${value}
69
+ </div>`))),
70
+ };
71
+ export const Typography = {
72
+ render: section(() => html `
73
+ <div style="display:flex;flex-direction:column;gap:12px;">
74
+ ${sizeOrder.filter(n => allNames.includes(n)).map(name => html `
75
+ <div data-token=${name} style="display:grid;grid-template-columns:230px 90px 1fr;align-items:baseline;gap:12px;">
76
+ ${label(name)}${value}
77
+ <div style="font-size:var(${name});color:var(--bs-text-neutral-default);">The quick brown fox</div>
78
+ </div>`)}
79
+ <hr style="width:100%;border:0;border-top:1px solid var(--bs-border-neutral-container, #8884);" />
80
+ ${named(/^--bs-font-weight-[a-z]+$/).map(name => html `
81
+ <div data-token=${name} style="display:grid;grid-template-columns:230px 90px 1fr;align-items:baseline;gap:12px;">
82
+ ${label(name)}${value}
83
+ <div style="font-size:20px;font-weight:var(${name});color:var(--bs-text-neutral-default);">The quick brown fox</div>
84
+ </div>`)}
85
+ </div>`),
86
+ };
87
+ export const ZIndex = {
88
+ render: section(() => html `<table style="border-collapse:collapse;color:var(--bs-text-neutral-default);">${named(/^--bs-z-index-[a-z]+$/).map(name => html `
89
+ <tr data-token=${name}><td style="padding:4px 24px 4px 0;">${label(name)}</td><td>${value}</td></tr>`)}</table>`),
90
+ };
@@ -234,11 +234,11 @@ export class BsNavigationDrawer {
234
234
  };
235
235
  render() {
236
236
  const classes = ['bs-navigation-drawer', this.mobile ? 'bs-navigation-drawer--overlay' : '', this.overlayOpen ? 'bs-navigation-drawer--open' : ''].filter(Boolean).join(' ');
237
- return (h(Host, { key: 'ef2563170d2a1432e2361a682336ba805cdb17f8', "data-overlay": this.mobile ? '' : undefined }, this.mobile && h("div", { key: 'e7f19728083c42cb963a3b21f967434b3a864191', part: "backdrop", class: "bs-navigation-drawer__backdrop", onClick: this.requestClose }), h("nav", { key: '5059da6b91d31cd6b5e58e16426f243c0531a49d', ref: el => (this.navRef = el), class: classes, "aria-label": this.heading,
237
+ return (h(Host, { key: '7b07abf28504f339351b55602257214274139f4d', "data-overlay": this.mobile ? '' : undefined }, this.mobile && h("div", { key: '3bcf1f5e936e8ad1e90966ea70c4041f1e5ed622', part: "backdrop", class: "bs-navigation-drawer__backdrop", onClick: this.requestClose }), h("nav", { key: 'b03c07bbe26d62789f7aa753e69ccd40e87edc9e', ref: el => (this.navRef = el), class: classes, "aria-label": this.heading,
238
238
  // Stays a plain <nav> landmark in every state: ARIA does not allow role="dialog" on <nav>
239
239
  // (axe: aria-allowed-role). Modality is behavioral -- focus is held inside, the page behind is
240
240
  // scrimmed, Escape closes -- rather than announced through aria-modal.
241
- tabIndex: this.mobile ? -1 : undefined }, this.showLogo && (h("div", { key: '898721d0728cf6f8ef5d14153e80305598b274d3', part: "logo", class: "bs-navigation-drawer__logo bs-navigation-drawer__logo--full" }, h("bs-logo", { key: '08c731fb855934ce69a87b4b1ce39c23a598aa77', variant: "full", background: this.logoBackground }))), this.showLogo && (h("div", { key: 'dbeb1f6486d4110281236634e38d671b48aabee2', part: "logo", class: "bs-navigation-drawer__logo bs-navigation-drawer__logo--mark" }, h("bs-logo", { key: '01bb10c69d07a28077029bb2190f343e3fcf6096', variant: "mark", background: this.logoBackground }))), h("div", { key: 'fdafb01fa51bc0e2286715955a2d60df86f83b5a', class: "bs-navigation-drawer__title-row" }, h("span", { key: '2245aa97f4603f1b220804297e71ed14b47303bb', part: "title", class: "bs-navigation-drawer__title" }, this.heading), this.collapsible && (h("button", { key: '32fdee9dd95ec46cd40007d4a75fb16e62154399', type: "button", part: "collapse", class: "bs-navigation-drawer__collapse", "aria-label": this.collapsed ? this.expandLabel : this.collapseLabel, "aria-pressed": this.collapsed ? 'true' : 'false', onClick: this.onCollapseClick }, h(CaretLeftIcon, { key: '42cf0c78b01d55902a0ca46e670dec44197361a1' })))), h("div", { key: '0cc895bf5ddd7a02a9b284edd159b651dca3dfc4', part: "search", class: "bs-navigation-drawer__search" }, h("slot", { key: 'b0c10b8a6cca6b5c5f2ae078413bcb42900ae4ca', name: "search" })), h("button", { key: '3d45dbea4c356ec480c511f28f57a4a96a666f97', type: "button", part: "search-trigger", class: "bs-navigation-drawer__search-trigger", "aria-label": this.searchLabel, onClick: this.onSearchTriggerClick }, h(SearchIcon, { key: '0474082dfed00211ce85944e40764de680b7bedd' })), h("div", { key: '3a1a16a7696df675932a74c6b40de97654ba6658', part: "items", class: "bs-navigation-drawer__items" }, h("slot", { key: 'bf7b183fabd8179dd1ea748c1594b4ed4d64755d' })))));
241
+ tabIndex: this.mobile ? -1 : undefined }, this.showLogo && (h("div", { key: '7404af0b1b6c2d3763cdb753bae716c4f01b7d6b', part: "logo", class: "bs-navigation-drawer__logo bs-navigation-drawer__logo--full" }, h("bs-logo", { key: 'df613081072a5329ead4bea8aff55038015a24fd', variant: "full", background: this.logoBackground }))), this.showLogo && (h("div", { key: 'c96945a4ff8f1fcab7bf18d4afe799d782a9711d', part: "logo", class: "bs-navigation-drawer__logo bs-navigation-drawer__logo--mark" }, h("bs-logo", { key: '9942c8a61c17618ae2ec7e75015754b3f47ca9eb', variant: "mark", background: this.logoBackground }))), h("div", { key: '13b7941e965cd35f02d802c54323697ab11f7874', class: "bs-navigation-drawer__title-row" }, h("span", { key: 'bc8597651504dbb69c5042e3ca9f8ab5610b300f', part: "title", class: "bs-navigation-drawer__title" }, this.heading), this.collapsible && (h("button", { key: '8b4b09d267509eaa5c30cb1a074fa71620ee7563', type: "button", part: "collapse", class: "bs-navigation-drawer__collapse", "aria-label": this.collapsed ? this.expandLabel : this.collapseLabel, "aria-pressed": this.collapsed ? 'true' : 'false', onClick: this.onCollapseClick }, h(CaretLeftIcon, { key: '6db216fe74f8df40ce383fd3fcce6fb45de332d9' })))), h("div", { key: '9a7a427aff7ab9ad186790d6e95b6c2a25bd8c9f', part: "search", class: "bs-navigation-drawer__search" }, h("slot", { key: '483b570d647ede378ae9c5fa765f48c09d4bf149', name: "search" })), h("button", { key: 'a67818a27eeb2a3de81a31c57c5e80978e13b873', type: "button", part: "search-trigger", class: "bs-navigation-drawer__search-trigger", "aria-label": this.searchLabel, onClick: this.onSearchTriggerClick }, h(SearchIcon, { key: '9af8a772869ae0f87ee571556cb24adae922c142' })), h("div", { key: '840732ec91730a642040fd8eb47a2c85651ce503', part: "items", class: "bs-navigation-drawer__items" }, h("slot", { key: '2546a9541a19321c0af9c577734097736a17394c' })))));
242
242
  }
243
243
  static get is() { return "bs-navigation-drawer"; }
244
244
  static get encapsulation() { return "shadow"; }