@brandsync/wc 0.0.10 → 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 (300) hide show
  1. package/custom-elements.json +3584 -508
  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-b1e1b2d6.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-3dacae70.entry.js → p-1900f6ce.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-575ce905.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-dd747a12.entry.js → p-1cf715aa.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-8a78d6ea.entry.js → p-20dbc6a1.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-a34f460d.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-2a65aabb.entry.js +1 -0
  16. package/dist/brandsync-wc/{p-8d12ed96.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-18af02df.entry.js → p-57fdbb76.entry.js} +1 -1
  21. package/dist/brandsync-wc/{p-7776b57b.entry.js → p-64e2a7d7.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-805644e4.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-d682675e.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-94ed898a.entry.js → p-8ded1eb6.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-nLORuTUY.js → p-DST5-cTx.js} +2 -2
  29. package/dist/brandsync-wc/p-a5b15061.entry.js +1 -0
  30. package/dist/brandsync-wc/{p-30a0e168.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-96f374be.entry.js → p-b289450a.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-880ea3f8.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-1515498e.entry.js → p-d4e3ca77.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-ce0914a7.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 +94 -0
  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-CVh-sqA_.js → index-B3sdhEGk.js} +74 -2
  75. package/dist/cjs/loader.cjs.js +2 -2
  76. package/dist/collection/collection-manifest.json +14 -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 +117 -0
  99. package/dist/collection/components/bs-checkbox/bs-checkbox.css +199 -0
  100. package/dist/collection/components/bs-checkbox/bs-checkbox.js +265 -0
  101. package/dist/collection/components/bs-checkbox/bs-checkbox.stories.js +65 -0
  102. package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +48 -7
  103. package/dist/collection/components/bs-composer/bs-composer.css +15 -0
  104. package/dist/collection/components/bs-composer/bs-composer.js +38 -4
  105. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.cmp.test.js +47 -1
  106. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +20 -1
  107. package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
  108. package/dist/collection/components/bs-input/bs-input.js +2 -2
  109. package/dist/collection/components/bs-logo/brandsync-logo-full-dark.js +44 -0
  110. package/dist/collection/components/bs-logo/brandsync-logo-full-light.js +40 -0
  111. package/dist/collection/components/bs-logo/brandsync-logo-mark.js +17 -0
  112. package/dist/collection/components/bs-logo/bs-logo.cmp.test.js +113 -0
  113. package/dist/collection/components/bs-logo/bs-logo.css +79 -0
  114. package/dist/collection/components/bs-logo/bs-logo.js +193 -0
  115. package/dist/collection/components/bs-logo/bs-logo.stories.js +69 -0
  116. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  117. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  118. package/dist/collection/components/bs-radio/bs-radio.cmp.test.js +76 -0
  119. package/dist/collection/components/bs-radio/bs-radio.css +164 -0
  120. package/dist/collection/components/bs-radio/bs-radio.js +170 -0
  121. package/dist/collection/components/bs-radio/bs-radio.stories.js +56 -0
  122. package/dist/collection/components/bs-slider/bs-slider.cmp.test.js +139 -0
  123. package/dist/collection/components/bs-slider/bs-slider.css +409 -0
  124. package/dist/collection/components/bs-slider/bs-slider.js +499 -0
  125. package/dist/collection/components/bs-slider/bs-slider.stories.js +70 -0
  126. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  127. package/dist/collection/components/bs-switch/bs-switch.cmp.test.js +71 -0
  128. package/dist/collection/components/bs-switch/bs-switch.css +196 -0
  129. package/dist/collection/components/bs-switch/bs-switch.js +185 -0
  130. package/dist/collection/components/bs-switch/bs-switch.stories.js +60 -0
  131. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.cmp.test.js +104 -0
  132. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.css +163 -0
  133. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +192 -0
  134. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.js +95 -0
  135. package/dist/collection/components/bs-tab/bs-tab/bs-tab.cmp.test.js +120 -0
  136. package/dist/collection/components/bs-tab/bs-tab/bs-tab.css +216 -0
  137. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +232 -0
  138. package/dist/collection/components/bs-tab/bs-tab/bs-tab.stories.js +138 -0
  139. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.cmp.test.js +61 -0
  140. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.css +39 -0
  141. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +133 -0
  142. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.stories.js +39 -0
  143. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  144. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +131 -0
  145. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.css +257 -0
  146. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +253 -0
  147. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.js +202 -0
  148. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.js +172 -0
  149. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.css +325 -0
  150. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +314 -0
  151. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.stories.js +78 -0
  152. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.js +77 -0
  153. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.css +106 -0
  154. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +188 -0
  155. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.js +189 -0
  156. package/dist/components/bs-ai-disclaimer.js +1 -1
  157. package/dist/components/bs-ai-greeting.js +1 -1
  158. package/dist/components/bs-ai-thinking.js +1 -1
  159. package/dist/components/bs-attachment-list.js +1 -1
  160. package/dist/components/bs-attachment.js +1 -1
  161. package/dist/components/bs-badge.js +1 -1
  162. package/dist/components/bs-button-skeleton.js +1 -1
  163. package/dist/components/bs-button.js +1 -1
  164. package/dist/components/bs-card.js +1 -1
  165. package/dist/components/bs-chatbot-feedback.js +1 -1
  166. package/dist/components/bs-chatbot-header.js +1 -1
  167. package/dist/components/bs-chatbot-response-action.js +1 -1
  168. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  169. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  170. package/dist/components/bs-checkbox.d.ts +11 -0
  171. package/dist/components/bs-checkbox.js +1 -0
  172. package/dist/components/bs-composer-status-banner.js +1 -1
  173. package/dist/components/bs-composer.js +1 -1
  174. package/dist/components/bs-data-table.js +1 -1
  175. package/dist/components/bs-icon-button.d.ts +11 -0
  176. package/dist/components/bs-icon-button.js +1 -0
  177. package/dist/components/bs-inline-tab.d.ts +11 -0
  178. package/dist/components/bs-inline-tab.js +1 -0
  179. package/dist/components/bs-input.js +1 -1
  180. package/dist/components/bs-logo.d.ts +11 -0
  181. package/dist/components/bs-logo.js +1 -0
  182. package/dist/components/bs-menu-item.js +1 -1
  183. package/dist/components/bs-menu.js +1 -1
  184. package/dist/components/bs-modal.js +1 -1
  185. package/dist/components/bs-navigation-drawer-item.d.ts +11 -0
  186. package/dist/components/bs-navigation-drawer-item.js +1 -0
  187. package/dist/components/bs-navigation-drawer.d.ts +11 -0
  188. package/dist/components/bs-navigation-drawer.js +1 -0
  189. package/dist/components/bs-navigation-header.d.ts +11 -0
  190. package/dist/components/bs-navigation-header.js +1 -0
  191. package/dist/components/bs-radio.d.ts +11 -0
  192. package/dist/components/bs-radio.js +1 -0
  193. package/dist/components/bs-slider.d.ts +11 -0
  194. package/dist/components/bs-slider.js +1 -0
  195. package/dist/components/bs-source-link.js +1 -1
  196. package/dist/components/bs-switch.d.ts +11 -0
  197. package/dist/components/bs-switch.js +1 -0
  198. package/dist/components/bs-tab.d.ts +11 -0
  199. package/dist/components/bs-tab.js +1 -0
  200. package/dist/components/bs-tabs.d.ts +11 -0
  201. package/dist/components/bs-tabs.js +1 -0
  202. package/dist/components/bs-tooltip.js +1 -1
  203. package/dist/components/index.js +1 -1
  204. package/dist/components/p-BAOJc0V0.js +1 -0
  205. package/dist/components/{p-BpvhHQSw.js → p-Be1Pfcnm.js} +1 -1
  206. package/dist/components/{p-Cz2nfz2j.js → p-BqYyMGrB.js} +1 -1
  207. package/dist/components/p-CaWqTQBZ.js +1 -0
  208. package/dist/components/{p-DndQiCMP.js → p-DivZLd6i.js} +1 -1
  209. package/dist/components/{p-DHbUF0g6.js → p-xfx69LQx.js} +1 -1
  210. package/dist/esm/brandsync-wc.js +3 -3
  211. package/dist/esm/bs-ai-disclaimer.entry.js +3 -2
  212. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  213. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  214. package/dist/esm/bs-attachment-list.entry.js +2 -2
  215. package/dist/esm/bs-attachment.entry.js +3 -3
  216. package/dist/esm/bs-badge.entry.js +1 -1
  217. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  218. package/dist/esm/bs-button.entry.js +3 -3
  219. package/dist/esm/bs-card.entry.js +1 -1
  220. package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
  221. package/dist/esm/bs-chatbot-header.entry.js +2 -2
  222. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  223. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  224. package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
  225. package/dist/esm/bs-checkbox.entry.js +92 -0
  226. package/dist/esm/bs-composer-status-banner.entry.js +14 -2
  227. package/dist/esm/bs-composer.entry.js +37 -4
  228. package/dist/esm/bs-data-table.entry.js +3 -3
  229. package/dist/esm/bs-icon-button.entry.js +38 -0
  230. package/dist/esm/bs-inline-tab.entry.js +67 -0
  231. package/dist/esm/bs-input.entry.js +3 -3
  232. package/dist/esm/bs-logo.entry.js +163 -0
  233. package/dist/esm/bs-menu_2.entry.js +3 -3
  234. package/dist/esm/bs-modal.entry.js +1 -1
  235. package/dist/esm/bs-navigation-drawer-item.entry.js +102 -0
  236. package/dist/esm/bs-navigation-drawer.entry.js +79 -0
  237. package/dist/esm/bs-navigation-header.entry.js +42 -0
  238. package/dist/esm/bs-radio.entry.js +47 -0
  239. package/dist/esm/bs-slider.entry.js +189 -0
  240. package/dist/esm/bs-source-link.entry.js +3 -3
  241. package/dist/esm/bs-switch.entry.js +55 -0
  242. package/dist/esm/bs-tab.entry.js +78 -0
  243. package/dist/esm/bs-tabs.entry.js +37 -0
  244. package/dist/esm/bs-tooltip.entry.js +2 -2
  245. package/dist/esm/{index-nLORuTUY.js → index-DST5-cTx.js} +74 -2
  246. package/dist/esm/loader.js +3 -3
  247. package/dist/types/components/bs-attachment/bs-attachment.d.ts +3 -9
  248. package/dist/types/components/bs-button/{bs-button.d.ts → bs-button/bs-button.d.ts} +5 -0
  249. package/dist/types/components/bs-button/{bs-button.stories.d.ts → bs-button/bs-button.stories.d.ts} +0 -2
  250. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.d.ts +1 -0
  251. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.d.ts +51 -0
  252. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.stories.d.ts +16 -0
  253. package/dist/types/components/bs-button-skeleton/bs-button-skeleton.d.ts +1 -1
  254. package/dist/types/components/bs-button-skeleton/bs-button-skeleton.stories.d.ts +1 -1
  255. package/dist/types/components/bs-checkbox/bs-checkbox.cmp.test.d.ts +1 -0
  256. package/dist/types/components/bs-checkbox/bs-checkbox.d.ts +64 -0
  257. package/dist/types/components/bs-checkbox/bs-checkbox.stories.d.ts +23 -0
  258. package/dist/types/components/bs-composer/bs-composer.d.ts +26 -2
  259. package/dist/types/components/bs-composer-status-banner/bs-composer-status-banner.d.ts +14 -0
  260. package/dist/types/components/bs-logo/brandsync-logo-full-dark.d.ts +1 -0
  261. package/dist/types/components/bs-logo/brandsync-logo-full-light.d.ts +1 -0
  262. package/dist/types/components/bs-logo/brandsync-logo-mark.d.ts +1 -0
  263. package/dist/types/components/bs-logo/bs-logo.cmp.test.d.ts +1 -0
  264. package/dist/types/components/bs-logo/bs-logo.d.ts +73 -0
  265. package/dist/types/components/bs-logo/bs-logo.stories.d.ts +17 -0
  266. package/dist/types/components/bs-radio/bs-radio.cmp.test.d.ts +1 -0
  267. package/dist/types/components/bs-radio/bs-radio.d.ts +45 -0
  268. package/dist/types/components/bs-radio/bs-radio.stories.d.ts +16 -0
  269. package/dist/types/components/bs-slider/bs-slider.cmp.test.d.ts +1 -0
  270. package/dist/types/components/bs-slider/bs-slider.d.ts +109 -0
  271. package/dist/types/components/bs-slider/bs-slider.stories.d.ts +24 -0
  272. package/dist/types/components/bs-switch/bs-switch.cmp.test.d.ts +1 -0
  273. package/dist/types/components/bs-switch/bs-switch.d.ts +45 -0
  274. package/dist/types/components/bs-switch/bs-switch.stories.d.ts +17 -0
  275. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.cmp.test.d.ts +1 -0
  276. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.d.ts +65 -0
  277. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.d.ts +22 -0
  278. package/dist/types/components/bs-tab/bs-tab/bs-tab.cmp.test.d.ts +1 -0
  279. package/dist/types/components/bs-tab/bs-tab/bs-tab.d.ts +74 -0
  280. package/dist/types/components/bs-tab/bs-tab/bs-tab.stories.d.ts +30 -0
  281. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.cmp.test.d.ts +1 -0
  282. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.d.ts +45 -0
  283. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.stories.d.ts +13 -0
  284. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.d.ts +1 -0
  285. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.d.ts +96 -0
  286. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.d.ts +16 -0
  287. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.d.ts +1 -0
  288. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.d.ts +103 -0
  289. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.stories.d.ts +20 -0
  290. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.d.ts +1 -0
  291. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.d.ts +60 -0
  292. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.d.ts +21 -0
  293. package/dist/types/components.d.ts +1973 -49
  294. package/package.json +1 -1
  295. package/dist/brandsync-wc/p-0d64ea40.entry.js +0 -1
  296. package/dist/brandsync-wc/p-16a54578.entry.js +0 -1
  297. package/dist/brandsync-wc/p-bc72439a.entry.js +0 -1
  298. package/dist/brandsync-wc/p-dad4a92c.entry.js +0 -1
  299. package/dist/brandsync-wc/p-eb4d87f0.entry.js +0 -1
  300. /package/dist/types/components/bs-button/{bs-button.cmp.test.d.ts → bs-button/bs-button.cmp.test.d.ts} +0 -0
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @prop --bs-tabs-tab-gap: Gap between tabs when type="bs-tab". Aliased to --bs-spacing-100.
3
+ * @prop --bs-tabs-inline-tab-bg: Bar background when type="bs-inline-tab". Aliased to --bs-color-neutral-container.
4
+ * @prop --bs-tabs-inline-tab-padding-x: Bar horizontal padding when type="bs-inline-tab". Aliased to --bs-spacing-50.
5
+ * @prop --bs-tabs-inline-tab-radius: Bar corner radius when type="bs-inline-tab". Aliased to --bs-border-radius-full.
6
+ * @prop --bs-tabs-inline-tab-gap: Gap between tabs when type="bs-inline-tab". Aliased to --bs-spacing-50.
7
+ */
8
+ :host {
9
+ display: inline-block;
10
+
11
+ --bs-tabs-tab-gap: var(--bs-spacing-100);
12
+
13
+ --bs-tabs-inline-tab-bg: var(--bs-color-neutral-container);
14
+ --bs-tabs-inline-tab-padding-x: var(--bs-spacing-50);
15
+ --bs-tabs-inline-tab-radius: var(--bs-border-radius-full);
16
+ --bs-tabs-inline-tab-gap: var(--bs-spacing-50);
17
+ }
18
+
19
+ .bs-tabs {
20
+ display: inline-flex;
21
+ align-items: center;
22
+ }
23
+
24
+ .bs-tabs--vertical {
25
+ display: flex;
26
+ flex-direction: column;
27
+ align-items: flex-start;
28
+ }
29
+
30
+ .bs-tabs--bs-tab {
31
+ gap: var(--bs-tabs-tab-gap);
32
+ }
33
+
34
+ .bs-tabs--bs-inline-tab {
35
+ background: var(--bs-tabs-inline-tab-bg);
36
+ padding: 0 var(--bs-tabs-inline-tab-padding-x);
37
+ border-radius: var(--bs-tabs-inline-tab-radius);
38
+ gap: var(--bs-tabs-inline-tab-gap);
39
+ }
@@ -0,0 +1,133 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * A tab-group wrapper: owns `role="tablist"` and coordinates selection across its slotted
4
+ * `<bs-tab>` or `<bs-inline-tab>` children, so consumers no longer have to hand-roll this.
5
+ *
6
+ * `bs-tab.mdx`/`bs-inline-tab.mdx` previously documented this coordination -- listening for
7
+ * `bsSelect` and setting `selected`/`false` on siblings, plus supplying `role="tablist"` on
8
+ * whatever element groups the tabs -- as a "Known gap"/manual consumer responsibility. This
9
+ * component is that wrapper: it renders the `role="tablist"` element and listens for `bsSelect`
10
+ * itself. Using `<bs-tab>`/`<bs-inline-tab>` standalone, outside a `<bs-tabs>` wrapper, still means
11
+ * `selected` doesn't self-toggle -- a consumer doing that would still need to coordinate `selected`
12
+ * manually -- but that's no longer the first recommended path.
13
+ *
14
+ * ## When to use
15
+ * - Wrapping a set of `<bs-tab>` (underline style) or `<bs-inline-tab>` (pill style) elements that
16
+ * should behave as a single-selection tab bar.
17
+ *
18
+ * ## When not to use
19
+ * - For a single, standalone tab button not participating in a group -- use `bs-tab`/`bs-inline-tab`
20
+ * directly.
21
+ *
22
+ * @slot - Default slot: the tab elements (`<bs-tab>` or `<bs-inline-tab>`, matching `type`) that
23
+ * make up this group.
24
+ * @part tablist - The wrapping element carrying `role="tablist"`.
25
+ */
26
+ // Note: this component's CSS Custom Properties (--bs-tabs-*) are documented via @prop comments in
27
+ // bs-tabs.css, not here -- Stencil's docs generator only parses @prop out of CSS file comments, not
28
+ // the class-level JSDoc (see bs-tab.tsx's equivalent note).
29
+ export class BsTabs {
30
+ el;
31
+ /** Which tab-button family this group wraps. Governs the wrapper's own visual treatment (gap-only
32
+ * for `bs-tab`, a filled pill bar for `bs-inline-tab`). Not reflected as an attribute -- nothing
33
+ * external needs to target it via CSS attribute selector, it only drives internal class names. */
34
+ type = 'bs-tab';
35
+ /** Layout direction of the tab bar itself. Sets `aria-orientation` on the internal wrapper and
36
+ * switches `flex-direction`. */
37
+ orientation = 'horizontal';
38
+ /**
39
+ * Catches `bsSelect` bubbling up from any slotted `<bs-tab>`/`<bs-inline-tab>` (Stencil's
40
+ * `@Event()` defaults to `bubbles: true, composed: true`, and `@Listen` without a target listens
41
+ * on the host itself), and sets `selected` on the clicked child / `false` on its siblings.
42
+ * Disabled children never emit `bsSelect` in the first place (each's own `onClick` guards
43
+ * `if (this.disabled) return;`), so no special-casing is needed here.
44
+ */
45
+ onTabSelect(ev) {
46
+ const tabs = this.el.querySelectorAll(':scope > bs-tab, :scope > bs-inline-tab');
47
+ tabs.forEach(tab => {
48
+ tab.selected = tab === ev.target;
49
+ });
50
+ }
51
+ render() {
52
+ const vertical = this.orientation === 'vertical';
53
+ return (h("div", { key: '55006a332bf4d3b955f5c76cf2cfadf483affb4b', part: "tablist", role: "tablist", "aria-orientation": this.orientation, class: `bs-tabs bs-tabs--${this.type} ${vertical ? 'bs-tabs--vertical' : ''}` }, h("slot", { key: '0b0d1ec94485389d4bb6b4000384e337991060bd' })));
54
+ }
55
+ static get is() { return "bs-tabs"; }
56
+ static get encapsulation() { return "shadow"; }
57
+ static get originalStyleUrls() {
58
+ return {
59
+ "$": ["bs-tabs.css"]
60
+ };
61
+ }
62
+ static get styleUrls() {
63
+ return {
64
+ "$": ["bs-tabs.css"]
65
+ };
66
+ }
67
+ static get properties() {
68
+ return {
69
+ "type": {
70
+ "type": "string",
71
+ "mutable": false,
72
+ "complexType": {
73
+ "original": "BsTabsType",
74
+ "resolved": "\"bs-inline-tab\" | \"bs-tab\"",
75
+ "references": {
76
+ "BsTabsType": {
77
+ "location": "local",
78
+ "path": "/Users/vivka/brandsync-web-components/src/components/bs-tab/bs-tabs/bs-tabs.tsx",
79
+ "id": "src/components/bs-tab/bs-tabs/bs-tabs.tsx::BsTabsType"
80
+ }
81
+ }
82
+ },
83
+ "required": false,
84
+ "optional": false,
85
+ "docs": {
86
+ "tags": [],
87
+ "text": "Which tab-button family this group wraps. Governs the wrapper's own visual treatment (gap-only\nfor `bs-tab`, a filled pill bar for `bs-inline-tab`). Not reflected as an attribute -- nothing\nexternal needs to target it via CSS attribute selector, it only drives internal class names."
88
+ },
89
+ "getter": false,
90
+ "setter": false,
91
+ "reflect": false,
92
+ "attribute": "type",
93
+ "defaultValue": "'bs-tab'"
94
+ },
95
+ "orientation": {
96
+ "type": "string",
97
+ "mutable": false,
98
+ "complexType": {
99
+ "original": "BsTabsOrientation",
100
+ "resolved": "\"horizontal\" | \"vertical\"",
101
+ "references": {
102
+ "BsTabsOrientation": {
103
+ "location": "local",
104
+ "path": "/Users/vivka/brandsync-web-components/src/components/bs-tab/bs-tabs/bs-tabs.tsx",
105
+ "id": "src/components/bs-tab/bs-tabs/bs-tabs.tsx::BsTabsOrientation"
106
+ }
107
+ }
108
+ },
109
+ "required": false,
110
+ "optional": false,
111
+ "docs": {
112
+ "tags": [],
113
+ "text": "Layout direction of the tab bar itself. Sets `aria-orientation` on the internal wrapper and\nswitches `flex-direction`."
114
+ },
115
+ "getter": false,
116
+ "setter": false,
117
+ "reflect": false,
118
+ "attribute": "orientation",
119
+ "defaultValue": "'horizontal'"
120
+ }
121
+ };
122
+ }
123
+ static get elementRef() { return "el"; }
124
+ static get listeners() {
125
+ return [{
126
+ "name": "bsSelect",
127
+ "method": "onTabSelect",
128
+ "target": undefined,
129
+ "capture": false,
130
+ "passive": false
131
+ }];
132
+ }
133
+ }
@@ -0,0 +1,39 @@
1
+ import { html } from "lit";
2
+ import { componentDescription, propDescription } from "../../../stories-utils";
3
+ const types = ['bs-tab', 'bs-inline-tab'];
4
+ const orientations = ['horizontal', 'vertical'];
5
+ const tabLabels = ['Overview', 'Details', 'Settings', 'Archived'];
6
+ const meta = {
7
+ title: 'Components/bs-tab/bs-tabs',
8
+ parameters: { docs: { description: { component: componentDescription('bs-tabs') } } },
9
+ render: args => html `
10
+ <bs-tabs type=${args.type} orientation=${args.orientation}>
11
+ ${tabLabels.map(label => args.type === 'bs-inline-tab'
12
+ ? html `<bs-inline-tab ?selected=${label === args.selectedTab} ?disabled=${label === 'Archived'}>${label}</bs-inline-tab>`
13
+ : html `<bs-tab ?selected=${label === args.selectedTab} ?disabled=${label === 'Archived'}>${label}</bs-tab>`)}
14
+ </bs-tabs>
15
+ `,
16
+ argTypes: {
17
+ type: { control: 'select', options: types, description: propDescription('bs-tabs', 'type') },
18
+ orientation: { control: 'select', options: orientations, description: propDescription('bs-tabs', 'orientation') },
19
+ selectedTab: {
20
+ control: 'select',
21
+ options: tabLabels,
22
+ description: 'Which tab is selected (Archived is disabled and cannot be selected).',
23
+ },
24
+ },
25
+ args: {
26
+ type: 'bs-tab',
27
+ orientation: 'horizontal',
28
+ selectedTab: 'Overview',
29
+ },
30
+ };
31
+ export default meta;
32
+ export const Default = {};
33
+ export const InlineTabGroup = {
34
+ name: 'Inline tab group',
35
+ args: { type: 'bs-inline-tab' },
36
+ };
37
+ export const Vertical = {
38
+ args: { orientation: 'vertical' },
39
+ };
@@ -42,7 +42,7 @@ export class BsTooltip {
42
42
  */
43
43
  placement = 'top';
44
44
  render() {
45
- return (h("div", { key: '7020be9b961d1370449ce37570ae0c9162bd6176', class: "bs-tooltip" }, h("span", { key: 'e21d62d8f701917c7a074c105a7509c9f4582f64', part: "arrow", class: "bs-tooltip__arrow" }), h("div", { key: 'f011584e85c9d10371f961e49d44b67a3983bd2e', part: "bubble", class: "bs-tooltip__bubble" }, h("slot", { key: 'f27da1c55a31d3e1a7ee330440ee9b4a3c577e9a' }))));
45
+ return (h("div", { key: '64951f06f070f2d3b10796d09f2c97ef7cf098fa', class: "bs-tooltip" }, h("span", { key: 'b9ff6d99eb95aea33949f211aa80c29220a3e199', part: "arrow", class: "bs-tooltip__arrow" }), h("div", { key: '3b559c7952b42011f45bd59177dbdf3194b84b92', part: "bubble", class: "bs-tooltip__bubble" }, h("slot", { key: '54b278e8ee7c98360b9aaaea300e0631d8bfb8dd' }))));
46
46
  }
47
47
  static get is() { return "bs-tooltip"; }
48
48
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,131 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ describe('bs-navigation-drawer', () => {
3
+ it('renders a <nav> landmark with the logo', async () => {
4
+ const { root } = await render(h("bs-navigation-drawer", null));
5
+ expect(root.shadowRoot.querySelector('nav')).not.toBeNull();
6
+ expect(root.shadowRoot.querySelector('[part="logo"]')).not.toBeNull();
7
+ });
8
+ it('renders the default "Main Menu" heading', async () => {
9
+ const { root } = await render(h("bs-navigation-drawer", null));
10
+ const title = root.shadowRoot.querySelector('[part="title"]');
11
+ expect(title.textContent).toBe('Main Menu');
12
+ });
13
+ it('sets the <nav> landmark aria-label from heading', async () => {
14
+ const { root } = await render(h("bs-navigation-drawer", { heading: "Admin Menu" }));
15
+ expect(root.shadowRoot.querySelector('nav')).toEqualAttribute('aria-label', 'Admin Menu');
16
+ });
17
+ it('renders a custom heading', async () => {
18
+ const { root } = await render(h("bs-navigation-drawer", { heading: "Admin Menu" }));
19
+ const title = root.shadowRoot.querySelector('[part="title"]');
20
+ expect(title.textContent).toBe('Admin Menu');
21
+ });
22
+ it('renders the search and default (items) slots', async () => {
23
+ const { root } = await render(h("bs-navigation-drawer", null));
24
+ expect(root.shadowRoot.querySelector('slot[name="search"]')).not.toBeNull();
25
+ expect(root.shadowRoot.querySelector('[part="items"] slot:not([name])')).not.toBeNull();
26
+ });
27
+ it('projects light-DOM content into the search and items slots', async () => {
28
+ const { root } = await render(h("bs-navigation-drawer", null, h("input", { slot: "search" }), h("button", null, "Item one")));
29
+ const searchSlot = root.shadowRoot.querySelector('slot[name="search"]');
30
+ const itemsSlot = root.shadowRoot.querySelector('[part="items"] slot:not([name])');
31
+ expect(searchSlot.assignedElements()[0].tagName).toBe('INPUT');
32
+ expect(itemsSlot.assignedElements()[0].textContent).toBe('Item one');
33
+ });
34
+ describe('collapsible', () => {
35
+ it('renders the collapse toggle by default', async () => {
36
+ const { root } = await render(h("bs-navigation-drawer", null));
37
+ expect(root.shadowRoot.querySelector('[part="collapse"]')).not.toBeNull();
38
+ });
39
+ it('renders no collapse toggle at all when collapsible is false', async () => {
40
+ const { root } = await render(h("bs-navigation-drawer", { collapsible: false }));
41
+ expect(root.shadowRoot.querySelector('[part="collapse"]')).toBeNull();
42
+ });
43
+ });
44
+ describe('collapse toggle', () => {
45
+ it('renders a real button with an accessible label', async () => {
46
+ const { root } = await render(h("bs-navigation-drawer", null));
47
+ const button = root.shadowRoot.querySelector('[part="collapse"]');
48
+ expect(button.tagName).toBe('BUTTON');
49
+ expect(button).toEqualAttribute('type', 'button');
50
+ expect(button).toEqualAttribute('aria-label', 'Collapse');
51
+ expect(button).toEqualAttribute('aria-pressed', 'false');
52
+ });
53
+ it('self-toggles collapsed and emits bsCollapse with the new value when clicked', async () => {
54
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-navigation-drawer", null));
55
+ const collapseSpy = spyOnEvent('bsCollapse');
56
+ root.shadowRoot.querySelector('[part="collapse"]').click();
57
+ await waitForChanges();
58
+ expect(root.hasAttribute('collapsed')).toBe(true);
59
+ expect(collapseSpy).toHaveReceivedEventTimes(1);
60
+ expect(collapseSpy).toHaveReceivedEventDetail(true);
61
+ const button = root.shadowRoot.querySelector('[part="collapse"]');
62
+ expect(button).toEqualAttribute('aria-label', 'Expand');
63
+ expect(button).toEqualAttribute('aria-pressed', 'true');
64
+ });
65
+ it('toggles back to expanded on a second click', async () => {
66
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-navigation-drawer", { collapsed: true }));
67
+ const collapseSpy = spyOnEvent('bsCollapse');
68
+ root.shadowRoot.querySelector('[part="collapse"]').click();
69
+ await waitForChanges();
70
+ expect(root.hasAttribute('collapsed')).toBe(false);
71
+ expect(collapseSpy).toHaveReceivedEventDetail(false);
72
+ });
73
+ });
74
+ describe('collapsed', () => {
75
+ it('sets the nav landmark aria-label from heading, even when collapsed hides the visible title', async () => {
76
+ const { root } = await render(h("bs-navigation-drawer", { heading: "Admin Menu", collapsed: true }));
77
+ expect(root.shadowRoot.querySelector('nav')).toEqualAttribute('aria-label', 'Admin Menu');
78
+ });
79
+ it('syncs collapsed onto direct-child bs-navigation-drawer-item elements', async () => {
80
+ const { root, waitForChanges } = await render(h("bs-navigation-drawer", { collapsed: true }, h("bs-navigation-drawer-item", null, "Introduction")));
81
+ await waitForChanges();
82
+ const item = root.querySelector('bs-navigation-drawer-item');
83
+ expect(item.hasAttribute('collapsed')).toBe(true);
84
+ });
85
+ it('syncs collapsed=false back onto items once turned back off', async () => {
86
+ const { root, waitForChanges } = await render(h("bs-navigation-drawer", { collapsed: true }, h("bs-navigation-drawer-item", null, "Introduction")));
87
+ root.removeAttribute('collapsed');
88
+ await waitForChanges();
89
+ const item = root.querySelector('bs-navigation-drawer-item');
90
+ expect(item.hasAttribute('collapsed')).toBe(false);
91
+ });
92
+ it('does not sync collapsed onto nested (non-direct-child) items', async () => {
93
+ const { root, waitForChanges } = await render(h("bs-navigation-drawer", { collapsed: true }, h("bs-navigation-drawer-item", { expandable: true, expanded: true }, "Foundation", h("bs-navigation-drawer-item", { slot: "children", nested: true }, "Colors"))));
94
+ await waitForChanges();
95
+ const nestedItem = root.querySelector('[slot="children"]');
96
+ expect(nestedItem.hasAttribute('collapsed')).toBe(false);
97
+ });
98
+ it('shows a search-trigger button instead of the search slot', async () => {
99
+ const { root, waitForChanges } = await render(h("bs-navigation-drawer", { collapsed: true }));
100
+ await waitForChanges();
101
+ const trigger = root.shadowRoot.querySelector('[part="search-trigger"]');
102
+ expect(getComputedStyle(trigger).display).not.toBe('none');
103
+ });
104
+ it('emits bsSearchClick when the search-trigger button is clicked', async () => {
105
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-navigation-drawer", { collapsed: true }));
106
+ await waitForChanges();
107
+ const searchClickSpy = spyOnEvent('bsSearchClick');
108
+ root.shadowRoot.querySelector('[part="search-trigger"]').click();
109
+ expect(searchClickSpy).toHaveReceivedEventTimes(1);
110
+ });
111
+ it('hides the search-trigger button when not collapsed', async () => {
112
+ const { root } = await render(h("bs-navigation-drawer", null));
113
+ const trigger = root.shadowRoot.querySelector('[part="search-trigger"]');
114
+ expect(getComputedStyle(trigger).display).toBe('none');
115
+ });
116
+ });
117
+ describe('logoBackground', () => {
118
+ it('forwards the default "auto" background to both internal bs-logo elements', async () => {
119
+ const { root } = await render(h("bs-navigation-drawer", null));
120
+ const logos = root.shadowRoot.querySelectorAll('bs-logo');
121
+ expect(logos).toHaveLength(2);
122
+ logos.forEach(logo => expect(logo.background).toBe('auto'));
123
+ });
124
+ it('forwards logoBackground="dark" to both internal bs-logo elements', async () => {
125
+ const { root } = await render(h("bs-navigation-drawer", { logoBackground: "dark" }));
126
+ const logos = root.shadowRoot.querySelectorAll('bs-logo');
127
+ expect(logos).toHaveLength(2);
128
+ logos.forEach(logo => expect(logo.background).toBe('dark'));
129
+ });
130
+ });
131
+ });
@@ -0,0 +1,257 @@
1
+ /**
2
+ * @prop --bs-navigation-drawer-bg: Background of the drawer. Aliased to --bs-surface-base.
3
+ * @prop --bs-navigation-drawer-border: Right border color. Aliased to --bs-border-neutral-container.
4
+ * @prop --bs-navigation-drawer-padding-y: Top/bottom padding. Aliased to --bs-spacing-300.
5
+ * @prop --bs-navigation-drawer-padding-left: Left padding. Aliased to --bs-spacing-300 -- note
6
+ * this is deliberately different from --bs-navigation-drawer-padding-right (below), per the
7
+ * Figma spec. Both are ignored (set to 0) while `collapsed` -- see Figma node 8028:135374, which
8
+ * uses `px-0` for the collapsed rail.
9
+ * @prop --bs-navigation-drawer-padding-right: Right padding. Aliased to --bs-spacing-200.
10
+ * @prop --bs-navigation-drawer-gap: Gap between the logo, title row, search slot, and items list.
11
+ * Aliased to --bs-spacing-300 (24px, matching the drawer's own top/bottom padding for an even
12
+ * rhythm) -- bumped up from the originally Figma-measured --bs-spacing-150 (12px) at the user's
13
+ * request after seeing it rendered (felt cramped in practice), not a Figma re-measurement.
14
+ * @prop --bs-navigation-drawer-width: Default width of the drawer. 280px, matching Figma's own
15
+ * frame -- overridable by a consumer that needs a different fixed width.
16
+ * @prop --bs-navigation-drawer-title-font-family: Title text font family. Aliased to
17
+ * --bs-typography-font-family-heading.
18
+ * @prop --bs-navigation-drawer-title-font-weight: Title text font weight. Aliased to
19
+ * --bs-font-weight-bold.
20
+ * @prop --bs-navigation-drawer-title-font-size: Title text font size. The Figma spec calls this
21
+ * style "heading h7", but src/global/tokens.css only defines heading tokens through h6
22
+ * (--bs-fontsize-heading-h6: 16px, --bs-line-height-heading-h6: 20) -- there is no h7 tier. h6
23
+ * is the smallest/closest defined tier, so this aliases to the plain --bs-font-size-md token
24
+ * (also 16px, the same value as --bs-fontsize-heading-h6) rather than inventing a new h7 token.
25
+ * Flagged here as a judgment call, not a pixel-confirmed h7 value.
26
+ * @prop --bs-navigation-drawer-title-line-height: Title text line height. Aliased to
27
+ * --bs-line-height-heading-h6, for the same reason as the font-size prop above.
28
+ * @prop --bs-navigation-drawer-title-color: Title text color. Aliased to --bs-text-default.
29
+ * @prop --bs-navigation-drawer-collapse-size: Width/height of the collapse toggle button. 48px.
30
+ * @prop --bs-navigation-drawer-collapse-radius: Corner radius of the collapse toggle button.
31
+ * Aliased to --bs-border-radius-100.
32
+ * @prop --bs-navigation-drawer-collapse-hover: Collapse toggle background on hover. Aliased to
33
+ * --bs-color-neutral-container.
34
+ * @prop --bs-navigation-drawer-collapse-pressed: Collapse toggle background when pressed.
35
+ * Aliased to --bs-color-neutral-container-pressed.
36
+ * @prop --bs-navigation-drawer-collapse-icon: Collapse toggle icon color. Aliased to
37
+ * --bs-icon-default.
38
+ * @prop --bs-navigation-drawer-items-gap: Gap between top-level item rows in the items list.
39
+ * Aliased to --bs-spacing-100.
40
+ * @prop --bs-navigation-drawer-collapsed-width: Width of the drawer when `collapsed`. 96px, per
41
+ * Figma node 8028:135374's own frame ("Type=Collapsed").
42
+ * @prop --bs-navigation-drawer-search-trigger-size: Width/height of the compact search-trigger
43
+ * button shown instead of the `search` slot while `collapsed`. 44px, per Figma.
44
+ * @prop --bs-navigation-drawer-search-trigger-bg: Search-trigger background. Aliased to
45
+ * --bs-color-neutral-container (Figma's "button/neutral-container" tonal fill).
46
+ * @prop --bs-navigation-drawer-search-trigger-border: Search-trigger border color. Aliased to
47
+ * --bs-border-neutral-container (same border color as the drawer's own right edge).
48
+ * @prop --bs-navigation-drawer-search-trigger-icon: Search-trigger icon color. Aliased to
49
+ * --bs-icon-default.
50
+ */
51
+ :host {
52
+ display: block;
53
+
54
+ --bs-navigation-drawer-bg: var(--bs-surface-base);
55
+ --bs-navigation-drawer-border: var(--bs-border-neutral-container);
56
+ --bs-navigation-drawer-padding-y: var(--bs-spacing-300);
57
+ --bs-navigation-drawer-padding-left: var(--bs-spacing-300);
58
+ --bs-navigation-drawer-padding-right: var(--bs-spacing-200);
59
+ --bs-navigation-drawer-gap: var(--bs-spacing-300);
60
+ --bs-navigation-drawer-width: 280px;
61
+
62
+ --bs-navigation-drawer-title-font-family: var(--bs-typography-font-family-heading);
63
+ --bs-navigation-drawer-title-font-weight: var(--bs-font-weight-bold);
64
+ --bs-navigation-drawer-title-font-size: var(--bs-font-size-md);
65
+ --bs-navigation-drawer-title-line-height: var(--bs-line-height-heading-h6);
66
+ --bs-navigation-drawer-title-color: var(--bs-text-default);
67
+
68
+ --bs-navigation-drawer-collapse-size: 48px;
69
+ --bs-navigation-drawer-collapse-radius: var(--bs-border-radius-100);
70
+ --bs-navigation-drawer-collapse-hover: var(--bs-color-neutral-container);
71
+ --bs-navigation-drawer-collapse-pressed: var(--bs-color-neutral-container-pressed);
72
+ --bs-navigation-drawer-collapse-icon: var(--bs-icon-default);
73
+
74
+ --bs-navigation-drawer-items-gap: var(--bs-spacing-100);
75
+
76
+ --bs-navigation-drawer-collapsed-width: 96px;
77
+
78
+ --bs-navigation-drawer-search-trigger-size: 44px;
79
+ --bs-navigation-drawer-search-trigger-bg: var(--bs-color-neutral-container);
80
+ --bs-navigation-drawer-search-trigger-border: var(--bs-border-neutral-container);
81
+ --bs-navigation-drawer-search-trigger-icon: var(--bs-icon-default);
82
+ }
83
+
84
+ .bs-navigation-drawer {
85
+ box-sizing: border-box;
86
+ display: flex;
87
+ flex-direction: column;
88
+ gap: var(--bs-navigation-drawer-gap);
89
+ width: var(--bs-navigation-drawer-width);
90
+ height: 100%;
91
+ background: var(--bs-navigation-drawer-bg);
92
+ border-right: 1px solid var(--bs-navigation-drawer-border);
93
+ padding: var(--bs-navigation-drawer-padding-y) var(--bs-navigation-drawer-padding-right) var(--bs-navigation-drawer-padding-y)
94
+ var(--bs-navigation-drawer-padding-left);
95
+ font-family: inherit;
96
+ transition:
97
+ width var(--bs-duration-fast) var(--bs-easing-standard),
98
+ padding var(--bs-duration-fast) var(--bs-easing-standard);
99
+ }
100
+
101
+ /* Figma's collapsed rail is `px-0` (no horizontal padding at all) and horizontally centers every
102
+ child -- logo/collapse button/search trigger all have less width than the 96px rail and center
103
+ within it; the items list stays full-width since collapsed items lay themselves out centered
104
+ internally instead (see bs-navigation-drawer-item.css). */
105
+ :host([collapsed]) .bs-navigation-drawer {
106
+ width: var(--bs-navigation-drawer-collapsed-width);
107
+ padding-left: 0;
108
+ padding-right: 0;
109
+ align-items: center;
110
+ }
111
+
112
+ .bs-navigation-drawer__logo {
113
+ flex-shrink: 0;
114
+ display: flex;
115
+ align-items: center;
116
+ }
117
+
118
+ /* The full-wordmark logo shows by default; the icon-only mark (a real second bs-logo asset, not a
119
+ CSS crop of the full one) takes over while collapsed -- see the :host([collapsed]) rules below,
120
+ the same visibility-toggle pattern already used for .bs-navigation-drawer__search /
121
+ .bs-navigation-drawer__search-trigger further down. */
122
+ .bs-navigation-drawer__logo--mark {
123
+ display: none;
124
+ }
125
+
126
+ :host([collapsed]) .bs-navigation-drawer__logo--full {
127
+ display: none;
128
+ }
129
+
130
+ :host([collapsed]) .bs-navigation-drawer__logo--mark {
131
+ display: flex;
132
+ }
133
+
134
+ .bs-navigation-drawer__title-row {
135
+ flex-shrink: 0;
136
+ display: flex;
137
+ align-items: center;
138
+ gap: var(--bs-navigation-drawer-gap);
139
+ }
140
+
141
+ .bs-navigation-drawer__title {
142
+ flex: 1;
143
+ min-width: 0;
144
+ font-family: var(--bs-navigation-drawer-title-font-family);
145
+ font-weight: var(--bs-navigation-drawer-title-font-weight);
146
+ font-size: var(--bs-navigation-drawer-title-font-size);
147
+ line-height: calc(var(--bs-navigation-drawer-title-line-height) * 1px);
148
+ color: var(--bs-navigation-drawer-title-color);
149
+ overflow: hidden;
150
+ text-overflow: ellipsis;
151
+ white-space: nowrap;
152
+ }
153
+
154
+ /* The heading text is purely visual here -- the <nav> itself carries the same text as its own
155
+ aria-label (see bs-navigation-drawer.tsx), so the landmark stays named even with this hidden. */
156
+ :host([collapsed]) .bs-navigation-drawer__title {
157
+ display: none;
158
+ }
159
+
160
+ .bs-navigation-drawer__collapse {
161
+ flex-shrink: 0;
162
+ display: inline-flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ box-sizing: border-box;
166
+ width: var(--bs-navigation-drawer-collapse-size);
167
+ height: var(--bs-navigation-drawer-collapse-size);
168
+ border: none;
169
+ border-radius: var(--bs-navigation-drawer-collapse-radius);
170
+ padding: 0;
171
+ background: transparent;
172
+ color: var(--bs-navigation-drawer-collapse-icon);
173
+ cursor: pointer;
174
+ transition: background-color var(--bs-duration-fast) var(--bs-easing-standard);
175
+ }
176
+
177
+ .bs-navigation-drawer__collapse svg {
178
+ width: 24px;
179
+ height: 24px;
180
+ }
181
+
182
+ /* Deliberately no rotation on `collapsed`, unlike bs-navigation-drawer-item's own disclosure
183
+ chevron -- Figma's collapsed mock (node 8028:135374) reuses the identical left-pointing
184
+ "CaretLeft" asset unrotated, confirmed by directly inspecting that state, not assumed. */
185
+
186
+ .bs-navigation-drawer__collapse:hover {
187
+ background: var(--bs-navigation-drawer-collapse-hover);
188
+ }
189
+
190
+ .bs-navigation-drawer__collapse:active {
191
+ background: var(--bs-navigation-drawer-collapse-pressed);
192
+ }
193
+
194
+ .bs-navigation-drawer__collapse:focus-visible {
195
+ outline: 2px solid var(--bs-border-neutral-focus);
196
+ outline-offset: 2px;
197
+ }
198
+
199
+ .bs-navigation-drawer__search {
200
+ flex-shrink: 0;
201
+ width: 100%;
202
+ }
203
+
204
+ :host([collapsed]) .bs-navigation-drawer__search {
205
+ display: none;
206
+ }
207
+
208
+ /* Compact search-trigger button, shown only while `collapsed` (Figma's second "Icon Button" in
209
+ the collapsed rail, a tonal/neutral-container 44x44 button) -- replaces the `search` slot,
210
+ which this component can't meaningfully shrink to icon size on its own since it doesn't know
211
+ what's actually slotted there. See bs-navigation-drawer.tsx's bsSearchClick doc. */
212
+ .bs-navigation-drawer__search-trigger {
213
+ display: none;
214
+ flex-shrink: 0;
215
+ align-items: center;
216
+ justify-content: center;
217
+ box-sizing: border-box;
218
+ width: var(--bs-navigation-drawer-search-trigger-size);
219
+ height: var(--bs-navigation-drawer-search-trigger-size);
220
+ border: 1px solid var(--bs-navigation-drawer-search-trigger-border);
221
+ border-radius: var(--bs-navigation-drawer-collapse-radius);
222
+ background: var(--bs-navigation-drawer-search-trigger-bg);
223
+ color: var(--bs-navigation-drawer-search-trigger-icon);
224
+ cursor: pointer;
225
+ transition: background-color var(--bs-duration-fast) var(--bs-easing-standard);
226
+ }
227
+
228
+ .bs-navigation-drawer__search-trigger svg {
229
+ width: 24px;
230
+ height: 24px;
231
+ }
232
+
233
+ .bs-navigation-drawer__search-trigger:focus-visible {
234
+ outline: 2px solid var(--bs-border-neutral-focus);
235
+ outline-offset: 2px;
236
+ }
237
+
238
+ :host([collapsed]) .bs-navigation-drawer__search-trigger {
239
+ display: inline-flex;
240
+ }
241
+
242
+ .bs-navigation-drawer__items {
243
+ flex: 1;
244
+ min-height: 0;
245
+ overflow-y: auto;
246
+ display: flex;
247
+ flex-direction: column;
248
+ gap: var(--bs-navigation-drawer-items-gap);
249
+ /* Scrolling stays fully functional (overflow-y: auto above) -- only the scrollbar's own visual
250
+ chrome is hidden, cross-browser: scrollbar-width for Firefox, ::-webkit-scrollbar for
251
+ Chromium/Safari (no standard property covers both). */
252
+ scrollbar-width: none;
253
+ }
254
+
255
+ .bs-navigation-drawer__items::-webkit-scrollbar {
256
+ display: none;
257
+ }