@brandsync/wc 0.0.12 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/custom-elements.json +4969 -3104
  2. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  3. package/dist/brandsync-wc/p-0ba35c3b.entry.js +1 -0
  4. package/dist/brandsync-wc/{p-72a33f88.entry.js → p-10f6f3cd.entry.js} +1 -1
  5. package/dist/brandsync-wc/{p-2c51d738.entry.js → p-16c960b5.entry.js} +1 -1
  6. package/dist/brandsync-wc/p-17a695af.entry.js +1 -0
  7. package/dist/brandsync-wc/{p-6e854e92.entry.js → p-196cfcf0.entry.js} +1 -1
  8. package/dist/brandsync-wc/p-1fcc9f47.entry.js +1 -0
  9. package/dist/brandsync-wc/p-27cce165.entry.js +1 -0
  10. package/dist/brandsync-wc/p-37365a51.entry.js +1 -0
  11. package/dist/brandsync-wc/{p-0eee5477.entry.js → p-38aad266.entry.js} +1 -1
  12. package/dist/brandsync-wc/p-3efb76dd.entry.js +1 -0
  13. package/dist/brandsync-wc/{p-1c6fa697.entry.js → p-43e37883.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-1900f6ce.entry.js → p-45016a37.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-8b662ee3.entry.js → p-48000949.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-ef8522b5.entry.js → p-4ec24ccb.entry.js} +1 -1
  17. package/dist/brandsync-wc/p-4f8459ae.entry.js +1 -0
  18. package/dist/brandsync-wc/{p-8049f9f2.entry.js → p-55a8d4b5.entry.js} +1 -1
  19. package/dist/brandsync-wc/p-59ac2495.entry.js +1 -0
  20. package/dist/brandsync-wc/p-5ae9e60e.entry.js +1 -0
  21. package/dist/brandsync-wc/p-613ff380.entry.js +1 -0
  22. package/dist/brandsync-wc/{p-57fdbb76.entry.js → p-63167373.entry.js} +1 -1
  23. package/dist/brandsync-wc/{p-20dbc6a1.entry.js → p-69c5bc2e.entry.js} +1 -1
  24. package/dist/brandsync-wc/{p-46ddc8e1.entry.js → p-6e95eb36.entry.js} +1 -1
  25. package/dist/brandsync-wc/p-752c04c8.entry.js +1 -0
  26. package/dist/brandsync-wc/p-7e544766.entry.js +1 -0
  27. package/dist/brandsync-wc/p-917a5bbc.entry.js +1 -0
  28. package/dist/brandsync-wc/{p-c320b6b4.entry.js → p-9bcd99aa.entry.js} +1 -1
  29. package/dist/brandsync-wc/{p-12ec9e92.entry.js → p-9f1e4a91.entry.js} +1 -1
  30. package/dist/brandsync-wc/{p-DST5-cTx.js → p-Do3l4of3.js} +2 -2
  31. package/dist/brandsync-wc/{p-0fa017ce.entry.js → p-aa43d478.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-dd09d335.entry.js → p-ab8de9b6.entry.js} +1 -1
  33. package/dist/brandsync-wc/p-b18e4845.entry.js +1 -0
  34. package/dist/brandsync-wc/{p-88a0abee.entry.js → p-b5cbe30b.entry.js} +1 -1
  35. package/dist/brandsync-wc/{p-3b31f7c7.entry.js → p-baa4e2e0.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-d4e3ca77.entry.js → p-c04cf1bb.entry.js} +1 -1
  37. package/dist/brandsync-wc/{p-a5b15061.entry.js → p-c3079ad7.entry.js} +1 -1
  38. package/dist/brandsync-wc/{p-23457a21.entry.js → p-c3c383dc.entry.js} +1 -1
  39. package/dist/brandsync-wc/p-c90f5a74.entry.js +1 -0
  40. package/dist/brandsync-wc/{p-b24a980b.entry.js → p-cc79e75f.entry.js} +1 -1
  41. package/dist/brandsync-wc/p-ce7fc368.entry.js +1 -0
  42. package/dist/brandsync-wc/{p-1adc59be.entry.js → p-d037b619.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-2a65aabb.entry.js → p-d22990c0.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-56c66448.entry.js → p-e231e4cf.entry.js} +1 -1
  45. package/dist/brandsync-wc/{p-64e2a7d7.entry.js → p-e2a37bda.entry.js} +1 -1
  46. package/dist/brandsync-wc/{p-aba300a9.entry.js → p-e3ce0c8c.entry.js} +1 -1
  47. package/dist/brandsync-wc/p-f0ae2740.entry.js +1 -0
  48. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  49. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +2 -2
  50. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  51. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  52. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  53. package/dist/cjs/bs-attachment.cjs.entry.js +1 -1
  54. package/dist/cjs/bs-avatar.cjs.entry.js +60 -0
  55. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  56. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +56 -0
  57. package/dist/cjs/bs-breadcrumb.cjs.entry.js +33 -0
  58. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +49 -0
  59. package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
  60. package/dist/cjs/bs-button.cjs.entry.js +2 -2
  61. package/dist/cjs/bs-card.cjs.entry.js +10 -3
  62. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
  63. package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
  64. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
  65. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
  66. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +2 -2
  67. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +20 -0
  68. package/dist/cjs/bs-checkbox.cjs.entry.js +2 -2
  69. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +2 -2
  70. package/dist/cjs/bs-composer.cjs.entry.js +2 -2
  71. package/dist/cjs/bs-data-table.cjs.entry.js +3 -3
  72. package/dist/cjs/bs-dialog.cjs.entry.js +110 -0
  73. package/dist/cjs/bs-icon-button.cjs.entry.js +2 -2
  74. package/dist/cjs/bs-inline-tab.cjs.entry.js +2 -2
  75. package/dist/cjs/bs-input.cjs.entry.js +24 -12
  76. package/dist/cjs/bs-logo.cjs.entry.js +1 -1
  77. package/dist/cjs/{bs-menu_2.cjs.entry.js → bs-menu-item.cjs.entry.js} +2 -15
  78. package/dist/cjs/bs-menu.cjs.entry.js +17 -0
  79. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +3 -3
  80. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +8 -2
  81. package/dist/cjs/bs-navigation-header.cjs.entry.js +2 -2
  82. package/dist/cjs/bs-pagination.cjs.entry.js +85 -0
  83. package/dist/cjs/bs-radio.cjs.entry.js +2 -2
  84. package/dist/cjs/bs-slider.cjs.entry.js +2 -2
  85. package/dist/cjs/bs-snackbar.cjs.entry.js +41 -0
  86. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  87. package/dist/cjs/bs-stepper-step.cjs.entry.js +44 -0
  88. package/dist/cjs/bs-stepper.cjs.entry.js +62 -0
  89. package/dist/cjs/bs-switch.cjs.entry.js +2 -2
  90. package/dist/cjs/bs-tab.cjs.entry.js +2 -2
  91. package/dist/cjs/bs-tabs.cjs.entry.js +2 -2
  92. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  93. package/dist/cjs/{index-B3sdhEGk.js → index-DHVw-IPK.js} +1 -0
  94. package/dist/cjs/loader.cjs.js +2 -2
  95. package/dist/collection/collection-manifest.json +10 -1
  96. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  97. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  98. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  99. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  100. package/dist/collection/components/bs-avatar/bs-avatar.cmp.test.js +54 -0
  101. package/dist/collection/components/bs-avatar/bs-avatar.css +197 -0
  102. package/dist/collection/components/bs-avatar/bs-avatar.js +251 -0
  103. package/dist/collection/components/bs-avatar/bs-avatar.stories.js +67 -0
  104. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.cmp.test.js +62 -0
  105. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.css +93 -0
  106. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.js +130 -0
  107. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.cmp.test.js +118 -0
  108. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.css +125 -0
  109. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.js +192 -0
  110. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.cmp.test.js +58 -0
  111. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.css +18 -0
  112. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +129 -0
  113. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.stories.js +84 -0
  114. package/dist/collection/components/bs-button/bs-button/bs-button.js +1 -1
  115. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +1 -1
  116. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  117. package/dist/collection/components/bs-card/bs-card.cmp.test.js +19 -0
  118. package/dist/collection/components/bs-card/bs-card.css +37 -5
  119. package/dist/collection/components/bs-card/bs-card.js +18 -2
  120. package/dist/collection/components/bs-card/bs-card.stories.js +17 -1
  121. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  122. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  123. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  124. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.css +1 -1
  125. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  126. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  127. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.cmp.test.js +23 -0
  128. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.css +64 -0
  129. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +81 -0
  130. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.stories.js +25 -0
  131. package/dist/collection/components/bs-checkbox/bs-checkbox.js +1 -1
  132. package/dist/collection/components/bs-checkbox/bs-checkbox.stories.js +12 -0
  133. package/dist/collection/components/bs-composer/bs-composer.js +1 -1
  134. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +1 -1
  135. package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
  136. package/dist/collection/components/{bs-modal/bs-modal.cmp.test.js → bs-dialog/bs-dialog.cmp.test.js} +63 -19
  137. package/dist/collection/components/bs-dialog/bs-dialog.css +130 -0
  138. package/dist/collection/components/bs-dialog/bs-dialog.js +273 -0
  139. package/dist/collection/components/bs-dialog/bs-dialog.stories.js +115 -0
  140. package/dist/collection/components/bs-input/bs-input.cmp.test.js +20 -0
  141. package/dist/collection/components/bs-input/bs-input.css +80 -2
  142. package/dist/collection/components/bs-input/bs-input.js +28 -10
  143. package/dist/collection/components/bs-input/bs-input.stories.js +14 -11
  144. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  145. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  146. package/dist/collection/components/bs-pagination/bs-pagination.cmp.test.js +102 -0
  147. package/dist/collection/components/bs-pagination/bs-pagination.css +120 -0
  148. package/dist/collection/components/bs-pagination/bs-pagination.js +233 -0
  149. package/dist/collection/components/bs-pagination/bs-pagination.stories.js +43 -0
  150. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  151. package/dist/collection/components/bs-slider/bs-slider.js +1 -1
  152. package/dist/collection/components/bs-snackbar/bs-snackbar.cmp.test.js +77 -0
  153. package/dist/collection/components/bs-snackbar/bs-snackbar.css +321 -0
  154. package/dist/collection/components/bs-snackbar/bs-snackbar.js +172 -0
  155. package/dist/collection/components/bs-snackbar/bs-snackbar.stories.js +59 -0
  156. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  157. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.cmp.test.js +42 -0
  158. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.css +29 -0
  159. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +162 -0
  160. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.stories.js +59 -0
  161. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.cmp.test.js +73 -0
  162. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.css +258 -0
  163. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +231 -0
  164. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  165. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  166. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  167. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  168. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  169. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +12 -0
  170. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +34 -6
  171. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.js +74 -2
  172. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.css +5 -5
  173. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  174. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  175. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.js +258 -1
  176. package/dist/components/bs-ai-disclaimer.js +1 -1
  177. package/dist/components/bs-ai-greeting.js +1 -1
  178. package/dist/components/bs-ai-thinking.js +1 -1
  179. package/dist/components/bs-attachment-list.js +1 -1
  180. package/dist/components/bs-attachment.js +1 -1
  181. package/dist/components/{bs-modal.d.ts → bs-avatar.d.ts} +4 -4
  182. package/dist/components/bs-avatar.js +1 -0
  183. package/dist/components/bs-badge.js +1 -1
  184. package/dist/components/bs-breadcrumb-overflow.d.ts +11 -0
  185. package/dist/components/bs-breadcrumb-overflow.js +1 -0
  186. package/dist/components/bs-breadcrumb.d.ts +11 -0
  187. package/dist/components/bs-breadcrumb.js +1 -0
  188. package/dist/components/bs-breadcrumbs.d.ts +11 -0
  189. package/dist/components/bs-breadcrumbs.js +1 -0
  190. package/dist/components/bs-button-skeleton.js +1 -1
  191. package/dist/components/bs-button.js +1 -1
  192. package/dist/components/bs-card.js +1 -1
  193. package/dist/components/bs-chatbot-feedback.js +1 -1
  194. package/dist/components/bs-chatbot-header.js +1 -1
  195. package/dist/components/bs-chatbot-response-action.js +1 -1
  196. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  197. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  198. package/dist/components/bs-checkbox-skeleton.d.ts +11 -0
  199. package/dist/components/bs-checkbox-skeleton.js +1 -0
  200. package/dist/components/bs-checkbox.js +1 -1
  201. package/dist/components/bs-composer-status-banner.js +1 -1
  202. package/dist/components/bs-composer.js +1 -1
  203. package/dist/components/bs-data-table.js +1 -1
  204. package/dist/components/bs-dialog.d.ts +11 -0
  205. package/dist/components/bs-dialog.js +1 -0
  206. package/dist/components/bs-icon-button.js +1 -1
  207. package/dist/components/bs-inline-tab.js +1 -1
  208. package/dist/components/bs-input.js +1 -1
  209. package/dist/components/bs-logo.js +1 -1
  210. package/dist/components/bs-menu-item.js +1 -1
  211. package/dist/components/bs-menu.js +1 -1
  212. package/dist/components/bs-navigation-drawer-item.js +1 -1
  213. package/dist/components/bs-navigation-drawer.js +1 -1
  214. package/dist/components/bs-navigation-header.js +1 -1
  215. package/dist/components/bs-pagination.d.ts +11 -0
  216. package/dist/components/bs-pagination.js +1 -0
  217. package/dist/components/bs-radio.js +1 -1
  218. package/dist/components/bs-slider.js +1 -1
  219. package/dist/components/bs-snackbar.d.ts +11 -0
  220. package/dist/components/bs-snackbar.js +1 -0
  221. package/dist/components/bs-source-link.js +1 -1
  222. package/dist/components/bs-stepper-step.d.ts +11 -0
  223. package/dist/components/bs-stepper-step.js +1 -0
  224. package/dist/components/bs-stepper.d.ts +11 -0
  225. package/dist/components/bs-stepper.js +1 -0
  226. package/dist/components/bs-switch.js +1 -1
  227. package/dist/components/bs-tab.js +1 -1
  228. package/dist/components/bs-tabs.js +1 -1
  229. package/dist/components/bs-tooltip.js +1 -1
  230. package/dist/components/index.js +1 -1
  231. package/dist/components/{p-BAOJc0V0.js → p-BFcVSpES.js} +1 -1
  232. package/dist/components/{p-Be1Pfcnm.js → p-BJZYe7M4.js} +1 -1
  233. package/dist/components/{p-CaWqTQBZ.js → p-BKaZWFE1.js} +1 -1
  234. package/dist/components/{p-DivZLd6i.js → p-Bs7nEbqK.js} +1 -1
  235. package/dist/components/{p-BqYyMGrB.js → p-CPSCOLIf.js} +1 -1
  236. package/dist/components/{p-xfx69LQx.js → p-CUa8zihb.js} +1 -1
  237. package/dist/esm/brandsync-wc.js +3 -3
  238. package/dist/esm/bs-ai-disclaimer.entry.js +2 -2
  239. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  240. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  241. package/dist/esm/bs-attachment-list.entry.js +2 -2
  242. package/dist/esm/bs-attachment.entry.js +1 -1
  243. package/dist/esm/bs-avatar.entry.js +58 -0
  244. package/dist/esm/bs-badge.entry.js +1 -1
  245. package/dist/esm/bs-breadcrumb-overflow.entry.js +54 -0
  246. package/dist/esm/bs-breadcrumb.entry.js +31 -0
  247. package/dist/esm/bs-breadcrumbs.entry.js +47 -0
  248. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  249. package/dist/esm/bs-button.entry.js +2 -2
  250. package/dist/esm/bs-card.entry.js +10 -3
  251. package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
  252. package/dist/esm/bs-chatbot-header.entry.js +2 -2
  253. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  254. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  255. package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
  256. package/dist/esm/bs-checkbox-skeleton.entry.js +18 -0
  257. package/dist/esm/bs-checkbox.entry.js +2 -2
  258. package/dist/esm/bs-composer-status-banner.entry.js +2 -2
  259. package/dist/esm/bs-composer.entry.js +2 -2
  260. package/dist/esm/bs-data-table.entry.js +3 -3
  261. package/dist/esm/bs-dialog.entry.js +108 -0
  262. package/dist/esm/bs-icon-button.entry.js +2 -2
  263. package/dist/esm/bs-inline-tab.entry.js +2 -2
  264. package/dist/esm/bs-input.entry.js +24 -12
  265. package/dist/esm/bs-logo.entry.js +1 -1
  266. package/dist/esm/{bs-menu_2.entry.js → bs-menu-item.entry.js} +3 -15
  267. package/dist/esm/bs-menu.entry.js +15 -0
  268. package/dist/esm/bs-navigation-drawer-item.entry.js +3 -3
  269. package/dist/esm/bs-navigation-drawer.entry.js +8 -2
  270. package/dist/esm/bs-navigation-header.entry.js +2 -2
  271. package/dist/esm/bs-pagination.entry.js +83 -0
  272. package/dist/esm/bs-radio.entry.js +2 -2
  273. package/dist/esm/bs-slider.entry.js +2 -2
  274. package/dist/esm/bs-snackbar.entry.js +39 -0
  275. package/dist/esm/bs-source-link.entry.js +3 -3
  276. package/dist/esm/bs-stepper-step.entry.js +42 -0
  277. package/dist/esm/bs-stepper.entry.js +60 -0
  278. package/dist/esm/bs-switch.entry.js +2 -2
  279. package/dist/esm/bs-tab.entry.js +2 -2
  280. package/dist/esm/bs-tabs.entry.js +2 -2
  281. package/dist/esm/bs-tooltip.entry.js +2 -2
  282. package/dist/esm/{index-DST5-cTx.js → index-Do3l4of3.js} +1 -1
  283. package/dist/esm/loader.js +3 -3
  284. package/dist/types/components/bs-avatar/bs-avatar.d.ts +67 -0
  285. package/dist/types/components/bs-avatar/bs-avatar.stories.d.ts +20 -0
  286. package/dist/types/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.cmp.test.d.ts +1 -0
  287. package/dist/types/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.d.ts +44 -0
  288. package/dist/types/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.cmp.test.d.ts +1 -0
  289. package/dist/types/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.d.ts +69 -0
  290. package/dist/types/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.cmp.test.d.ts +1 -0
  291. package/dist/types/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.d.ts +45 -0
  292. package/dist/types/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.stories.d.ts +14 -0
  293. package/dist/types/components/bs-card/bs-card.d.ts +10 -1
  294. package/dist/types/components/bs-card/bs-card.stories.d.ts +1 -0
  295. package/dist/types/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.cmp.test.d.ts +1 -0
  296. package/dist/types/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.d.ts +36 -0
  297. package/dist/types/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.stories.d.ts +10 -0
  298. package/dist/types/components/bs-checkbox/bs-checkbox.stories.d.ts +1 -0
  299. package/dist/types/components/bs-dialog/bs-dialog.cmp.test.d.ts +1 -0
  300. package/dist/types/components/bs-dialog/bs-dialog.d.ts +74 -0
  301. package/dist/types/components/{bs-modal/bs-modal.stories.d.ts → bs-dialog/bs-dialog.stories.d.ts} +5 -3
  302. package/dist/types/components/bs-input/bs-input.d.ts +8 -1
  303. package/dist/types/components/bs-pagination/bs-pagination.cmp.test.d.ts +1 -0
  304. package/dist/types/components/bs-pagination/bs-pagination.d.ts +51 -0
  305. package/dist/types/components/bs-pagination/bs-pagination.stories.d.ts +14 -0
  306. package/dist/types/components/bs-snackbar/bs-snackbar.cmp.test.d.ts +1 -0
  307. package/dist/types/components/bs-snackbar/bs-snackbar.d.ts +51 -0
  308. package/dist/types/components/bs-snackbar/bs-snackbar.stories.d.ts +16 -0
  309. package/dist/types/components/bs-stepper/bs-stepper/bs-stepper.cmp.test.d.ts +1 -0
  310. package/dist/types/components/bs-stepper/bs-stepper/bs-stepper.d.ts +48 -0
  311. package/dist/types/components/bs-stepper/bs-stepper/bs-stepper.stories.d.ts +14 -0
  312. package/dist/types/components/bs-stepper/bs-stepper-step/bs-stepper-step.cmp.test.d.ts +1 -0
  313. package/dist/types/components/bs-stepper/bs-stepper-step/bs-stepper-step.d.ts +55 -0
  314. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.d.ts +13 -5
  315. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.d.ts +3 -0
  316. package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.d.ts +4 -0
  317. package/dist/types/components.d.ts +1431 -128
  318. package/package.json +1 -1
  319. package/dist/brandsync-wc/p-09aa03d1.entry.js +0 -1
  320. package/dist/brandsync-wc/p-1cf715aa.entry.js +0 -1
  321. package/dist/brandsync-wc/p-266f5dde.entry.js +0 -1
  322. package/dist/brandsync-wc/p-8ded1eb6.entry.js +0 -1
  323. package/dist/brandsync-wc/p-b289450a.entry.js +0 -1
  324. package/dist/brandsync-wc/p-b8a2f882.entry.js +0 -1
  325. package/dist/brandsync-wc/p-f04db1b0.entry.js +0 -1
  326. package/dist/cjs/bs-modal.cjs.entry.js +0 -69
  327. package/dist/collection/components/bs-modal/bs-modal.css +0 -66
  328. package/dist/collection/components/bs-modal/bs-modal.js +0 -198
  329. package/dist/collection/components/bs-modal/bs-modal.stories.js +0 -38
  330. package/dist/components/bs-modal.js +0 -1
  331. package/dist/esm/bs-modal.entry.js +0 -67
  332. package/dist/types/components/bs-modal/bs-modal.d.ts +0 -45
  333. /package/dist/types/components/{bs-modal/bs-modal.cmp.test.d.ts → bs-avatar/bs-avatar.cmp.test.d.ts} +0 -0
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @prop --bs-breadcrumb-gap: Gap between the separator icon and this crumb's own content. Aliased to --bs-spacing-50.
3
+ * @prop --bs-breadcrumb-separator-color: Separator icon color. Aliased to --bs-icon-default.
4
+ * @prop --bs-breadcrumb-color-default: Text color, non-current crumb. Aliased to --bs-text-muted.
5
+ * @prop --bs-breadcrumb-color-hover: Text color, non-current link crumb on hover/focus. Aliased to --bs-text-default.
6
+ * @prop --bs-breadcrumb-color-current: Text color, the current-page crumb. Aliased to --bs-text-default.
7
+ * @prop --bs-breadcrumb-font-size: Aliased to --bs-font-size-md.
8
+ * @prop --bs-breadcrumb-line-height: Aliased to --bs-line-height-body-md.
9
+ * @prop --bs-breadcrumb-font-size-sm: Font size at size="sm". Aliased to --bs-font-size-sm.
10
+ * @prop --bs-breadcrumb-line-height-sm: Line height at size="sm". Aliased to --bs-line-height-body-sm.
11
+ * @prop --bs-breadcrumb-font-weight-default: Font weight, non-current crumb. Aliased to --bs-font-weight-regular.
12
+ * @prop --bs-breadcrumb-font-weight-current: Font weight, the current-page crumb. Aliased to --bs-font-weight-semibold.
13
+ * @prop --bs-breadcrumb-focus-ring-color: Focus ring color for a link crumb. Aliased to --bs-border-neutral-focus.
14
+ * @prop --bs-breadcrumb-radius: Border radius for a link crumb's focus ring. Aliased to --bs-border-radius-50.
15
+ */
16
+ :host {
17
+ display: inline-flex;
18
+ align-items: center;
19
+
20
+ --bs-breadcrumb-gap: var(--bs-spacing-50);
21
+
22
+ --bs-breadcrumb-separator-color: var(--bs-icon-default);
23
+
24
+ --bs-breadcrumb-color-default: var(--bs-text-muted);
25
+ --bs-breadcrumb-color-hover: var(--bs-text-default);
26
+ --bs-breadcrumb-color-current: var(--bs-text-default);
27
+
28
+ --bs-breadcrumb-font-size: var(--bs-font-size-md);
29
+ --bs-breadcrumb-line-height: var(--bs-line-height-body-md);
30
+ --bs-breadcrumb-font-size-sm: var(--bs-font-size-sm);
31
+ --bs-breadcrumb-line-height-sm: var(--bs-line-height-body-sm);
32
+ --bs-breadcrumb-font-weight-default: var(--bs-font-weight-regular);
33
+ --bs-breadcrumb-font-weight-current: var(--bs-font-weight-semibold);
34
+
35
+ --bs-breadcrumb-focus-ring-color: var(--bs-border-neutral-focus);
36
+ --bs-breadcrumb-radius: var(--bs-border-radius-50);
37
+
38
+ gap: var(--bs-breadcrumb-gap);
39
+ font-family: inherit;
40
+ font-size: var(--bs-breadcrumb-font-size);
41
+ line-height: calc(var(--bs-breadcrumb-line-height) * 1px);
42
+ }
43
+
44
+ /* This crumb is visually first in the trail -- pure DOM position (not :first-of-type, which only
45
+ counts same-tag siblings and would wrongly also match a bs-breadcrumb immediately following a
46
+ bs-breadcrumb-overflow). See bs-breadcrumb-overflow.css for the identical rule. */
47
+ :host(:first-child) .bs-breadcrumb__separator {
48
+ display: none;
49
+ }
50
+
51
+ /* size="sm" scales font-size/line-height only -- the separator icon's pixel size is unchanged,
52
+ since Figma didn't specify a sm icon size (see the `size` prop's doc comment in bs-breadcrumb.tsx). */
53
+ :host([size='sm']) {
54
+ font-size: var(--bs-breadcrumb-font-size-sm);
55
+ line-height: calc(var(--bs-breadcrumb-line-height-sm) * 1px);
56
+ }
57
+
58
+ .bs-breadcrumb__separator {
59
+ display: inline-flex;
60
+ align-items: center;
61
+ justify-content: center;
62
+ width: 16px;
63
+ height: 16px;
64
+ flex-shrink: 0;
65
+ color: var(--bs-breadcrumb-separator-color);
66
+ }
67
+
68
+ .bs-breadcrumb__separator svg {
69
+ width: 16px;
70
+ height: 16px;
71
+ }
72
+
73
+ .bs-breadcrumb__link {
74
+ color: var(--bs-breadcrumb-color-default);
75
+ font-weight: var(--bs-breadcrumb-font-weight-default);
76
+ text-decoration: none;
77
+ border-radius: var(--bs-breadcrumb-radius);
78
+ transition: color var(--bs-duration-fast) var(--bs-easing-standard);
79
+ }
80
+
81
+ a.bs-breadcrumb__link:hover {
82
+ color: var(--bs-breadcrumb-color-hover);
83
+ }
84
+
85
+ a.bs-breadcrumb__link:focus-visible {
86
+ outline: 2px solid var(--bs-breadcrumb-focus-ring-color);
87
+ outline-offset: 2px;
88
+ }
89
+
90
+ .bs-breadcrumb__current {
91
+ color: var(--bs-breadcrumb-color-current);
92
+ font-weight: var(--bs-breadcrumb-font-weight-current);
93
+ }
@@ -0,0 +1,130 @@
1
+ import { Host, h } from "@stencil/core";
2
+ /**
3
+ * A single crumb within a `<bs-breadcrumbs>` trail: a leading separator icon plus either a link,
4
+ * plain text, or the current-page label, depending on `current`/`href`.
5
+ *
6
+ * Rendering follows the W3C ARIA Authoring Practices breadcrumb pattern
7
+ * (https://www.w3.org/WAI/ARIA/apg/patterns/breadcrumb/): the current page is marked
8
+ * `aria-current="page"` and is never a link -- this holds even when `href` is also set, unlike
9
+ * Carbon Design System's `cds-breadcrumb-item`, which allows a link on the current item.
10
+ *
11
+ * Sets `role="listitem"` on the host, mirroring Carbon's own `CDSBreadcrumbItem.connectedCallback()`
12
+ * -- since this is a custom-element child of a real `<ol>` rather than a real `<li>`, the
13
+ * accessibility tree needs this explicit role to preserve the list's semantics.
14
+ *
15
+ * ## When to use
16
+ * - As one crumb inside a `<bs-breadcrumbs>` trail.
17
+ *
18
+ * ## When not to use
19
+ * - Standalone, outside a `<bs-breadcrumbs>` wrapper -- its `<ol>`/`<nav>` context and
20
+ * first-child-aware separator hiding depend on that parent structure.
21
+ *
22
+ * @slot - Default slot: the crumb's label content/text.
23
+ * @part separator - The leading separator icon wrapper.
24
+ * @part link - The anchor (or, when there's no `href`, plain `<span>`) for a non-current crumb.
25
+ * @part current - The current-page text element.
26
+ */
27
+ // Note: this component's CSS Custom Properties (--bs-breadcrumb-*) are documented via @prop
28
+ // comments in bs-breadcrumb.css, not here -- see bs-tab.tsx's identical note.
29
+ export class BsBreadcrumb {
30
+ /** Destination for a non-current crumb. Ignored when `current` is true -- the current page is
31
+ * never a link, even if `href` is set (see the class JSDoc). */
32
+ href;
33
+ /** Whether this crumb is the current page. Renders as plain (non-link) text marked
34
+ * `aria-current="page"`, reflected as an attribute so consumers/CSS can target
35
+ * `bs-breadcrumb[current]`. */
36
+ current = false;
37
+ /** Size variant. Normally set automatically by a parent `<bs-breadcrumbs size="...">` -- the
38
+ * container propagates its own `size` as a JS property to every slotted `bs-breadcrumb`/
39
+ * `bs-breadcrumb-overflow` child (see `bs-breadcrumbs.tsx`'s `propagateSize`), since CSS custom
40
+ * properties can't carry an enum that switches rules on their own. Can also be set directly on a
41
+ * standalone crumb. `sm` scales down font-size/line-height only -- the separator icon's pixel
42
+ * size is unchanged, since Figma didn't specify a `sm` icon size and guessing one risked drifting
43
+ * off-brand. Reflected so consumers/CSS can target `bs-breadcrumb[size="sm"]`. */
44
+ size = 'md';
45
+ render() {
46
+ return (h(Host, { key: '631ab305f75d905c7e54facdc55348b84095530d', role: "listitem" }, h("span", { key: 'a84c1b0b123d5e930c27fc5a10e0bde66003e99b', part: "separator", class: "bs-breadcrumb__separator", "aria-hidden": "true" }, h(CaretRightIcon, { key: '540d161da72801edb9d308c2023da7dd76042912' })), this.current ? (h("span", { part: "current", class: "bs-breadcrumb__current", "aria-current": "page" }, h("slot", null))) : this.href ? (h("a", { part: "link", class: "bs-breadcrumb__link", href: this.href }, h("slot", null))) : (h("span", { part: "link", class: "bs-breadcrumb__link" }, h("slot", null)))));
47
+ }
48
+ static get is() { return "bs-breadcrumb"; }
49
+ static get encapsulation() { return "shadow"; }
50
+ static get originalStyleUrls() {
51
+ return {
52
+ "$": ["bs-breadcrumb.css"]
53
+ };
54
+ }
55
+ static get styleUrls() {
56
+ return {
57
+ "$": ["bs-breadcrumb.css"]
58
+ };
59
+ }
60
+ static get properties() {
61
+ return {
62
+ "href": {
63
+ "type": "string",
64
+ "mutable": false,
65
+ "complexType": {
66
+ "original": "string",
67
+ "resolved": "string",
68
+ "references": {}
69
+ },
70
+ "required": false,
71
+ "optional": true,
72
+ "docs": {
73
+ "tags": [],
74
+ "text": "Destination for a non-current crumb. Ignored when `current` is true -- the current page is\nnever a link, even if `href` is set (see the class JSDoc)."
75
+ },
76
+ "getter": false,
77
+ "setter": false,
78
+ "reflect": false,
79
+ "attribute": "href"
80
+ },
81
+ "current": {
82
+ "type": "boolean",
83
+ "mutable": false,
84
+ "complexType": {
85
+ "original": "boolean",
86
+ "resolved": "boolean",
87
+ "references": {}
88
+ },
89
+ "required": false,
90
+ "optional": false,
91
+ "docs": {
92
+ "tags": [],
93
+ "text": "Whether this crumb is the current page. Renders as plain (non-link) text marked\n`aria-current=\"page\"`, reflected as an attribute so consumers/CSS can target\n`bs-breadcrumb[current]`."
94
+ },
95
+ "getter": false,
96
+ "setter": false,
97
+ "reflect": true,
98
+ "attribute": "current",
99
+ "defaultValue": "false"
100
+ },
101
+ "size": {
102
+ "type": "string",
103
+ "mutable": false,
104
+ "complexType": {
105
+ "original": "BsBreadcrumbSize",
106
+ "resolved": "\"md\" | \"sm\"",
107
+ "references": {
108
+ "BsBreadcrumbSize": {
109
+ "location": "local",
110
+ "path": "/Users/vivka/brandsync-web-components/src/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.tsx",
111
+ "id": "src/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.tsx::BsBreadcrumbSize"
112
+ }
113
+ }
114
+ },
115
+ "required": false,
116
+ "optional": false,
117
+ "docs": {
118
+ "tags": [],
119
+ "text": "Size variant. Normally set automatically by a parent `<bs-breadcrumbs size=\"...\">` -- the\ncontainer propagates its own `size` as a JS property to every slotted `bs-breadcrumb`/\n`bs-breadcrumb-overflow` child (see `bs-breadcrumbs.tsx`'s `propagateSize`), since CSS custom\nproperties can't carry an enum that switches rules on their own. Can also be set directly on a\nstandalone crumb. `sm` scales down font-size/line-height only -- the separator icon's pixel\nsize is unchanged, since Figma didn't specify a `sm` icon size and guessing one risked drifting\noff-brand. Reflected so consumers/CSS can target `bs-breadcrumb[size=\"sm\"]`."
120
+ },
121
+ "getter": false,
122
+ "setter": false,
123
+ "reflect": true,
124
+ "attribute": "size",
125
+ "defaultValue": "'md'"
126
+ }
127
+ };
128
+ }
129
+ }
130
+ const CaretRightIcon = () => (h("svg", { viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M6 3L11 8L6 13", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" })));
@@ -0,0 +1,118 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ const items = [
3
+ { label: 'Products', href: '/products' },
4
+ { label: 'Category', href: '/products/category' },
5
+ ];
6
+ describe('bs-breadcrumb-overflow', () => {
7
+ it('sets role="listitem" on the host', async () => {
8
+ const { root } = await render(h("bs-breadcrumb-overflow", { items: items }));
9
+ expect(root).toEqualAttribute('role', 'listitem');
10
+ });
11
+ it('is a real button with aria-haspopup="menu" and starts closed', async () => {
12
+ const { root } = await render(h("bs-breadcrumb-overflow", { items: items }));
13
+ const ellipsis = root.shadowRoot.querySelector('[part="ellipsis"]');
14
+ expect(ellipsis).not.toBeNull();
15
+ expect(ellipsis.tagName).toBe('BUTTON');
16
+ expect(ellipsis).toEqualAttribute('aria-haspopup', 'menu');
17
+ expect(ellipsis).toEqualAttribute('aria-expanded', 'false');
18
+ expect(root.shadowRoot.querySelector('bs-menu')).toBeNull();
19
+ });
20
+ it('reflects the overflowLabel prop as the ellipsis button aria-label', async () => {
21
+ const { root } = await render(h("bs-breadcrumb-overflow", { items: items, overflowLabel: "See hidden crumbs" }));
22
+ const ellipsis = root.shadowRoot.querySelector('[part="ellipsis"]');
23
+ expect(ellipsis).toEqualAttribute('aria-label', 'See hidden crumbs');
24
+ });
25
+ it('clicking the ellipsis opens the popup with exactly the given items, in order', async () => {
26
+ const { root, waitForChanges } = await render(h("bs-breadcrumb-overflow", { items: items }));
27
+ const ellipsis = root.shadowRoot.querySelector('[part="ellipsis"]');
28
+ ellipsis.click();
29
+ await waitForChanges();
30
+ expect(ellipsis).toEqualAttribute('aria-expanded', 'true');
31
+ const menu = root.shadowRoot.querySelector('bs-menu');
32
+ expect(menu).not.toBeNull();
33
+ const rows = menu.querySelectorAll('[part="link"]');
34
+ expect(rows.length).toBe(items.length);
35
+ rows.forEach((row, index) => {
36
+ expect(row.textContent.trim()).toBe(items[index].label);
37
+ });
38
+ });
39
+ it('renders an item with href as a real <a href>, not a bs-menu-item/button', async () => {
40
+ const { root, waitForChanges } = await render(h("bs-breadcrumb-overflow", { items: items }));
41
+ const ellipsis = root.shadowRoot.querySelector('[part="ellipsis"]');
42
+ ellipsis.click();
43
+ await waitForChanges();
44
+ const rows = root.shadowRoot.querySelectorAll('[part="link"]');
45
+ expect(rows[0].tagName).toBe('A');
46
+ expect(rows[0]).toEqualAttribute('href', items[0].href);
47
+ expect(root.shadowRoot.querySelector('bs-menu-item')).toBeNull();
48
+ expect(root.shadowRoot.querySelector('bs-menu button')).toBeNull();
49
+ });
50
+ it('renders an item without href as plain non-interactive text', async () => {
51
+ const noHrefItems = [{ label: 'No Link' }, { label: 'Category', href: '/products/category' }];
52
+ const { root, waitForChanges } = await render(h("bs-breadcrumb-overflow", { items: noHrefItems }));
53
+ const ellipsis = root.shadowRoot.querySelector('[part="ellipsis"]');
54
+ ellipsis.click();
55
+ await waitForChanges();
56
+ const rows = root.shadowRoot.querySelectorAll('[part="link"]');
57
+ expect(rows[0].tagName).toBe('SPAN');
58
+ expect(rows[0].hasAttribute('href')).toBe(false);
59
+ });
60
+ it('closes on Escape', async () => {
61
+ const { root, waitForChanges } = await render(h("bs-breadcrumb-overflow", { items: items }));
62
+ const ellipsis = root.shadowRoot.querySelector('[part="ellipsis"]');
63
+ ellipsis.click();
64
+ await waitForChanges();
65
+ expect(root.shadowRoot.querySelector('bs-menu')).not.toBeNull();
66
+ root.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true, composed: true }));
67
+ await waitForChanges();
68
+ expect(ellipsis).toEqualAttribute('aria-expanded', 'false');
69
+ expect(root.shadowRoot.querySelector('bs-menu')).toBeNull();
70
+ });
71
+ it('closes on focusout when relatedTarget is outside the host', async () => {
72
+ const { root, waitForChanges } = await render(h("bs-breadcrumb-overflow", { items: items }));
73
+ const ellipsis = root.shadowRoot.querySelector('[part="ellipsis"]');
74
+ ellipsis.click();
75
+ await waitForChanges();
76
+ const outside = document.createElement('div');
77
+ document.body.appendChild(outside);
78
+ root.dispatchEvent(new FocusEvent('focusout', { relatedTarget: outside, bubbles: true, composed: true }));
79
+ await waitForChanges();
80
+ expect(ellipsis).toEqualAttribute('aria-expanded', 'false');
81
+ expect(root.shadowRoot.querySelector('bs-menu')).toBeNull();
82
+ outside.remove();
83
+ });
84
+ it('does not close on focusout when relatedTarget is still inside the host', async () => {
85
+ const { root, waitForChanges } = await render(h("bs-breadcrumb-overflow", { items: items }));
86
+ const ellipsis = root.shadowRoot.querySelector('[part="ellipsis"]');
87
+ ellipsis.click();
88
+ await waitForChanges();
89
+ const insideLink = root.shadowRoot.querySelector('[part="link"]');
90
+ root.dispatchEvent(new FocusEvent('focusout', { relatedTarget: insideLink, bubbles: true, composed: true }));
91
+ await waitForChanges();
92
+ expect(ellipsis).toEqualAttribute('aria-expanded', 'true');
93
+ expect(root.shadowRoot.querySelector('bs-menu')).not.toBeNull();
94
+ });
95
+ describe('first-child separator hiding', () => {
96
+ it("hides its own separator when it is the first child, even alone", async () => {
97
+ const { root } = await render(h("bs-breadcrumb-overflow", { items: items }));
98
+ const separator = root.shadowRoot.querySelector('[part="separator"]');
99
+ expect(getComputedStyle(separator).display).toBe('none');
100
+ });
101
+ it('shows its separator when a bs-breadcrumb precedes it', async () => {
102
+ const { root } = await render(h("bs-breadcrumbs", null, h("bs-breadcrumb", { href: "/" }, "Home"), h("bs-breadcrumb-overflow", { items: items })));
103
+ const overflow = root.querySelector('bs-breadcrumb-overflow');
104
+ const separator = overflow.shadowRoot.querySelector('[part="separator"]');
105
+ expect(getComputedStyle(separator).display).not.toBe('none');
106
+ });
107
+ });
108
+ describe('size', () => {
109
+ it('defaults to "md" and reflects the attribute', async () => {
110
+ const { root } = await render(h("bs-breadcrumb-overflow", { items: items }));
111
+ expect(root).toEqualAttribute('size', 'md');
112
+ });
113
+ it('reflects a "sm" size', async () => {
114
+ const { root } = await render(h("bs-breadcrumb-overflow", { items: items, size: "sm" }));
115
+ expect(root).toEqualAttribute('size', 'sm');
116
+ });
117
+ });
118
+ });
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @prop --bs-breadcrumb-overflow-gap: Gap between the separator icon and the ellipsis, and the popup's offset below the button. Aliased to --bs-spacing-50.
3
+ * @prop --bs-breadcrumb-overflow-separator-color: Separator icon color. Aliased to --bs-icon-default.
4
+ * @prop --bs-breadcrumb-overflow-ellipsis-color: Ellipsis icon color. Aliased to --bs-icon-muted.
5
+ * @prop --bs-breadcrumb-overflow-radius: Border radius of each row in the popup. Aliased to --bs-border-radius-100.
6
+ * @prop --bs-breadcrumb-overflow-padding-y: Top/bottom padding of each row in the popup. Aliased to --bs-spacing-100.
7
+ * @prop --bs-breadcrumb-overflow-padding-x: Left/right padding of each row in the popup. Aliased to --bs-spacing-150.
8
+ * @prop --bs-breadcrumb-overflow-hover: Background color of a row in the popup on hover/focus. Aliased to --bs-color-neutral-container-hover.
9
+ * @prop --bs-breadcrumb-overflow-color: Text color of a row in the popup. Aliased to --bs-text-muted.
10
+ * @prop --bs-breadcrumb-overflow-font-size: Aliased to --bs-font-size-md.
11
+ * @prop --bs-breadcrumb-overflow-line-height: Aliased to --bs-line-height-body-md.
12
+ * @prop --bs-breadcrumb-overflow-font-size-sm: Popup row font size at size="sm". Aliased to --bs-font-size-sm.
13
+ * @prop --bs-breadcrumb-overflow-line-height-sm: Popup row line height at size="sm". Aliased to --bs-line-height-body-sm.
14
+ */
15
+ :host {
16
+ display: inline-flex;
17
+ align-items: center;
18
+
19
+ --bs-breadcrumb-overflow-gap: var(--bs-spacing-50);
20
+
21
+ --bs-breadcrumb-overflow-separator-color: var(--bs-icon-default);
22
+ --bs-breadcrumb-overflow-ellipsis-color: var(--bs-icon-muted);
23
+
24
+ --bs-breadcrumb-overflow-radius: var(--bs-border-radius-100);
25
+ --bs-breadcrumb-overflow-padding-y: var(--bs-spacing-100);
26
+ --bs-breadcrumb-overflow-padding-x: var(--bs-spacing-150);
27
+ --bs-breadcrumb-overflow-hover: var(--bs-color-neutral-container-hover);
28
+ --bs-breadcrumb-overflow-color: var(--bs-text-muted);
29
+ --bs-breadcrumb-overflow-font-size: var(--bs-font-size-md);
30
+ --bs-breadcrumb-overflow-line-height: var(--bs-line-height-body-md);
31
+ --bs-breadcrumb-overflow-font-size-sm: var(--bs-font-size-sm);
32
+ --bs-breadcrumb-overflow-line-height-sm: var(--bs-line-height-body-sm);
33
+
34
+ gap: var(--bs-breadcrumb-overflow-gap);
35
+ }
36
+
37
+ /* This element is visually first in the trail -- pure DOM position (not :first-of-type, which
38
+ only counts same-tag siblings and would wrongly fail to hide the separator when a bs-breadcrumb
39
+ is literally first and this element immediately follows it). See bs-breadcrumb.css for the
40
+ identical rule. */
41
+ :host(:first-child) .bs-breadcrumb-overflow__separator {
42
+ display: none;
43
+ }
44
+
45
+ /* size="sm" scales the popup rows' font-size/line-height only -- the separator/ellipsis icons'
46
+ pixel sizes are unchanged, matching bs-breadcrumb's identical sm rule. */
47
+ :host([size='sm']) .bs-breadcrumb-overflow__link {
48
+ font-size: var(--bs-breadcrumb-overflow-font-size-sm);
49
+ line-height: calc(var(--bs-breadcrumb-overflow-line-height-sm) * 1px);
50
+ }
51
+
52
+ .bs-breadcrumb-overflow__separator {
53
+ display: inline-flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ width: 16px;
57
+ height: 16px;
58
+ flex-shrink: 0;
59
+ color: var(--bs-breadcrumb-overflow-separator-color);
60
+ }
61
+
62
+ .bs-breadcrumb-overflow__separator svg {
63
+ width: 16px;
64
+ height: 16px;
65
+ }
66
+
67
+ .bs-breadcrumb-overflow__wrapper {
68
+ position: relative;
69
+ display: inline-flex;
70
+ }
71
+
72
+ .bs-breadcrumb-overflow__ellipsis {
73
+ display: inline-flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ width: 24px;
77
+ height: 24px;
78
+ flex-shrink: 0;
79
+ padding: 0;
80
+ border: none;
81
+ background: transparent;
82
+ cursor: pointer;
83
+ color: var(--bs-breadcrumb-overflow-ellipsis-color);
84
+ border-radius: var(--bs-breadcrumb-overflow-radius);
85
+ }
86
+
87
+ .bs-breadcrumb-overflow__ellipsis:focus-visible {
88
+ outline: 2px solid var(--bs-border-neutral-focus);
89
+ outline-offset: 2px;
90
+ }
91
+
92
+ .bs-breadcrumb-overflow__ellipsis svg {
93
+ width: 24px;
94
+ height: 24px;
95
+ }
96
+
97
+ .bs-breadcrumb-overflow__menu {
98
+ position: absolute;
99
+ top: calc(100% + var(--bs-breadcrumb-overflow-gap));
100
+ left: 0;
101
+ z-index: 1;
102
+ white-space: nowrap;
103
+ }
104
+
105
+ .bs-breadcrumb-overflow__link {
106
+ display: block;
107
+ box-sizing: border-box;
108
+ padding: var(--bs-breadcrumb-overflow-padding-y) var(--bs-breadcrumb-overflow-padding-x);
109
+ border-radius: var(--bs-breadcrumb-overflow-radius);
110
+ color: var(--bs-breadcrumb-overflow-color);
111
+ font-size: var(--bs-breadcrumb-overflow-font-size);
112
+ line-height: calc(var(--bs-breadcrumb-overflow-line-height) * 1px);
113
+ text-decoration: none;
114
+ transition: background-color var(--bs-duration-fast) var(--bs-easing-standard);
115
+ }
116
+
117
+ a.bs-breadcrumb-overflow__link:hover,
118
+ a.bs-breadcrumb-overflow__link:focus-visible {
119
+ background: var(--bs-breadcrumb-overflow-hover);
120
+ }
121
+
122
+ a.bs-breadcrumb-overflow__link:focus-visible {
123
+ outline: 2px solid var(--bs-border-neutral-focus);
124
+ outline-offset: -2px;
125
+ }
@@ -0,0 +1,192 @@
1
+ import { Host, h } from "@stencil/core";
2
+ /**
3
+ * A manually-placed collapsed-items disclosure for a `<bs-breadcrumbs>` trail: a leading separator
4
+ * plus an icon-only ellipsis button that reveals a `bs-menu` popup listing every hidden crumb.
5
+ *
6
+ * `items` is JS-property-only -- must be set as a JS property (`el.items = [...]`), not an HTML
7
+ * attribute, since attributes can only carry strings. See CONVENTIONS.md.
8
+ *
9
+ * Unlike an earlier `bs-breadcrumbs`-owned automatic `maxItems` collapse, this component does no
10
+ * collapsing logic itself -- the consumer decides which crumbs to hide and places this element
11
+ * wherever they want the disclosure, exactly matching Carbon Design System's own approach (Carbon
12
+ * doesn't auto-collapse breadcrumbs either; a consumer there manually decides what's visible).
13
+ *
14
+ * Hidden items with an `href` render as real `<a href>` rows inside the popup, not `bs-menu-item`
15
+ * (which renders a `<button>`) -- this matters because consuming apps commonly use client-side
16
+ * routers that intercept clicks on real `<a>` tags to do `preventDefault` + push-state navigation.
17
+ * Rendering hidden links any other way (e.g. `window.location`) would silently break client-side
18
+ * routing for hidden crumbs while working fine for visible ones. Hidden items without an `href`
19
+ * render as plain non-interactive text, matching how `bs-breadcrumb` itself handles link vs.
20
+ * no-link crumbs.
21
+ *
22
+ * Sets `role="listitem"` on the host, mirroring Carbon's own `CDSBreadcrumbItem.connectedCallback()`
23
+ * -- since this is a custom-element child of a real `<ol>` rather than a real `<li>`, the
24
+ * accessibility tree needs this explicit role to preserve the list's semantics.
25
+ *
26
+ * ## When to use
27
+ * - Inside a `<bs-breadcrumbs>` trail, wherever the consumer wants an interactive disclosure for
28
+ * crumbs they've chosen not to render directly.
29
+ *
30
+ * ## When not to use
31
+ * - As an automatic collapsing mechanism -- there is none; the consumer decides what's hidden.
32
+ *
33
+ * @slot - None: `items` fully drives the popup's contents.
34
+ * @part separator - The leading separator icon wrapper.
35
+ * @part ellipsis - The icon-only disclosure button.
36
+ * @part menu - The `bs-menu` popup revealed by the ellipsis button.
37
+ * @part link - Each anchor/span row inside the popup.
38
+ */
39
+ // Note: this component's CSS Custom Properties (--bs-breadcrumb-overflow-*) are documented via
40
+ // @prop comments in bs-breadcrumb-overflow.css, not here -- see bs-tab.tsx's identical note.
41
+ export class BsBreadcrumbOverflow {
42
+ el;
43
+ /** Array prop -- must be set as a JS property (`el.items = [...]`), not an HTML attribute, since
44
+ * attributes can only carry strings. See CONVENTIONS.md. The hidden crumbs reachable via this
45
+ * disclosure -- no collapsing logic here, the consumer decides what goes in this list. */
46
+ items = [];
47
+ /** Accessible name (`aria-label`) for the icon-only ellipsis trigger button. */
48
+ overflowLabel = 'Show hidden breadcrumbs';
49
+ /** Size variant. Normally set automatically by a parent `<bs-breadcrumbs size="...">` -- see
50
+ * `bs-breadcrumb`'s identical `size` prop doc comment for why this is propagated as a JS
51
+ * property rather than inherited via CSS. Scales the popup rows' font-size/line-height only; the
52
+ * separator/ellipsis icons' pixel sizes are unchanged. Reflected so consumers/CSS can target
53
+ * `bs-breadcrumb-overflow[size="sm"]`. */
54
+ size = 'md';
55
+ /** Whether the overflow popup is open. */
56
+ open = false;
57
+ onEllipsisToggle = () => {
58
+ this.open = !this.open;
59
+ };
60
+ /** Closes the overflow popup on Escape, from anywhere within the component -- host is the
61
+ * default @Listen target, so this fires whether focus is on the ellipsis button itself or on a
62
+ * link inside the popup. Mirrors `bs-input`'s `type="dropdown"` `onHostKeydown`. */
63
+ onHostKeydown(ev) {
64
+ if (this.open && ev.key === 'Escape') {
65
+ this.open = false;
66
+ }
67
+ }
68
+ /** Closes the overflow popup once focus leaves the component entirely (e.g. Tab away, or a click
69
+ * outside that moves focus elsewhere) -- `focusout` is composed, so it bubbles across the
70
+ * `bs-menu` shadow boundary too. Mirrors `bs-input`'s `type="dropdown"` `onHostFocusOut`. */
71
+ onHostFocusOut(ev) {
72
+ if (!this.open)
73
+ return;
74
+ const related = ev.relatedTarget;
75
+ if (!related || !this.el.contains(related)) {
76
+ this.open = false;
77
+ }
78
+ }
79
+ render() {
80
+ return (h(Host, { key: 'a688f0759da177fa76c44694f2c55966e08f609d', role: "listitem" }, h("span", { key: '9c40bec2a10521160ee99889e083b0131d26020c', part: "separator", class: "bs-breadcrumb-overflow__separator", "aria-hidden": "true" }, h(CaretRightIcon, { key: '936d785bfcfd6b4f857bff8471ab92a292503208' })), h("span", { key: '2cc66274a1b0d58a1532d53784eeeef2dd94586e', class: "bs-breadcrumb-overflow__wrapper" }, h("button", { key: 'ffcd37213c27ae6286a8b258b58ad1197e9bee3e', type: "button", part: "ellipsis", class: "bs-breadcrumb-overflow__ellipsis", "aria-haspopup": "menu", "aria-expanded": String(this.open), "aria-label": this.overflowLabel, onClick: this.onEllipsisToggle }, h(DotsThreeIcon, { key: '381db917ca9bd23b794e7bf57364a7743e60da26' })), this.open && this.items.length > 0 && (h("bs-menu", { key: 'f41bd68b27971f7dcb3ab1f5af82dc7ed8373a6c', part: "menu", class: "bs-breadcrumb-overflow__menu" }, this.items.map(item => item.href ? (h("a", { part: "link", class: "bs-breadcrumb-overflow__link", href: item.href }, item.label)) : (h("span", { part: "link", class: "bs-breadcrumb-overflow__link" }, item.label))))))));
81
+ }
82
+ static get is() { return "bs-breadcrumb-overflow"; }
83
+ static get encapsulation() { return "shadow"; }
84
+ static get originalStyleUrls() {
85
+ return {
86
+ "$": ["bs-breadcrumb-overflow.css"]
87
+ };
88
+ }
89
+ static get styleUrls() {
90
+ return {
91
+ "$": ["bs-breadcrumb-overflow.css"]
92
+ };
93
+ }
94
+ static get properties() {
95
+ return {
96
+ "items": {
97
+ "type": "unknown",
98
+ "mutable": false,
99
+ "complexType": {
100
+ "original": "BsBreadcrumbOverflowItem[]",
101
+ "resolved": "BsBreadcrumbOverflowItem[]",
102
+ "references": {
103
+ "BsBreadcrumbOverflowItem": {
104
+ "location": "local",
105
+ "path": "/Users/vivka/brandsync-web-components/src/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.tsx",
106
+ "id": "src/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.tsx::BsBreadcrumbOverflowItem"
107
+ }
108
+ }
109
+ },
110
+ "required": false,
111
+ "optional": false,
112
+ "docs": {
113
+ "tags": [],
114
+ "text": "Array prop -- must be set as a JS property (`el.items = [...]`), not an HTML attribute, since\nattributes can only carry strings. See CONVENTIONS.md. The hidden crumbs reachable via this\ndisclosure -- no collapsing logic here, the consumer decides what goes in this list."
115
+ },
116
+ "getter": false,
117
+ "setter": false,
118
+ "defaultValue": "[]"
119
+ },
120
+ "overflowLabel": {
121
+ "type": "string",
122
+ "mutable": false,
123
+ "complexType": {
124
+ "original": "string",
125
+ "resolved": "string",
126
+ "references": {}
127
+ },
128
+ "required": false,
129
+ "optional": false,
130
+ "docs": {
131
+ "tags": [],
132
+ "text": "Accessible name (`aria-label`) for the icon-only ellipsis trigger button."
133
+ },
134
+ "getter": false,
135
+ "setter": false,
136
+ "reflect": false,
137
+ "attribute": "overflow-label",
138
+ "defaultValue": "'Show hidden breadcrumbs'"
139
+ },
140
+ "size": {
141
+ "type": "string",
142
+ "mutable": false,
143
+ "complexType": {
144
+ "original": "BsBreadcrumbSize",
145
+ "resolved": "\"md\" | \"sm\"",
146
+ "references": {
147
+ "BsBreadcrumbSize": {
148
+ "location": "import",
149
+ "path": "../bs-breadcrumb/bs-breadcrumb",
150
+ "id": "src/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.tsx::BsBreadcrumbSize",
151
+ "referenceLocation": "BsBreadcrumbSize"
152
+ }
153
+ }
154
+ },
155
+ "required": false,
156
+ "optional": false,
157
+ "docs": {
158
+ "tags": [],
159
+ "text": "Size variant. Normally set automatically by a parent `<bs-breadcrumbs size=\"...\">` -- see\n`bs-breadcrumb`'s identical `size` prop doc comment for why this is propagated as a JS\nproperty rather than inherited via CSS. Scales the popup rows' font-size/line-height only; the\nseparator/ellipsis icons' pixel sizes are unchanged. Reflected so consumers/CSS can target\n`bs-breadcrumb-overflow[size=\"sm\"]`."
160
+ },
161
+ "getter": false,
162
+ "setter": false,
163
+ "reflect": true,
164
+ "attribute": "size",
165
+ "defaultValue": "'md'"
166
+ }
167
+ };
168
+ }
169
+ static get states() {
170
+ return {
171
+ "open": {}
172
+ };
173
+ }
174
+ static get elementRef() { return "el"; }
175
+ static get listeners() {
176
+ return [{
177
+ "name": "keydown",
178
+ "method": "onHostKeydown",
179
+ "target": undefined,
180
+ "capture": false,
181
+ "passive": false
182
+ }, {
183
+ "name": "focusout",
184
+ "method": "onHostFocusOut",
185
+ "target": undefined,
186
+ "capture": false,
187
+ "passive": false
188
+ }];
189
+ }
190
+ }
191
+ const CaretRightIcon = () => (h("svg", { viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M6 3L11 8L6 13", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" })));
192
+ const DotsThreeIcon = () => (h("svg", { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { fill: "currentColor", d: "M12 13.125C12.6213 13.125 13.125 12.6213 13.125 12C13.125 11.3787 12.6213 10.875 12 10.875C11.3787 10.875 10.875 11.3787 10.875 12C10.875 12.6213 11.3787 13.125 12 13.125Z" }), h("path", { fill: "currentColor", d: "M18.375 13.125C18.9963 13.125 19.5 12.6213 19.5 12C19.5 11.3787 18.9963 10.875 18.375 10.875C17.7537 10.875 17.25 11.3787 17.25 12C17.25 12.6213 17.7537 13.125 18.375 13.125Z" }), h("path", { fill: "currentColor", d: "M5.625 13.125C6.24632 13.125 6.75 12.6213 6.75 12C6.75 11.3787 6.24632 10.875 5.625 10.875C5.00368 10.875 4.5 11.3787 4.5 12C4.5 12.6213 5.00368 13.125 5.625 13.125Z" })));