@brandsync/wc 1.19.0 → 1.20.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 (859) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/REFERENCE.md +264 -9
  3. package/custom-elements.json +11409 -6963
  4. package/dist/brandsync-wc/brandsync-wc.css +1 -1
  5. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  6. package/dist/brandsync-wc/index.esm.js +1 -1
  7. package/dist/brandsync-wc/p-040d4755.entry.js +1 -0
  8. package/dist/brandsync-wc/{p-30ff0659.entry.js → p-050270f5.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-a688a7ca.entry.js → p-08a5e178.entry.js} +1 -1
  10. package/dist/brandsync-wc/{p-a50c5e68.entry.js → p-08d08dc9.entry.js} +1 -1
  11. package/dist/brandsync-wc/{p-568de1b0.entry.js → p-0ebb60a8.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-f3b60029.entry.js → p-0f864a4f.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-e7c80f48.entry.js → p-105c316e.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-10b8937f.entry.js → p-11fefb5a.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-313ec145.entry.js → p-13d98ec3.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-8ac86d16.entry.js → p-16f15ba5.entry.js} +1 -1
  17. package/dist/brandsync-wc/{p-42fcf134.entry.js → p-18cfec13.entry.js} +1 -1
  18. package/dist/brandsync-wc/{p-9751a12d.entry.js → p-1a549f9a.entry.js} +1 -1
  19. package/dist/brandsync-wc/{p-a28ef52e.entry.js → p-1bf8a54a.entry.js} +1 -1
  20. package/dist/brandsync-wc/{p-5371b31c.entry.js → p-1ce4395a.entry.js} +1 -1
  21. package/dist/brandsync-wc/{p-de0dfd1c.entry.js → p-1daf48b1.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-86f04e9e.entry.js → p-20dd8b76.entry.js} +1 -1
  23. package/dist/brandsync-wc/{p-391504ab.entry.js → p-2210c680.entry.js} +1 -1
  24. package/dist/brandsync-wc/{p-f10b19a8.entry.js → p-23367a4d.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-02314404.entry.js → p-238be384.entry.js} +1 -1
  26. package/dist/brandsync-wc/p-23affb5d.entry.js +1 -0
  27. package/dist/brandsync-wc/p-23b3958e.entry.js +1 -0
  28. package/dist/brandsync-wc/{p-03ad83a3.entry.js → p-2621b1b2.entry.js} +1 -1
  29. package/dist/brandsync-wc/p-28723df1.entry.js +1 -0
  30. package/dist/brandsync-wc/{p-d484e976.entry.js → p-28a34097.entry.js} +1 -1
  31. package/dist/brandsync-wc/{p-129a4de7.entry.js → p-2a96ce61.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-7160a72e.entry.js → p-2f58b161.entry.js} +1 -1
  33. package/dist/brandsync-wc/p-319b7baa.entry.js +1 -0
  34. package/dist/brandsync-wc/{p-8a606b38.entry.js → p-32004fb3.entry.js} +1 -1
  35. package/dist/brandsync-wc/{p-78c94cfe.entry.js → p-32157c7a.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-ab99b8c3.entry.js → p-32d83763.entry.js} +1 -1
  37. package/dist/brandsync-wc/{p-8b21f623.entry.js → p-338b5e39.entry.js} +1 -1
  38. package/dist/brandsync-wc/p-3f6be3f7.entry.js +1 -0
  39. package/dist/brandsync-wc/p-409cf56b.entry.js +1 -0
  40. package/dist/brandsync-wc/{p-8e107d7a.entry.js → p-452f6c13.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-527fd08d.entry.js → p-47fc5f29.entry.js} +1 -1
  42. package/dist/brandsync-wc/p-4810bcc8.entry.js +1 -0
  43. package/dist/brandsync-wc/p-484a6546.entry.js +1 -0
  44. package/dist/brandsync-wc/p-4ae7b8b9.entry.js +1 -0
  45. package/dist/brandsync-wc/p-4d6f2fec.entry.js +1 -0
  46. package/dist/brandsync-wc/{p-4ffcf41a.entry.js → p-4f19e8d8.entry.js} +1 -1
  47. package/dist/brandsync-wc/p-50a154b8.entry.js +1 -0
  48. package/dist/brandsync-wc/{p-26e0ab15.entry.js → p-50ac6889.entry.js} +1 -1
  49. package/dist/brandsync-wc/p-520b277a.entry.js +1 -0
  50. package/dist/brandsync-wc/p-53b1c545.entry.js +1 -0
  51. package/dist/brandsync-wc/{p-90d8d45f.entry.js → p-548b96f7.entry.js} +1 -1
  52. package/dist/brandsync-wc/{p-144b6ac8.entry.js → p-57ed5ac6.entry.js} +1 -1
  53. package/dist/brandsync-wc/{p-028d3244.entry.js → p-587be2c6.entry.js} +1 -1
  54. package/dist/brandsync-wc/p-5a35d573.entry.js +1 -0
  55. package/dist/brandsync-wc/p-5b48a6c7.entry.js +1 -0
  56. package/dist/brandsync-wc/{p-4d1ee16e.entry.js → p-5ea899c4.entry.js} +1 -1
  57. package/dist/brandsync-wc/p-6096900b.entry.js +1 -0
  58. package/dist/brandsync-wc/{p-fc76031e.entry.js → p-630d41ab.entry.js} +1 -1
  59. package/dist/brandsync-wc/p-66f1ca2e.entry.js +1 -0
  60. package/dist/brandsync-wc/p-69489f45.entry.js +1 -0
  61. package/dist/brandsync-wc/p-6adc9c4f.entry.js +1 -0
  62. package/dist/brandsync-wc/p-6bdd9ef9.entry.js +1 -0
  63. package/dist/brandsync-wc/{p-dc2ea372.entry.js → p-6db03e96.entry.js} +1 -1
  64. package/dist/brandsync-wc/{p-64e19200.entry.js → p-70924681.entry.js} +1 -1
  65. package/dist/brandsync-wc/p-7632f773.entry.js +1 -0
  66. package/dist/brandsync-wc/{p-590deea0.entry.js → p-78e4dd14.entry.js} +1 -1
  67. package/dist/brandsync-wc/{p-f96f45ae.entry.js → p-806bb471.entry.js} +1 -1
  68. package/dist/brandsync-wc/{p-2a8b2ac9.entry.js → p-86fdbe8f.entry.js} +1 -1
  69. package/dist/brandsync-wc/{p-8a18864a.entry.js → p-89dbb3c8.entry.js} +1 -1
  70. package/dist/brandsync-wc/{p-ebcd105d.entry.js → p-8a4d64fd.entry.js} +1 -1
  71. package/dist/brandsync-wc/p-8c83cc99.entry.js +1 -0
  72. package/dist/brandsync-wc/p-8ccd1735.entry.js +1 -0
  73. package/dist/brandsync-wc/p-8d674f11.entry.js +1 -0
  74. package/dist/brandsync-wc/{p-8d1ad4b0.entry.js → p-90442341.entry.js} +1 -1
  75. package/dist/brandsync-wc/{p-a2bfbf02.entry.js → p-9e93b482.entry.js} +1 -1
  76. package/dist/brandsync-wc/{p-020cb767.entry.js → p-9f852c8b.entry.js} +1 -1
  77. package/dist/brandsync-wc/p-Vo0zbGRB.js +1 -0
  78. package/dist/brandsync-wc/p-a1d34ff3.entry.js +1 -0
  79. package/dist/brandsync-wc/{p-15c6f0f3.entry.js → p-a3c7b4e7.entry.js} +1 -1
  80. package/dist/brandsync-wc/{p-9ba500f1.entry.js → p-a6cbb6c6.entry.js} +1 -1
  81. package/dist/brandsync-wc/{p-70a5897b.entry.js → p-a86560e6.entry.js} +1 -1
  82. package/dist/brandsync-wc/p-aa70e80c.entry.js +1 -0
  83. package/dist/brandsync-wc/{p-0dff9822.entry.js → p-b0f4cbca.entry.js} +1 -1
  84. package/dist/brandsync-wc/{p-3c6980b9.entry.js → p-b1663378.entry.js} +1 -1
  85. package/dist/brandsync-wc/{p-25914efc.entry.js → p-b1b14615.entry.js} +1 -1
  86. package/dist/brandsync-wc/{p-2389f473.entry.js → p-b7545d9b.entry.js} +1 -1
  87. package/dist/brandsync-wc/{p-d80eecf4.entry.js → p-baca1abf.entry.js} +1 -1
  88. package/dist/brandsync-wc/{p-a92c0f06.entry.js → p-bfdd135b.entry.js} +1 -1
  89. package/dist/brandsync-wc/{p-89fa7567.entry.js → p-c23e274a.entry.js} +1 -1
  90. package/dist/brandsync-wc/{p-4928c4ad.entry.js → p-c39e6be9.entry.js} +1 -1
  91. package/dist/brandsync-wc/{p-30736034.entry.js → p-c6c15b9f.entry.js} +1 -1
  92. package/dist/brandsync-wc/{p-776b677f.entry.js → p-c9888d09.entry.js} +1 -1
  93. package/dist/brandsync-wc/p-ca8a1e51.entry.js +1 -0
  94. package/dist/brandsync-wc/{p-9fa7bd83.entry.js → p-d263deec.entry.js} +1 -1
  95. package/dist/brandsync-wc/p-d555984e.entry.js +1 -0
  96. package/dist/brandsync-wc/p-d6600c7c.entry.js +1 -0
  97. package/dist/brandsync-wc/{p-e5235e76.entry.js → p-d67840f5.entry.js} +1 -1
  98. package/dist/brandsync-wc/p-d8a299a9.entry.js +1 -0
  99. package/dist/brandsync-wc/{p-f4796801.entry.js → p-dd3499ab.entry.js} +1 -1
  100. package/dist/brandsync-wc/p-debc308d.entry.js +1 -0
  101. package/dist/brandsync-wc/{p-c01e231e.entry.js → p-e18cb639.entry.js} +1 -1
  102. package/dist/brandsync-wc/{p-7bff3aa5.entry.js → p-e18e45bc.entry.js} +1 -1
  103. package/dist/brandsync-wc/{p-4c51da66.entry.js → p-e2268c96.entry.js} +1 -1
  104. package/dist/brandsync-wc/p-e4033ebc.entry.js +1 -0
  105. package/dist/brandsync-wc/{p-1e33bc10.entry.js → p-e6f57fae.entry.js} +1 -1
  106. package/dist/brandsync-wc/p-e8027825.entry.js +1 -0
  107. package/dist/brandsync-wc/{p-7c741b8d.entry.js → p-eb1b1497.entry.js} +1 -1
  108. package/dist/brandsync-wc/{p-9868ee72.entry.js → p-eb4ad606.entry.js} +1 -1
  109. package/dist/brandsync-wc/p-ecb1a27d.entry.js +1 -0
  110. package/dist/brandsync-wc/p-f229f59a.entry.js +1 -0
  111. package/dist/brandsync-wc/{p-0819add7.entry.js → p-f22d2db8.entry.js} +1 -1
  112. package/dist/brandsync-wc/{p-feb46fa6.entry.js → p-f71d7582.entry.js} +1 -1
  113. package/dist/brandsync-wc/p-fa894893.entry.js +1 -0
  114. package/dist/brandsync-wc/p-fbd204b6.entry.js +1 -0
  115. package/dist/brandsync-wc/{p-21e5d4d6.entry.js → p-fc7df528.entry.js} +1 -1
  116. package/dist/brandsync-wc/{p-27663faf.entry.js → p-fe6f71da.entry.js} +1 -1
  117. package/dist/brandsync-wc/{p-e1d30e31.entry.js → p-ff14edb6.entry.js} +1 -1
  118. package/dist/brandsync-wc/p-ff85a9d8.entry.js +1 -0
  119. package/dist/brandsync-wc/p-wz7B473u.js +3 -0
  120. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  121. package/dist/cjs/bs-accordion-group.cjs.entry.js +2 -2
  122. package/dist/cjs/bs-accordion.cjs.entry.js +1 -1
  123. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +2 -2
  124. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  125. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  126. package/dist/cjs/bs-app-recent-item_3.cjs.entry.js +5 -5
  127. package/dist/cjs/bs-app-shell.cjs.entry.js +2 -2
  128. package/dist/cjs/bs-app-switcher.cjs.entry.js +1 -1
  129. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  130. package/dist/cjs/bs-attachment.cjs.entry.js +2 -2
  131. package/dist/cjs/bs-avatar.cjs.entry.js +3 -10
  132. package/dist/cjs/bs-badge.cjs.entry.js +2 -2
  133. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +1 -1
  134. package/dist/cjs/bs-breadcrumb.cjs.entry.js +3 -3
  135. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +10 -2
  136. package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
  137. package/dist/cjs/bs-button_2.cjs.entry.js +17 -4
  138. package/dist/cjs/bs-card.cjs.entry.js +44 -3
  139. package/dist/cjs/bs-carousel.cjs.entry.js +1 -1
  140. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +3 -7
  141. package/dist/cjs/bs-chatbot-header.cjs.entry.js +3 -7
  142. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
  143. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
  144. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +3 -3
  145. package/dist/cjs/bs-checkbox-group.cjs.entry.js +80 -0
  146. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +2 -2
  147. package/dist/cjs/bs-checkbox.cjs.entry.js +1 -1
  148. package/dist/cjs/bs-chip-filter.cjs.entry.js +2 -2
  149. package/dist/cjs/bs-chip-informative.cjs.entry.js +2 -2
  150. package/dist/cjs/bs-chip-input.cjs.entry.js +2 -2
  151. package/dist/cjs/bs-citation-preview.cjs.entry.js +2 -2
  152. package/dist/cjs/bs-code-block.cjs.entry.js +75 -0
  153. package/dist/cjs/bs-command-palette.cjs.entry.js +2 -2
  154. package/dist/cjs/bs-compact-menu-block_2.cjs.entry.js +5 -5
  155. package/dist/cjs/bs-company-switcher.cjs.entry.js +3 -3
  156. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +2 -2
  157. package/dist/cjs/bs-composer.cjs.entry.js +6 -4
  158. package/dist/cjs/bs-container.cjs.entry.js +2 -2
  159. package/dist/cjs/bs-cookie-consent.cjs.entry.js +1 -1
  160. package/dist/cjs/bs-data-table.cjs.entry.js +8 -5
  161. package/dist/cjs/bs-datepicker.cjs.entry.js +2 -2
  162. package/dist/cjs/bs-description-item.cjs.entry.js +23 -0
  163. package/dist/cjs/bs-description-list.cjs.entry.js +40 -0
  164. package/dist/cjs/bs-dialog.cjs.entry.js +1 -1
  165. package/dist/cjs/bs-divider.cjs.entry.js +2 -2
  166. package/dist/cjs/bs-dropdown.cjs.entry.js +96 -0
  167. package/dist/cjs/bs-empty-state.cjs.entry.js +7 -3
  168. package/dist/cjs/bs-error-page.cjs.entry.js +2 -2
  169. package/dist/cjs/bs-file-upload-item.cjs.entry.js +2 -2
  170. package/dist/cjs/bs-file-upload.cjs.entry.js +2 -2
  171. package/dist/cjs/bs-global-search.cjs.entry.js +3 -3
  172. package/dist/cjs/bs-grid.cjs.entry.js +3 -3
  173. package/dist/cjs/bs-heading.cjs.entry.js +28 -0
  174. package/dist/cjs/bs-icon-button.cjs.entry.js +10 -3
  175. package/dist/cjs/bs-icon-tile.cjs.entry.js +3 -3
  176. package/dist/cjs/bs-icon.cjs.entry.js +35 -0
  177. package/dist/cjs/bs-inline-tab.cjs.entry.js +3 -3
  178. package/dist/cjs/bs-input_4.cjs.entry.js +794 -0
  179. package/dist/cjs/bs-key-caps.cjs.entry.js +2 -2
  180. package/dist/cjs/bs-key.cjs.entry.js +2 -2
  181. package/dist/cjs/bs-keyboard-shortcuts.cjs.entry.js +3 -3
  182. package/dist/cjs/bs-link.cjs.entry.js +52 -0
  183. package/dist/cjs/bs-list-item.cjs.entry.js +68 -0
  184. package/dist/cjs/bs-list.cjs.entry.js +9 -3
  185. package/dist/cjs/bs-logo.cjs.entry.js +1 -1
  186. package/dist/cjs/bs-mega-menu.cjs.entry.js +2 -2
  187. package/dist/cjs/bs-message-list.cjs.entry.js +2 -2
  188. package/dist/cjs/bs-message.cjs.entry.js +2 -2
  189. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +26 -5
  190. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +4 -4
  191. package/dist/cjs/bs-navigation-header.cjs.entry.js +4 -4
  192. package/dist/cjs/bs-onboarding-checklist.cjs.entry.js +1 -1
  193. package/dist/cjs/bs-page-header.cjs.entry.js +2 -2
  194. package/dist/cjs/bs-pagination.cjs.entry.js +2 -2
  195. package/dist/cjs/{bs-list-item_2.cjs.entry.js → bs-popover.cjs.entry.js} +2 -64
  196. package/dist/cjs/bs-presence.cjs.entry.js +2 -2
  197. package/dist/cjs/bs-product-tour.cjs.entry.js +1 -1
  198. package/dist/cjs/bs-progress-linear.cjs.entry.js +4 -4
  199. package/dist/cjs/bs-progress.cjs.entry.js +3 -3
  200. package/dist/cjs/bs-qr-code.cjs.entry.js +2 -2
  201. package/dist/cjs/bs-radio-group.cjs.entry.js +90 -0
  202. package/dist/cjs/bs-radio.cjs.entry.js +6 -2
  203. package/dist/cjs/bs-search-item.cjs.entry.js +2 -2
  204. package/dist/cjs/bs-select.cjs.entry.js +234 -0
  205. package/dist/cjs/bs-session-timeout.cjs.entry.js +2 -2
  206. package/dist/cjs/bs-shortcut-row.cjs.entry.js +2 -2
  207. package/dist/cjs/bs-side-panel.cjs.entry.js +1 -1
  208. package/dist/cjs/bs-skip-link.cjs.entry.js +52 -0
  209. package/dist/cjs/bs-slider.cjs.entry.js +3 -3
  210. package/dist/cjs/bs-snackbar.cjs.entry.js +3 -3
  211. package/dist/cjs/bs-source-link.cjs.entry.js +4 -4
  212. package/dist/cjs/bs-split-pane.cjs.entry.js +2 -2
  213. package/dist/cjs/bs-stack.cjs.entry.js +2 -2
  214. package/dist/cjs/bs-stat.cjs.entry.js +53 -0
  215. package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
  216. package/dist/cjs/bs-stepper.cjs.entry.js +2 -2
  217. package/dist/cjs/bs-switch.cjs.entry.js +2 -2
  218. package/dist/cjs/bs-tab_3.cjs.entry.js +16 -9
  219. package/dist/cjs/bs-table-of-contents.cjs.entry.js +171 -0
  220. package/dist/cjs/bs-tag.cjs.entry.js +51 -0
  221. package/dist/cjs/bs-text.cjs.entry.js +24 -0
  222. package/dist/cjs/bs-timepicker.cjs.entry.js +3 -3
  223. package/dist/cjs/bs-toast.cjs.entry.js +2 -2
  224. package/dist/cjs/bs-toggle-button-group.cjs.entry.js +108 -0
  225. package/dist/cjs/bs-toggle-button.cjs.entry.js +57 -0
  226. package/dist/cjs/bs-toolbar.cjs.entry.js +195 -0
  227. package/dist/cjs/bs-tooltip-trigger.cjs.entry.js +2 -2
  228. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  229. package/dist/cjs/bs-tree-item.cjs.entry.js +3 -3
  230. package/dist/cjs/bs-tree.cjs.entry.js +2 -2
  231. package/dist/cjs/bs-whats-new.cjs.entry.js +1 -1
  232. package/dist/cjs/icon-registry-DWYCqjKw.js +64 -0
  233. package/dist/cjs/{index-BYfMRtlW.js → index-BFxk-bY6.js} +1 -1
  234. package/dist/cjs/index.cjs.js +4 -0
  235. package/dist/cjs/loader.cjs.js +2 -2
  236. package/dist/collection/collection-manifest.json +19 -1
  237. package/dist/collection/components/bs-a11y.cmp.test.js +9 -0
  238. package/dist/collection/components/bs-accordion-group/bs-accordion-group.js +1 -1
  239. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  240. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  241. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  242. package/dist/collection/components/bs-app-recent-item/bs-app-recent-item.js +3 -3
  243. package/dist/collection/components/bs-app-shell/bs-app-shell.js +1 -1
  244. package/dist/collection/components/bs-attachment/bs-attachment.cmp.test.js +10 -0
  245. package/dist/collection/components/bs-attachment/bs-attachment.css +6 -6
  246. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  247. package/dist/collection/components/bs-avatar/bs-avatar.cmp.test.js +11 -1
  248. package/dist/collection/components/bs-avatar/bs-avatar.css +9 -4
  249. package/dist/collection/components/bs-avatar/bs-avatar.js +1 -8
  250. package/dist/collection/components/bs-badge/bs-badge.css +4 -1
  251. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.cmp.test.js +13 -0
  252. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.css +8 -0
  253. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.js +1 -1
  254. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +26 -1
  255. package/dist/collection/components/bs-button/bs-button/bs-button.cmp.test.js +31 -2
  256. package/dist/collection/components/bs-button/bs-button/bs-button.css +16 -18
  257. package/dist/collection/components/bs-button/bs-button/bs-button.js +102 -7
  258. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.js +43 -0
  259. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.css +32 -2
  260. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +68 -1
  261. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  262. package/dist/collection/components/bs-card/bs-card.cmp.test.js +78 -0
  263. package/dist/collection/components/bs-card/bs-card.css +75 -0
  264. package/dist/collection/components/bs-card/bs-card.js +200 -1
  265. package/dist/collection/components/bs-card/bs-card.stories.js +32 -0
  266. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.cmp.test.js +8 -0
  267. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.css +11 -8
  268. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -5
  269. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.css +2 -3
  270. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -5
  271. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  272. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  273. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.cmp.test.js +18 -0
  274. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.css +8 -2
  275. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +4 -1
  276. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  277. package/dist/collection/components/bs-checkbox-group/bs-checkbox-group.cmp.test.js +58 -0
  278. package/dist/collection/components/bs-checkbox-group/bs-checkbox-group.css +65 -0
  279. package/dist/collection/components/bs-checkbox-group/bs-checkbox-group.js +254 -0
  280. package/dist/collection/components/bs-checkbox-group/bs-checkbox-group.stories.js +34 -0
  281. package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.js +1 -1
  282. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.js +1 -1
  283. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.js +1 -1
  284. package/dist/collection/components/bs-citation-preview/bs-citation-preview.js +1 -1
  285. package/dist/collection/components/bs-code-block/bs-code-block.cmp.test.js +78 -0
  286. package/dist/collection/components/bs-code-block/bs-code-block.css +132 -0
  287. package/dist/collection/components/bs-code-block/bs-code-block.js +317 -0
  288. package/dist/collection/components/bs-code-block/bs-code-block.stories.js +56 -0
  289. package/dist/collection/components/bs-command-palette/bs-command-palette.js +1 -1
  290. package/dist/collection/components/bs-compact-menu-block/bs-compact-menu-block.js +1 -1
  291. package/dist/collection/components/bs-company-switcher/bs-company-switcher.js +2 -2
  292. package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +29 -0
  293. package/dist/collection/components/bs-composer/bs-composer.css +2 -1
  294. package/dist/collection/components/bs-composer/bs-composer.js +4 -2
  295. package/dist/collection/components/bs-composer/bs-composer.stories.js +0 -1
  296. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +1 -1
  297. package/dist/collection/components/bs-container/bs-container.js +1 -1
  298. package/dist/collection/components/bs-cookie-consent/bs-cookie-consent.cmp.test.js +1 -1
  299. package/dist/collection/components/bs-data-table/bs-data-table.cmp.test.js +39 -0
  300. package/dist/collection/components/bs-data-table/bs-data-table.css +12 -0
  301. package/dist/collection/components/bs-data-table/bs-data-table.js +34 -3
  302. package/dist/collection/components/bs-data-table/bs-data-table.stories.js +1 -1
  303. package/dist/collection/components/bs-datepicker/bs-datepicker.js +1 -1
  304. package/dist/collection/components/bs-description-item/bs-description-item.cmp.test.js +14 -0
  305. package/dist/collection/components/bs-description-item/bs-description-item.css +47 -0
  306. package/dist/collection/components/bs-description-item/bs-description-item.js +111 -0
  307. package/dist/collection/components/bs-description-list/bs-description-list.cmp.test.js +58 -0
  308. package/dist/collection/components/bs-description-list/bs-description-list.css +15 -0
  309. package/dist/collection/components/bs-description-list/bs-description-list.js +127 -0
  310. package/dist/collection/components/bs-description-list/bs-description-list.stories.js +34 -0
  311. package/dist/collection/components/bs-divider/bs-divider.js +1 -1
  312. package/dist/collection/components/bs-dropdown/bs-dropdown.cmp.test.js +135 -0
  313. package/dist/collection/components/bs-dropdown/bs-dropdown.css +3 -0
  314. package/dist/collection/components/bs-dropdown/bs-dropdown.js +218 -0
  315. package/dist/collection/components/bs-dropdown/bs-dropdown.stories.js +42 -0
  316. package/dist/collection/components/bs-empty-state/bs-empty-state.cmp.test.js +15 -0
  317. package/dist/collection/components/bs-empty-state/bs-empty-state.css +30 -1
  318. package/dist/collection/components/bs-empty-state/bs-empty-state.js +29 -1
  319. package/dist/collection/components/bs-empty-state/bs-empty-state.stories.js +24 -1
  320. package/dist/collection/components/bs-error-page/bs-error-page.js +1 -1
  321. package/dist/collection/components/bs-file-upload/bs-file-upload.js +1 -1
  322. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +1 -1
  323. package/dist/collection/components/bs-global-search/bs-global-search.js +2 -2
  324. package/dist/collection/components/bs-grid/bs-grid.js +2 -2
  325. package/dist/collection/components/bs-heading/bs-heading.cmp.test.js +38 -0
  326. package/dist/collection/components/bs-heading/bs-heading.css +42 -0
  327. package/dist/collection/components/bs-heading/bs-heading.js +154 -0
  328. package/dist/collection/components/bs-heading/bs-heading.stories.js +28 -0
  329. package/dist/collection/components/bs-icon/bs-icon.cmp.test.js +78 -0
  330. package/dist/collection/components/bs-icon/bs-icon.css +47 -0
  331. package/dist/collection/components/bs-icon/bs-icon.js +155 -0
  332. package/dist/collection/components/bs-icon/bs-icon.stories.js +52 -0
  333. package/dist/collection/components/bs-icon/icon-registry.js +58 -0
  334. package/dist/collection/components/bs-icon-tile/bs-icon-tile.js +2 -2
  335. package/dist/collection/components/bs-input/bs-input.cmp.test.js +431 -45
  336. package/dist/collection/components/bs-input/bs-input.css +196 -12
  337. package/dist/collection/components/bs-input/bs-input.js +565 -46
  338. package/dist/collection/components/bs-input/bs-input.stories.js +32 -4
  339. package/dist/collection/components/bs-key/bs-key.js +1 -1
  340. package/dist/collection/components/bs-key-caps/bs-key-caps.js +1 -1
  341. package/dist/collection/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.js +2 -2
  342. package/dist/collection/components/bs-link/bs-link.cmp.test.js +52 -0
  343. package/dist/collection/components/bs-link/bs-link.css +129 -0
  344. package/dist/collection/components/bs-link/bs-link.js +257 -0
  345. package/dist/collection/components/bs-link/bs-link.stories.js +31 -0
  346. package/dist/collection/components/bs-list/bs-list.cmp.test.js +23 -0
  347. package/dist/collection/components/bs-list/bs-list.js +32 -2
  348. package/dist/collection/components/bs-list/bs-list.stories.js +35 -2
  349. package/dist/collection/components/bs-list-item/bs-list-item.css +8 -0
  350. package/dist/collection/components/bs-list-item/bs-list-item.js +24 -1
  351. package/dist/collection/components/bs-mega-menu/bs-mega-menu.js +1 -1
  352. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  353. package/dist/collection/components/bs-menu-block/bs-menu-block.js +3 -3
  354. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  355. package/dist/collection/components/bs-message/bs-message.js +1 -1
  356. package/dist/collection/components/bs-message-list/bs-message-list.js +1 -1
  357. package/dist/collection/components/bs-page-header/bs-page-header.js +1 -1
  358. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  359. package/dist/collection/components/bs-popover/bs-popover.js +1 -1
  360. package/dist/collection/components/bs-presence/bs-presence.js +1 -1
  361. package/dist/collection/components/bs-progress/bs-progress.js +2 -2
  362. package/dist/collection/components/bs-progress-linear/bs-progress-linear.css +4 -1
  363. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +2 -2
  364. package/dist/collection/components/bs-qr-code/bs-qr-code.js +1 -1
  365. package/dist/collection/components/bs-radio/bs-radio.cmp.test.js +8 -0
  366. package/dist/collection/components/bs-radio/bs-radio.js +25 -1
  367. package/dist/collection/components/bs-radio-group/bs-radio-group.cmp.test.js +85 -0
  368. package/dist/collection/components/bs-radio-group/bs-radio-group.css +59 -0
  369. package/dist/collection/components/bs-radio-group/bs-radio-group.js +309 -0
  370. package/dist/collection/components/bs-radio-group/bs-radio-group.stories.js +35 -0
  371. package/dist/collection/components/bs-ripple/bs-ripple.js +1 -1
  372. package/dist/collection/components/bs-search-item/bs-search-item.js +1 -1
  373. package/dist/collection/components/bs-select/bs-select.cmp.test.js +108 -0
  374. package/dist/collection/components/bs-select/bs-select.css +231 -0
  375. package/dist/collection/components/bs-select/bs-select.js +506 -0
  376. package/dist/collection/components/bs-select/bs-select.stories.js +58 -0
  377. package/dist/collection/components/bs-session-timeout/bs-session-timeout.js +1 -1
  378. package/dist/collection/components/bs-shortcut-row/bs-shortcut-row.js +1 -1
  379. package/dist/collection/components/bs-skeleton/bs-skeleton.js +1 -1
  380. package/dist/collection/components/bs-skip-link/bs-skip-link.cmp.test.js +60 -0
  381. package/dist/collection/components/bs-skip-link/bs-skip-link.css +58 -0
  382. package/dist/collection/components/bs-skip-link/bs-skip-link.js +123 -0
  383. package/dist/collection/components/bs-skip-link/bs-skip-link.stories.js +27 -0
  384. package/dist/collection/components/bs-slider/bs-slider.cmp.test.js +13 -0
  385. package/dist/collection/components/bs-slider/bs-slider.css +3 -2
  386. package/dist/collection/components/bs-slider/bs-slider.js +1 -1
  387. package/dist/collection/components/bs-snackbar/bs-snackbar.cmp.test.js +22 -0
  388. package/dist/collection/components/bs-snackbar/bs-snackbar.css +23 -0
  389. package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
  390. package/dist/collection/components/bs-source-link/bs-source-link.js +3 -3
  391. package/dist/collection/components/bs-spinner/bs-spinner.js +1 -1
  392. package/dist/collection/components/bs-split-pane/bs-split-pane.js +1 -1
  393. package/dist/collection/components/bs-stack/bs-stack.js +1 -1
  394. package/dist/collection/components/bs-stat/bs-stat.cmp.test.js +49 -0
  395. package/dist/collection/components/bs-stat/bs-stat.css +116 -0
  396. package/dist/collection/components/bs-stat/bs-stat.js +284 -0
  397. package/dist/collection/components/bs-stat/bs-stat.stories.js +44 -0
  398. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  399. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  400. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  401. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.css +2 -2
  402. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  403. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.js +0 -4
  404. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  405. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.cmp.test.js +35 -0
  406. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.css +6 -2
  407. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +13 -6
  408. package/dist/collection/components/bs-table-of-contents/bs-table-of-contents.cmp.test.js +125 -0
  409. package/dist/collection/components/bs-table-of-contents/bs-table-of-contents.css +115 -0
  410. package/dist/collection/components/bs-table-of-contents/bs-table-of-contents.js +392 -0
  411. package/dist/collection/components/bs-table-of-contents/bs-table-of-contents.stories.js +58 -0
  412. package/dist/collection/components/bs-tag/bs-tag.cmp.test.js +66 -0
  413. package/dist/collection/components/bs-tag/bs-tag.css +101 -0
  414. package/dist/collection/components/bs-tag/bs-tag.js +233 -0
  415. package/dist/collection/components/bs-tag/bs-tag.stories.js +59 -0
  416. package/dist/collection/components/bs-text/bs-text.cmp.test.js +33 -0
  417. package/dist/collection/components/bs-text/bs-text.css +48 -0
  418. package/dist/collection/components/bs-text/bs-text.js +126 -0
  419. package/dist/collection/components/bs-text/bs-text.stories.js +25 -0
  420. package/dist/collection/components/bs-timepicker/bs-timepicker.js +2 -2
  421. package/dist/collection/components/bs-toast/bs-toast.js +1 -1
  422. package/dist/collection/components/bs-toggle-button/bs-toggle-button.cmp.test.js +47 -0
  423. package/dist/collection/components/bs-toggle-button/bs-toggle-button.css +125 -0
  424. package/dist/collection/components/bs-toggle-button/bs-toggle-button.js +234 -0
  425. package/dist/collection/components/bs-toggle-button/bs-toggle-button.stories.js +22 -0
  426. package/dist/collection/components/bs-toggle-button-group/bs-toggle-button-group.cmp.test.js +69 -0
  427. package/dist/collection/components/bs-toggle-button-group/bs-toggle-button-group.css +43 -0
  428. package/dist/collection/components/bs-toggle-button-group/bs-toggle-button-group.js +264 -0
  429. package/dist/collection/components/bs-toggle-button-group/bs-toggle-button-group.stories.js +42 -0
  430. package/dist/collection/components/bs-toolbar/bs-toolbar.cmp.test.js +149 -0
  431. package/dist/collection/components/bs-toolbar/bs-toolbar.css +82 -0
  432. package/dist/collection/components/bs-toolbar/bs-toolbar.js +345 -0
  433. package/dist/collection/components/bs-toolbar/bs-toolbar.stories.js +49 -0
  434. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  435. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.js +1 -1
  436. package/dist/collection/components/bs-tree/bs-tree.js +1 -1
  437. package/dist/collection/components/bs-tree-item/bs-tree-item.js +2 -2
  438. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.js +1 -1
  439. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +25 -0
  440. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.css +2 -2
  441. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +2 -2
  442. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.js +58 -0
  443. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.css +10 -2
  444. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +63 -4
  445. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.js +42 -9
  446. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.css +44 -37
  447. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +2 -2
  448. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.js +22 -0
  449. package/dist/collection/index.js +1 -0
  450. package/dist/collection/test/helpers/block-link-navigation.js +13 -0
  451. package/dist/collection/test/helpers/contrast.js +57 -0
  452. package/dist/components/bs-accordion-group.js +1 -1
  453. package/dist/components/bs-accordion.js +1 -1
  454. package/dist/components/bs-ai-disclaimer.js +1 -1
  455. package/dist/components/bs-ai-greeting.js +1 -1
  456. package/dist/components/bs-ai-thinking.js +1 -1
  457. package/dist/components/bs-app-recent-item.js +1 -1
  458. package/dist/components/bs-app-shell.js +1 -1
  459. package/dist/components/bs-app-switcher.js +1 -1
  460. package/dist/components/bs-app-tile.js +1 -1
  461. package/dist/components/bs-attachment-list.js +1 -1
  462. package/dist/components/bs-attachment.js +1 -1
  463. package/dist/components/bs-avatar.js +1 -1
  464. package/dist/components/bs-badge.js +1 -1
  465. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  466. package/dist/components/bs-breadcrumb.js +1 -1
  467. package/dist/components/bs-breadcrumbs.js +1 -1
  468. package/dist/components/bs-button-skeleton.js +1 -1
  469. package/dist/components/bs-button.js +1 -1
  470. package/dist/components/bs-card.js +1 -1
  471. package/dist/components/bs-carousel.js +1 -1
  472. package/dist/components/bs-chatbot-feedback.js +1 -1
  473. package/dist/components/bs-chatbot-header.js +1 -1
  474. package/dist/components/bs-chatbot-response-action.js +1 -1
  475. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  476. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  477. package/dist/components/bs-checkbox-group.d.ts +11 -0
  478. package/dist/components/bs-checkbox-group.js +1 -0
  479. package/dist/components/bs-checkbox-skeleton.js +1 -1
  480. package/dist/components/bs-checkbox.js +1 -1
  481. package/dist/components/bs-chip-filter.js +1 -1
  482. package/dist/components/bs-chip-informative.js +1 -1
  483. package/dist/components/bs-chip-input.js +1 -1
  484. package/dist/components/bs-citation-preview.js +1 -1
  485. package/dist/components/bs-code-block.d.ts +11 -0
  486. package/dist/components/bs-code-block.js +1 -0
  487. package/dist/components/bs-command-palette.js +1 -1
  488. package/dist/components/bs-compact-menu-block.js +1 -1
  489. package/dist/components/bs-company-switcher.js +1 -1
  490. package/dist/components/bs-composer-status-banner.js +1 -1
  491. package/dist/components/bs-composer.js +1 -1
  492. package/dist/components/bs-container.js +1 -1
  493. package/dist/components/bs-cookie-consent.js +1 -1
  494. package/dist/components/bs-data-table.js +1 -1
  495. package/dist/components/bs-datepicker.js +1 -1
  496. package/dist/components/bs-description-item.d.ts +11 -0
  497. package/dist/components/bs-description-item.js +1 -0
  498. package/dist/components/bs-description-list.d.ts +11 -0
  499. package/dist/components/bs-description-list.js +1 -0
  500. package/dist/components/bs-dialog.js +1 -1
  501. package/dist/components/bs-divider.js +1 -1
  502. package/dist/components/bs-dropdown.d.ts +11 -0
  503. package/dist/components/bs-dropdown.js +1 -0
  504. package/dist/components/bs-empty-state.js +1 -1
  505. package/dist/components/bs-error-page.js +1 -1
  506. package/dist/components/bs-file-upload-item.js +1 -1
  507. package/dist/components/bs-file-upload.js +1 -1
  508. package/dist/components/bs-global-search.js +1 -1
  509. package/dist/components/bs-grid.js +1 -1
  510. package/dist/components/bs-heading.d.ts +11 -0
  511. package/dist/components/bs-heading.js +1 -0
  512. package/dist/components/bs-icon-button.js +1 -1
  513. package/dist/components/bs-icon-tile.js +1 -1
  514. package/dist/components/bs-icon.d.ts +11 -0
  515. package/dist/components/bs-icon.js +1 -0
  516. package/dist/components/bs-inline-tab.js +1 -1
  517. package/dist/components/bs-input.js +1 -1
  518. package/dist/components/bs-key-caps.js +1 -1
  519. package/dist/components/bs-key.js +1 -1
  520. package/dist/components/bs-keyboard-shortcuts.js +1 -1
  521. package/dist/components/bs-link.d.ts +11 -0
  522. package/dist/components/bs-link.js +1 -0
  523. package/dist/components/bs-list-item.js +1 -1
  524. package/dist/components/bs-list.js +1 -1
  525. package/dist/components/bs-logo.js +1 -1
  526. package/dist/components/bs-mega-menu.js +1 -1
  527. package/dist/components/bs-menu-block.js +1 -1
  528. package/dist/components/bs-menu-item.js +1 -1
  529. package/dist/components/bs-menu.js +1 -1
  530. package/dist/components/bs-message-list.js +1 -1
  531. package/dist/components/bs-message.js +1 -1
  532. package/dist/components/bs-navigation-drawer-item.js +1 -1
  533. package/dist/components/bs-navigation-drawer.js +1 -1
  534. package/dist/components/bs-navigation-header.js +1 -1
  535. package/dist/components/bs-onboarding-checklist.js +1 -1
  536. package/dist/components/bs-page-header.js +1 -1
  537. package/dist/components/bs-pagination.js +1 -1
  538. package/dist/components/bs-popover.js +1 -1
  539. package/dist/components/bs-presence.js +1 -1
  540. package/dist/components/bs-product-tour.js +1 -1
  541. package/dist/components/bs-progress-linear.js +1 -1
  542. package/dist/components/bs-progress.js +1 -1
  543. package/dist/components/bs-qr-code.js +1 -1
  544. package/dist/components/bs-radio-group.d.ts +11 -0
  545. package/dist/components/bs-radio-group.js +1 -0
  546. package/dist/components/bs-radio.js +1 -1
  547. package/dist/components/bs-ripple.js +1 -1
  548. package/dist/components/bs-search-item.js +1 -1
  549. package/dist/components/bs-select.d.ts +11 -0
  550. package/dist/components/bs-select.js +1 -0
  551. package/dist/components/bs-session-timeout.js +1 -1
  552. package/dist/components/bs-shortcut-row.js +1 -1
  553. package/dist/components/bs-side-panel.js +1 -1
  554. package/dist/components/bs-skeleton.js +1 -1
  555. package/dist/components/bs-skip-link.d.ts +11 -0
  556. package/dist/components/bs-skip-link.js +1 -0
  557. package/dist/components/bs-slider.js +1 -1
  558. package/dist/components/bs-snackbar.js +1 -1
  559. package/dist/components/bs-source-link.js +1 -1
  560. package/dist/components/bs-spinner.js +1 -1
  561. package/dist/components/bs-split-pane.js +1 -1
  562. package/dist/components/bs-stack.js +1 -1
  563. package/dist/components/bs-stat.d.ts +11 -0
  564. package/dist/components/bs-stat.js +1 -0
  565. package/dist/components/bs-stepper-step.js +1 -1
  566. package/dist/components/bs-stepper.js +1 -1
  567. package/dist/components/bs-switch.js +1 -1
  568. package/dist/components/bs-tab.js +1 -1
  569. package/dist/components/bs-table-of-contents.d.ts +11 -0
  570. package/dist/components/bs-table-of-contents.js +1 -0
  571. package/dist/components/bs-tabs.js +1 -1
  572. package/dist/components/bs-tag.d.ts +11 -0
  573. package/dist/components/bs-tag.js +1 -0
  574. package/dist/components/bs-text.d.ts +11 -0
  575. package/dist/components/bs-text.js +1 -0
  576. package/dist/components/bs-timepicker.js +1 -1
  577. package/dist/components/bs-toast.js +1 -1
  578. package/dist/components/bs-toggle-button-group.d.ts +11 -0
  579. package/dist/components/bs-toggle-button-group.js +1 -0
  580. package/dist/components/bs-toggle-button.d.ts +11 -0
  581. package/dist/components/bs-toggle-button.js +1 -0
  582. package/dist/components/bs-toolbar.d.ts +11 -0
  583. package/dist/components/bs-toolbar.js +1 -0
  584. package/dist/components/bs-tooltip-trigger.js +1 -1
  585. package/dist/components/bs-tooltip.js +1 -1
  586. package/dist/components/bs-tree-item.js +1 -1
  587. package/dist/components/bs-tree.js +1 -1
  588. package/dist/components/bs-whats-new-entry.js +1 -1
  589. package/dist/components/bs-whats-new.js +1 -1
  590. package/dist/components/index.js +1 -1
  591. package/dist/components/{p-CFR3Q0io.js → p-BB1HiIxJ.js} +1 -1
  592. package/dist/components/p-BLJL4BVY.js +1 -0
  593. package/dist/components/{p-D5eN9Lfa.js → p-BR7C-aKy.js} +1 -1
  594. package/dist/components/{p-D3PuUD8Z.js → p-Ba8J2kHD.js} +1 -1
  595. package/dist/components/p-CALH_mHQ.js +1 -0
  596. package/dist/components/{p-lPTgyF9v.js → p-CL99S8-7.js} +1 -1
  597. package/dist/components/{p-BpkPo4ay.js → p-CXv8kx8w.js} +1 -1
  598. package/dist/components/{p-Dj393s3S.js → p-CZfbB-t_.js} +1 -1
  599. package/dist/components/p-CcAX4o5o.js +1 -0
  600. package/dist/components/{p-DXwatzvM.js → p-CePOtLtZ.js} +1 -1
  601. package/dist/components/{p-6Rr9bjVN.js → p-Cso2DKAz.js} +1 -1
  602. package/dist/components/{p-CVQycAap.js → p-CxNNy2m6.js} +1 -1
  603. package/dist/components/{p-CHZE_FrW.js → p-Cz38kNDe.js} +1 -1
  604. package/dist/components/p-D3XmFqCQ.js +1 -0
  605. package/dist/components/{p-Y5FyLR8G.js → p-D4W5LcEW.js} +1 -1
  606. package/dist/components/{p--Tyv3LIl.js → p-DARbgzSz.js} +1 -1
  607. package/dist/components/{p-DXbcyEgd.js → p-DBgafacj.js} +1 -1
  608. package/dist/components/p-DHZ_DStJ.js +1 -0
  609. package/dist/components/{p-BQ4rSQDm.js → p-DK1uv2fu.js} +1 -1
  610. package/dist/components/{p-DLnZG_G9.js → p-DL9HtG41.js} +1 -1
  611. package/dist/components/{p-Cr8cHmpM.js → p-DLNoxNuW.js} +1 -1
  612. package/dist/components/{p-4yShCgRb.js → p-DMp5CvEJ.js} +1 -1
  613. package/dist/components/p-DO4sVZCh.js +1 -0
  614. package/dist/components/{p-DDgzEg1C.js → p-DOW-YekD.js} +1 -1
  615. package/dist/components/{p-BTPdjnXT.js → p-DVqoLSEW.js} +1 -1
  616. package/dist/components/{p-DF2FcJPs.js → p-DYpJMHAH.js} +1 -1
  617. package/dist/components/{p-DtkTnaOp.js → p-DaKBSL2O.js} +1 -1
  618. package/dist/components/{p-ZfE38vXZ.js → p-Dlp2c-Ii.js} +1 -1
  619. package/dist/components/{p-XZXdZpt4.js → p-DnagAPBF.js} +1 -1
  620. package/dist/components/p-Dt3b6VYT.js +1 -0
  621. package/dist/components/{p-DcD5eV_Z.js → p-DztU3DwY.js} +1 -1
  622. package/dist/components/{p-BWRkbt0f.js → p-KiyJJwzr.js} +1 -1
  623. package/dist/components/p-Vo0zbGRB.js +1 -0
  624. package/dist/components/p-abyVFrPp.js +1 -0
  625. package/dist/components/p-mxDA3wKn.js +1 -0
  626. package/dist/components/p-wd9-vGpQ.js +1 -0
  627. package/dist/components/p-wscU7FUD.js +1 -0
  628. package/dist/esm/brandsync-wc.js +3 -3
  629. package/dist/esm/bs-accordion-group.entry.js +2 -2
  630. package/dist/esm/bs-accordion.entry.js +1 -1
  631. package/dist/esm/bs-ai-disclaimer.entry.js +2 -2
  632. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  633. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  634. package/dist/esm/bs-app-recent-item_3.entry.js +5 -5
  635. package/dist/esm/bs-app-shell.entry.js +2 -2
  636. package/dist/esm/bs-app-switcher.entry.js +1 -1
  637. package/dist/esm/bs-attachment-list.entry.js +2 -2
  638. package/dist/esm/bs-attachment.entry.js +2 -2
  639. package/dist/esm/bs-avatar.entry.js +3 -10
  640. package/dist/esm/bs-badge.entry.js +2 -2
  641. package/dist/esm/bs-breadcrumb-overflow.entry.js +1 -1
  642. package/dist/esm/bs-breadcrumb.entry.js +3 -3
  643. package/dist/esm/bs-breadcrumbs.entry.js +10 -2
  644. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  645. package/dist/esm/bs-button_2.entry.js +17 -4
  646. package/dist/esm/bs-card.entry.js +44 -3
  647. package/dist/esm/bs-carousel.entry.js +1 -1
  648. package/dist/esm/bs-chatbot-feedback.entry.js +3 -7
  649. package/dist/esm/bs-chatbot-header.entry.js +3 -7
  650. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  651. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  652. package/dist/esm/bs-chatbot-suggestion-button.entry.js +3 -3
  653. package/dist/esm/bs-checkbox-group.entry.js +78 -0
  654. package/dist/esm/bs-checkbox-skeleton.entry.js +2 -2
  655. package/dist/esm/bs-checkbox.entry.js +1 -1
  656. package/dist/esm/bs-chip-filter.entry.js +2 -2
  657. package/dist/esm/bs-chip-informative.entry.js +2 -2
  658. package/dist/esm/bs-chip-input.entry.js +2 -2
  659. package/dist/esm/bs-citation-preview.entry.js +2 -2
  660. package/dist/esm/bs-code-block.entry.js +73 -0
  661. package/dist/esm/bs-command-palette.entry.js +2 -2
  662. package/dist/esm/bs-compact-menu-block_2.entry.js +5 -5
  663. package/dist/esm/bs-company-switcher.entry.js +3 -3
  664. package/dist/esm/bs-composer-status-banner.entry.js +2 -2
  665. package/dist/esm/bs-composer.entry.js +6 -4
  666. package/dist/esm/bs-container.entry.js +2 -2
  667. package/dist/esm/bs-cookie-consent.entry.js +1 -1
  668. package/dist/esm/bs-data-table.entry.js +8 -5
  669. package/dist/esm/bs-datepicker.entry.js +2 -2
  670. package/dist/esm/bs-description-item.entry.js +21 -0
  671. package/dist/esm/bs-description-list.entry.js +38 -0
  672. package/dist/esm/bs-dialog.entry.js +1 -1
  673. package/dist/esm/bs-divider.entry.js +2 -2
  674. package/dist/esm/bs-dropdown.entry.js +94 -0
  675. package/dist/esm/bs-empty-state.entry.js +7 -3
  676. package/dist/esm/bs-error-page.entry.js +2 -2
  677. package/dist/esm/bs-file-upload-item.entry.js +2 -2
  678. package/dist/esm/bs-file-upload.entry.js +2 -2
  679. package/dist/esm/bs-global-search.entry.js +3 -3
  680. package/dist/esm/bs-grid.entry.js +3 -3
  681. package/dist/esm/bs-heading.entry.js +26 -0
  682. package/dist/esm/bs-icon-button.entry.js +10 -3
  683. package/dist/esm/bs-icon-tile.entry.js +3 -3
  684. package/dist/esm/bs-icon.entry.js +33 -0
  685. package/dist/esm/bs-inline-tab.entry.js +3 -3
  686. package/dist/esm/bs-input_4.entry.js +789 -0
  687. package/dist/esm/bs-key-caps.entry.js +2 -2
  688. package/dist/esm/bs-key.entry.js +2 -2
  689. package/dist/esm/bs-keyboard-shortcuts.entry.js +3 -3
  690. package/dist/esm/bs-link.entry.js +50 -0
  691. package/dist/esm/bs-list-item.entry.js +66 -0
  692. package/dist/esm/bs-list.entry.js +9 -3
  693. package/dist/esm/bs-logo.entry.js +1 -1
  694. package/dist/esm/bs-mega-menu.entry.js +2 -2
  695. package/dist/esm/bs-message-list.entry.js +2 -2
  696. package/dist/esm/bs-message.entry.js +2 -2
  697. package/dist/esm/bs-navigation-drawer-item.entry.js +26 -5
  698. package/dist/esm/bs-navigation-drawer.entry.js +4 -4
  699. package/dist/esm/bs-navigation-header.entry.js +4 -4
  700. package/dist/esm/bs-onboarding-checklist.entry.js +1 -1
  701. package/dist/esm/bs-page-header.entry.js +2 -2
  702. package/dist/esm/bs-pagination.entry.js +2 -2
  703. package/dist/esm/{bs-list-item_2.entry.js → bs-popover.entry.js} +3 -64
  704. package/dist/esm/bs-presence.entry.js +2 -2
  705. package/dist/esm/bs-product-tour.entry.js +1 -1
  706. package/dist/esm/bs-progress-linear.entry.js +4 -4
  707. package/dist/esm/bs-progress.entry.js +3 -3
  708. package/dist/esm/bs-qr-code.entry.js +2 -2
  709. package/dist/esm/bs-radio-group.entry.js +88 -0
  710. package/dist/esm/bs-radio.entry.js +6 -2
  711. package/dist/esm/bs-search-item.entry.js +2 -2
  712. package/dist/esm/bs-select.entry.js +232 -0
  713. package/dist/esm/bs-session-timeout.entry.js +2 -2
  714. package/dist/esm/bs-shortcut-row.entry.js +2 -2
  715. package/dist/esm/bs-side-panel.entry.js +1 -1
  716. package/dist/esm/bs-skip-link.entry.js +50 -0
  717. package/dist/esm/bs-slider.entry.js +3 -3
  718. package/dist/esm/bs-snackbar.entry.js +3 -3
  719. package/dist/esm/bs-source-link.entry.js +4 -4
  720. package/dist/esm/bs-split-pane.entry.js +2 -2
  721. package/dist/esm/bs-stack.entry.js +2 -2
  722. package/dist/esm/bs-stat.entry.js +51 -0
  723. package/dist/esm/bs-stepper-step.entry.js +2 -2
  724. package/dist/esm/bs-stepper.entry.js +2 -2
  725. package/dist/esm/bs-switch.entry.js +2 -2
  726. package/dist/esm/bs-tab_3.entry.js +16 -9
  727. package/dist/esm/bs-table-of-contents.entry.js +169 -0
  728. package/dist/esm/bs-tag.entry.js +49 -0
  729. package/dist/esm/bs-text.entry.js +22 -0
  730. package/dist/esm/bs-timepicker.entry.js +3 -3
  731. package/dist/esm/bs-toast.entry.js +2 -2
  732. package/dist/esm/bs-toggle-button-group.entry.js +106 -0
  733. package/dist/esm/bs-toggle-button.entry.js +55 -0
  734. package/dist/esm/bs-toolbar.entry.js +193 -0
  735. package/dist/esm/bs-tooltip-trigger.entry.js +2 -2
  736. package/dist/esm/bs-tooltip.entry.js +2 -2
  737. package/dist/esm/bs-tree-item.entry.js +3 -3
  738. package/dist/esm/bs-tree.entry.js +2 -2
  739. package/dist/esm/bs-whats-new.entry.js +1 -1
  740. package/dist/esm/icon-registry-Vo0zbGRB.js +60 -0
  741. package/dist/esm/{index-D3SkQJpw.js → index-wz7B473u.js} +1 -1
  742. package/dist/esm/index.js +2 -0
  743. package/dist/esm/loader.js +3 -3
  744. package/dist/types/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.d.ts +9 -0
  745. package/dist/types/components/bs-button/bs-button/bs-button.d.ts +22 -6
  746. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.d.ts +7 -0
  747. package/dist/types/components/bs-card/bs-card.d.ts +35 -0
  748. package/dist/types/components/bs-card/bs-card.stories.d.ts +3 -0
  749. package/dist/types/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.d.ts +3 -0
  750. package/dist/types/components/bs-checkbox-group/bs-checkbox-group.cmp.test.d.ts +1 -0
  751. package/dist/types/components/bs-checkbox-group/bs-checkbox-group.d.ts +48 -0
  752. package/dist/types/components/bs-checkbox-group/bs-checkbox-group.stories.d.ts +15 -0
  753. package/dist/types/components/bs-code-block/bs-code-block.cmp.test.d.ts +1 -0
  754. package/dist/types/components/bs-code-block/bs-code-block.d.ts +68 -0
  755. package/dist/types/components/bs-code-block/bs-code-block.stories.d.ts +18 -0
  756. package/dist/types/components/bs-data-table/bs-data-table.d.ts +11 -0
  757. package/dist/types/components/bs-description-item/bs-description-item.cmp.test.d.ts +1 -0
  758. package/dist/types/components/bs-description-item/bs-description-item.d.ts +34 -0
  759. package/dist/types/components/bs-description-list/bs-description-list.cmp.test.d.ts +1 -0
  760. package/dist/types/components/bs-description-list/bs-description-list.d.ts +33 -0
  761. package/dist/types/components/bs-description-list/bs-description-list.stories.d.ts +11 -0
  762. package/dist/types/components/bs-dropdown/bs-dropdown.cmp.test.d.ts +1 -0
  763. package/dist/types/components/bs-dropdown/bs-dropdown.d.ts +51 -0
  764. package/dist/types/components/bs-dropdown/bs-dropdown.stories.d.ts +12 -0
  765. package/dist/types/components/bs-empty-state/bs-empty-state.d.ts +6 -0
  766. package/dist/types/components/bs-empty-state/bs-empty-state.stories.d.ts +3 -0
  767. package/dist/types/components/bs-heading/bs-heading.cmp.test.d.ts +1 -0
  768. package/dist/types/components/bs-heading/bs-heading.d.ts +34 -0
  769. package/dist/types/components/bs-heading/bs-heading.stories.d.ts +15 -0
  770. package/dist/types/components/bs-icon/bs-icon.cmp.test.d.ts +1 -0
  771. package/dist/types/components/bs-icon/bs-icon.d.ts +39 -0
  772. package/dist/types/components/bs-icon/bs-icon.stories.d.ts +16 -0
  773. package/dist/types/components/bs-icon/icon-registry.d.ts +16 -0
  774. package/dist/types/components/bs-input/bs-input.d.ts +83 -12
  775. package/dist/types/components/bs-input/bs-input.stories.d.ts +3 -1
  776. package/dist/types/components/bs-link/bs-link.cmp.test.d.ts +1 -0
  777. package/dist/types/components/bs-link/bs-link.d.ts +48 -0
  778. package/dist/types/components/bs-link/bs-link.stories.d.ts +19 -0
  779. package/dist/types/components/bs-list/bs-list.d.ts +6 -0
  780. package/dist/types/components/bs-list/bs-list.stories.d.ts +4 -0
  781. package/dist/types/components/bs-list-item/bs-list-item.d.ts +3 -0
  782. package/dist/types/components/bs-radio/bs-radio.d.ts +4 -0
  783. package/dist/types/components/bs-radio-group/bs-radio-group.cmp.test.d.ts +1 -0
  784. package/dist/types/components/bs-radio-group/bs-radio-group.d.ts +57 -0
  785. package/dist/types/components/bs-radio-group/bs-radio-group.stories.d.ts +16 -0
  786. package/dist/types/components/bs-select/bs-select.cmp.test.d.ts +1 -0
  787. package/dist/types/components/bs-select/bs-select.d.ts +85 -0
  788. package/dist/types/components/bs-select/bs-select.stories.d.ts +19 -0
  789. package/dist/types/components/bs-skip-link/bs-skip-link.cmp.test.d.ts +1 -0
  790. package/dist/types/components/bs-skip-link/bs-skip-link.d.ts +40 -0
  791. package/dist/types/components/bs-skip-link/bs-skip-link.stories.d.ts +10 -0
  792. package/dist/types/components/bs-stat/bs-stat.cmp.test.d.ts +1 -0
  793. package/dist/types/components/bs-stat/bs-stat.d.ts +56 -0
  794. package/dist/types/components/bs-stat/bs-stat.stories.d.ts +16 -0
  795. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.d.ts +0 -1
  796. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.d.ts +5 -3
  797. package/dist/types/components/bs-table-of-contents/bs-table-of-contents.cmp.test.d.ts +1 -0
  798. package/dist/types/components/bs-table-of-contents/bs-table-of-contents.d.ts +96 -0
  799. package/dist/types/components/bs-table-of-contents/bs-table-of-contents.stories.d.ts +13 -0
  800. package/dist/types/components/bs-tag/bs-tag.cmp.test.d.ts +1 -0
  801. package/dist/types/components/bs-tag/bs-tag.d.ts +49 -0
  802. package/dist/types/components/bs-tag/bs-tag.stories.d.ts +16 -0
  803. package/dist/types/components/bs-text/bs-text.cmp.test.d.ts +1 -0
  804. package/dist/types/components/bs-text/bs-text.d.ts +31 -0
  805. package/dist/types/components/bs-text/bs-text.stories.d.ts +14 -0
  806. package/dist/types/components/bs-toggle-button/bs-toggle-button.cmp.test.d.ts +1 -0
  807. package/dist/types/components/bs-toggle-button/bs-toggle-button.d.ts +48 -0
  808. package/dist/types/components/bs-toggle-button/bs-toggle-button.stories.d.ts +13 -0
  809. package/dist/types/components/bs-toggle-button-group/bs-toggle-button-group.cmp.test.d.ts +1 -0
  810. package/dist/types/components/bs-toggle-button-group/bs-toggle-button-group.d.ts +42 -0
  811. package/dist/types/components/bs-toggle-button-group/bs-toggle-button-group.stories.d.ts +13 -0
  812. package/dist/types/components/bs-toolbar/bs-toolbar.cmp.test.d.ts +1 -0
  813. package/dist/types/components/bs-toolbar/bs-toolbar.d.ts +88 -0
  814. package/dist/types/components/bs-toolbar/bs-toolbar.stories.d.ts +13 -0
  815. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.d.ts +11 -1
  816. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.d.ts +3 -0
  817. package/dist/types/components.d.ts +3107 -88
  818. package/dist/types/index.d.ts +1 -0
  819. package/dist/types/test/helpers/block-link-navigation.d.ts +8 -0
  820. package/dist/types/test/helpers/contrast.d.ts +5 -0
  821. package/package.json +1 -1
  822. package/reference.d.ts +63 -9
  823. package/reference.json +668 -15
  824. package/dist/brandsync-wc/p-08649f52.entry.js +0 -1
  825. package/dist/brandsync-wc/p-1580c56c.entry.js +0 -1
  826. package/dist/brandsync-wc/p-171fa239.entry.js +0 -1
  827. package/dist/brandsync-wc/p-197ac73f.entry.js +0 -1
  828. package/dist/brandsync-wc/p-270b2cb0.entry.js +0 -1
  829. package/dist/brandsync-wc/p-28c38959.entry.js +0 -1
  830. package/dist/brandsync-wc/p-2a967b45.entry.js +0 -1
  831. package/dist/brandsync-wc/p-2b3d0bd4.entry.js +0 -1
  832. package/dist/brandsync-wc/p-3627e0c6.entry.js +0 -1
  833. package/dist/brandsync-wc/p-38a2210a.entry.js +0 -1
  834. package/dist/brandsync-wc/p-3b212a8a.entry.js +0 -1
  835. package/dist/brandsync-wc/p-4dfd4715.entry.js +0 -1
  836. package/dist/brandsync-wc/p-6afacd47.entry.js +0 -1
  837. package/dist/brandsync-wc/p-6f32a08e.entry.js +0 -1
  838. package/dist/brandsync-wc/p-D3SkQJpw.js +0 -3
  839. package/dist/brandsync-wc/p-ab301e9d.entry.js +0 -1
  840. package/dist/brandsync-wc/p-d15e48eb.entry.js +0 -1
  841. package/dist/brandsync-wc/p-e776d145.entry.js +0 -1
  842. package/dist/brandsync-wc/p-eb680cff.entry.js +0 -1
  843. package/dist/brandsync-wc/p-f4628861.entry.js +0 -1
  844. package/dist/brandsync-wc/p-f5e6fdf8.entry.js +0 -1
  845. package/dist/brandsync-wc/p-f93127e1.entry.js +0 -1
  846. package/dist/cjs/bs-input_3.cjs.entry.js +0 -461
  847. package/dist/cjs/bs-spinner.cjs.entry.js +0 -24
  848. package/dist/components/p-B2gx7SZk.js +0 -1
  849. package/dist/components/p-BHzj13sd.js +0 -1
  850. package/dist/components/p-BIxcCDgl.js +0 -1
  851. package/dist/components/p-BfCah-Ij.js +0 -1
  852. package/dist/components/p-CvSewXZF.js +0 -1
  853. package/dist/components/p-DsBToIYE.js +0 -1
  854. package/dist/components/p-EGNLb4cQ.js +0 -1
  855. package/dist/components/p-Jik5UkAe.js +0 -1
  856. package/dist/components/p-syO0ipbw.js +0 -1
  857. package/dist/components/p-up01gvHY.js +0 -1
  858. package/dist/esm/bs-input_3.entry.js +0 -457
  859. package/dist/esm/bs-spinner.entry.js +0 -22
@@ -27,17 +27,20 @@ import { h } from "@stencil/core";
27
27
  * @part label - The text label element.
28
28
  * @part end-icon - The trailing icon wrapper element.
29
29
  * @prop --bs-button-radius - Corner radius. Aliased to `--bs-border-radius-100` by default.
30
- * @prop --bs-button-padding-x-sm - Left/right padding of a label-only button at `size="sm"`. Aliased to `--bs-spacing-300`.
30
+ * @prop --bs-button-padding-x-sm - Left/right padding of a label-only button at `size="sm"`. Aliased to `--bs-spacing-150` (12px).
31
+ * @prop --bs-button-padding-x-md - Left/right padding at `size="md"`. Aliased to `--bs-spacing-150` (12px).
32
+ * @prop --bs-button-padding-x-lg - Left/right padding at `size="lg"`. Aliased to `--bs-spacing-150` (12px).
31
33
  * @prop --bs-button-width - Width of the button. `auto` by default (fits its content); set `100%` for a full-width button, e.g. `bs-button { --bs-button-width: 100%; }`.
32
34
  * @prop --bs-button-subtle-color - Label/icon colour, `variant="subtle"`. Aliased to `--bs-color-neutral-default`; set it to `var(--bs-text-action)` for a blue text button.
33
- * @prop --bs-button-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
34
- * @prop --bs-button-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
35
- * @prop --bs-button-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
35
+ * @prop --bs-button-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-400` (32px).
36
+ * @prop --bs-button-height-md - Height at `size="md"`. Aliased to `--bs-spacing-550` (44px).
37
+ * @prop --bs-button-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-600` (48px).
38
+ * @prop --bs-button-outlined-color - Label/icon colour, `variant="outlined"`, default. Aliased to `--bs-color-primary-default`.
36
39
  * @prop --bs-button-neutral-border - Border color, `variant="neutral"`, default/disabled. Aliased to `--bs-border-neutral-container`.
37
40
  * @prop --bs-button-neutral-border-hover - Border color, `variant="neutral"`, hover. Aliased to `--bs-border-neutral-container-hover`.
38
41
  * @prop --bs-button-neutral-border-pressed - Border color, `variant="neutral"`, pressed. Aliased to `--bs-border-neutral-container-pressed`.
39
- * @prop --bs-button-padding-x-icon-side - Horizontal padding on an edge that's adjacent to a leading/trailing icon (tighter than the plain text-only edge). Aliased to `--bs-spacing-150`.
40
- * @prop --bs-button-padding-x-label-side - Horizontal padding on the opposite edge, when an icon on the other side needs compensating extra space to keep the button optically balanced. Aliased to `--bs-spacing-250`.
42
+ * @prop --bs-button-padding-x-icon-side - Horizontal padding on an edge that's adjacent to a leading/trailing icon (now equal to the text-only edge). Aliased to `--bs-spacing-150`.
43
+ * @prop --bs-button-padding-x-label-side - Horizontal padding on the opposite edge, when an icon on the other side needs compensating extra space to keep the button optically balanced. Aliased to `--bs-spacing-150` (no compensation by default).
41
44
  */
42
45
  export class BsButton {
43
46
  el;
@@ -61,6 +64,19 @@ export class BsButton {
61
64
  * camelCase prop to the `aria-label` HTML attribute automatically.
62
65
  */
63
66
  ariaLabel = null;
67
+ /**
68
+ * Makes this a toggle button: sets `aria-pressed` on the inner `<button>` to `true`/`false`. Leave it
69
+ * unset (the default) for a plain action button, which then has no `aria-pressed` at all. The component
70
+ * does not toggle itself; the owner flips this on click.
71
+ */
72
+ pressed;
73
+ /** Forwarded to the inner `<button>` as `aria-expanded`, for disclosure/menu buttons. */
74
+ ariaExpanded = null;
75
+ /** Forwarded to the inner `<button>` as `aria-controls`. Note an id only resolves inside this
76
+ * component's shadow tree, so it can't point at an element in the page's light DOM. */
77
+ ariaControls = null;
78
+ /** Forwarded to the inner `<button>` as `aria-haspopup`. */
79
+ ariaHasPopup = null;
64
80
  /** Tracks whether the `icon` slot has assigned content, so the icon/label gap only
65
81
  * applies when there's actually an icon. */
66
82
  hasIcon = false;
@@ -122,7 +138,7 @@ export class BsButton {
122
138
  };
123
139
  render() {
124
140
  const iconOnly = (this.hasIcon || this.hasEndIcon) && !this.hasLabel;
125
- return (h("button", { key: '498371cb1db28a17e668275a5e3dab6a093ce932', class: `bs-button bs-button--${this.variant} bs-button--${this.size} ${iconOnly ? 'bs-button--icon-only' : ''} ${this.hasIcon && !iconOnly ? 'bs-button--has-icon' : ''} ${this.hasEndIcon && !iconOnly ? 'bs-button--has-end-icon' : ''}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel, onClick: this.onClick }, h("bs-ripple", { key: '1d985ad61540f85cc47332f876eda6efcef5b87a', part: "ripple", centered: iconOnly, disabled: this.disabled }), h("span", { key: 'fbf28591ab62369e0a1a7b32da670cd350aee122', part: "icon", class: `bs-button__icon ${this.hasIcon ? 'bs-button__icon--visible' : ''}` }, h("slot", { key: '294540047c366c6f8576c8123f64f55c712d6335', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '8536c25dab900331235dba703350ff57fd7c8ff6', part: "label", class: "bs-button__label" }, h("slot", { key: '59cdb689925c55ec90c34a016e586f5be95f38e4', onSlotchange: this.onLabelSlotchange })), h("span", { key: '0976f3628408ccccec017b8e09b5a41016f0b516', part: "end-icon", class: `bs-button__end-icon ${this.hasEndIcon ? 'bs-button__end-icon--visible' : ''}` }, h("slot", { key: '40a1f6d3faf5f4ae39e9da0aa0027207afe3e7a1', name: "end-icon", onSlotchange: this.onEndIconSlotchange }))));
141
+ return (h("button", { key: 'fd998f3e3d58633626c99ffb47228c3308150d05', class: `bs-button bs-button--${this.variant} bs-button--${this.size} ${iconOnly ? 'bs-button--icon-only' : ''} ${this.hasIcon && !iconOnly ? 'bs-button--has-icon' : ''} ${this.hasEndIcon && !iconOnly ? 'bs-button--has-end-icon' : ''}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel, "aria-pressed": this.pressed === undefined ? undefined : String(this.pressed), "aria-expanded": this.ariaExpanded, "aria-controls": this.ariaControls, "aria-haspopup": this.ariaHasPopup, onClick: this.onClick }, h("bs-ripple", { key: 'b6909337c1e6f35bc42b6dc06db31cd2e822a299', part: "ripple", centered: iconOnly, disabled: this.disabled }), h("span", { key: 'a753ffbf8a61011bc6c4ae05937a035605a1d79a', part: "icon", class: `bs-button__icon ${this.hasIcon ? 'bs-button__icon--visible' : ''}` }, h("slot", { key: '66e9b0f67e04b3891f66ee311ffaebd266c3824b', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'e9007a0a0fe2b51ac3401195feff203c94cfbe3b', part: "label", class: "bs-button__label" }, h("slot", { key: 'df18ce6e274b6f99e496944aa40fd9977f99dd86', onSlotchange: this.onLabelSlotchange })), h("span", { key: 'ddf8300967a813c02ae1996eee42793211b71537', part: "end-icon", class: `bs-button__end-icon ${this.hasEndIcon ? 'bs-button__end-icon--visible' : ''}` }, h("slot", { key: '4d200a0c215ff52161941315bbdab21a08daf90a', name: "end-icon", onSlotchange: this.onEndIconSlotchange }))));
126
142
  }
127
143
  static get is() { return "bs-button"; }
128
144
  static get encapsulation() { return "shadow"; }
@@ -251,6 +267,85 @@ export class BsButton {
251
267
  "reflect": false,
252
268
  "attribute": "aria-label",
253
269
  "defaultValue": "null"
270
+ },
271
+ "pressed": {
272
+ "type": "boolean",
273
+ "mutable": false,
274
+ "complexType": {
275
+ "original": "boolean",
276
+ "resolved": "boolean",
277
+ "references": {}
278
+ },
279
+ "required": false,
280
+ "optional": true,
281
+ "docs": {
282
+ "tags": [],
283
+ "text": "Makes this a toggle button: sets `aria-pressed` on the inner `<button>` to `true`/`false`. Leave it\nunset (the default) for a plain action button, which then has no `aria-pressed` at all. The component\ndoes not toggle itself; the owner flips this on click."
284
+ },
285
+ "getter": false,
286
+ "setter": false,
287
+ "reflect": false,
288
+ "attribute": "pressed"
289
+ },
290
+ "ariaExpanded": {
291
+ "type": "string",
292
+ "mutable": false,
293
+ "complexType": {
294
+ "original": "'true' | 'false' | null",
295
+ "resolved": "\"false\" | \"true\"",
296
+ "references": {}
297
+ },
298
+ "required": false,
299
+ "optional": false,
300
+ "docs": {
301
+ "tags": [],
302
+ "text": "Forwarded to the inner `<button>` as `aria-expanded`, for disclosure/menu buttons."
303
+ },
304
+ "getter": false,
305
+ "setter": false,
306
+ "reflect": false,
307
+ "attribute": "aria-expanded",
308
+ "defaultValue": "null"
309
+ },
310
+ "ariaControls": {
311
+ "type": "string",
312
+ "mutable": false,
313
+ "complexType": {
314
+ "original": "string | null",
315
+ "resolved": "string",
316
+ "references": {}
317
+ },
318
+ "required": false,
319
+ "optional": false,
320
+ "docs": {
321
+ "tags": [],
322
+ "text": "Forwarded to the inner `<button>` as `aria-controls`. Note an id only resolves inside this\ncomponent's shadow tree, so it can't point at an element in the page's light DOM."
323
+ },
324
+ "getter": false,
325
+ "setter": false,
326
+ "reflect": false,
327
+ "attribute": "aria-controls",
328
+ "defaultValue": "null"
329
+ },
330
+ "ariaHasPopup": {
331
+ "type": "string",
332
+ "mutable": false,
333
+ "complexType": {
334
+ "original": "'true' | 'false' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | null",
335
+ "resolved": "\"dialog\" | \"false\" | \"grid\" | \"listbox\" | \"menu\" | \"tree\" | \"true\"",
336
+ "references": {}
337
+ },
338
+ "required": false,
339
+ "optional": false,
340
+ "docs": {
341
+ "tags": [],
342
+ "text": "Forwarded to the inner `<button>` as `aria-haspopup`."
343
+ },
344
+ "getter": false,
345
+ "setter": false,
346
+ "reflect": false,
347
+ "attribute": "aria-haspopup",
348
+ "defaultValue": "null"
254
349
  }
255
350
  };
256
351
  }
@@ -1,4 +1,5 @@
1
1
  import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ import { contrastRatio, resolveColor, withTheme } from "../../../test/helpers/contrast";
2
3
  describe('bs-icon-button', () => {
3
4
  it('renders the default icon slot and variant/size classes', async () => {
4
5
  const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm" }, h("svg", { viewBox: "0 0 16 16" })));
@@ -113,4 +114,46 @@ describe('bs-icon-button', () => {
113
114
  expect(inner().getAttribute('aria-pressed')).toBe('false');
114
115
  });
115
116
  });
117
+ it('forwards aria-expanded, aria-controls and aria-haspopup to the inner button', async () => {
118
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Menu", ariaExpanded: "false", ariaControls: "drawer", ariaHasPopup: "menu" }, "x"));
119
+ const button = root.shadowRoot.querySelector('button');
120
+ expect(button).toEqualAttribute('aria-expanded', 'false');
121
+ expect(button).toEqualAttribute('aria-controls', 'drawer');
122
+ expect(button).toEqualAttribute('aria-haspopup', 'menu');
123
+ });
124
+ it('omits the forwarded aria attributes when unset', async () => {
125
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Menu" }, "x"));
126
+ const button = root.shadowRoot.querySelector('button');
127
+ for (const attr of ['aria-pressed', 'aria-expanded', 'aria-controls', 'aria-haspopup'])
128
+ expect(button.hasAttribute(attr)).toBe(false);
129
+ });
130
+ it('size="sm" is 32x32 with the 16px icon intact', async () => {
131
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm", size: "sm" }, h("svg", { width: "16", height: "16" })));
132
+ const button = root.shadowRoot.querySelector('button');
133
+ expect(getComputedStyle(button).width).toBe('32px');
134
+ expect(getComputedStyle(button).height).toBe('32px');
135
+ expect(getComputedStyle(root.shadowRoot.querySelector('[part="icon"]')).width).toBe('16px');
136
+ });
137
+ describe('size="xs" hover/pressed contrast (#50)', () => {
138
+ const variants = ['primary', 'neutral', 'subtle', 'outlined', 'success', 'warning', 'info', 'error'];
139
+ // Deterministic on purpose (no real pointer hover, which stalls browser runs on slow CI): the xs
140
+ // :hover/:active rules set the icon colour to one of these tokens, so assert that colour against
141
+ // each hover/pressed fill the variant can show, resolved from the same tokens the component uses.
142
+ const iconToken = (v) => (v === 'neutral' || v === 'subtle' ? '--bs-text-default' : v === 'outlined' ? '--bs-icon-button-outlined-text-hover' : '--bs-text-on-action');
143
+ const fillTokens = (v) => (v === 'outlined' ? ['--bs-color-primary-container'] : [`--bs-icon-button-${v}-hover`, `--bs-icon-button-${v}-pressed`]);
144
+ for (const theme of ['light', 'dark']) {
145
+ for (const variant of variants) {
146
+ it(`${variant} / ${theme}: hover and pressed icon colour is >= 3:1 against the fill`, async () => {
147
+ await withTheme(theme, async () => {
148
+ const { root } = await render(h("bs-icon-button", { size: "xs", variant: variant, ariaLabel: "Remove" }, h("svg", { viewBox: "0 0 8 8" })));
149
+ const icon = resolveColor(root, `var(${iconToken(variant)})`, 'color');
150
+ for (const token of fillTokens(variant)) {
151
+ const fill = resolveColor(root, `var(${token})`);
152
+ expect(contrastRatio(icon, fill), `${variant}/${theme} ${token}`).toBeGreaterThanOrEqual(3);
153
+ }
154
+ });
155
+ });
156
+ }
157
+ }
158
+ });
116
159
  });
@@ -4,7 +4,8 @@
4
4
  * @prop --bs-icon-button-size-xs: Container width/height at size="xs". 16px.
5
5
  * @prop --bs-icon-button-icon-size-xs: Slotted icon width/height (and font-size, for icon-font glyphs) at size="xs". 8px.
6
6
  * @prop --bs-icon-button-padding-xs: Padding on all sides, size="xs" only -- distinct from --bs-icon-button-padding, since 16px/8px icon math (4px) differs from the sm/md/lg constant (12px). Aliased to --bs-spacing-50.
7
- * @prop --bs-icon-button-size-sm: Container width/height at size="sm". 40px.
7
+ * @prop --bs-icon-button-size-sm: Container width/height at size="sm". 32px.
8
+ * @prop --bs-icon-button-padding-sm: Padding on all sides, size="sm" only (8px around the 16px icon in the 32px container). Aliased to --bs-spacing-100.
8
9
  * @prop --bs-icon-button-size-md: Container width/height at size="md". 44px.
9
10
  * @prop --bs-icon-button-size-lg: Container width/height at size="lg". 48px.
10
11
  * @prop --bs-icon-button-icon-size-sm: Slotted icon width/height (and font-size, for icon-font glyphs) at size="sm". 16px.
@@ -60,7 +61,8 @@
60
61
  with a 20x20 icon, Small is 40x40 with a 16x16 icon -- (container - icon) / 2 is 12px in all
61
62
  three cases, matching the one concrete Figma data point (spacing/150, 12px padding on the
62
63
  Large size) exactly, so padding is a single constant across all sizes. */
63
- --bs-icon-button-size-sm: 40px;
64
+ --bs-icon-button-size-sm: 32px;
65
+ --bs-icon-button-padding-sm: var(--bs-spacing-100);
64
66
  --bs-icon-button-size-md: 44px;
65
67
  --bs-icon-button-size-lg: 48px;
66
68
  --bs-icon-button-icon-size-sm: 16px;
@@ -168,9 +170,37 @@
168
170
  font-size: var(--bs-icon-button-icon-size-xs);
169
171
  }
170
172
 
173
+ /* size="xs" hover/pressed: explicit icon colours so the glyph never inherits a colour that is low
174
+ contrast against the hover/pressed fill (>= 3:1 asserted in the component tests, light + dark).
175
+ Filled variants use --bs-text-on-action, neutral/subtle use --bs-text-default, outlined keeps its
176
+ action-hover text colour. */
177
+ .bs-icon-button--xs.bs-icon-button--primary:hover:not(:disabled),
178
+ .bs-icon-button--xs.bs-icon-button--primary:active:not(:disabled),
179
+ .bs-icon-button--xs.bs-icon-button--error:hover:not(:disabled),
180
+ .bs-icon-button--xs.bs-icon-button--error:active:not(:disabled),
181
+ .bs-icon-button--xs.bs-icon-button--success:hover:not(:disabled),
182
+ .bs-icon-button--xs.bs-icon-button--success:active:not(:disabled),
183
+ .bs-icon-button--xs.bs-icon-button--warning:hover:not(:disabled),
184
+ .bs-icon-button--xs.bs-icon-button--warning:active:not(:disabled),
185
+ .bs-icon-button--xs.bs-icon-button--info:hover:not(:disabled),
186
+ .bs-icon-button--xs.bs-icon-button--info:active:not(:disabled) {
187
+ color: var(--bs-text-on-action);
188
+ }
189
+ .bs-icon-button--xs.bs-icon-button--neutral:hover:not(:disabled),
190
+ .bs-icon-button--xs.bs-icon-button--neutral:active:not(:disabled),
191
+ .bs-icon-button--xs.bs-icon-button--subtle:hover:not(:disabled),
192
+ .bs-icon-button--xs.bs-icon-button--subtle:active:not(:disabled) {
193
+ color: var(--bs-text-default);
194
+ }
195
+ .bs-icon-button--xs.bs-icon-button--outlined:hover:not(:disabled),
196
+ .bs-icon-button--xs.bs-icon-button--outlined:active:not(:disabled) {
197
+ color: var(--bs-icon-button-outlined-text-hover);
198
+ }
199
+
171
200
  .bs-icon-button--sm {
172
201
  width: var(--bs-icon-button-size-sm);
173
202
  height: var(--bs-icon-button-size-sm);
203
+ padding: var(--bs-icon-button-padding-sm);
174
204
  }
175
205
  .bs-icon-button--sm .bs-icon-button__icon {
176
206
  width: var(--bs-icon-button-icon-size-sm);
@@ -53,6 +53,13 @@ export class BsIconButton {
53
53
  * prop to the `aria-label` HTML attribute automatically.
54
54
  */
55
55
  ariaLabel = null;
56
+ /** Forwarded to the inner `<button>` as `aria-expanded`, for disclosure/menu buttons. */
57
+ ariaExpanded = null;
58
+ /** Forwarded to the inner `<button>` as `aria-controls`. Note an id only resolves inside this
59
+ * component's shadow tree, so it can't point at an element in the page's light DOM. */
60
+ ariaControls = null;
61
+ /** Forwarded to the inner `<button>` as `aria-haspopup`. */
62
+ ariaHasPopup = null;
56
63
  /**
57
64
  * Makes this a toggle button: sets `aria-pressed` on the inner `<button>` to `true`/`false`. Leave it
58
65
  * unset (the default) for a plain action button, which then has no `aria-pressed` at all. The component
@@ -70,7 +77,7 @@ export class BsIconButton {
70
77
  form.reset();
71
78
  };
72
79
  render() {
73
- return (h("button", { key: '6ffeb6535c6c1fb493f6c805a1f70a431a593d08', class: `bs-icon-button bs-icon-button--${this.variant} bs-icon-button--${this.size}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel, "aria-pressed": this.pressed === undefined ? undefined : String(this.pressed), onClick: this.onClick }, h("bs-ripple", { key: '0f3f40ca57f447a5d92b3f0ef132c146ef25675d', part: "ripple", centered: true, disabled: this.disabled }), h("span", { key: '00c1039364372917781441fca63553a430b9398a', part: "icon", class: "bs-icon-button__icon" }, h("slot", { key: '18ba74587ec975b3f95115c211bcef1d4bac6ae5' }))));
80
+ return (h("button", { key: 'e95b86e2b5151e92ed392fcb0bbaaf54349b482f', class: `bs-icon-button bs-icon-button--${this.variant} bs-icon-button--${this.size}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel, "aria-expanded": this.ariaExpanded, "aria-controls": this.ariaControls, "aria-haspopup": this.ariaHasPopup, "aria-pressed": this.pressed === undefined ? undefined : String(this.pressed), onClick: this.onClick }, h("bs-ripple", { key: '16e9a328454974ae4947b9deb0b1af981e296be7', part: "ripple", centered: true, disabled: this.disabled }), h("span", { key: '645b15068abb821d134a01caa28b300d37236e0e', part: "icon", class: "bs-icon-button__icon" }, h("slot", { key: 'ae1243aedfbe25131ce538748c2e84d214ecc2be' }))));
74
81
  }
75
82
  static get is() { return "bs-icon-button"; }
76
83
  static get encapsulation() { return "shadow"; }
@@ -200,6 +207,66 @@ export class BsIconButton {
200
207
  "attribute": "aria-label",
201
208
  "defaultValue": "null"
202
209
  },
210
+ "ariaExpanded": {
211
+ "type": "string",
212
+ "mutable": false,
213
+ "complexType": {
214
+ "original": "'true' | 'false' | null",
215
+ "resolved": "\"false\" | \"true\"",
216
+ "references": {}
217
+ },
218
+ "required": false,
219
+ "optional": false,
220
+ "docs": {
221
+ "tags": [],
222
+ "text": "Forwarded to the inner `<button>` as `aria-expanded`, for disclosure/menu buttons."
223
+ },
224
+ "getter": false,
225
+ "setter": false,
226
+ "reflect": false,
227
+ "attribute": "aria-expanded",
228
+ "defaultValue": "null"
229
+ },
230
+ "ariaControls": {
231
+ "type": "string",
232
+ "mutable": false,
233
+ "complexType": {
234
+ "original": "string | null",
235
+ "resolved": "string",
236
+ "references": {}
237
+ },
238
+ "required": false,
239
+ "optional": false,
240
+ "docs": {
241
+ "tags": [],
242
+ "text": "Forwarded to the inner `<button>` as `aria-controls`. Note an id only resolves inside this\ncomponent's shadow tree, so it can't point at an element in the page's light DOM."
243
+ },
244
+ "getter": false,
245
+ "setter": false,
246
+ "reflect": false,
247
+ "attribute": "aria-controls",
248
+ "defaultValue": "null"
249
+ },
250
+ "ariaHasPopup": {
251
+ "type": "string",
252
+ "mutable": false,
253
+ "complexType": {
254
+ "original": "'true' | 'false' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | null",
255
+ "resolved": "\"dialog\" | \"false\" | \"grid\" | \"listbox\" | \"menu\" | \"tree\" | \"true\"",
256
+ "references": {}
257
+ },
258
+ "required": false,
259
+ "optional": false,
260
+ "docs": {
261
+ "tags": [],
262
+ "text": "Forwarded to the inner `<button>` as `aria-haspopup`."
263
+ },
264
+ "getter": false,
265
+ "setter": false,
266
+ "reflect": false,
267
+ "attribute": "aria-haspopup",
268
+ "defaultValue": "null"
269
+ },
203
270
  "pressed": {
204
271
  "type": "boolean",
205
272
  "mutable": false,
@@ -27,7 +27,7 @@ export class BsButtonSkeleton {
27
27
  /** Accessible name announced for the loading placeholder. */
28
28
  loadingLabel = 'Loading';
29
29
  render() {
30
- return h("span", { key: 'c29256165abc3f5de50cf1f087f0ad161e33bb76', part: "container", class: `bs-button-skeleton bs-button-skeleton--${this.size}`, role: "status", "aria-label": this.loadingLabel });
30
+ return h("span", { key: 'eceeb97c96ab7be19cce6cb2fc5952b197bcbaab', part: "container", class: `bs-button-skeleton bs-button-skeleton--${this.size}`, role: "status", "aria-label": this.loadingLabel });
31
31
  }
32
32
  static get is() { return "bs-button-skeleton"; }
33
33
  static get encapsulation() { return "shadow"; }
@@ -1,4 +1,7 @@
1
1
  import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ import { runAxeCheck } from "../../test/helpers/conventions";
3
+ import { blockLinkNavigation } from "../../test/helpers/block-link-navigation";
4
+ blockLinkNavigation();
2
5
  describe('bs-card', () => {
3
6
  it('defaults to the "raised" surface', async () => {
4
7
  const { root } = await render(h("bs-card", null, "Body content"));
@@ -106,4 +109,79 @@ describe('bs-card', () => {
106
109
  expect(surface.getBoundingClientRect().height).toBe(200);
107
110
  });
108
111
  });
112
+ describe('clickable card (href)', () => {
113
+ it('renders a plain container with no action when neither href nor selectable is set', async () => {
114
+ const { root } = await render(h("bs-card", null, "Body"));
115
+ expect(root.shadowRoot.querySelector('[part="action"]')).toBeNull();
116
+ expect(root.shadowRoot.querySelector('.bs-card')).not.toHaveClass('bs-card--interactive');
117
+ });
118
+ it('renders one real anchor wrapping the header slot', async () => {
119
+ const { root } = await render(h("bs-card", { href: "/booking/4b", target: "_blank", label: "Room 4B" }, h("strong", { slot: "header" }, "Room 4B"), "Body"));
120
+ const a = root.shadowRoot.querySelector('a[part="action"]');
121
+ expect(a.getAttribute('href')).toBe('/booking/4b');
122
+ expect(a.getAttribute('rel')).toBe('noopener noreferrer');
123
+ expect(a.getAttribute('aria-label')).toBe('Room 4B');
124
+ expect(a.querySelector('slot[name="header"]')).toBeTruthy();
125
+ expect(root.shadowRoot.querySelectorAll('a, button')).toHaveLength(1);
126
+ });
127
+ it('emits a cancelable bsNavigate with the href', async () => {
128
+ const { root } = await render(h("bs-card", { href: "#x" }, h("strong", { slot: "header" }, "T")));
129
+ const details = [];
130
+ root.addEventListener('bsNavigate', (e) => {
131
+ details.push(e.detail);
132
+ e.preventDefault();
133
+ });
134
+ root.shadowRoot.querySelector('a').click();
135
+ expect(details).toEqual([{ href: '#x' }]);
136
+ });
137
+ it('has a visible focus ring on keyboard focus and a hover background', async () => {
138
+ const { root } = await render(h("bs-card", { href: "#x" }, h("strong", { slot: "header" }, "T")));
139
+ const card = root.shadowRoot.querySelector('.bs-card');
140
+ root.shadowRoot.querySelector('a').focus();
141
+ expect(getComputedStyle(card).outlineStyle).not.toBe('none');
142
+ });
143
+ it('keeps footer buttons separately focusable (one extra tab stop each, none nested)', async () => {
144
+ const { root } = await render(h("bs-card", { href: "#x" }, h("strong", { slot: "header" }, "T"), h("bs-button", { slot: "footer" }, "Cancel")));
145
+ const footerBtn = root.querySelector('bs-button');
146
+ expect(getComputedStyle(footerBtn).pointerEvents).toBe('auto');
147
+ expect(root.shadowRoot.querySelector('a [part="footer"]')).toBeNull();
148
+ });
149
+ });
150
+ describe('selectable card', () => {
151
+ it('renders a button with aria-pressed and toggles on click', async () => {
152
+ const { root } = await render(h("bs-card", { selectable: true }, h("strong", { slot: "header" }, "Plan")));
153
+ const btn = root.shadowRoot.querySelector('button[part="action"]');
154
+ expect(btn.getAttribute('aria-pressed')).toBe('false');
155
+ const events = [];
156
+ root.addEventListener('bsChange', (e) => events.push(e.detail));
157
+ btn.click();
158
+ await new Promise(r => setTimeout(r, 50));
159
+ expect(root.selected).toBe(true);
160
+ expect(root).toHaveAttribute('selected');
161
+ expect(root.shadowRoot.querySelector('button').getAttribute('aria-pressed')).toBe('true');
162
+ expect(root.shadowRoot.querySelector('.bs-card')).toHaveClass('bs-card--selected');
163
+ btn.click();
164
+ expect(events).toEqual([true, false]);
165
+ });
166
+ it('shows a selected ring and background', async () => {
167
+ const { root } = await render(h("bs-card", { selectable: true, selected: true }, h("strong", { slot: "header" }, "Plan")));
168
+ const card = root.shadowRoot.querySelector('.bs-card');
169
+ expect(getComputedStyle(card).boxShadow).not.toBe('none');
170
+ });
171
+ it('prefers href over selectable', async () => {
172
+ const { root } = await render(h("bs-card", { selectable: true, href: "#x" }, h("strong", { slot: "header" }, "T")));
173
+ expect(root.shadowRoot.querySelector('button')).toBeNull();
174
+ expect(root.shadowRoot.querySelector('a')).toBeTruthy();
175
+ });
176
+ });
177
+ describe('accessibility (interactive)', () => {
178
+ it('link card has no axe violations', async () => {
179
+ const { root } = await render(h("bs-card", { href: "#x" }, h("strong", { slot: "header" }, "Room 4B"), "Body"));
180
+ await runAxeCheck(root);
181
+ });
182
+ it('selectable card has no axe violations', async () => {
183
+ const { root } = await render(h("bs-card", { selectable: true, selected: true }, h("strong", { slot: "header" }, "Plan"), "Body"));
184
+ await runAxeCheck(root);
185
+ });
186
+ });
109
187
  });
@@ -6,6 +6,11 @@
6
6
  * @prop --bs-card-border-color: Border colour. Aliased to --bs-border-default.
7
7
  * @prop --bs-card-shadow: Box shadow. Set per `surface`: --bs-shadow-sm for `raised`, none for `base` and `container`.
8
8
  * @prop --bs-card-overflow: Overflow of the surface. `hidden` so the image slot's top corners are clipped to the radius; set `visible` when the content has to overflow (a popup menu, an arrow).
9
+ * @prop --bs-card-bg-hover: Background of a clickable/selectable card on hover. Aliased to --bs-surface-hover.
10
+ * @prop --bs-card-bg-selected: Background of a selected card. Aliased to --bs-surface-selected.
11
+ * @prop --bs-card-ring-color-selected: Colour of the ring around a selected card. Aliased to --bs-border-primary.
12
+ * @prop --bs-card-ring-width-selected: Width of the selected ring (drawn outside the card, no layout shift). 2px.
13
+ * @prop --bs-card-focus-ring-color: Focus ring colour of a clickable/selectable card. Aliased to --bs-border-neutral-focus.
9
14
  */
10
15
  :host {
11
16
  display: block;
@@ -17,6 +22,11 @@
17
22
  --bs-card-border-color: var(--bs-border-default);
18
23
  --bs-card-shadow: var(--bs-shadow-sm);
19
24
  --bs-card-overflow: hidden;
25
+ --bs-card-bg-hover: var(--bs-surface-hover);
26
+ --bs-card-bg-selected: var(--bs-surface-selected);
27
+ --bs-card-ring-color-selected: var(--bs-border-primary);
28
+ --bs-card-ring-width-selected: 2px;
29
+ --bs-card-focus-ring-color: var(--bs-border-neutral-focus);
20
30
  }
21
31
 
22
32
  :host([surface='base']) {
@@ -51,6 +61,70 @@
51
61
  via a real computed-style check: rgb(0, 0, 0) regardless of theme). Same bug, same fix, as
52
62
  bs-dialog's own identical color rule on .bs-dialog__dialog. */
53
63
  color: var(--bs-text-default);
64
+ /* Anchors the stretched action's ::after overlay (clickable/selectable cards). */
65
+ position: relative;
66
+ }
67
+
68
+ /* Clickable / selectable card: one real <a>/<button> (in the header) is stretched over the whole
69
+ card with ::after, so the card is a single tab stop and nothing is nested inside the control. */
70
+ .bs-card__action {
71
+ display: block;
72
+ box-sizing: border-box;
73
+ width: 100%;
74
+ margin: 0;
75
+ padding: 0;
76
+ border: 0;
77
+ background: none;
78
+ color: inherit;
79
+ font: inherit;
80
+ text-align: inherit;
81
+ text-decoration: none;
82
+ cursor: pointer;
83
+ }
84
+
85
+ .bs-card__action::after {
86
+ content: '';
87
+ position: absolute;
88
+ inset: 0;
89
+ }
90
+
91
+ .bs-card__action:focus-visible {
92
+ outline: none;
93
+ }
94
+
95
+ .bs-card--interactive {
96
+ cursor: pointer;
97
+ transition: background-color var(--bs-duration-fast) var(--bs-easing-standard);
98
+ }
99
+
100
+ .bs-card--interactive:hover {
101
+ background: var(--bs-card-bg-hover);
102
+ }
103
+
104
+ .bs-card--selected,
105
+ .bs-card--selected:hover {
106
+ background: var(--bs-card-bg-selected);
107
+ box-shadow: 0 0 0 var(--bs-card-ring-width-selected) var(--bs-card-ring-color-selected), var(--bs-card-shadow);
108
+ }
109
+
110
+ /* The ring sits outside the card (a card's own overflow doesn't clip its own outline); the offset
111
+ clears the selected ring. */
112
+ .bs-card--interactive:has(.bs-card__action:focus-visible) {
113
+ outline: 2px solid var(--bs-card-focus-ring-color);
114
+ outline-offset: calc(var(--bs-card-ring-width-selected) + 2px);
115
+ }
116
+
117
+ /* Body/footer sit above the overlay but let clicks pass through, except for controls that are
118
+ direct children of the slot, which stay individually clickable. */
119
+ .bs-card--interactive .bs-card__body,
120
+ .bs-card--interactive .bs-card__footer {
121
+ position: relative;
122
+ pointer-events: none;
123
+ }
124
+
125
+ .bs-card--interactive .bs-card__body ::slotted(:is(a, button, input, select, textarea, bs-button, bs-icon-button, bs-checkbox, bs-switch, bs-radio, bs-input, [tabindex])),
126
+ .bs-card--interactive .bs-card__footer ::slotted(:is(a, button, input, select, textarea, bs-button, bs-icon-button, bs-checkbox, bs-switch, bs-radio, bs-input, [tabindex])) {
127
+ pointer-events: auto;
54
128
  }
55
129
 
56
130
  /* Empty by default (no padding/margin) -- only visible when the image slot has content, same
@@ -91,4 +165,5 @@
91
165
 
92
166
  @media (forced-colors: active) {
93
167
  .bs-card { border: 1px solid CanvasText; }
168
+ .bs-card--selected { outline: 2px solid Highlight; }
94
169
  }