@brandsync/wc 0.0.11 → 0.1.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 (411) hide show
  1. package/custom-elements.json +5869 -1633
  2. package/dist/brandsync-wc/brandsync-wc.css +20 -0
  3. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  4. package/dist/brandsync-wc/p-00bb9bda.entry.js +1 -0
  5. package/dist/brandsync-wc/{p-8dff4f24.entry.js → p-0847f5c0.entry.js} +1 -1
  6. package/dist/brandsync-wc/p-0ba35c3b.entry.js +1 -0
  7. package/dist/brandsync-wc/{p-073e5fee.entry.js → p-0f3cb0c4.entry.js} +1 -1
  8. package/dist/brandsync-wc/p-10f6f3cd.entry.js +1 -0
  9. package/dist/brandsync-wc/{p-c6d330c3.entry.js → p-111974df.entry.js} +1 -1
  10. package/dist/brandsync-wc/p-11f3fceb.entry.js +1 -0
  11. package/dist/brandsync-wc/p-171fed0c.entry.js +1 -0
  12. package/dist/brandsync-wc/{p-dd224cb3.entry.js → p-18813680.entry.js} +1 -1
  13. package/dist/brandsync-wc/p-1b7c9928.entry.js +1 -0
  14. package/dist/brandsync-wc/p-1ce7dd64.entry.js +1 -0
  15. package/dist/brandsync-wc/p-2063a6d6.entry.js +1 -0
  16. package/dist/brandsync-wc/{p-4ca15322.entry.js → p-20c24179.entry.js} +1 -1
  17. package/dist/brandsync-wc/{p-b174403d.entry.js → p-321ed4d3.entry.js} +1 -1
  18. package/dist/brandsync-wc/p-38aad266.entry.js +1 -0
  19. package/dist/brandsync-wc/p-43e37883.entry.js +1 -0
  20. package/dist/brandsync-wc/p-55a8d4b5.entry.js +1 -0
  21. package/dist/brandsync-wc/p-59ac2495.entry.js +1 -0
  22. package/dist/brandsync-wc/p-5ae9e60e.entry.js +1 -0
  23. package/dist/brandsync-wc/p-6b469b2d.entry.js +1 -0
  24. package/dist/brandsync-wc/p-6d85fba4.entry.js +1 -0
  25. package/dist/brandsync-wc/p-6e95eb36.entry.js +1 -0
  26. package/dist/brandsync-wc/{p-84ae4420.entry.js → p-73217b90.entry.js} +1 -1
  27. package/dist/brandsync-wc/p-752c04c8.entry.js +1 -0
  28. package/dist/brandsync-wc/p-79af762c.entry.js +1 -0
  29. package/dist/brandsync-wc/p-81d49240.entry.js +1 -0
  30. package/dist/brandsync-wc/p-91551e7b.entry.js +1 -0
  31. package/dist/brandsync-wc/p-917a5bbc.entry.js +1 -0
  32. package/dist/brandsync-wc/{p-0b858120.entry.js → p-9876e83c.entry.js} +1 -1
  33. package/dist/brandsync-wc/p-9bcd99aa.entry.js +1 -0
  34. package/dist/brandsync-wc/{p-d1dc2ced.entry.js → p-9c4768aa.entry.js} +1 -1
  35. package/dist/brandsync-wc/{p-DP_bvuvB.js → p-Do3l4of3.js} +2 -2
  36. package/dist/brandsync-wc/p-aa43d478.entry.js +1 -0
  37. package/dist/brandsync-wc/p-c3079ad7.entry.js +1 -0
  38. package/dist/brandsync-wc/{p-74a4dd91.entry.js → p-c3c383dc.entry.js} +1 -1
  39. package/dist/brandsync-wc/p-cc79e75f.entry.js +1 -0
  40. package/dist/brandsync-wc/p-ce7fc368.entry.js +1 -0
  41. package/dist/brandsync-wc/{p-030a8ba7.entry.js → p-d3265e70.entry.js} +1 -1
  42. package/dist/brandsync-wc/p-d55bbcec.entry.js +1 -0
  43. package/dist/brandsync-wc/{p-1bf0b2d5.entry.js → p-e93e944b.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-7a605d98.entry.js → p-eb04c578.entry.js} +1 -1
  45. package/dist/brandsync-wc/{p-3c8fbaa8.entry.js → p-f0ae2740.entry.js} +1 -1
  46. package/dist/brandsync-wc/p-f4f22015.entry.js +1 -0
  47. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  48. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +3 -2
  49. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  50. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  51. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  52. package/dist/cjs/bs-attachment.cjs.entry.js +3 -3
  53. package/dist/cjs/bs-avatar.cjs.entry.js +60 -0
  54. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  55. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +56 -0
  56. package/dist/cjs/bs-breadcrumb.cjs.entry.js +33 -0
  57. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +49 -0
  58. package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
  59. package/dist/cjs/bs-button.cjs.entry.js +3 -3
  60. package/dist/cjs/bs-card.cjs.entry.js +10 -3
  61. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
  62. package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
  63. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
  64. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
  65. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +2 -2
  66. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +20 -0
  67. package/dist/cjs/bs-checkbox.cjs.entry.js +14 -3
  68. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +14 -2
  69. package/dist/cjs/bs-composer.cjs.entry.js +37 -4
  70. package/dist/cjs/bs-data-table.cjs.entry.js +3 -3
  71. package/dist/cjs/bs-dialog.cjs.entry.js +110 -0
  72. package/dist/cjs/bs-icon-button.cjs.entry.js +40 -0
  73. package/dist/cjs/bs-inline-tab.cjs.entry.js +69 -0
  74. package/dist/cjs/bs-input.cjs.entry.js +24 -12
  75. package/dist/cjs/bs-logo.cjs.entry.js +165 -0
  76. package/dist/cjs/{bs-menu_2.cjs.entry.js → bs-menu-item.cjs.entry.js} +2 -15
  77. package/dist/cjs/bs-menu.cjs.entry.js +17 -0
  78. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +104 -0
  79. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +87 -0
  80. package/dist/cjs/bs-navigation-header.cjs.entry.js +44 -0
  81. package/dist/cjs/bs-pagination.cjs.entry.js +85 -0
  82. package/dist/cjs/bs-radio.cjs.entry.js +49 -0
  83. package/dist/cjs/bs-slider.cjs.entry.js +191 -0
  84. package/dist/cjs/bs-snackbar.cjs.entry.js +41 -0
  85. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  86. package/dist/cjs/bs-switch.cjs.entry.js +57 -0
  87. package/dist/cjs/bs-tab.cjs.entry.js +80 -0
  88. package/dist/cjs/bs-tabs.cjs.entry.js +39 -0
  89. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  90. package/dist/cjs/{index-CGrdFg95.js → index-DHVw-IPK.js} +2 -1
  91. package/dist/cjs/loader.cjs.js +2 -2
  92. package/dist/collection/collection-manifest.json +21 -3
  93. package/dist/collection/components/bs-ai-chatbot/bs-ai-chatbot.stories.js +26 -11
  94. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +2 -1
  95. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  96. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  97. package/dist/collection/components/bs-attachment/bs-attachment.css +12 -33
  98. package/dist/collection/components/bs-attachment/bs-attachment.js +4 -10
  99. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  100. package/dist/collection/components/bs-avatar/bs-avatar.cmp.test.js +54 -0
  101. package/dist/collection/components/bs-avatar/bs-avatar.css +197 -0
  102. package/dist/collection/components/bs-avatar/bs-avatar.js +251 -0
  103. package/dist/collection/components/bs-avatar/bs-avatar.stories.js +67 -0
  104. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.cmp.test.js +62 -0
  105. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.css +93 -0
  106. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.js +130 -0
  107. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.cmp.test.js +118 -0
  108. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.css +125 -0
  109. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.js +192 -0
  110. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.cmp.test.js +58 -0
  111. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.css +18 -0
  112. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +129 -0
  113. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.stories.js +84 -0
  114. package/dist/collection/components/bs-button/{bs-button.cmp.test.js → bs-button/bs-button.cmp.test.js} +26 -0
  115. package/dist/collection/components/bs-button/{bs-button.css → bs-button/bs-button.css} +57 -6
  116. package/dist/collection/components/bs-button/{bs-button.js → bs-button/bs-button.js} +10 -5
  117. package/dist/collection/components/bs-button/{bs-button.stories.js → bs-button/bs-button.stories.js} +2 -27
  118. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.js +83 -0
  119. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.css +346 -0
  120. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +185 -0
  121. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.stories.js +74 -0
  122. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +3 -3
  123. package/dist/collection/components/bs-card/bs-card.cmp.test.js +19 -0
  124. package/dist/collection/components/bs-card/bs-card.css +37 -5
  125. package/dist/collection/components/bs-card/bs-card.js +18 -2
  126. package/dist/collection/components/bs-card/bs-card.stories.js +17 -1
  127. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  128. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  129. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  130. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.css +1 -1
  131. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  132. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  133. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.cmp.test.js +23 -0
  134. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.css +64 -0
  135. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +81 -0
  136. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.stories.js +25 -0
  137. package/dist/collection/components/bs-checkbox/bs-checkbox.cmp.test.js +10 -0
  138. package/dist/collection/components/bs-checkbox/bs-checkbox.css +7 -1
  139. package/dist/collection/components/bs-checkbox/bs-checkbox.js +32 -1
  140. package/dist/collection/components/bs-checkbox/bs-checkbox.stories.js +12 -0
  141. package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +48 -7
  142. package/dist/collection/components/bs-composer/bs-composer.css +15 -0
  143. package/dist/collection/components/bs-composer/bs-composer.js +38 -4
  144. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.cmp.test.js +47 -1
  145. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +20 -1
  146. package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
  147. package/dist/collection/components/{bs-modal/bs-modal.cmp.test.js → bs-dialog/bs-dialog.cmp.test.js} +63 -19
  148. package/dist/collection/components/bs-dialog/bs-dialog.css +130 -0
  149. package/dist/collection/components/bs-dialog/bs-dialog.js +273 -0
  150. package/dist/collection/components/bs-dialog/bs-dialog.stories.js +115 -0
  151. package/dist/collection/components/bs-input/bs-input.cmp.test.js +20 -0
  152. package/dist/collection/components/bs-input/bs-input.css +80 -2
  153. package/dist/collection/components/bs-input/bs-input.js +28 -10
  154. package/dist/collection/components/bs-input/bs-input.stories.js +14 -11
  155. package/dist/collection/components/bs-logo/brandsync-logo-full-dark.js +44 -0
  156. package/dist/collection/components/bs-logo/brandsync-logo-full-light.js +40 -0
  157. package/dist/collection/components/bs-logo/brandsync-logo-mark.js +17 -0
  158. package/dist/collection/components/bs-logo/bs-logo.cmp.test.js +113 -0
  159. package/dist/collection/components/bs-logo/bs-logo.css +79 -0
  160. package/dist/collection/components/bs-logo/bs-logo.js +193 -0
  161. package/dist/collection/components/bs-logo/bs-logo.stories.js +69 -0
  162. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  163. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  164. package/dist/collection/components/bs-pagination/bs-pagination.cmp.test.js +102 -0
  165. package/dist/collection/components/bs-pagination/bs-pagination.css +120 -0
  166. package/dist/collection/components/bs-pagination/bs-pagination.js +233 -0
  167. package/dist/collection/components/bs-pagination/bs-pagination.stories.js +43 -0
  168. package/dist/collection/components/bs-radio/bs-radio.cmp.test.js +76 -0
  169. package/dist/collection/components/bs-radio/bs-radio.css +164 -0
  170. package/dist/collection/components/bs-radio/bs-radio.js +170 -0
  171. package/dist/collection/components/bs-radio/bs-radio.stories.js +56 -0
  172. package/dist/collection/components/bs-slider/bs-slider.cmp.test.js +139 -0
  173. package/dist/collection/components/bs-slider/bs-slider.css +409 -0
  174. package/dist/collection/components/bs-slider/bs-slider.js +499 -0
  175. package/dist/collection/components/bs-slider/bs-slider.stories.js +70 -0
  176. package/dist/collection/components/bs-snackbar/bs-snackbar.cmp.test.js +77 -0
  177. package/dist/collection/components/bs-snackbar/bs-snackbar.css +321 -0
  178. package/dist/collection/components/bs-snackbar/bs-snackbar.js +172 -0
  179. package/dist/collection/components/bs-snackbar/bs-snackbar.stories.js +59 -0
  180. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  181. package/dist/collection/components/bs-switch/bs-switch.cmp.test.js +71 -0
  182. package/dist/collection/components/bs-switch/bs-switch.css +196 -0
  183. package/dist/collection/components/bs-switch/bs-switch.js +185 -0
  184. package/dist/collection/components/bs-switch/bs-switch.stories.js +60 -0
  185. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.cmp.test.js +104 -0
  186. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.css +163 -0
  187. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +192 -0
  188. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.js +95 -0
  189. package/dist/collection/components/bs-tab/bs-tab/bs-tab.cmp.test.js +120 -0
  190. package/dist/collection/components/bs-tab/bs-tab/bs-tab.css +216 -0
  191. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +232 -0
  192. package/dist/collection/components/bs-tab/bs-tab/bs-tab.stories.js +138 -0
  193. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.cmp.test.js +61 -0
  194. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.css +39 -0
  195. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +133 -0
  196. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.stories.js +39 -0
  197. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  198. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +143 -0
  199. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.css +257 -0
  200. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +281 -0
  201. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.js +274 -0
  202. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.js +172 -0
  203. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.css +325 -0
  204. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +314 -0
  205. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.stories.js +78 -0
  206. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.js +77 -0
  207. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.css +106 -0
  208. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +188 -0
  209. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.js +446 -0
  210. package/dist/components/bs-ai-disclaimer.js +1 -1
  211. package/dist/components/bs-ai-greeting.js +1 -1
  212. package/dist/components/bs-ai-thinking.js +1 -1
  213. package/dist/components/bs-attachment-list.js +1 -1
  214. package/dist/components/bs-attachment.js +1 -1
  215. package/dist/components/bs-avatar.d.ts +11 -0
  216. package/dist/components/bs-avatar.js +1 -0
  217. package/dist/components/bs-badge.js +1 -1
  218. package/dist/components/bs-breadcrumb-overflow.d.ts +11 -0
  219. package/dist/components/bs-breadcrumb-overflow.js +1 -0
  220. package/dist/components/bs-breadcrumb.d.ts +11 -0
  221. package/dist/components/bs-breadcrumb.js +1 -0
  222. package/dist/components/bs-breadcrumbs.d.ts +11 -0
  223. package/dist/components/bs-breadcrumbs.js +1 -0
  224. package/dist/components/bs-button-skeleton.js +1 -1
  225. package/dist/components/bs-button.js +1 -1
  226. package/dist/components/bs-card.js +1 -1
  227. package/dist/components/bs-chatbot-feedback.js +1 -1
  228. package/dist/components/bs-chatbot-header.js +1 -1
  229. package/dist/components/bs-chatbot-response-action.js +1 -1
  230. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  231. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  232. package/dist/components/bs-checkbox-skeleton.d.ts +11 -0
  233. package/dist/components/bs-checkbox-skeleton.js +1 -0
  234. package/dist/components/bs-checkbox.js +1 -1
  235. package/dist/components/bs-composer-status-banner.js +1 -1
  236. package/dist/components/bs-composer.js +1 -1
  237. package/dist/components/bs-data-table.js +1 -1
  238. package/dist/components/bs-dialog.d.ts +11 -0
  239. package/dist/components/bs-dialog.js +1 -0
  240. package/dist/components/bs-icon-button.d.ts +11 -0
  241. package/dist/components/bs-icon-button.js +1 -0
  242. package/dist/components/bs-inline-tab.d.ts +11 -0
  243. package/dist/components/bs-inline-tab.js +1 -0
  244. package/dist/components/bs-input.js +1 -1
  245. package/dist/components/{bs-modal.d.ts → bs-logo.d.ts} +4 -4
  246. package/dist/components/bs-logo.js +1 -0
  247. package/dist/components/bs-menu-item.js +1 -1
  248. package/dist/components/bs-menu.js +1 -1
  249. package/dist/components/bs-navigation-drawer-item.d.ts +11 -0
  250. package/dist/components/bs-navigation-drawer-item.js +1 -0
  251. package/dist/components/bs-navigation-drawer.d.ts +11 -0
  252. package/dist/components/bs-navigation-drawer.js +1 -0
  253. package/dist/components/bs-navigation-header.d.ts +11 -0
  254. package/dist/components/bs-navigation-header.js +1 -0
  255. package/dist/components/bs-pagination.d.ts +11 -0
  256. package/dist/components/bs-pagination.js +1 -0
  257. package/dist/components/bs-radio.d.ts +11 -0
  258. package/dist/components/bs-radio.js +1 -0
  259. package/dist/components/bs-slider.d.ts +11 -0
  260. package/dist/components/bs-slider.js +1 -0
  261. package/dist/components/bs-snackbar.d.ts +11 -0
  262. package/dist/components/bs-snackbar.js +1 -0
  263. package/dist/components/bs-source-link.js +1 -1
  264. package/dist/components/bs-switch.d.ts +11 -0
  265. package/dist/components/bs-switch.js +1 -0
  266. package/dist/components/bs-tab.d.ts +11 -0
  267. package/dist/components/bs-tab.js +1 -0
  268. package/dist/components/bs-tabs.d.ts +11 -0
  269. package/dist/components/bs-tabs.js +1 -0
  270. package/dist/components/bs-tooltip.js +1 -1
  271. package/dist/components/index.js +1 -1
  272. package/dist/components/p-BFcVSpES.js +1 -0
  273. package/dist/components/{p-D1cYtKyN.js → p-BJZYe7M4.js} +1 -1
  274. package/dist/components/p-BKaZWFE1.js +1 -0
  275. package/dist/components/{p-BUbGEXL7.js → p-BtX5URLk.js} +1 -1
  276. package/dist/components/{p-B9PrXIl_.js → p-CgaPcyEJ.js} +1 -1
  277. package/dist/components/{p-D2HDHZjz.js → p-qK1XlpTA.js} +1 -1
  278. package/dist/esm/brandsync-wc.js +3 -3
  279. package/dist/esm/bs-ai-disclaimer.entry.js +3 -2
  280. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  281. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  282. package/dist/esm/bs-attachment-list.entry.js +2 -2
  283. package/dist/esm/bs-attachment.entry.js +3 -3
  284. package/dist/esm/bs-avatar.entry.js +58 -0
  285. package/dist/esm/bs-badge.entry.js +1 -1
  286. package/dist/esm/bs-breadcrumb-overflow.entry.js +54 -0
  287. package/dist/esm/bs-breadcrumb.entry.js +31 -0
  288. package/dist/esm/bs-breadcrumbs.entry.js +47 -0
  289. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  290. package/dist/esm/bs-button.entry.js +3 -3
  291. package/dist/esm/bs-card.entry.js +10 -3
  292. package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
  293. package/dist/esm/bs-chatbot-header.entry.js +2 -2
  294. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  295. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  296. package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
  297. package/dist/esm/bs-checkbox-skeleton.entry.js +18 -0
  298. package/dist/esm/bs-checkbox.entry.js +14 -3
  299. package/dist/esm/bs-composer-status-banner.entry.js +14 -2
  300. package/dist/esm/bs-composer.entry.js +37 -4
  301. package/dist/esm/bs-data-table.entry.js +3 -3
  302. package/dist/esm/bs-dialog.entry.js +108 -0
  303. package/dist/esm/bs-icon-button.entry.js +38 -0
  304. package/dist/esm/bs-inline-tab.entry.js +67 -0
  305. package/dist/esm/bs-input.entry.js +24 -12
  306. package/dist/esm/bs-logo.entry.js +163 -0
  307. package/dist/esm/{bs-menu_2.entry.js → bs-menu-item.entry.js} +3 -15
  308. package/dist/esm/bs-menu.entry.js +15 -0
  309. package/dist/esm/bs-navigation-drawer-item.entry.js +102 -0
  310. package/dist/esm/bs-navigation-drawer.entry.js +85 -0
  311. package/dist/esm/bs-navigation-header.entry.js +42 -0
  312. package/dist/esm/bs-pagination.entry.js +83 -0
  313. package/dist/esm/bs-radio.entry.js +47 -0
  314. package/dist/esm/bs-slider.entry.js +189 -0
  315. package/dist/esm/bs-snackbar.entry.js +39 -0
  316. package/dist/esm/bs-source-link.entry.js +3 -3
  317. package/dist/esm/bs-switch.entry.js +55 -0
  318. package/dist/esm/bs-tab.entry.js +78 -0
  319. package/dist/esm/bs-tabs.entry.js +37 -0
  320. package/dist/esm/bs-tooltip.entry.js +2 -2
  321. package/dist/esm/{index-DP_bvuvB.js → index-Do3l4of3.js} +2 -2
  322. package/dist/esm/loader.js +3 -3
  323. package/dist/types/components/bs-attachment/bs-attachment.d.ts +3 -9
  324. package/dist/types/components/bs-avatar/bs-avatar.d.ts +67 -0
  325. package/dist/types/components/bs-avatar/bs-avatar.stories.d.ts +20 -0
  326. package/dist/types/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.cmp.test.d.ts +1 -0
  327. package/dist/types/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.d.ts +44 -0
  328. package/dist/types/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.d.ts +69 -0
  329. package/dist/types/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.cmp.test.d.ts +1 -0
  330. package/dist/types/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.d.ts +45 -0
  331. package/dist/types/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.stories.d.ts +14 -0
  332. package/dist/types/components/bs-button/bs-button/bs-button.cmp.test.d.ts +1 -0
  333. package/dist/types/components/bs-button/{bs-button.d.ts → bs-button/bs-button.d.ts} +5 -0
  334. package/dist/types/components/bs-button/{bs-button.stories.d.ts → bs-button/bs-button.stories.d.ts} +0 -2
  335. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.d.ts +1 -0
  336. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.d.ts +51 -0
  337. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.stories.d.ts +16 -0
  338. package/dist/types/components/bs-button-skeleton/bs-button-skeleton.d.ts +1 -1
  339. package/dist/types/components/bs-button-skeleton/bs-button-skeleton.stories.d.ts +1 -1
  340. package/dist/types/components/bs-card/bs-card.d.ts +10 -1
  341. package/dist/types/components/bs-card/bs-card.stories.d.ts +1 -0
  342. package/dist/types/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.cmp.test.d.ts +1 -0
  343. package/dist/types/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.d.ts +36 -0
  344. package/dist/types/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.stories.d.ts +10 -0
  345. package/dist/types/components/bs-checkbox/bs-checkbox.d.ts +11 -0
  346. package/dist/types/components/bs-checkbox/bs-checkbox.stories.d.ts +1 -0
  347. package/dist/types/components/bs-composer/bs-composer.d.ts +26 -2
  348. package/dist/types/components/bs-composer-status-banner/bs-composer-status-banner.d.ts +14 -0
  349. package/dist/types/components/bs-dialog/bs-dialog.cmp.test.d.ts +1 -0
  350. package/dist/types/components/bs-dialog/bs-dialog.d.ts +74 -0
  351. package/dist/types/components/{bs-modal/bs-modal.stories.d.ts → bs-dialog/bs-dialog.stories.d.ts} +5 -3
  352. package/dist/types/components/bs-input/bs-input.d.ts +8 -1
  353. package/dist/types/components/bs-logo/brandsync-logo-full-dark.d.ts +1 -0
  354. package/dist/types/components/bs-logo/brandsync-logo-full-light.d.ts +1 -0
  355. package/dist/types/components/bs-logo/brandsync-logo-mark.d.ts +1 -0
  356. package/dist/types/components/bs-logo/bs-logo.cmp.test.d.ts +1 -0
  357. package/dist/types/components/bs-logo/bs-logo.d.ts +73 -0
  358. package/dist/types/components/bs-logo/bs-logo.stories.d.ts +17 -0
  359. package/dist/types/components/bs-pagination/bs-pagination.cmp.test.d.ts +1 -0
  360. package/dist/types/components/bs-pagination/bs-pagination.d.ts +51 -0
  361. package/dist/types/components/bs-pagination/bs-pagination.stories.d.ts +14 -0
  362. package/dist/types/components/bs-radio/bs-radio.cmp.test.d.ts +1 -0
  363. package/dist/types/components/bs-radio/bs-radio.d.ts +45 -0
  364. package/dist/types/components/bs-radio/bs-radio.stories.d.ts +16 -0
  365. package/dist/types/components/bs-slider/bs-slider.cmp.test.d.ts +1 -0
  366. package/dist/types/components/bs-slider/bs-slider.d.ts +109 -0
  367. package/dist/types/components/bs-slider/bs-slider.stories.d.ts +24 -0
  368. package/dist/types/components/bs-snackbar/bs-snackbar.cmp.test.d.ts +1 -0
  369. package/dist/types/components/bs-snackbar/bs-snackbar.d.ts +51 -0
  370. package/dist/types/components/bs-snackbar/bs-snackbar.stories.d.ts +16 -0
  371. package/dist/types/components/bs-switch/bs-switch.cmp.test.d.ts +1 -0
  372. package/dist/types/components/bs-switch/bs-switch.d.ts +45 -0
  373. package/dist/types/components/bs-switch/bs-switch.stories.d.ts +17 -0
  374. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.cmp.test.d.ts +1 -0
  375. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.d.ts +65 -0
  376. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.d.ts +22 -0
  377. package/dist/types/components/bs-tab/bs-tab/bs-tab.cmp.test.d.ts +1 -0
  378. package/dist/types/components/bs-tab/bs-tab/bs-tab.d.ts +74 -0
  379. package/dist/types/components/bs-tab/bs-tab/bs-tab.stories.d.ts +30 -0
  380. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.cmp.test.d.ts +1 -0
  381. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.d.ts +45 -0
  382. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.stories.d.ts +13 -0
  383. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.d.ts +1 -0
  384. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.d.ts +104 -0
  385. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.d.ts +19 -0
  386. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.d.ts +1 -0
  387. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.d.ts +103 -0
  388. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.stories.d.ts +20 -0
  389. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.d.ts +1 -0
  390. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.d.ts +60 -0
  391. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.d.ts +25 -0
  392. package/dist/types/components.d.ts +2908 -114
  393. package/package.json +1 -1
  394. package/dist/brandsync-wc/p-2598ca88.entry.js +0 -1
  395. package/dist/brandsync-wc/p-3dd9b814.entry.js +0 -1
  396. package/dist/brandsync-wc/p-41edb0a2.entry.js +0 -1
  397. package/dist/brandsync-wc/p-6254dcbe.entry.js +0 -1
  398. package/dist/brandsync-wc/p-7131d0a1.entry.js +0 -1
  399. package/dist/brandsync-wc/p-8c302968.entry.js +0 -1
  400. package/dist/brandsync-wc/p-8d78171b.entry.js +0 -1
  401. package/dist/brandsync-wc/p-93e44903.entry.js +0 -1
  402. package/dist/brandsync-wc/p-aa45d877.entry.js +0 -1
  403. package/dist/cjs/bs-modal.cjs.entry.js +0 -69
  404. package/dist/collection/components/bs-modal/bs-modal.css +0 -66
  405. package/dist/collection/components/bs-modal/bs-modal.js +0 -198
  406. package/dist/collection/components/bs-modal/bs-modal.stories.js +0 -38
  407. package/dist/components/bs-modal.js +0 -1
  408. package/dist/esm/bs-modal.entry.js +0 -67
  409. package/dist/types/components/bs-modal/bs-modal.d.ts +0 -45
  410. /package/dist/types/components/{bs-button/bs-button.cmp.test.d.ts → bs-avatar/bs-avatar.cmp.test.d.ts} +0 -0
  411. /package/dist/types/components/{bs-modal/bs-modal.cmp.test.d.ts → bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.cmp.test.d.ts} +0 -0
@@ -23,18 +23,32 @@ const PANEL_STYLE = `
23
23
  background: var(--bs-surface-base);
24
24
  font-family: var(--bs-typography-font-family-body), sans-serif;
25
25
  `;
26
+ // Page padding per the Genie Chatbot pattern spec (16px left/right, 24px top/bottom -- not a flat
27
+ // 16px on every side). No uniform \`gap\` here: the user-bubble-to-AI-response spacing below is a
28
+ // distinct, much larger value (40px) than any other spacing within a single AI turn, so it's set
29
+ // explicitly per-element instead of via one flex gap.
26
30
  const TRANSCRIPT_STYLE = `
27
31
  flex: 1;
28
32
  min-height: 0;
29
33
  overflow-y: auto;
30
34
  display: flex;
31
35
  flex-direction: column;
32
- gap: var(--bs-spacing-200);
33
- padding: var(--bs-spacing-200);
36
+ padding: var(--bs-spacing-300) var(--bs-spacing-200);
34
37
  `;
38
+ // The gap from a user's message bubble to the AI's response that follows it, per the Genie
39
+ // Chatbot pattern spec's conversationWindow.userBubbleToAiResponsePx (40px) -- deliberately much
40
+ // larger than ordinary internal spacing (e.g. the 4px gap between an AI response's own text and
41
+ // its action row below).
42
+ const AI_RESPONSE_GAP_STYLE = `margin-top: var(--bs-spacing-500);`;
43
+ // margin: 0 on both -- these render as <p> tags, and this Storybook environment has no CSS reset
44
+ // zeroing the browser's default <p> margin (~1em top/bottom). Left unset, that default margin
45
+ // silently added to the intentional 40px user-bubble-to-AI-response gap (AI_RESPONSE_GAP_STYLE
46
+ // above), measuring 56px instead of the spec's 40px -- confirmed via getBoundingClientRect before
47
+ // this fix.
35
48
  const USER_BUBBLE_STYLE = `
36
49
  align-self: flex-end;
37
50
  max-width: 80%;
51
+ margin: 0;
38
52
  padding: var(--bs-spacing-100) var(--bs-spacing-150);
39
53
  border-radius: var(--bs-border-radius-150);
40
54
  background: var(--bs-color-primary-container);
@@ -44,6 +58,7 @@ const USER_BUBBLE_STYLE = `
44
58
  `;
45
59
  const AI_RESPONSE_STYLE = `
46
60
  max-width: 100%;
61
+ margin: 0;
47
62
  color: var(--bs-text-default);
48
63
  font-size: var(--bs-font-size-md);
49
64
  line-height: 1.5;
@@ -62,7 +77,7 @@ export const EmptyState = {
62
77
  </div>
63
78
  </div>
64
79
  <bs-composer aria-label="Message" style="margin: var(--bs-spacing-100) var(--bs-spacing-200) 0;"></bs-composer>
65
- <bs-ai-disclaimer style="padding: var(--bs-spacing-100) 0;">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
80
+ <bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
66
81
  </div>
67
82
  `,
68
83
  };
@@ -73,7 +88,7 @@ export const ActiveConversation = {
73
88
  <bs-chatbot-header heading="Genie"></bs-chatbot-header>
74
89
  <div style=${TRANSCRIPT_STYLE}>
75
90
  <p style=${USER_BUBBLE_STYLE}>How do I submit a ByggSøk application?</p>
76
- <div style="display: flex; flex-direction: column; gap: var(--bs-spacing-50);">
91
+ <div style="${AI_RESPONSE_GAP_STYLE} display: flex; flex-direction: column; gap: var(--bs-spacing-50);">
77
92
  <p style=${AI_RESPONSE_STYLE}>
78
93
  You can submit a ByggSøk application through the municipal portal. Log in with your ID, select "New
79
94
  application", and attach your building plans before submitting for review.
@@ -82,7 +97,7 @@ export const ActiveConversation = {
82
97
  </div>
83
98
  </div>
84
99
  <bs-composer aria-label="Message" style="margin: var(--bs-spacing-100) var(--bs-spacing-200) 0;"></bs-composer>
85
- <bs-ai-disclaimer style="padding: var(--bs-spacing-100) 0;">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
100
+ <bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
86
101
  </div>
87
102
  `,
88
103
  };
@@ -93,10 +108,10 @@ export const Thinking = {
93
108
  <bs-chatbot-header heading="Genie"></bs-chatbot-header>
94
109
  <div style=${TRANSCRIPT_STYLE}>
95
110
  <p style=${USER_BUBBLE_STYLE}>How do I submit a ByggSøk application?</p>
96
- <bs-ai-thinking label="Retrieving sources"></bs-ai-thinking>
111
+ <bs-ai-thinking label="Retrieving sources" style=${AI_RESPONSE_GAP_STYLE}></bs-ai-thinking>
97
112
  </div>
98
113
  <bs-composer aria-label="Message" state="generating" style="margin: var(--bs-spacing-100) var(--bs-spacing-200) 0;"></bs-composer>
99
- <bs-ai-disclaimer style="padding: var(--bs-spacing-100) 0;">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
114
+ <bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
100
115
  </div>
101
116
  `,
102
117
  };
@@ -107,7 +122,7 @@ export const WithSourcesDrawerOpen = {
107
122
  <bs-chatbot-header heading="Genie"></bs-chatbot-header>
108
123
  <div style=${TRANSCRIPT_STYLE}>
109
124
  <p style=${USER_BUBBLE_STYLE}>How do I submit a ByggSøk application?</p>
110
- <div style="display: flex; flex-direction: column; gap: var(--bs-spacing-50);">
125
+ <div style="${AI_RESPONSE_GAP_STYLE} display: flex; flex-direction: column; gap: var(--bs-spacing-50);">
111
126
  <p style=${AI_RESPONSE_STYLE}>
112
127
  You can submit a ByggSøk application through the municipal portal. Log in with your ID, select "New
113
128
  application", and attach your building plans before submitting for review.
@@ -116,7 +131,7 @@ export const WithSourcesDrawerOpen = {
116
131
  </div>
117
132
  </div>
118
133
  <bs-composer aria-label="Message" style="margin: var(--bs-spacing-100) var(--bs-spacing-200) 0;"></bs-composer>
119
- <bs-ai-disclaimer style="padding: var(--bs-spacing-100) 0;">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
134
+ <bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
120
135
 
121
136
  <!-- Backdrop -->
122
137
  <div style="position: absolute; inset: 0; background: rgba(33, 38, 46, 0.32);"></div>
@@ -152,7 +167,7 @@ export const UploadingAttachments = {
152
167
  </bs-attachment-list>
153
168
  </bs-composer>
154
169
  </div>
155
- <bs-ai-disclaimer style="padding: var(--bs-spacing-100) 0;">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
170
+ <bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
156
171
  </div>
157
172
  `,
158
173
  };
@@ -174,7 +189,7 @@ export const SendFailed = {
174
189
  ></bs-composer-status-banner>
175
190
  <bs-composer aria-label="Message"></bs-composer>
176
191
  </div>
177
- <bs-ai-disclaimer style="padding: var(--bs-spacing-100) 0;">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
192
+ <bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
178
193
  </div>
179
194
  `,
180
195
  };
@@ -24,7 +24,8 @@ import { h } from "@stencil/core";
24
24
  */
25
25
  export class BsAiDisclaimer {
26
26
  render() {
27
- return (h("div", { key: 'ea1210d75f9f55f4ce31f0ecd434e28a0c3a6ae5', class: "bs-ai-disclaimer" }, h("p", { key: 'a4379d06096623a33254466c83d7a8342a1a61f6', part: "text", class: "bs-ai-disclaimer__text" }, h("slot", { key: '4ceb6be62b06ddeae050ce84c92d511218791219' }))));
27
+ https: //images.unsplash.com/photo-1512917774080-9991f1c4c750?w=200&h=200&fit=crop
28
+ return (h("div", { key: '4ef6ca1bd71846f361322763d4a8a9b629da9c33', class: "bs-ai-disclaimer" }, h("p", { key: '62ae8fe04dfcba8c357a4bc2e540a86c02faa961', part: "text", class: "bs-ai-disclaimer__text" }, h("slot", { key: '229c78f58ac3a9868492e82434ff894a20f29613' }))));
28
29
  }
29
30
  static get is() { return "bs-ai-disclaimer"; }
30
31
  static get encapsulation() { return "shadow"; }
@@ -43,7 +43,7 @@ export class BsAiGreeting {
43
43
  const subtext = this.productName
44
44
  ? `How can I help you with ${this.productName} today?`
45
45
  : 'How can I help you today?';
46
- return (h("div", { key: '34a137d8c2dd17240a2015e9f4571d438924f5ba', class: "bs-ai-greeting" }, h("div", { key: 'be999e806a9ee740b01d6aa2e5531e45c89ea9fb', part: "heading", class: "bs-ai-greeting__heading" }, h("p", { key: '37b906288175467937c66961dcc2f08f911c0566', class: "bs-ai-greeting__heading-line" }, "Hi. I'm ", this.assistantName, ","), h("p", { key: '2973043c2ae6646a0dff1bc905cb7f2eaf9d5251', class: "bs-ai-greeting__heading-line" }, "your AI assistant.")), h("p", { key: 'd981c73b805a3f27cd3dcb22e58f0058ff6b4f1c', part: "subtext", class: "bs-ai-greeting__subtext" }, subtext)));
46
+ return (h("div", { key: 'f3cfd0ecf060abf18c9f043f8ebbe7d93926e044', class: "bs-ai-greeting" }, h("div", { key: 'e1cb5cba1752e5261a750734db768e32f8ce7723', part: "heading", class: "bs-ai-greeting__heading" }, h("p", { key: '31e0f592eb17a6c48f407837e37b29cd8b580cde', class: "bs-ai-greeting__heading-line" }, "Hi. I'm ", this.assistantName, ","), h("p", { key: 'd35c3fb4df5d90eccef75638881f27e37d379ded', class: "bs-ai-greeting__heading-line" }, "your AI assistant.")), h("p", { key: 'cb7d9a8081c0128f8e24eb165cf7857bcb82cdeb', part: "subtext", class: "bs-ai-greeting__subtext" }, subtext)));
47
47
  }
48
48
  static get is() { return "bs-ai-greeting"; }
49
49
  static get encapsulation() { return "shadow"; }
@@ -29,7 +29,7 @@ export class BsAiThinking {
29
29
  /** The status text shown next to the icon, e.g. "Retrieving", "Thinking", "Searching". */
30
30
  label = 'Thinking';
31
31
  render() {
32
- return (h("div", { key: '3fb5e1a21daa9244f595c20b19968249388ac027', class: "bs-ai-thinking", role: "status", "aria-live": "polite" }, h("img", { key: 'be5a7f7a2b64da982d8e61dc02668d57d713f6f5', part: "icon", class: "bs-ai-thinking__icon", src: GENIE_MARK_ICON, alt: "", "aria-hidden": "true" }), h("span", { key: '2581cdf1609ba8ff7c653cb2dae959946ef83dac', part: "label", class: "bs-ai-thinking__label" }, this.label)));
32
+ return (h("div", { key: '312409b5eb383fc321814784c036841e43b6311e', class: "bs-ai-thinking", role: "status", "aria-live": "polite" }, h("img", { key: 'c98b5fdff23e9911cb946774e98b2f308838cf4d', part: "icon", class: "bs-ai-thinking__icon", src: GENIE_MARK_ICON, alt: "", "aria-hidden": "true" }), h("span", { key: '65d4193a343877b05e031c36e03c9faa5a439db6', part: "label", class: "bs-ai-thinking__label" }, this.label)));
33
33
  }
34
34
  static get is() { return "bs-ai-thinking"; }
35
35
  static get encapsulation() { return "shadow"; }
@@ -7,10 +7,6 @@
7
7
  --bs-attachment-filename-color: var(--bs-text-default);
8
8
  --bs-attachment-badge-bg-pdf: var(--bs-badge-bg-error);
9
9
  --bs-attachment-badge-bg-document: var(--bs-badge-bg-info);
10
- --bs-attachment-remove-bg: var(--bs-button-neutral-container);
11
- --bs-attachment-remove-hover: var(--bs-button-neutral-hover);
12
- --bs-attachment-remove-pressed: var(--bs-button-neutral-pressed);
13
- --bs-attachment-remove-focus: var(--bs-border-neutral-focus);
14
10
  }
15
11
 
16
12
  .bs-attachment {
@@ -98,35 +94,23 @@
98
94
  background: var(--bs-attachment-badge-bg-document);
99
95
  }
100
96
 
101
- /* --- Remove button --- */
97
+ /* --- Remove button ---
98
+ bs-icon-button owns its own background/color/radius/hover/pressed/focus styling internally
99
+ (variant="neutral" size="xs") -- this component only positions it (absolute, top-right corner)
100
+ and drives the hover/focus-revealed opacity, both external layout concerns bs-icon-button
101
+ itself has no opinion on. */
102
102
 
103
103
  .bs-attachment__remove {
104
- box-sizing: border-box;
105
104
  position: absolute;
106
- top: var(--bs-spacing-50);
107
- right: var(--bs-spacing-50);
108
- display: inline-flex;
109
- align-items: center;
110
- justify-content: center;
111
- width: 20px;
112
- height: 20px;
113
- padding: 0;
114
- background: var(--bs-attachment-remove-bg);
115
- border: none;
116
- border-radius: var(--bs-border-radius-50);
117
- color: var(--bs-icon-default);
118
- cursor: pointer;
105
+ /* Verified against Figma node 2513:32843 (EG Genie UI Kit v1.0): the remove button's own 32x32
106
+ hit-target box sits flush at the thumbnail's top-right corner (top:0, right:0), with the
107
+ *visible* 16px button centered inside it (8px inset on every side) -- so the visible button's
108
+ real offset from the thumbnail's corner is 8px, not 4px. */
109
+ top: var(--bs-spacing-100);
110
+ right: var(--bs-spacing-100);
119
111
  opacity: 0;
120
112
  pointer-events: none;
121
- transition: background-color var(--bs-duration-fast) var(--bs-easing-standard), opacity var(--bs-duration-fast) var(--bs-easing-standard);
122
- }
123
-
124
- .bs-attachment__remove:hover {
125
- background: var(--bs-attachment-remove-hover);
126
- }
127
-
128
- .bs-attachment__remove:active {
129
- background: var(--bs-attachment-remove-pressed);
113
+ transition: opacity var(--bs-duration-fast) var(--bs-easing-standard);
130
114
  }
131
115
 
132
116
  .bs-attachment:hover .bs-attachment__remove,
@@ -135,11 +119,6 @@
135
119
  pointer-events: auto;
136
120
  }
137
121
 
138
- .bs-attachment__remove:focus-visible {
139
- outline: 2px solid var(--bs-attachment-remove-focus);
140
- outline-offset: 1px;
141
- }
142
-
143
122
  /* --- Spinner --- */
144
123
 
145
124
  .bs-attachment__spinner {
@@ -2,7 +2,9 @@ import { h } from "@stencil/core";
2
2
  /**
3
3
  * A single file attachment preview for `bs-composer` -- an image thumbnail, or a filename card
4
4
  * with a colored file-type badge (PDF/Document), with an optional upload-in-progress spinner and
5
- * a hover/focus-revealed remove button.
5
+ * a hover/focus-revealed remove button (a `bs-icon-button` with `size="xs"` `variant="neutral"` --
6
+ * the same 16x16px compact tier `bs-icon-button` documents as meant for exactly this kind of
7
+ * chip/tag "remove" control).
6
8
  *
7
9
  * ## When to use
8
10
  * - Rendered by the consuming app for each file a user has attached to a Genie AI chat message,
@@ -27,14 +29,6 @@ import { h } from "@stencil/core";
27
29
  * @prop --bs-attachment-badge-bg-pdf - PDF badge background. Aliased to `--bs-badge-bg-error`.
28
30
  * @prop --bs-attachment-badge-bg-document - Document badge background. Aliased to
29
31
  * `--bs-badge-bg-info`.
30
- * @prop --bs-attachment-remove-bg - Remove button (neutral icon button) default background.
31
- * Aliased to `--bs-button-neutral-container`.
32
- * @prop --bs-attachment-remove-hover - Remove button hover background. Aliased to
33
- * `--bs-button-neutral-hover`.
34
- * @prop --bs-attachment-remove-pressed - Remove button active/pressed background. Aliased to
35
- * `--bs-button-neutral-pressed`.
36
- * @prop --bs-attachment-remove-focus - Remove button focus outline color. Aliased to
37
- * `--bs-border-neutral-focus`.
38
32
  */
39
33
  export class BsAttachment {
40
34
  /** Which kind of attachment preview to render. */
@@ -56,7 +50,7 @@ export class BsAttachment {
56
50
  };
57
51
  render() {
58
52
  const isImage = this.type === 'image';
59
- return (h("div", { key: '7cebfc51b0453ac6c1fa57d38856b4b54f15def9', class: { 'bs-attachment': true, 'bs-attachment--loading': this.loading }, "aria-busy": this.loading ? 'true' : 'false' }, isImage ? this.renderImage() : this.renderCard(), this.removable && (h("button", { key: '935eb0f9507a9c9d24a1a6121c2fcd0575ac9d16', type: "button", part: "remove", class: "bs-attachment__remove", "aria-label": "Remove attachment", onClick: this.onRemoveClick }, h(CloseIcon, { key: '00e45c411ec831a66dd29d039568f57fc97b3930' })))));
53
+ return (h("div", { key: '54b6d63b3e3fa98e5ec10444253b145080facc97', class: { 'bs-attachment': true, 'bs-attachment--loading': this.loading }, "aria-busy": this.loading ? 'true' : 'false' }, isImage ? this.renderImage() : this.renderCard(), this.removable && (h("bs-icon-button", { key: 'bc0c6cd660a361886447f38b56578a2271384e99', part: "remove", class: "bs-attachment__remove", size: "xs", variant: "neutral", ariaLabel: `Remove attachment: ${this.fileName}`, onClick: this.onRemoveClick }, h(CloseIcon, { key: 'fc932382233dfe20c46666705f1c79540bc08d35' })))));
60
54
  }
61
55
  renderImage() {
62
56
  return (h("div", { part: "thumbnail", class: "bs-attachment__thumbnail" }, h("img", { class: "bs-attachment__image", src: this.imageSrc, alt: this.imageAlt }), this.loading && h(Spinner, { class: "bs-attachment__spinner bs-attachment__spinner--overlay", size: 16 })));
@@ -58,7 +58,7 @@ export class BsAttachmentList {
58
58
  this.canScrollRight = row.scrollWidth - row.clientWidth - row.scrollLeft > 1;
59
59
  };
60
60
  render() {
61
- return (h("div", { key: 'ccf4970df6d8dc81ccd4d717d8ec1c295a7910e7', class: "bs-attachment-list" }, h("div", { key: 'd05b1553540c47825b023cf99ba7acdc11e87b4c', part: "row", class: "bs-attachment-list__row", ref: el => (this.row = el), onScroll: this.onScroll, role: "group", "aria-label": this.ariaLabel, tabIndex: 0 }, h("slot", { key: 'e140bbe3047910cf9a237724d342c720e40889d6', onSlotchange: this.onSlotchange })), this.canScrollRight && h("div", { key: '42a3588c41a3dc63a41e6dea9ba95f267c72d61e', part: "fade", class: "bs-attachment-list__fade", "aria-hidden": "true" })));
61
+ return (h("div", { key: '41159aec889d4dfa26d368b1d24f8678856da661', class: "bs-attachment-list" }, h("div", { key: '0e3c29de5f945209e9b91b406bd287524f41d801', part: "row", class: "bs-attachment-list__row", ref: el => (this.row = el), onScroll: this.onScroll, role: "group", "aria-label": this.ariaLabel, tabIndex: 0 }, h("slot", { key: '657b063a8a38e176bf8bae6234f9db02b18ab7c4', onSlotchange: this.onSlotchange })), this.canScrollRight && h("div", { key: '1331fa30ed368f253e95812343356fc22a0280c7', part: "fade", class: "bs-attachment-list__fade", "aria-hidden": "true" })));
62
62
  }
63
63
  static get is() { return "bs-attachment-list"; }
64
64
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,54 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ describe('bs-avatar', () => {
3
+ it('defaults to type="icon" size="md"', async () => {
4
+ const { root } = await render(h("bs-avatar", null));
5
+ const container = root.shadowRoot.querySelector('[part="container"]');
6
+ expect(container).toHaveClass('bs-avatar--icon');
7
+ expect(container).toHaveClass('bs-avatar--md');
8
+ expect(container).toEqualAttribute('role', 'img');
9
+ });
10
+ it('renders the fallback user icon for type="icon"', async () => {
11
+ const { root } = await render(h("bs-avatar", { type: "icon" }));
12
+ expect(root.shadowRoot.querySelector('[part="icon"]')).not.toBeNull();
13
+ expect(root.shadowRoot.querySelector('[part="initials"]')).toBeNull();
14
+ expect(root.shadowRoot.querySelector('[part="image"]')).toBeNull();
15
+ });
16
+ it('renders the initials text for type="initials"', async () => {
17
+ const { root } = await render(h("bs-avatar", { type: "initials", initials: "SL" }));
18
+ const initials = root.shadowRoot.querySelector('[part="initials"]');
19
+ expect(initials).not.toBeNull();
20
+ expect(initials.textContent).toBe('SL');
21
+ expect(root.shadowRoot.querySelector('[part="icon"]')).toBeNull();
22
+ });
23
+ it('renders a real <img> with src/alt for type="image", with no outer role/aria-label', async () => {
24
+ const { root } = await render(h("bs-avatar", { type: "image", src: "https://example.com/photo.jpg", alt: "Sam Lee" }));
25
+ const img = root.shadowRoot.querySelector('[part="image"]');
26
+ expect(img).not.toBeNull();
27
+ expect(img.tagName).toBe('IMG');
28
+ expect(img).toEqualAttribute('src', 'https://example.com/photo.jpg');
29
+ expect(img).toEqualAttribute('alt', 'Sam Lee');
30
+ const container = root.shadowRoot.querySelector('[part="container"]');
31
+ expect(container.hasAttribute('role')).toBe(false);
32
+ expect(container.hasAttribute('aria-label')).toBe(false);
33
+ });
34
+ it('falls back to alt="" (not a missing attribute) when alt is not provided for type="image"', async () => {
35
+ const { root } = await render(h("bs-avatar", { type: "image", src: "https://example.com/photo.jpg" }));
36
+ const img = root.shadowRoot.querySelector('[part="image"]');
37
+ expect(img).toEqualAttribute('alt', '');
38
+ });
39
+ it('sets aria-label from ariaLabel for type="icon"/"initials"', async () => {
40
+ const { root } = await render(h("bs-avatar", { type: "initials", initials: "SL", ariaLabel: "Sam Lee" }));
41
+ expect(root.shadowRoot.querySelector('[part="container"]')).toEqualAttribute('aria-label', 'Sam Lee');
42
+ });
43
+ it('applies the correct size class for every size value', async () => {
44
+ const sizes = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
45
+ for (const size of sizes) {
46
+ const { root } = await render(h("bs-avatar", { size: size }));
47
+ expect(root.shadowRoot.querySelector('[part="container"]')).toHaveClass(`bs-avatar--${size}`);
48
+ }
49
+ });
50
+ it('reflects disabled as a host attribute', async () => {
51
+ const { root } = await render(h("bs-avatar", { disabled: true }));
52
+ expect(root.hasAttribute('disabled')).toBe(true);
53
+ });
54
+ });
@@ -0,0 +1,197 @@
1
+ /**
2
+ * @prop --bs-avatar-size-xs: Width/height at size="xs". 24px, matching Figma's own six-step scale.
3
+ * @prop --bs-avatar-size-sm: Width/height at size="sm". 32px.
4
+ * @prop --bs-avatar-size-md: Width/height at size="md". 44px.
5
+ * @prop --bs-avatar-size-lg: Width/height at size="lg". 64px.
6
+ * @prop --bs-avatar-size-xl: Width/height at size="xl". 96px.
7
+ * @prop --bs-avatar-size-xxl: Width/height at size="xxl". 128px.
8
+ * @prop --bs-avatar-radius: Corner radius -- always a full circle regardless of size. Aliased to
9
+ * --bs-border-radius-full.
10
+ * @prop --bs-avatar-border-width: Border width at every size except xxl. Aliased to
11
+ * --bs-border-width-thin (1px).
12
+ * @prop --bs-avatar-border-width-xxl: Border width at size="xxl" specifically -- Figma specs this
13
+ * one size a hair thicker (1.333px) than the other five, not a rounding artifact.
14
+ * @prop --bs-avatar-bg-dafault: Background, resting. Aliased to --bs-surface-raised. Named
15
+ * "dafault" (not a typo introduced here) -- this is this library's own vendored
16
+ * brandsync-tokens token verbatim; see CLAUDE.md's note on pre-existing malformed vendored
17
+ * token names.
18
+ * @prop --bs-avatar-bg-hover: Background on hover. Aliased to --bs-surface-raised -- identical to
19
+ * the resting value; only the border recolors on hover (see below).
20
+ * @prop --bs-avatar-bg-pressed: Background while pressed. Aliased to --bs-surface-raised, same
21
+ * reasoning as hover.
22
+ * @prop --bs-avatar-bg-focused: Background while focused. Aliased to --bs-surface-raised, same
23
+ * reasoning as hover.
24
+ * @prop --bs-avatar-border-primary: Border color, resting. Aliased to
25
+ * --bs-border-neutral-container.
26
+ * @prop --bs-avatar-border-hover: Border color on hover. Aliased to
27
+ * --bs-border-neutral-container-hover.
28
+ * @prop --bs-avatar-border-pressed: Border color while pressed. Aliased to
29
+ * --bs-border-neutral-container-pressed.
30
+ * @prop --bs-avatar-border-focused: Border color while focused -- Figma keeps this identical to
31
+ * the resting --bs-avatar-border-primary; the focus ring (--bs-avatar-border-focus below) is a
32
+ * separate, additional ring, not a border recolor.
33
+ * @prop --bs-avatar-border-focus: Focus ring color -- a separate ring drawn just outside the
34
+ * avatar's own border, not the border's own color (see --bs-avatar-border-focused above).
35
+ * Aliased to --bs-border-neutral-focus.
36
+ * @prop --bs-avatar-icon-primary: Fallback user-icon color (type="icon"). Aliased to
37
+ * --bs-icon-muted.
38
+ * @prop --bs-avatar-text-default: Initials text color (type="initials"). Aliased to
39
+ * --bs-text-default.
40
+ *
41
+ * All of the --bs-avatar-* custom properties above are this library's existing vendored
42
+ * brandsync-tokens tokens (see tokens.css), not new ones invented for this component --
43
+ * brandsync-tokens already ships a full avatar-specific token set, referenced here directly
44
+ * rather than re-aliased through component-local names the way most other components in this
45
+ * library do, since there's nothing left to add a layer of indirection over.
46
+ */
47
+ :host {
48
+ display: inline-flex;
49
+ vertical-align: middle;
50
+
51
+ --bs-avatar-size-xs: 24px;
52
+ --bs-avatar-size-sm: 32px;
53
+ --bs-avatar-size-md: 44px;
54
+ --bs-avatar-size-lg: 64px;
55
+ --bs-avatar-size-xl: 96px;
56
+ --bs-avatar-size-xxl: 128px;
57
+
58
+ --bs-avatar-radius: var(--bs-border-radius-full);
59
+ --bs-avatar-border-width: var(--bs-border-width-thin);
60
+ --bs-avatar-border-width-xxl: 1.333px;
61
+ }
62
+
63
+ .bs-avatar {
64
+ box-sizing: border-box;
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ overflow: hidden;
69
+ border-radius: var(--bs-avatar-radius);
70
+ border: var(--bs-avatar-border-width) solid var(--bs-avatar-border-primary);
71
+ background: var(--bs-avatar-bg-dafault);
72
+ flex-shrink: 0;
73
+ /* Prevents the initials text (or a stray click-drag anywhere in the circle) from highlighting
74
+ like ordinary selectable text -- this component is meant to read as a single glyph/photo, not
75
+ text content, especially once a consuming app makes it interactive (see the class doc in
76
+ bs-avatar.tsx). Same convention already used for bs-data-table's own clickable sort header. */
77
+ user-select: none;
78
+ -webkit-user-select: none;
79
+ }
80
+
81
+ .bs-avatar--xs {
82
+ width: var(--bs-avatar-size-xs);
83
+ height: var(--bs-avatar-size-xs);
84
+ }
85
+
86
+ .bs-avatar--sm {
87
+ width: var(--bs-avatar-size-sm);
88
+ height: var(--bs-avatar-size-sm);
89
+ }
90
+
91
+ .bs-avatar--md {
92
+ width: var(--bs-avatar-size-md);
93
+ height: var(--bs-avatar-size-md);
94
+ }
95
+
96
+ .bs-avatar--lg {
97
+ width: var(--bs-avatar-size-lg);
98
+ height: var(--bs-avatar-size-lg);
99
+ }
100
+
101
+ .bs-avatar--xl {
102
+ width: var(--bs-avatar-size-xl);
103
+ height: var(--bs-avatar-size-xl);
104
+ }
105
+
106
+ .bs-avatar--xxl {
107
+ width: var(--bs-avatar-size-xxl);
108
+ height: var(--bs-avatar-size-xxl);
109
+ border-width: var(--bs-avatar-border-width-xxl);
110
+ }
111
+
112
+ /* type="image" */
113
+ .bs-avatar__image {
114
+ display: block;
115
+ width: 100%;
116
+ height: 100%;
117
+ object-fit: cover;
118
+ }
119
+
120
+ /* type="icon" -- proportional to the container regardless of size, so one shared viewBox scales
121
+ cleanly across all six sizes without needing a per-size icon custom property. */
122
+ .bs-avatar__icon {
123
+ width: 60%;
124
+ height: 60%;
125
+ color: var(--bs-avatar-icon-primary);
126
+ }
127
+
128
+ /* type="initials" -- font styling genuinely varies per size, not a simple linear scale (xs/sm
129
+ share one tier, lg sits between md and xl/xxl using a different font family/weight despite
130
+ matching md's font SIZE) -- matching Figma's own per-size type styles exactly rather than
131
+ interpolating a "cleaner" scale of our own. */
132
+ .bs-avatar__initials {
133
+ color: var(--bs-avatar-text-default);
134
+ font-family: var(--bs-typography-font-family-body);
135
+ font-weight: var(--bs-font-weight-medium);
136
+ text-align: center;
137
+ white-space: nowrap;
138
+ }
139
+
140
+ .bs-avatar--xs .bs-avatar__initials,
141
+ .bs-avatar--sm .bs-avatar__initials {
142
+ font-size: var(--bs-fontsize-caption-sm);
143
+ line-height: calc(var(--bs-line-height-caption-sm) * 1px);
144
+ }
145
+
146
+ .bs-avatar--md .bs-avatar__initials {
147
+ font-family: var(--bs-typography-font-family-heading);
148
+ font-weight: var(--bs-font-weight-bold);
149
+ font-size: var(--bs-fontsize-heading-h6);
150
+ line-height: calc(var(--bs-line-height-heading-h6) * 1px);
151
+ }
152
+
153
+ .bs-avatar--lg .bs-avatar__initials {
154
+ font-size: var(--bs-fontsize-body-md);
155
+ line-height: calc(var(--bs-line-height-body-md) * 1px);
156
+ }
157
+
158
+ .bs-avatar--xl .bs-avatar__initials,
159
+ .bs-avatar--xxl .bs-avatar__initials {
160
+ font-family: var(--bs-typography-font-family-heading);
161
+ font-weight: var(--bs-font-weight-bold);
162
+ font-size: var(--bs-fontsize-heading-h4);
163
+ line-height: calc(var(--bs-line-height-heading-h4) * 1px);
164
+ }
165
+
166
+ /* Interaction states -- real :hover/:focus-visible/:active on the HOST itself (not a wrapping
167
+ button this component doesn't render), so a consuming app gets this treatment for free just by
168
+ making the <bs-avatar> element itself interactive (a click handler + tabindex, or wrapping it in
169
+ their own <button>) -- see the class doc in bs-avatar.tsx for why. Guarded by :not([disabled])
170
+ so a disabled avatar never shows a hover/focus/pressed treatment even if a consumer's own
171
+ wrapping control still lets these pseudo-classes match. */
172
+ :host(:hover:not([disabled])) .bs-avatar {
173
+ background: var(--bs-avatar-bg-hover);
174
+ border-color: var(--bs-avatar-border-hover);
175
+ }
176
+
177
+ :host(:active:not([disabled])) .bs-avatar {
178
+ background: var(--bs-avatar-bg-pressed);
179
+ border-color: var(--bs-avatar-border-pressed);
180
+ }
181
+
182
+ /* Focus keeps the resting border color (--bs-avatar-border-focused is identical to
183
+ --bs-avatar-border-primary in Figma) and adds a separate ring just outside it instead of
184
+ recoloring the border itself -- unlike hover/pressed above. */
185
+ :host(:focus-visible:not([disabled])) {
186
+ outline: none;
187
+ }
188
+
189
+ :host(:focus-visible:not([disabled])) .bs-avatar {
190
+ background: var(--bs-avatar-bg-focused);
191
+ border-color: var(--bs-avatar-border-focused);
192
+ box-shadow: 0 0 0 3px var(--bs-avatar-border-focus);
193
+ }
194
+
195
+ :host([disabled]) {
196
+ opacity: 0.5;
197
+ }