@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
@@ -195,7 +195,7 @@
195
195
  "customElement": true,
196
196
  "tagName": "bs-attachment",
197
197
  "name": "BsAttachment",
198
- "description": "A single file attachment preview for `bs-composer` -- an image thumbnail, or a filename card\nwith a colored file-type badge (PDF/Document), with an optional upload-in-progress spinner and\na hover/focus-revealed remove button.\n\n## When to use\n- Rendered by the consuming app for each file a user has attached to a Genie AI chat message,\n typically alongside or inside `bs-composer`.\n\n## When not to use\n- A generic file-upload control -- this is a preview-only presentational component. The\n consuming app owns the actual file picker/upload logic and drives `loading` from that state.",
198
+ "description": "A single file attachment preview for `bs-composer` -- an image thumbnail, or a filename card\nwith a colored file-type badge (PDF/Document), with an optional upload-in-progress spinner and\na hover/focus-revealed remove button (a `bs-icon-button` with `size=\"xs\"` `variant=\"neutral\"` --\nthe same 16x16px compact tier `bs-icon-button` documents as meant for exactly this kind of\nchip/tag \"remove\" control).\n\n## When to use\n- Rendered by the consuming app for each file a user has attached to a Genie AI chat message,\n typically alongside or inside `bs-composer`.\n\n## When not to use\n- A generic file-upload control -- this is a preview-only presentational component. The\n consuming app owns the actual file picker/upload logic and drives `loading` from that state.",
199
199
  "attributes": [
200
200
  {
201
201
  "name": "file-name",
@@ -524,7 +524,7 @@
524
524
  },
525
525
  {
526
526
  "kind": "javascript-module",
527
- "path": "src/components/bs-button/bs-button.tsx",
527
+ "path": "src/components/bs-button/bs-button/bs-button.tsx",
528
528
  "declarations": [
529
529
  {
530
530
  "kind": "class",
@@ -722,7 +722,7 @@
722
722
  "references": [
723
723
  {
724
724
  "name": "BsButtonSize",
725
- "module": "../bs-button/bs-button"
725
+ "module": "../bs-button/bs-button/bs-button"
726
726
  }
727
727
  ]
728
728
  },
@@ -740,7 +740,7 @@
740
740
  "references": [
741
741
  {
742
742
  "name": "BsButtonSize",
743
- "module": "../bs-button/bs-button"
743
+ "module": "../bs-button/bs-button/bs-button"
744
744
  }
745
745
  ]
746
746
  },
@@ -1579,6 +1579,15 @@
1579
1579
  "name": "BsCheckbox",
1580
1580
  "description": "A single checkbox with its label, for a binary choice or one item within a group of independent\nchoices.\n\n## When to use\n- A single standalone binary setting (e.g. \"Remember me\", \"I agree to the terms\").\n- One item within a set of independent, non-exclusive choices (a checkbox group/list).\n- `indeterminate` for a \"select all\" checkbox representing a partially-selected group.\n\n## When not to use\n- A single mutually-exclusive choice from a set -- use a radio group instead.\n- An on/off setting that takes effect immediately (no explicit form submission) -- use `bs-switch`.",
1581
1581
  "attributes": [
1582
+ {
1583
+ "name": "aria-label",
1584
+ "description": "Accessible name for the checkbox. Required whenever the default (label) slot is empty (e.g. a\nbare \"select row\" checkbox in a table) -- without it, the internal native `<input>` has no\naccessible name at all. Setting `aria-label` directly on the `<bs-checkbox>` host does NOT\nwork for this: that attribute stays on the light-DOM host and is never forwarded into the\nshadow DOM by the browser, so the actual focusable element (the native `<input>` inside) stays\nnameless. This prop exists specifically to bridge that gap -- same pattern as `bs-button`'s and\n`bs-tab`'s identical `ariaLabel` prop, both of which explicitly bind it onto their own internal\nfocusable element for the same reason.",
1585
+ "type": {
1586
+ "text": "string"
1587
+ },
1588
+ "default": "null",
1589
+ "fieldName": "ariaLabel"
1590
+ },
1582
1591
  {
1583
1592
  "name": "checked",
1584
1593
  "description": "Whether the checkbox is checked. Mutable so clicking the label/input toggles it directly.\nWhen `indeterminate` is also true, `indeterminate` wins visually (shows the minus icon)\nregardless of this value -- same as native checkboxes.",
@@ -1631,6 +1640,17 @@
1631
1640
  }
1632
1641
  ],
1633
1642
  "members": [
1643
+ {
1644
+ "kind": "field",
1645
+ "name": "ariaLabel",
1646
+ "description": "Accessible name for the checkbox. Required whenever the default (label) slot is empty (e.g. a\nbare \"select row\" checkbox in a table) -- without it, the internal native `<input>` has no\naccessible name at all. Setting `aria-label` directly on the `<bs-checkbox>` host does NOT\nwork for this: that attribute stays on the light-DOM host and is never forwarded into the\nshadow DOM by the browser, so the actual focusable element (the native `<input>` inside) stays\nnameless. This prop exists specifically to bridge that gap -- same pattern as `bs-button`'s and\n`bs-tab`'s identical `ariaLabel` prop, both of which explicitly bind it onto their own internal\nfocusable element for the same reason.",
1647
+ "type": {
1648
+ "text": "string"
1649
+ },
1650
+ "default": "null",
1651
+ "readonly": true,
1652
+ "attribute": "aria-label"
1653
+ },
1634
1654
  {
1635
1655
  "kind": "field",
1636
1656
  "name": "checked",
@@ -1898,7 +1918,7 @@
1898
1918
  },
1899
1919
  {
1900
1920
  "name": "value",
1901
- "description": "Current text value. Native `input` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as a `bsInput` custom event instead.",
1921
+ "description": "Current text value. Native `input` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as a `bsInput` custom event instead.\n\nThe field is a `<textarea>` (not a single-line `<input>`) that grows with its content, up to\n`--bs-composer-input-max-lines` (10 by default) -- beyond that it scrolls internally instead\nof growing further. Setting `value` as a prop (not just typing) also re-triggers the resize,\nso e.g. programmatically clearing the field after submit correctly shrinks it back down.",
1902
1922
  "type": {
1903
1923
  "text": "string"
1904
1924
  },
@@ -1961,7 +1981,7 @@
1961
1981
  {
1962
1982
  "kind": "field",
1963
1983
  "name": "value",
1964
- "description": "Current text value. Native `input` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as a `bsInput` custom event instead.",
1984
+ "description": "Current text value. Native `input` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as a `bsInput` custom event instead.\n\nThe field is a `<textarea>` (not a single-line `<input>`) that grows with its content, up to\n`--bs-composer-input-max-lines` (10 by default) -- beyond that it scrolls internally instead\nof growing further. Setting `value` as a prop (not just typing) also re-triggers the resize,\nso e.g. programmatically clearing the field after submit correctly shrinks it back down.",
1965
1985
  "type": {
1966
1986
  "text": "string"
1967
1987
  },
@@ -2055,7 +2075,7 @@
2055
2075
  },
2056
2076
  {
2057
2077
  "name": "input",
2058
- "description": "The native text `<input>`."
2078
+ "description": "The native text `<textarea>`."
2059
2079
  },
2060
2080
  {
2061
2081
  "name": "mic",
@@ -2090,7 +2110,7 @@
2090
2110
  "customElement": true,
2091
2111
  "tagName": "bs-composer-status-banner",
2092
2112
  "name": "BsComposerStatusBanner",
2093
- "description": "A full-width status banner for use directly above `bs-composer`, surfacing a message about the\ncomposer's current state (e.g. a send failure, an informational notice) with an optional\n\"Continue\"-style action button and an optional close button.\n\n## When to use\n- A message tied to the composer itself (send failed, rate-limited, draft restored, etc.) that\n needs to sit directly above it, not a general-purpose alert -- see `CONVENTIONS.md` if this\n library gains a generic banner/alert component later, and prefer that instead once it exists.\n\n## When not to use\n- A toast/snackbar notification unrelated to the composer -- this component is not\n self-dismissing and has no positioning of its own (it's a static block, not an overlay).",
2113
+ "description": "A full-width status banner for use directly above `bs-composer`, surfacing a message about the\ncomposer's current state (e.g. a send failure, an informational notice) with an optional\n\"Continue\"-style action button and an optional close button.\n\n## When to use\n- A message tied to the composer itself (send failed, rate-limited, draft restored, etc.) that\n needs to sit directly above it, not a general-purpose alert -- see `CONVENTIONS.md` if this\n library gains a generic banner/alert component later, and prefer that instead once it exists.\n\n## When not to use\n- A toast/snackbar notification unrelated to the composer -- this component is not\n self-dismissing and has no positioning of its own (it's a static block, not an overlay).\n\n## Accessibility\nSets `role=\"status\"` for `type=\"info\"`/`type=\"neutral\"` and `role=\"alert\"` for\n`type=\"error\"`/`type=\"warning\"` on its own root element automatically -- no opt-in prop needed.\nBoth roles carry implicit ARIA live-region semantics (`status` is polite, `alert` is assertive),\nso a screen reader announces the message as soon as this banner is inserted into the DOM,\nwithout a consumer having to remember to add `role`/`aria-live` themselves.",
2094
2114
  "attributes": [
2095
2115
  {
2096
2116
  "name": "action-label",
@@ -2458,33 +2478,27 @@
2458
2478
  },
2459
2479
  {
2460
2480
  "kind": "javascript-module",
2461
- "path": "src/components/bs-input/bs-input.tsx",
2481
+ "path": "src/components/bs-button/bs-icon-button/bs-icon-button.tsx",
2462
2482
  "declarations": [
2463
2483
  {
2464
2484
  "kind": "class",
2465
2485
  "customElement": true,
2466
- "tagName": "bs-input",
2467
- "name": "BsInput",
2468
- "description": "A single-line text field with an optional label, description, and error state. Also covers a\nrange of related \"field\" shapes (number stepper, password reveal, date, dropdown trigger,\nselect, textarea, chip input, initials, country, and pin) via the `type` prop, since they all\nshare the same label/description/error/icon-slot chrome.\n\n## When to use\n- Collecting a single line of free-text, email, password, or numeric input.\n- Any of the other supported `type`s (search, date, dropdown, select, textarea, chip, initials,\n country, pin) that share this component's label/description/error chrome.\n- Pair with `error` for inline validation feedback tied to that specific field.\n\n## When not to use\n- A fixed set of choices best served by a dedicated radio/checkbox group rather than a single\n field. `type=\"select\"` (native `<select>`) and `type=\"dropdown\"` (a `bs-menu` of\n `bs-menu-item`s from the `options` prop) cover the field-shaped cases; `type=\"chip\"` has no\n options list at all (freeform chip entry).",
2486
+ "tagName": "bs-icon-button",
2487
+ "name": "BsIconButton",
2488
+ "description": "A clickable, icon-only action element -- the icon-only sibling of `bs-button`, sharing the same\n8 visual variants and color language, but ALWAYS rendering just a single icon, never a label.\n\n## When to use\n- A compact action where the icon alone is unambiguous (e.g. a close/dismiss control, a toolbar\n action) and adding a text label would take up more space than the context allows.\n- The same variant guidance as `bs-button` applies: `primary` for the single most important\n action, `neutral`/`subtle`/`outlined` for lower-emphasis alternatives, `error` reserved for\n destructive/irreversible actions (never `neutral`, per BrandSync guidance), `success`/\n `warning`/`info` only when the action's own outcome is predictable and clearly communicated.\n\n## When not to use\n- When the action isn't self-evident from the icon alone -- use `bs-button` with a visible label\n instead, don't rely on a tooltip to compensate for an unclear icon.\n- For navigation between pages -- use a link/nav component instead.\n\nBecause this component is always icon-only, `ariaLabel` is required for every real usage (not\njust conditionally, unlike `bs-button`) -- there's no visible label text to fall back on for an\naccessible name.",
2469
2489
  "attributes": [
2470
2490
  {
2471
- "name": "country",
2472
- "description": "Current selected country code for `type=\"country\"`.",
2473
- "type": {
2474
- "text": "string"
2475
- },
2476
- "default": "''",
2477
- "fieldName": "country"
2478
- },
2479
- {
2480
- "name": "description",
2491
+ "name": "aria-label",
2492
+ "description": "Accessible name for the button. Required -- this component is always icon-only, so there's\nno visible label text for screen readers to fall back on. Stencil reflects this camelCase\nprop to the `aria-label` HTML attribute automatically.",
2481
2493
  "type": {
2482
2494
  "text": "string"
2483
2495
  },
2484
- "fieldName": "description"
2496
+ "default": "null",
2497
+ "fieldName": "ariaLabel"
2485
2498
  },
2486
2499
  {
2487
2500
  "name": "disabled",
2501
+ "description": "Disables the button and applies the disabled token set.",
2488
2502
  "type": {
2489
2503
  "text": "boolean"
2490
2504
  },
@@ -2492,520 +2506,318 @@
2492
2506
  "fieldName": "disabled"
2493
2507
  },
2494
2508
  {
2495
- "name": "error",
2509
+ "name": "size",
2510
+ "description": "Sizing scale. `xs` (16px, an 8px icon) is a distinct, much smaller tier meant for compact\nchip/tag \"remove\" controls, not just a smaller toolbar button -- verified against a separate\nFigma redline (EG BrandSync UI Kit v1.5, node 20731:18427) from the one `sm`/`md`/`lg` were\nbuilt against.",
2496
2511
  "type": {
2497
- "text": "string"
2512
+ "text": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
2513
+ "references": [
2514
+ {
2515
+ "name": "BsIconButtonSize"
2516
+ }
2517
+ ]
2498
2518
  },
2499
- "fieldName": "error"
2519
+ "default": "'md'",
2520
+ "fieldName": "size"
2500
2521
  },
2501
2522
  {
2502
- "name": "initials-title",
2503
- "description": "Current selected title for `type=\"initials\"`. Named `initialsTitle` rather than `title` --\n`title` is a reserved standard HTML attribute (tooltip text) inherited by every element, and\nStencil warns against shadowing it with a component `@Prop`.",
2523
+ "name": "type",
2524
+ "description": "Native `<button>` type.",
2504
2525
  "type": {
2505
- "text": "string"
2526
+ "text": "\"button\" | \"reset\" | \"submit\""
2506
2527
  },
2507
- "default": "''",
2508
- "fieldName": "initialsTitle"
2528
+ "default": "'button'",
2529
+ "fieldName": "type"
2509
2530
  },
2510
2531
  {
2511
- "name": "label",
2532
+ "name": "variant",
2533
+ "description": "Visual style. Maps to the same semantic token families as `bs-button`'s `variant`.\n`error` is for destructive/irreversible actions per BrandSync guidance, not a stronger\nemphasis alternative to `primary`.",
2512
2534
  "type": {
2513
- "text": "string"
2535
+ "text": "\"error\" | \"info\" | \"neutral\" | \"outlined\" | \"primary\" | \"subtle\" | \"success\" | \"warning\"",
2536
+ "references": [
2537
+ {
2538
+ "name": "BsIconButtonVariant"
2539
+ }
2540
+ ]
2514
2541
  },
2515
- "fieldName": "label"
2516
- },
2542
+ "default": "'primary'",
2543
+ "fieldName": "variant"
2544
+ }
2545
+ ],
2546
+ "members": [
2517
2547
  {
2518
- "name": "length",
2519
- "description": "Number of cells for `type=\"pin\"`.",
2548
+ "kind": "field",
2549
+ "name": "ariaLabel",
2550
+ "description": "Accessible name for the button. Required -- this component is always icon-only, so there's\nno visible label text for screen readers to fall back on. Stencil reflects this camelCase\nprop to the `aria-label` HTML attribute automatically.",
2520
2551
  "type": {
2521
- "text": "number"
2552
+ "text": "string"
2522
2553
  },
2523
- "default": "4",
2524
- "fieldName": "length"
2554
+ "default": "null",
2555
+ "readonly": true,
2556
+ "attribute": "aria-label"
2525
2557
  },
2526
2558
  {
2527
- "name": "max",
2528
- "description": "Maximum value for `type=\"number\"`'s stepper buttons.",
2559
+ "kind": "field",
2560
+ "name": "disabled",
2561
+ "description": "Disables the button and applies the disabled token set.",
2529
2562
  "type": {
2530
- "text": "number"
2563
+ "text": "boolean"
2531
2564
  },
2532
- "fieldName": "max"
2565
+ "default": "false",
2566
+ "readonly": true,
2567
+ "attribute": "disabled"
2533
2568
  },
2534
2569
  {
2535
- "name": "min",
2536
- "description": "Minimum value for `type=\"number\"`'s stepper buttons.",
2570
+ "kind": "field",
2571
+ "name": "size",
2572
+ "description": "Sizing scale. `xs` (16px, an 8px icon) is a distinct, much smaller tier meant for compact\nchip/tag \"remove\" controls, not just a smaller toolbar button -- verified against a separate\nFigma redline (EG BrandSync UI Kit v1.5, node 20731:18427) from the one `sm`/`md`/`lg` were\nbuilt against.",
2537
2573
  "type": {
2538
- "text": "number"
2574
+ "text": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
2575
+ "references": [
2576
+ {
2577
+ "name": "BsIconButtonSize"
2578
+ }
2579
+ ]
2539
2580
  },
2540
- "fieldName": "min"
2581
+ "default": "'md'",
2582
+ "readonly": true,
2583
+ "attribute": "size"
2541
2584
  },
2542
2585
  {
2543
- "name": "open",
2544
- "description": "Whether the `type=\"dropdown\"` trigger is open. Reflects to an attribute so consumers can style\nan open state via CSS. When `options` is non-empty, this also controls whether the `bs-menu`\nof `bs-menu-item`s is rendered below the field.",
2586
+ "kind": "field",
2587
+ "name": "type",
2588
+ "description": "Native `<button>` type.",
2545
2589
  "type": {
2546
- "text": "boolean"
2590
+ "text": "\"button\" | \"reset\" | \"submit\""
2547
2591
  },
2548
- "default": "false",
2549
- "fieldName": "open"
2592
+ "default": "'button'",
2593
+ "readonly": true,
2594
+ "attribute": "type"
2550
2595
  },
2551
2596
  {
2552
- "name": "placeholder",
2597
+ "kind": "field",
2598
+ "name": "variant",
2599
+ "description": "Visual style. Maps to the same semantic token families as `bs-button`'s `variant`.\n`error` is for destructive/irreversible actions per BrandSync guidance, not a stronger\nemphasis alternative to `primary`.",
2553
2600
  "type": {
2554
- "text": "string"
2601
+ "text": "\"error\" | \"info\" | \"neutral\" | \"outlined\" | \"primary\" | \"subtle\" | \"success\" | \"warning\"",
2602
+ "references": [
2603
+ {
2604
+ "name": "BsIconButtonVariant"
2605
+ }
2606
+ ]
2555
2607
  },
2556
- "fieldName": "placeholder"
2608
+ "default": "'primary'",
2609
+ "readonly": true,
2610
+ "attribute": "variant"
2611
+ }
2612
+ ],
2613
+ "slots": [
2614
+ {
2615
+ "name": "",
2616
+ "description": "Default slot: the icon content. Exactly one icon, no label."
2617
+ }
2618
+ ],
2619
+ "cssParts": [
2620
+ {
2621
+ "name": "icon",
2622
+ "description": "The icon wrapper element."
2623
+ }
2624
+ ],
2625
+ "cssProperties": [
2626
+ {
2627
+ "name": "--bs-icon-button-error-default",
2628
+ "description": "Background, variant=\"error\", default. Aliased to --bs-color-error-default."
2557
2629
  },
2558
2630
  {
2559
- "name": "required",
2560
- "description": "Marks the field as required: renders a red `*` after the label and sets `aria-required=\"true\"`\non the control. Applies regardless of `type`.",
2561
- "type": {
2562
- "text": "boolean"
2563
- },
2564
- "default": "false",
2565
- "fieldName": "required"
2631
+ "name": "--bs-icon-button-error-disabled",
2632
+ "description": "Background, variant=\"error\", disabled. Aliased to --bs-surface-action-disabled."
2566
2633
  },
2567
2634
  {
2568
- "name": "rows",
2569
- "description": "Number of visible rows for `type=\"textarea\"`.",
2570
- "type": {
2571
- "text": "number"
2572
- },
2573
- "default": "3",
2574
- "fieldName": "rows"
2635
+ "name": "--bs-icon-button-error-focus",
2636
+ "description": "Focus ring color, variant=\"error\". Aliased to --bs-border-error-focus."
2575
2637
  },
2576
2638
  {
2577
- "name": "step",
2578
- "description": "Step size for `type=\"number\"`'s increment/decrement stepper buttons.",
2579
- "type": {
2580
- "text": "number"
2581
- },
2582
- "default": "1",
2583
- "fieldName": "step"
2639
+ "name": "--bs-icon-button-error-hover",
2640
+ "description": "Background, variant=\"error\", hover. Aliased to --bs-color-error-hover."
2584
2641
  },
2585
2642
  {
2586
- "name": "type",
2587
- "type": {
2588
- "text": "\"chip\" | \"country\" | \"date\" | \"dropdown\" | \"email\" | \"initials\" | \"number\" | \"password\" | \"pin\" | \"search\" | \"select\" | \"text\" | \"textarea\""
2589
- },
2590
- "default": "'text'",
2591
- "fieldName": "type"
2643
+ "name": "--bs-icon-button-error-pressed",
2644
+ "description": "Background, variant=\"error\", pressed. Aliased to --bs-color-error-pressed."
2592
2645
  },
2593
2646
  {
2594
- "name": "value",
2595
- "description": "Current value. Native `input`/`change` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as `bsInput`/`bsChange` custom events instead. Mutable so the\n`number` type's stepper buttons can update it directly.",
2596
- "type": {
2597
- "text": "string"
2598
- },
2599
- "default": "''",
2600
- "fieldName": "value"
2601
- }
2602
- ],
2603
- "members": [
2647
+ "name": "--bs-icon-button-icon-size-lg",
2648
+ "description": "Slotted icon width/height at size=\"lg\". 24px."
2649
+ },
2604
2650
  {
2605
- "kind": "field",
2606
- "name": "chips",
2607
- "description": "Current chips for `type=\"chip\"`. Must be set as a JS property, not an HTML attribute -- see\nCONVENTIONS.md's non-string props rule.",
2608
- "type": {
2609
- "text": "string[]"
2610
- },
2611
- "default": "[]",
2612
- "readonly": true
2651
+ "name": "--bs-icon-button-icon-size-md",
2652
+ "description": "Slotted icon width/height at size=\"md\". 20px."
2613
2653
  },
2614
2654
  {
2615
- "kind": "field",
2616
- "name": "country",
2617
- "description": "Current selected country code for `type=\"country\"`.",
2618
- "type": {
2619
- "text": "string"
2620
- },
2621
- "default": "''",
2622
- "readonly": true,
2623
- "attribute": "country"
2655
+ "name": "--bs-icon-button-icon-size-sm",
2656
+ "description": "Slotted icon width/height at size=\"sm\". 16px."
2624
2657
  },
2625
2658
  {
2626
- "kind": "field",
2627
- "name": "countryOptions",
2628
- "description": "Country select options for `type=\"country\"`. Must be set as a JS property, not an HTML\nattribute -- see CONVENTIONS.md's non-string props rule.",
2629
- "type": {
2630
- "text": "{ code: string; label: string; flagIcon?: string; }[]"
2631
- },
2632
- "default": "[]",
2633
- "readonly": true
2659
+ "name": "--bs-icon-button-icon-size-xs",
2660
+ "description": "Slotted icon width/height at size=\"xs\". 8px."
2634
2661
  },
2635
2662
  {
2636
- "kind": "field",
2637
- "name": "description",
2638
- "type": {
2639
- "text": "string"
2640
- },
2641
- "readonly": true,
2642
- "attribute": "description"
2663
+ "name": "--bs-icon-button-info-default",
2664
+ "description": "Background, variant=\"info\", default. Aliased to --bs-color-info-default."
2643
2665
  },
2644
2666
  {
2645
- "kind": "field",
2646
- "name": "disabled",
2647
- "type": {
2648
- "text": "boolean"
2649
- },
2650
- "default": "false",
2651
- "readonly": true,
2652
- "attribute": "disabled"
2667
+ "name": "--bs-icon-button-info-disabled",
2668
+ "description": "Background, variant=\"info\", disabled. Aliased to --bs-surface-action-disabled."
2653
2669
  },
2654
2670
  {
2655
- "kind": "field",
2656
- "name": "error",
2657
- "type": {
2658
- "text": "string"
2659
- },
2660
- "readonly": true,
2661
- "attribute": "error"
2671
+ "name": "--bs-icon-button-info-focus",
2672
+ "description": "Focus ring color, variant=\"info\". Aliased to --bs-border-info-focus."
2662
2673
  },
2663
2674
  {
2664
- "kind": "field",
2665
- "name": "initialsTitle",
2666
- "description": "Current selected title for `type=\"initials\"`. Named `initialsTitle` rather than `title` --\n`title` is a reserved standard HTML attribute (tooltip text) inherited by every element, and\nStencil warns against shadowing it with a component `@Prop`.",
2667
- "type": {
2668
- "text": "string"
2669
- },
2670
- "default": "''",
2671
- "readonly": true,
2672
- "attribute": "initials-title"
2675
+ "name": "--bs-icon-button-info-hover",
2676
+ "description": "Background, variant=\"info\", hover. Aliased to --bs-color-info-hover."
2673
2677
  },
2674
2678
  {
2675
- "kind": "field",
2676
- "name": "label",
2677
- "type": {
2678
- "text": "string"
2679
- },
2680
- "readonly": true,
2681
- "attribute": "label"
2679
+ "name": "--bs-icon-button-info-pressed",
2680
+ "description": "Background, variant=\"info\", pressed. Aliased to --bs-color-info-pressed."
2682
2681
  },
2683
2682
  {
2684
- "kind": "field",
2685
- "name": "length",
2686
- "description": "Number of cells for `type=\"pin\"`.",
2687
- "type": {
2688
- "text": "number"
2689
- },
2690
- "default": "4",
2691
- "readonly": true,
2692
- "attribute": "length"
2693
- },
2694
- {
2695
- "kind": "field",
2696
- "name": "max",
2697
- "description": "Maximum value for `type=\"number\"`'s stepper buttons.",
2698
- "type": {
2699
- "text": "number"
2700
- },
2701
- "readonly": true,
2702
- "attribute": "max"
2703
- },
2704
- {
2705
- "kind": "field",
2706
- "name": "min",
2707
- "description": "Minimum value for `type=\"number\"`'s stepper buttons.",
2708
- "type": {
2709
- "text": "number"
2710
- },
2711
- "readonly": true,
2712
- "attribute": "min"
2713
- },
2714
- {
2715
- "kind": "field",
2716
- "name": "open",
2717
- "description": "Whether the `type=\"dropdown\"` trigger is open. Reflects to an attribute so consumers can style\nan open state via CSS. When `options` is non-empty, this also controls whether the `bs-menu`\nof `bs-menu-item`s is rendered below the field.",
2718
- "type": {
2719
- "text": "boolean"
2720
- },
2721
- "default": "false",
2722
- "attribute": "open",
2723
- "reflects": true
2724
- },
2725
- {
2726
- "kind": "field",
2727
- "name": "options",
2728
- "description": "Options for `type=\"select\"` (rendered as native `<option>`s) and `type=\"dropdown\"` (rendered\nas a `bs-menu` of `bs-menu-item`s when `open`). Must be set as a JS property, not an HTML\nattribute -- see CONVENTIONS.md's non-string props rule.",
2729
- "type": {
2730
- "text": "{ label: string; value: string; }[]"
2731
- },
2732
- "default": "[]",
2733
- "readonly": true
2734
- },
2735
- {
2736
- "kind": "field",
2737
- "name": "placeholder",
2738
- "type": {
2739
- "text": "string"
2740
- },
2741
- "readonly": true,
2742
- "attribute": "placeholder"
2743
- },
2744
- {
2745
- "kind": "field",
2746
- "name": "required",
2747
- "description": "Marks the field as required: renders a red `*` after the label and sets `aria-required=\"true\"`\non the control. Applies regardless of `type`.",
2748
- "type": {
2749
- "text": "boolean"
2750
- },
2751
- "default": "false",
2752
- "readonly": true,
2753
- "attribute": "required"
2754
- },
2755
- {
2756
- "kind": "field",
2757
- "name": "rows",
2758
- "description": "Number of visible rows for `type=\"textarea\"`.",
2759
- "type": {
2760
- "text": "number"
2761
- },
2762
- "default": "3",
2763
- "readonly": true,
2764
- "attribute": "rows"
2765
- },
2766
- {
2767
- "kind": "field",
2768
- "name": "step",
2769
- "description": "Step size for `type=\"number\"`'s increment/decrement stepper buttons.",
2770
- "type": {
2771
- "text": "number"
2772
- },
2773
- "default": "1",
2774
- "readonly": true,
2775
- "attribute": "step"
2776
- },
2777
- {
2778
- "kind": "field",
2779
- "name": "titleOptions",
2780
- "description": "Title select options for `type=\"initials\"` (e.g. `['Mrs.', 'Mr.', 'Dr.']`). Must be set as a\nJS property, not an HTML attribute -- see CONVENTIONS.md's non-string props rule.",
2781
- "type": {
2782
- "text": "string[]"
2783
- },
2784
- "default": "[]",
2785
- "readonly": true
2786
- },
2787
- {
2788
- "kind": "field",
2789
- "name": "type",
2790
- "type": {
2791
- "text": "\"chip\" | \"country\" | \"date\" | \"dropdown\" | \"email\" | \"initials\" | \"number\" | \"password\" | \"pin\" | \"search\" | \"select\" | \"text\" | \"textarea\""
2792
- },
2793
- "default": "'text'",
2794
- "readonly": true,
2795
- "attribute": "type"
2796
- },
2797
- {
2798
- "kind": "field",
2799
- "name": "value",
2800
- "description": "Current value. Native `input`/`change` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as `bsInput`/`bsChange` custom events instead. Mutable so the\n`number` type's stepper buttons can update it directly.",
2801
- "type": {
2802
- "text": "string"
2803
- },
2804
- "default": "''",
2805
- "attribute": "value"
2806
- }
2807
- ],
2808
- "events": [
2809
- {
2810
- "name": "bsChange",
2811
- "type": {
2812
- "text": "CustomEvent<string>"
2813
- }
2814
- },
2815
- {
2816
- "name": "bsChipAdd",
2817
- "description": "Emitted when a chip is committed (Enter pressed in the draft input) for `type=\"chip\"`.",
2818
- "type": {
2819
- "text": "CustomEvent<string>"
2820
- }
2821
- },
2822
- {
2823
- "name": "bsChipRemove",
2824
- "description": "Emitted when a chip's remove button is clicked for `type=\"chip\"`.",
2825
- "type": {
2826
- "text": "CustomEvent<string>"
2827
- }
2828
- },
2829
- {
2830
- "name": "bsCountryChange",
2831
- "description": "Emitted when the country `<select>` changes for `type=\"country\"`.",
2832
- "type": {
2833
- "text": "CustomEvent<string>"
2834
- }
2835
- },
2836
- {
2837
- "name": "bsInput",
2838
- "type": {
2839
- "text": "CustomEvent<string>"
2840
- }
2841
- },
2842
- {
2843
- "name": "bsOpen",
2844
- "description": "Emitted when `type=\"dropdown\"`'s trigger is toggled. See `open`'s doc comment for this type's\nshell-only limitation.",
2845
- "type": {
2846
- "text": "CustomEvent<boolean>"
2847
- }
2848
- },
2849
- {
2850
- "name": "bsTitleChange",
2851
- "description": "Emitted when the title `<select>` changes for `type=\"initials\"`.",
2852
- "type": {
2853
- "text": "CustomEvent<string>"
2854
- }
2855
- }
2856
- ],
2857
- "slots": [
2858
- {
2859
- "name": "end-icon",
2860
- "description": "Optional trailing icon, rendered after the native control (e.g. a chevron for a\nfield that opens a picker). Ignored when `type` is `number` (stepper buttons), `password` (show/hide\ntoggle), or `dropdown` (chevron) -- those types always render their own trailing control there.\nFor `type=\"date\"`, the slot is used if provided, otherwise a default calendar icon is shown."
2683
+ "name": "--bs-icon-button-neutral-border",
2684
+ "description": "Border color, variant=\"neutral\", default/disabled. Aliased to --bs-border-neutral-container."
2861
2685
  },
2862
2686
  {
2863
- "name": "icon",
2864
- "description": "Optional leading icon, rendered before the native control (e.g. a mail icon for an\nemail field). For `type=\"search\"`, the slot is used if provided, otherwise a default\nmagnifying-glass icon is shown."
2865
- }
2866
- ],
2867
- "cssParts": [
2868
- {
2869
- "name": "chip",
2870
- "description": "A single chip pill, when `type=\"chip\"`."
2687
+ "name": "--bs-icon-button-neutral-border-hover",
2688
+ "description": "Border color, variant=\"neutral\", hover. Aliased to --bs-border-neutral-container-hover."
2871
2689
  },
2872
2690
  {
2873
- "name": "control",
2874
- "description": "The native control element (`<input>`, `<select>`, or `<textarea>` depending on\n`type`). Composite types (`initials`, `country`) render this part on more than one element."
2691
+ "name": "--bs-icon-button-neutral-border-pressed",
2692
+ "description": "Border color, variant=\"neutral\", pressed. Aliased to --bs-border-neutral-container-pressed."
2875
2693
  },
2876
2694
  {
2877
- "name": "description",
2878
- "description": "The helper text element (hidden when `error` is set)."
2695
+ "name": "--bs-icon-button-neutral-container",
2696
+ "description": "Background, variant=\"neutral\", default/disabled. Aliased to --bs-color-neutral-container."
2879
2697
  },
2880
2698
  {
2881
- "name": "end-icon",
2882
- "description": "The trailing icon wrapper element."
2699
+ "name": "--bs-icon-button-neutral-hover",
2700
+ "description": "Background, variant=\"neutral\", hover. Aliased to --bs-color-neutral-container-hover."
2883
2701
  },
2884
2702
  {
2885
- "name": "error",
2886
- "description": "The error message element."
2703
+ "name": "--bs-icon-button-neutral-pressed",
2704
+ "description": "Background, variant=\"neutral\", pressed. Aliased to --bs-color-neutral-container-pressed."
2887
2705
  },
2888
2706
  {
2889
- "name": "error-icon",
2890
- "description": "The warning icon shown before the error message."
2707
+ "name": "--bs-icon-button-outlined-border",
2708
+ "description": "Border color, variant=\"outlined\", default. Aliased to --bs-border-primary."
2891
2709
  },
2892
2710
  {
2893
- "name": "field",
2894
- "description": "The bordered field wrapper containing the icon(s) and native control(s)."
2711
+ "name": "--bs-icon-button-outlined-border-hover",
2712
+ "description": "Border color, variant=\"outlined\", hover/pressed. Aliased to --bs-border-primary-hover."
2895
2713
  },
2896
2714
  {
2897
- "name": "icon",
2898
- "description": "The leading icon wrapper element."
2715
+ "name": "--bs-icon-button-outlined-container",
2716
+ "description": "Background, variant=\"outlined\", hover/pressed. Aliased to --bs-color-primary-container."
2899
2717
  },
2900
2718
  {
2901
- "name": "label",
2902
- "description": "The `<label>` element."
2719
+ "name": "--bs-icon-button-outlined-focus",
2720
+ "description": "Focus ring color, variant=\"outlined\". Aliased to --bs-border-primary-focus."
2903
2721
  },
2904
2722
  {
2905
- "name": "menu",
2906
- "description": "The `bs-menu` rendered below the field for `type=\"dropdown\"` when `open` and\n`options` is non-empty."
2723
+ "name": "--bs-icon-button-padding",
2724
+ "description": "Padding on all sides, all sizes (constant -- centers the icon inside the container at every size). Aliased to --bs-spacing-150."
2907
2725
  },
2908
2726
  {
2909
- "name": "required",
2910
- "description": "The red `*` rendered after the label text when `required` is set."
2911
- }
2912
- ],
2913
- "cssProperties": [
2914
- {
2915
- "name": "--bs-input-chip-bg",
2916
- "description": "Chip pill background for type=\"chip\". Aliased to --bs-input-bg-disabled."
2727
+ "name": "--bs-icon-button-padding-xs",
2728
+ "description": "Padding on all sides, size=\"xs\" only -- distinct from --bs-icon-button-padding, since 16px/8px icon math (4px) differs from the sm/md/lg constant (12px). Aliased to --bs-spacing-50."
2917
2729
  },
2918
2730
  {
2919
- "name": "--bs-input-chip-text",
2920
- "description": "Chip pill text color for type=\"chip\". Aliased to --bs-input-text."
2731
+ "name": "--bs-icon-button-primary-default",
2732
+ "description": "Background, variant=\"primary\", default. Aliased to --bs-color-primary-default."
2921
2733
  },
2922
2734
  {
2923
- "name": "--bs-input-description-color",
2924
- "description": "Description text color. Aliased to --bs-input-description."
2735
+ "name": "--bs-icon-button-primary-disabled",
2736
+ "description": "Background, variant=\"primary\", disabled. Aliased to --bs-surface-action-disabled."
2925
2737
  },
2926
2738
  {
2927
- "name": "--bs-input-error-color",
2928
- "description": "Error message text color. Aliased to --bs-input-error."
2739
+ "name": "--bs-icon-button-primary-hover",
2740
+ "description": "Background, variant=\"primary\", hover. Aliased to --bs-color-primary-hover."
2929
2741
  },
2930
2742
  {
2931
- "name": "--bs-input-error-icon-size",
2932
- "description": "Width/height of the warning icon shown before the error message. Aliased to --bs-spacing-250."
2743
+ "name": "--bs-icon-button-primary-pressed",
2744
+ "description": "Background, variant=\"primary\", pressed. Aliased to --bs-color-primary-pressed."
2933
2745
  },
2934
2746
  {
2935
- "name": "--bs-input-field-bg",
2936
- "description": "Field background. Aliased to --bs-input-bg-default."
2747
+ "name": "--bs-icon-button-radius",
2748
+ "description": "Corner radius, size=\"sm\"/\"md\"/\"lg\". Aliased to --bs-border-radius-100."
2937
2749
  },
2938
2750
  {
2939
- "name": "--bs-input-field-bg-disabled",
2940
- "description": "Field background when disabled is set. Aliased to --bs-input-bg-disabled."
2751
+ "name": "--bs-icon-button-radius-xs",
2752
+ "description": "Corner radius, size=\"xs\" -- a smaller radius than --bs-icon-button-radius, since --bs-border-radius-100 (8px) on a 16px box would look nearly circular. Aliased to --bs-border-radius-50."
2941
2753
  },
2942
2754
  {
2943
- "name": "--bs-input-field-border",
2944
- "description": "Field border color. Aliased to --bs-input-border-default."
2755
+ "name": "--bs-icon-button-size-lg",
2756
+ "description": "Container width/height at size=\"lg\". 48px."
2945
2757
  },
2946
2758
  {
2947
- "name": "--bs-input-field-border-error",
2948
- "description": "Field border color when error is set. Aliased to --bs-input-border-error."
2759
+ "name": "--bs-icon-button-size-md",
2760
+ "description": "Container width/height at size=\"md\". 44px."
2949
2761
  },
2950
2762
  {
2951
- "name": "--bs-input-field-border-focus",
2952
- "description": "Field border color when focused. Aliased to --bs-input-border-focus."
2763
+ "name": "--bs-icon-button-size-sm",
2764
+ "description": "Container width/height at size=\"sm\". 40px."
2953
2765
  },
2954
2766
  {
2955
- "name": "--bs-input-field-border-hover",
2956
- "description": "Field border color on hover. Aliased to --bs-input-border-hover."
2767
+ "name": "--bs-icon-button-size-xs",
2768
+ "description": "Container width/height at size=\"xs\". 16px."
2957
2769
  },
2958
2770
  {
2959
- "name": "--bs-input-field-placeholder",
2960
- "description": "Placeholder text color. Aliased to --bs-input-placeholder."
2771
+ "name": "--bs-icon-button-subtle-focus",
2772
+ "description": "Focus ring color, variant=\"subtle\". Aliased to --bs-border-primary-focus."
2961
2773
  },
2962
2774
  {
2963
- "name": "--bs-input-field-text",
2964
- "description": "Input text color. Aliased to --bs-input-text."
2775
+ "name": "--bs-icon-button-subtle-hover",
2776
+ "description": "Background, variant=\"subtle\", hover. Aliased to --bs-color-neutral-container."
2965
2777
  },
2966
2778
  {
2967
- "name": "--bs-input-gap",
2968
- "description": "Gap between the icon(s) and the native input. Aliased to --bs-spacing-200."
2779
+ "name": "--bs-icon-button-subtle-pressed",
2780
+ "description": "Background, variant=\"subtle\", pressed. Aliased to --bs-color-neutral-container-pressed."
2969
2781
  },
2970
2782
  {
2971
- "name": "--bs-input-height",
2972
- "description": "Height of the field. Aliased to --bs-spacing-600."
2783
+ "name": "--bs-icon-button-success-default",
2784
+ "description": "Background, variant=\"success\", default. Aliased to --bs-color-success-default."
2973
2785
  },
2974
2786
  {
2975
- "name": "--bs-input-icon-color",
2976
- "description": "Icon color in the default state. Aliased to --bs-icon-muted."
2787
+ "name": "--bs-icon-button-success-disabled",
2788
+ "description": "Background, variant=\"success\", disabled. Aliased to --bs-surface-action-disabled."
2977
2789
  },
2978
2790
  {
2979
- "name": "--bs-input-icon-color-disabled",
2980
- "description": "Icon color when disabled is set. Aliased to --bs-input-icon-disabled."
2791
+ "name": "--bs-icon-button-success-focus",
2792
+ "description": "Focus ring color, variant=\"success\". Aliased to --bs-border-success-focus."
2981
2793
  },
2982
2794
  {
2983
- "name": "--bs-input-icon-color-error",
2984
- "description": "Icon color when error is set. Aliased to --bs-input-icon-error."
2795
+ "name": "--bs-icon-button-success-hover",
2796
+ "description": "Background, variant=\"success\", hover. Aliased to --bs-color-success-hover."
2985
2797
  },
2986
2798
  {
2987
- "name": "--bs-input-icon-size",
2988
- "description": "Width/height of the leading/trailing icon. Aliased to --bs-spacing-300."
2799
+ "name": "--bs-icon-button-success-pressed",
2800
+ "description": "Background, variant=\"success\", pressed. Aliased to --bs-color-success-pressed."
2989
2801
  },
2990
2802
  {
2991
- "name": "--bs-input-label-color",
2992
- "description": "Label text color. Aliased to --bs-input-label."
2803
+ "name": "--bs-icon-button-warning-default",
2804
+ "description": "Background, variant=\"warning\", default. Aliased to --bs-color-warning-default."
2993
2805
  },
2994
2806
  {
2995
- "name": "--bs-input-padding-x",
2996
- "description": "Horizontal padding inside the field. Aliased to --bs-spacing-150."
2807
+ "name": "--bs-icon-button-warning-disabled",
2808
+ "description": "Background, variant=\"warning\", disabled. Aliased to --bs-surface-action-disabled."
2997
2809
  },
2998
2810
  {
2999
- "name": "--bs-input-padding-y",
3000
- "description": "Vertical padding inside the field. Aliased to --bs-spacing-100."
2811
+ "name": "--bs-icon-button-warning-focus",
2812
+ "description": "Focus ring color, variant=\"warning\". Aliased to --bs-border-warning-focus."
3001
2813
  },
3002
2814
  {
3003
- "name": "--bs-input-radius",
3004
- "description": "Corner radius of the field. Aliased to --bs-border-radius-100."
2815
+ "name": "--bs-icon-button-warning-hover",
2816
+ "description": "Background, variant=\"warning\", hover. Aliased to --bs-color-warning-hover."
3005
2817
  },
3006
2818
  {
3007
- "name": "--bs-input-stack-gap",
3008
- "description": "Vertical gap between the label, field, and description/error. Aliased to --bs-spacing-50."
2819
+ "name": "--bs-icon-button-warning-pressed",
2820
+ "description": "Background, variant=\"warning\", pressed. Aliased to --bs-color-warning-pressed."
3009
2821
  }
3010
2822
  ]
3011
2823
  }
@@ -3013,40 +2825,2773 @@
3013
2825
  "exports": [
3014
2826
  {
3015
2827
  "kind": "js",
3016
- "name": "BsInput",
2828
+ "name": "BsIconButton",
3017
2829
  "declaration": {
3018
- "name": "BsInput"
2830
+ "name": "BsIconButton"
3019
2831
  }
3020
2832
  },
3021
2833
  {
3022
2834
  "kind": "custom-element-definition",
3023
- "name": "bs-input",
2835
+ "name": "bs-icon-button",
3024
2836
  "declaration": {
3025
- "name": "BsInput"
2837
+ "name": "BsIconButton"
3026
2838
  }
3027
2839
  }
3028
2840
  ]
3029
2841
  },
3030
2842
  {
3031
2843
  "kind": "javascript-module",
3032
- "path": "src/components/bs-menu/bs-menu.tsx",
2844
+ "path": "src/components/bs-tab/bs-inline-tab/bs-inline-tab.tsx",
3033
2845
  "declarations": [
3034
2846
  {
3035
2847
  "kind": "class",
3036
2848
  "customElement": true,
3037
- "tagName": "bs-menu",
3038
- "name": "BsMenu",
2849
+ "tagName": "bs-inline-tab",
2850
+ "name": "BsInlineTab",
2851
+ "description": "A pill-shaped tab button -- an optional leading icon plus a text label, rendered as a real\n`<button>` so it participates correctly in tab order and native click/keyboard activation.\nUnlike `bs-tab`'s underline indicator, selection here is communicated entirely by the pill's\nbackground fill color -- there is no separate indicator element.\n\n## When to use\n- As one button within a segmented-control-style tab bar, where exactly one tab is\n selected/active at a time.\n\n## When not to use\n- As a standalone action button -- use `bs-button` instead, `bs-inline-tab`'s visual language\n (muted pill until selected/hovered) only makes sense as part of a set.\n\n`selected` is NOT self-toggling -- clicking a `bs-inline-tab` only emits `bsSelect`, it does not\nset its own `selected` prop, and it does not unselect any sibling tabs. Wrap your\n`<bs-inline-tab>` elements in `<bs-tabs type=\"bs-inline-tab\">` -- it owns `role=\"tablist\"` and\ncoordinates selection (listening for `bsSelect` and setting `selected`/`false` across siblings)\nfor you. Using `bs-inline-tab` standalone, outside a `<bs-tabs>` wrapper, still means `selected`\ndoesn't self-toggle and `role=\"tablist\"` isn't provided automatically -- a consumer doing that\nwould still need to coordinate `selected` and supply `role=\"tablist\"` manually, same as\n`bs-tab.mdx`/`bs-radio.mdx` document for their own components. See `bs-inline-tab.mdx`'s\nAccessibility section for the full requirement, including `role=\"tabpanel\"` on the corresponding\ncontent panels.",
2852
+ "attributes": [
2853
+ {
2854
+ "name": "aria-label",
2855
+ "description": "Accessible name for the tab. Required for icon-only usage (no visible label text via the\ndefault slot) so screen readers still announce what the tab does -- without it, an icon-only\ntab has no discernible name at all (axe-core flags this as a critical `button-name`\nviolation). Stencil reflects this camelCase prop to the `aria-label` HTML attribute\nautomatically, same as `bs-tab`'s identical prop.",
2856
+ "type": {
2857
+ "text": "string"
2858
+ },
2859
+ "default": "null",
2860
+ "fieldName": "ariaLabel"
2861
+ },
2862
+ {
2863
+ "name": "disabled",
2864
+ "description": "Disables the tab: sets the native `disabled` attribute, suppresses hover/focus styling, and\nprevents clicking from emitting `bsSelect`.",
2865
+ "type": {
2866
+ "text": "boolean"
2867
+ },
2868
+ "default": "false",
2869
+ "fieldName": "disabled"
2870
+ },
2871
+ {
2872
+ "name": "selected",
2873
+ "description": "Whether this tab is the currently active one. NOT mutable and NOT self-toggling -- see the\n\"Known gap\" note in the class JSDoc. Still reflected as an attribute so consumers/CSS can\ntarget `bs-inline-tab[selected]`.",
2874
+ "type": {
2875
+ "text": "boolean"
2876
+ },
2877
+ "default": "false",
2878
+ "fieldName": "selected"
2879
+ }
2880
+ ],
2881
+ "members": [
2882
+ {
2883
+ "kind": "field",
2884
+ "name": "ariaLabel",
2885
+ "description": "Accessible name for the tab. Required for icon-only usage (no visible label text via the\ndefault slot) so screen readers still announce what the tab does -- without it, an icon-only\ntab has no discernible name at all (axe-core flags this as a critical `button-name`\nviolation). Stencil reflects this camelCase prop to the `aria-label` HTML attribute\nautomatically, same as `bs-tab`'s identical prop.",
2886
+ "type": {
2887
+ "text": "string"
2888
+ },
2889
+ "default": "null",
2890
+ "readonly": true,
2891
+ "attribute": "aria-label"
2892
+ },
2893
+ {
2894
+ "kind": "field",
2895
+ "name": "disabled",
2896
+ "description": "Disables the tab: sets the native `disabled` attribute, suppresses hover/focus styling, and\nprevents clicking from emitting `bsSelect`.",
2897
+ "type": {
2898
+ "text": "boolean"
2899
+ },
2900
+ "default": "false",
2901
+ "readonly": true,
2902
+ "attribute": "disabled"
2903
+ },
2904
+ {
2905
+ "kind": "field",
2906
+ "name": "selected",
2907
+ "description": "Whether this tab is the currently active one. NOT mutable and NOT self-toggling -- see the\n\"Known gap\" note in the class JSDoc. Still reflected as an attribute so consumers/CSS can\ntarget `bs-inline-tab[selected]`.",
2908
+ "type": {
2909
+ "text": "boolean"
2910
+ },
2911
+ "default": "false",
2912
+ "readonly": true,
2913
+ "attribute": "selected",
2914
+ "reflects": true
2915
+ }
2916
+ ],
2917
+ "events": [
2918
+ {
2919
+ "name": "bsSelect",
2920
+ "description": "Fires when the tab is clicked. Does not toggle `selected` itself -- see the class JSDoc.",
2921
+ "type": {
2922
+ "text": "CustomEvent<void>"
2923
+ }
2924
+ }
2925
+ ],
2926
+ "slots": [
2927
+ {
2928
+ "name": "",
2929
+ "description": "Default slot: the tab's label text. When empty (icon-only), no space is reserved for it."
2930
+ },
2931
+ {
2932
+ "name": "icon",
2933
+ "description": "Optional leading icon (24x24). When empty (text-only), no space is reserved for it."
2934
+ }
2935
+ ],
2936
+ "cssParts": [
2937
+ {
2938
+ "name": "icon",
2939
+ "description": "The icon wrapper."
2940
+ },
2941
+ {
2942
+ "name": "label",
2943
+ "description": "The label wrapper."
2944
+ },
2945
+ {
2946
+ "name": "tab",
2947
+ "description": "The button element."
2948
+ }
2949
+ ],
2950
+ "cssProperties": [
2951
+ {
2952
+ "name": "--bs-inline-tab-bg-default",
2953
+ "description": "Background, deselected/enabled. Aliased to --bs-color-neutral-container."
2954
+ },
2955
+ {
2956
+ "name": "--bs-inline-tab-bg-disabled",
2957
+ "description": "Background, disabled (wins over selected). Aliased to --bs-surface-action-disabled."
2958
+ },
2959
+ {
2960
+ "name": "--bs-inline-tab-bg-focus",
2961
+ "description": "Background, deselected/focused. Aliased to --bs-color-neutral-container-focused."
2962
+ },
2963
+ {
2964
+ "name": "--bs-inline-tab-bg-hover",
2965
+ "description": "Background, deselected/hovered. Aliased to --bs-color-neutral-container-hover."
2966
+ },
2967
+ {
2968
+ "name": "--bs-inline-tab-bg-pressed",
2969
+ "description": "Background, deselected/pressed. Aliased to --bs-color-neutral-container-pressed."
2970
+ },
2971
+ {
2972
+ "name": "--bs-inline-tab-bg-selected",
2973
+ "description": "Background, selected/enabled. Aliased to --bs-color-primary-default."
2974
+ },
2975
+ {
2976
+ "name": "--bs-inline-tab-bg-selected-focus",
2977
+ "description": "Background, selected/focused. Aliased to --bs-color-primary-focused."
2978
+ },
2979
+ {
2980
+ "name": "--bs-inline-tab-bg-selected-hover",
2981
+ "description": "Background, selected/hovered. Aliased to --bs-color-primary-hover."
2982
+ },
2983
+ {
2984
+ "name": "--bs-inline-tab-bg-selected-pressed",
2985
+ "description": "Background, selected/pressed. Aliased to --bs-color-primary-pressed."
2986
+ },
2987
+ {
2988
+ "name": "--bs-inline-tab-color-default",
2989
+ "description": "Text/icon color, deselected/enabled. Aliased to --bs-text-secondary."
2990
+ },
2991
+ {
2992
+ "name": "--bs-inline-tab-color-disabled",
2993
+ "description": "Text/icon color, disabled (wins over selected). Aliased to --bs-text-on-disabled."
2994
+ },
2995
+ {
2996
+ "name": "--bs-inline-tab-color-hover",
2997
+ "description": "Text/icon color, deselected/hovered, focused or pressed. Aliased to --bs-text-default."
2998
+ },
2999
+ {
3000
+ "name": "--bs-inline-tab-color-selected",
3001
+ "description": "Text/icon color, selected. Aliased to --bs-text-on-action."
3002
+ },
3003
+ {
3004
+ "name": "--bs-inline-tab-focus-ring-color",
3005
+ "description": "Focus ring color. Aliased to --bs-border-neutral-focus."
3006
+ },
3007
+ {
3008
+ "name": "--bs-inline-tab-font-size",
3009
+ "description": "Aliased to --bs-font-size-sm."
3010
+ },
3011
+ {
3012
+ "name": "--bs-inline-tab-font-weight",
3013
+ "description": "Aliased to --bs-font-weight-semibold."
3014
+ },
3015
+ {
3016
+ "name": "--bs-inline-tab-gap",
3017
+ "description": "Gap between icon and label. Aliased to --bs-spacing-50."
3018
+ },
3019
+ {
3020
+ "name": "--bs-inline-tab-line-height",
3021
+ "description": "Aliased to --bs-line-height-body-sm."
3022
+ },
3023
+ {
3024
+ "name": "--bs-inline-tab-padding-left-with-icon",
3025
+ "description": "Left padding, icon present. Aliased to --bs-spacing-150."
3026
+ },
3027
+ {
3028
+ "name": "--bs-inline-tab-padding-right-with-icon",
3029
+ "description": "Right padding, icon present. Aliased to --bs-spacing-200."
3030
+ },
3031
+ {
3032
+ "name": "--bs-inline-tab-padding-x",
3033
+ "description": "Left/right padding, no icon. Aliased to --bs-spacing-200."
3034
+ },
3035
+ {
3036
+ "name": "--bs-inline-tab-padding-y",
3037
+ "description": "Top/bottom padding. Aliased to --bs-spacing-100."
3038
+ },
3039
+ {
3040
+ "name": "--bs-inline-tab-radius",
3041
+ "description": "Corner radius of the pill. Aliased to --bs-border-radius-full."
3042
+ }
3043
+ ]
3044
+ }
3045
+ ],
3046
+ "exports": [
3047
+ {
3048
+ "kind": "js",
3049
+ "name": "BsInlineTab",
3050
+ "declaration": {
3051
+ "name": "BsInlineTab"
3052
+ }
3053
+ },
3054
+ {
3055
+ "kind": "custom-element-definition",
3056
+ "name": "bs-inline-tab",
3057
+ "declaration": {
3058
+ "name": "BsInlineTab"
3059
+ }
3060
+ }
3061
+ ]
3062
+ },
3063
+ {
3064
+ "kind": "javascript-module",
3065
+ "path": "src/components/bs-input/bs-input.tsx",
3066
+ "declarations": [
3067
+ {
3068
+ "kind": "class",
3069
+ "customElement": true,
3070
+ "tagName": "bs-input",
3071
+ "name": "BsInput",
3072
+ "description": "A single-line text field with an optional label, description, and error state. Also covers a\nrange of related \"field\" shapes (number stepper, password reveal, date, dropdown trigger,\nselect, textarea, chip input, initials, country, and pin) via the `type` prop, since they all\nshare the same label/description/error/icon-slot chrome.\n\n## When to use\n- Collecting a single line of free-text, email, password, or numeric input.\n- Any of the other supported `type`s (search, date, dropdown, select, textarea, chip, initials,\n country, pin) that share this component's label/description/error chrome.\n- Pair with `error` for inline validation feedback tied to that specific field.\n\n## When not to use\n- A fixed set of choices best served by a dedicated radio/checkbox group rather than a single\n field. `type=\"select\"` (native `<select>`) and `type=\"dropdown\"` (a `bs-menu` of\n `bs-menu-item`s from the `options` prop) cover the field-shaped cases; `type=\"chip\"` has no\n options list at all (freeform chip entry).",
3073
+ "attributes": [
3074
+ {
3075
+ "name": "country",
3076
+ "description": "Current selected country code for `type=\"country\"`.",
3077
+ "type": {
3078
+ "text": "string"
3079
+ },
3080
+ "default": "''",
3081
+ "fieldName": "country"
3082
+ },
3083
+ {
3084
+ "name": "description",
3085
+ "type": {
3086
+ "text": "string"
3087
+ },
3088
+ "fieldName": "description"
3089
+ },
3090
+ {
3091
+ "name": "disabled",
3092
+ "type": {
3093
+ "text": "boolean"
3094
+ },
3095
+ "default": "false",
3096
+ "fieldName": "disabled"
3097
+ },
3098
+ {
3099
+ "name": "error",
3100
+ "type": {
3101
+ "text": "string"
3102
+ },
3103
+ "fieldName": "error"
3104
+ },
3105
+ {
3106
+ "name": "initials-title",
3107
+ "description": "Current selected title for `type=\"initials\"`. Named `initialsTitle` rather than `title` --\n`title` is a reserved standard HTML attribute (tooltip text) inherited by every element, and\nStencil warns against shadowing it with a component `@Prop`.",
3108
+ "type": {
3109
+ "text": "string"
3110
+ },
3111
+ "default": "''",
3112
+ "fieldName": "initialsTitle"
3113
+ },
3114
+ {
3115
+ "name": "label",
3116
+ "type": {
3117
+ "text": "string"
3118
+ },
3119
+ "fieldName": "label"
3120
+ },
3121
+ {
3122
+ "name": "length",
3123
+ "description": "Number of cells for `type=\"pin\"`.",
3124
+ "type": {
3125
+ "text": "number"
3126
+ },
3127
+ "default": "4",
3128
+ "fieldName": "length"
3129
+ },
3130
+ {
3131
+ "name": "max",
3132
+ "description": "Maximum value for `type=\"number\"`'s stepper buttons.",
3133
+ "type": {
3134
+ "text": "number"
3135
+ },
3136
+ "fieldName": "max"
3137
+ },
3138
+ {
3139
+ "name": "min",
3140
+ "description": "Minimum value for `type=\"number\"`'s stepper buttons.",
3141
+ "type": {
3142
+ "text": "number"
3143
+ },
3144
+ "fieldName": "min"
3145
+ },
3146
+ {
3147
+ "name": "open",
3148
+ "description": "Whether the `type=\"dropdown\"` trigger is open. Reflects to an attribute so consumers can style\nan open state via CSS. When `options` is non-empty, this also controls whether the `bs-menu`\nof `bs-menu-item`s is rendered below the field.",
3149
+ "type": {
3150
+ "text": "boolean"
3151
+ },
3152
+ "default": "false",
3153
+ "fieldName": "open"
3154
+ },
3155
+ {
3156
+ "name": "placeholder",
3157
+ "type": {
3158
+ "text": "string"
3159
+ },
3160
+ "fieldName": "placeholder"
3161
+ },
3162
+ {
3163
+ "name": "required",
3164
+ "description": "Marks the field as required: renders a red `*` after the label and sets `aria-required=\"true\"`\non the control. Applies regardless of `type`.",
3165
+ "type": {
3166
+ "text": "boolean"
3167
+ },
3168
+ "default": "false",
3169
+ "fieldName": "required"
3170
+ },
3171
+ {
3172
+ "name": "rows",
3173
+ "description": "Number of visible rows for `type=\"textarea\"`.",
3174
+ "type": {
3175
+ "text": "number"
3176
+ },
3177
+ "default": "3",
3178
+ "fieldName": "rows"
3179
+ },
3180
+ {
3181
+ "name": "step",
3182
+ "description": "Step size for `type=\"number\"`'s increment/decrement stepper buttons.",
3183
+ "type": {
3184
+ "text": "number"
3185
+ },
3186
+ "default": "1",
3187
+ "fieldName": "step"
3188
+ },
3189
+ {
3190
+ "name": "type",
3191
+ "type": {
3192
+ "text": "\"chip\" | \"country\" | \"date\" | \"dropdown\" | \"email\" | \"initials\" | \"number\" | \"password\" | \"pin\" | \"search\" | \"select\" | \"text\" | \"textarea\""
3193
+ },
3194
+ "default": "'text'",
3195
+ "fieldName": "type"
3196
+ },
3197
+ {
3198
+ "name": "value",
3199
+ "description": "Current value. Native `input`/`change` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as `bsInput`/`bsChange` custom events instead. Mutable so the\n`number` type's stepper buttons can update it directly.",
3200
+ "type": {
3201
+ "text": "string"
3202
+ },
3203
+ "default": "''",
3204
+ "fieldName": "value"
3205
+ }
3206
+ ],
3207
+ "members": [
3208
+ {
3209
+ "kind": "field",
3210
+ "name": "chips",
3211
+ "description": "Current chips for `type=\"chip\"`. Must be set as a JS property, not an HTML attribute -- see\nCONVENTIONS.md's non-string props rule.",
3212
+ "type": {
3213
+ "text": "string[]"
3214
+ },
3215
+ "default": "[]",
3216
+ "readonly": true
3217
+ },
3218
+ {
3219
+ "kind": "field",
3220
+ "name": "country",
3221
+ "description": "Current selected country code for `type=\"country\"`.",
3222
+ "type": {
3223
+ "text": "string"
3224
+ },
3225
+ "default": "''",
3226
+ "readonly": true,
3227
+ "attribute": "country"
3228
+ },
3229
+ {
3230
+ "kind": "field",
3231
+ "name": "countryOptions",
3232
+ "description": "Country select options for `type=\"country\"`. Must be set as a JS property, not an HTML\nattribute -- see CONVENTIONS.md's non-string props rule.",
3233
+ "type": {
3234
+ "text": "{ code: string; label: string; flagIcon?: string; }[]"
3235
+ },
3236
+ "default": "[]",
3237
+ "readonly": true
3238
+ },
3239
+ {
3240
+ "kind": "field",
3241
+ "name": "description",
3242
+ "type": {
3243
+ "text": "string"
3244
+ },
3245
+ "readonly": true,
3246
+ "attribute": "description"
3247
+ },
3248
+ {
3249
+ "kind": "field",
3250
+ "name": "disabled",
3251
+ "type": {
3252
+ "text": "boolean"
3253
+ },
3254
+ "default": "false",
3255
+ "readonly": true,
3256
+ "attribute": "disabled"
3257
+ },
3258
+ {
3259
+ "kind": "field",
3260
+ "name": "error",
3261
+ "type": {
3262
+ "text": "string"
3263
+ },
3264
+ "readonly": true,
3265
+ "attribute": "error"
3266
+ },
3267
+ {
3268
+ "kind": "field",
3269
+ "name": "initialsTitle",
3270
+ "description": "Current selected title for `type=\"initials\"`. Named `initialsTitle` rather than `title` --\n`title` is a reserved standard HTML attribute (tooltip text) inherited by every element, and\nStencil warns against shadowing it with a component `@Prop`.",
3271
+ "type": {
3272
+ "text": "string"
3273
+ },
3274
+ "default": "''",
3275
+ "readonly": true,
3276
+ "attribute": "initials-title"
3277
+ },
3278
+ {
3279
+ "kind": "field",
3280
+ "name": "label",
3281
+ "type": {
3282
+ "text": "string"
3283
+ },
3284
+ "readonly": true,
3285
+ "attribute": "label"
3286
+ },
3287
+ {
3288
+ "kind": "field",
3289
+ "name": "length",
3290
+ "description": "Number of cells for `type=\"pin\"`.",
3291
+ "type": {
3292
+ "text": "number"
3293
+ },
3294
+ "default": "4",
3295
+ "readonly": true,
3296
+ "attribute": "length"
3297
+ },
3298
+ {
3299
+ "kind": "field",
3300
+ "name": "max",
3301
+ "description": "Maximum value for `type=\"number\"`'s stepper buttons.",
3302
+ "type": {
3303
+ "text": "number"
3304
+ },
3305
+ "readonly": true,
3306
+ "attribute": "max"
3307
+ },
3308
+ {
3309
+ "kind": "field",
3310
+ "name": "min",
3311
+ "description": "Minimum value for `type=\"number\"`'s stepper buttons.",
3312
+ "type": {
3313
+ "text": "number"
3314
+ },
3315
+ "readonly": true,
3316
+ "attribute": "min"
3317
+ },
3318
+ {
3319
+ "kind": "field",
3320
+ "name": "open",
3321
+ "description": "Whether the `type=\"dropdown\"` trigger is open. Reflects to an attribute so consumers can style\nan open state via CSS. When `options` is non-empty, this also controls whether the `bs-menu`\nof `bs-menu-item`s is rendered below the field.",
3322
+ "type": {
3323
+ "text": "boolean"
3324
+ },
3325
+ "default": "false",
3326
+ "attribute": "open",
3327
+ "reflects": true
3328
+ },
3329
+ {
3330
+ "kind": "field",
3331
+ "name": "options",
3332
+ "description": "Options for `type=\"select\"` (rendered as native `<option>`s) and `type=\"dropdown\"` (rendered\nas a `bs-menu` of `bs-menu-item`s when `open`). Must be set as a JS property, not an HTML\nattribute -- see CONVENTIONS.md's non-string props rule.",
3333
+ "type": {
3334
+ "text": "{ label: string; value: string; }[]"
3335
+ },
3336
+ "default": "[]",
3337
+ "readonly": true
3338
+ },
3339
+ {
3340
+ "kind": "field",
3341
+ "name": "placeholder",
3342
+ "type": {
3343
+ "text": "string"
3344
+ },
3345
+ "readonly": true,
3346
+ "attribute": "placeholder"
3347
+ },
3348
+ {
3349
+ "kind": "field",
3350
+ "name": "required",
3351
+ "description": "Marks the field as required: renders a red `*` after the label and sets `aria-required=\"true\"`\non the control. Applies regardless of `type`.",
3352
+ "type": {
3353
+ "text": "boolean"
3354
+ },
3355
+ "default": "false",
3356
+ "readonly": true,
3357
+ "attribute": "required"
3358
+ },
3359
+ {
3360
+ "kind": "field",
3361
+ "name": "rows",
3362
+ "description": "Number of visible rows for `type=\"textarea\"`.",
3363
+ "type": {
3364
+ "text": "number"
3365
+ },
3366
+ "default": "3",
3367
+ "readonly": true,
3368
+ "attribute": "rows"
3369
+ },
3370
+ {
3371
+ "kind": "field",
3372
+ "name": "step",
3373
+ "description": "Step size for `type=\"number\"`'s increment/decrement stepper buttons.",
3374
+ "type": {
3375
+ "text": "number"
3376
+ },
3377
+ "default": "1",
3378
+ "readonly": true,
3379
+ "attribute": "step"
3380
+ },
3381
+ {
3382
+ "kind": "field",
3383
+ "name": "titleOptions",
3384
+ "description": "Title select options for `type=\"initials\"` (e.g. `['Mrs.', 'Mr.', 'Dr.']`). Must be set as a\nJS property, not an HTML attribute -- see CONVENTIONS.md's non-string props rule.",
3385
+ "type": {
3386
+ "text": "string[]"
3387
+ },
3388
+ "default": "[]",
3389
+ "readonly": true
3390
+ },
3391
+ {
3392
+ "kind": "field",
3393
+ "name": "type",
3394
+ "type": {
3395
+ "text": "\"chip\" | \"country\" | \"date\" | \"dropdown\" | \"email\" | \"initials\" | \"number\" | \"password\" | \"pin\" | \"search\" | \"select\" | \"text\" | \"textarea\""
3396
+ },
3397
+ "default": "'text'",
3398
+ "readonly": true,
3399
+ "attribute": "type"
3400
+ },
3401
+ {
3402
+ "kind": "field",
3403
+ "name": "value",
3404
+ "description": "Current value. Native `input`/`change` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as `bsInput`/`bsChange` custom events instead. Mutable so the\n`number` type's stepper buttons can update it directly.",
3405
+ "type": {
3406
+ "text": "string"
3407
+ },
3408
+ "default": "''",
3409
+ "attribute": "value"
3410
+ }
3411
+ ],
3412
+ "events": [
3413
+ {
3414
+ "name": "bsChange",
3415
+ "type": {
3416
+ "text": "CustomEvent<string>"
3417
+ }
3418
+ },
3419
+ {
3420
+ "name": "bsChipAdd",
3421
+ "description": "Emitted when a chip is committed (Enter pressed in the draft input) for `type=\"chip\"`.",
3422
+ "type": {
3423
+ "text": "CustomEvent<string>"
3424
+ }
3425
+ },
3426
+ {
3427
+ "name": "bsChipRemove",
3428
+ "description": "Emitted when a chip's remove button is clicked for `type=\"chip\"`.",
3429
+ "type": {
3430
+ "text": "CustomEvent<string>"
3431
+ }
3432
+ },
3433
+ {
3434
+ "name": "bsCountryChange",
3435
+ "description": "Emitted when the country `<select>` changes for `type=\"country\"`.",
3436
+ "type": {
3437
+ "text": "CustomEvent<string>"
3438
+ }
3439
+ },
3440
+ {
3441
+ "name": "bsInput",
3442
+ "type": {
3443
+ "text": "CustomEvent<string>"
3444
+ }
3445
+ },
3446
+ {
3447
+ "name": "bsOpen",
3448
+ "description": "Emitted when `type=\"dropdown\"`'s trigger is toggled. See `open`'s doc comment for this type's\nshell-only limitation.",
3449
+ "type": {
3450
+ "text": "CustomEvent<boolean>"
3451
+ }
3452
+ },
3453
+ {
3454
+ "name": "bsTitleChange",
3455
+ "description": "Emitted when the title `<select>` changes for `type=\"initials\"`.",
3456
+ "type": {
3457
+ "text": "CustomEvent<string>"
3458
+ }
3459
+ }
3460
+ ],
3461
+ "slots": [
3462
+ {
3463
+ "name": "end-icon",
3464
+ "description": "Optional trailing icon, rendered after the native control (e.g. a chevron for a\nfield that opens a picker). Ignored when `type` is `number` (stepper buttons), `password` (show/hide\ntoggle), or `dropdown` (chevron) -- those types always render their own trailing control there.\nFor `type=\"date\"`, the slot is used if provided, otherwise a default calendar icon is shown."
3465
+ },
3466
+ {
3467
+ "name": "icon",
3468
+ "description": "Optional leading icon, rendered before the native control (e.g. a mail icon for an\nemail field). For `type=\"search\"`, the slot is used if provided, otherwise a default\nmagnifying-glass icon is shown."
3469
+ }
3470
+ ],
3471
+ "cssParts": [
3472
+ {
3473
+ "name": "chip",
3474
+ "description": "A single chip pill, when `type=\"chip\"`."
3475
+ },
3476
+ {
3477
+ "name": "control",
3478
+ "description": "The native control element (`<input>`, `<select>`, or `<textarea>` depending on\n`type`). Composite types (`initials`, `country`) render this part on more than one element."
3479
+ },
3480
+ {
3481
+ "name": "description",
3482
+ "description": "The helper text element (hidden when `error` is set)."
3483
+ },
3484
+ {
3485
+ "name": "end-icon",
3486
+ "description": "The trailing icon wrapper element."
3487
+ },
3488
+ {
3489
+ "name": "error",
3490
+ "description": "The error message element."
3491
+ },
3492
+ {
3493
+ "name": "error-icon",
3494
+ "description": "The warning icon shown before the error message."
3495
+ },
3496
+ {
3497
+ "name": "field",
3498
+ "description": "The bordered field wrapper containing the icon(s) and native control(s)."
3499
+ },
3500
+ {
3501
+ "name": "icon",
3502
+ "description": "The leading icon wrapper element."
3503
+ },
3504
+ {
3505
+ "name": "label",
3506
+ "description": "The `<label>` element."
3507
+ },
3508
+ {
3509
+ "name": "menu",
3510
+ "description": "The `bs-menu` rendered below the field for `type=\"dropdown\"` when `open` and\n`options` is non-empty."
3511
+ },
3512
+ {
3513
+ "name": "required",
3514
+ "description": "The red `*` rendered after the label text when `required` is set."
3515
+ }
3516
+ ],
3517
+ "cssProperties": [
3518
+ {
3519
+ "name": "--bs-input-chip-bg",
3520
+ "description": "Chip pill background for type=\"chip\". Aliased to --bs-input-bg-disabled."
3521
+ },
3522
+ {
3523
+ "name": "--bs-input-chip-text",
3524
+ "description": "Chip pill text color for type=\"chip\". Aliased to --bs-input-text."
3525
+ },
3526
+ {
3527
+ "name": "--bs-input-description-color",
3528
+ "description": "Description text color. Aliased to --bs-input-description."
3529
+ },
3530
+ {
3531
+ "name": "--bs-input-error-color",
3532
+ "description": "Error message text color. Aliased to --bs-input-error."
3533
+ },
3534
+ {
3535
+ "name": "--bs-input-error-icon-size",
3536
+ "description": "Width/height of the warning icon shown before the error message. Aliased to --bs-spacing-250."
3537
+ },
3538
+ {
3539
+ "name": "--bs-input-field-bg",
3540
+ "description": "Field background. Aliased to --bs-input-bg-default."
3541
+ },
3542
+ {
3543
+ "name": "--bs-input-field-bg-disabled",
3544
+ "description": "Field background when disabled is set. Aliased to --bs-input-bg-disabled."
3545
+ },
3546
+ {
3547
+ "name": "--bs-input-field-border",
3548
+ "description": "Field border color. Aliased to --bs-input-border-default."
3549
+ },
3550
+ {
3551
+ "name": "--bs-input-field-border-error",
3552
+ "description": "Field border color when error is set. Aliased to --bs-input-border-error."
3553
+ },
3554
+ {
3555
+ "name": "--bs-input-field-border-focus",
3556
+ "description": "Field border color when focused. Aliased to --bs-input-border-focus."
3557
+ },
3558
+ {
3559
+ "name": "--bs-input-field-border-hover",
3560
+ "description": "Field border color on hover. Aliased to --bs-input-border-hover."
3561
+ },
3562
+ {
3563
+ "name": "--bs-input-field-placeholder",
3564
+ "description": "Placeholder text color. Aliased to --bs-input-placeholder."
3565
+ },
3566
+ {
3567
+ "name": "--bs-input-field-text",
3568
+ "description": "Input text color. Aliased to --bs-input-text."
3569
+ },
3570
+ {
3571
+ "name": "--bs-input-gap",
3572
+ "description": "Gap between the icon(s) and the native input. Aliased to --bs-spacing-200."
3573
+ },
3574
+ {
3575
+ "name": "--bs-input-height",
3576
+ "description": "Height of the field. Aliased to --bs-spacing-600."
3577
+ },
3578
+ {
3579
+ "name": "--bs-input-icon-color",
3580
+ "description": "Icon color in the default state. Aliased to --bs-icon-muted."
3581
+ },
3582
+ {
3583
+ "name": "--bs-input-icon-color-disabled",
3584
+ "description": "Icon color when disabled is set. Aliased to --bs-input-icon-disabled."
3585
+ },
3586
+ {
3587
+ "name": "--bs-input-icon-color-error",
3588
+ "description": "Icon color when error is set. Aliased to --bs-input-icon-error."
3589
+ },
3590
+ {
3591
+ "name": "--bs-input-icon-size",
3592
+ "description": "Width/height of the leading/trailing icon. Aliased to --bs-spacing-300."
3593
+ },
3594
+ {
3595
+ "name": "--bs-input-label-color",
3596
+ "description": "Label text color. Aliased to --bs-input-label."
3597
+ },
3598
+ {
3599
+ "name": "--bs-input-padding-x",
3600
+ "description": "Horizontal padding inside the field. Aliased to --bs-spacing-150."
3601
+ },
3602
+ {
3603
+ "name": "--bs-input-padding-y",
3604
+ "description": "Vertical padding inside the field. Aliased to --bs-spacing-100."
3605
+ },
3606
+ {
3607
+ "name": "--bs-input-radius",
3608
+ "description": "Corner radius of the field. Aliased to --bs-border-radius-100."
3609
+ },
3610
+ {
3611
+ "name": "--bs-input-stack-gap",
3612
+ "description": "Vertical gap between the label, field, and description/error. Aliased to --bs-spacing-50."
3613
+ }
3614
+ ]
3615
+ }
3616
+ ],
3617
+ "exports": [
3618
+ {
3619
+ "kind": "js",
3620
+ "name": "BsInput",
3621
+ "declaration": {
3622
+ "name": "BsInput"
3623
+ }
3624
+ },
3625
+ {
3626
+ "kind": "custom-element-definition",
3627
+ "name": "bs-input",
3628
+ "declaration": {
3629
+ "name": "BsInput"
3630
+ }
3631
+ }
3632
+ ]
3633
+ },
3634
+ {
3635
+ "kind": "javascript-module",
3636
+ "path": "src/components/bs-logo/bs-logo.tsx",
3637
+ "declarations": [
3638
+ {
3639
+ "kind": "class",
3640
+ "customElement": true,
3641
+ "tagName": "bs-logo",
3642
+ "name": "BsLogo",
3643
+ "description": "The BrandSync brand mark, as its own standalone component -- shared by `bs-navigation-header`\nand `bs-navigation-drawer`, which used to each render their own duplicated copy of this SVG\n(the drawer's collapsed state even faked an icon-only look by clipping the full wordmark asset\ndown to a narrowed box, rather than using a real icon-only asset).\n\n## When to use\n- Anywhere the BrandSync logo/icon needs to render: a navigation header, a nav drawer, etc.\n\n## When not to use\n- The Genie AI chat panel's own brand mark -- that's a different logo (`bs-chatbot-header`'s\n own inline Genie asset), not this one.\n\n`variant` mirrors Figma's \"Logo\" component set (node 10909:30421) `Device` property\n(\"Desktop\" / \"Tab and mobile\"), which was originally meant to distinguish the full lockup from\nthe icon-only mark at different responsive breakpoints -- renamed here to\n`variant: 'full' | 'mark'` since that's what it actually controls (how much of the logo\nrenders), not literally a device/breakpoint switch.\n\n`variant=\"custom\"` is not a Figma variant at all -- it's an escape hatch for a consuming app\nthat needs to show a DIFFERENT product's logo in the same slot (e.g. a white-labeled deployment,\nor a logo fetched at runtime from a service like brand.dev), via `src`/`alt`, instead of the\nbuilt-in BrandSync assets. This component deliberately does NOT fetch that image itself --\nnetwork calls, loading/error states, and caching are the consuming app's responsibility, same as\nevery other component in this library (e.g. `bs-attachment` takes `imageSrc` rather than fetching\nan image on its own). `background` has no effect on `variant=\"custom\"` -- a consumer's own image\nis already designed for whatever surface it's placed on.",
3644
+ "attributes": [
3645
+ {
3646
+ "name": "alt",
3647
+ "description": "`variant=\"custom\"` only: accessible alt text for the image -- a product logo is meaningful\ncontent (whose brand is this?), not decorative, so set this to something real (e.g. the\nproduct/company name). Falls back to `alt=\"\"` (marking the image decorative to assistive\ntech) when unset, rather than omitting the `alt` attribute entirely -- an `<img>` with no\n`alt` attribute at all is a harder accessibility failure than one explicitly marked\ndecorative, but an empty fallback is still worse than a real name, so don't rely on it.\nIgnored for `full`/`mark` (those already carry their own fixed `aria-label=\"BrandSync\"`).",
3648
+ "type": {
3649
+ "text": "string"
3650
+ },
3651
+ "default": "null",
3652
+ "fieldName": "alt"
3653
+ },
3654
+ {
3655
+ "name": "background",
3656
+ "description": "Which pre-built asset to use for `variant=\"full\"` -- Figma ships a genuinely separate,\ndifferently-drawn dark-background asset (every wordmark path filled solid white, and the\nicon's outer shape a single solid-white path instead of the light version's two-path\nwhite-fill-plus-border-ring), not a CSS currentColor swap of identical paths.\n\n`\"auto\"` (default) renders both assets and lets CSS pick one via\n`--bs-logo-asset-light-display`/`--bs-logo-asset-dark-display` (defined in\n`src/global/base.css`, flipped by the same `[data-theme=\"dark\"]` attribute every other\n`--bs-*` token already reacts to) -- so the logo just follows the ambient theme with no wiring\nneeded, the same way a consuming app's own dark mode already re-themes every other part of\nthis library via ordinary CSS custom property inheritance. Set `\"light\"`/`\"dark\"` explicitly\nto pin one regardless of the ambient theme -- e.g. a dark sidebar that isn't otherwise\ndark-themed.\n\nHas no effect on `variant=\"mark\"`: Figma's component set only has one real designed instance\nof the icon-only mark (`Device=\"Tab and mobile\"`, `Background=\"Default\"`) -- there's no\nseparate dark version of it, so the mark renders identically regardless of this prop.",
3657
+ "type": {
3658
+ "text": "\"auto\" | \"dark\" | \"light\"",
3659
+ "references": [
3660
+ {
3661
+ "name": "BsLogoBackground"
3662
+ }
3663
+ ]
3664
+ },
3665
+ "default": "'auto'",
3666
+ "fieldName": "background"
3667
+ },
3668
+ {
3669
+ "name": "src",
3670
+ "description": "`variant=\"custom\"` only: the image URL to render (e.g. a URL your app already fetched from a\nlogo API). Ignored for `full`/`mark`.",
3671
+ "type": {
3672
+ "text": "string"
3673
+ },
3674
+ "default": "null",
3675
+ "fieldName": "src"
3676
+ },
3677
+ {
3678
+ "name": "variant",
3679
+ "description": "How much of the logo to render. `full` is the icon + \"EG BrandSync\" wordmark (190.977x44\nnatural size); `mark` is just the icon (44x44 natural size), no wordmark; `custom` renders a\nconsumer-supplied image via `src`/`alt` instead of a built-in BrandSync asset -- see the class\ndoc above.",
3680
+ "type": {
3681
+ "text": "\"custom\" | \"full\" | \"mark\"",
3682
+ "references": [
3683
+ {
3684
+ "name": "BsLogoVariant"
3685
+ }
3686
+ ]
3687
+ },
3688
+ "default": "'full'",
3689
+ "fieldName": "variant"
3690
+ }
3691
+ ],
3692
+ "members": [
3693
+ {
3694
+ "kind": "field",
3695
+ "name": "alt",
3696
+ "description": "`variant=\"custom\"` only: accessible alt text for the image -- a product logo is meaningful\ncontent (whose brand is this?), not decorative, so set this to something real (e.g. the\nproduct/company name). Falls back to `alt=\"\"` (marking the image decorative to assistive\ntech) when unset, rather than omitting the `alt` attribute entirely -- an `<img>` with no\n`alt` attribute at all is a harder accessibility failure than one explicitly marked\ndecorative, but an empty fallback is still worse than a real name, so don't rely on it.\nIgnored for `full`/`mark` (those already carry their own fixed `aria-label=\"BrandSync\"`).",
3697
+ "type": {
3698
+ "text": "string"
3699
+ },
3700
+ "default": "null",
3701
+ "readonly": true,
3702
+ "attribute": "alt"
3703
+ },
3704
+ {
3705
+ "kind": "field",
3706
+ "name": "background",
3707
+ "description": "Which pre-built asset to use for `variant=\"full\"` -- Figma ships a genuinely separate,\ndifferently-drawn dark-background asset (every wordmark path filled solid white, and the\nicon's outer shape a single solid-white path instead of the light version's two-path\nwhite-fill-plus-border-ring), not a CSS currentColor swap of identical paths.\n\n`\"auto\"` (default) renders both assets and lets CSS pick one via\n`--bs-logo-asset-light-display`/`--bs-logo-asset-dark-display` (defined in\n`src/global/base.css`, flipped by the same `[data-theme=\"dark\"]` attribute every other\n`--bs-*` token already reacts to) -- so the logo just follows the ambient theme with no wiring\nneeded, the same way a consuming app's own dark mode already re-themes every other part of\nthis library via ordinary CSS custom property inheritance. Set `\"light\"`/`\"dark\"` explicitly\nto pin one regardless of the ambient theme -- e.g. a dark sidebar that isn't otherwise\ndark-themed.\n\nHas no effect on `variant=\"mark\"`: Figma's component set only has one real designed instance\nof the icon-only mark (`Device=\"Tab and mobile\"`, `Background=\"Default\"`) -- there's no\nseparate dark version of it, so the mark renders identically regardless of this prop.",
3708
+ "type": {
3709
+ "text": "\"auto\" | \"dark\" | \"light\"",
3710
+ "references": [
3711
+ {
3712
+ "name": "BsLogoBackground"
3713
+ }
3714
+ ]
3715
+ },
3716
+ "default": "'auto'",
3717
+ "readonly": true,
3718
+ "attribute": "background"
3719
+ },
3720
+ {
3721
+ "kind": "field",
3722
+ "name": "src",
3723
+ "description": "`variant=\"custom\"` only: the image URL to render (e.g. a URL your app already fetched from a\nlogo API). Ignored for `full`/`mark`.",
3724
+ "type": {
3725
+ "text": "string"
3726
+ },
3727
+ "default": "null",
3728
+ "readonly": true,
3729
+ "attribute": "src"
3730
+ },
3731
+ {
3732
+ "kind": "field",
3733
+ "name": "variant",
3734
+ "description": "How much of the logo to render. `full` is the icon + \"EG BrandSync\" wordmark (190.977x44\nnatural size); `mark` is just the icon (44x44 natural size), no wordmark; `custom` renders a\nconsumer-supplied image via `src`/`alt` instead of a built-in BrandSync asset -- see the class\ndoc above.",
3735
+ "type": {
3736
+ "text": "\"custom\" | \"full\" | \"mark\"",
3737
+ "references": [
3738
+ {
3739
+ "name": "BsLogoVariant"
3740
+ }
3741
+ ]
3742
+ },
3743
+ "default": "'full'",
3744
+ "readonly": true,
3745
+ "attribute": "variant"
3746
+ }
3747
+ ],
3748
+ "cssParts": [
3749
+ {
3750
+ "name": "logo",
3751
+ "description": "The rendered SVG/image's wrapper."
3752
+ }
3753
+ ],
3754
+ "cssProperties": [
3755
+ {
3756
+ "name": "--bs-logo-asset-dark-display",
3757
+ "description": "The background=\"auto\" counterpart to --bs-logo-asset-light-display above -- see that entry."
3758
+ },
3759
+ {
3760
+ "name": "--bs-logo-asset-light-display",
3761
+ "description": "Only read when background=\"auto\" (the default). Defined in src/global/base.css, not here -- that's this library's own bridge from the ambient [data-theme=\"dark\"] attribute to which full-wordmark asset shows, not a per-component override point most consumers need to touch directly."
3762
+ },
3763
+ {
3764
+ "name": "--bs-logo-height-custom",
3765
+ "description": "Height of the rendered image when variant=\"custom\". Width is `auto` (not a fixed custom property) so a consumer's own logo keeps its natural aspect ratio -- only the height is constrained, matching `full`/`mark`'s shared 44px height. Defaults to 44px."
3766
+ },
3767
+ {
3768
+ "name": "--bs-logo-height-full",
3769
+ "description": "Height of the rendered logo when variant=\"full\". 44px."
3770
+ },
3771
+ {
3772
+ "name": "--bs-logo-height-mark",
3773
+ "description": "Height of the rendered logo when variant=\"mark\". 44px."
3774
+ },
3775
+ {
3776
+ "name": "--bs-logo-width-full",
3777
+ "description": "Width of the rendered logo when variant=\"full\". 190.977px -- the light asset's natural width after its icon-to-wordmark gap was tightened from Figma's own exported spacing (see brandsync-logo-full-light.ts) -- a literal size, not a brandsync-tokens alias, since this is a fixed asset's natural dimensions rather than a themeable design token."
3778
+ },
3779
+ {
3780
+ "name": "--bs-logo-width-mark",
3781
+ "description": "Width of the rendered logo when variant=\"mark\". 44px."
3782
+ }
3783
+ ]
3784
+ }
3785
+ ],
3786
+ "exports": [
3787
+ {
3788
+ "kind": "js",
3789
+ "name": "BsLogo",
3790
+ "declaration": {
3791
+ "name": "BsLogo"
3792
+ }
3793
+ },
3794
+ {
3795
+ "kind": "custom-element-definition",
3796
+ "name": "bs-logo",
3797
+ "declaration": {
3798
+ "name": "BsLogo"
3799
+ }
3800
+ }
3801
+ ]
3802
+ },
3803
+ {
3804
+ "kind": "javascript-module",
3805
+ "path": "src/components/bs-menu/bs-menu.tsx",
3806
+ "declarations": [
3807
+ {
3808
+ "kind": "class",
3809
+ "customElement": true,
3810
+ "tagName": "bs-menu",
3811
+ "name": "BsMenu",
3039
3812
  "description": "A generic dropdown/popup menu container: a rounded, elevated list of items (typically\n`bs-menu-item` elements).\n\n## When to use\n- A popup list of actions/options triggered by another control (e.g. a \"more options\" kebab\n button), such as `bs-chatbot-response-action`'s `menu` slot.\n\n## When not to use\n- A persistent, always-visible list of options -- this component is purpose-built as a popup\n surface (rounded corners, elevation shadow), not a plain list.",
3040
3813
  "slots": [
3041
3814
  {
3042
- "name": "",
3043
- "description": "Default slot: the menu's items (typically `bs-menu-item` elements, though anything can\nbe slotted in -- this component doesn't restrict slot content via JS)."
3815
+ "name": "",
3816
+ "description": "Default slot: the menu's items (typically `bs-menu-item` elements, though anything can\nbe slotted in -- this component doesn't restrict slot content via JS)."
3817
+ }
3818
+ ],
3819
+ "cssParts": [
3820
+ {
3821
+ "name": "list",
3822
+ "description": "The rounded, elevated box wrapping the slotted items."
3823
+ }
3824
+ ]
3825
+ }
3826
+ ],
3827
+ "exports": [
3828
+ {
3829
+ "kind": "js",
3830
+ "name": "BsMenu",
3831
+ "declaration": {
3832
+ "name": "BsMenu"
3833
+ }
3834
+ },
3835
+ {
3836
+ "kind": "custom-element-definition",
3837
+ "name": "bs-menu",
3838
+ "declaration": {
3839
+ "name": "BsMenu"
3840
+ }
3841
+ }
3842
+ ]
3843
+ },
3844
+ {
3845
+ "kind": "javascript-module",
3846
+ "path": "src/components/bs-menu-item/bs-menu-item.tsx",
3847
+ "declarations": [
3848
+ {
3849
+ "kind": "class",
3850
+ "customElement": true,
3851
+ "tagName": "bs-menu-item",
3852
+ "name": "BsMenuItem",
3853
+ "description": "A single selectable row inside a `bs-menu`: an optional icon plus a text label, rendered as a\nreal `<button>` for correct keyboard/click semantics.\n\n## When to use\n- As a child of `bs-menu`, one per selectable action/option.\n\n## When not to use\n- Outside of `bs-menu` -- this component's sizing/hover treatment is designed to sit inside the\n menu's rounded, padded list box.",
3854
+ "attributes": [
3855
+ {
3856
+ "name": "disabled",
3857
+ "description": "Disables the item: no hover/pressed/focus styling, no pointer cursor, not reachable by\nkeyboard tabbing, and clicking it does not emit `bsSelect`.",
3858
+ "type": {
3859
+ "text": "boolean"
3860
+ },
3861
+ "default": "false",
3862
+ "fieldName": "disabled"
3863
+ }
3864
+ ],
3865
+ "members": [
3866
+ {
3867
+ "kind": "field",
3868
+ "name": "disabled",
3869
+ "description": "Disables the item: no hover/pressed/focus styling, no pointer cursor, not reachable by\nkeyboard tabbing, and clicking it does not emit `bsSelect`.",
3870
+ "type": {
3871
+ "text": "boolean"
3872
+ },
3873
+ "default": "false",
3874
+ "readonly": true,
3875
+ "attribute": "disabled"
3876
+ }
3877
+ ],
3878
+ "events": [
3879
+ {
3880
+ "name": "bsSelect",
3881
+ "description": "Fires when the item is clicked.",
3882
+ "type": {
3883
+ "text": "CustomEvent<void>"
3884
+ }
3885
+ }
3886
+ ],
3887
+ "slots": [
3888
+ {
3889
+ "name": "",
3890
+ "description": "Default slot: the item's text label."
3891
+ },
3892
+ {
3893
+ "name": "icon",
3894
+ "description": "Optional leading icon (24x24). When left empty, no icon space is reserved."
3895
+ }
3896
+ ],
3897
+ "cssParts": [
3898
+ {
3899
+ "name": "icon",
3900
+ "description": "The icon wrapper."
3901
+ },
3902
+ {
3903
+ "name": "item",
3904
+ "description": "The button element."
3905
+ },
3906
+ {
3907
+ "name": "label",
3908
+ "description": "The label wrapper."
3909
+ }
3910
+ ]
3911
+ }
3912
+ ],
3913
+ "exports": [
3914
+ {
3915
+ "kind": "js",
3916
+ "name": "BsMenuItem",
3917
+ "declaration": {
3918
+ "name": "BsMenuItem"
3919
+ }
3920
+ },
3921
+ {
3922
+ "kind": "custom-element-definition",
3923
+ "name": "bs-menu-item",
3924
+ "declaration": {
3925
+ "name": "BsMenuItem"
3926
+ }
3927
+ }
3928
+ ]
3929
+ },
3930
+ {
3931
+ "kind": "javascript-module",
3932
+ "path": "src/components/bs-modal/bs-modal.tsx",
3933
+ "declarations": [
3934
+ {
3935
+ "kind": "class",
3936
+ "customElement": true,
3937
+ "tagName": "bs-modal",
3938
+ "name": "BsModal",
3939
+ "description": "An overlay dialog that interrupts the current flow for a focused task or confirmation.\nCloses itself on backdrop click, Escape, or its own close button, and emits `bsClose`.\n\n## When to use\n- Confirming a consequential action (e.g. \"Confirm booking\") before it takes effect.\n- A short, focused task that doesn't warrant navigating to a new page.\n\n## When not to use\n- For non-blocking status messages — use a toast/notification instead of interrupting the user.\n- For a long, multi-step flow — a full page or a dedicated route is usually a better fit than a\n modal that just gets taller and taller.",
3940
+ "attributes": [
3941
+ {
3942
+ "name": "heading",
3943
+ "type": {
3944
+ "text": "string"
3945
+ },
3946
+ "fieldName": "heading"
3947
+ },
3948
+ {
3949
+ "name": "open",
3950
+ "description": "Mutable + reflected so the component can close itself (backdrop click, Escape, close button)\nthe same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.",
3951
+ "type": {
3952
+ "text": "boolean"
3953
+ },
3954
+ "default": "false",
3955
+ "fieldName": "open"
3956
+ },
3957
+ {
3958
+ "name": "size",
3959
+ "type": {
3960
+ "text": "\"lg\" | \"md\" | \"sm\"",
3961
+ "references": [
3962
+ {
3963
+ "name": "BsModalSize"
3964
+ }
3965
+ ]
3966
+ },
3967
+ "default": "'md'",
3968
+ "fieldName": "size"
3969
+ }
3970
+ ],
3971
+ "members": [
3972
+ {
3973
+ "kind": "field",
3974
+ "name": "heading",
3975
+ "type": {
3976
+ "text": "string"
3977
+ },
3978
+ "readonly": true,
3979
+ "attribute": "heading"
3980
+ },
3981
+ {
3982
+ "kind": "field",
3983
+ "name": "open",
3984
+ "description": "Mutable + reflected so the component can close itself (backdrop click, Escape, close button)\nthe same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.",
3985
+ "type": {
3986
+ "text": "boolean"
3987
+ },
3988
+ "default": "false",
3989
+ "attribute": "open",
3990
+ "reflects": true
3991
+ },
3992
+ {
3993
+ "kind": "field",
3994
+ "name": "size",
3995
+ "type": {
3996
+ "text": "\"lg\" | \"md\" | \"sm\"",
3997
+ "references": [
3998
+ {
3999
+ "name": "BsModalSize"
4000
+ }
4001
+ ]
4002
+ },
4003
+ "default": "'md'",
4004
+ "readonly": true,
4005
+ "attribute": "size"
4006
+ }
4007
+ ],
4008
+ "events": [
4009
+ {
4010
+ "name": "bsClose",
4011
+ "type": {
4012
+ "text": "CustomEvent<void>"
4013
+ }
4014
+ }
4015
+ ],
4016
+ "slots": [
4017
+ {
4018
+ "name": "",
4019
+ "description": "Default slot: the dialog body content."
4020
+ },
4021
+ {
4022
+ "name": "footer",
4023
+ "description": "Optional footer content (typically action buttons)."
4024
+ }
4025
+ ],
4026
+ "cssParts": [
4027
+ {
4028
+ "name": "backdrop",
4029
+ "description": "The full-viewport overlay behind the dialog."
4030
+ },
4031
+ {
4032
+ "name": "body",
4033
+ "description": "The body content wrapper."
4034
+ },
4035
+ {
4036
+ "name": "close",
4037
+ "description": "The close button."
4038
+ },
4039
+ {
4040
+ "name": "dialog",
4041
+ "description": "The dialog box itself."
4042
+ },
4043
+ {
4044
+ "name": "footer",
4045
+ "description": "The footer wrapper (only visible when the footer slot has content)."
4046
+ },
4047
+ {
4048
+ "name": "header",
4049
+ "description": "The header row (heading + close button)."
4050
+ }
4051
+ ]
4052
+ }
4053
+ ],
4054
+ "exports": [
4055
+ {
4056
+ "kind": "js",
4057
+ "name": "BsModal",
4058
+ "declaration": {
4059
+ "name": "BsModal"
4060
+ }
4061
+ },
4062
+ {
4063
+ "kind": "custom-element-definition",
4064
+ "name": "bs-modal",
4065
+ "declaration": {
4066
+ "name": "BsModal"
4067
+ }
4068
+ }
4069
+ ]
4070
+ },
4071
+ {
4072
+ "kind": "javascript-module",
4073
+ "path": "src/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.tsx",
4074
+ "declarations": [
4075
+ {
4076
+ "kind": "class",
4077
+ "customElement": true,
4078
+ "tagName": "bs-navigation-drawer",
4079
+ "name": "BsNavigationDrawer",
4080
+ "description": "A left-side persistent navigation sidebar: the BrandSync logo, a \"Main Menu\" title with a\ncollapse toggle, a reserved slot for a search field, and a scrollable list of nav items.\n\n## When to use\n- The primary in-app navigation, shown alongside `bs-navigation-header` (typically that\n header's `with-navigation-drawer` alignment, which omits its own logo since this component\n already renders one).\n\n## When not to use\n- The top navigation bar itself -- use `bs-navigation-header` instead.\n\nThis component renders a real `<nav>` landmark (no explicit `role` needed -- `<nav>` already\ncarries the implicit `navigation` role), labeled via `aria-label={heading}` so the landmark\nstill has a name even when collapsed (see below).\n\n`collapsed` narrows the drawer to a 96px icon-only rail, per Figma node 8028:135374\n(\"Type=Collapsed\"): the title text disappears, the logo swaps from the full \"EG BrandSync\"\nwordmark (`bs-logo variant=\"full\"`) to the real icon-only mark (`bs-logo variant=\"mark\"` -- a\nsecond, properly-designed asset, not a CSS crop of the full one) via CSS visibility toggling on\nboth, the same `:host([collapsed])` attribute-selector pattern already used for the\n`search`/`search-trigger` swap below, the `search` slot is replaced by a compact built-in\nsearch-trigger button (this component can't meaningfully shrink arbitrary slotted search-field\ncontent down to icon size itself, so it emits `bsSearchClick` instead -- e.g. to open a full\nsearch overlay), and every top-level\n`bs-navigation-drawer-item`'s layout switches from icon-beside-label to icon-above-caption.\nThat last part is real prop propagation, not a CSS trick: this component keeps each direct-child\nitem's own `collapsed` prop in sync with its own (see `syncItemsCollapsed` below), the same\ndirect-children-prop-sync approach `bs-tabs` already uses for coordinating `selected` across its\n`bs-tab` children. Clicking the toggle self-toggles `collapsed` (simple local UI state, not\nsomething needing cross-component coordination -- closer to `bs-switch`'s self-toggling\n`checked` than `bs-tab`'s non-self-toggling `selected`) and emits `bsCollapse` with the new\nvalue. The toggle's own caret icon does NOT rotate when collapsed -- Figma's collapsed mock\nreuses the identical left-pointing \"CaretLeft\" asset unchanged, confirmed by directly inspecting\nthat state, so this deliberately does not add the same \"flip on toggle\" idiom the drawer item's\nown disclosure chevron does (that one really is an unconfirmed addition; this one was checked).",
4081
+ "attributes": [
4082
+ {
4083
+ "name": "collapsed",
4084
+ "description": "Narrows the drawer to a 96px icon-only rail (Figma node 8028:135374). Mutable and reflected\n-- clicking the collapse toggle toggles this directly (self-toggling, see the class doc above\nfor why), and this component keeps every direct-child `bs-navigation-drawer-item`'s own\n`collapsed` prop synced to match (see `syncItemsCollapsed`).",
4085
+ "type": {
4086
+ "text": "boolean"
4087
+ },
4088
+ "default": "false",
4089
+ "fieldName": "collapsed"
4090
+ },
4091
+ {
4092
+ "name": "collapsible",
4093
+ "description": "Whether this drawer can be collapsed at all. `false` renders no collapse toggle/chevron --\na \"fixed\" side nav (Carbon's terminology: a `Fixed Side Nav` never collapses, as opposed to a\nrail-capable one) that's always fully expanded. `collapsed` is ignored while this is `false`.",
4094
+ "type": {
4095
+ "text": "boolean"
4096
+ },
4097
+ "default": "true",
4098
+ "fieldName": "collapsible"
4099
+ },
4100
+ {
4101
+ "name": "heading",
4102
+ "description": "Heading text shown next to the collapse toggle, and used as the `<nav>` landmark's\n`aria-label` (so the landmark keeps a name even when `collapsed` hides the visible text).",
4103
+ "type": {
4104
+ "text": "string"
4105
+ },
4106
+ "default": "'Main Menu'",
4107
+ "fieldName": "heading"
4108
+ },
4109
+ {
4110
+ "name": "logo-background",
4111
+ "description": "Forwarded straight to both internal `bs-logo` elements' own `background` prop. Defaults to\n`\"auto\"`, which follows the ambient `[data-theme=\"dark\"]` state automatically (see `bs-logo`'s\nown docs) -- so if this drawer ends up on a dark surface via the normal theming mechanism, the\nlogo switches to its dedicated dark-background asset with no wiring needed. Set\n`\"light\"`/`\"dark\"` explicitly only if you've overridden `--bs-navigation-drawer-bg` to\nsomething dark yourself *without* setting `[data-theme=\"dark\"]`, and need to pin the logo\nregardless of theme. Has no visible effect on the `variant=\"mark\"` logo shown while\n`collapsed` (see `bs-logo`'s own docs -- there's only one real designed mark asset, it's\nbackground-agnostic).",
4112
+ "type": {
4113
+ "text": "\"auto\" | \"dark\" | \"light\""
4114
+ },
4115
+ "default": "'auto'",
4116
+ "fieldName": "logoBackground"
4117
+ }
4118
+ ],
4119
+ "members": [
4120
+ {
4121
+ "kind": "field",
4122
+ "name": "collapsed",
4123
+ "description": "Narrows the drawer to a 96px icon-only rail (Figma node 8028:135374). Mutable and reflected\n-- clicking the collapse toggle toggles this directly (self-toggling, see the class doc above\nfor why), and this component keeps every direct-child `bs-navigation-drawer-item`'s own\n`collapsed` prop synced to match (see `syncItemsCollapsed`).",
4124
+ "type": {
4125
+ "text": "boolean"
4126
+ },
4127
+ "default": "false",
4128
+ "attribute": "collapsed",
4129
+ "reflects": true
4130
+ },
4131
+ {
4132
+ "kind": "field",
4133
+ "name": "collapsible",
4134
+ "description": "Whether this drawer can be collapsed at all. `false` renders no collapse toggle/chevron --\na \"fixed\" side nav (Carbon's terminology: a `Fixed Side Nav` never collapses, as opposed to a\nrail-capable one) that's always fully expanded. `collapsed` is ignored while this is `false`.",
4135
+ "type": {
4136
+ "text": "boolean"
4137
+ },
4138
+ "default": "true",
4139
+ "readonly": true,
4140
+ "attribute": "collapsible"
4141
+ },
4142
+ {
4143
+ "kind": "field",
4144
+ "name": "heading",
4145
+ "description": "Heading text shown next to the collapse toggle, and used as the `<nav>` landmark's\n`aria-label` (so the landmark keeps a name even when `collapsed` hides the visible text).",
4146
+ "type": {
4147
+ "text": "string"
4148
+ },
4149
+ "default": "'Main Menu'",
4150
+ "readonly": true,
4151
+ "attribute": "heading"
4152
+ },
4153
+ {
4154
+ "kind": "field",
4155
+ "name": "logoBackground",
4156
+ "description": "Forwarded straight to both internal `bs-logo` elements' own `background` prop. Defaults to\n`\"auto\"`, which follows the ambient `[data-theme=\"dark\"]` state automatically (see `bs-logo`'s\nown docs) -- so if this drawer ends up on a dark surface via the normal theming mechanism, the\nlogo switches to its dedicated dark-background asset with no wiring needed. Set\n`\"light\"`/`\"dark\"` explicitly only if you've overridden `--bs-navigation-drawer-bg` to\nsomething dark yourself *without* setting `[data-theme=\"dark\"]`, and need to pin the logo\nregardless of theme. Has no visible effect on the `variant=\"mark\"` logo shown while\n`collapsed` (see `bs-logo`'s own docs -- there's only one real designed mark asset, it's\nbackground-agnostic).",
4157
+ "type": {
4158
+ "text": "\"auto\" | \"dark\" | \"light\""
4159
+ },
4160
+ "default": "'auto'",
4161
+ "readonly": true,
4162
+ "attribute": "logo-background"
4163
+ }
4164
+ ],
4165
+ "events": [
4166
+ {
4167
+ "name": "bsCollapse",
4168
+ "description": "Fires with the new `collapsed` value when the collapse toggle button is clicked.",
4169
+ "type": {
4170
+ "text": "CustomEvent<boolean>"
4171
+ }
4172
+ },
4173
+ {
4174
+ "name": "bsSearchClick",
4175
+ "description": "Fires when the compact search-trigger button (shown instead of the `search` slot while\n`collapsed`) is clicked -- e.g. to open a full search overlay. This component has no\nvisibility into what the `search` slot actually contains, so it can't drive a real search\nitself once shrunk to icon size.",
4176
+ "type": {
4177
+ "text": "CustomEvent<void>"
4178
+ }
4179
+ }
4180
+ ],
4181
+ "slots": [
4182
+ {
4183
+ "name": "",
4184
+ "description": "Default slot: the scrollable list of nav items, typically one or more\n`bs-navigation-drawer-item` elements."
4185
+ },
4186
+ {
4187
+ "name": "search",
4188
+ "description": "Reserved for a search field, e.g. a `bs-input type=\"search\"`. This component\ndoes not build one itself. Hidden while `collapsed` (see above)."
4189
+ }
4190
+ ],
4191
+ "cssParts": [
4192
+ {
4193
+ "name": "collapse",
4194
+ "description": "The collapse toggle button."
4195
+ },
4196
+ {
4197
+ "name": "items",
4198
+ "description": "The wrapper around the default (items) slot."
4199
+ },
4200
+ {
4201
+ "name": "logo",
4202
+ "description": "The wrapper around the BrandSync brand mark. Two of these exist in the shadow DOM\nat once (one wrapping a `bs-logo variant=\"full\"`, one wrapping a `bs-logo variant=\"mark\"`),\nboth carrying this same part name (the same \"multiple elements, one shared part name\"\napproach `bs-attachment`'s `star` part uses) -- only one is visible at a time, toggled by\nplain CSS on `collapsed` (see above), so `::part(logo)` always reaches whichever is showing."
4203
+ },
4204
+ {
4205
+ "name": "search",
4206
+ "description": "The wrapper around the `search` slot."
4207
+ },
4208
+ {
4209
+ "name": "search-trigger",
4210
+ "description": "The compact search button shown instead of the `search` slot while `collapsed`."
4211
+ },
4212
+ {
4213
+ "name": "title",
4214
+ "description": "The \"Main Menu\" heading text wrapper."
4215
+ }
4216
+ ],
4217
+ "cssProperties": [
4218
+ {
4219
+ "name": "--bs-navigation-drawer-bg",
4220
+ "description": "Background of the drawer. Aliased to --bs-surface-base."
4221
+ },
4222
+ {
4223
+ "name": "--bs-navigation-drawer-border",
4224
+ "description": "Right border color. Aliased to --bs-border-neutral-container."
4225
+ },
4226
+ {
4227
+ "name": "--bs-navigation-drawer-collapse-hover",
4228
+ "description": "Collapse toggle background on hover. Aliased to --bs-color-neutral-container."
4229
+ },
4230
+ {
4231
+ "name": "--bs-navigation-drawer-collapse-icon",
4232
+ "description": "Collapse toggle icon color. Aliased to --bs-icon-default."
4233
+ },
4234
+ {
4235
+ "name": "--bs-navigation-drawer-collapse-pressed",
4236
+ "description": "Collapse toggle background when pressed. Aliased to --bs-color-neutral-container-pressed."
4237
+ },
4238
+ {
4239
+ "name": "--bs-navigation-drawer-collapse-radius",
4240
+ "description": "Corner radius of the collapse toggle button. Aliased to --bs-border-radius-100."
4241
+ },
4242
+ {
4243
+ "name": "--bs-navigation-drawer-collapse-size",
4244
+ "description": "Width/height of the collapse toggle button. 48px."
4245
+ },
4246
+ {
4247
+ "name": "--bs-navigation-drawer-collapsed-width",
4248
+ "description": "Width of the drawer when `collapsed`. 96px, per Figma node 8028:135374's own frame (\"Type=Collapsed\")."
4249
+ },
4250
+ {
4251
+ "name": "--bs-navigation-drawer-gap",
4252
+ "description": "Gap between the logo, title row, search slot, and items list. Aliased to --bs-spacing-300 (24px, matching the drawer's own top/bottom padding for an even rhythm) -- bumped up from the originally Figma-measured --bs-spacing-150 (12px) at the user's request after seeing it rendered (felt cramped in practice), not a Figma re-measurement."
4253
+ },
4254
+ {
4255
+ "name": "--bs-navigation-drawer-items-gap",
4256
+ "description": "Gap between top-level item rows in the items list. Aliased to --bs-spacing-100."
4257
+ },
4258
+ {
4259
+ "name": "--bs-navigation-drawer-padding-left",
4260
+ "description": "Left padding. Aliased to --bs-spacing-300 -- note this is deliberately different from --bs-navigation-drawer-padding-right (below), per the Figma spec. Both are ignored (set to 0) while `collapsed` -- see Figma node 8028:135374, which uses `px-0` for the collapsed rail."
4261
+ },
4262
+ {
4263
+ "name": "--bs-navigation-drawer-padding-right",
4264
+ "description": "Right padding. Aliased to --bs-spacing-200."
4265
+ },
4266
+ {
4267
+ "name": "--bs-navigation-drawer-padding-y",
4268
+ "description": "Top/bottom padding. Aliased to --bs-spacing-300."
4269
+ },
4270
+ {
4271
+ "name": "--bs-navigation-drawer-search-trigger-bg",
4272
+ "description": "Search-trigger background. Aliased to --bs-color-neutral-container (Figma's \"button/neutral-container\" tonal fill)."
4273
+ },
4274
+ {
4275
+ "name": "--bs-navigation-drawer-search-trigger-border",
4276
+ "description": "Search-trigger border color. Aliased to --bs-border-neutral-container (same border color as the drawer's own right edge)."
4277
+ },
4278
+ {
4279
+ "name": "--bs-navigation-drawer-search-trigger-icon",
4280
+ "description": "Search-trigger icon color. Aliased to --bs-icon-default."
4281
+ },
4282
+ {
4283
+ "name": "--bs-navigation-drawer-search-trigger-size",
4284
+ "description": "Width/height of the compact search-trigger button shown instead of the `search` slot while `collapsed`. 44px, per Figma."
4285
+ },
4286
+ {
4287
+ "name": "--bs-navigation-drawer-title-color",
4288
+ "description": "Title text color. Aliased to --bs-text-default."
4289
+ },
4290
+ {
4291
+ "name": "--bs-navigation-drawer-title-font-family",
4292
+ "description": "Title text font family. Aliased to --bs-typography-font-family-heading."
4293
+ },
4294
+ {
4295
+ "name": "--bs-navigation-drawer-title-font-size",
4296
+ "description": "Title text font size. The Figma spec calls this style \"heading h7\", but src/global/tokens.css only defines heading tokens through h6 (--bs-fontsize-heading-h6: 16px, --bs-line-height-heading-h6: 20) -- there is no h7 tier. h6 is the smallest/closest defined tier, so this aliases to the plain --bs-font-size-md token (also 16px, the same value as --bs-fontsize-heading-h6) rather than inventing a new h7 token. Flagged here as a judgment call, not a pixel-confirmed h7 value."
4297
+ },
4298
+ {
4299
+ "name": "--bs-navigation-drawer-title-font-weight",
4300
+ "description": "Title text font weight. Aliased to --bs-font-weight-bold."
4301
+ },
4302
+ {
4303
+ "name": "--bs-navigation-drawer-title-line-height",
4304
+ "description": "Title text line height. Aliased to --bs-line-height-heading-h6, for the same reason as the font-size prop above."
4305
+ },
4306
+ {
4307
+ "name": "--bs-navigation-drawer-width",
4308
+ "description": "Default width of the drawer. 280px, matching Figma's own frame -- overridable by a consumer that needs a different fixed width."
4309
+ }
4310
+ ]
4311
+ }
4312
+ ],
4313
+ "exports": [
4314
+ {
4315
+ "kind": "js",
4316
+ "name": "BsNavigationDrawer",
4317
+ "declaration": {
4318
+ "name": "BsNavigationDrawer"
4319
+ }
4320
+ },
4321
+ {
4322
+ "kind": "custom-element-definition",
4323
+ "name": "bs-navigation-drawer",
4324
+ "declaration": {
4325
+ "name": "BsNavigationDrawer"
4326
+ }
4327
+ }
4328
+ ]
4329
+ },
4330
+ {
4331
+ "kind": "javascript-module",
4332
+ "path": "src/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.tsx",
4333
+ "declarations": [
4334
+ {
4335
+ "kind": "class",
4336
+ "customElement": true,
4337
+ "tagName": "bs-navigation-drawer-item",
4338
+ "name": "BsNavigationDrawerItem",
4339
+ "description": "A single row within a `bs-navigation-drawer`'s item list -- either a plain leaf nav item, or an\n`expandable` group header that discloses nested `bs-navigation-drawer-item` children.\n\n## When to use\n- Every row inside a `bs-navigation-drawer`'s default slot.\n\n## When not to use\n- A standalone action outside a navigation drawer -- use `bs-button`/`bs-menu-item` instead.\n\nClick behavior is mutually exclusive, based on `expandable`:\n- `expandable = false` (a plain leaf item): clicking only emits `bsSelect`. `selected` is NOT\n self-toggling -- same non-self-toggling precedent as `bs-tab`'s `selected` (see `bs-tab.tsx`'s\n class doc): coordinating which sibling row is selected needs cross-item state a\n consumer/wrapper owns, not something this component can reason about on its own.\n- `expandable = true` (a group header, never shown with a `selected` tint): clicking toggles\n `this.expanded` directly and emits `bsToggle` with the new value, and does NOT emit\n `bsSelect`. This IS self-toggling, unlike `selected` above -- it's simple local disclosure\n state with no cross-item coordination needed, closer to `bs-switch`'s self-toggling `checked`\n than `bs-tab`'s non-self-toggling `selected`.\n\nNesting: put child `<bs-navigation-drawer-item nested>` elements inside a parent\n`<bs-navigation-drawer-item expandable>` with `slot=\"children\"`. The parent shows/hides that\nslot's content based on its own `expanded` prop, via a pure-CSS attribute selector (no JS\nvisibility toggling needed, since `expanded` is reflected).\n\n`collapsed` switches this row from its normal icon-beside-label row layout to a compact\nicon-above-caption column (per Figma node 8028:135374, the drawer's \"Type=Collapsed\" state) --\nyou don't need to set this yourself on every item: a parent `bs-navigation-drawer` keeps its own\ntop-level items' `collapsed` prop in sync with its own `collapsed` state automatically (see\n`bs-navigation-drawer.tsx`'s `syncItemsCollapsed`, the same direct-children-prop-sync approach\n`bs-tabs` uses for coordinating `selected` across its own `bs-tab` children). It's still a public\nprop so a standalone item (or this component's own stories) can be demoed without the parent.",
4340
+ "attributes": [
4341
+ {
4342
+ "name": "aria-label",
4343
+ "description": "Optional accessible name override. Not required for `collapsed` rows -- unlike an\nicon-only button, the label caption stays visible (just restyled smaller, under the icon) in\nthat mode per Figma, so the button's default accessible-name computation (its own text\ncontent) already works. Set this if you want a fuller/different name than the visible caption\n(e.g. truncated captions, or matching `bs-switch`/`bs-slider`'s `ariaLabel` convention for\nconsistency).",
4344
+ "type": {
4345
+ "text": "string"
4346
+ },
4347
+ "default": "null",
4348
+ "fieldName": "ariaLabel"
4349
+ },
4350
+ {
4351
+ "name": "collapsed",
4352
+ "description": "Switches this row to the compact icon-above-caption column layout used when its parent\n`bs-navigation-drawer` is `collapsed` (see the class doc above). Reflected so\n`bs-navigation-drawer-item[collapsed]` is CSS-targetable. Also forces `expandable` rows'\nchevron and `children` slot to stay hidden regardless of `expanded` -- Figma's collapsed rail\nnever shows a nested tree.",
4353
+ "type": {
4354
+ "text": "boolean"
4355
+ },
4356
+ "default": "false",
4357
+ "fieldName": "collapsed"
4358
+ },
4359
+ {
4360
+ "name": "expandable",
4361
+ "description": "Renders this row as a disclosure/group header (trailing chevron, self-toggling `expanded`,\n`bsToggle` instead of `bsSelect` on click) instead of a plain navigable leaf item. See the\nclass doc above for the full click-behavior split.",
4362
+ "type": {
4363
+ "text": "boolean"
4364
+ },
4365
+ "default": "false",
4366
+ "fieldName": "expandable"
4367
+ },
4368
+ {
4369
+ "name": "expanded",
4370
+ "description": "Whether an `expandable` row's `children` slot is shown. Mutable and reflected -- clicking an\n`expandable` row toggles this directly (self-toggling, unlike `selected` above), and CSS\nshows/hides the `children` slot wrapper based on the reflected attribute. Ignored when\n`expandable` is false.",
4371
+ "type": {
4372
+ "text": "boolean"
4373
+ },
4374
+ "default": "false",
4375
+ "fieldName": "expanded"
4376
+ },
4377
+ {
4378
+ "name": "nested",
4379
+ "description": "Marks this as a child row nested under an `expandable` parent (via `slot=\"children\"`) --\ndeepens the left indent and stops reserving `icon` slot space entirely (Figma's nested rows\nnever have icons).",
4380
+ "type": {
4381
+ "text": "boolean"
4382
+ },
4383
+ "default": "false",
4384
+ "fieldName": "nested"
4385
+ },
4386
+ {
4387
+ "name": "selected",
4388
+ "description": "Tints the row's background/text to indicate it's the current destination. NOT\nself-toggling -- see the class doc above for why. Ignored (never applied) when `expandable`\nis true. Reflected so consumers/CSS can target `bs-navigation-drawer-item[selected]`.",
4389
+ "type": {
4390
+ "text": "boolean"
4391
+ },
4392
+ "default": "false",
4393
+ "fieldName": "selected"
4394
+ }
4395
+ ],
4396
+ "members": [
4397
+ {
4398
+ "kind": "field",
4399
+ "name": "ariaLabel",
4400
+ "description": "Optional accessible name override. Not required for `collapsed` rows -- unlike an\nicon-only button, the label caption stays visible (just restyled smaller, under the icon) in\nthat mode per Figma, so the button's default accessible-name computation (its own text\ncontent) already works. Set this if you want a fuller/different name than the visible caption\n(e.g. truncated captions, or matching `bs-switch`/`bs-slider`'s `ariaLabel` convention for\nconsistency).",
4401
+ "type": {
4402
+ "text": "string"
4403
+ },
4404
+ "default": "null",
4405
+ "readonly": true,
4406
+ "attribute": "aria-label"
4407
+ },
4408
+ {
4409
+ "kind": "field",
4410
+ "name": "collapsed",
4411
+ "description": "Switches this row to the compact icon-above-caption column layout used when its parent\n`bs-navigation-drawer` is `collapsed` (see the class doc above). Reflected so\n`bs-navigation-drawer-item[collapsed]` is CSS-targetable. Also forces `expandable` rows'\nchevron and `children` slot to stay hidden regardless of `expanded` -- Figma's collapsed rail\nnever shows a nested tree.",
4412
+ "type": {
4413
+ "text": "boolean"
4414
+ },
4415
+ "default": "false",
4416
+ "readonly": true,
4417
+ "attribute": "collapsed",
4418
+ "reflects": true
4419
+ },
4420
+ {
4421
+ "kind": "field",
4422
+ "name": "expandable",
4423
+ "description": "Renders this row as a disclosure/group header (trailing chevron, self-toggling `expanded`,\n`bsToggle` instead of `bsSelect` on click) instead of a plain navigable leaf item. See the\nclass doc above for the full click-behavior split.",
4424
+ "type": {
4425
+ "text": "boolean"
4426
+ },
4427
+ "default": "false",
4428
+ "readonly": true,
4429
+ "attribute": "expandable"
4430
+ },
4431
+ {
4432
+ "kind": "field",
4433
+ "name": "expanded",
4434
+ "description": "Whether an `expandable` row's `children` slot is shown. Mutable and reflected -- clicking an\n`expandable` row toggles this directly (self-toggling, unlike `selected` above), and CSS\nshows/hides the `children` slot wrapper based on the reflected attribute. Ignored when\n`expandable` is false.",
4435
+ "type": {
4436
+ "text": "boolean"
4437
+ },
4438
+ "default": "false",
4439
+ "attribute": "expanded",
4440
+ "reflects": true
4441
+ },
4442
+ {
4443
+ "kind": "field",
4444
+ "name": "nested",
4445
+ "description": "Marks this as a child row nested under an `expandable` parent (via `slot=\"children\"`) --\ndeepens the left indent and stops reserving `icon` slot space entirely (Figma's nested rows\nnever have icons).",
4446
+ "type": {
4447
+ "text": "boolean"
4448
+ },
4449
+ "default": "false",
4450
+ "readonly": true,
4451
+ "attribute": "nested"
4452
+ },
4453
+ {
4454
+ "kind": "field",
4455
+ "name": "selected",
4456
+ "description": "Tints the row's background/text to indicate it's the current destination. NOT\nself-toggling -- see the class doc above for why. Ignored (never applied) when `expandable`\nis true. Reflected so consumers/CSS can target `bs-navigation-drawer-item[selected]`.",
4457
+ "type": {
4458
+ "text": "boolean"
4459
+ },
4460
+ "default": "false",
4461
+ "readonly": true,
4462
+ "attribute": "selected",
4463
+ "reflects": true
4464
+ }
4465
+ ],
4466
+ "events": [
4467
+ {
4468
+ "name": "bsSelect",
4469
+ "description": "Fires on click, only when `expandable` is false. See the class doc above.",
4470
+ "type": {
4471
+ "text": "CustomEvent<void>"
4472
+ }
4473
+ },
4474
+ {
4475
+ "name": "bsToggle",
4476
+ "description": "Fires with the new `expanded` value on click, only when `expandable` is true. See the class\ndoc above.",
4477
+ "type": {
4478
+ "text": "CustomEvent<boolean>"
4479
+ }
4480
+ }
4481
+ ],
4482
+ "slots": [
4483
+ {
4484
+ "name": "",
4485
+ "description": "Default slot: the row's label text."
4486
+ },
4487
+ {
4488
+ "name": "children",
4489
+ "description": "`expandable` only: nested `bs-navigation-drawer-item` rows, shown/hidden based\non `expanded`."
4490
+ },
4491
+ {
4492
+ "name": "icon",
4493
+ "description": "Optional leading icon (24x24). Only rendered (and only reserves layout space) when\npopulated -- same \"only take up space if slotted\" pattern as `bs-tab`'s `icon` slot. Not\nrendered at all for `nested` rows (Figma's nested rows never have icons)."
4494
+ }
4495
+ ],
4496
+ "cssParts": [
4497
+ {
4498
+ "name": "chevron",
4499
+ "description": "The trailing expand/collapse chevron wrapper (`expandable` only)."
4500
+ },
4501
+ {
4502
+ "name": "children",
4503
+ "description": "The wrapper around the `children` slot."
4504
+ },
4505
+ {
4506
+ "name": "icon",
4507
+ "description": "The icon wrapper (top-level, non-`nested` rows only)."
4508
+ },
4509
+ {
4510
+ "name": "item",
4511
+ "description": "The row's root `<button>` element."
4512
+ },
4513
+ {
4514
+ "name": "label",
4515
+ "description": "The label text wrapper."
4516
+ }
4517
+ ],
4518
+ "cssProperties": [
4519
+ {
4520
+ "name": "--bs-navigation-drawer-item-bg-focus",
4521
+ "description": "Unselected row background while focused (`:focus-visible`) -- shown together with, not instead of, the focus ring below. Aliased to --bs-surface-focus, per the same Figma node (identical value to --bs-surface-hover there)."
4522
+ },
4523
+ {
4524
+ "name": "--bs-navigation-drawer-item-bg-hover",
4525
+ "description": "Unselected row background on hover. Aliased to --bs-surface-hover, per Figma node 13472:7172 (the full Enabled/Hovered/Focused/Pressed/ Disabled state matrix for this component)."
4526
+ },
4527
+ {
4528
+ "name": "--bs-navigation-drawer-item-bg-pressed",
4529
+ "description": "Unselected row background while pressed (`:active`). Aliased to --bs-surface-pressed, per the same Figma node."
4530
+ },
4531
+ {
4532
+ "name": "--bs-navigation-drawer-item-bg-selected",
4533
+ "description": "`selected` row background, resting. Aliased to --bs-surface-selected."
4534
+ },
4535
+ {
4536
+ "name": "--bs-navigation-drawer-item-bg-selected-focus",
4537
+ "description": "`selected` row background while focused. Aliased to --bs-surface-selected-focus, per the same Figma node."
4538
+ },
4539
+ {
4540
+ "name": "--bs-navigation-drawer-item-bg-selected-hover",
4541
+ "description": "`selected` row background on hover. Aliased to --bs-surface-selected-hover, per the same Figma node."
4542
+ },
4543
+ {
4544
+ "name": "--bs-navigation-drawer-item-bg-selected-pressed",
4545
+ "description": "`selected` row background while pressed. Aliased to --bs-surface-selected-pressed, per the same Figma node."
4546
+ },
4547
+ {
4548
+ "name": "--bs-navigation-drawer-item-children-gap",
4549
+ "description": "Gap between nested child rows. Aliased to --bs-spacing-100."
4550
+ },
4551
+ {
4552
+ "name": "--bs-navigation-drawer-item-collapsed-font-size",
4553
+ "description": "Caption font size when `collapsed`. Aliased to --bs-fontsize-caption-sm (12px)."
4554
+ },
4555
+ {
4556
+ "name": "--bs-navigation-drawer-item-collapsed-gap",
4557
+ "description": "Gap between the icon and caption when `collapsed`. Aliased to --bs-spacing-100."
4558
+ },
4559
+ {
4560
+ "name": "--bs-navigation-drawer-item-collapsed-icon-padding-x",
4561
+ "description": "Left/right padding of the small rounded chip behind a `collapsed` row's icon (the `selected` tint applies to just this chip, not the full column). Aliased to --bs-spacing-100."
4562
+ },
4563
+ {
4564
+ "name": "--bs-navigation-drawer-item-collapsed-icon-padding-y",
4565
+ "description": "Top/bottom padding of that chip. Aliased to --bs-spacing-50."
4566
+ },
4567
+ {
4568
+ "name": "--bs-navigation-drawer-item-collapsed-line-height",
4569
+ "description": "Caption line height when `collapsed`. Aliased to --bs-line-height-caption-sm."
4570
+ },
4571
+ {
4572
+ "name": "--bs-navigation-drawer-item-collapsed-padding",
4573
+ "description": "Padding of a `collapsed` row. Aliased to --bs-spacing-100 (8px, all sides -- Figma node 8028:135374's \"Container\")."
4574
+ },
4575
+ {
4576
+ "name": "--bs-navigation-drawer-item-color",
4577
+ "description": "Resting (unselected) text/icon color. Aliased to --bs-text-muted."
4578
+ },
4579
+ {
4580
+ "name": "--bs-navigation-drawer-item-color-hover",
4581
+ "description": "Unselected row text/icon color on hover, focus, or pressed (all three share this color in Figma, distinct from the muted resting color). Aliased to --bs-text-secondary. `selected` rows keep --bs-navigation-drawer-item-color-selected across all of these states instead -- Figma never changes a selected row's text color."
4582
+ },
4583
+ {
4584
+ "name": "--bs-navigation-drawer-item-color-selected",
4585
+ "description": "`selected` text/icon color. Aliased to --bs-text-default."
4586
+ },
4587
+ {
4588
+ "name": "--bs-navigation-drawer-item-focus-ring-color",
4589
+ "description": "Focus ring color. Aliased to --bs-border-neutral-focus."
4590
+ },
4591
+ {
4592
+ "name": "--bs-navigation-drawer-item-font-size",
4593
+ "description": "Label font size. Aliased to --bs-font-size-md."
4594
+ },
4595
+ {
4596
+ "name": "--bs-navigation-drawer-item-font-weight",
4597
+ "description": "Label font weight. Aliased to --bs-font-weight-medium."
4598
+ },
4599
+ {
4600
+ "name": "--bs-navigation-drawer-item-gap",
4601
+ "description": "Gap between the icon, label, and chevron within the row. Aliased to --bs-spacing-100."
4602
+ },
4603
+ {
4604
+ "name": "--bs-navigation-drawer-item-line-height",
4605
+ "description": "Label line height. Aliased to --bs-line-height-body-md."
4606
+ },
4607
+ {
4608
+ "name": "--bs-navigation-drawer-item-padding-left-nested",
4609
+ "description": "Left padding of a `nested` row. Aliased to --bs-spacing-600 (48px) -- deep indent under an expanded parent, replacing --bs-navigation-drawer-item-padding-x on the left side only (right padding stays the same)."
4610
+ },
4611
+ {
4612
+ "name": "--bs-navigation-drawer-item-padding-x",
4613
+ "description": "Left/right padding of a top-level (non-`nested`) row. Aliased to --bs-spacing-100 -- note this is the HORIZONTAL padding while --bs-navigation-drawer-item-padding-y (above) is VERTICAL, the reverse of this value's own relative size (12px vertical / 8px horizontal), per the Figma spec."
4614
+ },
4615
+ {
4616
+ "name": "--bs-navigation-drawer-item-padding-y",
4617
+ "description": "Top/bottom padding of the row. Aliased to --bs-spacing-150."
4618
+ },
4619
+ {
4620
+ "name": "--bs-navigation-drawer-item-radius",
4621
+ "description": "Corner radius of the row. Aliased to --bs-border-radius-100."
4622
+ }
4623
+ ]
4624
+ }
4625
+ ],
4626
+ "exports": [
4627
+ {
4628
+ "kind": "js",
4629
+ "name": "BsNavigationDrawerItem",
4630
+ "declaration": {
4631
+ "name": "BsNavigationDrawerItem"
4632
+ }
4633
+ },
4634
+ {
4635
+ "kind": "custom-element-definition",
4636
+ "name": "bs-navigation-drawer-item",
4637
+ "declaration": {
4638
+ "name": "BsNavigationDrawerItem"
4639
+ }
4640
+ }
4641
+ ]
4642
+ },
4643
+ {
4644
+ "kind": "javascript-module",
4645
+ "path": "src/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.tsx",
4646
+ "declarations": [
4647
+ {
4648
+ "kind": "class",
4649
+ "customElement": true,
4650
+ "tagName": "bs-navigation-header",
4651
+ "name": "BsNavigationHeader",
4652
+ "description": "The top-level navigation bar for a page: the BrandSync logo plus two consumer-provided slots\nfor menu/action content (e.g. `bs-button`/`bs-icon-button` elements).\n\n## When to use\n- The persistent top bar of an application, above the page content.\n\n## When not to use\n- The header of a Genie AI chat panel -- use `bs-chatbot-header` instead, which is purpose-built\n for that narrower layout and its own fixed action buttons.\n\n`alignment` controls both whether the logo renders and how the two slots are laid out:\n- `default` (default): logo on the left, `left` slot content immediately after it, `right` slot\n content pushed to the far right.\n- `center`: logo and `right` slot both grow equally (`flex: 1`), which centers the `left` slot\n content in the middle of the bar.\n- `with-navigation-drawer`: no logo at all (this variant assumes a nav-drawer toggle is the\n leftmost thing on the page instead) -- `left` slot content starts at the bar's own left edge,\n `right` slot content pushed to the far right.",
4653
+ "attributes": [
4654
+ {
4655
+ "name": "alignment",
4656
+ "description": "Controls whether the logo renders and how the `left`/`right` slots are laid out -- see the\nclass doc above for the three variants' exact behavior.",
4657
+ "type": {
4658
+ "text": "\"center\" | \"default\" | \"with-navigation-drawer\"",
4659
+ "references": [
4660
+ {
4661
+ "name": "BsNavigationHeaderAlignment"
4662
+ }
4663
+ ]
4664
+ },
4665
+ "default": "'default'",
4666
+ "fieldName": "alignment"
4667
+ },
4668
+ {
4669
+ "name": "aria-label",
4670
+ "description": "Accessible label for the header landmark, useful when a page has more than one `<header>`\n(e.g. this one plus a page-specific sub-header) and screen reader users need to tell them\napart in the landmarks list.",
4671
+ "type": {
4672
+ "text": "string"
4673
+ },
4674
+ "default": "null",
4675
+ "fieldName": "ariaLabel"
4676
+ },
4677
+ {
4678
+ "name": "logo-background",
4679
+ "description": "Forwarded straight to the internal `bs-logo`'s own `background` prop. Defaults to `\"auto\"`,\nwhich follows the ambient `[data-theme=\"dark\"]` state automatically (see `bs-logo`'s own\ndocs) -- so if this bar ends up on a dark surface via the normal theming mechanism, the logo\nswitches to its dedicated dark-background asset with no wiring needed. Set `\"light\"`/`\"dark\"`\nexplicitly only if you've overridden `--bs-navigation-header-bg` to something dark yourself\n*without* setting `[data-theme=\"dark\"]`, and need to pin the logo regardless of theme.",
4680
+ "type": {
4681
+ "text": "\"auto\" | \"dark\" | \"light\""
4682
+ },
4683
+ "default": "'auto'",
4684
+ "fieldName": "logoBackground"
4685
+ },
4686
+ {
4687
+ "name": "skip-to-content-href",
4688
+ "description": "Fragment/URL to jump to when the \"Skip to main content\" link is activated (e.g.\n`#main-content`, matching an id on your page's main landmark). Unset by default -- the link\nis opt-in rather than pointing at a guessed default id, since a skip link to a target that\ndoesn't exist on the consumer's page is worse than no skip link at all (it silently does\nnothing when activated). Set this to the same id your page's `<main>` (or equivalent) already\nhas to enable it.",
4689
+ "type": {
4690
+ "text": "string"
4691
+ },
4692
+ "default": "null",
4693
+ "fieldName": "skipToContentHref"
4694
+ },
4695
+ {
4696
+ "name": "skip-to-content-label",
4697
+ "description": "Link text for the skip-to-content link. Only rendered when `skipToContentHref` is set.",
4698
+ "type": {
4699
+ "text": "string"
4700
+ },
4701
+ "default": "'Skip to main content'",
4702
+ "fieldName": "skipToContentLabel"
4703
+ }
4704
+ ],
4705
+ "members": [
4706
+ {
4707
+ "kind": "field",
4708
+ "name": "alignment",
4709
+ "description": "Controls whether the logo renders and how the `left`/`right` slots are laid out -- see the\nclass doc above for the three variants' exact behavior.",
4710
+ "type": {
4711
+ "text": "\"center\" | \"default\" | \"with-navigation-drawer\"",
4712
+ "references": [
4713
+ {
4714
+ "name": "BsNavigationHeaderAlignment"
4715
+ }
4716
+ ]
4717
+ },
4718
+ "default": "'default'",
4719
+ "readonly": true,
4720
+ "attribute": "alignment"
4721
+ },
4722
+ {
4723
+ "kind": "field",
4724
+ "name": "ariaLabel",
4725
+ "description": "Accessible label for the header landmark, useful when a page has more than one `<header>`\n(e.g. this one plus a page-specific sub-header) and screen reader users need to tell them\napart in the landmarks list.",
4726
+ "type": {
4727
+ "text": "string"
4728
+ },
4729
+ "default": "null",
4730
+ "readonly": true,
4731
+ "attribute": "aria-label"
4732
+ },
4733
+ {
4734
+ "kind": "field",
4735
+ "name": "logoBackground",
4736
+ "description": "Forwarded straight to the internal `bs-logo`'s own `background` prop. Defaults to `\"auto\"`,\nwhich follows the ambient `[data-theme=\"dark\"]` state automatically (see `bs-logo`'s own\ndocs) -- so if this bar ends up on a dark surface via the normal theming mechanism, the logo\nswitches to its dedicated dark-background asset with no wiring needed. Set `\"light\"`/`\"dark\"`\nexplicitly only if you've overridden `--bs-navigation-header-bg` to something dark yourself\n*without* setting `[data-theme=\"dark\"]`, and need to pin the logo regardless of theme.",
4737
+ "type": {
4738
+ "text": "\"auto\" | \"dark\" | \"light\""
4739
+ },
4740
+ "default": "'auto'",
4741
+ "readonly": true,
4742
+ "attribute": "logo-background"
4743
+ },
4744
+ {
4745
+ "kind": "field",
4746
+ "name": "skipToContentHref",
4747
+ "description": "Fragment/URL to jump to when the \"Skip to main content\" link is activated (e.g.\n`#main-content`, matching an id on your page's main landmark). Unset by default -- the link\nis opt-in rather than pointing at a guessed default id, since a skip link to a target that\ndoesn't exist on the consumer's page is worse than no skip link at all (it silently does\nnothing when activated). Set this to the same id your page's `<main>` (or equivalent) already\nhas to enable it.",
4748
+ "type": {
4749
+ "text": "string"
4750
+ },
4751
+ "default": "null",
4752
+ "readonly": true,
4753
+ "attribute": "skip-to-content-href"
4754
+ },
4755
+ {
4756
+ "kind": "field",
4757
+ "name": "skipToContentLabel",
4758
+ "description": "Link text for the skip-to-content link. Only rendered when `skipToContentHref` is set.",
4759
+ "type": {
4760
+ "text": "string"
4761
+ },
4762
+ "default": "'Skip to main content'",
4763
+ "readonly": true,
4764
+ "attribute": "skip-to-content-label"
4765
+ }
4766
+ ],
4767
+ "slots": [
4768
+ {
4769
+ "name": "left",
4770
+ "description": "Menu/action content immediately after the logo (or, in `with-navigation-drawer`\nmode, at the bar's left edge). Typically one or more `bs-button`/`bs-icon-button` elements."
4771
+ },
4772
+ {
4773
+ "name": "right",
4774
+ "description": "Menu/action content pushed to the bar's far right."
4775
+ }
4776
+ ],
4777
+ "cssParts": [
4778
+ {
4779
+ "name": "left",
4780
+ "description": "The wrapper around the `left` slot."
4781
+ },
4782
+ {
4783
+ "name": "logo",
4784
+ "description": "The BrandSync brand mark, rendered via a nested `bs-logo` element (`part=\"logo\"` is\nset directly on that element -- the same pattern `bs-attachment` uses for its own nested\n`bs-icon-button`'s `remove` part -- so `bs-navigation-header::part(logo)` still targets it\ndirectly, no forwarding needed). Not rendered in `with-navigation-drawer` mode."
4785
+ },
4786
+ {
4787
+ "name": "right",
4788
+ "description": "The wrapper around the `right` slot."
4789
+ },
4790
+ {
4791
+ "name": "skip-link",
4792
+ "description": "The \"Skip to main content\" link (only rendered when `skipToContentHref` is set)."
4793
+ }
4794
+ ],
4795
+ "cssProperties": [
4796
+ {
4797
+ "name": "--bs-navigation-header-bg",
4798
+ "description": "Background of the bar. Aliased to --bs-surface-base."
4799
+ },
4800
+ {
4801
+ "name": "--bs-navigation-header-border",
4802
+ "description": "Bottom border color. Aliased to --bs-border-default."
4803
+ },
4804
+ {
4805
+ "name": "--bs-navigation-header-item-gap",
4806
+ "description": "Gap between the logo and the `left` slot (`default` alignment), or between the `left` and `right` slots (`with-navigation-drawer` alignment, which has no logo). Not used in `center` alignment -- see the class doc in bs-navigation-header.tsx. The global vendored --bs-navigation-header-gap token is also malformed (a bare unitless `40`, which is an invalid `gap` value and silently falls back to `normal`/0), so this multiplies it into a real length instead of aliasing directly."
4807
+ },
4808
+ {
4809
+ "name": "--bs-navigation-header-max-width",
4810
+ "description": "Overall max-width of the bar. The global vendored --bs-breakpoints-max-width token is malformed (`1920rem` instead of `1920px` -- at a 16px root font size that's ~30720px, effectively unconstrained), so this is a literal 1920px instead of aliasing to it."
4811
+ },
4812
+ {
4813
+ "name": "--bs-navigation-header-padding-bottom",
4814
+ "description": "Aliased to --bs-spacing-100."
4815
+ },
4816
+ {
4817
+ "name": "--bs-navigation-header-padding-top",
4818
+ "description": "Aliased to --bs-spacing-200."
4819
+ },
4820
+ {
4821
+ "name": "--bs-navigation-header-padding-x",
4822
+ "description": "Aliased to --bs-margin-fluid."
4823
+ },
4824
+ {
4825
+ "name": "--bs-navigation-header-skip-link-bg",
4826
+ "description": "Skip-to-content link background, once focused into view. Aliased to --bs-surface-action."
4827
+ },
4828
+ {
4829
+ "name": "--bs-navigation-header-skip-link-color",
4830
+ "description": "Skip-to-content link text color, once focused into view. Aliased to --bs-text-inverse."
4831
+ },
4832
+ {
4833
+ "name": "--bs-navigation-header-slot-gap",
4834
+ "description": "Gap between items within a single `left`/`right` slot. Aliased to --bs-spacing-100."
4835
+ }
4836
+ ]
4837
+ }
4838
+ ],
4839
+ "exports": [
4840
+ {
4841
+ "kind": "js",
4842
+ "name": "BsNavigationHeader",
4843
+ "declaration": {
4844
+ "name": "BsNavigationHeader"
4845
+ }
4846
+ },
4847
+ {
4848
+ "kind": "custom-element-definition",
4849
+ "name": "bs-navigation-header",
4850
+ "declaration": {
4851
+ "name": "BsNavigationHeader"
4852
+ }
4853
+ }
4854
+ ]
4855
+ },
4856
+ {
4857
+ "kind": "javascript-module",
4858
+ "path": "src/components/bs-radio/bs-radio.tsx",
4859
+ "declarations": [
4860
+ {
4861
+ "kind": "class",
4862
+ "customElement": true,
4863
+ "tagName": "bs-radio",
4864
+ "name": "BsRadio",
4865
+ "description": "A single radio button with its label, for one mutually-exclusive choice within a group.\n\n## When to use\n- One option within a set of mutually-exclusive choices, where all options should stay visible\n (a radio group).\n\n## When not to use\n- An independent, non-exclusive binary choice, or one item in a set of independent choices --\n use `bs-checkbox` instead.\n- An on/off setting that takes effect immediately (no explicit form submission) -- use `bs-switch`.",
4866
+ "attributes": [
4867
+ {
4868
+ "name": "checked",
4869
+ "description": "Whether the radio is checked. Mutable so clicking the label/input sets it directly.",
4870
+ "type": {
4871
+ "text": "boolean"
4872
+ },
4873
+ "default": "false",
4874
+ "fieldName": "checked"
4875
+ },
4876
+ {
4877
+ "name": "disabled",
4878
+ "description": "Disables the radio: sets the native `disabled` attribute, suppresses hover/focus styling, and\nprevents toggling.",
4879
+ "type": {
4880
+ "text": "boolean"
4881
+ },
4882
+ "default": "false",
4883
+ "fieldName": "disabled"
4884
+ },
4885
+ {
4886
+ "name": "name",
4887
+ "description": "The native radio input's `name` attribute. Passed straight through to the native input inside.\nNOTE: because each `bs-radio` renders its own shadow root, native `<input type=\"radio\">`\nmutual-exclusion grouping (which the HTML spec scopes to a single DOM tree) does NOT extend\nacross separate `bs-radio` instances sharing the same `name` -- checking one will not natively\nuncheck another. Within a single instance this still behaves like a normal radio input. See\nbs-radio.mdx's Accessibility section for this known gap; consumers building a group currently\nneed to manage mutual exclusivity themselves (e.g. via `bsChange`) until a `bs-radio-group`\nwrapper exists.",
4888
+ "type": {
4889
+ "text": "string"
4890
+ },
4891
+ "fieldName": "name"
4892
+ },
4893
+ {
4894
+ "name": "value",
4895
+ "description": "The native radio input's `value` attribute -- read from `event.target.value`, or used when\nwiring the group up to a form.",
4896
+ "type": {
4897
+ "text": "string"
4898
+ },
4899
+ "fieldName": "value"
4900
+ }
4901
+ ],
4902
+ "members": [
4903
+ {
4904
+ "kind": "field",
4905
+ "name": "checked",
4906
+ "description": "Whether the radio is checked. Mutable so clicking the label/input sets it directly.",
4907
+ "type": {
4908
+ "text": "boolean"
4909
+ },
4910
+ "default": "false",
4911
+ "attribute": "checked",
4912
+ "reflects": true
4913
+ },
4914
+ {
4915
+ "kind": "field",
4916
+ "name": "disabled",
4917
+ "description": "Disables the radio: sets the native `disabled` attribute, suppresses hover/focus styling, and\nprevents toggling.",
4918
+ "type": {
4919
+ "text": "boolean"
4920
+ },
4921
+ "default": "false",
4922
+ "readonly": true,
4923
+ "attribute": "disabled"
4924
+ },
4925
+ {
4926
+ "kind": "field",
4927
+ "name": "name",
4928
+ "description": "The native radio input's `name` attribute. Passed straight through to the native input inside.\nNOTE: because each `bs-radio` renders its own shadow root, native `<input type=\"radio\">`\nmutual-exclusion grouping (which the HTML spec scopes to a single DOM tree) does NOT extend\nacross separate `bs-radio` instances sharing the same `name` -- checking one will not natively\nuncheck another. Within a single instance this still behaves like a normal radio input. See\nbs-radio.mdx's Accessibility section for this known gap; consumers building a group currently\nneed to manage mutual exclusivity themselves (e.g. via `bsChange`) until a `bs-radio-group`\nwrapper exists.",
4929
+ "type": {
4930
+ "text": "string"
4931
+ },
4932
+ "readonly": true,
4933
+ "attribute": "name"
4934
+ },
4935
+ {
4936
+ "kind": "field",
4937
+ "name": "value",
4938
+ "description": "The native radio input's `value` attribute -- read from `event.target.value`, or used when\nwiring the group up to a form.",
4939
+ "type": {
4940
+ "text": "string"
4941
+ },
4942
+ "readonly": true,
4943
+ "attribute": "value"
4944
+ }
4945
+ ],
4946
+ "events": [
4947
+ {
4948
+ "name": "bsChange",
4949
+ "description": "Emitted with this radio's own `value` when it becomes checked via user interaction. Since\nnative same-`name` grouping doesn't cross shadow-root boundaries (see the `name` prop's doc),\na consumer wiring up a group of `bs-radio`s must itself set `checked = false` on the others in\nresponse to this event -- there's no automatic un-checking to rely on here.",
4950
+ "type": {
4951
+ "text": "CustomEvent<string>"
4952
+ }
4953
+ }
4954
+ ],
4955
+ "slots": [
4956
+ {
4957
+ "name": "",
4958
+ "description": "Default slot: the label text."
4959
+ }
4960
+ ],
4961
+ "cssParts": [
4962
+ {
4963
+ "name": "circle",
4964
+ "description": "The visual radio ring."
4965
+ },
4966
+ {
4967
+ "name": "dot",
4968
+ "description": "The center fill shown inside the ring when `checked`."
4969
+ },
4970
+ {
4971
+ "name": "label",
4972
+ "description": "The label text wrapper."
4973
+ }
4974
+ ],
4975
+ "cssProperties": [
4976
+ {
4977
+ "name": "--bs-radio-border-width",
4978
+ "description": "Width of the ring border."
4979
+ },
4980
+ {
4981
+ "name": "--bs-radio-gap",
4982
+ "description": "Gap between the ring and the label text. Aliased to --bs-spacing-100."
4983
+ },
4984
+ {
4985
+ "name": "--bs-radio-hit-area-size",
4986
+ "description": "Diameter of the layout box the state layer is centered in."
4987
+ },
4988
+ {
4989
+ "name": "--bs-radio-size",
4990
+ "description": "Diameter of the visual radio ring. Aliased to --bs-spacing-300."
4991
+ },
4992
+ {
4993
+ "name": "--bs-radio-state-layer-size",
4994
+ "description": "Diameter of the hover/focus/pressed halo behind the ring."
4995
+ }
4996
+ ]
4997
+ }
4998
+ ],
4999
+ "exports": [
5000
+ {
5001
+ "kind": "js",
5002
+ "name": "BsRadio",
5003
+ "declaration": {
5004
+ "name": "BsRadio"
5005
+ }
5006
+ },
5007
+ {
5008
+ "kind": "custom-element-definition",
5009
+ "name": "bs-radio",
5010
+ "declaration": {
5011
+ "name": "BsRadio"
5012
+ }
5013
+ }
5014
+ ]
5015
+ },
5016
+ {
5017
+ "kind": "javascript-module",
5018
+ "path": "src/components/bs-slider/bs-slider.tsx",
5019
+ "declarations": [
5020
+ {
5021
+ "kind": "class",
5022
+ "customElement": true,
5023
+ "tagName": "bs-slider",
5024
+ "name": "BsSlider",
5025
+ "description": "A slider for picking a single numeric value (`type=\"default\"`), a value snapped to evenly\nspaced ticks (`type=\"segmented\"`), or a min/max pair (`type=\"range\"`) from within a bounded\n`min`/`max` range.\n\n## When to use\n- A numeric value that's easiest to reason about relative to its bounds (volume, brightness,\n a price range) rather than typed digit-by-digit.\n- `type=\"segmented\"` when only a fixed number of discrete stops make sense (e.g. a 5-star\n rating-like scale) but a visual track is still preferable to discrete buttons.\n- `type=\"range\"` for picking a min/max pair (e.g. a price range filter) with two thumbs.\n\n## When not to use\n- A precise value where mis-dragging by a pixel matters more than the at-a-glance bounds --\n use `bs-input[type=\"number\"]` instead.\n- A small, fixed set of mutually exclusive choices -- use a radio group instead.",
5026
+ "attributes": [
5027
+ {
5028
+ "name": "aria-label",
5029
+ "description": "Accessible name for the slider's native range input(s). Required whenever `showLabel` is\n`false` (a bare track with no visible \"Label\" text) -- without it, the internal native\n`<input>` has no accessible name at all. Setting `aria-label` directly on the `<bs-slider>`\nhost does NOT work for this: that attribute stays on the light-DOM host and is never forwarded\ninto the shadow DOM by the browser. Same pattern/reasoning as `bs-switch`'s and `bs-checkbox`'s\nidentical `ariaLabel` prop. For `type=\"range\"`, this labels the lower-bound thumb; the\nupper-bound thumb gets `\"${ariaLabel} end\"` (or `\"End value\"` when `ariaLabel` is unset).",
5030
+ "type": {
5031
+ "text": "string"
5032
+ },
5033
+ "default": "null",
5034
+ "fieldName": "ariaLabel"
5035
+ },
5036
+ {
5037
+ "name": "disabled",
5038
+ "description": "Disables the slider: sets the native `disabled` attribute on the range input(s), suppresses\nhover/focus/drag styling and the value tooltip, and prevents interaction.",
5039
+ "type": {
5040
+ "text": "boolean"
5041
+ },
5042
+ "default": "false",
5043
+ "fieldName": "disabled"
5044
+ },
5045
+ {
5046
+ "name": "label",
5047
+ "description": "Label text shown above the track when `showLabel` is set.",
5048
+ "type": {
5049
+ "text": "string"
5050
+ },
5051
+ "default": "'Label'",
5052
+ "fieldName": "label"
5053
+ },
5054
+ {
5055
+ "name": "max",
5056
+ "description": "Maximum selectable value, for all `type`s.",
5057
+ "type": {
5058
+ "text": "number"
5059
+ },
5060
+ "default": "100",
5061
+ "fieldName": "max"
5062
+ },
5063
+ {
5064
+ "name": "min",
5065
+ "description": "Minimum selectable value, for all `type`s.",
5066
+ "type": {
5067
+ "text": "number"
5068
+ },
5069
+ "default": "0",
5070
+ "fieldName": "min"
5071
+ },
5072
+ {
5073
+ "name": "segments",
5074
+ "description": "Number of equal divisions marked by tick lines along the track, for `type=\"segmented\"` only.\nThe first tick (at the very start of the track) is rendered with `opacity: 0` to keep the\ntick spacing math consistent while not visually doubling up with the track's own start edge --\nthis matches the design spec, not a bug.",
5075
+ "type": {
5076
+ "text": "number"
5077
+ },
5078
+ "default": "10",
5079
+ "fieldName": "segments"
5080
+ },
5081
+ {
5082
+ "name": "show-label",
5083
+ "description": "Shows/hides the \"Label\" text and editable percentage field(s) above the track, and the\nstatic min/max bound labels flanking it. When `false`, only the bare track (and its\nknob/knobs) renders.",
5084
+ "type": {
5085
+ "text": "boolean"
5086
+ },
5087
+ "default": "true",
5088
+ "fieldName": "showLabel"
5089
+ },
5090
+ {
5091
+ "name": "step",
5092
+ "description": "Step size between selectable values. For `type=\"segmented\"`, the effective step is derived\nfrom `(max - min) / segments` instead, so the thumb always snaps to a tick.",
5093
+ "type": {
5094
+ "text": "number"
5095
+ },
5096
+ "default": "1",
5097
+ "fieldName": "step"
5098
+ },
5099
+ {
5100
+ "name": "type",
5101
+ "description": "Which slider shape to render. `range` uses two thumbs (`valueStart`/`valueEnd`); `default`\nand `segmented` use one thumb (`value`). `segmented` additionally draws `segments` tick marks\nalong the track.",
5102
+ "type": {
5103
+ "text": "\"default\" | \"range\" | \"segmented\"",
5104
+ "references": [
5105
+ {
5106
+ "name": "BsSliderType"
5107
+ }
5108
+ ]
5109
+ },
5110
+ "default": "'default'",
5111
+ "fieldName": "type"
5112
+ },
5113
+ {
5114
+ "name": "value",
5115
+ "description": "Current value for `type=\"default\"`/`type=\"segmented\"`. Ignored for `type=\"range\"` -- use\n`valueStart`/`valueEnd` instead. Mutable so dragging the thumb updates it directly.",
5116
+ "type": {
5117
+ "text": "number"
5118
+ },
5119
+ "default": "0",
5120
+ "fieldName": "value"
5121
+ },
5122
+ {
5123
+ "name": "value-end",
5124
+ "description": "Upper thumb's value for `type=\"range\"`. Defaults to `max` when unset. Mutable so dragging the\nthumb updates it directly.",
5125
+ "type": {
5126
+ "text": "number"
5127
+ },
5128
+ "fieldName": "valueEnd"
5129
+ },
5130
+ {
5131
+ "name": "value-start",
5132
+ "description": "Lower thumb's value for `type=\"range\"`. Defaults to `min` when unset. Mutable so dragging the\nthumb updates it directly.",
5133
+ "type": {
5134
+ "text": "number"
5135
+ },
5136
+ "fieldName": "valueStart"
5137
+ }
5138
+ ],
5139
+ "members": [
5140
+ {
5141
+ "kind": "field",
5142
+ "name": "ariaLabel",
5143
+ "description": "Accessible name for the slider's native range input(s). Required whenever `showLabel` is\n`false` (a bare track with no visible \"Label\" text) -- without it, the internal native\n`<input>` has no accessible name at all. Setting `aria-label` directly on the `<bs-slider>`\nhost does NOT work for this: that attribute stays on the light-DOM host and is never forwarded\ninto the shadow DOM by the browser. Same pattern/reasoning as `bs-switch`'s and `bs-checkbox`'s\nidentical `ariaLabel` prop. For `type=\"range\"`, this labels the lower-bound thumb; the\nupper-bound thumb gets `\"${ariaLabel} end\"` (or `\"End value\"` when `ariaLabel` is unset).",
5144
+ "type": {
5145
+ "text": "string"
5146
+ },
5147
+ "default": "null",
5148
+ "readonly": true,
5149
+ "attribute": "aria-label"
5150
+ },
5151
+ {
5152
+ "kind": "field",
5153
+ "name": "disabled",
5154
+ "description": "Disables the slider: sets the native `disabled` attribute on the range input(s), suppresses\nhover/focus/drag styling and the value tooltip, and prevents interaction.",
5155
+ "type": {
5156
+ "text": "boolean"
5157
+ },
5158
+ "default": "false",
5159
+ "readonly": true,
5160
+ "attribute": "disabled"
5161
+ },
5162
+ {
5163
+ "kind": "field",
5164
+ "name": "label",
5165
+ "description": "Label text shown above the track when `showLabel` is set.",
5166
+ "type": {
5167
+ "text": "string"
5168
+ },
5169
+ "default": "'Label'",
5170
+ "readonly": true,
5171
+ "attribute": "label"
5172
+ },
5173
+ {
5174
+ "kind": "field",
5175
+ "name": "max",
5176
+ "description": "Maximum selectable value, for all `type`s.",
5177
+ "type": {
5178
+ "text": "number"
5179
+ },
5180
+ "default": "100",
5181
+ "readonly": true,
5182
+ "attribute": "max"
5183
+ },
5184
+ {
5185
+ "kind": "field",
5186
+ "name": "min",
5187
+ "description": "Minimum selectable value, for all `type`s.",
5188
+ "type": {
5189
+ "text": "number"
5190
+ },
5191
+ "default": "0",
5192
+ "readonly": true,
5193
+ "attribute": "min"
5194
+ },
5195
+ {
5196
+ "kind": "field",
5197
+ "name": "segments",
5198
+ "description": "Number of equal divisions marked by tick lines along the track, for `type=\"segmented\"` only.\nThe first tick (at the very start of the track) is rendered with `opacity: 0` to keep the\ntick spacing math consistent while not visually doubling up with the track's own start edge --\nthis matches the design spec, not a bug.",
5199
+ "type": {
5200
+ "text": "number"
5201
+ },
5202
+ "default": "10",
5203
+ "readonly": true,
5204
+ "attribute": "segments"
5205
+ },
5206
+ {
5207
+ "kind": "field",
5208
+ "name": "showLabel",
5209
+ "description": "Shows/hides the \"Label\" text and editable percentage field(s) above the track, and the\nstatic min/max bound labels flanking it. When `false`, only the bare track (and its\nknob/knobs) renders.",
5210
+ "type": {
5211
+ "text": "boolean"
5212
+ },
5213
+ "default": "true",
5214
+ "readonly": true,
5215
+ "attribute": "show-label"
5216
+ },
5217
+ {
5218
+ "kind": "field",
5219
+ "name": "step",
5220
+ "description": "Step size between selectable values. For `type=\"segmented\"`, the effective step is derived\nfrom `(max - min) / segments` instead, so the thumb always snaps to a tick.",
5221
+ "type": {
5222
+ "text": "number"
5223
+ },
5224
+ "default": "1",
5225
+ "readonly": true,
5226
+ "attribute": "step"
5227
+ },
5228
+ {
5229
+ "kind": "field",
5230
+ "name": "type",
5231
+ "description": "Which slider shape to render. `range` uses two thumbs (`valueStart`/`valueEnd`); `default`\nand `segmented` use one thumb (`value`). `segmented` additionally draws `segments` tick marks\nalong the track.",
5232
+ "type": {
5233
+ "text": "\"default\" | \"range\" | \"segmented\"",
5234
+ "references": [
5235
+ {
5236
+ "name": "BsSliderType"
5237
+ }
5238
+ ]
5239
+ },
5240
+ "default": "'default'",
5241
+ "readonly": true,
5242
+ "attribute": "type"
5243
+ },
5244
+ {
5245
+ "kind": "field",
5246
+ "name": "value",
5247
+ "description": "Current value for `type=\"default\"`/`type=\"segmented\"`. Ignored for `type=\"range\"` -- use\n`valueStart`/`valueEnd` instead. Mutable so dragging the thumb updates it directly.",
5248
+ "type": {
5249
+ "text": "number"
5250
+ },
5251
+ "default": "0",
5252
+ "attribute": "value"
5253
+ },
5254
+ {
5255
+ "kind": "field",
5256
+ "name": "valueEnd",
5257
+ "description": "Upper thumb's value for `type=\"range\"`. Defaults to `max` when unset. Mutable so dragging the\nthumb updates it directly.",
5258
+ "type": {
5259
+ "text": "number"
5260
+ },
5261
+ "attribute": "value-end"
5262
+ },
5263
+ {
5264
+ "kind": "field",
5265
+ "name": "valueStart",
5266
+ "description": "Lower thumb's value for `type=\"range\"`. Defaults to `min` when unset. Mutable so dragging the\nthumb updates it directly.",
5267
+ "type": {
5268
+ "text": "number"
5269
+ },
5270
+ "attribute": "value-start"
5271
+ }
5272
+ ],
5273
+ "events": [
5274
+ {
5275
+ "name": "bsChange",
5276
+ "description": "Emitted when `value` changes via user interaction (dragging the thumb, or committing the\nvalue field), with the new value. Only fires for `type=\"default\"`/`type=\"segmented\"`.",
5277
+ "type": {
5278
+ "text": "CustomEvent<number>"
5279
+ }
5280
+ },
5281
+ {
5282
+ "name": "bsRangeChange",
5283
+ "description": "Emitted when `valueStart`/`valueEnd` changes via user interaction, with both current values.\nOnly fires for `type=\"range\"`.",
5284
+ "type": {
5285
+ "text": "CustomEvent<{ start: number; end: number; }>"
5286
+ }
5287
+ }
5288
+ ],
5289
+ "cssParts": [
5290
+ {
5291
+ "name": "bound",
5292
+ "description": "Each static min/max bound label flanking the track itself."
5293
+ },
5294
+ {
5295
+ "name": "control",
5296
+ "description": "The native range input(s) that drive the knob(s)."
5297
+ },
5298
+ {
5299
+ "name": "field",
5300
+ "description": "Each editable percentage-value field, shown top-right above the track."
5301
+ },
5302
+ {
5303
+ "name": "fill",
5304
+ "description": "The active/filled portion of the track."
5305
+ },
5306
+ {
5307
+ "name": "label",
5308
+ "description": "The \"Label\" text above the track."
5309
+ },
5310
+ {
5311
+ "name": "tooltip",
5312
+ "description": "The value tooltip shown above a knob while focused/dragging."
5313
+ },
5314
+ {
5315
+ "name": "track",
5316
+ "description": "The background (inactive) track."
5317
+ }
5318
+ ],
5319
+ "cssProperties": [
5320
+ {
5321
+ "name": "--bs-slider-bound-color",
5322
+ "description": "Static min/max bound label color, enabled. Aliased to --bs-text-default."
5323
+ },
5324
+ {
5325
+ "name": "--bs-slider-bound-color-disabled",
5326
+ "description": "Static min/max bound label color, disabled. Aliased to --bs-text-on-disabled."
5327
+ },
5328
+ {
5329
+ "name": "--bs-slider-field-bg",
5330
+ "description": "Percentage field background. Aliased to --bs-input-bg-default."
5331
+ },
5332
+ {
5333
+ "name": "--bs-slider-field-border",
5334
+ "description": "Percentage field border color. Aliased to --bs-input-border-default."
5335
+ },
5336
+ {
5337
+ "name": "--bs-slider-field-radius",
5338
+ "description": "Percentage field corner radius. Aliased to --bs-border-radius-100."
5339
+ },
5340
+ {
5341
+ "name": "--bs-slider-field-text",
5342
+ "description": "Percentage field text color (input value and \"%\" suffix). Aliased to --bs-input-text."
5343
+ },
5344
+ {
5345
+ "name": "--bs-slider-field-text-disabled",
5346
+ "description": "Percentage field text color, disabled. Aliased to --bs-text-on-disabled."
5347
+ },
5348
+ {
5349
+ "name": "--bs-slider-field-width",
5350
+ "description": "Width of each editable percentage field. Fixed 56px per the design spec."
5351
+ },
5352
+ {
5353
+ "name": "--bs-slider-fill-bg",
5354
+ "description": "Active/filled track background, enabled. Aliased to --bs-surface-action."
5355
+ },
5356
+ {
5357
+ "name": "--bs-slider-fill-bg-disabled",
5358
+ "description": "Active/filled track background, disabled. Aliased to --bs-surface-on-action-disabled."
5359
+ },
5360
+ {
5361
+ "name": "--bs-slider-focus-ring-color",
5362
+ "description": "Knob focus ring color. Aliased to --bs-border-primary-focus."
5363
+ },
5364
+ {
5365
+ "name": "--bs-slider-focus-ring-gap-color",
5366
+ "description": "The gap color between the knob and its focus ring (mirrors bs-checkbox's outline-offset gap, drawn via box-shadow here since outline doesn't reliably clip to a circular ::-webkit-slider-thumb/::-moz-range-thumb pseudo-element). Aliased to --bs-surface-base."
5367
+ },
5368
+ {
5369
+ "name": "--bs-slider-gap",
5370
+ "description": "Gap between the label text and the row, and between the row's own items. Aliased to --bs-spacing-100."
5371
+ },
5372
+ {
5373
+ "name": "--bs-slider-knob-bg",
5374
+ "description": "Knob circle background, enabled/active. A solid filled dot per the Figma spec (node 5266:50184) -- not a white circle with a drop shadow. Aliased to --bs-surface-action."
5375
+ },
5376
+ {
5377
+ "name": "--bs-slider-knob-color-disabled",
5378
+ "description": "Knob circle background, disabled. Aliased to --bs-surface-on-action-disabled (matches the disabled fill token, not the muted text token)."
5379
+ },
5380
+ {
5381
+ "name": "--bs-slider-knob-hit-size",
5382
+ "description": "Diameter of the knob's invisible hit-target area. Aliased to --bs-spacing-600."
5383
+ },
5384
+ {
5385
+ "name": "--bs-slider-knob-size",
5386
+ "description": "Diameter of the knob's visible circle. Aliased to --bs-spacing-300."
5387
+ },
5388
+ {
5389
+ "name": "--bs-slider-label-color",
5390
+ "description": "Label text color, enabled. Aliased to --bs-text-default."
5391
+ },
5392
+ {
5393
+ "name": "--bs-slider-label-color-disabled",
5394
+ "description": "Label text color, disabled. Aliased to --bs-text-muted."
5395
+ },
5396
+ {
5397
+ "name": "--bs-slider-label-font-weight",
5398
+ "description": "Label text font weight. Aliased to --bs-font-weight-semibold."
5399
+ },
5400
+ {
5401
+ "name": "--bs-slider-tick-bg",
5402
+ "description": "Segmented tick mark color. Aliased to --bs-surface-inset."
5403
+ },
5404
+ {
5405
+ "name": "--bs-slider-tooltip-bg",
5406
+ "description": "Value tooltip background. Aliased to --bs-surface-inverse."
5407
+ },
5408
+ {
5409
+ "name": "--bs-slider-tooltip-color",
5410
+ "description": "Value tooltip text color. Aliased to --bs-text-inverse."
5411
+ },
5412
+ {
5413
+ "name": "--bs-slider-tooltip-radius",
5414
+ "description": "Value tooltip corner radius. Aliased to --bs-border-radius-50."
5415
+ },
5416
+ {
5417
+ "name": "--bs-slider-track-bg",
5418
+ "description": "Inactive track background, enabled. Aliased to --bs-surface-container."
5419
+ },
5420
+ {
5421
+ "name": "--bs-slider-track-bg-disabled",
5422
+ "description": "Inactive track background, disabled. Aliased to --bs-surface-action-disabled."
5423
+ },
5424
+ {
5425
+ "name": "--bs-slider-track-height",
5426
+ "description": "Track thickness, constant regardless of type. Aliased to --bs-spacing-50."
5427
+ },
5428
+ {
5429
+ "name": "--bs-slider-track-radius",
5430
+ "description": "Track corner radius (pill). Aliased to --bs-border-radius-full."
5431
+ }
5432
+ ]
5433
+ }
5434
+ ],
5435
+ "exports": [
5436
+ {
5437
+ "kind": "js",
5438
+ "name": "BsSlider",
5439
+ "declaration": {
5440
+ "name": "BsSlider"
5441
+ }
5442
+ },
5443
+ {
5444
+ "kind": "custom-element-definition",
5445
+ "name": "bs-slider",
5446
+ "declaration": {
5447
+ "name": "BsSlider"
5448
+ }
5449
+ }
5450
+ ]
5451
+ },
5452
+ {
5453
+ "kind": "javascript-module",
5454
+ "path": "src/components/bs-source-link/bs-source-link.tsx",
5455
+ "declarations": [
5456
+ {
5457
+ "kind": "class",
5458
+ "customElement": true,
5459
+ "tagName": "bs-source-link",
5460
+ "name": "BsSourceLink",
5461
+ "description": "A single citation row inside `bs-chatbot-sources-drawer` -- a file icon + filename on the first\nline, the originating system and version on the second, and a trailing \"open\" arrow.\n\n## When to use\n- One row per source Genie cited in a response, slotted into `bs-chatbot-sources-drawer`.\n\n## When not to use\n- Outside the sources drawer context -- this is a purpose-built citation row, not a generic\n link/list-item component.",
5462
+ "attributes": [
5463
+ {
5464
+ "name": "file-name",
5465
+ "description": "The cited document's filename.",
5466
+ "type": {
5467
+ "text": "string"
5468
+ },
5469
+ "default": "'Source'",
5470
+ "fieldName": "fileName"
5471
+ },
5472
+ {
5473
+ "name": "href",
5474
+ "description": "If set, renders the row as a link that opens this URL; otherwise as a button that only emits `bsOpen`.",
5475
+ "type": {
5476
+ "text": "string"
5477
+ },
5478
+ "fieldName": "href"
5479
+ },
5480
+ {
5481
+ "name": "source-name",
5482
+ "description": "The system/app the document came from (e.g. \"HoltePortalen\").",
5483
+ "type": {
5484
+ "text": "string"
5485
+ },
5486
+ "fieldName": "sourceName"
5487
+ },
5488
+ {
5489
+ "name": "target",
5490
+ "description": "`target` used when `href` is set.",
5491
+ "type": {
5492
+ "text": "string"
5493
+ },
5494
+ "default": "'_blank'",
5495
+ "fieldName": "target"
5496
+ },
5497
+ {
5498
+ "name": "version",
5499
+ "description": "The document's version label (e.g. \"v3.2\"). Omit if the source has no version.",
5500
+ "type": {
5501
+ "text": "string"
5502
+ },
5503
+ "fieldName": "version"
5504
+ }
5505
+ ],
5506
+ "members": [
5507
+ {
5508
+ "kind": "field",
5509
+ "name": "fileName",
5510
+ "description": "The cited document's filename.",
5511
+ "type": {
5512
+ "text": "string"
5513
+ },
5514
+ "default": "'Source'",
5515
+ "readonly": true,
5516
+ "attribute": "file-name"
5517
+ },
5518
+ {
5519
+ "kind": "field",
5520
+ "name": "href",
5521
+ "description": "If set, renders the row as a link that opens this URL; otherwise as a button that only emits `bsOpen`.",
5522
+ "type": {
5523
+ "text": "string"
5524
+ },
5525
+ "readonly": true,
5526
+ "attribute": "href"
5527
+ },
5528
+ {
5529
+ "kind": "field",
5530
+ "name": "sourceName",
5531
+ "description": "The system/app the document came from (e.g. \"HoltePortalen\").",
5532
+ "type": {
5533
+ "text": "string"
5534
+ },
5535
+ "readonly": true,
5536
+ "attribute": "source-name"
5537
+ },
5538
+ {
5539
+ "kind": "field",
5540
+ "name": "target",
5541
+ "description": "`target` used when `href` is set.",
5542
+ "type": {
5543
+ "text": "string"
5544
+ },
5545
+ "default": "'_blank'",
5546
+ "readonly": true,
5547
+ "attribute": "target"
5548
+ },
5549
+ {
5550
+ "kind": "field",
5551
+ "name": "version",
5552
+ "description": "The document's version label (e.g. \"v3.2\"). Omit if the source has no version.",
5553
+ "type": {
5554
+ "text": "string"
5555
+ },
5556
+ "readonly": true,
5557
+ "attribute": "version"
5558
+ }
5559
+ ],
5560
+ "events": [
5561
+ {
5562
+ "name": "bsOpen",
5563
+ "description": "Fires on click/activation, whether or not `href` is set -- lets the consuming app log or handle the open.",
5564
+ "type": {
5565
+ "text": "CustomEvent<void>"
5566
+ }
5567
+ }
5568
+ ],
5569
+ "slots": [
5570
+ {
5571
+ "name": "icon",
5572
+ "description": "Overrides the default file icon."
3044
5573
  }
3045
5574
  ],
3046
5575
  "cssParts": [
3047
5576
  {
3048
- "name": "list",
3049
- "description": "The rounded, elevated box wrapping the slotted items."
5577
+ "name": "arrow",
5578
+ "description": "The trailing \"open\" arrow icon."
5579
+ },
5580
+ {
5581
+ "name": "filename",
5582
+ "description": "The filename text."
5583
+ },
5584
+ {
5585
+ "name": "icon",
5586
+ "description": "The leading file-type icon."
5587
+ },
5588
+ {
5589
+ "name": "source",
5590
+ "description": "The source system name."
5591
+ },
5592
+ {
5593
+ "name": "version",
5594
+ "description": "The version label."
3050
5595
  }
3051
5596
  ]
3052
5597
  }
@@ -3054,85 +5599,253 @@
3054
5599
  "exports": [
3055
5600
  {
3056
5601
  "kind": "js",
3057
- "name": "BsMenu",
5602
+ "name": "BsSourceLink",
3058
5603
  "declaration": {
3059
- "name": "BsMenu"
5604
+ "name": "BsSourceLink"
3060
5605
  }
3061
5606
  },
3062
5607
  {
3063
5608
  "kind": "custom-element-definition",
3064
- "name": "bs-menu",
5609
+ "name": "bs-source-link",
3065
5610
  "declaration": {
3066
- "name": "BsMenu"
5611
+ "name": "BsSourceLink"
3067
5612
  }
3068
5613
  }
3069
5614
  ]
3070
5615
  },
3071
5616
  {
3072
5617
  "kind": "javascript-module",
3073
- "path": "src/components/bs-menu-item/bs-menu-item.tsx",
5618
+ "path": "src/components/bs-switch/bs-switch.tsx",
3074
5619
  "declarations": [
3075
5620
  {
3076
5621
  "kind": "class",
3077
5622
  "customElement": true,
3078
- "tagName": "bs-menu-item",
3079
- "name": "BsMenuItem",
3080
- "description": "A single selectable row inside a `bs-menu`: an optional icon plus a text label, rendered as a\nreal `<button>` for correct keyboard/click semantics.\n\n## When to use\n- As a child of `bs-menu`, one per selectable action/option.\n\n## When not to use\n- Outside of `bs-menu` -- this component's sizing/hover treatment is designed to sit inside the\n menu's rounded, padded list box.",
5623
+ "tagName": "bs-switch",
5624
+ "name": "BsSwitch",
5625
+ "description": "A toggle switch for an on/off setting that takes effect immediately (no explicit form\nsubmission required).\n\n## When to use\n- A binary setting that applies right away (e.g. \"Enable notifications\", \"Dark mode\").\n\n## When not to use\n- A binary choice that's part of a form submitted later, or one item within a group of\n independent choices -- use `bs-checkbox` instead.\n- A single mutually-exclusive choice from a set -- use a radio group instead.",
3081
5626
  "attributes": [
5627
+ {
5628
+ "name": "aria-label",
5629
+ "description": "Accessible name for the switch. Required whenever the default (label) slot is empty (e.g. a\nbare \"enabled\" switch in a table row) -- without it, the internal native `<input>` has no\naccessible name at all. Setting `aria-label` directly on the `<bs-switch>` host does NOT\nwork for this: that attribute stays on the light-DOM host and is never forwarded into the\nshadow DOM by the browser, so the actual focusable element (the native `<input>` inside) stays\nnameless. This prop exists specifically to bridge that gap -- same pattern as `bs-button`'s and\n`bs-checkbox`'s identical `ariaLabel` prop, both of which explicitly bind it onto their own\ninternal focusable element for the same reason.",
5630
+ "type": {
5631
+ "text": "string"
5632
+ },
5633
+ "default": "null",
5634
+ "fieldName": "ariaLabel"
5635
+ },
5636
+ {
5637
+ "name": "checked",
5638
+ "description": "Whether the switch is on. Mutable so clicking the label/input toggles it directly, and\nreflected so consumers can target `bs-switch[checked]` via CSS.",
5639
+ "type": {
5640
+ "text": "boolean"
5641
+ },
5642
+ "default": "false",
5643
+ "fieldName": "checked"
5644
+ },
3082
5645
  {
3083
5646
  "name": "disabled",
3084
- "description": "Disables the item: no hover/pressed/focus styling, no pointer cursor, not reachable by\nkeyboard tabbing, and clicking it does not emit `bsSelect`.",
5647
+ "description": "Disables the switch: sets the native `disabled` attribute, suppresses hover/focus styling,\nand prevents toggling.",
3085
5648
  "type": {
3086
5649
  "text": "boolean"
3087
5650
  },
3088
5651
  "default": "false",
3089
5652
  "fieldName": "disabled"
5653
+ },
5654
+ {
5655
+ "name": "size",
5656
+ "description": "Sizing scale. Controls the track's width/height and the knob's diameter.",
5657
+ "type": {
5658
+ "text": "\"lg\" | \"md\"",
5659
+ "references": [
5660
+ {
5661
+ "name": "BsSwitchSize"
5662
+ }
5663
+ ]
5664
+ },
5665
+ "default": "'lg'",
5666
+ "fieldName": "size"
3090
5667
  }
3091
5668
  ],
3092
5669
  "members": [
5670
+ {
5671
+ "kind": "field",
5672
+ "name": "ariaLabel",
5673
+ "description": "Accessible name for the switch. Required whenever the default (label) slot is empty (e.g. a\nbare \"enabled\" switch in a table row) -- without it, the internal native `<input>` has no\naccessible name at all. Setting `aria-label` directly on the `<bs-switch>` host does NOT\nwork for this: that attribute stays on the light-DOM host and is never forwarded into the\nshadow DOM by the browser, so the actual focusable element (the native `<input>` inside) stays\nnameless. This prop exists specifically to bridge that gap -- same pattern as `bs-button`'s and\n`bs-checkbox`'s identical `ariaLabel` prop, both of which explicitly bind it onto their own\ninternal focusable element for the same reason.",
5674
+ "type": {
5675
+ "text": "string"
5676
+ },
5677
+ "default": "null",
5678
+ "readonly": true,
5679
+ "attribute": "aria-label"
5680
+ },
5681
+ {
5682
+ "kind": "field",
5683
+ "name": "checked",
5684
+ "description": "Whether the switch is on. Mutable so clicking the label/input toggles it directly, and\nreflected so consumers can target `bs-switch[checked]` via CSS.",
5685
+ "type": {
5686
+ "text": "boolean"
5687
+ },
5688
+ "default": "false",
5689
+ "attribute": "checked",
5690
+ "reflects": true
5691
+ },
3093
5692
  {
3094
5693
  "kind": "field",
3095
5694
  "name": "disabled",
3096
- "description": "Disables the item: no hover/pressed/focus styling, no pointer cursor, not reachable by\nkeyboard tabbing, and clicking it does not emit `bsSelect`.",
5695
+ "description": "Disables the switch: sets the native `disabled` attribute, suppresses hover/focus styling,\nand prevents toggling.",
3097
5696
  "type": {
3098
5697
  "text": "boolean"
3099
5698
  },
3100
5699
  "default": "false",
3101
5700
  "readonly": true,
3102
5701
  "attribute": "disabled"
5702
+ },
5703
+ {
5704
+ "kind": "field",
5705
+ "name": "size",
5706
+ "description": "Sizing scale. Controls the track's width/height and the knob's diameter.",
5707
+ "type": {
5708
+ "text": "\"lg\" | \"md\"",
5709
+ "references": [
5710
+ {
5711
+ "name": "BsSwitchSize"
5712
+ }
5713
+ ]
5714
+ },
5715
+ "default": "'lg'",
5716
+ "readonly": true,
5717
+ "attribute": "size"
3103
5718
  }
3104
5719
  ],
3105
5720
  "events": [
3106
5721
  {
3107
- "name": "bsSelect",
3108
- "description": "Fires when the item is clicked.",
5722
+ "name": "bsChange",
5723
+ "description": "Emitted when the checked state changes via user interaction, with the new `checked` value.",
3109
5724
  "type": {
3110
- "text": "CustomEvent<void>"
5725
+ "text": "CustomEvent<boolean>"
3111
5726
  }
3112
5727
  }
3113
5728
  ],
3114
5729
  "slots": [
3115
5730
  {
3116
5731
  "name": "",
3117
- "description": "Default slot: the item's text label."
5732
+ "description": "Default slot: the label text."
5733
+ }
5734
+ ],
5735
+ "cssParts": [
5736
+ {
5737
+ "name": "knob",
5738
+ "description": "The sliding circular knob."
3118
5739
  },
3119
5740
  {
3120
- "name": "icon",
3121
- "description": "Optional leading icon (24x24). When left empty, no icon space is reserved."
5741
+ "name": "label",
5742
+ "description": "The label text wrapper."
5743
+ },
5744
+ {
5745
+ "name": "track",
5746
+ "description": "The visual pill-shaped track."
3122
5747
  }
3123
5748
  ],
3124
- "cssParts": [
5749
+ "cssProperties": [
3125
5750
  {
3126
- "name": "icon",
3127
- "description": "The icon wrapper."
5751
+ "name": "--bs-switch-border-width",
5752
+ "description": "Track border width, constant across all sizes."
3128
5753
  },
3129
5754
  {
3130
- "name": "item",
3131
- "description": "The button element."
5755
+ "name": "--bs-switch-focus-ring-color",
5756
+ "description": "Outer focus ring color, drawn outside the track. Aliased to --bs-switch-track-border-focus."
5757
+ },
5758
+ {
5759
+ "name": "--bs-switch-gap",
5760
+ "description": "Gap between the track and the label text. Aliased to --bs-spacing-100."
5761
+ },
5762
+ {
5763
+ "name": "--bs-switch-knob-bg",
5764
+ "description": "Knob background, resting. Aliased to --bs-switch-thumb-bg-default."
5765
+ },
5766
+ {
5767
+ "name": "--bs-switch-knob-bg-checked",
5768
+ "description": "Knob background, checked. Aliased to --bs-switch-thumb-bg-checked."
5769
+ },
5770
+ {
5771
+ "name": "--bs-switch-knob-bg-disabled",
5772
+ "description": "Knob background, disabled. Aliased to --bs-switch-thumb-bg-disabled."
5773
+ },
5774
+ {
5775
+ "name": "--bs-switch-knob-bg-hover",
5776
+ "description": "Knob background, hovered. Aliased to --bs-switch-thumb-bg-hover."
5777
+ },
5778
+ {
5779
+ "name": "--bs-switch-knob-size-lg",
5780
+ "description": "Knob width/height at size=\"lg\"."
5781
+ },
5782
+ {
5783
+ "name": "--bs-switch-knob-size-md",
5784
+ "description": "Knob width/height at size=\"md\"."
5785
+ },
5786
+ {
5787
+ "name": "--bs-switch-label-color",
5788
+ "description": "Label text color. Aliased to --bs-text-default."
5789
+ },
5790
+ {
5791
+ "name": "--bs-switch-label-color-disabled",
5792
+ "description": "Label text color, disabled. Aliased to --bs-text-on-disabled."
5793
+ },
5794
+ {
5795
+ "name": "--bs-switch-padding",
5796
+ "description": "Internal padding of the track around the knob, constant across all sizes. Aliased to --bs-spacing-25."
5797
+ },
5798
+ {
5799
+ "name": "--bs-switch-radius",
5800
+ "description": "Corner radius of the track, constant across all sizes. Aliased to --bs-border-radius-full."
5801
+ },
5802
+ {
5803
+ "name": "--bs-switch-track-bg",
5804
+ "description": "Track background, unchecked/resting. Aliased to --bs-switch-track-bg-default."
5805
+ },
5806
+ {
5807
+ "name": "--bs-switch-track-bg-checked",
5808
+ "description": "Track background, checked/resting. Aliased to --bs-switch-track-bg-checked-default."
5809
+ },
5810
+ {
5811
+ "name": "--bs-switch-track-bg-checked-focus",
5812
+ "description": "Track background, checked/focused. Aliased to --bs-switch-track-bg-checked-focused."
5813
+ },
5814
+ {
5815
+ "name": "--bs-switch-track-bg-checked-hover",
5816
+ "description": "Track background, checked/hovered. The global vendored token directly, same reasoning as --bs-switch-track-bg-hover above."
5817
+ },
5818
+ {
5819
+ "name": "--bs-switch-track-bg-disabled",
5820
+ "description": "Track background, disabled (either checked state). The global vendored token directly, same reasoning as --bs-switch-track-bg-hover above."
5821
+ },
5822
+ {
5823
+ "name": "--bs-switch-track-bg-hover",
5824
+ "description": "Track background, unchecked/hovered. This is the global vendored token directly (src/global/tokens.css) -- not locally re-aliased under a different name here, since it already carries this exact name; see the :host comment below for why."
5825
+ },
5826
+ {
5827
+ "name": "--bs-switch-track-border",
5828
+ "description": "Track border color, resting/disabled. Aliased to --bs-switch-track-border-default."
5829
+ },
5830
+ {
5831
+ "name": "--bs-switch-track-border-hover",
5832
+ "description": "Track border color, hovered or focused. The global vendored token directly, same reasoning as --bs-switch-track-bg-hover above."
5833
+ },
5834
+ {
5835
+ "name": "--bs-switch-track-height-lg",
5836
+ "description": "Track height at size=\"lg\"."
5837
+ },
5838
+ {
5839
+ "name": "--bs-switch-track-height-md",
5840
+ "description": "Track height at size=\"md\"."
5841
+ },
5842
+ {
5843
+ "name": "--bs-switch-track-width-lg",
5844
+ "description": "Track width at size=\"lg\"."
3132
5845
  },
3133
5846
  {
3134
- "name": "label",
3135
- "description": "The label wrapper."
5847
+ "name": "--bs-switch-track-width-md",
5848
+ "description": "Track width at size=\"md\"."
3136
5849
  }
3137
5850
  ]
3138
5851
  }
@@ -3140,101 +5853,129 @@
3140
5853
  "exports": [
3141
5854
  {
3142
5855
  "kind": "js",
3143
- "name": "BsMenuItem",
5856
+ "name": "BsSwitch",
3144
5857
  "declaration": {
3145
- "name": "BsMenuItem"
5858
+ "name": "BsSwitch"
3146
5859
  }
3147
5860
  },
3148
5861
  {
3149
5862
  "kind": "custom-element-definition",
3150
- "name": "bs-menu-item",
5863
+ "name": "bs-switch",
3151
5864
  "declaration": {
3152
- "name": "BsMenuItem"
5865
+ "name": "BsSwitch"
3153
5866
  }
3154
5867
  }
3155
5868
  ]
3156
5869
  },
3157
5870
  {
3158
5871
  "kind": "javascript-module",
3159
- "path": "src/components/bs-modal/bs-modal.tsx",
5872
+ "path": "src/components/bs-tab/bs-tab/bs-tab.tsx",
3160
5873
  "declarations": [
3161
5874
  {
3162
5875
  "kind": "class",
3163
5876
  "customElement": true,
3164
- "tagName": "bs-modal",
3165
- "name": "BsModal",
3166
- "description": "An overlay dialog that interrupts the current flow for a focused task or confirmation.\nCloses itself on backdrop click, Escape, or its own close button, and emits `bsClose`.\n\n## When to use\n- Confirming a consequential action (e.g. \"Confirm booking\") before it takes effect.\n- A short, focused task that doesn't warrant navigating to a new page.\n\n## When not to use\n- For non-blocking status messages — use a toast/notification instead of interrupting the user.\n- For a long, multi-step flow — a full page or a dedicated route is usually a better fit than a\n modal that just gets taller and taller.",
5877
+ "tagName": "bs-tab",
5878
+ "name": "BsTab",
5879
+ "description": "A single tab button -- an optional icon plus a text label, rendered as a real `<button>` so it\nparticipates correctly in tab order and native click/keyboard activation.\n\n## When to use\n- As one button within a tab bar, where exactly one tab is selected/active at a time.\n\n## When not to use\n- As a standalone action button -- use `bs-button` instead, `bs-tab`'s visual language (muted\n until selected/hovered, underline indicator) only makes sense as part of a set.\n\n`selected` is NOT self-toggling -- clicking a `bs-tab` only emits `bsSelect`, it does not set its\nown `selected` prop, and it does not unselect any sibling tabs. Wrap your `<bs-tab>` elements in\n`<bs-tabs type=\"bs-tab\">` -- it owns `role=\"tablist\"` and coordinates selection (listening for\n`bsSelect` and setting `selected`/`false` across siblings) for you. Using `bs-tab` standalone,\noutside a `<bs-tabs>` wrapper, still means `selected` doesn't self-toggle and `role=\"tablist\"`\nisn't provided automatically -- a consumer doing that would still need to coordinate `selected`\nand supply `role=\"tablist\"` manually, same as `bs-radio.mdx` documents for `bs-radio`'s missing\n`bs-radio-group`. See `bs-tab.mdx`'s Accessibility section for the full requirement, including\n`role=\"tabpanel\"` on the corresponding content panels.",
3167
5880
  "attributes": [
3168
5881
  {
3169
- "name": "heading",
5882
+ "name": "aria-label",
5883
+ "description": "Accessible name for the tab. Required for icon-only usage (no visible label text via the\ndefault slot) so screen readers still announce what the tab does -- without it, an icon-only\ntab has no discernible name at all (axe-core flags this as a critical `button-name`\nviolation). Stencil reflects this camelCase prop to the `aria-label` HTML attribute\nautomatically, same as `bs-button`'s identical prop.",
3170
5884
  "type": {
3171
5885
  "text": "string"
3172
5886
  },
3173
- "fieldName": "heading"
5887
+ "default": "null",
5888
+ "fieldName": "ariaLabel"
3174
5889
  },
3175
5890
  {
3176
- "name": "open",
3177
- "description": "Mutable + reflected so the component can close itself (backdrop click, Escape, close button)\nthe same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.",
5891
+ "name": "disabled",
5892
+ "description": "Disables the tab: sets the native `disabled` attribute, suppresses hover/focus styling, and\nprevents clicking from emitting `bsSelect`.",
3178
5893
  "type": {
3179
5894
  "text": "boolean"
3180
5895
  },
3181
5896
  "default": "false",
3182
- "fieldName": "open"
5897
+ "fieldName": "disabled"
3183
5898
  },
3184
5899
  {
3185
- "name": "size",
5900
+ "name": "icon-position",
5901
+ "description": "Where the icon sits relative to the label, when both `icon` and the default slot are\npopulated. Ignored for icon-only/text-only layouts.",
3186
5902
  "type": {
3187
- "text": "\"lg\" | \"md\" | \"sm\"",
5903
+ "text": "\"start\" | \"top\"",
3188
5904
  "references": [
3189
5905
  {
3190
- "name": "BsModalSize"
5906
+ "name": "BsTabIconPosition"
3191
5907
  }
3192
5908
  ]
3193
5909
  },
3194
- "default": "'md'",
3195
- "fieldName": "size"
5910
+ "default": "'start'",
5911
+ "fieldName": "iconPosition"
5912
+ },
5913
+ {
5914
+ "name": "selected",
5915
+ "description": "Whether this tab is the currently active one. NOT mutable and NOT self-toggling -- see the\n\"Known gap\" note in the class JSDoc. Still reflected as an attribute so consumers/CSS can\ntarget `bs-tab[selected]`.",
5916
+ "type": {
5917
+ "text": "boolean"
5918
+ },
5919
+ "default": "false",
5920
+ "fieldName": "selected"
3196
5921
  }
3197
5922
  ],
3198
5923
  "members": [
3199
5924
  {
3200
5925
  "kind": "field",
3201
- "name": "heading",
5926
+ "name": "ariaLabel",
5927
+ "description": "Accessible name for the tab. Required for icon-only usage (no visible label text via the\ndefault slot) so screen readers still announce what the tab does -- without it, an icon-only\ntab has no discernible name at all (axe-core flags this as a critical `button-name`\nviolation). Stencil reflects this camelCase prop to the `aria-label` HTML attribute\nautomatically, same as `bs-button`'s identical prop.",
3202
5928
  "type": {
3203
5929
  "text": "string"
3204
5930
  },
5931
+ "default": "null",
3205
5932
  "readonly": true,
3206
- "attribute": "heading"
5933
+ "attribute": "aria-label"
3207
5934
  },
3208
5935
  {
3209
5936
  "kind": "field",
3210
- "name": "open",
3211
- "description": "Mutable + reflected so the component can close itself (backdrop click, Escape, close button)\nthe same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.",
5937
+ "name": "disabled",
5938
+ "description": "Disables the tab: sets the native `disabled` attribute, suppresses hover/focus styling, and\nprevents clicking from emitting `bsSelect`.",
3212
5939
  "type": {
3213
5940
  "text": "boolean"
3214
5941
  },
3215
5942
  "default": "false",
3216
- "attribute": "open",
3217
- "reflects": true
5943
+ "readonly": true,
5944
+ "attribute": "disabled"
3218
5945
  },
3219
5946
  {
3220
5947
  "kind": "field",
3221
- "name": "size",
5948
+ "name": "iconPosition",
5949
+ "description": "Where the icon sits relative to the label, when both `icon` and the default slot are\npopulated. Ignored for icon-only/text-only layouts.",
3222
5950
  "type": {
3223
- "text": "\"lg\" | \"md\" | \"sm\"",
5951
+ "text": "\"start\" | \"top\"",
3224
5952
  "references": [
3225
5953
  {
3226
- "name": "BsModalSize"
5954
+ "name": "BsTabIconPosition"
3227
5955
  }
3228
5956
  ]
3229
5957
  },
3230
- "default": "'md'",
5958
+ "default": "'start'",
3231
5959
  "readonly": true,
3232
- "attribute": "size"
5960
+ "attribute": "icon-position"
5961
+ },
5962
+ {
5963
+ "kind": "field",
5964
+ "name": "selected",
5965
+ "description": "Whether this tab is the currently active one. NOT mutable and NOT self-toggling -- see the\n\"Known gap\" note in the class JSDoc. Still reflected as an attribute so consumers/CSS can\ntarget `bs-tab[selected]`.",
5966
+ "type": {
5967
+ "text": "boolean"
5968
+ },
5969
+ "default": "false",
5970
+ "readonly": true,
5971
+ "attribute": "selected",
5972
+ "reflects": true
3233
5973
  }
3234
5974
  ],
3235
5975
  "events": [
3236
5976
  {
3237
- "name": "bsClose",
5977
+ "name": "bsSelect",
5978
+ "description": "Fires when the tab is clicked. Does not toggle `selected` itself -- see the class JSDoc.",
3238
5979
  "type": {
3239
5980
  "text": "CustomEvent<void>"
3240
5981
  }
@@ -3243,37 +5984,123 @@
3243
5984
  "slots": [
3244
5985
  {
3245
5986
  "name": "",
3246
- "description": "Default slot: the dialog body content."
5987
+ "description": "Default slot: the tab's label text. When empty (icon-only), no space is reserved for it."
3247
5988
  },
3248
5989
  {
3249
- "name": "footer",
3250
- "description": "Optional footer content (typically action buttons)."
5990
+ "name": "badge",
5991
+ "description": "Optional trailing badge, rendered after the label (e.g. an unread count). Typically\na `bs-badge` element -- consumer's responsibility to style/populate, this component just reserves\na slot for it. Only rendered for text-only and icon+text-horizontal layouts, per the design spec\n(not icon-only or icon+text-vertical)."
5992
+ },
5993
+ {
5994
+ "name": "icon",
5995
+ "description": "Optional icon (24x24). When empty (text-only), no space is reserved for it."
3251
5996
  }
3252
5997
  ],
3253
5998
  "cssParts": [
3254
5999
  {
3255
- "name": "backdrop",
3256
- "description": "The full-viewport overlay behind the dialog."
6000
+ "name": "badge",
6001
+ "description": "The badge wrapper."
3257
6002
  },
3258
6003
  {
3259
- "name": "body",
3260
- "description": "The body content wrapper."
6004
+ "name": "icon",
6005
+ "description": "The icon wrapper."
3261
6006
  },
3262
6007
  {
3263
- "name": "close",
3264
- "description": "The close button."
6008
+ "name": "indicator",
6009
+ "description": "The selection/hover underline indicator."
3265
6010
  },
3266
6011
  {
3267
- "name": "dialog",
3268
- "description": "The dialog box itself."
6012
+ "name": "label",
6013
+ "description": "The label wrapper."
3269
6014
  },
3270
6015
  {
3271
- "name": "footer",
3272
- "description": "The footer wrapper (only visible when the footer slot has content)."
6016
+ "name": "tab",
6017
+ "description": "The button element."
6018
+ }
6019
+ ],
6020
+ "cssProperties": [
6021
+ {
6022
+ "name": "--bs-tab-color-default",
6023
+ "description": "Text/icon color, deselected/enabled. Aliased to --bs-text-muted."
3273
6024
  },
3274
6025
  {
3275
- "name": "header",
3276
- "description": "The header row (heading + close button)."
6026
+ "name": "--bs-tab-color-disabled",
6027
+ "description": "Text/icon color, disabled. Aliased to --bs-text-on-disabled."
6028
+ },
6029
+ {
6030
+ "name": "--bs-tab-color-hover",
6031
+ "description": "Text/icon color, deselected/hovered, focused or pressed. Aliased to --bs-text-default."
6032
+ },
6033
+ {
6034
+ "name": "--bs-tab-color-selected",
6035
+ "description": "Text/icon color, selected. Aliased to --bs-color-primary-default."
6036
+ },
6037
+ {
6038
+ "name": "--bs-tab-color-selected-hover",
6039
+ "description": "Text/icon color, selected/hovered or focused. Aliased to --bs-color-primary-hover."
6040
+ },
6041
+ {
6042
+ "name": "--bs-tab-color-selected-pressed",
6043
+ "description": "Text/icon color, selected/pressed. Aliased to --bs-color-primary-pressed."
6044
+ },
6045
+ {
6046
+ "name": "--bs-tab-focus-ring-color",
6047
+ "description": "Focus ring color. Aliased to --bs-border-neutral-focus."
6048
+ },
6049
+ {
6050
+ "name": "--bs-tab-font-size",
6051
+ "description": "Aliased to --bs-font-size-md."
6052
+ },
6053
+ {
6054
+ "name": "--bs-tab-gap",
6055
+ "description": "Gap between icon and label, icon+text horizontal layout. Aliased to --bs-spacing-75."
6056
+ },
6057
+ {
6058
+ "name": "--bs-tab-gap-vertical",
6059
+ "description": "Gap between icon and label, icon+text vertical layout. Aliased to --bs-spacing-50."
6060
+ },
6061
+ {
6062
+ "name": "--bs-tab-icon-color-default",
6063
+ "description": "Icon color, deselected/enabled. Aliased to --bs-icon-muted."
6064
+ },
6065
+ {
6066
+ "name": "--bs-tab-icon-color-disabled",
6067
+ "description": "Icon color, disabled. Aliased to --bs-icon-disabled."
6068
+ },
6069
+ {
6070
+ "name": "--bs-tab-icon-color-hover",
6071
+ "description": "Icon color, deselected/hovered, focused or pressed. Aliased to --bs-icon-default."
6072
+ },
6073
+ {
6074
+ "name": "--bs-tab-indicator-hover",
6075
+ "description": "Underline color, deselected/hovered, focused or pressed. Aliased to --bs-border-neutral-hover."
6076
+ },
6077
+ {
6078
+ "name": "--bs-tab-indicator-selected",
6079
+ "description": "Underline color, selected. Aliased to --bs-color-primary-default."
6080
+ },
6081
+ {
6082
+ "name": "--bs-tab-indicator-selected-hover",
6083
+ "description": "Underline color, selected/hovered or focused. Aliased to --bs-color-primary-hover."
6084
+ },
6085
+ {
6086
+ "name": "--bs-tab-indicator-selected-pressed",
6087
+ "description": "Underline color, selected/pressed. Aliased to --bs-color-primary-pressed."
6088
+ },
6089
+ {
6090
+ "name": "--bs-tab-line-height",
6091
+ "description": "Aliased to --bs-line-height-body-md."
6092
+ },
6093
+ {
6094
+ "name": "--bs-tab-padding-x",
6095
+ "description": "Left/right padding. Aliased to --bs-spacing-200."
6096
+ },
6097
+ {
6098
+ "name": "--bs-tab-padding-y",
6099
+ "description": "Top/bottom padding. Aliased to --bs-spacing-150."
6100
+ },
6101
+ {
6102
+ "name": "--bs-tab-radius",
6103
+ "description": "Corner radius of the tab button. Aliased to --bs-border-radius-100."
3277
6104
  }
3278
6105
  ]
3279
6106
  }
@@ -3281,163 +6108,126 @@
3281
6108
  "exports": [
3282
6109
  {
3283
6110
  "kind": "js",
3284
- "name": "BsModal",
6111
+ "name": "BsTab",
3285
6112
  "declaration": {
3286
- "name": "BsModal"
6113
+ "name": "BsTab"
3287
6114
  }
3288
6115
  },
3289
6116
  {
3290
6117
  "kind": "custom-element-definition",
3291
- "name": "bs-modal",
6118
+ "name": "bs-tab",
3292
6119
  "declaration": {
3293
- "name": "BsModal"
6120
+ "name": "BsTab"
3294
6121
  }
3295
6122
  }
3296
6123
  ]
3297
6124
  },
3298
6125
  {
3299
6126
  "kind": "javascript-module",
3300
- "path": "src/components/bs-source-link/bs-source-link.tsx",
6127
+ "path": "src/components/bs-tab/bs-tabs/bs-tabs.tsx",
3301
6128
  "declarations": [
3302
6129
  {
3303
6130
  "kind": "class",
3304
6131
  "customElement": true,
3305
- "tagName": "bs-source-link",
3306
- "name": "BsSourceLink",
3307
- "description": "A single citation row inside `bs-chatbot-sources-drawer` -- a file icon + filename on the first\nline, the originating system and version on the second, and a trailing \"open\" arrow.\n\n## When to use\n- One row per source Genie cited in a response, slotted into `bs-chatbot-sources-drawer`.\n\n## When not to use\n- Outside the sources drawer context -- this is a purpose-built citation row, not a generic\n link/list-item component.",
6132
+ "tagName": "bs-tabs",
6133
+ "name": "BsTabs",
6134
+ "description": "A tab-group wrapper: owns `role=\"tablist\"` and coordinates selection across its slotted\n`<bs-tab>` or `<bs-inline-tab>` children, so consumers no longer have to hand-roll this.\n\n`bs-tab.mdx`/`bs-inline-tab.mdx` previously documented this coordination -- listening for\n`bsSelect` and setting `selected`/`false` on siblings, plus supplying `role=\"tablist\"` on\nwhatever element groups the tabs -- as a \"Known gap\"/manual consumer responsibility. This\ncomponent is that wrapper: it renders the `role=\"tablist\"` element and listens for `bsSelect`\nitself. Using `<bs-tab>`/`<bs-inline-tab>` standalone, outside a `<bs-tabs>` wrapper, still means\n`selected` doesn't self-toggle -- a consumer doing that would still need to coordinate `selected`\nmanually -- but that's no longer the first recommended path.\n\n## When to use\n- Wrapping a set of `<bs-tab>` (underline style) or `<bs-inline-tab>` (pill style) elements that\n should behave as a single-selection tab bar.\n\n## When not to use\n- For a single, standalone tab button not participating in a group -- use `bs-tab`/`bs-inline-tab`\n directly.",
3308
6135
  "attributes": [
3309
6136
  {
3310
- "name": "file-name",
3311
- "description": "The cited document's filename.",
3312
- "type": {
3313
- "text": "string"
3314
- },
3315
- "default": "'Source'",
3316
- "fieldName": "fileName"
3317
- },
3318
- {
3319
- "name": "href",
3320
- "description": "If set, renders the row as a link that opens this URL; otherwise as a button that only emits `bsOpen`.",
3321
- "type": {
3322
- "text": "string"
3323
- },
3324
- "fieldName": "href"
3325
- },
3326
- {
3327
- "name": "source-name",
3328
- "description": "The system/app the document came from (e.g. \"HoltePortalen\").",
3329
- "type": {
3330
- "text": "string"
3331
- },
3332
- "fieldName": "sourceName"
3333
- },
3334
- {
3335
- "name": "target",
3336
- "description": "`target` used when `href` is set.",
6137
+ "name": "orientation",
6138
+ "description": "Layout direction of the tab bar itself. Sets `aria-orientation` on the internal wrapper and\nswitches `flex-direction`.",
3337
6139
  "type": {
3338
- "text": "string"
6140
+ "text": "\"horizontal\" | \"vertical\"",
6141
+ "references": [
6142
+ {
6143
+ "name": "BsTabsOrientation"
6144
+ }
6145
+ ]
3339
6146
  },
3340
- "default": "'_blank'",
3341
- "fieldName": "target"
6147
+ "default": "'horizontal'",
6148
+ "fieldName": "orientation"
3342
6149
  },
3343
6150
  {
3344
- "name": "version",
3345
- "description": "The document's version label (e.g. \"v3.2\"). Omit if the source has no version.",
6151
+ "name": "type",
6152
+ "description": "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.",
3346
6153
  "type": {
3347
- "text": "string"
6154
+ "text": "\"bs-inline-tab\" | \"bs-tab\"",
6155
+ "references": [
6156
+ {
6157
+ "name": "BsTabsType"
6158
+ }
6159
+ ]
3348
6160
  },
3349
- "fieldName": "version"
6161
+ "default": "'bs-tab'",
6162
+ "fieldName": "type"
3350
6163
  }
3351
6164
  ],
3352
6165
  "members": [
3353
6166
  {
3354
6167
  "kind": "field",
3355
- "name": "fileName",
3356
- "description": "The cited document's filename.",
3357
- "type": {
3358
- "text": "string"
3359
- },
3360
- "default": "'Source'",
3361
- "readonly": true,
3362
- "attribute": "file-name"
3363
- },
3364
- {
3365
- "kind": "field",
3366
- "name": "href",
3367
- "description": "If set, renders the row as a link that opens this URL; otherwise as a button that only emits `bsOpen`.",
3368
- "type": {
3369
- "text": "string"
3370
- },
3371
- "readonly": true,
3372
- "attribute": "href"
3373
- },
3374
- {
3375
- "kind": "field",
3376
- "name": "sourceName",
3377
- "description": "The system/app the document came from (e.g. \"HoltePortalen\").",
3378
- "type": {
3379
- "text": "string"
3380
- },
3381
- "readonly": true,
3382
- "attribute": "source-name"
3383
- },
3384
- {
3385
- "kind": "field",
3386
- "name": "target",
3387
- "description": "`target` used when `href` is set.",
6168
+ "name": "orientation",
6169
+ "description": "Layout direction of the tab bar itself. Sets `aria-orientation` on the internal wrapper and\nswitches `flex-direction`.",
3388
6170
  "type": {
3389
- "text": "string"
6171
+ "text": "\"horizontal\" | \"vertical\"",
6172
+ "references": [
6173
+ {
6174
+ "name": "BsTabsOrientation"
6175
+ }
6176
+ ]
3390
6177
  },
3391
- "default": "'_blank'",
6178
+ "default": "'horizontal'",
3392
6179
  "readonly": true,
3393
- "attribute": "target"
6180
+ "attribute": "orientation"
3394
6181
  },
3395
6182
  {
3396
6183
  "kind": "field",
3397
- "name": "version",
3398
- "description": "The document's version label (e.g. \"v3.2\"). Omit if the source has no version.",
6184
+ "name": "type",
6185
+ "description": "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.",
3399
6186
  "type": {
3400
- "text": "string"
6187
+ "text": "\"bs-inline-tab\" | \"bs-tab\"",
6188
+ "references": [
6189
+ {
6190
+ "name": "BsTabsType"
6191
+ }
6192
+ ]
3401
6193
  },
6194
+ "default": "'bs-tab'",
3402
6195
  "readonly": true,
3403
- "attribute": "version"
6196
+ "attribute": "type"
3404
6197
  }
3405
6198
  ],
3406
- "events": [
6199
+ "slots": [
3407
6200
  {
3408
- "name": "bsOpen",
3409
- "description": "Fires on click/activation, whether or not `href` is set -- lets the consuming app log or handle the open.",
3410
- "type": {
3411
- "text": "CustomEvent<void>"
3412
- }
6201
+ "name": "",
6202
+ "description": "Default slot: the tab elements (`<bs-tab>` or `<bs-inline-tab>`, matching `type`) that\nmake up this group."
3413
6203
  }
3414
6204
  ],
3415
- "slots": [
6205
+ "cssParts": [
3416
6206
  {
3417
- "name": "icon",
3418
- "description": "Overrides the default file icon."
6207
+ "name": "tablist",
6208
+ "description": "The wrapping element carrying `role=\"tablist\"`."
3419
6209
  }
3420
6210
  ],
3421
- "cssParts": [
6211
+ "cssProperties": [
3422
6212
  {
3423
- "name": "arrow",
3424
- "description": "The trailing \"open\" arrow icon."
6213
+ "name": "--bs-tabs-inline-tab-bg",
6214
+ "description": "Bar background when type=\"bs-inline-tab\". Aliased to --bs-color-neutral-container."
3425
6215
  },
3426
6216
  {
3427
- "name": "filename",
3428
- "description": "The filename text."
6217
+ "name": "--bs-tabs-inline-tab-gap",
6218
+ "description": "Gap between tabs when type=\"bs-inline-tab\". Aliased to --bs-spacing-50."
3429
6219
  },
3430
6220
  {
3431
- "name": "icon",
3432
- "description": "The leading file-type icon."
6221
+ "name": "--bs-tabs-inline-tab-padding-x",
6222
+ "description": "Bar horizontal padding when type=\"bs-inline-tab\". Aliased to --bs-spacing-50."
3433
6223
  },
3434
6224
  {
3435
- "name": "source",
3436
- "description": "The source system name."
6225
+ "name": "--bs-tabs-inline-tab-radius",
6226
+ "description": "Bar corner radius when type=\"bs-inline-tab\". Aliased to --bs-border-radius-full."
3437
6227
  },
3438
6228
  {
3439
- "name": "version",
3440
- "description": "The version label."
6229
+ "name": "--bs-tabs-tab-gap",
6230
+ "description": "Gap between tabs when type=\"bs-tab\". Aliased to --bs-spacing-100."
3441
6231
  }
3442
6232
  ]
3443
6233
  }
@@ -3445,16 +6235,16 @@
3445
6235
  "exports": [
3446
6236
  {
3447
6237
  "kind": "js",
3448
- "name": "BsSourceLink",
6238
+ "name": "BsTabs",
3449
6239
  "declaration": {
3450
- "name": "BsSourceLink"
6240
+ "name": "BsTabs"
3451
6241
  }
3452
6242
  },
3453
6243
  {
3454
6244
  "kind": "custom-element-definition",
3455
- "name": "bs-source-link",
6245
+ "name": "bs-tabs",
3456
6246
  "declaration": {
3457
- "name": "BsSourceLink"
6247
+ "name": "BsTabs"
3458
6248
  }
3459
6249
  }
3460
6250
  ]