@brandsync/wc 1.12.0 → 1.13.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 (500) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/CONVENTIONS.md +109 -0
  3. package/REFERENCE.md +1357 -0
  4. package/custom-elements.json +2628 -338
  5. package/dist/brandsync-wc/brandsync-wc.css +1 -1783
  6. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  7. package/dist/brandsync-wc/{p-83c90489.entry.js → p-00be9a64.entry.js} +1 -1
  8. package/dist/brandsync-wc/{p-b9ccd9d1.entry.js → p-020cb767.entry.js} +1 -1
  9. package/dist/brandsync-wc/p-046a53de.entry.js +1 -0
  10. package/dist/brandsync-wc/{p-282ddbee.entry.js → p-07966676.entry.js} +1 -1
  11. package/dist/brandsync-wc/p-0cb6fc39.entry.js +1 -0
  12. package/dist/brandsync-wc/{p-2497d128.entry.js → p-0e940ee1.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-e5daa6ca.entry.js → p-10290c41.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-e2556b4e.entry.js → p-144b6ac8.entry.js} +1 -1
  15. package/dist/brandsync-wc/p-1b5cc9b8.entry.js +1 -0
  16. package/dist/brandsync-wc/p-23b56775.entry.js +1 -0
  17. package/dist/brandsync-wc/{p-a9169157.entry.js → p-23cc532f.entry.js} +1 -1
  18. package/dist/brandsync-wc/{p-81605b82.entry.js → p-361aef36.entry.js} +1 -1
  19. package/dist/brandsync-wc/{p-89fabf27.entry.js → p-3789c7a5.entry.js} +1 -1
  20. package/dist/brandsync-wc/p-3f6682f8.entry.js +1 -0
  21. package/dist/brandsync-wc/{p-f5180578.entry.js → p-4054a944.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-fc069773.entry.js → p-45cb3e6d.entry.js} +1 -1
  23. package/dist/brandsync-wc/{p-de110ad0.entry.js → p-47b7fe76.entry.js} +1 -1
  24. package/dist/brandsync-wc/{p-2f4e08e1.entry.js → p-47cd19aa.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-3a1af63a.entry.js → p-4bbc4809.entry.js} +1 -1
  26. package/dist/brandsync-wc/{p-247e36ad.entry.js → p-4ea435a6.entry.js} +1 -1
  27. package/dist/brandsync-wc/{p-56c37e0a.entry.js → p-4ea9b6a1.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-1978e63c.entry.js → p-53362609.entry.js} +1 -1
  29. package/dist/brandsync-wc/p-658532b7.entry.js +1 -0
  30. package/dist/brandsync-wc/p-68f0be29.entry.js +1 -0
  31. package/dist/brandsync-wc/{p-09bc1923.entry.js → p-694fe468.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-78f4fcf0.entry.js → p-6ca1e51b.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-52cb2358.entry.js → p-6e923ebc.entry.js} +1 -1
  34. package/dist/brandsync-wc/p-7e24dbd7.entry.js +1 -0
  35. package/dist/brandsync-wc/{p-00a0d489.entry.js → p-8048d033.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-2368a92e.entry.js → p-8184d7de.entry.js} +1 -1
  37. package/dist/brandsync-wc/p-8390a155.entry.js +1 -0
  38. package/dist/brandsync-wc/{p-0b2d3b7e.entry.js → p-86028548.entry.js} +1 -1
  39. package/dist/brandsync-wc/{p-fcee0dc4.entry.js → p-89fa7567.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-7796b93f.entry.js → p-8c9938a5.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-68fcd4a4.entry.js → p-9125632c.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-416322bd.entry.js → p-94d435a2.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-69c0a85d.entry.js → p-95f034fc.entry.js} +1 -1
  44. package/dist/brandsync-wc/p-9b58c0c5.entry.js +1 -0
  45. package/dist/brandsync-wc/{p-39a26c64.entry.js → p-9cf8274a.entry.js} +1 -1
  46. package/dist/brandsync-wc/p-9d12b1fb.entry.js +1 -0
  47. package/dist/brandsync-wc/{p-5ba90a13.entry.js → p-9d660c03.entry.js} +1 -1
  48. package/dist/brandsync-wc/p-D3SkQJpw.js +3 -0
  49. package/dist/brandsync-wc/{p-7f954939.entry.js → p-a28ef52e.entry.js} +1 -1
  50. package/dist/brandsync-wc/{p-09435f41.entry.js → p-a5659499.entry.js} +1 -1
  51. package/dist/brandsync-wc/p-ab07c9b5.entry.js +1 -0
  52. package/dist/brandsync-wc/p-b0b2e525.entry.js +1 -0
  53. package/dist/brandsync-wc/p-b6ac1b50.entry.js +1 -0
  54. package/dist/brandsync-wc/p-bee30626.entry.js +1 -0
  55. package/dist/brandsync-wc/p-bf8bd386.entry.js +1 -0
  56. package/dist/brandsync-wc/{p-1aab6d07.entry.js → p-c05ee501.entry.js} +1 -1
  57. package/dist/brandsync-wc/p-c3da3080.entry.js +1 -0
  58. package/dist/brandsync-wc/p-c679b631.entry.js +1 -0
  59. package/dist/brandsync-wc/p-cceb8484.entry.js +1 -0
  60. package/dist/brandsync-wc/p-cd53bba9.entry.js +1 -0
  61. package/dist/brandsync-wc/p-ce16f038.entry.js +1 -0
  62. package/dist/brandsync-wc/{p-491b51e6.entry.js → p-d5a6098d.entry.js} +1 -1
  63. package/dist/brandsync-wc/{p-f15d9524.entry.js → p-d64cae57.entry.js} +1 -1
  64. package/dist/brandsync-wc/p-dfad8c0a.entry.js +1 -0
  65. package/dist/brandsync-wc/p-e0504a4b.entry.js +1 -0
  66. package/dist/brandsync-wc/{p-0ee4126c.entry.js → p-e1b7bea7.entry.js} +1 -1
  67. package/dist/brandsync-wc/{p-0b7c77c1.entry.js → p-e65d286c.entry.js} +1 -1
  68. package/dist/brandsync-wc/p-ed5c2d97.entry.js +1 -0
  69. package/dist/brandsync-wc/p-f134a502.entry.js +1 -0
  70. package/dist/brandsync-wc/p-f271e1d2.entry.js +1 -0
  71. package/dist/brandsync-wc/{p-3f09296a.entry.js → p-f3eca1ce.entry.js} +1 -1
  72. package/dist/brandsync-wc/{p-617bd13a.entry.js → p-f8d47004.entry.js} +1 -1
  73. package/dist/brandsync-wc/p-fa34fe20.entry.js +1 -0
  74. package/dist/brandsync-wc/{p-2177042f.entry.js → p-fa6b9750.entry.js} +1 -1
  75. package/dist/brandsync-wc/p-fb4d0093.entry.js +1 -0
  76. package/dist/brandsync-wc/{p-78a69a59.entry.js → p-fc76031e.entry.js} +1 -1
  77. package/dist/brandsync-wc/{p-be3dd446.entry.js → p-ffc07eb5.entry.js} +1 -1
  78. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  79. package/dist/cjs/bs-accordion-group.cjs.entry.js +33 -0
  80. package/dist/cjs/bs-accordion.cjs.entry.js +1 -1
  81. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +2 -2
  82. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  83. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  84. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  85. package/dist/cjs/bs-attachment.cjs.entry.js +9 -5
  86. package/dist/cjs/bs-avatar.cjs.entry.js +1 -1
  87. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  88. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +1 -1
  89. package/dist/cjs/bs-breadcrumb.cjs.entry.js +1 -1
  90. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +2 -2
  91. package/dist/cjs/bs-button-skeleton.cjs.entry.js +4 -2
  92. package/dist/cjs/bs-button.cjs.entry.js +1 -1
  93. package/dist/cjs/bs-card.cjs.entry.js +1 -1
  94. package/dist/cjs/bs-carousel.cjs.entry.js +1 -1
  95. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +18 -2
  96. package/dist/cjs/bs-chatbot-header.cjs.entry.js +20 -2
  97. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +25 -3
  98. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +4 -2
  99. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +3 -3
  100. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +4 -2
  101. package/dist/cjs/bs-checkbox.cjs.entry.js +1 -1
  102. package/dist/cjs/bs-chip-filter.cjs.entry.js +1 -1
  103. package/dist/cjs/bs-chip-informative.cjs.entry.js +1 -1
  104. package/dist/cjs/bs-chip-input.cjs.entry.js +4 -2
  105. package/dist/cjs/bs-citation-preview.cjs.entry.js +29 -0
  106. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +11 -3
  107. package/dist/cjs/bs-composer.cjs.entry.js +36 -7
  108. package/dist/cjs/bs-cookie-consent.cjs.entry.js +1 -1
  109. package/dist/cjs/bs-data-table.cjs.entry.js +5 -3
  110. package/dist/cjs/bs-datepicker.cjs.entry.js +1 -1
  111. package/dist/cjs/bs-dialog.cjs.entry.js +4 -2
  112. package/dist/cjs/bs-error-page.cjs.entry.js +1 -1
  113. package/dist/cjs/bs-file-upload-item.cjs.entry.js +1 -1
  114. package/dist/cjs/bs-file-upload.cjs.entry.js +1 -1
  115. package/dist/cjs/bs-icon-button.cjs.entry.js +1 -1
  116. package/dist/cjs/bs-icon-tile.cjs.entry.js +1 -1
  117. package/dist/cjs/bs-inline-tab.cjs.entry.js +2 -2
  118. package/dist/cjs/bs-input_3.cjs.entry.js +16 -8
  119. package/dist/cjs/bs-logo.cjs.entry.js +1 -1
  120. package/dist/cjs/bs-message-list.cjs.entry.js +71 -0
  121. package/dist/cjs/bs-message.cjs.entry.js +25 -0
  122. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +2 -2
  123. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +9 -3
  124. package/dist/cjs/bs-navigation-header.cjs.entry.js +2 -2
  125. package/dist/cjs/bs-onboarding-checklist.cjs.entry.js +1 -1
  126. package/dist/cjs/bs-pagination.cjs.entry.js +6 -2
  127. package/dist/cjs/bs-popover.cjs.entry.js +153 -0
  128. package/dist/cjs/bs-product-tour.cjs.entry.js +1 -1
  129. package/dist/cjs/bs-progress-linear.cjs.entry.js +3 -3
  130. package/dist/cjs/bs-progress.cjs.entry.js +3 -3
  131. package/dist/cjs/bs-qr-code.cjs.entry.js +2 -2
  132. package/dist/cjs/bs-radio.cjs.entry.js +2 -2
  133. package/dist/cjs/bs-session-timeout.cjs.entry.js +2 -2
  134. package/dist/cjs/bs-side-panel.cjs.entry.js +164 -0
  135. package/dist/cjs/bs-skeleton.cjs.entry.js +51 -0
  136. package/dist/cjs/bs-slider.cjs.entry.js +7 -3
  137. package/dist/cjs/bs-snackbar.cjs.entry.js +2 -2
  138. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  139. package/dist/cjs/bs-spinner.cjs.entry.js +24 -0
  140. package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
  141. package/dist/cjs/bs-stepper.cjs.entry.js +2 -2
  142. package/dist/cjs/bs-switch.cjs.entry.js +2 -2
  143. package/dist/cjs/bs-tab_3.cjs.entry.js +4 -4
  144. package/dist/cjs/bs-timepicker.cjs.entry.js +8 -4
  145. package/dist/cjs/bs-toast.cjs.entry.js +4 -2
  146. package/dist/cjs/bs-tooltip-trigger.cjs.entry.js +46 -0
  147. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  148. package/dist/cjs/bs-whats-new.cjs.entry.js +1 -1
  149. package/dist/cjs/index-BYfMRtlW.js +1863 -0
  150. package/dist/cjs/loader.cjs.js +2 -2
  151. package/dist/collection/collection-manifest.json +9 -0
  152. package/dist/collection/components/bs-accordion-group/bs-accordion-group.cmp.test.js +39 -0
  153. package/dist/collection/components/bs-accordion-group/bs-accordion-group.css +10 -0
  154. package/dist/collection/components/bs-accordion-group/bs-accordion-group.js +86 -0
  155. package/dist/collection/components/bs-accordion-group/bs-accordion-group.stories.js +18 -0
  156. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  157. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  158. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  159. package/dist/collection/components/bs-attachment/bs-attachment.js +48 -4
  160. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  161. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  162. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +23 -1
  163. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.cmp.test.js +10 -0
  164. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +178 -2
  165. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.cmp.test.js +6 -0
  166. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +200 -1
  167. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.cmp.test.js +8 -0
  168. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.css +4 -0
  169. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +223 -1
  170. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +24 -2
  171. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.css +1 -4
  172. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +3 -6
  173. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +23 -1
  174. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.js +23 -1
  175. package/dist/collection/components/bs-citation-preview/bs-citation-preview.cmp.test.js +34 -0
  176. package/dist/collection/components/bs-citation-preview/bs-citation-preview.css +36 -0
  177. package/dist/collection/components/bs-citation-preview/bs-citation-preview.js +154 -0
  178. package/dist/collection/components/bs-citation-preview/bs-citation-preview.stories.js +22 -0
  179. package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +29 -2
  180. package/dist/collection/components/bs-composer/bs-composer.css +16 -0
  181. package/dist/collection/components/bs-composer/bs-composer.js +234 -6
  182. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.cmp.test.js +5 -0
  183. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.css +16 -0
  184. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +49 -1
  185. package/dist/collection/components/bs-data-table/bs-data-table.js +24 -2
  186. package/dist/collection/components/bs-dialog/bs-dialog.js +23 -1
  187. package/dist/collection/components/bs-input/bs-input.js +93 -5
  188. package/dist/collection/components/bs-input/bs-input.stories.js +7 -23
  189. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  190. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  191. package/dist/collection/components/bs-message/bs-message.cmp.test.js +36 -0
  192. package/dist/collection/components/bs-message/bs-message.css +77 -0
  193. package/dist/collection/components/bs-message/bs-message.js +156 -0
  194. package/dist/collection/components/bs-message/bs-message.stories.js +33 -0
  195. package/dist/collection/components/bs-message-list/bs-message-list.cmp.test.js +58 -0
  196. package/dist/collection/components/bs-message-list/bs-message-list.css +40 -0
  197. package/dist/collection/components/bs-message-list/bs-message-list.js +161 -0
  198. package/dist/collection/components/bs-message-list/bs-message-list.stories.js +17 -0
  199. package/dist/collection/components/bs-pagination/bs-pagination.cmp.test.js +5 -0
  200. package/dist/collection/components/bs-pagination/bs-pagination.js +45 -1
  201. package/dist/collection/components/bs-popover/bs-popover.cmp.test.js +107 -0
  202. package/dist/collection/components/bs-popover/bs-popover.css +61 -0
  203. package/dist/collection/components/bs-popover/bs-popover.js +247 -0
  204. package/dist/collection/components/bs-popover/bs-popover.stories.js +26 -0
  205. package/dist/collection/components/bs-progress/bs-progress.js +2 -2
  206. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +2 -2
  207. package/dist/collection/components/bs-qr-code/bs-qr-code.js +1 -1
  208. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  209. package/dist/collection/components/bs-session-timeout/bs-session-timeout.js +1 -1
  210. package/dist/collection/components/bs-side-panel/bs-side-panel.cmp.test.js +117 -0
  211. package/dist/collection/components/bs-side-panel/bs-side-panel.css +77 -0
  212. package/dist/collection/components/bs-side-panel/bs-side-panel.js +325 -0
  213. package/dist/collection/components/bs-side-panel/bs-side-panel.stories.js +24 -0
  214. package/dist/collection/components/bs-skeleton/bs-skeleton.cmp.test.js +49 -0
  215. package/dist/collection/components/bs-skeleton/bs-skeleton.css +62 -0
  216. package/dist/collection/components/bs-skeleton/bs-skeleton.js +204 -0
  217. package/dist/collection/components/bs-skeleton/bs-skeleton.stories.js +43 -0
  218. package/dist/collection/components/bs-slider/bs-slider.js +46 -2
  219. package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
  220. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  221. package/dist/collection/components/bs-spinner/bs-spinner.cmp.test.js +32 -0
  222. package/dist/collection/components/bs-spinner/bs-spinner.css +61 -0
  223. package/dist/collection/components/bs-spinner/bs-spinner.js +96 -0
  224. package/dist/collection/components/bs-spinner/bs-spinner.stories.js +30 -0
  225. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  226. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  227. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  228. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  229. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  230. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  231. package/dist/collection/components/bs-timepicker/bs-timepicker.js +48 -4
  232. package/dist/collection/components/bs-toast/bs-toast.js +23 -1
  233. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  234. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.cmp.test.js +73 -0
  235. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.css +52 -0
  236. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.js +140 -0
  237. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.stories.js +21 -0
  238. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.js +1 -1
  239. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +68 -2
  240. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  241. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  242. package/dist/collection/global/brand-theming.cmp.test.js +44 -0
  243. package/dist/components/bs-accordion-group.d.ts +11 -0
  244. package/dist/components/bs-accordion-group.js +1 -0
  245. package/dist/components/bs-accordion.js +1 -1
  246. package/dist/components/bs-ai-disclaimer.js +1 -1
  247. package/dist/components/bs-ai-greeting.js +1 -1
  248. package/dist/components/bs-ai-thinking.js +1 -1
  249. package/dist/components/bs-attachment-list.js +1 -1
  250. package/dist/components/bs-attachment.js +1 -1
  251. package/dist/components/bs-avatar.js +1 -1
  252. package/dist/components/bs-badge.js +1 -1
  253. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  254. package/dist/components/bs-breadcrumb.js +1 -1
  255. package/dist/components/bs-breadcrumbs.js +1 -1
  256. package/dist/components/bs-button-skeleton.js +1 -1
  257. package/dist/components/bs-button.js +1 -1
  258. package/dist/components/bs-card.js +1 -1
  259. package/dist/components/bs-carousel.js +1 -1
  260. package/dist/components/bs-chatbot-feedback.js +1 -1
  261. package/dist/components/bs-chatbot-header.js +1 -1
  262. package/dist/components/bs-chatbot-response-action.js +1 -1
  263. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  264. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  265. package/dist/components/bs-checkbox-skeleton.js +1 -1
  266. package/dist/components/bs-checkbox.js +1 -1
  267. package/dist/components/bs-chip-filter.js +1 -1
  268. package/dist/components/bs-chip-informative.js +1 -1
  269. package/dist/components/bs-chip-input.js +1 -1
  270. package/dist/components/bs-citation-preview.d.ts +11 -0
  271. package/dist/components/bs-citation-preview.js +1 -0
  272. package/dist/components/bs-composer-status-banner.js +1 -1
  273. package/dist/components/bs-composer.js +1 -1
  274. package/dist/components/bs-cookie-consent.js +1 -1
  275. package/dist/components/bs-data-table.js +1 -1
  276. package/dist/components/bs-datepicker.js +1 -1
  277. package/dist/components/bs-dialog.js +1 -1
  278. package/dist/components/bs-error-page.js +1 -1
  279. package/dist/components/bs-file-upload-item.js +1 -1
  280. package/dist/components/bs-file-upload.js +1 -1
  281. package/dist/components/bs-icon-button.js +1 -1
  282. package/dist/components/bs-icon-tile.js +1 -1
  283. package/dist/components/bs-inline-tab.js +1 -1
  284. package/dist/components/bs-input.js +1 -1
  285. package/dist/components/bs-logo.js +1 -1
  286. package/dist/components/bs-menu-item.js +1 -1
  287. package/dist/components/bs-menu.js +1 -1
  288. package/dist/components/bs-message-list.d.ts +11 -0
  289. package/dist/components/bs-message-list.js +1 -0
  290. package/dist/components/bs-message.d.ts +11 -0
  291. package/dist/components/bs-message.js +1 -0
  292. package/dist/components/bs-navigation-drawer-item.js +1 -1
  293. package/dist/components/bs-navigation-drawer.js +1 -1
  294. package/dist/components/bs-navigation-header.js +1 -1
  295. package/dist/components/bs-onboarding-checklist.js +1 -1
  296. package/dist/components/bs-pagination.js +1 -1
  297. package/dist/components/bs-popover.d.ts +11 -0
  298. package/dist/components/bs-popover.js +1 -0
  299. package/dist/components/bs-product-tour.js +1 -1
  300. package/dist/components/bs-progress-linear.js +1 -1
  301. package/dist/components/bs-progress.js +1 -1
  302. package/dist/components/bs-qr-code.js +1 -1
  303. package/dist/components/bs-radio.js +1 -1
  304. package/dist/components/bs-session-timeout.js +1 -1
  305. package/dist/components/bs-side-panel.d.ts +11 -0
  306. package/dist/components/bs-side-panel.js +1 -0
  307. package/dist/components/bs-skeleton.d.ts +11 -0
  308. package/dist/components/bs-skeleton.js +1 -0
  309. package/dist/components/bs-slider.js +1 -1
  310. package/dist/components/bs-snackbar.js +1 -1
  311. package/dist/components/bs-source-link.js +1 -1
  312. package/dist/components/bs-spinner.d.ts +11 -0
  313. package/dist/components/bs-spinner.js +1 -0
  314. package/dist/components/bs-stepper-step.js +1 -1
  315. package/dist/components/bs-stepper.js +1 -1
  316. package/dist/components/bs-switch.js +1 -1
  317. package/dist/components/bs-tab.js +1 -1
  318. package/dist/components/bs-tabs.js +1 -1
  319. package/dist/components/bs-timepicker.js +1 -1
  320. package/dist/components/bs-toast.js +1 -1
  321. package/dist/components/bs-tooltip-trigger.d.ts +11 -0
  322. package/dist/components/bs-tooltip-trigger.js +1 -0
  323. package/dist/components/bs-tooltip.js +1 -1
  324. package/dist/components/bs-whats-new-entry.js +1 -1
  325. package/dist/components/bs-whats-new.js +1 -1
  326. package/dist/components/index.js +1 -1
  327. package/dist/components/p-B2gx7SZk.js +1 -0
  328. package/dist/components/{p-BEEoVNRu.js → p-BTPdjnXT.js} +1 -1
  329. package/dist/components/{p-Be9L4_Fe.js → p-BVhF8cZQ.js} +1 -1
  330. package/dist/components/{p-C_j_jDM6.js → p-Bfq5YVOv.js} +1 -1
  331. package/dist/components/{p-DE8K7fg0.js → p-C2NR1v3p.js} +1 -1
  332. package/dist/components/{p-YsHQLXET.js → p-C9jIMBG3.js} +1 -1
  333. package/dist/components/{p-DuLL7Ouw.js → p-CRtvJlh8.js} +1 -1
  334. package/dist/components/{p-Dr0Qk9Zc.js → p-ChcaPfNL.js} +1 -1
  335. package/dist/components/{p-CbimDNGY.js → p-CrmEXUwm.js} +1 -1
  336. package/dist/components/p-Cu-aeY9t.js +1 -0
  337. package/dist/components/{p-zTHlbyH6.js → p-DAwSBMeM.js} +1 -1
  338. package/dist/components/{p-qmS2CBqi.js → p-DYuzgzxI.js} +1 -1
  339. package/dist/components/p-DfzrJKwN.js +1 -0
  340. package/dist/components/{p-CUfs0ROR.js → p-DpVeeIko.js} +1 -1
  341. package/dist/components/p-DqXI9V2A.js +1 -0
  342. package/dist/components/p-Dqg8l1y6.js +1 -0
  343. package/dist/components/{p-CA31vqjL.js → p-DvNED6Lb.js} +1 -1
  344. package/dist/components/{p-C8yT2Ucq.js → p-QnTjSed5.js} +1 -1
  345. package/dist/components/{p-CncySD_-.js → p-Rx4bpeYN.js} +1 -1
  346. package/dist/components/{p-Be_Pmccm.js → p-owdeCW0M.js} +1 -1
  347. package/dist/components/{p-Bl_tVzeq.js → p-uHvS81XA.js} +1 -1
  348. package/dist/esm/brandsync-wc.js +3 -3
  349. package/dist/esm/bs-accordion-group.entry.js +31 -0
  350. package/dist/esm/bs-accordion.entry.js +1 -1
  351. package/dist/esm/bs-ai-disclaimer.entry.js +2 -2
  352. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  353. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  354. package/dist/esm/bs-attachment-list.entry.js +2 -2
  355. package/dist/esm/bs-attachment.entry.js +9 -5
  356. package/dist/esm/bs-avatar.entry.js +1 -1
  357. package/dist/esm/bs-badge.entry.js +1 -1
  358. package/dist/esm/bs-breadcrumb-overflow.entry.js +1 -1
  359. package/dist/esm/bs-breadcrumb.entry.js +1 -1
  360. package/dist/esm/bs-breadcrumbs.entry.js +2 -2
  361. package/dist/esm/bs-button-skeleton.entry.js +4 -2
  362. package/dist/esm/bs-button.entry.js +1 -1
  363. package/dist/esm/bs-card.entry.js +1 -1
  364. package/dist/esm/bs-carousel.entry.js +1 -1
  365. package/dist/esm/bs-chatbot-feedback.entry.js +18 -2
  366. package/dist/esm/bs-chatbot-header.entry.js +20 -2
  367. package/dist/esm/bs-chatbot-response-action.entry.js +25 -3
  368. package/dist/esm/bs-chatbot-sources-drawer.entry.js +4 -2
  369. package/dist/esm/bs-chatbot-suggestion-button.entry.js +3 -3
  370. package/dist/esm/bs-checkbox-skeleton.entry.js +4 -2
  371. package/dist/esm/bs-checkbox.entry.js +1 -1
  372. package/dist/esm/bs-chip-filter.entry.js +1 -1
  373. package/dist/esm/bs-chip-informative.entry.js +1 -1
  374. package/dist/esm/bs-chip-input.entry.js +4 -2
  375. package/dist/esm/bs-citation-preview.entry.js +27 -0
  376. package/dist/esm/bs-composer-status-banner.entry.js +11 -3
  377. package/dist/esm/bs-composer.entry.js +36 -7
  378. package/dist/esm/bs-cookie-consent.entry.js +1 -1
  379. package/dist/esm/bs-data-table.entry.js +5 -3
  380. package/dist/esm/bs-datepicker.entry.js +1 -1
  381. package/dist/esm/bs-dialog.entry.js +4 -2
  382. package/dist/esm/bs-error-page.entry.js +1 -1
  383. package/dist/esm/bs-file-upload-item.entry.js +1 -1
  384. package/dist/esm/bs-file-upload.entry.js +1 -1
  385. package/dist/esm/bs-icon-button.entry.js +1 -1
  386. package/dist/esm/bs-icon-tile.entry.js +1 -1
  387. package/dist/esm/bs-inline-tab.entry.js +2 -2
  388. package/dist/esm/bs-input_3.entry.js +16 -8
  389. package/dist/esm/bs-logo.entry.js +1 -1
  390. package/dist/esm/bs-message-list.entry.js +69 -0
  391. package/dist/esm/bs-message.entry.js +23 -0
  392. package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
  393. package/dist/esm/bs-navigation-drawer.entry.js +9 -3
  394. package/dist/esm/bs-navigation-header.entry.js +2 -2
  395. package/dist/esm/bs-onboarding-checklist.entry.js +1 -1
  396. package/dist/esm/bs-pagination.entry.js +6 -2
  397. package/dist/esm/bs-popover.entry.js +151 -0
  398. package/dist/esm/bs-product-tour.entry.js +1 -1
  399. package/dist/esm/bs-progress-linear.entry.js +3 -3
  400. package/dist/esm/bs-progress.entry.js +3 -3
  401. package/dist/esm/bs-qr-code.entry.js +2 -2
  402. package/dist/esm/bs-radio.entry.js +2 -2
  403. package/dist/esm/bs-session-timeout.entry.js +2 -2
  404. package/dist/esm/bs-side-panel.entry.js +162 -0
  405. package/dist/esm/bs-skeleton.entry.js +49 -0
  406. package/dist/esm/bs-slider.entry.js +7 -3
  407. package/dist/esm/bs-snackbar.entry.js +2 -2
  408. package/dist/esm/bs-source-link.entry.js +3 -3
  409. package/dist/esm/bs-spinner.entry.js +22 -0
  410. package/dist/esm/bs-stepper-step.entry.js +2 -2
  411. package/dist/esm/bs-stepper.entry.js +2 -2
  412. package/dist/esm/bs-switch.entry.js +2 -2
  413. package/dist/esm/bs-tab_3.entry.js +4 -4
  414. package/dist/esm/bs-timepicker.entry.js +8 -4
  415. package/dist/esm/bs-toast.entry.js +4 -2
  416. package/dist/esm/bs-tooltip-trigger.entry.js +44 -0
  417. package/dist/esm/bs-tooltip.entry.js +2 -2
  418. package/dist/esm/bs-whats-new.entry.js +1 -1
  419. package/dist/esm/index-D3SkQJpw.js +1853 -0
  420. package/dist/esm/loader.js +3 -3
  421. package/dist/types/components/bs-accordion-group/bs-accordion-group.cmp.test.d.ts +1 -0
  422. package/dist/types/components/bs-accordion-group/bs-accordion-group.d.ts +25 -0
  423. package/dist/types/components/bs-accordion-group/bs-accordion-group.stories.d.ts +9 -0
  424. package/dist/types/components/bs-attachment/bs-attachment.d.ts +4 -0
  425. package/dist/types/components/bs-button-skeleton/bs-button-skeleton.d.ts +2 -0
  426. package/dist/types/components/bs-chatbot-feedback/bs-chatbot-feedback.d.ts +16 -0
  427. package/dist/types/components/bs-chatbot-header/bs-chatbot-header.d.ts +19 -0
  428. package/dist/types/components/bs-chatbot-response-action/bs-chatbot-response-action.d.ts +22 -0
  429. package/dist/types/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.d.ts +2 -0
  430. package/dist/types/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.d.ts +2 -5
  431. package/dist/types/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.d.ts +2 -0
  432. package/dist/types/components/bs-chip/bs-chip-input/bs-chip-input.d.ts +2 -0
  433. package/dist/types/components/bs-citation-preview/bs-citation-preview.cmp.test.d.ts +1 -0
  434. package/dist/types/components/bs-citation-preview/bs-citation-preview.d.ts +40 -0
  435. package/dist/types/components/bs-citation-preview/bs-citation-preview.stories.d.ts +13 -0
  436. package/dist/types/components/bs-composer/bs-composer.d.ts +25 -1
  437. package/dist/types/components/bs-composer-status-banner/bs-composer-status-banner.d.ts +5 -0
  438. package/dist/types/components/bs-data-table/bs-data-table.d.ts +2 -0
  439. package/dist/types/components/bs-dialog/bs-dialog.d.ts +2 -0
  440. package/dist/types/components/bs-input/bs-input.d.ts +8 -0
  441. package/dist/types/components/bs-message/bs-message.cmp.test.d.ts +1 -0
  442. package/dist/types/components/bs-message/bs-message.d.ts +49 -0
  443. package/dist/types/components/bs-message/bs-message.stories.d.ts +15 -0
  444. package/dist/types/components/bs-message-list/bs-message-list.cmp.test.d.ts +1 -0
  445. package/dist/types/components/bs-message-list/bs-message-list.d.ts +44 -0
  446. package/dist/types/components/bs-message-list/bs-message-list.stories.d.ts +8 -0
  447. package/dist/types/components/bs-pagination/bs-pagination.d.ts +4 -0
  448. package/dist/types/components/bs-popover/bs-popover.cmp.test.d.ts +1 -0
  449. package/dist/types/components/bs-popover/bs-popover.d.ts +58 -0
  450. package/dist/types/components/bs-popover/bs-popover.stories.d.ts +11 -0
  451. package/dist/types/components/bs-side-panel/bs-side-panel.cmp.test.d.ts +1 -0
  452. package/dist/types/components/bs-side-panel/bs-side-panel.d.ts +67 -0
  453. package/dist/types/components/bs-side-panel/bs-side-panel.stories.d.ts +14 -0
  454. package/dist/types/components/bs-skeleton/bs-skeleton.cmp.test.d.ts +1 -0
  455. package/dist/types/components/bs-skeleton/bs-skeleton.d.ts +44 -0
  456. package/dist/types/components/bs-skeleton/bs-skeleton.stories.d.ts +17 -0
  457. package/dist/types/components/bs-slider/bs-slider.d.ts +4 -0
  458. package/dist/types/components/bs-spinner/bs-spinner.cmp.test.d.ts +1 -0
  459. package/dist/types/components/bs-spinner/bs-spinner.d.ts +32 -0
  460. package/dist/types/components/bs-spinner/bs-spinner.stories.d.ts +12 -0
  461. package/dist/types/components/bs-timepicker/bs-timepicker.d.ts +4 -0
  462. package/dist/types/components/bs-toast/bs-toast.d.ts +2 -0
  463. package/dist/types/components/bs-tooltip-trigger/bs-tooltip-trigger.cmp.test.d.ts +1 -0
  464. package/dist/types/components/bs-tooltip-trigger/bs-tooltip-trigger.d.ts +35 -0
  465. package/dist/types/components/bs-tooltip-trigger/bs-tooltip-trigger.stories.d.ts +10 -0
  466. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.d.ts +6 -0
  467. package/dist/types/components.d.ts +1778 -38
  468. package/dist/types/global/brand-theming.cmp.test.d.ts +1 -0
  469. package/package.json +21 -5
  470. package/reference.d.ts +242 -0
  471. package/reference.json +4176 -0
  472. package/reference.mjs +2 -0
  473. package/tailwind-preset.cjs +36 -0
  474. package/testing/vitest-setup.mjs +41 -0
  475. package/dist/brandsync-wc/p-09cbf05b.entry.js +0 -1
  476. package/dist/brandsync-wc/p-0f8cd2e8.entry.js +0 -1
  477. package/dist/brandsync-wc/p-1261f0b0.entry.js +0 -1
  478. package/dist/brandsync-wc/p-20030f4d.entry.js +0 -1
  479. package/dist/brandsync-wc/p-34e5feaf.entry.js +0 -1
  480. package/dist/brandsync-wc/p-452f9c1c.entry.js +0 -1
  481. package/dist/brandsync-wc/p-6a696161.entry.js +0 -1
  482. package/dist/brandsync-wc/p-6c6cdf77.entry.js +0 -1
  483. package/dist/brandsync-wc/p-6e735e37.entry.js +0 -1
  484. package/dist/brandsync-wc/p-73f214ed.entry.js +0 -1
  485. package/dist/brandsync-wc/p-823ab3b2.entry.js +0 -1
  486. package/dist/brandsync-wc/p-89099a39.entry.js +0 -1
  487. package/dist/brandsync-wc/p-DqQRXQMx.js +0 -3
  488. package/dist/brandsync-wc/p-b84366a7.entry.js +0 -1
  489. package/dist/brandsync-wc/p-b8d2ce91.entry.js +0 -1
  490. package/dist/brandsync-wc/p-b9a4042e.entry.js +0 -1
  491. package/dist/brandsync-wc/p-d754ee13.entry.js +0 -1
  492. package/dist/brandsync-wc/p-d75f3f87.entry.js +0 -1
  493. package/dist/brandsync-wc/p-d8b29a53.entry.js +0 -1
  494. package/dist/brandsync-wc/p-f7d15fbe.entry.js +0 -1
  495. package/dist/cjs/index-tFJjflK5.js +0 -1863
  496. package/dist/components/p-BUskqBR6.js +0 -1
  497. package/dist/components/p-BZ3M4lOU.js +0 -1
  498. package/dist/components/p-CVrEuVFo.js +0 -1
  499. package/dist/components/p-CeUK3n7D.js +0 -1
  500. package/dist/esm/index-DqQRXQMx.js +0 -1853
@@ -82,6 +82,11 @@ export class BsComposerStatusBanner {
82
82
  showButton = false;
83
83
  /** Label for the action button, only rendered when `showButton` is true. */
84
84
  actionLabel = 'Continue';
85
+ /** Shows a spinner in place of the default leading icon (a custom `icon` slot still wins) and
86
+ * sets `aria-busy` on the banner. Use for in-progress states such as "Continuing...". */
87
+ loading = false;
88
+ /** Accessible name of the close button. */
89
+ closeLabel = 'Dismiss';
85
90
  /** Whether the close button is rendered. */
86
91
  allowClose = true;
87
92
  /** Fires when the action button is clicked. Only relevant when `showButton` is true. */
@@ -103,10 +108,12 @@ export class BsComposerStatusBanner {
103
108
  * weak match for error/warning, which get a warning-triangle icon instead. Either default is
104
109
  * still overridable via the `icon` slot. */
105
110
  renderDefaultIcon() {
111
+ if (this.loading)
112
+ return h(SpinnerIcon, null);
106
113
  return this.type === 'error' || this.type === 'warning' ? h(WarningIcon, null) : h(ClockIcon, null);
107
114
  }
108
115
  render() {
109
- return (h("div", { key: '9e0569099d74f708f475b502625a2fd000cbbbf5', role: this.roleForType(), class: `bs-composer-status-banner bs-composer-status-banner--${this.type}` }, h("div", { key: '8d6de7446b8bb53bc45ab9d4f110963425559f50', class: "bs-composer-status-banner__message-group" }, this.showIcon && (h("span", { key: '6f9964755ae030e577b356290ad2d972e024ace1', part: "icon", class: "bs-composer-status-banner__icon" }, h("slot", { key: '56d50ba748d0ad4cbcbcd73a6f4b8cb1a50613b8', name: "icon" }, this.renderDefaultIcon()))), h("p", { key: 'fed8249da75a688b2f125e5f9ca1787dc885b891', part: "message", class: "bs-composer-status-banner__message" }, this.message)), this.showButton && (h("button", { key: '48eb50ca73f76bfd404bbd5b2a7bce3ced2da7ac', type: "button", part: "action", class: "bs-composer-status-banner__action", onClick: this.onActionClick }, this.actionLabel)), this.allowClose && (h("button", { key: 'f644669b00b8077b36ba9eb88ffffaba0e675fb4', type: "button", part: "close", class: "bs-composer-status-banner__close", "aria-label": "Dismiss", onClick: this.onCloseClick }, h(CloseIcon, { key: '3b42ae94449658eae8e9af5617abc3268c215325' })))));
116
+ return (h("div", { key: '7ddbbad5af14adf35a87097ce7e7644fd9e50ec3', role: this.roleForType(), "aria-busy": this.loading ? 'true' : undefined, class: `bs-composer-status-banner bs-composer-status-banner--${this.type}` }, h("div", { key: '1fb9a5fb707db89056115ec0992484b310a47590', class: "bs-composer-status-banner__message-group" }, this.showIcon && (h("span", { key: 'c9cf1d3be7dd33b73f8a2813295ed90e2dbc865a', part: "icon", class: "bs-composer-status-banner__icon" }, h("slot", { key: '86735a463ca03af8359ef17d971a63d5c518f587', name: "icon" }, this.renderDefaultIcon()))), h("p", { key: '046dad63d8a6b12c5c4fe766edef811d945b427f', part: "message", class: "bs-composer-status-banner__message" }, this.message)), this.showButton && (h("button", { key: '3c8d3d824413b32ff596f63b579c8b7ce683af81', type: "button", part: "action", class: "bs-composer-status-banner__action", onClick: this.onActionClick }, this.actionLabel)), this.allowClose && (h("button", { key: '3d5dbe65b4ba7e04202fc260b0ca665a4eb3b516', type: "button", part: "close", class: "bs-composer-status-banner__close", "aria-label": this.closeLabel, onClick: this.onCloseClick }, h(CloseIcon, { key: '86efc37f964fd1440ac10cc47077605dbc0664ce' })))));
110
117
  }
111
118
  static get is() { return "bs-composer-status-banner"; }
112
119
  static get encapsulation() { return "shadow"; }
@@ -228,6 +235,46 @@ export class BsComposerStatusBanner {
228
235
  "attribute": "action-label",
229
236
  "defaultValue": "'Continue'"
230
237
  },
238
+ "loading": {
239
+ "type": "boolean",
240
+ "mutable": false,
241
+ "complexType": {
242
+ "original": "boolean",
243
+ "resolved": "boolean",
244
+ "references": {}
245
+ },
246
+ "required": false,
247
+ "optional": false,
248
+ "docs": {
249
+ "tags": [],
250
+ "text": "Shows a spinner in place of the default leading icon (a custom `icon` slot still wins) and\nsets `aria-busy` on the banner. Use for in-progress states such as \"Continuing...\"."
251
+ },
252
+ "getter": false,
253
+ "setter": false,
254
+ "reflect": false,
255
+ "attribute": "loading",
256
+ "defaultValue": "false"
257
+ },
258
+ "closeLabel": {
259
+ "type": "string",
260
+ "mutable": false,
261
+ "complexType": {
262
+ "original": "string",
263
+ "resolved": "string",
264
+ "references": {}
265
+ },
266
+ "required": false,
267
+ "optional": false,
268
+ "docs": {
269
+ "tags": [],
270
+ "text": "Accessible name of the close button."
271
+ },
272
+ "getter": false,
273
+ "setter": false,
274
+ "reflect": false,
275
+ "attribute": "close-label",
276
+ "defaultValue": "'Dismiss'"
277
+ },
231
278
  "allowClose": {
232
279
  "type": "boolean",
233
280
  "mutable": false,
@@ -284,6 +331,7 @@ export class BsComposerStatusBanner {
284
331
  }];
285
332
  }
286
333
  }
334
+ const SpinnerIcon = () => (h("svg", { class: "bs-composer-status-banner__spinner", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("circle", { cx: "10", cy: "10", r: "7.25", stroke: "currentColor", "stroke-opacity": "0.25", "stroke-width": "1.5" }), h("path", { d: "M17.25 10A7.25 7.25 0 0 0 10 2.75", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round" })));
287
335
  const ClockIcon = () => (h("svg", { viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("circle", { cx: "10", cy: "10", r: "7.25", stroke: "currentColor", "stroke-width": "1.3" }), h("path", { d: "M10 5.83V10L12.5 11.67", stroke: "currentColor", "stroke-width": "1.3", "stroke-linecap": "round", "stroke-linejoin": "round" })));
288
336
  const WarningIcon = () => (h("svg", { viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M10 3L18 17H2L10 3Z", stroke: "currentColor", "stroke-width": "1.3", "stroke-linejoin": "round" }), h("path", { d: "M10 8V11.5", stroke: "currentColor", "stroke-width": "1.3", "stroke-linecap": "round" }), h("circle", { cx: "10", cy: "14", r: "0.75", fill: "currentColor" })));
289
337
  const CloseIcon = () => (h("svg", { viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M15 5L5 15", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" }), h("path", { d: "M15 15L5 5", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" })));
@@ -28,6 +28,8 @@ export class BsDataTable {
28
28
  rows = [];
29
29
  sortColumn;
30
30
  sortDirection = 'asc';
31
+ /** Accessible name of the select-all checkbox in the header (when `selectable`). */
32
+ selectAllLabel = 'Select all rows';
31
33
  selectable = false;
32
34
  /** Optional custom cell renderer, for rich cells such as a status badge, a link or an actions
33
35
  * column. It returns an **HTML string** that is inserted into the cell as real markup
@@ -85,11 +87,11 @@ export class BsDataTable {
85
87
  }
86
88
  }
87
89
  render() {
88
- return (h("table", { key: '7ea79a70148513512cdba2f8cb8d5a5c7ae09706', part: "table", class: "bs-data-table" }, h("thead", { key: 'e9cf73cbba196e9caf4b03a837866a5370c13e19', part: "head" }, h("tr", { key: 'a33fbd57f1925e34c6e7ce292b6945d2ee5c6113' }, this.selectable && (h("th", { key: '876948b66e54ae68d6aa6148c962781223fa0441', class: "bs-data-table__select-col" }, this.rows.length > 0 && (h("input", { key: 'cf8f26258bcee486190e3ac4b3d5ce4715784d5f', type: "checkbox", "aria-label": "Select all rows", checked: this.selectedIds.size > 0 && this.selectedIds.size === this.rows.length, indeterminate: this.selectedIds.size > 0 && this.selectedIds.size < this.rows.length, onChange: this.onSelectAllChange })))), this.columns.map(column => {
90
+ return (h("table", { key: '1d9ca0e7153818331ea760d70a2e2f15b1be67bc', part: "table", class: "bs-data-table" }, h("thead", { key: 'af48bd83574fc4d358010b3091f14bc04db5f935', part: "head" }, h("tr", { key: '0cc77b6e5c46c175444b14dcfdb6c43b41a02d01' }, this.selectable && (h("th", { key: 'a8140bfad21744d05b02065d4034b85228f75da0', class: "bs-data-table__select-col" }, this.rows.length > 0 && (h("input", { key: '634a2b62fb9f26b0684622c6794170aaf5080b3e', type: "checkbox", "aria-label": this.selectAllLabel, checked: this.selectedIds.size > 0 && this.selectedIds.size === this.rows.length, indeterminate: this.selectedIds.size > 0 && this.selectedIds.size < this.rows.length, onChange: this.onSelectAllChange })))), this.columns.map(column => {
89
91
  const isSorted = this.sortColumn === column.key;
90
92
  const ariaSort = column.sortable ? (isSorted ? (this.sortDirection === 'asc' ? 'ascending' : 'descending') : 'none') : undefined;
91
93
  return (h("th", { part: "header-cell", class: "bs-data-table__header-cell", "aria-sort": ariaSort }, column.sortable ? (h("button", { type: "button", class: "bs-data-table__sort-button", onClick: () => this.onHeaderClick(column) }, column.label, isSorted && h("span", { class: "bs-data-table__sort-indicator" }, this.sortDirection === 'asc' ? ' ▲' : ' ▼'))) : (column.label)));
92
- }))), h("tbody", { key: '3a0c2ce6fea27797b855ee2b3c724d0e99471d28', part: "body" }, this.rows.map(row => (h("tr", { part: "row", class: "bs-data-table__row" }, this.selectable && (h("td", { class: "bs-data-table__select-col" }, h("input", { type: "checkbox", checked: this.selectedIds.has(row.id), onChange: ev => this.onRowCheckboxChange(row, ev) }))), this.columns.map(column => this.cellRenderer ? (
94
+ }))), h("tbody", { key: 'a90a9e866a63f9da370a6d20a4381b15bec14c82', part: "body" }, this.rows.map(row => (h("tr", { part: "row", class: "bs-data-table__row" }, this.selectable && (h("td", { class: "bs-data-table__select-col" }, h("input", { type: "checkbox", checked: this.selectedIds.has(row.id), onChange: ev => this.onRowCheckboxChange(row, ev) }))), this.columns.map(column => this.cellRenderer ? (
93
95
  // cellRenderer is a developer-supplied, trusted function (JS-property-only, never
94
96
  // derived from untrusted input) -- its HTML output is intentionally not escaped,
95
97
  // same trust model as React's dangerouslySetInnerHTML.
@@ -199,6 +201,26 @@ export class BsDataTable {
199
201
  "attribute": "sort-direction",
200
202
  "defaultValue": "'asc'"
201
203
  },
204
+ "selectAllLabel": {
205
+ "type": "string",
206
+ "mutable": false,
207
+ "complexType": {
208
+ "original": "string",
209
+ "resolved": "string",
210
+ "references": {}
211
+ },
212
+ "required": false,
213
+ "optional": false,
214
+ "docs": {
215
+ "tags": [],
216
+ "text": "Accessible name of the select-all checkbox in the header (when `selectable`)."
217
+ },
218
+ "getter": false,
219
+ "setter": false,
220
+ "reflect": false,
221
+ "attribute": "select-all-label",
222
+ "defaultValue": "'Select all rows'"
223
+ },
202
224
  "selectable": {
203
225
  "type": "boolean",
204
226
  "mutable": false,
@@ -38,6 +38,8 @@ export class BsDialog {
38
38
  * the same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to. */
39
39
  open = false;
40
40
  heading;
41
+ /** Accessible name of the close button. */
42
+ closeLabel = 'Close';
41
43
  size = 'md';
42
44
  /** Switches to the Figma "Icon Centered" layout: heading/body text centered, the `icon` slot
43
45
  * rendered above the heading, and the close button floating top-right of the dialog instead of
@@ -134,7 +136,7 @@ export class BsDialog {
134
136
  // The close button floats (absolute, over the top of the dialog) whenever there's a hero image
135
137
  // to sit over, or the centered layout has no header row to put an inline close button in.
136
138
  const floatingClose = this.centered || this.hasImage;
137
- return (h("div", { part: "backdrop", class: "bs-dialog__backdrop", onClick: this.onBackdropClick }, h("div", { ref: el => (this.dialogRef = el), tabIndex: -1, part: "dialog", class: `bs-dialog__dialog bs-dialog__dialog--${this.size}`, role: "dialog", "aria-modal": "true", "aria-label": this.heading }, floatingClose && (h("bs-icon-button", { part: "close", class: "bs-dialog__close--floating", variant: "neutral", size: "md", "aria-label": "Close", onClick: this.close }, h(CloseIcon, null))), h("div", { part: "image", class: `bs-dialog__image ${this.hasImage ? 'bs-dialog__image--visible' : ''}` }, h("slot", { name: "image", onSlotchange: this.onImageSlotchange })), this.centered && (h("div", { part: "icon", class: `bs-dialog__icon ${this.hasIcon ? 'bs-dialog__icon--visible' : ''}` }, h("slot", { name: "icon", onSlotchange: this.onIconSlotchange }))), h("div", { part: "header", class: `bs-dialog__header ${this.centered ? 'bs-dialog__header--centered' : ''}` }, h("span", { class: "bs-dialog__heading" }, this.heading), !floatingClose && (h("bs-icon-button", { part: "close", variant: "subtle", size: "md", "aria-label": "Close", onClick: this.close }, h(CloseIcon, null)))), h("div", { part: "body", class: `bs-dialog__body ${this.centered ? 'bs-dialog__body--centered' : ''}` }, h("slot", null)), h("div", { part: "footer", class: `bs-dialog__footer ${this.hasFooter ? 'bs-dialog__footer--visible' : ''}` }, h("slot", { name: "footer", onSlotchange: this.onFooterSlotchange })))));
139
+ return (h("div", { part: "backdrop", class: "bs-dialog__backdrop", onClick: this.onBackdropClick }, h("div", { ref: el => (this.dialogRef = el), tabIndex: -1, part: "dialog", class: `bs-dialog__dialog bs-dialog__dialog--${this.size}`, role: "dialog", "aria-modal": "true", "aria-label": this.heading }, floatingClose && (h("bs-icon-button", { part: "close", class: "bs-dialog__close--floating", variant: "neutral", size: "md", "aria-label": this.closeLabel, onClick: this.close }, h(CloseIcon, null))), h("div", { part: "image", class: `bs-dialog__image ${this.hasImage ? 'bs-dialog__image--visible' : ''}` }, h("slot", { name: "image", onSlotchange: this.onImageSlotchange })), this.centered && (h("div", { part: "icon", class: `bs-dialog__icon ${this.hasIcon ? 'bs-dialog__icon--visible' : ''}` }, h("slot", { name: "icon", onSlotchange: this.onIconSlotchange }))), h("div", { part: "header", class: `bs-dialog__header ${this.centered ? 'bs-dialog__header--centered' : ''}` }, h("span", { class: "bs-dialog__heading" }, this.heading), !floatingClose && (h("bs-icon-button", { part: "close", variant: "subtle", size: "md", "aria-label": this.closeLabel, onClick: this.close }, h(CloseIcon, null)))), h("div", { part: "body", class: `bs-dialog__body ${this.centered ? 'bs-dialog__body--centered' : ''}` }, h("slot", null)), h("div", { part: "footer", class: `bs-dialog__footer ${this.hasFooter ? 'bs-dialog__footer--visible' : ''}` }, h("slot", { name: "footer", onSlotchange: this.onFooterSlotchange })))));
138
140
  }
139
141
  static get is() { return "bs-dialog"; }
140
142
  static get encapsulation() { return "shadow"; }
@@ -189,6 +191,26 @@ export class BsDialog {
189
191
  "reflect": false,
190
192
  "attribute": "heading"
191
193
  },
194
+ "closeLabel": {
195
+ "type": "string",
196
+ "mutable": false,
197
+ "complexType": {
198
+ "original": "string",
199
+ "resolved": "string",
200
+ "references": {}
201
+ },
202
+ "required": false,
203
+ "optional": false,
204
+ "docs": {
205
+ "tags": [],
206
+ "text": "Accessible name of the close button."
207
+ },
208
+ "getter": false,
209
+ "setter": false,
210
+ "reflect": false,
211
+ "attribute": "close-label",
212
+ "defaultValue": "'Close'"
213
+ },
192
214
  "size": {
193
215
  "type": "string",
194
216
  "mutable": false,
@@ -60,6 +60,14 @@ export class BsInput {
60
60
  * component re-dispatches them as `bsInput`/`bsChange` custom events instead. Mutable so the
61
61
  * `number` type's stepper buttons can update it directly. */
62
62
  value = '';
63
+ /** Accessible name of the password toggle while the password is hidden. */
64
+ showPasswordLabel = 'Show password';
65
+ /** Accessible name of the password toggle while the password is visible. */
66
+ hidePasswordLabel = 'Hide password';
67
+ /** Accessible name of the number stepper's increment button. */
68
+ incrementLabel = 'Increment';
69
+ /** Accessible name of the number stepper's decrement button. */
70
+ decrementLabel = 'Decrement';
63
71
  type = 'text';
64
72
  label;
65
73
  placeholder;
@@ -302,10 +310,10 @@ export class BsInput {
302
310
  }
303
311
  renderEndIconContent() {
304
312
  if (this.type === 'number') {
305
- return (h("span", { class: "bs-input__stepper" }, h("button", { type: "button", part: "control", class: "bs-input__stepper-btn", "aria-label": "Increment", tabIndex: -1, disabled: this.disabled, onClick: this.onStepperIncrement }, h("svg", { viewBox: "0 0 10 6", width: "10", height: "6", "aria-hidden": "true" }, h("path", { d: "M1 5L5 1L9 5", stroke: "currentColor", "stroke-width": "1.3", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }))), h("button", { type: "button", part: "control", class: "bs-input__stepper-btn", "aria-label": "Decrement", tabIndex: -1, disabled: this.disabled, onClick: this.onStepperDecrement }, h("svg", { viewBox: "0 0 10 6", width: "10", height: "6", "aria-hidden": "true" }, h("path", { d: "M1 1L5 5L9 1", stroke: "currentColor", "stroke-width": "1.3", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" })))));
313
+ return (h("span", { class: "bs-input__stepper" }, h("button", { type: "button", part: "control", class: "bs-input__stepper-btn", "aria-label": this.incrementLabel, tabIndex: -1, disabled: this.disabled, onClick: this.onStepperIncrement }, h("svg", { viewBox: "0 0 10 6", width: "10", height: "6", "aria-hidden": "true" }, h("path", { d: "M1 5L5 1L9 5", stroke: "currentColor", "stroke-width": "1.3", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }))), h("button", { type: "button", part: "control", class: "bs-input__stepper-btn", "aria-label": this.decrementLabel, tabIndex: -1, disabled: this.disabled, onClick: this.onStepperDecrement }, h("svg", { viewBox: "0 0 10 6", width: "10", height: "6", "aria-hidden": "true" }, h("path", { d: "M1 1L5 5L9 1", stroke: "currentColor", "stroke-width": "1.3", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" })))));
306
314
  }
307
315
  if (this.type === 'password') {
308
- return (h("button", { type: "button", part: "control", class: "bs-input__password-toggle", "aria-label": this.passwordVisible ? 'Hide password' : 'Show password', disabled: this.disabled, onClick: this.onTogglePasswordVisibility }, this.passwordVisible ? (h("svg", { viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { d: "M1 8C2.2 5.5 4.9 3 8 3C11.1 3 13.8 5.5 15 8C13.8 10.5 11.1 13 8 13C4.9 13 2.2 10.5 1 8Z", stroke: "currentColor", "stroke-width": "1.2", "stroke-linejoin": "round" }), h("circle", { cx: "8", cy: "8", r: "2", stroke: "currentColor", "stroke-width": "1.2" }), h("path", { d: "M2 2L14 14", stroke: "currentColor", "stroke-width": "1.2", "stroke-linecap": "round" }))) : (h("svg", { viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { d: "M1 8C2.2 5.5 4.9 3 8 3C11.1 3 13.8 5.5 15 8C13.8 10.5 11.1 13 8 13C4.9 13 2.2 10.5 1 8Z", stroke: "currentColor", "stroke-width": "1.2", "stroke-linejoin": "round" }), h("circle", { cx: "8", cy: "8", r: "2", stroke: "currentColor", "stroke-width": "1.2" })))));
316
+ return (h("button", { type: "button", part: "control", class: "bs-input__password-toggle", "aria-label": this.passwordVisible ? this.hidePasswordLabel : this.showPasswordLabel, disabled: this.disabled, onClick: this.onTogglePasswordVisibility }, this.passwordVisible ? (h("svg", { viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { d: "M1 8C2.2 5.5 4.9 3 8 3C11.1 3 13.8 5.5 15 8C13.8 10.5 11.1 13 8 13C4.9 13 2.2 10.5 1 8Z", stroke: "currentColor", "stroke-width": "1.2", "stroke-linejoin": "round" }), h("circle", { cx: "8", cy: "8", r: "2", stroke: "currentColor", "stroke-width": "1.2" }), h("path", { d: "M2 2L14 14", stroke: "currentColor", "stroke-width": "1.2", "stroke-linecap": "round" }))) : (h("svg", { viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { d: "M1 8C2.2 5.5 4.9 3 8 3C11.1 3 13.8 5.5 15 8C13.8 10.5 11.1 13 8 13C4.9 13 2.2 10.5 1 8Z", stroke: "currentColor", "stroke-width": "1.2", "stroke-linejoin": "round" }), h("circle", { cx: "8", cy: "8", r: "2", stroke: "currentColor", "stroke-width": "1.2" })))));
309
317
  }
310
318
  if (this.type === 'dropdown') {
311
319
  return (h("svg", { class: "bs-input__chevron", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { d: "M4 6L8 10L12 6", stroke: "currentColor", "stroke-width": "1.3", "stroke-linecap": "round", "stroke-linejoin": "round" })));
@@ -329,7 +337,7 @@ export class BsInput {
329
337
  return (h("textarea", { id: "control", part: "control", class: "bs-input__control bs-input__control--textarea", rows: this.rows, value: this.value, placeholder: this.placeholder, disabled: this.disabled, "aria-describedby": this.error || this.description ? 'description-or-error' : undefined, "aria-invalid": this.error ? 'true' : undefined, "aria-required": this.required ? 'true' : undefined, onInput: this.onInput, onChange: this.onChange }));
330
338
  }
331
339
  renderChipControl() {
332
- return (h("div", { class: "bs-input__chips" }, this.chips.map(chip => (h("bs-chip-informative", { part: "chip", class: "bs-input__chip", size: "sm", disabled: this.disabled }, chip, h("bs-icon-button", { part: "chip-remove", class: "bs-input__chip-remove", variant: "subtle", size: "md", ariaLabel: `Remove ${chip}`, disabled: this.disabled, onClick: this.onChipRemove(chip) }, h(ChipRemoveIcon, null))))), h("input", { id: "control", part: "control", class: "bs-input__control bs-input__chip-input", type: "text", value: this.chipDraft, placeholder: this.placeholder, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, onInput: this.onChipDraftInput, onKeyDown: this.onChipDraftKeydown })));
340
+ return (h("div", { class: "bs-input__chips" }, this.chips.map(chip => (h("bs-chip-informative", { part: "chip", class: "bs-input__chip", size: "sm", disabled: this.disabled }, chip, h("bs-icon-button", { part: "chip-remove", class: "bs-input__chip-remove", variant: "subtle", size: "xs", ariaLabel: `Remove ${chip}`, disabled: this.disabled, onClick: this.onChipRemove(chip) }, h(ChipRemoveIcon, null))))), h("input", { id: "control", part: "control", class: "bs-input__control bs-input__chip-input", type: "text", value: this.chipDraft, placeholder: this.placeholder, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, onInput: this.onChipDraftInput, onKeyDown: this.onChipDraftKeydown })));
333
341
  }
334
342
  // type="initials" renders two genuinely separate bordered boxes side by side (each with its own
335
343
  // border/radius/background, a small gap between them), not one shared field wrapper -- Figma
@@ -389,10 +397,10 @@ export class BsInput {
389
397
  return (h("div", { part: "field", class: `bs-input__field bs-input__field--pin ${errorClass} ${disabledClass}` }, Array.from({ length: this.length }).map((_, i) => (h("input", { id: i === 0 ? 'control' : undefined, ref: el => (this.pinInputs[i] = el), part: "control", class: "bs-input__pin-cell", type: "text", inputMode: "numeric", maxLength: 1, value: this.value[i] ?? '', disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, onInput: this.onPinInput(i), onKeyDown: this.onPinKeydown(i) })))));
390
398
  }
391
399
  render() {
392
- return (h("div", { key: '6921873fb72be6f26a2389697f6b2f816d8011a9', class: `bs-input ${this.error ? 'bs-input--error' : ''}` }, this.label && (
400
+ return (h("div", { key: 'a7ecdb4eb28bae12ac91283a450819daed021207', class: `bs-input ${this.error ? 'bs-input--error' : ''}` }, this.label && (
393
401
  // "control" is a fixed id, not a generated one -- safe because Shadow DOM scopes ids
394
402
  // to this instance's own shadow root, so it can never collide with another bs-input.
395
- h("label", { key: '64ec1ba4a6c8c87db6b45dfd38731adbdfd5d6a8', part: "label", class: "bs-input__label", htmlFor: "control" }, this.label, this.required && (h("span", { key: '5176edfc672132f1c6aaec978002851ff27179a0', part: "required", class: "bs-input__required", "aria-hidden": "true" }, "*")))), this.type === 'pin' ? this.renderPinField() : this.type === 'initials' ? this.renderInitialsField() : this.renderField(), this.error ? (h("span", { id: "description-or-error", part: "error", class: "bs-input__error" }, h("svg", { part: "error-icon", class: "bs-input__error-icon", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("circle", { cx: "8", cy: "8", r: "6.5", stroke: "currentColor", "stroke-width": "1.2" }), h("path", { d: "M8 5V8.5", stroke: "currentColor", "stroke-width": "1.2", "stroke-linecap": "round" }), h("circle", { cx: "8", cy: "11", r: "0.75", fill: "currentColor" })), this.error)) : this.description ? (h("span", { id: "description-or-error", part: "description", class: "bs-input__description" }, this.description)) : null));
403
+ h("label", { key: '48577ca03f18fa46e1a4d6a04d3ad40851b93713', part: "label", class: "bs-input__label", htmlFor: "control" }, this.label, this.required && (h("span", { key: '2103cd741fa889e5e169c157b912cd9275c208b5', part: "required", class: "bs-input__required", "aria-hidden": "true" }, "*")))), this.type === 'pin' ? this.renderPinField() : this.type === 'initials' ? this.renderInitialsField() : this.renderField(), this.error ? (h("span", { id: "description-or-error", part: "error", class: "bs-input__error" }, h("svg", { part: "error-icon", class: "bs-input__error-icon", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("circle", { cx: "8", cy: "8", r: "6.5", stroke: "currentColor", "stroke-width": "1.2" }), h("path", { d: "M8 5V8.5", stroke: "currentColor", "stroke-width": "1.2", "stroke-linecap": "round" }), h("circle", { cx: "8", cy: "11", r: "0.75", fill: "currentColor" })), this.error)) : this.description ? (h("span", { id: "description-or-error", part: "description", class: "bs-input__description" }, this.description)) : null));
396
404
  }
397
405
  static get is() { return "bs-input"; }
398
406
  static get encapsulation() { return "shadow"; }
@@ -449,6 +457,86 @@ export class BsInput {
449
457
  "attribute": "value",
450
458
  "defaultValue": "''"
451
459
  },
460
+ "showPasswordLabel": {
461
+ "type": "string",
462
+ "mutable": false,
463
+ "complexType": {
464
+ "original": "string",
465
+ "resolved": "string",
466
+ "references": {}
467
+ },
468
+ "required": false,
469
+ "optional": false,
470
+ "docs": {
471
+ "tags": [],
472
+ "text": "Accessible name of the password toggle while the password is hidden."
473
+ },
474
+ "getter": false,
475
+ "setter": false,
476
+ "reflect": false,
477
+ "attribute": "show-password-label",
478
+ "defaultValue": "'Show password'"
479
+ },
480
+ "hidePasswordLabel": {
481
+ "type": "string",
482
+ "mutable": false,
483
+ "complexType": {
484
+ "original": "string",
485
+ "resolved": "string",
486
+ "references": {}
487
+ },
488
+ "required": false,
489
+ "optional": false,
490
+ "docs": {
491
+ "tags": [],
492
+ "text": "Accessible name of the password toggle while the password is visible."
493
+ },
494
+ "getter": false,
495
+ "setter": false,
496
+ "reflect": false,
497
+ "attribute": "hide-password-label",
498
+ "defaultValue": "'Hide password'"
499
+ },
500
+ "incrementLabel": {
501
+ "type": "string",
502
+ "mutable": false,
503
+ "complexType": {
504
+ "original": "string",
505
+ "resolved": "string",
506
+ "references": {}
507
+ },
508
+ "required": false,
509
+ "optional": false,
510
+ "docs": {
511
+ "tags": [],
512
+ "text": "Accessible name of the number stepper's increment button."
513
+ },
514
+ "getter": false,
515
+ "setter": false,
516
+ "reflect": false,
517
+ "attribute": "increment-label",
518
+ "defaultValue": "'Increment'"
519
+ },
520
+ "decrementLabel": {
521
+ "type": "string",
522
+ "mutable": false,
523
+ "complexType": {
524
+ "original": "string",
525
+ "resolved": "string",
526
+ "references": {}
527
+ },
528
+ "required": false,
529
+ "optional": false,
530
+ "docs": {
531
+ "tags": [],
532
+ "text": "Accessible name of the number stepper's decrement button."
533
+ },
534
+ "getter": false,
535
+ "setter": false,
536
+ "reflect": false,
537
+ "attribute": "decrement-label",
538
+ "defaultValue": "'Decrement'"
539
+ },
452
540
  "type": {
453
541
  "type": "string",
454
542
  "mutable": false,
@@ -1,29 +1,9 @@
1
1
  import { html } from "lit";
2
2
  import { componentDescription, propDescription } from "../../stories-utils";
3
- const inputTypes = [
4
- 'text',
5
- 'email',
6
- 'password',
7
- 'number',
8
- 'search',
9
- 'date',
10
- 'dropdown',
11
- 'select',
12
- 'textarea',
13
- 'chip',
14
- 'initials',
15
- 'country',
16
- 'pin',
17
- ];
3
+ const inputTypes = ['text', 'email', 'password', 'number', 'search', 'date', 'dropdown', 'select', 'textarea', 'chip', 'initials', 'country', 'pin'];
18
4
  const mailIcon = html `
19
5
  <svg slot="icon" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
20
- <path
21
- d="M2 4L8 9L14 4M2 4H14V12H2V4Z"
22
- stroke="currentColor"
23
- stroke-width="1.3"
24
- stroke-linecap="round"
25
- stroke-linejoin="round"
26
- />
6
+ <path d="M2 4L8 9L14 4M2 4H14V12H2V4Z" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" />
27
7
  </svg>
28
8
  `;
29
9
  const chevronIcon = html `
@@ -75,7 +55,11 @@ const meta = {
75
55
  },
76
56
  };
77
57
  export default meta;
78
- export const Default = {};
58
+ export const Default = {
59
+ args: {
60
+ type: 'email',
61
+ },
62
+ };
79
63
  export const WithDescription = {
80
64
  args: { description: "We'll never share your email." },
81
65
  };
@@ -44,7 +44,7 @@ export class BsMenu {
44
44
  items[next].shadowRoot?.querySelector('button')?.focus();
45
45
  }
46
46
  render() {
47
- return (h("div", { key: 'ba99d3c35c0c7ab4427155ac13e89c434068ef49', part: "list", class: "bs-menu", role: "menu" }, h("slot", { key: '817f29507503adcaad013a8035d35bc1f35ffdef' })));
47
+ return (h("div", { key: 'a253d57d609dd1de870bed9f92f4db77b5c91da3', part: "list", class: "bs-menu", role: "menu" }, h("slot", { key: 'f21dbcc6486767e6f4bdd81c120e685d7ff3e5c2' })));
48
48
  }
49
49
  static get is() { return "bs-menu"; }
50
50
  static get encapsulation() { return "shadow"; }
@@ -47,7 +47,7 @@ export class BsMenuItem {
47
47
  this.bsSelect.emit();
48
48
  };
49
49
  render() {
50
- return (h("button", { key: '419a5d4d35f47ea9cf72b02407a45a7d5645fc4b', type: "button", part: "item", role: "menuitem", class: `bs-menu-item ${this.disabled ? 'bs-menu-item--disabled' : ''}`, disabled: this.disabled, "aria-disabled": this.disabled ? 'true' : undefined, onClick: this.onClick }, h("span", { key: '733f8e5f702496bbb2788cc4db84a9c7c128f1be', part: "icon", class: `bs-menu-item__icon ${this.hasIcon ? 'bs-menu-item__icon--has-content' : ''}` }, h("slot", { key: '566ca7b7f011090efa131c6bf0fb74515db11fee', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'c717ab8efef92c338581953c60f617057f9eaadc', part: "label", class: "bs-menu-item__label" }, h("slot", { key: 'c0006ae3c36798eabfb2e001faade51ec4cc10c9' }))));
50
+ return (h("button", { key: '5c0692a72087255606a36fd452062c1463e99ec1', type: "button", part: "item", role: "menuitem", class: `bs-menu-item ${this.disabled ? 'bs-menu-item--disabled' : ''}`, disabled: this.disabled, "aria-disabled": this.disabled ? 'true' : undefined, onClick: this.onClick }, h("span", { key: '75d3dd4c67d6ea26e588b11dc7c08f33b8bf7612', part: "icon", class: `bs-menu-item__icon ${this.hasIcon ? 'bs-menu-item__icon--has-content' : ''}` }, h("slot", { key: '1a0d15291612045dc17b89de6b9e8badbed42f79', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '4208bb1d52c455d477fcd3ae77c1bd657096a30e', part: "label", class: "bs-menu-item__label" }, h("slot", { key: 'bc093e94c6ffa4a86d4ad2b4b9c98a9374257729' }))));
51
51
  }
52
52
  static get is() { return "bs-menu-item"; }
53
53
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,36 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ describe('bs-message', () => {
3
+ it('defaults to the assistant role and default status', async () => {
4
+ const { root } = await render(h("bs-message", null, "Hello"));
5
+ expect(root).toEqualAttribute('role', 'assistant');
6
+ expect(root).toEqualAttribute('status', 'default');
7
+ });
8
+ it('reflects the user role', async () => {
9
+ const { root } = await render(h("bs-message", { role: "user" }, "Hi"));
10
+ expect(root).toEqualAttribute('role', 'user');
11
+ });
12
+ it('renders a <time> with datetime from timestamp props', async () => {
13
+ const { root } = await render(h("bs-message", { timestamp: "10:42", datetime: "2026-01-01T10:42:00Z" }));
14
+ const time = root.shadowRoot.querySelector('time');
15
+ expect(time).toHaveTextContent('10:42');
16
+ expect(time).toEqualAttribute('datetime', '2026-01-01T10:42:00Z');
17
+ });
18
+ it('renders no <time> when timestamp is unset', async () => {
19
+ const { root } = await render(h("bs-message", null));
20
+ expect(root.shadowRoot.querySelector('time')).toBeNull();
21
+ });
22
+ it('sets aria-busy only while pending', async () => {
23
+ const { root, waitForChanges } = await render(h("bs-message", { status: "pending" }));
24
+ expect(root.shadowRoot.querySelector('.bs-message')).toEqualAttribute('aria-busy', 'true');
25
+ root.status = 'error';
26
+ await waitForChanges();
27
+ expect(root.shadowRoot.querySelector('.bs-message').hasAttribute('aria-busy')).toBe(false);
28
+ });
29
+ it('composes the bubble from bs-card and exposes avatar/footer/timestamp slots', async () => {
30
+ const { root } = await render(h("bs-message", null));
31
+ expect(root.shadowRoot.querySelector('bs-card[part="container"]')).not.toBeNull();
32
+ for (const name of ['avatar', 'footer', 'timestamp']) {
33
+ expect(root.shadowRoot.querySelector(`slot[name="${name}"]`)).not.toBeNull();
34
+ }
35
+ });
36
+ });
@@ -0,0 +1,77 @@
1
+ :host {
2
+ display: block;
3
+ --bs-message-gap: var(--bs-spacing-100);
4
+ --bs-message-max-width: 80%;
5
+ --bs-message-padding: var(--bs-spacing-150);
6
+ --bs-message-radius: var(--bs-border-radius-150);
7
+ --bs-message-user-bg: var(--bs-color-primary-container);
8
+ --bs-message-user-color: var(--bs-text-default);
9
+ --bs-message-assistant-bg: var(--bs-color-neutral-container);
10
+ --bs-message-assistant-color: var(--bs-text-default);
11
+ --bs-message-error-bg: var(--bs-color-error-container);
12
+ --bs-message-error-color: var(--bs-text-error);
13
+ --bs-message-pending-opacity: 0.6;
14
+ --bs-message-timestamp-color: var(--bs-text-secondary);
15
+ --bs-message-timestamp-font-size: var(--bs-font-size-xs);
16
+ }
17
+
18
+ .bs-message {
19
+ display: flex;
20
+ align-items: flex-start;
21
+ gap: var(--bs-message-gap);
22
+ }
23
+
24
+ :host([role='user']) .bs-message {
25
+ flex-direction: row-reverse;
26
+ }
27
+
28
+ .bs-message__avatar {
29
+ flex-shrink: 0;
30
+ }
31
+
32
+ .bs-message__column {
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: var(--bs-spacing-50);
36
+ min-width: 0;
37
+ max-width: var(--bs-message-max-width);
38
+ align-items: flex-start;
39
+ }
40
+
41
+ :host([role='user']) .bs-message__column {
42
+ align-items: flex-end;
43
+ }
44
+
45
+ .bs-message__bubble {
46
+ --bs-card-bg: var(--bs-message-assistant-bg);
47
+ --bs-card-radius: var(--bs-message-radius);
48
+ --bs-card-padding: var(--bs-message-padding);
49
+ --bs-card-shadow: none;
50
+ color: var(--bs-message-assistant-color);
51
+ }
52
+
53
+ :host([role='user']) .bs-message__bubble {
54
+ --bs-card-bg: var(--bs-message-user-bg);
55
+ color: var(--bs-message-user-color);
56
+ }
57
+
58
+ :host([status='error']) .bs-message__bubble {
59
+ --bs-card-bg: var(--bs-message-error-bg);
60
+ color: var(--bs-message-error-color);
61
+ }
62
+
63
+ :host([status='pending']) .bs-message__bubble {
64
+ opacity: var(--bs-message-pending-opacity);
65
+ }
66
+
67
+ .bs-message__content {
68
+ overflow-wrap: anywhere;
69
+ font-size: var(--bs-font-size-md);
70
+ line-height: var(--bs-line-height-normal);
71
+ }
72
+
73
+ .bs-message__timestamp {
74
+ color: var(--bs-message-timestamp-color);
75
+ font-size: var(--bs-message-timestamp-font-size);
76
+ line-height: var(--bs-line-height-normal);
77
+ }