@brandsync/wc 0.0.11 → 0.0.12

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 (297) hide show
  1. package/custom-elements.json +3388 -598
  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-6254dcbe.entry.js → p-09aa03d1.entry.js} +1 -1
  5. package/dist/brandsync-wc/p-0eee5477.entry.js +1 -0
  6. package/dist/brandsync-wc/p-0fa017ce.entry.js +1 -0
  7. package/dist/brandsync-wc/p-12ec9e92.entry.js +1 -0
  8. package/dist/brandsync-wc/{p-4ca15322.entry.js → p-1900f6ce.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-1bf0b2d5.entry.js → p-1adc59be.entry.js} +1 -1
  10. package/dist/brandsync-wc/p-1c6fa697.entry.js +1 -0
  11. package/dist/brandsync-wc/{p-8d78171b.entry.js → p-1cf715aa.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-84ae4420.entry.js → p-20dbc6a1.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-74a4dd91.entry.js → p-23457a21.entry.js} +1 -1
  14. package/dist/brandsync-wc/p-266f5dde.entry.js +1 -0
  15. package/dist/brandsync-wc/{p-073e5fee.entry.js → p-2a65aabb.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-030a8ba7.entry.js → p-2c51d738.entry.js} +1 -1
  17. package/dist/brandsync-wc/p-3b31f7c7.entry.js +1 -0
  18. package/dist/brandsync-wc/p-46ddc8e1.entry.js +1 -0
  19. package/dist/brandsync-wc/p-56c66448.entry.js +1 -0
  20. package/dist/brandsync-wc/{p-dd224cb3.entry.js → p-57fdbb76.entry.js} +1 -1
  21. package/dist/brandsync-wc/{p-8dff4f24.entry.js → p-64e2a7d7.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-b174403d.entry.js → p-6e854e92.entry.js} +1 -1
  23. package/dist/brandsync-wc/p-72a33f88.entry.js +1 -0
  24. package/dist/brandsync-wc/p-8049f9f2.entry.js +1 -0
  25. package/dist/brandsync-wc/{p-c6d330c3.entry.js → p-88a0abee.entry.js} +1 -1
  26. package/dist/brandsync-wc/p-8b662ee3.entry.js +1 -0
  27. package/dist/brandsync-wc/{p-41edb0a2.entry.js → p-8ded1eb6.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-DP_bvuvB.js → p-DST5-cTx.js} +2 -2
  29. package/dist/brandsync-wc/p-a5b15061.entry.js +1 -0
  30. package/dist/brandsync-wc/{p-7a605d98.entry.js → p-aba300a9.entry.js} +1 -1
  31. package/dist/brandsync-wc/p-b24a980b.entry.js +1 -0
  32. package/dist/brandsync-wc/p-b289450a.entry.js +1 -0
  33. package/dist/brandsync-wc/{p-7131d0a1.entry.js → p-b8a2f882.entry.js} +1 -1
  34. package/dist/brandsync-wc/p-c320b6b4.entry.js +1 -0
  35. package/dist/brandsync-wc/{p-d1dc2ced.entry.js → p-d4e3ca77.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-0b858120.entry.js → p-dd09d335.entry.js} +1 -1
  37. package/dist/brandsync-wc/p-ef8522b5.entry.js +1 -0
  38. package/dist/brandsync-wc/p-f04db1b0.entry.js +1 -0
  39. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  40. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +3 -2
  41. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  42. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  43. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  44. package/dist/cjs/bs-attachment.cjs.entry.js +3 -3
  45. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  46. package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
  47. package/dist/cjs/bs-button.cjs.entry.js +3 -3
  48. package/dist/cjs/bs-card.cjs.entry.js +1 -1
  49. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
  50. package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
  51. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
  52. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
  53. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +2 -2
  54. package/dist/cjs/bs-checkbox.cjs.entry.js +14 -3
  55. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +14 -2
  56. package/dist/cjs/bs-composer.cjs.entry.js +37 -4
  57. package/dist/cjs/bs-data-table.cjs.entry.js +3 -3
  58. package/dist/cjs/bs-icon-button.cjs.entry.js +40 -0
  59. package/dist/cjs/bs-inline-tab.cjs.entry.js +69 -0
  60. package/dist/cjs/bs-input.cjs.entry.js +3 -3
  61. package/dist/cjs/bs-logo.cjs.entry.js +165 -0
  62. package/dist/cjs/bs-menu_2.cjs.entry.js +3 -3
  63. package/dist/cjs/bs-modal.cjs.entry.js +1 -1
  64. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +104 -0
  65. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +81 -0
  66. package/dist/cjs/bs-navigation-header.cjs.entry.js +44 -0
  67. package/dist/cjs/bs-radio.cjs.entry.js +49 -0
  68. package/dist/cjs/bs-slider.cjs.entry.js +191 -0
  69. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  70. package/dist/cjs/bs-switch.cjs.entry.js +57 -0
  71. package/dist/cjs/bs-tab.cjs.entry.js +80 -0
  72. package/dist/cjs/bs-tabs.cjs.entry.js +39 -0
  73. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  74. package/dist/cjs/{index-CGrdFg95.js → index-B3sdhEGk.js} +1 -1
  75. package/dist/cjs/loader.cjs.js +2 -2
  76. package/dist/collection/collection-manifest.json +13 -2
  77. package/dist/collection/components/bs-ai-chatbot/bs-ai-chatbot.stories.js +26 -11
  78. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +2 -1
  79. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  80. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  81. package/dist/collection/components/bs-attachment/bs-attachment.css +12 -33
  82. package/dist/collection/components/bs-attachment/bs-attachment.js +4 -10
  83. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  84. package/dist/collection/components/bs-button/{bs-button.cmp.test.js → bs-button/bs-button.cmp.test.js} +26 -0
  85. package/dist/collection/components/bs-button/{bs-button.css → bs-button/bs-button.css} +57 -6
  86. package/dist/collection/components/bs-button/{bs-button.js → bs-button/bs-button.js} +10 -5
  87. package/dist/collection/components/bs-button/{bs-button.stories.js → bs-button/bs-button.stories.js} +2 -27
  88. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.js +83 -0
  89. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.css +346 -0
  90. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +185 -0
  91. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.stories.js +74 -0
  92. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +3 -3
  93. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  94. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  95. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  96. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  97. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  98. package/dist/collection/components/bs-checkbox/bs-checkbox.cmp.test.js +10 -0
  99. package/dist/collection/components/bs-checkbox/bs-checkbox.css +7 -1
  100. package/dist/collection/components/bs-checkbox/bs-checkbox.js +32 -1
  101. package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +48 -7
  102. package/dist/collection/components/bs-composer/bs-composer.css +15 -0
  103. package/dist/collection/components/bs-composer/bs-composer.js +38 -4
  104. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.cmp.test.js +47 -1
  105. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +20 -1
  106. package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
  107. package/dist/collection/components/bs-input/bs-input.js +2 -2
  108. package/dist/collection/components/bs-logo/brandsync-logo-full-dark.js +44 -0
  109. package/dist/collection/components/bs-logo/brandsync-logo-full-light.js +40 -0
  110. package/dist/collection/components/bs-logo/brandsync-logo-mark.js +17 -0
  111. package/dist/collection/components/bs-logo/bs-logo.cmp.test.js +113 -0
  112. package/dist/collection/components/bs-logo/bs-logo.css +79 -0
  113. package/dist/collection/components/bs-logo/bs-logo.js +193 -0
  114. package/dist/collection/components/bs-logo/bs-logo.stories.js +69 -0
  115. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  116. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  117. package/dist/collection/components/bs-radio/bs-radio.cmp.test.js +76 -0
  118. package/dist/collection/components/bs-radio/bs-radio.css +164 -0
  119. package/dist/collection/components/bs-radio/bs-radio.js +170 -0
  120. package/dist/collection/components/bs-radio/bs-radio.stories.js +56 -0
  121. package/dist/collection/components/bs-slider/bs-slider.cmp.test.js +139 -0
  122. package/dist/collection/components/bs-slider/bs-slider.css +409 -0
  123. package/dist/collection/components/bs-slider/bs-slider.js +499 -0
  124. package/dist/collection/components/bs-slider/bs-slider.stories.js +70 -0
  125. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  126. package/dist/collection/components/bs-switch/bs-switch.cmp.test.js +71 -0
  127. package/dist/collection/components/bs-switch/bs-switch.css +196 -0
  128. package/dist/collection/components/bs-switch/bs-switch.js +185 -0
  129. package/dist/collection/components/bs-switch/bs-switch.stories.js +60 -0
  130. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.cmp.test.js +104 -0
  131. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.css +163 -0
  132. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +192 -0
  133. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.js +95 -0
  134. package/dist/collection/components/bs-tab/bs-tab/bs-tab.cmp.test.js +120 -0
  135. package/dist/collection/components/bs-tab/bs-tab/bs-tab.css +216 -0
  136. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +232 -0
  137. package/dist/collection/components/bs-tab/bs-tab/bs-tab.stories.js +138 -0
  138. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.cmp.test.js +61 -0
  139. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.css +39 -0
  140. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +133 -0
  141. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.stories.js +39 -0
  142. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  143. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +131 -0
  144. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.css +257 -0
  145. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +253 -0
  146. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.js +202 -0
  147. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.js +172 -0
  148. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.css +325 -0
  149. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +314 -0
  150. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.stories.js +78 -0
  151. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.js +77 -0
  152. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.css +106 -0
  153. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +188 -0
  154. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.js +189 -0
  155. package/dist/components/bs-ai-disclaimer.js +1 -1
  156. package/dist/components/bs-ai-greeting.js +1 -1
  157. package/dist/components/bs-ai-thinking.js +1 -1
  158. package/dist/components/bs-attachment-list.js +1 -1
  159. package/dist/components/bs-attachment.js +1 -1
  160. package/dist/components/bs-badge.js +1 -1
  161. package/dist/components/bs-button-skeleton.js +1 -1
  162. package/dist/components/bs-button.js +1 -1
  163. package/dist/components/bs-card.js +1 -1
  164. package/dist/components/bs-chatbot-feedback.js +1 -1
  165. package/dist/components/bs-chatbot-header.js +1 -1
  166. package/dist/components/bs-chatbot-response-action.js +1 -1
  167. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  168. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  169. package/dist/components/bs-checkbox.js +1 -1
  170. package/dist/components/bs-composer-status-banner.js +1 -1
  171. package/dist/components/bs-composer.js +1 -1
  172. package/dist/components/bs-data-table.js +1 -1
  173. package/dist/components/bs-icon-button.d.ts +11 -0
  174. package/dist/components/bs-icon-button.js +1 -0
  175. package/dist/components/bs-inline-tab.d.ts +11 -0
  176. package/dist/components/bs-inline-tab.js +1 -0
  177. package/dist/components/bs-input.js +1 -1
  178. package/dist/components/bs-logo.d.ts +11 -0
  179. package/dist/components/bs-logo.js +1 -0
  180. package/dist/components/bs-menu-item.js +1 -1
  181. package/dist/components/bs-menu.js +1 -1
  182. package/dist/components/bs-modal.js +1 -1
  183. package/dist/components/bs-navigation-drawer-item.d.ts +11 -0
  184. package/dist/components/bs-navigation-drawer-item.js +1 -0
  185. package/dist/components/bs-navigation-drawer.d.ts +11 -0
  186. package/dist/components/bs-navigation-drawer.js +1 -0
  187. package/dist/components/bs-navigation-header.d.ts +11 -0
  188. package/dist/components/bs-navigation-header.js +1 -0
  189. package/dist/components/bs-radio.d.ts +11 -0
  190. package/dist/components/bs-radio.js +1 -0
  191. package/dist/components/bs-slider.d.ts +11 -0
  192. package/dist/components/bs-slider.js +1 -0
  193. package/dist/components/bs-source-link.js +1 -1
  194. package/dist/components/bs-switch.d.ts +11 -0
  195. package/dist/components/bs-switch.js +1 -0
  196. package/dist/components/bs-tab.d.ts +11 -0
  197. package/dist/components/bs-tab.js +1 -0
  198. package/dist/components/bs-tabs.d.ts +11 -0
  199. package/dist/components/bs-tabs.js +1 -0
  200. package/dist/components/bs-tooltip.js +1 -1
  201. package/dist/components/index.js +1 -1
  202. package/dist/components/p-BAOJc0V0.js +1 -0
  203. package/dist/components/{p-D1cYtKyN.js → p-Be1Pfcnm.js} +1 -1
  204. package/dist/components/{p-B9PrXIl_.js → p-BqYyMGrB.js} +1 -1
  205. package/dist/components/p-CaWqTQBZ.js +1 -0
  206. package/dist/components/{p-BUbGEXL7.js → p-DivZLd6i.js} +1 -1
  207. package/dist/components/{p-D2HDHZjz.js → p-xfx69LQx.js} +1 -1
  208. package/dist/esm/brandsync-wc.js +3 -3
  209. package/dist/esm/bs-ai-disclaimer.entry.js +3 -2
  210. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  211. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  212. package/dist/esm/bs-attachment-list.entry.js +2 -2
  213. package/dist/esm/bs-attachment.entry.js +3 -3
  214. package/dist/esm/bs-badge.entry.js +1 -1
  215. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  216. package/dist/esm/bs-button.entry.js +3 -3
  217. package/dist/esm/bs-card.entry.js +1 -1
  218. package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
  219. package/dist/esm/bs-chatbot-header.entry.js +2 -2
  220. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  221. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  222. package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
  223. package/dist/esm/bs-checkbox.entry.js +14 -3
  224. package/dist/esm/bs-composer-status-banner.entry.js +14 -2
  225. package/dist/esm/bs-composer.entry.js +37 -4
  226. package/dist/esm/bs-data-table.entry.js +3 -3
  227. package/dist/esm/bs-icon-button.entry.js +38 -0
  228. package/dist/esm/bs-inline-tab.entry.js +67 -0
  229. package/dist/esm/bs-input.entry.js +3 -3
  230. package/dist/esm/bs-logo.entry.js +163 -0
  231. package/dist/esm/bs-menu_2.entry.js +3 -3
  232. package/dist/esm/bs-modal.entry.js +1 -1
  233. package/dist/esm/bs-navigation-drawer-item.entry.js +102 -0
  234. package/dist/esm/bs-navigation-drawer.entry.js +79 -0
  235. package/dist/esm/bs-navigation-header.entry.js +42 -0
  236. package/dist/esm/bs-radio.entry.js +47 -0
  237. package/dist/esm/bs-slider.entry.js +189 -0
  238. package/dist/esm/bs-source-link.entry.js +3 -3
  239. package/dist/esm/bs-switch.entry.js +55 -0
  240. package/dist/esm/bs-tab.entry.js +78 -0
  241. package/dist/esm/bs-tabs.entry.js +37 -0
  242. package/dist/esm/bs-tooltip.entry.js +2 -2
  243. package/dist/esm/{index-DP_bvuvB.js → index-DST5-cTx.js} +1 -1
  244. package/dist/esm/loader.js +3 -3
  245. package/dist/types/components/bs-attachment/bs-attachment.d.ts +3 -9
  246. package/dist/types/components/bs-button/{bs-button.d.ts → bs-button/bs-button.d.ts} +5 -0
  247. package/dist/types/components/bs-button/{bs-button.stories.d.ts → bs-button/bs-button.stories.d.ts} +0 -2
  248. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.d.ts +1 -0
  249. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.d.ts +51 -0
  250. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.stories.d.ts +16 -0
  251. package/dist/types/components/bs-button-skeleton/bs-button-skeleton.d.ts +1 -1
  252. package/dist/types/components/bs-button-skeleton/bs-button-skeleton.stories.d.ts +1 -1
  253. package/dist/types/components/bs-checkbox/bs-checkbox.d.ts +11 -0
  254. package/dist/types/components/bs-composer/bs-composer.d.ts +26 -2
  255. package/dist/types/components/bs-composer-status-banner/bs-composer-status-banner.d.ts +14 -0
  256. package/dist/types/components/bs-logo/brandsync-logo-full-dark.d.ts +1 -0
  257. package/dist/types/components/bs-logo/brandsync-logo-full-light.d.ts +1 -0
  258. package/dist/types/components/bs-logo/brandsync-logo-mark.d.ts +1 -0
  259. package/dist/types/components/bs-logo/bs-logo.cmp.test.d.ts +1 -0
  260. package/dist/types/components/bs-logo/bs-logo.d.ts +73 -0
  261. package/dist/types/components/bs-logo/bs-logo.stories.d.ts +17 -0
  262. package/dist/types/components/bs-radio/bs-radio.cmp.test.d.ts +1 -0
  263. package/dist/types/components/bs-radio/bs-radio.d.ts +45 -0
  264. package/dist/types/components/bs-radio/bs-radio.stories.d.ts +16 -0
  265. package/dist/types/components/bs-slider/bs-slider.cmp.test.d.ts +1 -0
  266. package/dist/types/components/bs-slider/bs-slider.d.ts +109 -0
  267. package/dist/types/components/bs-slider/bs-slider.stories.d.ts +24 -0
  268. package/dist/types/components/bs-switch/bs-switch.cmp.test.d.ts +1 -0
  269. package/dist/types/components/bs-switch/bs-switch.d.ts +45 -0
  270. package/dist/types/components/bs-switch/bs-switch.stories.d.ts +17 -0
  271. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.cmp.test.d.ts +1 -0
  272. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.d.ts +65 -0
  273. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.d.ts +22 -0
  274. package/dist/types/components/bs-tab/bs-tab/bs-tab.cmp.test.d.ts +1 -0
  275. package/dist/types/components/bs-tab/bs-tab/bs-tab.d.ts +74 -0
  276. package/dist/types/components/bs-tab/bs-tab/bs-tab.stories.d.ts +30 -0
  277. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.cmp.test.d.ts +1 -0
  278. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.d.ts +45 -0
  279. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.stories.d.ts +13 -0
  280. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.d.ts +1 -0
  281. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.d.ts +96 -0
  282. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.d.ts +16 -0
  283. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.d.ts +1 -0
  284. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.d.ts +103 -0
  285. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.stories.d.ts +20 -0
  286. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.d.ts +1 -0
  287. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.d.ts +60 -0
  288. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.d.ts +21 -0
  289. package/dist/types/components.d.ts +1842 -53
  290. package/package.json +1 -1
  291. package/dist/brandsync-wc/p-2598ca88.entry.js +0 -1
  292. package/dist/brandsync-wc/p-3c8fbaa8.entry.js +0 -1
  293. package/dist/brandsync-wc/p-3dd9b814.entry.js +0 -1
  294. package/dist/brandsync-wc/p-8c302968.entry.js +0 -1
  295. package/dist/brandsync-wc/p-93e44903.entry.js +0 -1
  296. package/dist/brandsync-wc/p-aa45d877.entry.js +0 -1
  297. /package/dist/types/components/bs-button/{bs-button.cmp.test.d.ts → bs-button/bs-button.cmp.test.d.ts} +0 -0
@@ -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: '2b55697271a1986fca26cd48167608a734ddfcc0', class: "bs-ai-thinking", role: "status", "aria-live": "polite" }, h("img", { key: '900ecba3dc8cd2f925180a9347ecd42db79159ea', part: "icon", class: "bs-ai-thinking__icon", src: GENIE_MARK_ICON, alt: "", "aria-hidden": "true" }), h("span", { key: 'f2f4a35fcdef3111192ca4816a89b1746e3f74a0', 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: 'f63adb537ce78135dfaa7d530a55829636ae318b', class: "bs-attachment-list" }, h("div", { key: '2cdd3a578f03db580b0a06088e6b27ed7ac8b06f', 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: '8095ab8ad53cee9f357360dd1dd1c4cad4a4d513', onSlotchange: this.onSlotchange })), this.canScrollRight && h("div", { key: 'd09bb07a31bc780709f69838556434dc22b0544c', 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"; }
@@ -78,4 +78,30 @@ describe('bs-button', () => {
78
78
  const button = root.shadowRoot.querySelector('button');
79
79
  expect(button).toHaveClass('bs-button--icon-only');
80
80
  });
81
+ describe('asymmetric padding for icon + label layouts', () => {
82
+ it('applies bs-button--has-icon (not bs-button--has-end-icon) with a leading icon and a label', async () => {
83
+ const { root } = await render(h("bs-button", null, h("svg", { slot: "icon", viewBox: "0 0 16 16" }), "Click me"));
84
+ const button = root.shadowRoot.querySelector('button');
85
+ expect(button).toHaveClass('bs-button--has-icon');
86
+ expect(button).not.toHaveClass('bs-button--has-end-icon');
87
+ });
88
+ it('applies bs-button--has-end-icon (not bs-button--has-icon) with a trailing icon and a label', async () => {
89
+ const { root } = await render(h("bs-button", null, "Next", h("svg", { slot: "end-icon", viewBox: "0 0 16 16" })));
90
+ const button = root.shadowRoot.querySelector('button');
91
+ expect(button).toHaveClass('bs-button--has-end-icon');
92
+ expect(button).not.toHaveClass('bs-button--has-icon');
93
+ });
94
+ it('applies neither class for an icon-only button (padding stays 0 via bs-button--icon-only)', async () => {
95
+ const { root } = await render(h("bs-button", { ariaLabel: "Delete" }, h("svg", { slot: "icon", viewBox: "0 0 16 16" })));
96
+ const button = root.shadowRoot.querySelector('button');
97
+ expect(button).not.toHaveClass('bs-button--has-icon');
98
+ expect(button).not.toHaveClass('bs-button--has-end-icon');
99
+ });
100
+ it('applies neither class for a plain text-only button', async () => {
101
+ const { root } = await render(h("bs-button", null, "Click me"));
102
+ const button = root.shadowRoot.querySelector('button');
103
+ expect(button).not.toHaveClass('bs-button--has-icon');
104
+ expect(button).not.toHaveClass('bs-button--has-end-icon');
105
+ });
106
+ });
81
107
  });
@@ -4,7 +4,9 @@
4
4
  --bs-button-height-md: var(--bs-spacing-600);
5
5
  --bs-button-height-lg: var(--bs-spacing-700);
6
6
  --bs-button-radius: var(--bs-border-radius-100);
7
-
7
+ --bs-button-padding-x-icon-side: var(--bs-spacing-150);
8
+ --bs-button-padding-x-label-side: var(--bs-spacing-250);
9
+
8
10
  --bs-button-error-default: var(--bs-color-error-default);
9
11
  --bs-button-error-hover: var(--bs-color-error-hover);
10
12
  --bs-button-error-focus: var(--bs-border-error-focus);
@@ -30,6 +32,20 @@
30
32
  --bs-button-subtle-hover: var(--bs-color-neutral-container);
31
33
  --bs-button-subtle-pressed: var(--bs-color-neutral-container-pressed);
32
34
  --bs-button-subtle-focus: var(--bs-border-primary-focus);
35
+ /* Verified against Figma node 2842:50178 ("Style=Neutral, States=Enabled"): the neutral variant
36
+ has its own 1px border, unlike every other filled variant here -- previously missing entirely. */
37
+ --bs-button-neutral-border: var(--bs-border-neutral-container);
38
+ --bs-button-neutral-border-hover: var(--bs-border-neutral-container-hover);
39
+ --bs-button-neutral-border-pressed: var(--bs-border-neutral-container-pressed);
40
+ /* Locally overriding the vendored --bs-button-neutral-hover/-pressed tokens (used directly
41
+ below elsewhere in this codebase) -- they alias to --bs-color-neutral-hover (a dark,
42
+ near-black scale meant for on-neutral text/icons, not a container background) and
43
+ --bs-color-primary-pressed (BLUE, not neutral at all) respectively. Verified visually: with
44
+ the vendored values, hover rendered near-black and pressed rendered blue, neither matching the
45
+ light-lavender-family redline. --bs-color-neutral-container-hover/-pressed are the correct
46
+ step family, matching --bs-button-neutral-container (--bs-color-neutral-container) itself. */
47
+ --bs-button-neutral-hover: var(--bs-color-neutral-container-hover);
48
+ --bs-button-neutral-pressed: var(--bs-color-neutral-container-pressed);
33
49
  --bs-button-outlined-border: var(--bs-border-primary);
34
50
  --bs-button-outlined-border-hover: var(--bs-border-primary-hover);
35
51
  --bs-button-outlined-focus: var(--bs-border-primary-focus);
@@ -44,7 +60,9 @@
44
60
  border: none;
45
61
  border-radius: var(--bs-button-radius);
46
62
  font-family: inherit;
47
- font-weight: var(--bs-font-weight-semibold);
63
+ /* Was semibold, then medium -- both wrong per direct comparison against the live Figma file.
64
+ Every variant's label actually uses the regular weight. */
65
+ font-weight: var(--bs-font-weight-regular);
48
66
  cursor: pointer;
49
67
  transition: background-color var(--bs-duration-fast, 120ms) var(--bs-easing-standard, ease);
50
68
  }
@@ -66,7 +84,11 @@
66
84
 
67
85
  .bs-button--md {
68
86
  height: var(--bs-button-height-md);
69
- padding: 0 var(--bs-spacing-400);
87
+ /* Verified against Figma node 2842:50344 (71px-wide frame, 39px-wide "Label" text): horizontal
88
+ padding is spacing/200 (16px) each side, not spacing-400 (32px) -- the previous value was
89
+ roughly double what the redline specifies. sm/lg padding-x weren't independently re-verified
90
+ against their own redlines in this pass. */
91
+ padding: 0 var(--bs-spacing-200);
70
92
  font-size: var(--bs-font-size-md);
71
93
  }
72
94
 
@@ -94,16 +116,20 @@
94
116
  .bs-button--neutral {
95
117
  background: var(--bs-button-neutral-container);
96
118
  color: var(--bs-text-default);
119
+ border: 1px solid var(--bs-button-neutral-border);
97
120
  }
98
121
  .bs-button--neutral:hover:not(:disabled) {
99
122
  background: var(--bs-button-neutral-hover);
123
+ border-color: var(--bs-button-neutral-border-hover);
100
124
  }
101
125
  .bs-button--neutral:active:not(:disabled) {
102
126
  background: var(--bs-button-neutral-pressed);
127
+ border-color: var(--bs-button-neutral-border-pressed);
103
128
  }
104
129
  .bs-button--neutral:disabled {
105
130
  background: var(--bs-button-neutral-disabled);
106
131
  color: var(--bs-text-on-disabled);
132
+ border-color: var(--bs-button-neutral-border);
107
133
  }
108
134
 
109
135
  .bs-button--error {
@@ -145,7 +171,11 @@
145
171
 
146
172
  .bs-button--warning {
147
173
  background: var(--bs-button-warning-default);
148
- color: var(--bs-text-default);
174
+ /* --bs-text-default (not --bs-text-on-action, unlike every other colored variant here) failed
175
+ WCAG AA contrast against this background in BOTH themes -- verified: light theme was black
176
+ text on rgb(128,93,0) at 3.49:1 (needs 4.5:1), dark theme was white text on rgb(177,129,0) at
177
+ 3.51:1. --bs-text-on-action flips appropriately per theme and passes in both (6.02:1 / 5.99:1). */
178
+ color: var(--bs-text-on-action);
149
179
  }
150
180
  .bs-button--warning:hover:not(:disabled) {
151
181
  background: var(--bs-button-warning-hover);
@@ -220,12 +250,14 @@
220
250
  outline-color: var(--bs-button-outlined-focus);
221
251
  }
222
252
 
253
+ /* Gap between icon and label: spacing/xs (4px) per Figma node 2842:50344's state-layer gap, not
254
+ spacing-100 (8px). */
223
255
  .bs-button__icon--visible {
224
- margin-right: var(--bs-spacing-100);
256
+ margin-right: var(--bs-spacing-50);
225
257
  }
226
258
 
227
259
  .bs-button__end-icon--visible {
228
- margin-left: var(--bs-spacing-100);
260
+ margin-left: var(--bs-spacing-50);
229
261
  }
230
262
 
231
263
  .bs-button__icon ::slotted(*),
@@ -245,3 +277,22 @@
245
277
  .bs-button--icon-only .bs-button__end-icon--visible {
246
278
  margin-left: 0;
247
279
  }
280
+
281
+ /* Verified against a Figma redline for the icon+label layout: the edge next to an icon is
282
+ tighter (spacing/150, 12px) than the plain text-only edge (16px), and the opposite edge -- next
283
+ to just the label, with an icon on the other side pulling the button off-balance -- compensates
284
+ with more padding (spacing/250, 20px), keeping the total horizontal padding budget the same as
285
+ the icon-less button (12+20 = 16+16 = 32px for size="md"). This is deliberately NOT
286
+ size-dependent, same as the icon/label gap above -- neither varies by size in the source spec. */
287
+ .bs-button--has-icon:not(.bs-button--has-end-icon) {
288
+ padding-left: var(--bs-button-padding-x-icon-side);
289
+ padding-right: var(--bs-button-padding-x-label-side);
290
+ }
291
+ .bs-button--has-end-icon:not(.bs-button--has-icon) {
292
+ padding-left: var(--bs-button-padding-x-label-side);
293
+ padding-right: var(--bs-button-padding-x-icon-side);
294
+ }
295
+ .bs-button--has-icon.bs-button--has-end-icon {
296
+ padding-left: var(--bs-button-padding-x-icon-side);
297
+ padding-right: var(--bs-button-padding-x-icon-side);
298
+ }
@@ -27,6 +27,11 @@ import { h } from "@stencil/core";
27
27
  * @prop --bs-button-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
28
28
  * @prop --bs-button-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
29
29
  * @prop --bs-button-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
30
+ * @prop --bs-button-neutral-border - Border color, `variant="neutral"`, default/disabled. Aliased to `--bs-border-neutral-container`.
31
+ * @prop --bs-button-neutral-border-hover - Border color, `variant="neutral"`, hover. Aliased to `--bs-border-neutral-container-hover`.
32
+ * @prop --bs-button-neutral-border-pressed - Border color, `variant="neutral"`, pressed. Aliased to `--bs-border-neutral-container-pressed`.
33
+ * @prop --bs-button-padding-x-icon-side - Horizontal padding on an edge that's adjacent to a leading/trailing icon (tighter than the plain text-only edge). Aliased to `--bs-spacing-150`.
34
+ * @prop --bs-button-padding-x-label-side - Horizontal padding on the opposite edge, when an icon on the other side needs compensating extra space to keep the button optically balanced. Aliased to `--bs-spacing-250`.
30
35
  */
31
36
  export class BsButton {
32
37
  el;
@@ -100,7 +105,7 @@ export class BsButton {
100
105
  };
101
106
  render() {
102
107
  const iconOnly = (this.hasIcon || this.hasEndIcon) && !this.hasLabel;
103
- return (h("button", { key: '8fe88c418417a4b2f8944c282aa97dbc98aaeb06', class: `bs-button bs-button--${this.variant} bs-button--${this.size} ${iconOnly ? 'bs-button--icon-only' : ''}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel }, h("span", { key: '85b3a07595c93cbe3113204315669c3b087f216d', part: "icon", class: `bs-button__icon ${this.hasIcon ? 'bs-button__icon--visible' : ''}` }, h("slot", { key: '53740a910449f215229686fa9c506cce6d399b52', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '3a3b133d9386d0d2044d44cdf0b47bd3e100c6d2', part: "label", class: "bs-button__label" }, h("slot", { key: '9c7c0e468651c0d93aafa53afb3fcab60ab7f311', onSlotchange: this.onLabelSlotchange })), h("span", { key: 'fa5b7afa82c697cfa7cf1a0f564e743832c9c039', part: "end-icon", class: `bs-button__end-icon ${this.hasEndIcon ? 'bs-button__end-icon--visible' : ''}` }, h("slot", { key: '20bf73485fbd7c30e524e380ec291ac3939c3ba1', name: "end-icon", onSlotchange: this.onEndIconSlotchange }))));
108
+ return (h("button", { key: 'b46975b3006b26aee5f52cead685d78c7cc3e4a6', class: `bs-button bs-button--${this.variant} bs-button--${this.size} ${iconOnly ? 'bs-button--icon-only' : ''} ${this.hasIcon && !iconOnly ? 'bs-button--has-icon' : ''} ${this.hasEndIcon && !iconOnly ? 'bs-button--has-end-icon' : ''}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel }, h("span", { key: 'e763e59c2775c3778208eff1e4e78322867e7e2c', part: "icon", class: `bs-button__icon ${this.hasIcon ? 'bs-button__icon--visible' : ''}` }, h("slot", { key: 'b13b8c375a66a34360de7505ae0b3ea88885b3a7', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '10c0fb5b04045e33f67b477e7deb6d213f9455de', part: "label", class: "bs-button__label" }, h("slot", { key: 'd8da8023c86f98cc82a934af4618daaa1fe476cc', onSlotchange: this.onLabelSlotchange })), h("span", { key: 'b584dddc6d4e146bdefb2f0223505c0e4aa5b7ed', part: "end-icon", class: `bs-button__end-icon ${this.hasEndIcon ? 'bs-button__end-icon--visible' : ''}` }, h("slot", { key: '960a015fd755d63fe7385b4516cebe33e29e0808', name: "end-icon", onSlotchange: this.onEndIconSlotchange }))));
104
109
  }
105
110
  static get is() { return "bs-button"; }
106
111
  static get encapsulation() { return "shadow"; }
@@ -126,8 +131,8 @@ export class BsButton {
126
131
  "references": {
127
132
  "BsButtonVariant": {
128
133
  "location": "local",
129
- "path": "/Users/vivka/brandsync-web-components/src/components/bs-button/bs-button.tsx",
130
- "id": "src/components/bs-button/bs-button.tsx::BsButtonVariant"
134
+ "path": "/Users/vivka/brandsync-web-components/src/components/bs-button/bs-button/bs-button.tsx",
135
+ "id": "src/components/bs-button/bs-button/bs-button.tsx::BsButtonVariant"
131
136
  }
132
137
  }
133
138
  },
@@ -152,8 +157,8 @@ export class BsButton {
152
157
  "references": {
153
158
  "BsButtonSize": {
154
159
  "location": "local",
155
- "path": "/Users/vivka/brandsync-web-components/src/components/bs-button/bs-button.tsx",
156
- "id": "src/components/bs-button/bs-button.tsx::BsButtonSize"
160
+ "path": "/Users/vivka/brandsync-web-components/src/components/bs-button/bs-button/bs-button.tsx",
161
+ "id": "src/components/bs-button/bs-button/bs-button.tsx::BsButtonSize"
157
162
  }
158
163
  }
159
164
  },
@@ -1,9 +1,9 @@
1
1
  import { html } from "lit";
2
- import { componentDescription, propDescription } from "../../stories-utils";
2
+ import { componentDescription, propDescription } from "../../../stories-utils";
3
3
  const variants = ['primary', 'neutral', 'subtle', 'outlined', 'success', 'warning', 'info', 'error'];
4
4
  const sizes = ['sm', 'md', 'lg'];
5
5
  const meta = {
6
- title: 'Components/bs-button',
6
+ title: 'Components/bs-button/bs-button',
7
7
  parameters: { docs: { description: { component: componentDescription('bs-button') } } },
8
8
  render: args => html `
9
9
  <bs-button variant=${args.variant} size=${args.size} type=${args.type} ?disabled=${args.disabled}>
@@ -86,31 +86,6 @@ export const WithEndIcon = {
86
86
  </bs-button>
87
87
  `,
88
88
  };
89
- export const IconOnly = {
90
- name: 'Icon-only',
91
- render: args => html `
92
- <bs-button variant=${args.variant} size=${args.size} ?disabled=${args.disabled} aria-label="Delete">
93
- <svg slot="icon" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
94
- <path
95
- d="M2 4H14M6 4V2.5C6 2.22386 6.22386 2 6.5 2H9.5C9.77614 2 10 2.22386 10 2.5V4M12.5 4L12 13.5C12 13.7761 11.7761 14 11.5 14H4.5C4.22386 14 4 13.7761 4 13.5L3.5 4"
96
- stroke="currentColor"
97
- stroke-width="1.3"
98
- stroke-linecap="round"
99
- stroke-linejoin="round"
100
- />
101
- </svg>
102
- </bs-button>
103
- `,
104
- };
105
- export const LongLabel = {
106
- name: 'Long label (edge case)',
107
- args: { label: 'This button has a much longer label than the icon-and-text layout was designed for' },
108
- render: args => html `
109
- <div style="max-width: 220px;">
110
- <bs-button variant=${args.variant} size=${args.size} ?disabled=${args.disabled}> ${args.label} </bs-button>
111
- </div>
112
- `,
113
- };
114
89
  export const AllCombinations = {
115
90
  name: 'All variant × size × disabled combinations',
116
91
  render: () => html `
@@ -0,0 +1,83 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ describe('bs-icon-button', () => {
3
+ it('renders the default icon slot and variant/size classes', async () => {
4
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm" }, h("svg", { viewBox: "0 0 16 16" })));
5
+ const button = root.shadowRoot.querySelector('button');
6
+ expect(button).toHaveClass('bs-icon-button--primary');
7
+ expect(button).toHaveClass('bs-icon-button--md');
8
+ });
9
+ it('applies the disabled attribute to the native button', async () => {
10
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm", disabled: true }, h("svg", { viewBox: "0 0 16 16" })));
11
+ const button = root.shadowRoot.querySelector('button');
12
+ expect(button).toHaveAttribute('disabled');
13
+ });
14
+ it('reflects the variant prop to the internal class', async () => {
15
+ const { root, setProps } = await render(h("bs-icon-button", { ariaLabel: "Confirm", variant: "neutral" }, h("svg", { viewBox: "0 0 16 16" })));
16
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--neutral');
17
+ await setProps({ variant: 'primary' });
18
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--primary');
19
+ });
20
+ it('applies the error variant class and reflects on prop change', async () => {
21
+ const { root, setProps } = await render(h("bs-icon-button", { ariaLabel: "Delete", variant: "error" }, h("svg", { viewBox: "0 0 16 16" })));
22
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--error');
23
+ await setProps({ variant: 'primary' });
24
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--primary');
25
+ expect(root.shadowRoot.querySelector('button')).not.toHaveClass('bs-icon-button--error');
26
+ });
27
+ it('applies the subtle variant class', async () => {
28
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm", variant: "subtle" }, h("svg", { viewBox: "0 0 16 16" })));
29
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--subtle');
30
+ });
31
+ it('applies the outlined variant class', async () => {
32
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm", variant: "outlined" }, h("svg", { viewBox: "0 0 16 16" })));
33
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--outlined');
34
+ });
35
+ it('applies the success variant class and reflects on prop change', async () => {
36
+ const { root, setProps } = await render(h("bs-icon-button", { ariaLabel: "Approve", variant: "success" }, h("svg", { viewBox: "0 0 16 16" })));
37
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--success');
38
+ await setProps({ variant: 'primary' });
39
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--primary');
40
+ expect(root.shadowRoot.querySelector('button')).not.toHaveClass('bs-icon-button--success');
41
+ });
42
+ it('applies the warning variant class', async () => {
43
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Proceed anyway", variant: "warning" }, h("svg", { viewBox: "0 0 16 16" })));
44
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--warning');
45
+ });
46
+ it('applies the info variant class', async () => {
47
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "View details", variant: "info" }, h("svg", { viewBox: "0 0 16 16" })));
48
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--info');
49
+ });
50
+ it('applies each size class', async () => {
51
+ const { root, setProps } = await render(h("bs-icon-button", { ariaLabel: "Confirm", size: "sm" }, h("svg", { viewBox: "0 0 16 16" })));
52
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--sm');
53
+ await setProps({ size: 'lg' });
54
+ expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--lg');
55
+ });
56
+ it('renders size="xs" at 16px with an 8px icon and a smaller radius than sm/md/lg', async () => {
57
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Remove", size: "xs" }, h("svg", { viewBox: "0 0 16 16" })));
58
+ const button = root.shadowRoot.querySelector('button');
59
+ expect(button).toHaveClass('bs-icon-button--xs');
60
+ expect(getComputedStyle(button).width).toBe('16px');
61
+ expect(getComputedStyle(button).height).toBe('16px');
62
+ const icon = root.shadowRoot.querySelector('[part="icon"]');
63
+ expect(getComputedStyle(icon).width).toBe('8px');
64
+ expect(getComputedStyle(icon).height).toBe('8px');
65
+ });
66
+ it('sets aria-label on the inner button from the ariaLabel prop', async () => {
67
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Delete" }, h("svg", { viewBox: "0 0 16 16" })));
68
+ const button = root.shadowRoot.querySelector('button');
69
+ expect(button).toEqualAttribute('aria-label', 'Delete');
70
+ });
71
+ it('renders the native button type from the type prop', async () => {
72
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Submit", type: "submit" }, h("svg", { viewBox: "0 0 16 16" })));
73
+ const button = root.shadowRoot.querySelector('button');
74
+ expect(button).toEqualAttribute('type', 'submit');
75
+ });
76
+ it('renders the slotted icon content inside part="icon"', async () => {
77
+ const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm" }, h("svg", { class: "my-icon", viewBox: "0 0 16 16" })));
78
+ const iconWrapper = root.shadowRoot.querySelector('[part="icon"]');
79
+ expect(iconWrapper).not.toBeNull();
80
+ expect(iconWrapper.querySelector('slot')).not.toBeNull();
81
+ expect(root.querySelector('svg.my-icon')).not.toBeNull();
82
+ });
83
+ });