@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
@@ -0,0 +1,156 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * A single chat message bubble. User messages align to the end with a primary-tinted bubble;
4
+ * assistant messages align to the start on a neutral bubble. The consumer renders the content
5
+ * (e.g. markdown) into the default slot.
6
+ *
7
+ * Composed from: `bs-card` (the bubble surface).
8
+ *
9
+ * ## When to use
10
+ * - One entry per turn in a chat transcript, usually inside `bs-message-list`.
11
+ *
12
+ * ## When not to use
13
+ * - For transient notices or system banners -- use `bs-toast` / `bs-composer-status-banner`.
14
+ *
15
+ * @slot - The message content. The consumer renders markdown/rich content here.
16
+ * @slot avatar - Optional avatar (e.g. `bs-avatar`) beside the bubble.
17
+ * @slot footer - Optional content below the bubble (e.g. `bs-chatbot-response-action`).
18
+ * @slot timestamp - Overrides the default `<time>` element rendered from `timestamp`.
19
+ * @part container - The bubble (`bs-card`).
20
+ * @part avatar - The avatar wrapper.
21
+ * @part content - The message content wrapper.
22
+ * @part footer - The footer wrapper.
23
+ * @part timestamp - The timestamp wrapper.
24
+ * @prop --bs-message-gap - Gap between avatar and message column. Aliased to `--bs-spacing-100`.
25
+ * @prop --bs-message-max-width - Max width of the message column. Defaults to `80%`.
26
+ * @prop --bs-message-padding - Bubble padding. Aliased to `--bs-spacing-150`.
27
+ * @prop --bs-message-radius - Bubble corner radius. Aliased to `--bs-border-radius-150`.
28
+ * @prop --bs-message-user-bg - User bubble background. Aliased to `--bs-color-primary-container`.
29
+ * @prop --bs-message-user-color - User bubble text color. Aliased to `--bs-text-default`.
30
+ * @prop --bs-message-assistant-bg - Assistant bubble background. Aliased to `--bs-color-neutral-container`.
31
+ * @prop --bs-message-assistant-color - Assistant bubble text color. Aliased to `--bs-text-default`.
32
+ * @prop --bs-message-error-bg - Error bubble background. Aliased to `--bs-color-error-container`.
33
+ * @prop --bs-message-error-color - Error bubble text color. Aliased to `--bs-text-error`.
34
+ * @prop --bs-message-pending-opacity - Bubble opacity while pending. Defaults to `0.6`.
35
+ * @prop --bs-message-timestamp-color - Timestamp color. Aliased to `--bs-text-secondary`.
36
+ * @prop --bs-message-timestamp-font-size - Timestamp font size. Aliased to `--bs-font-size-xs`.
37
+ */
38
+ export class BsMessage {
39
+ /** Who sent the message. Controls alignment and colour. */
40
+ role = 'assistant';
41
+ /** Human-readable timestamp text shown inside a `<time>` element. Omit to render none. */
42
+ timestamp;
43
+ /** Machine-readable value for the `<time>` element's `datetime` attribute. */
44
+ datetime;
45
+ /** Delivery/render state. `error` uses error colours; `pending` dims the bubble and sets `aria-busy`. */
46
+ status = 'default';
47
+ render() {
48
+ return (h("div", { key: '76e0e1d307de73bca97c5a79b3ff607278311d3e', class: "bs-message", "aria-busy": this.status === 'pending' ? 'true' : undefined }, h("div", { key: '00c91e1ab7a3cf9e81401e36b50b331c0d7d2735', part: "avatar", class: "bs-message__avatar" }, h("slot", { key: 'a3b0577cbafcd699ecf37c3299757f76e88cd572', name: "avatar" })), h("div", { key: '10b3dc86e24ae0860fffccedb5aaa9fed78f44c5', class: "bs-message__column" }, h("bs-card", { key: '3a88a28a5e9cb9898562860daf576b4280a8e601', part: "container", class: "bs-message__bubble", surface: "base" }, h("div", { key: '95a9c8394c55789cbf7a976b16466d7a9593fae6', part: "content", class: "bs-message__content" }, h("slot", { key: '81c214388b65904f4e15bfae23ddbc34ed35e267' }))), h("div", { key: '27768ab59923180c6f31f7bce893fefa11c967d1', part: "footer", class: "bs-message__footer" }, h("slot", { key: '606f025032c40e01c2490b1d18441c1d2557beac', name: "footer" })), h("div", { key: '79acf174363c391a37ca1907ececf87c9c1cdb45', part: "timestamp", class: "bs-message__timestamp" }, h("slot", { key: '08060d46ea218a3c9315bd2fc89165c605e54ddd', name: "timestamp" }, this.timestamp && h("time", { key: 'a9829bf9725b3c41eb5032427822a2d6fbb2cb6f', dateTime: this.datetime }, this.timestamp))))));
49
+ }
50
+ static get is() { return "bs-message"; }
51
+ static get encapsulation() { return "shadow"; }
52
+ static get originalStyleUrls() {
53
+ return {
54
+ "$": ["bs-message.css"]
55
+ };
56
+ }
57
+ static get styleUrls() {
58
+ return {
59
+ "$": ["bs-message.css"]
60
+ };
61
+ }
62
+ static get properties() {
63
+ return {
64
+ "role": {
65
+ "type": "string",
66
+ "mutable": false,
67
+ "complexType": {
68
+ "original": "BsMessageRole",
69
+ "resolved": "\"assistant\" | \"user\"",
70
+ "references": {
71
+ "BsMessageRole": {
72
+ "location": "local",
73
+ "path": "/home/runner/work/eg-brandsync-storybook/eg-brandsync-storybook/packages/wc/src/components/bs-message/bs-message.tsx",
74
+ "id": "src/components/bs-message/bs-message.tsx::BsMessageRole"
75
+ }
76
+ }
77
+ },
78
+ "required": false,
79
+ "optional": false,
80
+ "docs": {
81
+ "tags": [],
82
+ "text": "Who sent the message. Controls alignment and colour."
83
+ },
84
+ "getter": false,
85
+ "setter": false,
86
+ "reflect": true,
87
+ "attribute": "role",
88
+ "defaultValue": "'assistant'"
89
+ },
90
+ "timestamp": {
91
+ "type": "string",
92
+ "mutable": false,
93
+ "complexType": {
94
+ "original": "string",
95
+ "resolved": "string",
96
+ "references": {}
97
+ },
98
+ "required": false,
99
+ "optional": true,
100
+ "docs": {
101
+ "tags": [],
102
+ "text": "Human-readable timestamp text shown inside a `<time>` element. Omit to render none."
103
+ },
104
+ "getter": false,
105
+ "setter": false,
106
+ "reflect": false,
107
+ "attribute": "timestamp"
108
+ },
109
+ "datetime": {
110
+ "type": "string",
111
+ "mutable": false,
112
+ "complexType": {
113
+ "original": "string",
114
+ "resolved": "string",
115
+ "references": {}
116
+ },
117
+ "required": false,
118
+ "optional": true,
119
+ "docs": {
120
+ "tags": [],
121
+ "text": "Machine-readable value for the `<time>` element's `datetime` attribute."
122
+ },
123
+ "getter": false,
124
+ "setter": false,
125
+ "reflect": false,
126
+ "attribute": "datetime"
127
+ },
128
+ "status": {
129
+ "type": "string",
130
+ "mutable": false,
131
+ "complexType": {
132
+ "original": "BsMessageStatus",
133
+ "resolved": "\"default\" | \"error\" | \"pending\"",
134
+ "references": {
135
+ "BsMessageStatus": {
136
+ "location": "local",
137
+ "path": "/home/runner/work/eg-brandsync-storybook/eg-brandsync-storybook/packages/wc/src/components/bs-message/bs-message.tsx",
138
+ "id": "src/components/bs-message/bs-message.tsx::BsMessageStatus"
139
+ }
140
+ }
141
+ },
142
+ "required": false,
143
+ "optional": false,
144
+ "docs": {
145
+ "tags": [],
146
+ "text": "Delivery/render state. `error` uses error colours; `pending` dims the bubble and sets `aria-busy`."
147
+ },
148
+ "getter": false,
149
+ "setter": false,
150
+ "reflect": true,
151
+ "attribute": "status",
152
+ "defaultValue": "'default'"
153
+ }
154
+ };
155
+ }
156
+ }
@@ -0,0 +1,33 @@
1
+ import { html } from "lit";
2
+ import { componentDescription, propDescription } from "../../stories-utils";
3
+ const meta = {
4
+ title: 'Genie AI Components/bs-message',
5
+ parameters: { docs: { description: { component: componentDescription('bs-message') } } },
6
+ render: args => html `
7
+ <bs-message role=${args.role} timestamp=${args.timestamp} datetime=${args.datetime} status=${args.status}>
8
+ Here is a short answer to your question.
9
+ </bs-message>
10
+ `,
11
+ argTypes: {
12
+ role: { control: 'inline-radio', options: ['user', 'assistant'], description: propDescription('bs-message', 'role') },
13
+ timestamp: { control: 'text', description: propDescription('bs-message', 'timestamp') },
14
+ datetime: { control: 'text', description: propDescription('bs-message', 'datetime') },
15
+ status: { control: 'inline-radio', options: ['default', 'error', 'pending'], description: propDescription('bs-message', 'status') },
16
+ },
17
+ args: { role: 'assistant', timestamp: '10:42', datetime: '2026-01-01T10:42:00Z', status: 'default' },
18
+ };
19
+ export default meta;
20
+ export const Default = {};
21
+ export const User = { args: { role: 'user' } };
22
+ export const Pending = { args: { role: 'user', status: 'pending' } };
23
+ export const ErrorState = { name: 'Error', args: { role: 'user', status: 'error' } };
24
+ export const WithAvatarAndFooter = {
25
+ name: 'With avatar and footer',
26
+ render: args => html `
27
+ <bs-message role=${args.role} timestamp=${args.timestamp}>
28
+ <bs-avatar slot="avatar"></bs-avatar>
29
+ Here is a short answer to your question.
30
+ <bs-chatbot-response-action slot="footer"></bs-chatbot-response-action>
31
+ </bs-message>
32
+ `,
33
+ };
@@ -0,0 +1,58 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ const nextMutation = () => new Promise(r => setTimeout(r, 0));
3
+ const tall = () => h("div", { style: { height: '300px' } });
4
+ const renderList = (extra = {}) => render(h("bs-message-list", { style: { display: 'block', height: '200px' }, ...extra }, tall(), tall()));
5
+ const viewportOf = (root) => root.shadowRoot.querySelector('.bs-message-list__viewport');
6
+ const scrollTo = (el, top) => {
7
+ el.scrollTop = top;
8
+ el.dispatchEvent(new Event('scroll'));
9
+ };
10
+ const appendMessage = async (root, waitForChanges) => {
11
+ root.appendChild(document.createElement('bs-message'));
12
+ await nextMutation();
13
+ await waitForChanges();
14
+ };
15
+ describe('bs-message-list', () => {
16
+ it('renders a polite log region', async () => {
17
+ const { root } = await renderList();
18
+ expect(root.shadowRoot.querySelector('[role="log"]')).toEqualAttribute('aria-live', 'polite');
19
+ });
20
+ it('does not show the scroll button initially', async () => {
21
+ const { root } = await renderList();
22
+ expect(root.shadowRoot.querySelector('[part="scroll-to-latest"]')).toBeNull();
23
+ });
24
+ it('shows the scroll button when new content arrives while scrolled up', async () => {
25
+ const { root, waitForChanges } = await renderList();
26
+ scrollTo(viewportOf(root), 0);
27
+ await appendMessage(root, waitForChanges);
28
+ const btn = root.shadowRoot.querySelector('[part="scroll-to-latest"]');
29
+ expect(btn).not.toBeNull();
30
+ expect(btn.ariaLabel).toBe('Scroll to latest message');
31
+ });
32
+ it('does not show the button when the user is near the bottom', async () => {
33
+ const { root, waitForChanges } = await renderList();
34
+ const viewport = viewportOf(root);
35
+ scrollTo(viewport, viewport.scrollHeight);
36
+ await appendMessage(root, waitForChanges);
37
+ expect(root.shadowRoot.querySelector('[part="scroll-to-latest"]')).toBeNull();
38
+ });
39
+ it('uses a custom scrollToLatestLabel', async () => {
40
+ const { root, waitForChanges } = await renderList({ 'scroll-to-latest-label': 'Jump down' });
41
+ scrollTo(viewportOf(root), 0);
42
+ await appendMessage(root, waitForChanges);
43
+ const btn = root.shadowRoot.querySelector('[part="scroll-to-latest"]');
44
+ expect(btn.ariaLabel).toBe('Jump down');
45
+ });
46
+ it('scrollToLatest() scrolls, hides the button and emits bsScrollToLatest', async () => {
47
+ const { root, waitForChanges, spyOnEvent } = await renderList();
48
+ const spy = spyOnEvent('bsScrollToLatest');
49
+ const viewport = viewportOf(root);
50
+ scrollTo(viewport, 0);
51
+ await appendMessage(root, waitForChanges);
52
+ await root.scrollToLatest();
53
+ await waitForChanges();
54
+ expect(viewport.scrollHeight - viewport.scrollTop - viewport.clientHeight).toBeLessThanOrEqual(1);
55
+ expect(spy).toHaveReceivedEventTimes(1);
56
+ expect(root.shadowRoot.querySelector('[part="scroll-to-latest"]')).toBeNull();
57
+ });
58
+ });
@@ -0,0 +1,40 @@
1
+ :host {
2
+ display: block;
3
+ position: relative;
4
+ min-height: 0;
5
+ --bs-message-list-gap: var(--bs-spacing-200);
6
+ --bs-message-list-padding: var(--bs-spacing-200);
7
+ --bs-message-list-button-offset: var(--bs-spacing-200);
8
+ }
9
+
10
+ .bs-message-list {
11
+ position: relative;
12
+ height: 100%;
13
+ }
14
+
15
+ .bs-message-list__viewport {
16
+ box-sizing: border-box;
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: var(--bs-message-list-gap);
20
+ height: 100%;
21
+ padding: var(--bs-message-list-padding);
22
+ overflow-y: auto;
23
+ }
24
+
25
+ /* Messages keep their natural height and the viewport scrolls, instead of flex-shrinking them. */
26
+ ::slotted(*) {
27
+ flex-shrink: 0;
28
+ }
29
+
30
+ .bs-message-list__viewport:focus-visible {
31
+ outline: 2px solid var(--bs-border-neutral-focus);
32
+ outline-offset: -2px;
33
+ }
34
+
35
+ .bs-message-list__scroll {
36
+ position: absolute;
37
+ inset-block-end: var(--bs-message-list-button-offset);
38
+ inset-inline-start: 50%;
39
+ transform: translateX(-50%);
40
+ }
@@ -0,0 +1,161 @@
1
+ import { h } from "@stencil/core";
2
+ /** Distance (px) from the bottom within which the list counts as "at the bottom". */
3
+ const NEAR_BOTTOM_THRESHOLD = 48;
4
+ /**
5
+ * Scrollable chat transcript container (`role="log"`, `aria-live="polite"`) for `bs-message`
6
+ * children. It keeps itself pinned to the newest message while the user is near the bottom; when
7
+ * the user has scrolled up and new content arrives, it shows a "scroll to latest" button instead
8
+ * of yanking the viewport.
9
+ *
10
+ * Composed from: `bs-icon-button` (the scroll-to-latest control).
11
+ *
12
+ * ## When to use
13
+ * - Holding the messages of a chat conversation.
14
+ *
15
+ * ## When not to use
16
+ * - For generic scrollable lists -- this is built around append-at-the-bottom transcripts.
17
+ *
18
+ * @slot - `bs-message` elements.
19
+ * @part viewport - The scrollable region.
20
+ * @part scroll-to-latest - The scroll-to-latest `bs-icon-button`.
21
+ * @prop --bs-message-list-gap - Gap between messages. Aliased to `--bs-spacing-200`.
22
+ * @prop --bs-message-list-padding - Padding inside the scroll area. Aliased to `--bs-spacing-200`.
23
+ * @prop --bs-message-list-button-offset - Distance of the scroll-to-latest button from the bottom edge. Aliased to `--bs-spacing-200`.
24
+ */
25
+ export class BsMessageList {
26
+ host;
27
+ /** Accessible name of the scroll-to-latest button. */
28
+ scrollToLatestLabel = 'Scroll to latest message';
29
+ /** True while the user is scrolled away from the bottom and new content has arrived. */
30
+ showScrollButton = false;
31
+ /** Fires when the scroll-to-latest button is activated or `scrollToLatest()` is called. */
32
+ bsScrollToLatest;
33
+ viewport;
34
+ observer;
35
+ stickToBottom = true;
36
+ /** Scrolls to the newest message and re-enables auto-follow. */
37
+ async scrollToLatest() {
38
+ this.scrollToBottom();
39
+ this.stickToBottom = true;
40
+ this.showScrollButton = false;
41
+ this.bsScrollToLatest.emit();
42
+ }
43
+ connectedCallback() {
44
+ this.observer = new MutationObserver(this.onMutation);
45
+ this.observer.observe(this.host, { childList: true, subtree: true, characterData: true });
46
+ }
47
+ disconnectedCallback() {
48
+ this.observer?.disconnect();
49
+ this.observer = undefined;
50
+ }
51
+ componentDidLoad() {
52
+ this.scrollToBottom();
53
+ }
54
+ isNearBottom() {
55
+ const v = this.viewport;
56
+ if (!v)
57
+ return true;
58
+ return v.scrollHeight - v.scrollTop - v.clientHeight <= NEAR_BOTTOM_THRESHOLD;
59
+ }
60
+ scrollToBottom() {
61
+ if (this.viewport)
62
+ this.viewport.scrollTop = this.viewport.scrollHeight;
63
+ }
64
+ onScroll = () => {
65
+ this.stickToBottom = this.isNearBottom();
66
+ if (this.stickToBottom)
67
+ this.showScrollButton = false;
68
+ };
69
+ onMutation = () => {
70
+ if (this.stickToBottom) {
71
+ this.scrollToBottom();
72
+ }
73
+ else {
74
+ this.showScrollButton = true;
75
+ }
76
+ };
77
+ render() {
78
+ return (h("div", { key: '3298d4991c4c335e7efcff0e363a8c097452c832', class: "bs-message-list" }, h("div", { key: '7ad06a6bce1ae78b1a0779172d479c9f46a08e9b', part: "viewport", class: "bs-message-list__viewport", role: "log", "aria-live": "polite", tabindex: "0", ref: el => (this.viewport = el), onScroll: this.onScroll }, h("slot", { key: '274329a2ffa9207023177bca19a44d029150511c' })), this.showScrollButton && (h("bs-icon-button", { key: '7aff39c002edca1724ab94add005431f7e453b57', part: "scroll-to-latest", class: "bs-message-list__scroll", variant: "neutral", ariaLabel: this.scrollToLatestLabel, onClick: () => this.scrollToLatest() }, h("svg", { key: '85d406797de8e14957f078fa9ca3e9f5947c2586', width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { key: '4dd14212d3c5501ab6be3aae51e1cc80f143bf8a', d: "M8 3v10M3.5 8.5L8 13l4.5-4.5", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" }))))));
79
+ }
80
+ static get is() { return "bs-message-list"; }
81
+ static get encapsulation() { return "shadow"; }
82
+ static get originalStyleUrls() {
83
+ return {
84
+ "$": ["bs-message-list.css"]
85
+ };
86
+ }
87
+ static get styleUrls() {
88
+ return {
89
+ "$": ["bs-message-list.css"]
90
+ };
91
+ }
92
+ static get properties() {
93
+ return {
94
+ "scrollToLatestLabel": {
95
+ "type": "string",
96
+ "mutable": false,
97
+ "complexType": {
98
+ "original": "string",
99
+ "resolved": "string",
100
+ "references": {}
101
+ },
102
+ "required": false,
103
+ "optional": false,
104
+ "docs": {
105
+ "tags": [],
106
+ "text": "Accessible name of the scroll-to-latest button."
107
+ },
108
+ "getter": false,
109
+ "setter": false,
110
+ "reflect": false,
111
+ "attribute": "scroll-to-latest-label",
112
+ "defaultValue": "'Scroll to latest message'"
113
+ }
114
+ };
115
+ }
116
+ static get states() {
117
+ return {
118
+ "showScrollButton": {}
119
+ };
120
+ }
121
+ static get events() {
122
+ return [{
123
+ "method": "bsScrollToLatest",
124
+ "name": "bsScrollToLatest",
125
+ "bubbles": true,
126
+ "cancelable": true,
127
+ "composed": true,
128
+ "docs": {
129
+ "tags": [],
130
+ "text": "Fires when the scroll-to-latest button is activated or `scrollToLatest()` is called."
131
+ },
132
+ "complexType": {
133
+ "original": "void",
134
+ "resolved": "void",
135
+ "references": {}
136
+ }
137
+ }];
138
+ }
139
+ static get methods() {
140
+ return {
141
+ "scrollToLatest": {
142
+ "complexType": {
143
+ "signature": "() => Promise<void>",
144
+ "parameters": [],
145
+ "references": {
146
+ "Promise": {
147
+ "location": "global",
148
+ "id": "global::Promise"
149
+ }
150
+ },
151
+ "return": "Promise<void>"
152
+ },
153
+ "docs": {
154
+ "text": "Scrolls to the newest message and re-enables auto-follow.",
155
+ "tags": []
156
+ }
157
+ }
158
+ };
159
+ }
160
+ static get elementRef() { return "host"; }
161
+ }
@@ -0,0 +1,17 @@
1
+ import { html } from "lit";
2
+ import { componentDescription, propDescription } from "../../stories-utils";
3
+ const meta = {
4
+ title: 'Genie AI Components/bs-message-list',
5
+ parameters: { docs: { description: { component: componentDescription('bs-message-list') } } },
6
+ render: args => html `
7
+ <bs-message-list scroll-to-latest-label=${args.scrollToLatestLabel} style="height: 320px; border: 1px solid var(--bs-border-default);">
8
+ ${Array.from({ length: 12 }, (_, i) => html `<bs-message role=${i % 2 ? 'assistant' : 'user'} timestamp="10:${String(i).padStart(2, '0')}">Message number ${i + 1}</bs-message>`)}
9
+ </bs-message-list>
10
+ `,
11
+ argTypes: {
12
+ scrollToLatestLabel: { control: 'text', description: propDescription('bs-message-list', 'scrollToLatestLabel') },
13
+ },
14
+ args: { scrollToLatestLabel: 'Scroll to latest message' },
15
+ };
16
+ export default meta;
17
+ export const Default = {};
@@ -99,4 +99,9 @@ describe('bs-pagination', () => {
99
99
  expect(root.shadowRoot.querySelector('[part="prev"]')).toEqualAttribute('aria-label', 'Go back');
100
100
  expect(root.shadowRoot.querySelector('[part="next"]')).toEqualAttribute('aria-label', 'Go forward');
101
101
  });
102
+ it('applies navLabel and pageLabel overrides', async () => {
103
+ const { root } = await render(h("bs-pagination", { totalPages: 5, navLabel: "Sidenummerering", pageLabel: "G\u00E5 til side" }));
104
+ expect(root.shadowRoot.querySelector('nav')).toEqualAttribute('aria-label', 'Sidenummerering');
105
+ expect(root.shadowRoot.querySelector('[aria-label="Gå til side 2"]')).not.toBeNull();
106
+ });
102
107
  });
@@ -36,6 +36,10 @@ export class BsPagination {
36
36
  * into `...`. `1` (the default) reproduces the Figma spec's example exactly (page 1 of 12 shows
37
37
  * `1 2 3 ... 12`). */
38
38
  siblingCount = 1;
39
+ /** Accessible name of the pagination landmark. */
40
+ navLabel = 'Pagination';
41
+ /** Prefix of each page button's accessible name ("Go to page 3"). */
42
+ pageLabel = 'Go to page';
39
43
  /** Accessible name for the previous-page button. */
40
44
  previousLabel = 'Previous page';
41
45
  /** Accessible name for the next-page button. */
@@ -87,7 +91,7 @@ export class BsPagination {
87
91
  }
88
92
  render() {
89
93
  const pageList = this.getPageList();
90
- return (h("nav", { key: 'd0fec9b9d17ddc5b338ed77c4e97a7006d7e665e', "aria-label": "Pagination" }, h("ul", { key: '82fff342952ea13a84f97e549039edd18a8b6626', part: "list", class: "bs-pagination__list" }, h("li", { key: '124c33b04fe0dcdef83f8ff9c4d539518c7557d7', part: "item", class: "bs-pagination__item" }, h("button", { key: '4d702cb7cdeb7df86c4844b313943cf8d8c607d5', part: "prev", type: "button", class: "bs-pagination__control", "aria-label": this.previousLabel, disabled: this.currentPage <= 1, onClick: () => this.goToPage(this.currentPage - 1) }, h(ChevronLeftIcon, { key: '6c747a6bcdf0a9a4a2dfb8260ff85ad95eb1acdf' }))), pageList.map((item, index) => item === 'ellipsis' ? (h("li", { part: "item", class: "bs-pagination__item", key: `ellipsis-${index}` }, h("span", { part: "ellipsis", class: "bs-pagination__ellipsis", "aria-hidden": "true" }, h(EllipsisIcon, null)))) : (h("li", { part: "item", class: "bs-pagination__item", key: item }, h("button", { part: item === this.currentPage ? 'page current' : 'page', type: "button", class: `bs-pagination__control bs-pagination__page ${item === this.currentPage ? 'bs-pagination__page--current' : ''}`, "aria-label": `Go to page ${item}`, "aria-current": item === this.currentPage ? 'page' : undefined, onClick: () => this.goToPage(item) }, item)))), h("li", { key: '987698c1f798053e6f9e7ac63373c04e68868d0f', part: "item", class: "bs-pagination__item" }, h("button", { key: '95220bdb47507697a0742dbfad4fa0d37d7b4d55', part: "next", type: "button", class: "bs-pagination__control", "aria-label": this.nextLabel, disabled: this.currentPage >= this.safeTotalPages, onClick: () => this.goToPage(this.currentPage + 1) }, h(ChevronRightIcon, { key: 'd6bdac44109e11fa11c2f7d32ed732c5364e6513' }))))));
94
+ return (h("nav", { key: 'e5a681ef3a6ad9256b7d86bca4848f07f45bd68c', "aria-label": this.navLabel }, h("ul", { key: '6e7c8b544db575ac9681d56f2a328e63965f6f8e', part: "list", class: "bs-pagination__list" }, h("li", { key: 'd9d899eaa3ab46136a8d8f0d7807ff47142241a7', part: "item", class: "bs-pagination__item" }, h("button", { key: '534929e47bac4665187919708832743de124769f', part: "prev", type: "button", class: "bs-pagination__control", "aria-label": this.previousLabel, disabled: this.currentPage <= 1, onClick: () => this.goToPage(this.currentPage - 1) }, h(ChevronLeftIcon, { key: 'badb293c1e204d4a6d95773ec841a9ea187d7461' }))), pageList.map((item, index) => item === 'ellipsis' ? (h("li", { part: "item", class: "bs-pagination__item", key: `ellipsis-${index}` }, h("span", { part: "ellipsis", class: "bs-pagination__ellipsis", "aria-hidden": "true" }, h(EllipsisIcon, null)))) : (h("li", { part: "item", class: "bs-pagination__item", key: item }, h("button", { part: item === this.currentPage ? 'page current' : 'page', type: "button", class: `bs-pagination__control bs-pagination__page ${item === this.currentPage ? 'bs-pagination__page--current' : ''}`, "aria-label": `${this.pageLabel} ${item}`, "aria-current": item === this.currentPage ? 'page' : undefined, onClick: () => this.goToPage(item) }, item)))), h("li", { key: 'b0b053124a350cf380b2e4482d658bdd3b990312', part: "item", class: "bs-pagination__item" }, h("button", { key: '9c1fa207fd0d1989e19da1e3e55c057b3ba17cb6', part: "next", type: "button", class: "bs-pagination__control", "aria-label": this.nextLabel, disabled: this.currentPage >= this.safeTotalPages, onClick: () => this.goToPage(this.currentPage + 1) }, h(ChevronRightIcon, { key: '437791d5fe13908ce80632783bdce7afc660876c' }))))));
91
95
  }
92
96
  static get is() { return "bs-pagination"; }
93
97
  static get encapsulation() { return "shadow"; }
@@ -163,6 +167,46 @@ export class BsPagination {
163
167
  "attribute": "sibling-count",
164
168
  "defaultValue": "1"
165
169
  },
170
+ "navLabel": {
171
+ "type": "string",
172
+ "mutable": false,
173
+ "complexType": {
174
+ "original": "string",
175
+ "resolved": "string",
176
+ "references": {}
177
+ },
178
+ "required": false,
179
+ "optional": false,
180
+ "docs": {
181
+ "tags": [],
182
+ "text": "Accessible name of the pagination landmark."
183
+ },
184
+ "getter": false,
185
+ "setter": false,
186
+ "reflect": false,
187
+ "attribute": "nav-label",
188
+ "defaultValue": "'Pagination'"
189
+ },
190
+ "pageLabel": {
191
+ "type": "string",
192
+ "mutable": false,
193
+ "complexType": {
194
+ "original": "string",
195
+ "resolved": "string",
196
+ "references": {}
197
+ },
198
+ "required": false,
199
+ "optional": false,
200
+ "docs": {
201
+ "tags": [],
202
+ "text": "Prefix of each page button's accessible name (\"Go to page 3\")."
203
+ },
204
+ "getter": false,
205
+ "setter": false,
206
+ "reflect": false,
207
+ "attribute": "page-label",
208
+ "defaultValue": "'Go to page'"
209
+ },
166
210
  "previousLabel": {
167
211
  "type": "string",
168
212
  "mutable": false,