@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
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Named icon registry for `bs-icon`.
3
+ *
4
+ * Each entry is the *inner* SVG markup (paths, circles, ...) of a 24x24 icon drawn with
5
+ * `stroke="currentColor"` -- `bs-icon` supplies the `<svg>` wrapper (viewBox, stroke width, caps).
6
+ * The registry lives on `globalThis` so the lazy-loaded build, the custom-elements build and any
7
+ * consumer that imports `registerIcons` all share one copy.
8
+ */
9
+ const KEY = '__bsIconRegistry';
10
+ /*
11
+ * Phosphor Icons (https://phosphoricons.com), MIT License, (c) 2020-present Phosphor Icons.
12
+ * Inner SVG markup copied from @phosphor-icons/core (regular weight; `star-fill` is the fill weight).
13
+ * Entries of the `{ viewBox, body }` form are rendered filled with `currentColor`.
14
+ */
15
+ const PHOSPHOR = {
16
+ 'user': { viewBox: '0 0 256 256', body: '<path d="M230.92,212c-15.23-26.33-38.7-45.21-66.09-54.16a72,72,0,1,0-73.66,0C63.78,166.78,40.31,185.66,25.08,212a8,8,0,1,0,13.85,8c18.84-32.56,52.14-52,89.07-52s70.23,19.44,89.07,52a8,8,0,1,0,13.85-8ZM72,96a56,56,0,1,1,56,56A56.06,56.06,0,0,1,72,96Z"/>' },
17
+ 'star': { viewBox: '0 0 256 256', body: '<path d="M239.18,97.26A16.38,16.38,0,0,0,224.92,86l-59-4.76L143.14,26.15a16.36,16.36,0,0,0-30.27,0L90.11,81.23,31.08,86a16.46,16.46,0,0,0-9.37,28.86l45,38.83L53,211.75a16.38,16.38,0,0,0,24.5,17.82L128,198.49l50.53,31.08A16.4,16.4,0,0,0,203,211.75l-13.76-58.07,45-38.83A16.43,16.43,0,0,0,239.18,97.26Zm-15.34,5.47-48.7,42a8,8,0,0,0-2.56,7.91l14.88,62.8a.37.37,0,0,1-.17.48c-.18.14-.23.11-.38,0l-54.72-33.65a8,8,0,0,0-8.38,0L69.09,215.94c-.15.09-.19.12-.38,0a.37.37,0,0,1-.17-.48l14.88-62.8a8,8,0,0,0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16A8,8,0,0,0,103,91.86l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153,91.86a8,8,0,0,0,6.75,4.92l63.92,5.16c.15,0,.24,0,.33.29S224,102.63,223.84,102.73Z"/>' },
18
+ 'star-fill': { viewBox: '0 0 256 256', body: '<path d="M234.29,114.85l-45,38.83L203,211.75a16.4,16.4,0,0,1-24.5,17.82L128,198.49,77.47,229.57A16.4,16.4,0,0,1,53,211.75l13.76-58.07-45-38.83A16.46,16.46,0,0,1,31.08,86l59-4.76,22.76-55.08a16.36,16.36,0,0,1,30.27,0l22.75,55.08,59,4.76a16.46,16.46,0,0,1,9.37,28.86Z"/>' },
19
+ 'x': { viewBox: '0 0 256 256', body: '<path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"/>' },
20
+ 'paper-plane-right': { viewBox: '0 0 256 256', body: '<path d="M231.87,114l-168-95.89A16,16,0,0,0,40.92,37.34L71.55,128,40.92,218.67A16,16,0,0,0,56,240a16.15,16.15,0,0,0,7.93-2.1l167.92-96.05a16,16,0,0,0,.05-27.89ZM56,224a.56.56,0,0,0,0-.12L85.74,136H144a8,8,0,0,0,0-16H85.74L56.06,32.16A.46.46,0,0,0,56,32l168,95.83Z"/>' },
21
+ 'note-pencil': { viewBox: '0 0 256 256', body: '<path d="M229.66,58.34l-32-32a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,88,128v32a8,8,0,0,0,8,8h32a8,8,0,0,0,5.66-2.34l96-96A8,8,0,0,0,229.66,58.34ZM124.69,152H104V131.31l64-64L188.69,88ZM200,76.69,179.31,56,192,43.31,212.69,64ZM224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Z"/>' },
22
+ 'clock-counter-clockwise': { viewBox: '0 0 256 256', body: '<path d="M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z"/>' },
23
+ 'arrows-out-simple': { viewBox: '0 0 256 256', body: '<path d="M216,48V96a8,8,0,0,1-16,0V67.31l-50.34,50.35a8,8,0,0,1-11.32-11.32L188.69,56H160a8,8,0,0,1,0-16h48A8,8,0,0,1,216,48ZM106.34,138.34,56,188.69V160a8,8,0,0,0-16,0v48a8,8,0,0,0,8,8H96a8,8,0,0,0,0-16H67.31l50.35-50.34a8,8,0,0,0-11.32-11.32Z"/>' },
24
+ };
25
+ const BUILT_IN = {
26
+ ...PHOSPHOR,
27
+ menu: '<path d="M4 6H20"/><path d="M4 12H20"/><path d="M4 18H20"/>',
28
+ 'arrow-right': '<path d="M5 12H19"/><path d="M13 6L19 12L13 18"/>',
29
+ 'arrow-left': '<path d="M19 12H5"/><path d="M11 6L5 12L11 18"/>',
30
+ check: '<path d="M5 12.5L10 17.5L19 7.5"/>',
31
+ close: '<path d="M6 6L18 18"/><path d="M18 6L6 18"/>',
32
+ 'chevron-down': '<path d="M6 9L12 15L18 9"/>',
33
+ 'external-link': '<path d="M14 4H20V10"/><path d="M20 4L11 13"/><path d="M18 14V19H5V6H10"/>',
34
+ copy: '<rect x="9" y="9" width="11" height="11" rx="2"/><path d="M5 15V6C5 5.4 5.4 5 6 5H15"/>',
35
+ search: '<circle cx="11" cy="11" r="6.5"/><path d="M16 16L20 20"/>',
36
+ };
37
+ function registry() {
38
+ const g = globalThis;
39
+ if (!g[KEY])
40
+ g[KEY] = { ...BUILT_IN };
41
+ return g[KEY];
42
+ }
43
+ /**
44
+ * Register (or replace) named icons. Values are inner SVG markup for a 24x24 viewBox using
45
+ * `currentColor` strokes, or `{ viewBox, body }` for filled glyphs on another grid (rendered with `fill="currentColor"`). Only register markup you trust: it is inserted as-is.
46
+ * Already-rendered `bs-icon`s pick up new names on their next render.
47
+ */
48
+ export function registerIcons(icons) {
49
+ Object.assign(registry(), icons);
50
+ }
51
+ /** The entry (inner SVG markup string, or `{ viewBox, body }`) registered under `name`, or undefined. */
52
+ export function getIcon(name) {
53
+ return name ? registry()[name] : undefined;
54
+ }
55
+ /** All registered icon names. */
56
+ export function iconNames() {
57
+ return Object.keys(registry());
58
+ }
@@ -46,8 +46,8 @@ export class BsIconTile {
46
46
  render() {
47
47
  const labelled = !!this.label;
48
48
  return [
49
- h("div", { key: '72226f2004fa4334e1b270d790e182b0c5b9dd05', part: "container", class: "bs-icon-tile", role: labelled ? 'img' : undefined, "aria-label": labelled ? this.label : undefined, "aria-hidden": labelled ? undefined : 'true' }, h("span", { key: '126fdd0362b424918cff1e84d95a40b529693a57', part: "icon", class: "bs-icon-tile__icon" }, h("slot", { key: '7d5ea3f933dd8fada375e98110ceddc55176c792', onSlotchange: (ev) => (this.hasCustomIcon = hasContent(ev.target)) }), !this.hasCustomIcon && (GLYPHS[this.intent] ?? GLYPHS.default))),
50
- h("span", { key: '7902e66e2e74303c43dae40fae7993b71dff7ace', part: "text", class: { 'bs-icon-tile__text': true, 'bs-icon-tile__text--visible': this.hasText } }, h("slot", { key: '4a97955f0d4aa46206d85209fa1c8cde20c664aa', name: "text", onSlotchange: (ev) => (this.hasText = ev.target.assignedNodes().length > 0) })),
49
+ h("div", { key: '312539518cebf4f02edfd480fc56899b5561203d', part: "container", class: "bs-icon-tile", role: labelled ? 'img' : undefined, "aria-label": labelled ? this.label : undefined, "aria-hidden": labelled ? undefined : 'true' }, h("span", { key: '451991c16cba6afd20f4029fe39c607c09564119', part: "icon", class: "bs-icon-tile__icon" }, h("slot", { key: 'db458731df94f9abb079d1c432105baa482b5ae4', onSlotchange: (ev) => (this.hasCustomIcon = hasContent(ev.target)) }), !this.hasCustomIcon && (GLYPHS[this.intent] ?? GLYPHS.default))),
50
+ h("span", { key: 'cb8186734c1378b0f4d0ae16e1113bd9a82e5930', part: "text", class: { 'bs-icon-tile__text': true, 'bs-icon-tile__text--visible': this.hasText } }, h("slot", { key: 'ad2416e6a042634eca44acb5d8768754343900b5', name: "text", onSlotchange: (ev) => (this.hasText = ev.target.assignedNodes().length > 0) })),
51
51
  ];
52
52
  }
53
53
  static get is() { return "bs-icon-tile"; }
@@ -1,4 +1,5 @@
1
1
  import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ import { vi } from "vitest";
2
3
  describe('bs-input', () => {
3
4
  it('renders a native text input with an empty value by default', async () => {
4
5
  const { root } = await render(h("bs-input", null));
@@ -276,27 +277,141 @@ describe('bs-input', () => {
276
277
  expect(root).not.toHaveAttribute('open');
277
278
  });
278
279
  });
280
+ // Shared helpers for the select / initials-title / country pickers (trigger button + in-shadow listbox).
281
+ const pickerKey = (root, k, sel = '[role="combobox"]') => root.shadowRoot.querySelector(sel).dispatchEvent(new KeyboardEvent('keydown', { key: k, bubbles: true, composed: true, cancelable: true }));
282
+ const selectOpts = [
283
+ { label: 'One', value: '1' },
284
+ { label: 'Two', value: '2' },
285
+ { label: 'Three', value: '3' },
286
+ ];
287
+ const countries = [
288
+ { code: 'DK', label: 'Denmark', flagIcon: '\u{1F1E9}\u{1F1F0}' },
289
+ { code: 'US', label: 'United States', flagIcon: '\u{1F1FA}\u{1F1F8}' },
290
+ { code: 'GB', label: 'United Kingdom', flagIcon: '\u{1F1EC}\u{1F1E7}' },
291
+ ];
279
292
  describe('type="select"', () => {
280
- it('renders a native select with an option per entry', async () => {
281
- const { root } = await render(h("bs-input", { type: "select", options: [
282
- { label: 'One', value: '1' },
283
- { label: 'Two', value: '2' },
284
- ] }));
285
- const select = root.shadowRoot.querySelector('select');
286
- const options = select.querySelectorAll('option');
287
- expect(options.length).toBe(2);
288
- expect(options[1]).toHaveTextContent('Two');
289
- });
290
- it('emits bsChange with the selected value on change', async () => {
291
- const { root, spyOnEvent } = await render(h("bs-input", { type: "select", options: [
292
- { label: 'One', value: '1' },
293
- { label: 'Two', value: '2' },
294
- ] }));
295
- const bsChangeSpy = spyOnEvent('bsChange');
296
- const select = root.shadowRoot.querySelector('select');
297
- select.value = '2';
298
- select.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
299
- expect(bsChangeSpy).toHaveReceivedEventDetail('2');
293
+ it('renders a themed combobox trigger, not a native select, and no listbox while closed', async () => {
294
+ const { root } = await render(h("bs-input", { type: "select", label: "Role", options: selectOpts }));
295
+ expect(root.shadowRoot.querySelector('select')).toBeNull();
296
+ const trigger = root.shadowRoot.querySelector('button[role="combobox"]');
297
+ expect(trigger).toEqualAttribute('aria-haspopup', 'listbox');
298
+ expect(trigger).toEqualAttribute('aria-expanded', 'false');
299
+ expect(trigger).toEqualAttribute('id', 'control');
300
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).toBeNull();
301
+ });
302
+ it('opens a role=listbox with one role=option per entry on click, with aria-controls resolving in the shadow root', async () => {
303
+ const { root, waitForChanges } = await render(h("bs-input", { type: "select", value: "2", options: selectOpts }));
304
+ root.shadowRoot.querySelector('[part="field"]').click();
305
+ await waitForChanges();
306
+ const trigger = root.shadowRoot.querySelector('[role="combobox"]');
307
+ const options = root.shadowRoot.querySelectorAll('[role="option"]');
308
+ expect(trigger).toEqualAttribute('aria-expanded', 'true');
309
+ expect(root.shadowRoot.getElementById(trigger.getAttribute('aria-controls'))).toEqualAttribute('role', 'listbox');
310
+ expect(options.length).toBe(3);
311
+ expect(options[1]).toEqualAttribute('aria-selected', 'true');
312
+ expect(options[0]).toEqualAttribute('aria-selected', 'false');
313
+ // active option starts on the selected one and is exposed via aria-activedescendant
314
+ expect(trigger).toEqualAttribute('aria-activedescendant', 'option-1');
315
+ expect(options[1].querySelector('.bs-input__option-check')).not.toBeNull();
316
+ });
317
+ it('clicking an option sets value, closes, and emits bsInput + bsChange', async () => {
318
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "select", options: selectOpts }));
319
+ const changeSpy = spyOnEvent('bsChange');
320
+ const inputSpy = spyOnEvent('bsInput');
321
+ root.shadowRoot.querySelector('[part="field"]').click();
322
+ await waitForChanges();
323
+ root.shadowRoot.querySelectorAll('[role="option"]')[1].click();
324
+ await waitForChanges();
325
+ expect(changeSpy).toHaveReceivedEventDetail('2');
326
+ expect(inputSpy).toHaveReceivedEventDetail('2');
327
+ expect(root.value).toBe('2');
328
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).toBeNull();
329
+ expect(root.shadowRoot.querySelector('.bs-input__picker-text')).toHaveTextContent('Two');
330
+ });
331
+ it('supports keyboard: ArrowDown opens, arrows move, Enter selects, Escape closes', async () => {
332
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "select", options: selectOpts }));
333
+ const changeSpy = spyOnEvent('bsChange');
334
+ pickerKey(root, 'ArrowDown');
335
+ await waitForChanges();
336
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).not.toBeNull();
337
+ pickerKey(root, 'ArrowDown');
338
+ pickerKey(root, 'ArrowDown');
339
+ await waitForChanges();
340
+ expect(root.shadowRoot.querySelector('[role="combobox"]')).toEqualAttribute('aria-activedescendant', 'option-2');
341
+ pickerKey(root, 'Home');
342
+ await waitForChanges();
343
+ expect(root.shadowRoot.querySelector('[role="combobox"]')).toEqualAttribute('aria-activedescendant', 'option-0');
344
+ pickerKey(root, 'End');
345
+ pickerKey(root, 'Enter');
346
+ await waitForChanges();
347
+ expect(changeSpy).toHaveReceivedEventDetail('3');
348
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).toBeNull();
349
+ pickerKey(root, 'Enter');
350
+ await waitForChanges();
351
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).not.toBeNull();
352
+ root.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true, composed: true }));
353
+ await waitForChanges();
354
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).toBeNull();
355
+ expect(root.value).toBe('3');
356
+ });
357
+ it('type-ahead moves the active option while open and commits directly while closed', async () => {
358
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "select", options: selectOpts }));
359
+ const changeSpy = spyOnEvent('bsChange');
360
+ pickerKey(root, 't');
361
+ await waitForChanges();
362
+ expect(changeSpy).toHaveReceivedEventDetail('2');
363
+ pickerKey(root, 'ArrowDown');
364
+ await waitForChanges();
365
+ await new Promise(r => setTimeout(r, 600));
366
+ pickerKey(root, 'o');
367
+ await waitForChanges();
368
+ expect(root.shadowRoot.querySelector('[role="combobox"]')).toEqualAttribute('aria-activedescendant', 'option-0');
369
+ });
370
+ it('does not open when disabled', async () => {
371
+ const { root, waitForChanges } = await render(h("bs-input", { type: "select", disabled: true, options: selectOpts }));
372
+ root.shadowRoot.querySelector('[part="field"]').click();
373
+ await waitForChanges();
374
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).toBeNull();
375
+ expect(root.shadowRoot.querySelector('button[role="combobox"]')).toHaveAttribute('disabled');
376
+ });
377
+ it('participates in a form with the selected value', async () => {
378
+ const form = document.createElement('form');
379
+ document.body.appendChild(form);
380
+ const el = document.createElement('bs-input');
381
+ el.type = 'select';
382
+ el.name = 'role';
383
+ el.options = selectOpts;
384
+ el.value = '2';
385
+ form.appendChild(el);
386
+ await new Promise(r => setTimeout(r, 50));
387
+ expect(new FormData(form).get('role')).toBe('2');
388
+ form.remove();
389
+ });
390
+ it('styles the popup with BrandSync tokens (raised surface, shadow), in light and dark', async () => {
391
+ const popup = async (dark) => {
392
+ if (dark)
393
+ document.documentElement.setAttribute('data-theme', 'dark');
394
+ try {
395
+ const { root, waitForChanges } = await render(h("bs-input", { type: "select", options: selectOpts }));
396
+ root.shadowRoot.querySelector('[part="field"]').click();
397
+ await waitForChanges();
398
+ const el = root.shadowRoot.querySelector('[part="menu"]');
399
+ const cs = getComputedStyle(el);
400
+ const probe = document.createElement('div');
401
+ probe.style.background = 'var(--bs-surface-raised)';
402
+ document.body.appendChild(probe);
403
+ const expected = getComputedStyle(probe).backgroundColor;
404
+ probe.remove();
405
+ expect(cs.backgroundColor).toBe(expected);
406
+ expect(cs.boxShadow).not.toBe('none');
407
+ expect(cs.borderRadius).not.toBe('0px');
408
+ }
409
+ finally {
410
+ document.documentElement.removeAttribute('data-theme');
411
+ }
412
+ };
413
+ await popup(false);
414
+ await popup(true);
300
415
  });
301
416
  });
302
417
  describe('type="textarea"', () => {
@@ -332,31 +447,56 @@ describe('bs-input', () => {
332
447
  });
333
448
  });
334
449
  describe('type="initials"', () => {
335
- it('renders a title select followed by a text input, sharing one label', async () => {
336
- const { root } = await render(h("bs-input", { type: "initials", label: "Name", titleOptions: ['Mrs.', 'Mr.', 'Dr.'] }));
337
- const select = root.shadowRoot.querySelector('.bs-input__title-select');
450
+ const titles = ['Mrs.', 'Mr.', 'Dr.'];
451
+ it('renders a title combobox followed by a text input, sharing one label', async () => {
452
+ const { root } = await render(h("bs-input", { type: "initials", label: "Name", titleOptions: titles, initialsTitle: "Mr." }));
453
+ const trigger = root.shadowRoot.querySelector('button[role="combobox"]');
338
454
  const input = root.shadowRoot.querySelector('input');
339
455
  const label = root.shadowRoot.querySelector('label');
340
- expect(select.querySelectorAll('option').length).toBe(3);
456
+ expect(root.shadowRoot.querySelector('select')).toBeNull();
457
+ expect(trigger).toHaveTextContent('Mr.');
458
+ expect(trigger).toEqualAttribute('aria-label', 'Title');
341
459
  expect(label).toEqualAttribute('for', 'control');
342
460
  expect(input).toEqualAttribute('id', 'control');
343
461
  });
344
- it('emits bsTitleChange when the title select changes', async () => {
345
- const { root, spyOnEvent } = await render(h("bs-input", { type: "initials", titleOptions: ['Mrs.', 'Mr.'] }));
346
- const bsTitleChangeSpy = spyOnEvent('bsTitleChange');
347
- const select = root.shadowRoot.querySelector('.bs-input__title-select');
348
- select.value = 'Mr.';
349
- select.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
350
- expect(bsTitleChangeSpy).toHaveReceivedEventDetail('Mr.');
462
+ it('opens a listbox, selecting a title emits bsTitleChange and updates initialsTitle', async () => {
463
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "initials", titleOptions: titles }));
464
+ const spy = spyOnEvent('bsTitleChange');
465
+ root.shadowRoot.querySelector('[part="field"]').click();
466
+ await waitForChanges();
467
+ const options = root.shadowRoot.querySelectorAll('[role="option"]');
468
+ expect(options.length).toBe(3);
469
+ options[1].click();
470
+ await waitForChanges();
471
+ expect(spy).toHaveReceivedEventDetail('Mr.');
472
+ expect(root.initialsTitle).toBe('Mr.');
473
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).toBeNull();
474
+ });
475
+ it('selects a title with the keyboard', async () => {
476
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "initials", titleOptions: titles }));
477
+ const spy = spyOnEvent('bsTitleChange');
478
+ pickerKey(root, 'ArrowDown');
479
+ pickerKey(root, 'ArrowDown');
480
+ pickerKey(root, 'Enter');
481
+ await waitForChanges();
482
+ expect(spy).toHaveReceivedEventDetail('Mr.');
351
483
  });
352
- it('renders the title select and the text input in two separate [part="field"] boxes, not one shared field', async () => {
484
+ it('renders the title picker and the text input in two separate bordered [part="field"] boxes with a gap', async () => {
353
485
  const { root } = await render(h("bs-input", { type: "initials", titleOptions: ['Mrs.', 'Mr.'] }));
354
486
  const fields = root.shadowRoot.querySelectorAll('[part="field"]');
355
487
  expect(fields).toHaveLength(2);
356
488
  expect(fields[0]).toHaveClass('bs-input__field--initials-title');
357
- expect(fields[0].querySelector('select')).not.toBeNull();
489
+ expect(fields[0].querySelector('button[role="combobox"]')).not.toBeNull();
358
490
  expect(fields[1]).toHaveClass('bs-input__field--initials-value');
359
491
  expect(fields[1].querySelector('input')).not.toBeNull();
492
+ const [a, b] = Array.from(fields);
493
+ for (const f of [a, b]) {
494
+ const cs = getComputedStyle(f);
495
+ expect(cs.borderTopWidth).toBe('1px');
496
+ expect(cs.borderTopStyle).toBe('solid');
497
+ expect(parseFloat(cs.borderTopLeftRadius)).toBeGreaterThan(0);
498
+ }
499
+ expect(b.getBoundingClientRect().left - a.getBoundingClientRect().right).toBeGreaterThan(0);
360
500
  });
361
501
  it('applies the error class to both the title box and the value box', async () => {
362
502
  const { root } = await render(h("bs-input", { type: "initials", titleOptions: ['Mrs.'], error: "Required" }));
@@ -366,18 +506,76 @@ describe('bs-input', () => {
366
506
  });
367
507
  });
368
508
  describe('type="country"', () => {
369
- it('renders a country select followed by a text input', async () => {
370
- const { root } = await render(h("bs-input", { type: "country", countryOptions: [{ code: 'DK', label: 'Denmark' }, { code: 'US', label: 'United States' }] }));
371
- const select = root.shadowRoot.querySelector('.bs-input__country-select');
372
- expect(select.querySelectorAll('option').length).toBe(2);
373
- });
374
- it('emits bsCountryChange when the country select changes', async () => {
375
- const { root, spyOnEvent } = await render(h("bs-input", { type: "country", countryOptions: [{ code: 'DK', label: 'Denmark' }, { code: 'US', label: 'United States' }] }));
376
- const bsCountryChangeSpy = spyOnEvent('bsCountryChange');
377
- const select = root.shadowRoot.querySelector('.bs-input__country-select');
378
- select.value = 'US';
379
- select.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
380
- expect(bsCountryChangeSpy).toHaveReceivedEventDetail('US');
509
+ it('renders two separate bordered fields: a flag picker and the phone input', async () => {
510
+ const { root } = await render(h("bs-input", { type: "country", country: "US", countryOptions: countries }));
511
+ const fields = Array.from(root.shadowRoot.querySelectorAll('[part="field"]'));
512
+ expect(fields).toHaveLength(2);
513
+ expect(root.shadowRoot.querySelector('select')).toBeNull();
514
+ expect(fields[0].querySelector('button[role="combobox"]')).not.toBeNull();
515
+ expect(fields[1].querySelector('input')).not.toBeNull();
516
+ for (const f of fields)
517
+ expect(getComputedStyle(f).borderTopWidth).toBe('1px');
518
+ expect(fields[1].getBoundingClientRect().left - fields[0].getBoundingClientRect().right).toBeGreaterThan(0);
519
+ });
520
+ it('shows the selected country flag in the trigger, with an accessible name', async () => {
521
+ const { root } = await render(h("bs-input", { type: "country", country: "US", countryOptions: countries }));
522
+ const trigger = root.shadowRoot.querySelector('button[role="combobox"]');
523
+ expect(trigger.querySelector('[part="flag"]')).toHaveTextContent('\u{1F1FA}\u{1F1F8}');
524
+ expect(trigger).toEqualAttribute('aria-label', 'Country: United States');
525
+ });
526
+ it('falls back to the country code when there is no flag', async () => {
527
+ const { root } = await render(h("bs-input", { type: "country", country: "DK", countryOptions: [{ code: 'DK', label: 'Denmark' }] }));
528
+ const trigger = root.shadowRoot.querySelector('button[role="combobox"]');
529
+ expect(trigger.querySelector('[part="flag"]')).toBeNull();
530
+ expect(trigger).toHaveTextContent('DK');
531
+ });
532
+ it('shows flag, code and name in each option and marks the selected one', async () => {
533
+ const { root, waitForChanges } = await render(h("bs-input", { type: "country", country: "US", countryOptions: countries }));
534
+ root.shadowRoot.querySelector('[part="field"]').click();
535
+ await waitForChanges();
536
+ const options = root.shadowRoot.querySelectorAll('[role="option"]');
537
+ expect(options.length).toBe(3);
538
+ expect(options[0].querySelector('[part="flag"]')).not.toBeNull();
539
+ expect(options[0]).toHaveTextContent('DK Denmark');
540
+ expect(options[1]).toEqualAttribute('aria-selected', 'true');
541
+ });
542
+ it('emits bsCountryChange and updates country when an option is chosen', async () => {
543
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "country", countryOptions: countries }));
544
+ const spy = spyOnEvent('bsCountryChange');
545
+ root.shadowRoot.querySelector('[part="field"]').click();
546
+ await waitForChanges();
547
+ root.shadowRoot.querySelectorAll('[role="option"]')[2].click();
548
+ await waitForChanges();
549
+ expect(spy).toHaveReceivedEventDetail('GB');
550
+ expect(root.country).toBe('GB');
551
+ });
552
+ it('keeps the phone number as the form value', async () => {
553
+ const form = document.createElement('form');
554
+ document.body.appendChild(form);
555
+ const el = document.createElement('bs-input');
556
+ el.type = 'country';
557
+ el.name = 'phone';
558
+ el.countryOptions = countries;
559
+ el.value = '12345678';
560
+ form.appendChild(el);
561
+ await new Promise(r => setTimeout(r, 50));
562
+ expect(new FormData(form).get('phone')).toBe('12345678');
563
+ form.remove();
564
+ });
565
+ it('supports keyboard selection and Escape', async () => {
566
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "country", countryOptions: countries }));
567
+ const spy = spyOnEvent('bsCountryChange');
568
+ pickerKey(root, 'ArrowDown');
569
+ await waitForChanges();
570
+ root.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true, composed: true }));
571
+ await waitForChanges();
572
+ expect(root.shadowRoot.querySelector('[role="listbox"]')).toBeNull();
573
+ expect(spy).not.toHaveReceivedEvent();
574
+ pickerKey(root, 'ArrowDown');
575
+ pickerKey(root, 'ArrowDown');
576
+ pickerKey(root, 'Enter');
577
+ await waitForChanges();
578
+ expect(spy).toHaveReceivedEventDetail('US');
381
579
  });
382
580
  });
383
581
  describe('type="pin"', () => {
@@ -428,4 +626,192 @@ describe('bs-input', () => {
428
626
  expect(label.fontWeight).toBe('600');
429
627
  });
430
628
  });
629
+ describe('type="combobox"', () => {
630
+ const opts = [
631
+ { label: 'Denmark', value: 'dk' },
632
+ { label: 'Sweden', value: 'se' },
633
+ { label: 'Norway', value: 'no' },
634
+ ];
635
+ const key = (root, k) => root.shadowRoot.querySelector('input').dispatchEvent(new KeyboardEvent('keydown', { key: k, bubbles: true, composed: true, cancelable: true }));
636
+ const typeText = async (root, text, waitForChanges) => {
637
+ const input = root.shadowRoot.querySelector('input');
638
+ input.value = text;
639
+ input.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true }));
640
+ await waitForChanges();
641
+ };
642
+ it('exposes combobox ARIA on the input, with aria-controls resolving inside the shadow root', async () => {
643
+ const { root, waitForChanges } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts }));
644
+ const input = root.shadowRoot.querySelector('input');
645
+ expect(input).toEqualAttribute('role', 'combobox');
646
+ expect(input).toEqualAttribute('aria-expanded', 'false');
647
+ expect(input).toEqualAttribute('aria-autocomplete', 'list');
648
+ expect(input).toEqualAttribute('aria-controls', 'listbox');
649
+ expect(input).not.toHaveAttribute('aria-activedescendant');
650
+ key(root, 'ArrowDown');
651
+ await waitForChanges();
652
+ expect(input).toEqualAttribute('aria-expanded', 'true');
653
+ const listbox = root.shadowRoot.getElementById('listbox');
654
+ expect(listbox).not.toBeNull();
655
+ expect(listbox).toEqualAttribute('role', 'listbox');
656
+ expect(root.shadowRoot.querySelectorAll('[role="option"]').length).toBe(3);
657
+ expect(input).toEqualAttribute('aria-activedescendant', 'option-0');
658
+ expect(root.shadowRoot.getElementById('option-0')).toEqualAttribute('aria-selected', 'true');
659
+ });
660
+ it('ArrowDown/ArrowUp move the active option (wrapping), Home/End jump', async () => {
661
+ const { root, waitForChanges } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts }));
662
+ const input = root.shadowRoot.querySelector('input');
663
+ key(root, 'ArrowDown');
664
+ key(root, 'ArrowDown');
665
+ await waitForChanges();
666
+ expect(input).toEqualAttribute('aria-activedescendant', 'option-1');
667
+ key(root, 'End');
668
+ await waitForChanges();
669
+ expect(input).toEqualAttribute('aria-activedescendant', 'option-2');
670
+ key(root, 'ArrowDown');
671
+ await waitForChanges();
672
+ expect(input).toEqualAttribute('aria-activedescendant', 'option-0');
673
+ key(root, 'ArrowUp');
674
+ await waitForChanges();
675
+ expect(input).toEqualAttribute('aria-activedescendant', 'option-2');
676
+ key(root, 'Home');
677
+ await waitForChanges();
678
+ expect(input).toEqualAttribute('aria-activedescendant', 'option-0');
679
+ });
680
+ it('opens and filters while typing and emits bsInput with the text', async () => {
681
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts }));
682
+ const spy = spyOnEvent('bsInput');
683
+ await typeText(root, 'sw', waitForChanges);
684
+ expect(spy).toHaveReceivedEventDetail('sw');
685
+ expect(root).toHaveAttribute('open');
686
+ const options = root.shadowRoot.querySelectorAll('[role="option"]');
687
+ expect(options.length).toBe(1);
688
+ expect(options[0]).toHaveTextContent('Sweden');
689
+ });
690
+ it('does not filter when filterOptions is false', async () => {
691
+ const { root, waitForChanges } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts, filterOptions: false }));
692
+ await typeText(root, 'zzz', waitForChanges);
693
+ expect(root.shadowRoot.querySelectorAll('[role="option"]').length).toBe(3);
694
+ });
695
+ it('Enter selects the active option: sets value, closes, emits bsOptionSelect and bsChange', async () => {
696
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts }));
697
+ const selectSpy = spyOnEvent('bsOptionSelect');
698
+ const changeSpy = spyOnEvent('bsChange');
699
+ key(root, 'ArrowDown');
700
+ key(root, 'ArrowDown');
701
+ await waitForChanges();
702
+ key(root, 'Enter');
703
+ await waitForChanges();
704
+ expect(selectSpy).toHaveReceivedEventDetail({ label: 'Sweden', value: 'se' });
705
+ expect(changeSpy).toHaveReceivedEventDetail('Sweden');
706
+ expect(root).not.toHaveAttribute('open');
707
+ expect(root.shadowRoot.querySelector('input').value).toBe('Sweden');
708
+ expect(root.shadowRoot.getElementById('listbox')).toBeNull();
709
+ });
710
+ it('Enter without an active option does not select', async () => {
711
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts }));
712
+ const selectSpy = spyOnEvent('bsOptionSelect');
713
+ await typeText(root, 'den', waitForChanges);
714
+ key(root, 'Enter');
715
+ await waitForChanges();
716
+ expect(selectSpy).not.toHaveReceivedEvent();
717
+ });
718
+ it('clicking an option selects it', async () => {
719
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts, open: true }));
720
+ const selectSpy = spyOnEvent('bsOptionSelect');
721
+ root.shadowRoot.getElementById('option-2').click();
722
+ await waitForChanges();
723
+ expect(selectSpy).toHaveReceivedEventDetail({ label: 'Norway', value: 'no' });
724
+ });
725
+ it('Escape closes the popup', async () => {
726
+ const { root, waitForChanges } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts, open: true }));
727
+ key(root, 'Escape');
728
+ await waitForChanges();
729
+ expect(root).not.toHaveAttribute('open');
730
+ });
731
+ it('shows a "No results" status when nothing matches', async () => {
732
+ const { root, waitForChanges } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts }));
733
+ await typeText(root, 'xyz', waitForChanges);
734
+ expect(root.shadowRoot.querySelectorAll('[role="option"]').length).toBe(0);
735
+ expect(root.shadowRoot.querySelector('[role="status"]')).toHaveTextContent('No results');
736
+ });
737
+ it('shows a loading indicator and message while loading with no results', async () => {
738
+ const { root, waitForChanges } = await render(h("bs-input", { type: "combobox", label: "Country", options: [], loading: true, open: true }));
739
+ await waitForChanges();
740
+ expect(root.shadowRoot.querySelector('bs-spinner')).not.toBeNull();
741
+ expect(root.shadowRoot.querySelector('[role="status"]')).toHaveTextContent('Loading...');
742
+ });
743
+ it('renders a clear button only with a value; clicking it empties the value and emits events', async () => {
744
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-input", { type: "combobox", label: "Country", options: opts }));
745
+ expect(root.shadowRoot.querySelector('[part="clear"]')).toBeNull();
746
+ await typeText(root, 'den', waitForChanges);
747
+ const clear = root.shadowRoot.querySelector('[part="clear"]');
748
+ expect(clear).not.toBeNull();
749
+ const inputSpy = spyOnEvent('bsInput');
750
+ clear.click();
751
+ await waitForChanges();
752
+ expect(inputSpy).toHaveReceivedEventDetail('');
753
+ expect(root.shadowRoot.querySelector('input').value).toBe('');
754
+ expect(root.shadowRoot.querySelector('[part="clear"]')).toBeNull();
755
+ });
756
+ it('does not render a clear button when disabled', async () => {
757
+ const { root } = await render(h("bs-input", { type: "combobox", label: "Country", value: "Denmark", disabled: true }));
758
+ expect(root.shadowRoot.querySelector('[part="clear"]')).toBeNull();
759
+ });
760
+ });
761
+ describe('aria-label pass-through', () => {
762
+ it('sets aria-label on the control when there is no visible label', async () => {
763
+ const { root } = await render(h("bs-input", { ariaLabel: "Search products" }));
764
+ expect(root.shadowRoot.querySelector('input')).toEqualAttribute('aria-label', 'Search products');
765
+ });
766
+ it('does not set aria-label when a visible label exists', async () => {
767
+ const { root } = await render(h("bs-input", { label: "Name", ariaLabel: "Ignored" }));
768
+ expect(root.shadowRoot.querySelector('input')).not.toHaveAttribute('aria-label');
769
+ });
770
+ });
771
+ describe('type="date" picker icon', () => {
772
+ it('renders a single custom calendar button and opens the picker via showPicker()', async () => {
773
+ const { root } = await render(h("bs-input", { type: "date", label: "Date" }));
774
+ const input = root.shadowRoot.querySelector('input');
775
+ const showPicker = vi.fn();
776
+ input.showPicker = showPicker;
777
+ const btn = root.shadowRoot.querySelector('.bs-input__calendar-btn');
778
+ expect(btn).not.toBeNull();
779
+ btn.click();
780
+ expect(showPicker).toHaveBeenCalledTimes(1);
781
+ });
782
+ it('falls back to focusing the input when showPicker is unavailable', async () => {
783
+ const { root } = await render(h("bs-input", { type: "date", label: "Date" }));
784
+ const input = root.shadowRoot.querySelector('input');
785
+ input.showPicker = undefined;
786
+ root.shadowRoot.querySelector('.bs-input__calendar-btn').click();
787
+ expect(root.shadowRoot.activeElement).toBe(input);
788
+ });
789
+ });
790
+ describe('sizing', () => {
791
+ it('number stepper buttons are at least 24px', async () => {
792
+ const { root } = await render(h("bs-input", { type: "number", label: "Qty" }));
793
+ const btn = getComputedStyle(root.shadowRoot.querySelector('.bs-input__stepper-btn'));
794
+ expect(parseFloat(btn.width)).toBeGreaterThanOrEqual(24);
795
+ expect(parseFloat(btn.height)).toBeGreaterThanOrEqual(24);
796
+ });
797
+ it('description text is 14px and the stack gap is 8px', async () => {
798
+ const { root } = await render(h("bs-input", { label: "Name", description: "Helper" }));
799
+ expect(getComputedStyle(root.shadowRoot.querySelector('.bs-input__description')).fontSize).toBe('14px');
800
+ expect(getComputedStyle(root.shadowRoot.querySelector('.bs-input')).rowGap).toBe('8px');
801
+ });
802
+ it('pin uses a 6px cell gap and 44px cells', async () => {
803
+ const { root } = await render(h("bs-input", { type: "pin", length: 4 }));
804
+ const field = getComputedStyle(root.shadowRoot.querySelector('.bs-input__field--pin'));
805
+ expect(field.columnGap).toBe('6px');
806
+ const cell = getComputedStyle(root.shadowRoot.querySelector('.bs-input__pin-cell'));
807
+ expect(cell.width).toBe('44px');
808
+ expect(cell.height).toBe('44px');
809
+ });
810
+ it('chip pills use size="md" (24px)', async () => {
811
+ const { root } = await render(h("bs-input", { type: "chip", chips: ['a'] }));
812
+ const chip = root.shadowRoot.querySelector('bs-chip-informative');
813
+ expect(chip.size).toBe('md');
814
+ expect(chip.getBoundingClientRect().height).toBe(24);
815
+ });
816
+ });
431
817
  });