@brandsync/wc 1.6.0 → 1.7.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 (267) hide show
  1. package/custom-elements.json +1122 -98
  2. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  3. package/dist/brandsync-wc/{p-44bfdd4b.entry.js → p-06e9b45d.entry.js} +1 -1
  4. package/dist/brandsync-wc/p-0d86c22d.entry.js +1 -0
  5. package/dist/brandsync-wc/{p-e2ac61c4.entry.js → p-13e4966c.entry.js} +1 -1
  6. package/dist/brandsync-wc/{p-18c59979.entry.js → p-18021c05.entry.js} +1 -1
  7. package/dist/brandsync-wc/{p-cfb49342.entry.js → p-1c8160c2.entry.js} +1 -1
  8. package/dist/brandsync-wc/{p-00f733ef.entry.js → p-21c14465.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-6d0c054b.entry.js → p-27100489.entry.js} +1 -1
  10. package/dist/brandsync-wc/{p-639946e7.entry.js → p-2d6955d6.entry.js} +1 -1
  11. package/dist/brandsync-wc/{p-3ed5b215.entry.js → p-309f920e.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-fcd4ec60.entry.js → p-30d6a6d0.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-57e1dc35.entry.js → p-3eab22a5.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-57609703.entry.js → p-4b0938a5.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-512dafc6.entry.js → p-5312b6a5.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-9fb8848c.entry.js → p-538cc08e.entry.js} +1 -1
  17. package/dist/brandsync-wc/p-55e6438c.entry.js +1 -0
  18. package/dist/brandsync-wc/{p-a8cdf449.entry.js → p-600b5434.entry.js} +1 -1
  19. package/dist/brandsync-wc/p-61db6ce2.entry.js +1 -0
  20. package/dist/brandsync-wc/{p-ef68f29b.entry.js → p-70e035ed.entry.js} +1 -1
  21. package/dist/brandsync-wc/{p-0aca5f0e.entry.js → p-77433277.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-f714683d.entry.js → p-777a9dbf.entry.js} +1 -1
  23. package/dist/brandsync-wc/p-7ed5670e.entry.js +1 -0
  24. package/dist/brandsync-wc/{p-e35249c4.entry.js → p-819a3dae.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-11224cab.entry.js → p-85c70f6d.entry.js} +1 -1
  26. package/dist/brandsync-wc/{p-525504c2.entry.js → p-8b2ab522.entry.js} +1 -1
  27. package/dist/brandsync-wc/{p-abda1d69.entry.js → p-8b57f606.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-a603a13a.entry.js → p-9c1be2a0.entry.js} +1 -1
  29. package/dist/brandsync-wc/{p-604553a0.entry.js → p-a36a0e6a.entry.js} +1 -1
  30. package/dist/brandsync-wc/{p-3cb58df8.entry.js → p-b0634051.entry.js} +1 -1
  31. package/dist/brandsync-wc/{p-7b9598d9.entry.js → p-b2dc9886.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-413a1ee0.entry.js → p-bcee3d60.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-a3a4d541.entry.js → p-be14f99f.entry.js} +1 -1
  34. package/dist/brandsync-wc/{p-52d5f6a9.entry.js → p-c197cc95.entry.js} +1 -1
  35. package/dist/brandsync-wc/{p-9b72cc12.entry.js → p-c3a28a89.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-43617f2e.entry.js → p-d06543a5.entry.js} +1 -1
  37. package/dist/brandsync-wc/{p-c5011746.entry.js → p-d25b7b74.entry.js} +1 -1
  38. package/dist/brandsync-wc/{p-bb77098b.entry.js → p-e1069ba9.entry.js} +1 -1
  39. package/dist/brandsync-wc/p-e427bbda.entry.js +1 -0
  40. package/dist/brandsync-wc/{p-bb68e236.entry.js → p-e61efe4d.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-6c769a1d.entry.js → p-f14bda01.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-c054f493.entry.js → p-f243683f.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-7609221f.entry.js → p-f518f486.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-98021881.entry.js → p-f8f03334.entry.js} +1 -1
  45. package/dist/brandsync-wc/{p-a8e2a2b2.entry.js → p-fba01c96.entry.js} +1 -1
  46. package/dist/brandsync-wc/{p-db46376b.entry.js → p-fde5e9f1.entry.js} +1 -1
  47. package/dist/cjs/brandsync-wc.cjs.js +1 -1
  48. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +1 -1
  49. package/dist/cjs/bs-ai-greeting.cjs.entry.js +1 -1
  50. package/dist/cjs/bs-ai-thinking.cjs.entry.js +1 -1
  51. package/dist/cjs/bs-attachment-list.cjs.entry.js +1 -1
  52. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +1 -1
  53. package/dist/cjs/bs-button-skeleton.cjs.entry.js +1 -1
  54. package/dist/cjs/bs-carousel.cjs.entry.js +196 -0
  55. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +1 -1
  56. package/dist/cjs/bs-chatbot-header.cjs.entry.js +1 -1
  57. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +1 -1
  58. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +1 -1
  59. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +1 -1
  60. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +1 -1
  61. package/dist/cjs/bs-checkbox.cjs.entry.js +1 -1
  62. package/dist/cjs/bs-chip-filter.cjs.entry.js +1 -1
  63. package/dist/cjs/bs-chip-informative.cjs.entry.js +1 -1
  64. package/dist/cjs/bs-chip-input.cjs.entry.js +1 -1
  65. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +1 -1
  66. package/dist/cjs/bs-composer.cjs.entry.js +1 -1
  67. package/dist/cjs/bs-data-table.cjs.entry.js +2 -2
  68. package/dist/cjs/bs-file-upload-item.cjs.entry.js +85 -0
  69. package/dist/cjs/bs-file-upload.cjs.entry.js +110 -0
  70. package/dist/cjs/bs-icon-button.cjs.entry.js +1 -1
  71. package/dist/cjs/bs-inline-tab.cjs.entry.js +1 -1
  72. package/dist/cjs/bs-input.cjs.entry.js +2 -2
  73. package/dist/cjs/bs-menu-item.cjs.entry.js +1 -1
  74. package/dist/cjs/bs-menu.cjs.entry.js +1 -1
  75. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +1 -1
  76. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +1 -1
  77. package/dist/cjs/bs-navigation-header.cjs.entry.js +1 -1
  78. package/dist/cjs/bs-pagination.cjs.entry.js +1 -1
  79. package/dist/cjs/bs-progress-linear.cjs.entry.js +7 -2
  80. package/dist/cjs/bs-progress.cjs.entry.js +2 -2
  81. package/dist/cjs/bs-radio.cjs.entry.js +1 -1
  82. package/dist/cjs/bs-slider.cjs.entry.js +1 -1
  83. package/dist/cjs/bs-snackbar.cjs.entry.js +1 -1
  84. package/dist/cjs/bs-source-link.cjs.entry.js +2 -2
  85. package/dist/cjs/bs-stepper-step.cjs.entry.js +1 -1
  86. package/dist/cjs/bs-stepper.cjs.entry.js +1 -1
  87. package/dist/cjs/bs-switch.cjs.entry.js +1 -1
  88. package/dist/cjs/bs-tab.cjs.entry.js +1 -1
  89. package/dist/cjs/bs-tabs.cjs.entry.js +1 -1
  90. package/dist/cjs/bs-toast.cjs.entry.js +1 -1
  91. package/dist/cjs/bs-tooltip.cjs.entry.js +1 -1
  92. package/dist/cjs/loader.cjs.js +1 -1
  93. package/dist/collection/collection-manifest.json +3 -0
  94. package/dist/collection/components/bs-accordion/bs-accordion.cmp.test.js +5 -0
  95. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  96. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  97. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  98. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  99. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  100. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +1 -1
  101. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  102. package/dist/collection/components/bs-carousel/bs-carousel.cmp.test.js +198 -0
  103. package/dist/collection/components/bs-carousel/bs-carousel.css +107 -0
  104. package/dist/collection/components/bs-carousel/bs-carousel.js +531 -0
  105. package/dist/collection/components/bs-carousel/bs-carousel.stories.js +68 -0
  106. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  107. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  108. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  109. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  110. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  111. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  112. package/dist/collection/components/bs-checkbox/bs-checkbox.js +1 -1
  113. package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.js +1 -1
  114. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.js +1 -1
  115. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.js +1 -1
  116. package/dist/collection/components/bs-composer/bs-composer.js +1 -1
  117. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +1 -1
  118. package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
  119. package/dist/collection/components/bs-file-upload/bs-file-upload.cmp.test.js +119 -0
  120. package/dist/collection/components/bs-file-upload/bs-file-upload.css +139 -0
  121. package/dist/collection/components/bs-file-upload/bs-file-upload.js +342 -0
  122. package/dist/collection/components/bs-file-upload/bs-file-upload.stories.js +116 -0
  123. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.cmp.test.js +115 -0
  124. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.css +154 -0
  125. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +329 -0
  126. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.stories.js +54 -0
  127. package/dist/collection/components/bs-input/bs-input.js +2 -2
  128. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  129. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  130. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  131. package/dist/collection/components/bs-progress/bs-progress.js +2 -2
  132. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +27 -2
  133. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  134. package/dist/collection/components/bs-slider/bs-slider.js +1 -1
  135. package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
  136. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  137. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  138. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  139. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  140. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  141. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  142. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  143. package/dist/collection/components/bs-toast/bs-toast.js +1 -1
  144. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  145. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +1 -1
  146. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  147. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  148. package/dist/collection/test/helpers/conventions.js +46 -0
  149. package/dist/collection/test/helpers/conventions.unit.test.js +38 -0
  150. package/dist/components/bs-ai-disclaimer.js +1 -1
  151. package/dist/components/bs-ai-greeting.js +1 -1
  152. package/dist/components/bs-ai-thinking.js +1 -1
  153. package/dist/components/bs-attachment-list.js +1 -1
  154. package/dist/components/bs-attachment.js +1 -1
  155. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  156. package/dist/components/bs-breadcrumbs.js +1 -1
  157. package/dist/components/bs-button-skeleton.js +1 -1
  158. package/dist/components/bs-carousel.d.ts +11 -0
  159. package/dist/components/bs-carousel.js +1 -0
  160. package/dist/components/bs-chatbot-feedback.js +1 -1
  161. package/dist/components/bs-chatbot-header.js +1 -1
  162. package/dist/components/bs-chatbot-response-action.js +1 -1
  163. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  164. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  165. package/dist/components/bs-checkbox-skeleton.js +1 -1
  166. package/dist/components/bs-checkbox.js +1 -1
  167. package/dist/components/bs-chip-filter.js +1 -1
  168. package/dist/components/bs-chip-informative.js +1 -1
  169. package/dist/components/bs-chip-input.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-dialog.js +1 -1
  174. package/dist/components/bs-file-upload-item.d.ts +11 -0
  175. package/dist/components/bs-file-upload-item.js +1 -0
  176. package/dist/components/bs-file-upload.d.ts +11 -0
  177. package/dist/components/bs-file-upload.js +1 -0
  178. package/dist/components/bs-icon-button.js +1 -1
  179. package/dist/components/bs-inline-tab.js +1 -1
  180. package/dist/components/bs-input.js +1 -1
  181. package/dist/components/bs-menu-item.js +1 -1
  182. package/dist/components/bs-menu.js +1 -1
  183. package/dist/components/bs-navigation-drawer-item.js +1 -1
  184. package/dist/components/bs-navigation-drawer.js +1 -1
  185. package/dist/components/bs-navigation-header.js +1 -1
  186. package/dist/components/bs-pagination.js +1 -1
  187. package/dist/components/bs-progress-linear.js +1 -1
  188. package/dist/components/bs-progress.js +1 -1
  189. package/dist/components/bs-radio.js +1 -1
  190. package/dist/components/bs-slider.js +1 -1
  191. package/dist/components/bs-snackbar.js +1 -1
  192. package/dist/components/bs-source-link.js +1 -1
  193. package/dist/components/bs-stepper-step.js +1 -1
  194. package/dist/components/bs-stepper.js +1 -1
  195. package/dist/components/bs-switch.js +1 -1
  196. package/dist/components/bs-tab.js +1 -1
  197. package/dist/components/bs-tabs.js +1 -1
  198. package/dist/components/bs-toast.js +1 -1
  199. package/dist/components/bs-tooltip.js +1 -1
  200. package/dist/components/p-BxFJ74fI.js +1 -0
  201. package/dist/components/{p-DKMMCLxx.js → p-DI5GgSqL.js} +1 -1
  202. package/dist/components/{p-DIezWdNu.js → p-Dqt-Qp4W.js} +1 -1
  203. package/dist/components/p-Dx8gAOVC.js +1 -0
  204. package/dist/components/{p-B8eut73c.js → p-LYvoWZt4.js} +1 -1
  205. package/dist/components/{p-3gs695M6.js → p-v4T0qPVn.js} +1 -1
  206. package/dist/esm/brandsync-wc.js +1 -1
  207. package/dist/esm/bs-ai-disclaimer.entry.js +1 -1
  208. package/dist/esm/bs-ai-greeting.entry.js +1 -1
  209. package/dist/esm/bs-ai-thinking.entry.js +1 -1
  210. package/dist/esm/bs-attachment-list.entry.js +1 -1
  211. package/dist/esm/bs-breadcrumbs.entry.js +1 -1
  212. package/dist/esm/bs-button-skeleton.entry.js +1 -1
  213. package/dist/esm/bs-carousel.entry.js +194 -0
  214. package/dist/esm/bs-chatbot-feedback.entry.js +1 -1
  215. package/dist/esm/bs-chatbot-header.entry.js +1 -1
  216. package/dist/esm/bs-chatbot-response-action.entry.js +1 -1
  217. package/dist/esm/bs-chatbot-sources-drawer.entry.js +1 -1
  218. package/dist/esm/bs-chatbot-suggestion-button.entry.js +1 -1
  219. package/dist/esm/bs-checkbox-skeleton.entry.js +1 -1
  220. package/dist/esm/bs-checkbox.entry.js +1 -1
  221. package/dist/esm/bs-chip-filter.entry.js +1 -1
  222. package/dist/esm/bs-chip-informative.entry.js +1 -1
  223. package/dist/esm/bs-chip-input.entry.js +1 -1
  224. package/dist/esm/bs-composer-status-banner.entry.js +1 -1
  225. package/dist/esm/bs-composer.entry.js +1 -1
  226. package/dist/esm/bs-data-table.entry.js +2 -2
  227. package/dist/esm/bs-file-upload-item.entry.js +83 -0
  228. package/dist/esm/bs-file-upload.entry.js +108 -0
  229. package/dist/esm/bs-icon-button.entry.js +1 -1
  230. package/dist/esm/bs-inline-tab.entry.js +1 -1
  231. package/dist/esm/bs-input.entry.js +2 -2
  232. package/dist/esm/bs-menu-item.entry.js +1 -1
  233. package/dist/esm/bs-menu.entry.js +1 -1
  234. package/dist/esm/bs-navigation-drawer-item.entry.js +1 -1
  235. package/dist/esm/bs-navigation-drawer.entry.js +1 -1
  236. package/dist/esm/bs-navigation-header.entry.js +1 -1
  237. package/dist/esm/bs-pagination.entry.js +1 -1
  238. package/dist/esm/bs-progress-linear.entry.js +7 -2
  239. package/dist/esm/bs-progress.entry.js +2 -2
  240. package/dist/esm/bs-radio.entry.js +1 -1
  241. package/dist/esm/bs-slider.entry.js +1 -1
  242. package/dist/esm/bs-snackbar.entry.js +1 -1
  243. package/dist/esm/bs-source-link.entry.js +2 -2
  244. package/dist/esm/bs-stepper-step.entry.js +1 -1
  245. package/dist/esm/bs-stepper.entry.js +1 -1
  246. package/dist/esm/bs-switch.entry.js +1 -1
  247. package/dist/esm/bs-tab.entry.js +1 -1
  248. package/dist/esm/bs-tabs.entry.js +1 -1
  249. package/dist/esm/bs-toast.entry.js +1 -1
  250. package/dist/esm/bs-tooltip.entry.js +1 -1
  251. package/dist/esm/loader.js +1 -1
  252. package/dist/types/components/bs-carousel/bs-carousel.cmp.test.d.ts +1 -0
  253. package/dist/types/components/bs-carousel/bs-carousel.d.ts +101 -0
  254. package/dist/types/components/bs-carousel/bs-carousel.stories.d.ts +17 -0
  255. package/dist/types/components/bs-file-upload/bs-file-upload.cmp.test.d.ts +1 -0
  256. package/dist/types/components/bs-file-upload/bs-file-upload.d.ts +59 -0
  257. package/dist/types/components/bs-file-upload/bs-file-upload.stories.d.ts +21 -0
  258. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.cmp.test.d.ts +1 -0
  259. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.d.ts +58 -0
  260. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.stories.d.ts +18 -0
  261. package/dist/types/components/bs-progress-linear/bs-progress-linear.d.ts +5 -0
  262. package/dist/types/components.d.ts +594 -0
  263. package/dist/types/test/helpers/conventions.d.ts +21 -0
  264. package/dist/types/test/helpers/conventions.unit.test.d.ts +1 -0
  265. package/package.json +2 -1
  266. package/dist/brandsync-wc/p-6bf8a5bd.entry.js +0 -1
  267. package/dist/brandsync-wc/p-fe778b6b.entry.js +0 -1
@@ -43,7 +43,7 @@ const BsStepper = class {
43
43
  });
44
44
  }
45
45
  render() {
46
- return index.h("slot", { key: 'b2c5468b93468b4cab41afb39364bb9f84eea22f', onSlotchange: this.onSlotChange });
46
+ return index.h("slot", { key: '5e707b38009031a71566e20ec8b9d1df55462e27', onSlotchange: this.onSlotChange });
47
47
  }
48
48
  static get watchers() { return {
49
49
  "currentStep": [{
@@ -48,7 +48,7 @@ const BsSwitch = class {
48
48
  const knobClasses = ['bs-switch__knob', `bs-switch__knob--${this.size}`, this.disabled ? 'bs-switch__knob--disabled' : '']
49
49
  .filter(Boolean)
50
50
  .join(' ');
51
- return (index.h("label", { key: 'd14520f82e184fed9405b5e03ff448650b3d90c8', class: `bs-switch ${this.disabled ? 'bs-switch--disabled' : ''}` }, index.h("input", { key: '955e57c616ab4a9af52ef344cbc881965ae416fd', class: "bs-switch__input", type: "checkbox", role: "switch", checked: this.checked, disabled: this.disabled, "aria-checked": String(this.checked), "aria-label": this.ariaLabel, onChange: this.onChange }), index.h("span", { key: '4b936b1a6d57e2e571f257ee87d82a786137e568', part: "track", class: trackClasses }, index.h("span", { key: '0a9ae24240823947be1f179d1218f4382507143c', part: "knob", class: knobClasses })), index.h("span", { key: '8750083e783f61164c383cf54bdf4b7a3d881e9c', part: "label", class: "bs-switch__label" }, index.h("slot", { key: '320cad772ce9efe18c3c30cabcb258326036e32b' }))));
51
+ return (index.h("label", { key: 'b726eda9fd90c67368ff44f288d39a80516ac68c', class: `bs-switch ${this.disabled ? 'bs-switch--disabled' : ''}` }, index.h("input", { key: 'ff95ba83169aae65ec57068f2b461b23fe344903', class: "bs-switch__input", type: "checkbox", role: "switch", checked: this.checked, disabled: this.disabled, "aria-checked": String(this.checked), "aria-label": this.ariaLabel, onChange: this.onChange }), index.h("span", { key: 'e09834a43eb922bcf973b880da3baa1694389ca0', part: "track", class: trackClasses }, index.h("span", { key: 'dc6c409faddb65511847a941331926ae736ce9ec', part: "knob", class: knobClasses })), index.h("span", { key: '2943c9fb029632360d21aaaa544d7674322cafc6', part: "label", class: "bs-switch__label" }, index.h("slot", { key: '55ef83bfb72ed4b463b854eff1fd9472048dcfc4' }))));
52
52
  }
53
53
  static get delegatesFocus() { return true; }
54
54
  };
@@ -72,7 +72,7 @@ const BsTab = class {
72
72
  const iconOnly = this.hasIcon && !this.hasLabel;
73
73
  const vertical = this.hasIcon && this.hasLabel && this.iconPosition === 'top';
74
74
  const showBadge = this.hasBadge && !iconOnly && !vertical;
75
- return (index.h("button", { key: '44461677d403c17f9620ed3b873c03423278a8fe', type: "button", part: "tab", role: "tab", class: `bs-tab ${this.selected ? 'bs-tab--selected' : ''} ${this.disabled ? 'bs-tab--disabled' : ''} ${iconOnly ? 'bs-tab--icon-only' : ''} ${vertical ? 'bs-tab--vertical' : ''}`, disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel, onClick: this.onClick }, index.h("span", { key: '4090ea19a107552b3d2b4ab218b182df3c21c3fd', part: "icon", class: `bs-tab__icon ${this.hasIcon ? 'bs-tab__icon--has-content' : ''}` }, index.h("slot", { key: '0f350012f0c19cb4f7729ca477b6e5f8d2b6e535', name: "icon", onSlotchange: this.onIconSlotchange })), index.h("span", { key: '3abe39744a5b972921a3c45005d44b69b3087302', part: "label", class: `bs-tab__label ${this.hasLabel ? 'bs-tab__label--has-content' : ''}` }, index.h("slot", { key: 'afe75dc14e75691b6255f99e04ba9bd183b29482', onSlotchange: this.onLabelSlotchange })), index.h("span", { key: 'c39a77802a099ba26327dcd4115c2cbcf10fdd3a', part: "badge", class: `bs-tab__badge ${showBadge ? 'bs-tab__badge--has-content' : ''}` }, index.h("slot", { key: 'b3807d61b9dec5e46ed591642b42ab0039971103', name: "badge", onSlotchange: this.onBadgeSlotchange })), index.h("span", { key: '07901fbc8d0e7c1c554e5a4814dfc794cdb7f7c4', part: "indicator", class: "bs-tab__indicator" })));
75
+ return (index.h("button", { key: 'b70b65a38774feac31afb3c742c1c347d0d8f009', type: "button", part: "tab", role: "tab", class: `bs-tab ${this.selected ? 'bs-tab--selected' : ''} ${this.disabled ? 'bs-tab--disabled' : ''} ${iconOnly ? 'bs-tab--icon-only' : ''} ${vertical ? 'bs-tab--vertical' : ''}`, disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel, onClick: this.onClick }, index.h("span", { key: 'bae69ab5499b9e8f695cf0bc559fa395097ae7dc', part: "icon", class: `bs-tab__icon ${this.hasIcon ? 'bs-tab__icon--has-content' : ''}` }, index.h("slot", { key: 'b6f545c119b1e53520ee0a62b51d84071aace11f', name: "icon", onSlotchange: this.onIconSlotchange })), index.h("span", { key: '6c8cf0dd0394ebfc9a5825d01713628ce20d1c2d', part: "label", class: `bs-tab__label ${this.hasLabel ? 'bs-tab__label--has-content' : ''}` }, index.h("slot", { key: '7eddcdcc73576ac8fc4f640e3f9cdc8c5cc04eb8', onSlotchange: this.onLabelSlotchange })), index.h("span", { key: 'acf5cd096bb0ff3a7c2bd898759995dc73b261f5', part: "badge", class: `bs-tab__badge ${showBadge ? 'bs-tab__badge--has-content' : ''}` }, index.h("slot", { key: 'f97ae6b3b7760883b3ce9c20a0e7ec29dd43677e', name: "badge", onSlotchange: this.onBadgeSlotchange })), index.h("span", { key: '2db637b4b3f398b8d300731565b0accd1138fe88', part: "indicator", class: "bs-tab__indicator" })));
76
76
  }
77
77
  };
78
78
  BsTab.style = bsTabCss();
@@ -31,7 +31,7 @@ const BsTabs = class {
31
31
  }
32
32
  render() {
33
33
  const vertical = this.orientation === 'vertical';
34
- return (index.h("div", { key: '46c293778047abc247a655f8c69752997d041864', part: "tablist", role: "tablist", "aria-orientation": this.orientation, class: `bs-tabs bs-tabs--${this.type} ${vertical ? 'bs-tabs--vertical' : ''}` }, index.h("slot", { key: 'e956063f2db1078f51eb2b73c8a68a00ae7af5f5' })));
34
+ return (index.h("div", { key: '3d45234fd7f253c692fe4bbc150e5e31c3c0144d', part: "tablist", role: "tablist", "aria-orientation": this.orientation, class: `bs-tabs bs-tabs--${this.type} ${vertical ? 'bs-tabs--vertical' : ''}` }, index.h("slot", { key: '1872fc2d82a5cde90b9e5b7fc76976f1083a3563' })));
35
35
  }
36
36
  };
37
37
  BsTabs.style = bsTabsCss();
@@ -19,7 +19,7 @@ const BsToast = class {
19
19
  this.bsDismiss.emit();
20
20
  };
21
21
  render() {
22
- return (index.h("div", { key: '6c10abc0222e203614ad99d98616dc8b935e03c1', part: "container", class: `bs-toast bs-toast--${this.state}`, role: "status", "aria-live": this.state === 'error' ? 'assertive' : 'polite' }, index.h("div", { key: '645bfc43dde223d90bfca859a96f10c2749581f4', class: "bs-toast__content" }, index.h("span", { key: 'ea8811097930e6c71fbe809ccbf9476b8cb0a3c4', part: "icon", class: "bs-toast__icon", "aria-hidden": "true" }, index.h(StateIcon, { key: 'c461de63f4b2e3944c00fab296bcdd1b2a6cb3cb', state: this.state })), index.h("span", { key: 'f88feb3cd5167b7296017ce45a6990fe021ee917', part: "message", class: "bs-toast__message" }, index.h("slot", { key: '218b8cb0defc7e86245937074bab4e6cf8b09cc3' }))), index.h("div", { key: 'eb9ba6a28d3cb4667ae9c5875b65f93ffddbdb58', class: "bs-toast__actions" }, index.h("button", { key: '7f4ed2510675ab40fbfe84e196496701ce6e5693', part: "close", type: "button", class: "bs-toast__close", "aria-label": "Dismiss", onClick: this.onDismiss }, index.h(CloseIcon, { key: '22241204ebdcc27a537e92deb38fb7aee8db8800' })))));
22
+ return (index.h("div", { key: '238f177a44aa2bd735432fe8f3fd1d761065d023', part: "container", class: `bs-toast bs-toast--${this.state}`, role: "status", "aria-live": this.state === 'error' ? 'assertive' : 'polite' }, index.h("div", { key: '717e222c7b271db0ff5aa57db8ce0efa15bfaf50', class: "bs-toast__content" }, index.h("span", { key: '316106f6efbcc8abe6bb155e77ec21343b93287c', part: "icon", class: "bs-toast__icon", "aria-hidden": "true" }, index.h(StateIcon, { key: '5973febbe8d7be889fd14cac847c417a22acb111', state: this.state })), index.h("span", { key: '1d16db1ba5c010ac5af237b4b399e0dda6f6df59', part: "message", class: "bs-toast__message" }, index.h("slot", { key: '40e97271fec790a850491be58ae87e54b4765a6a' }))), index.h("div", { key: '16744b9b6ad79d13aec16afa6593ab0de1ec5ee2', class: "bs-toast__actions" }, index.h("button", { key: '87adace9953b2dca831543132f3fe5590bc4c52f', part: "close", type: "button", class: "bs-toast__close", "aria-label": "Dismiss", onClick: this.onDismiss }, index.h(CloseIcon, { key: 'dcf5ffe7a5553ec2792d801c7f62ed367d1454ef' })))));
23
23
  }
24
24
  };
25
25
  const StateIcon = ({ state }) => {
@@ -16,7 +16,7 @@ const BsTooltip = class {
16
16
  */
17
17
  placement = 'top';
18
18
  render() {
19
- return (index.h("div", { key: '24502b9b6826956764a5c291eb14f82662c2d3d5', class: "bs-tooltip" }, index.h("span", { key: 'f8d8bcc3fa8e5e4cc7ea69ff58eb9c05c797c8eb', part: "arrow", class: "bs-tooltip__arrow" }), index.h("div", { key: '458407140a9303d7d857fb82ea532e3138669ca8', part: "bubble", class: "bs-tooltip__bubble" }, index.h("slot", { key: '123d7b06fa1a8be09da871fcca9f7d021ddc66f2' }))));
19
+ return (index.h("div", { key: '81d300180aa98431ab694c50e76bb7e55a65efb0', class: "bs-tooltip" }, index.h("span", { key: '42e53b74b32dab5418e1e7ce37210316fd14341e', part: "arrow", class: "bs-tooltip__arrow" }), index.h("div", { key: '9b118fbb55282ef4cc7ccdf45da46c1939e25147', part: "bubble", class: "bs-tooltip__bubble" }, index.h("slot", { key: '52f128c55db4da2bbdc6b94c254ab80fb7dcc53f' }))));
20
20
  }
21
21
  };
22
22
  BsTooltip.style = bsTooltipCss();
@@ -5,7 +5,7 @@ var index = require('./index-D7e6DfLV.js');
5
5
  const defineCustomElements = async (win, options) => {
6
6
  if (typeof window === 'undefined') return undefined;
7
7
  await index.globalScripts();
8
- return index.bootstrapLazy([["bs-input.cjs",[[785,"bs-input",{"value":[1025],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4],"required":[4],"step":[2],"min":[2],"max":[2],"options":[16],"rows":[2],"chips":[16],"titleOptions":[16],"initialsTitle":[1,"initials-title"],"countryOptions":[16],"country":[1],"length":[2],"open":[1540],"hasIcon":[32],"hasEndIcon":[32],"passwordVisible":[32],"chipDraft":[32]},[[0,"keydown","onHostKeydown"],[0,"focusout","onHostFocusOut"]]]]],["bs-snackbar.cjs",[[769,"bs-snackbar",{"variant":[1],"loading":[4],"actionLabel":[1,"action-label"]}]]],["bs-attachment.cjs",[[513,"bs-attachment",{"type":[1],"fileName":[1,"file-name"],"imageSrc":[1,"image-src"],"imageAlt":[1,"image-alt"],"loading":[4],"removable":[4]}]]],["bs-breadcrumb-overflow.cjs",[[513,"bs-breadcrumb-overflow",{"items":[16],"overflowLabel":[1,"overflow-label"],"size":[513],"open":[32]},[[0,"keydown","onHostKeydown"],[0,"focusout","onHostFocusOut"]]]]],["bs-chatbot-header.cjs",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-dialog.cjs",[[769,"bs-dialog",{"open":[1540],"heading":[1],"size":[1],"centered":[516],"hasFooter":[32],"hasImage":[32],"hasIcon":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]],["bs-navigation-drawer.cjs",[[769,"bs-navigation-drawer",{"heading":[1],"collapsible":[4],"collapsed":[1540],"logoBackground":[1,"logo-background"],"showLogo":[4,"show-logo"]},null,{"collapsed":[{"onCollapsedChange":0}]}]]],["bs-navigation-header.cjs",[[769,"bs-navigation-header",{"alignment":[1],"ariaLabel":[1,"aria-label"],"skipToContentHref":[1,"skip-to-content-href"],"skipToContentLabel":[1,"skip-to-content-label"],"logoBackground":[1,"logo-background"]}]]],["bs-accordion.cjs",[[769,"bs-accordion",{"expanded":[516],"size":[1],"disabled":[4],"showIcon":[4,"show-icon"],"showPreview":[4,"show-preview"]}]]],["bs-ai-disclaimer.cjs",[[257,"bs-ai-disclaimer"]]],["bs-ai-greeting.cjs",[[513,"bs-ai-greeting",{"assistantName":[1,"assistant-name"],"productName":[1,"product-name"]}]]],["bs-ai-thinking.cjs",[[513,"bs-ai-thinking",{"label":[1]}]]],["bs-attachment-list.cjs",[[769,"bs-attachment-list",{"ariaLabel":[1,"aria-label"],"canScrollRight":[32]}]]],["bs-avatar.cjs",[[513,"bs-avatar",{"type":[1],"size":[1],"initials":[1],"src":[1],"alt":[1],"ariaLabel":[1,"aria-label"],"disabled":[516]}]]],["bs-badge.cjs",[[769,"bs-badge",{"variant":[1]}]]],["bs-breadcrumb.cjs",[[769,"bs-breadcrumb",{"href":[1],"current":[516],"size":[513]}]]],["bs-breadcrumbs.cjs",[[769,"bs-breadcrumbs",{"label":[1],"size":[1]},null,{"size":[{"onSizeChange":0}]}]]],["bs-button-skeleton.cjs",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card.cjs",[[769,"bs-card",{"surface":[1],"hasImage":[32]}]]],["bs-chatbot-feedback.cjs",[[513,"bs-chatbot-feedback",{"rating":[1538],"submitted":[1540],"comment":[1025],"heading":[1],"subtitle":[1]}]]],["bs-chatbot-response-action.cjs",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-chatbot-sources-drawer.cjs",[[769,"bs-chatbot-sources-drawer",{"heading":[1],"count":[2],"slottedCount":[32]}]]],["bs-chatbot-suggestion-button.cjs",[[769,"bs-chatbot-suggestion-button",{"disabled":[4]}]]],["bs-checkbox.cjs",[[785,"bs-checkbox",{"size":[1],"checked":[1540],"indeterminate":[1540],"disabled":[4],"error":[4],"ariaLabel":[1,"aria-label"]},null,{"indeterminate":[{"onIndeterminateChange":0}]}]]],["bs-checkbox-skeleton.cjs",[[513,"bs-checkbox-skeleton",{"size":[1]}]]],["bs-chip-filter.cjs",[[785,"bs-chip-filter",{"size":[1],"selected":[516],"dropdown":[4],"disabled":[4],"ariaLabel":[1,"aria-label"],"hasIcon":[32]}]]],["bs-chip-informative.cjs",[[769,"bs-chip-informative",{"color":[1],"size":[1],"disabled":[516],"hasIcon":[32]}]]],["bs-chip-input.cjs",[[785,"bs-chip-input",{"size":[1],"selected":[1540],"disabled":[516],"hasIcon":[32],"labelText":[32]}]]],["bs-composer.cjs",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1025],"state":[513],"ariaLabel":[1,"aria-label"],"hasAttachments":[32]}]]],["bs-composer-status-banner.cjs",[[769,"bs-composer-status-banner",{"type":[1],"message":[1],"showIcon":[4,"show-icon"],"showButton":[4,"show-button"],"actionLabel":[1,"action-label"],"allowClose":[4,"allow-close"]}]]],["bs-data-table.cjs",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32],"clearSelection":[64]}]]],["bs-inline-tab.cjs",[[769,"bs-inline-tab",{"selected":[516],"disabled":[4],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasLabel":[32]}]]],["bs-navigation-drawer-item.cjs",[[769,"bs-navigation-drawer-item",{"selected":[516],"expandable":[4],"expanded":[1540],"nested":[4],"ariaLabel":[1,"aria-label"],"collapsed":[516],"hasIcon":[32]}]]],["bs-pagination.cjs",[[513,"bs-pagination",{"totalPages":[2,"total-pages"],"currentPage":[1538,"current-page"],"siblingCount":[2,"sibling-count"],"previousLabel":[1,"previous-label"],"nextLabel":[1,"next-label"]}]]],["bs-progress.cjs",[[513,"bs-progress",{"type":[1],"size":[1],"strokeWidth":[2,"stroke-width"],"value":[2],"showLabel":[4,"show-label"]}]]],["bs-progress-linear.cjs",[[769,"bs-progress-linear",{"type":[1],"size":[1],"value":[2],"showLabel":[4,"show-label"],"hasLabelContent":[32]}]]],["bs-radio.cjs",[[785,"bs-radio",{"name":[1],"value":[1],"checked":[1540],"disabled":[4]}]]],["bs-slider.cjs",[[529,"bs-slider",{"type":[1],"showLabel":[4,"show-label"],"label":[1],"min":[2],"max":[2],"step":[2],"value":[1026],"valueStart":[1026,"value-start"],"valueEnd":[1026,"value-end"],"segments":[2],"disabled":[4],"ariaLabel":[1,"aria-label"]}]]],["bs-source-link.cjs",[[769,"bs-source-link",{"fileName":[1,"file-name"],"sourceName":[1,"source-name"],"version":[1],"href":[1],"target":[1]}]]],["bs-stepper.cjs",[[769,"bs-stepper",{"currentStep":[2,"current-step"],"direction":[513],"showDescription":[4,"show-description"]},null,{"currentStep":[{"onPropChange":0}],"direction":[{"onPropChange":0}],"showDescription":[{"onPropChange":0}]}]]],["bs-stepper-step.cjs",[[513,"bs-stepper-step",{"name":[1],"description":[1],"error":[4],"disabled":[4],"computedState":[1,"computed-state"],"direction":[1],"showDescription":[4,"show-description"]}]]],["bs-switch.cjs",[[785,"bs-switch",{"size":[1],"checked":[1540],"disabled":[4],"ariaLabel":[1,"aria-label"]}]]],["bs-tab.cjs",[[769,"bs-tab",{"selected":[516],"disabled":[4],"iconPosition":[1,"icon-position"],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasLabel":[32],"hasBadge":[32]}]]],["bs-tabs.cjs",[[769,"bs-tabs",{"type":[1],"orientation":[1]},[[0,"bsSelect","onTabSelect"]]]]],["bs-toast.cjs",[[769,"bs-toast",{"state":[1]}]]],["bs-button.cjs",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-menu-item.cjs",[[769,"bs-menu-item",{"disabled":[4],"hasIcon":[32]}]]],["bs-tooltip.cjs",[[769,"bs-tooltip",{"placement":[1]}]]],["bs-logo.cjs",[[513,"bs-logo",{"variant":[1],"background":[1],"src":[1],"alt":[1]}]]],["bs-menu.cjs",[[257,"bs-menu"]]],["bs-icon-button.cjs",[[785,"bs-icon-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"]}]]]], options);
8
+ return index.bootstrapLazy([["bs-carousel.cjs",[[769,"bs-carousel",{"tracker":[1],"slidesPerView":[2,"slides-per-view"],"currentPage":[1538,"current-page"],"autoplay":[4],"interval":[2],"paused":[1540],"label":[1],"previousLabel":[1,"previous-label"],"nextLabel":[1,"next-label"],"pauseLabel":[1,"pause-label"],"playLabel":[1,"play-label"],"slideCount":[32],"interacting":[32]},[[1,"mouseenter","onMouseEnter"],[1,"mouseleave","onMouseLeave"],[0,"focusin","onFocusIn"],[0,"focusout","onFocusOut"]],{"currentPage":[{"onCurrentPageChange":0}],"autoplay":[{"updateTimer":0}],"paused":[{"updateTimer":0}],"interval":[{"updateTimer":0}],"interacting":[{"updateTimer":0}],"slideCount":[{"updateTimer":0}],"slidesPerView":[{"updateTimer":0}]}]]],["bs-file-upload-item.cjs",[[769,"bs-file-upload-item",{"state":[513],"fileName":[1,"file-name"],"fileSize":[1,"file-size"],"progress":[2],"message":[1],"thumbnailSrc":[1,"thumbnail-src"],"thumbnailAlt":[1,"thumbnail-alt"],"cancelLabel":[1,"cancel-label"],"removeLabel":[1,"remove-label"]}]]],["bs-input.cjs",[[785,"bs-input",{"value":[1025],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4],"required":[4],"step":[2],"min":[2],"max":[2],"options":[16],"rows":[2],"chips":[16],"titleOptions":[16],"initialsTitle":[1,"initials-title"],"countryOptions":[16],"country":[1],"length":[2],"open":[1540],"hasIcon":[32],"hasEndIcon":[32],"passwordVisible":[32],"chipDraft":[32]},[[0,"keydown","onHostKeydown"],[0,"focusout","onHostFocusOut"]]]]],["bs-snackbar.cjs",[[769,"bs-snackbar",{"variant":[1],"loading":[4],"actionLabel":[1,"action-label"]}]]],["bs-attachment.cjs",[[513,"bs-attachment",{"type":[1],"fileName":[1,"file-name"],"imageSrc":[1,"image-src"],"imageAlt":[1,"image-alt"],"loading":[4],"removable":[4]}]]],["bs-breadcrumb-overflow.cjs",[[513,"bs-breadcrumb-overflow",{"items":[16],"overflowLabel":[1,"overflow-label"],"size":[513],"open":[32]},[[0,"keydown","onHostKeydown"],[0,"focusout","onHostFocusOut"]]]]],["bs-chatbot-header.cjs",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-dialog.cjs",[[769,"bs-dialog",{"open":[1540],"heading":[1],"size":[1],"centered":[516],"hasFooter":[32],"hasImage":[32],"hasIcon":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]],["bs-file-upload.cjs",[[769,"bs-file-upload",{"direction":[513],"heading":[1],"description":[1],"buttonLabel":[1,"button-label"],"accept":[1],"multiple":[4],"disabled":[516],"dragging":[1540]}]]],["bs-navigation-drawer.cjs",[[769,"bs-navigation-drawer",{"heading":[1],"collapsible":[4],"collapsed":[1540],"logoBackground":[1,"logo-background"],"showLogo":[4,"show-logo"]},null,{"collapsed":[{"onCollapsedChange":0}]}]]],["bs-navigation-header.cjs",[[769,"bs-navigation-header",{"alignment":[1],"ariaLabel":[1,"aria-label"],"skipToContentHref":[1,"skip-to-content-href"],"skipToContentLabel":[1,"skip-to-content-label"],"logoBackground":[1,"logo-background"]}]]],["bs-accordion.cjs",[[769,"bs-accordion",{"expanded":[516],"size":[1],"disabled":[4],"showIcon":[4,"show-icon"],"showPreview":[4,"show-preview"]}]]],["bs-ai-disclaimer.cjs",[[257,"bs-ai-disclaimer"]]],["bs-ai-greeting.cjs",[[513,"bs-ai-greeting",{"assistantName":[1,"assistant-name"],"productName":[1,"product-name"]}]]],["bs-ai-thinking.cjs",[[513,"bs-ai-thinking",{"label":[1]}]]],["bs-attachment-list.cjs",[[769,"bs-attachment-list",{"ariaLabel":[1,"aria-label"],"canScrollRight":[32]}]]],["bs-avatar.cjs",[[513,"bs-avatar",{"type":[1],"size":[1],"initials":[1],"src":[1],"alt":[1],"ariaLabel":[1,"aria-label"],"disabled":[516]}]]],["bs-badge.cjs",[[769,"bs-badge",{"variant":[1]}]]],["bs-breadcrumb.cjs",[[769,"bs-breadcrumb",{"href":[1],"current":[516],"size":[513]}]]],["bs-breadcrumbs.cjs",[[769,"bs-breadcrumbs",{"label":[1],"size":[1]},null,{"size":[{"onSizeChange":0}]}]]],["bs-button-skeleton.cjs",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card.cjs",[[769,"bs-card",{"surface":[1],"hasImage":[32]}]]],["bs-chatbot-feedback.cjs",[[513,"bs-chatbot-feedback",{"rating":[1538],"submitted":[1540],"comment":[1025],"heading":[1],"subtitle":[1]}]]],["bs-chatbot-response-action.cjs",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-chatbot-sources-drawer.cjs",[[769,"bs-chatbot-sources-drawer",{"heading":[1],"count":[2],"slottedCount":[32]}]]],["bs-chatbot-suggestion-button.cjs",[[769,"bs-chatbot-suggestion-button",{"disabled":[4]}]]],["bs-checkbox.cjs",[[785,"bs-checkbox",{"size":[1],"checked":[1540],"indeterminate":[1540],"disabled":[4],"error":[4],"ariaLabel":[1,"aria-label"]},null,{"indeterminate":[{"onIndeterminateChange":0}]}]]],["bs-checkbox-skeleton.cjs",[[513,"bs-checkbox-skeleton",{"size":[1]}]]],["bs-chip-filter.cjs",[[785,"bs-chip-filter",{"size":[1],"selected":[516],"dropdown":[4],"disabled":[4],"ariaLabel":[1,"aria-label"],"hasIcon":[32]}]]],["bs-chip-informative.cjs",[[769,"bs-chip-informative",{"color":[1],"size":[1],"disabled":[516],"hasIcon":[32]}]]],["bs-chip-input.cjs",[[785,"bs-chip-input",{"size":[1],"selected":[1540],"disabled":[516],"hasIcon":[32],"labelText":[32]}]]],["bs-composer.cjs",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1025],"state":[513],"ariaLabel":[1,"aria-label"],"hasAttachments":[32]}]]],["bs-composer-status-banner.cjs",[[769,"bs-composer-status-banner",{"type":[1],"message":[1],"showIcon":[4,"show-icon"],"showButton":[4,"show-button"],"actionLabel":[1,"action-label"],"allowClose":[4,"allow-close"]}]]],["bs-data-table.cjs",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32],"clearSelection":[64]}]]],["bs-inline-tab.cjs",[[769,"bs-inline-tab",{"selected":[516],"disabled":[4],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasLabel":[32]}]]],["bs-navigation-drawer-item.cjs",[[769,"bs-navigation-drawer-item",{"selected":[516],"expandable":[4],"expanded":[1540],"nested":[4],"ariaLabel":[1,"aria-label"],"collapsed":[516],"hasIcon":[32]}]]],["bs-progress.cjs",[[513,"bs-progress",{"type":[1],"size":[1],"strokeWidth":[2,"stroke-width"],"value":[2],"showLabel":[4,"show-label"]}]]],["bs-radio.cjs",[[785,"bs-radio",{"name":[1],"value":[1],"checked":[1540],"disabled":[4]}]]],["bs-slider.cjs",[[529,"bs-slider",{"type":[1],"showLabel":[4,"show-label"],"label":[1],"min":[2],"max":[2],"step":[2],"value":[1026],"valueStart":[1026,"value-start"],"valueEnd":[1026,"value-end"],"segments":[2],"disabled":[4],"ariaLabel":[1,"aria-label"]}]]],["bs-source-link.cjs",[[769,"bs-source-link",{"fileName":[1,"file-name"],"sourceName":[1,"source-name"],"version":[1],"href":[1],"target":[1]}]]],["bs-stepper.cjs",[[769,"bs-stepper",{"currentStep":[2,"current-step"],"direction":[513],"showDescription":[4,"show-description"]},null,{"currentStep":[{"onPropChange":0}],"direction":[{"onPropChange":0}],"showDescription":[{"onPropChange":0}]}]]],["bs-stepper-step.cjs",[[513,"bs-stepper-step",{"name":[1],"description":[1],"error":[4],"disabled":[4],"computedState":[1,"computed-state"],"direction":[1],"showDescription":[4,"show-description"]}]]],["bs-switch.cjs",[[785,"bs-switch",{"size":[1],"checked":[1540],"disabled":[4],"ariaLabel":[1,"aria-label"]}]]],["bs-tab.cjs",[[769,"bs-tab",{"selected":[516],"disabled":[4],"iconPosition":[1,"icon-position"],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasLabel":[32],"hasBadge":[32]}]]],["bs-tabs.cjs",[[769,"bs-tabs",{"type":[1],"orientation":[1]},[[0,"bsSelect","onTabSelect"]]]]],["bs-toast.cjs",[[769,"bs-toast",{"state":[1]}]]],["bs-menu-item.cjs",[[769,"bs-menu-item",{"disabled":[4],"hasIcon":[32]}]]],["bs-pagination.cjs",[[513,"bs-pagination",{"totalPages":[2,"total-pages"],"currentPage":[1538,"current-page"],"siblingCount":[2,"sibling-count"],"previousLabel":[1,"previous-label"],"nextLabel":[1,"next-label"]}]]],["bs-progress-linear.cjs",[[769,"bs-progress-linear",{"type":[1],"size":[1],"value":[2],"showLabel":[4,"show-label"],"ariaLabel":[1,"aria-label"],"hasLabelContent":[32]}]]],["bs-tooltip.cjs",[[769,"bs-tooltip",{"placement":[1]}]]],["bs-logo.cjs",[[513,"bs-logo",{"variant":[1],"background":[1],"src":[1],"alt":[1]}]]],["bs-menu.cjs",[[257,"bs-menu"]]],["bs-button.cjs",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-icon-button.cjs",[[785,"bs-icon-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"]}]]]], options);
9
9
  };
10
10
 
11
11
  exports.setNonce = index.setNonce;
@@ -8,6 +8,7 @@
8
8
  "components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.js",
9
9
  "components/bs-button/bs-button/bs-button.js",
10
10
  "components/bs-card/bs-card.js",
11
+ "components/bs-carousel/bs-carousel.js",
11
12
  "components/bs-checkbox/bs-checkbox.js",
12
13
  "components/bs-chip/bs-chip-filter/bs-chip-filter.js",
13
14
  "components/bs-chip/bs-chip-informative/bs-chip-informative.js",
@@ -16,6 +17,8 @@
16
17
  "components/bs-composer-status-banner/bs-composer-status-banner.js",
17
18
  "components/bs-data-table/bs-data-table.js",
18
19
  "components/bs-dialog/bs-dialog.js",
20
+ "components/bs-file-upload/bs-file-upload.js",
21
+ "components/bs-file-upload-item/bs-file-upload-item.js",
19
22
  "components/bs-button/bs-icon-button/bs-icon-button.js",
20
23
  "components/bs-logo/bs-logo.js",
21
24
  "components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js",
@@ -1,5 +1,10 @@
1
1
  import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ import { runAxeCheck } from "../../test/helpers/conventions";
2
3
  describe('bs-accordion', () => {
4
+ it('has no axe-core accessibility violations', async () => {
5
+ const { root } = await render(h("bs-accordion", null, h("span", { slot: "label" }, "Title"), "Body content"));
6
+ await runAxeCheck(root);
7
+ });
3
8
  ['medium', 'large'].forEach(size => {
4
9
  it(`renders collapsed, size="${size}"`, async () => {
5
10
  const { root } = await render(h("bs-accordion", { size: size }, h("span", { slot: "label" }, "Title"), "Body content"));
@@ -25,7 +25,7 @@ import { h } from "@stencil/core";
25
25
  export class BsAiDisclaimer {
26
26
  render() {
27
27
  https: //images.unsplash.com/photo-1512917774080-9991f1c4c750?w=200&h=200&fit=crop
28
- return (h("div", { key: 'b79f8540dbf4563a831fa687f55710f5e5a55037', class: "bs-ai-disclaimer" }, h("p", { key: '82f3cc3744e1012201953eaa0b73a0ac5dc4bcd4', part: "text", class: "bs-ai-disclaimer__text" }, h("slot", { key: 'f4413eaf53353f3635ae6ec1e2a4af263e0bf67f' }))));
28
+ return (h("div", { key: '2df50141b934d044d68015cc40b0cc525f374ec7', class: "bs-ai-disclaimer" }, h("p", { key: '42e735a432c16d16c4daa786bbd3e2757d298e68', part: "text", class: "bs-ai-disclaimer__text" }, h("slot", { key: 'fe037a3b1bd4bf6135448abd6ce2de8aa4cec6d5' }))));
29
29
  }
30
30
  static get is() { return "bs-ai-disclaimer"; }
31
31
  static get encapsulation() { return "shadow"; }
@@ -43,7 +43,7 @@ export class BsAiGreeting {
43
43
  const subtext = this.productName
44
44
  ? `How can I help you with ${this.productName} today?`
45
45
  : 'How can I help you today?';
46
- return (h("div", { key: 'eeb2acbb2c6aa8daa803dab57c343b35995200b3', class: "bs-ai-greeting" }, h("div", { key: 'ece228ba66ee9b783a768258a5c52c1270297962', part: "heading", class: "bs-ai-greeting__heading" }, h("p", { key: 'f316e250f35b05dda813f5b517f42373eebcde45', class: "bs-ai-greeting__heading-line" }, "Hi. I'm ", this.assistantName, ","), h("p", { key: '99ac26f89ec8fb3fba000025975c95920faca41a', class: "bs-ai-greeting__heading-line" }, "your AI assistant.")), h("p", { key: '3326155e697a1dd0d0512574d0405f5e176d3967', part: "subtext", class: "bs-ai-greeting__subtext" }, subtext)));
46
+ return (h("div", { key: '36ef1fa16f576af16387a9119c6fb3003fde61de', class: "bs-ai-greeting" }, h("div", { key: '397127700354b1a9b46b3adc5c4e7bec3803b5cf', part: "heading", class: "bs-ai-greeting__heading" }, h("p", { key: '3bf51034fa5fc1ea28856e1d44b629f6614cdf1a', class: "bs-ai-greeting__heading-line" }, "Hi. I'm ", this.assistantName, ","), h("p", { key: 'b718d68dfb5c602eb035950b9ff661ab569b9302', class: "bs-ai-greeting__heading-line" }, "your AI assistant.")), h("p", { key: '1d271a06cfc0909c8c8c6487a05da3aebf925c09', part: "subtext", class: "bs-ai-greeting__subtext" }, subtext)));
47
47
  }
48
48
  static get is() { return "bs-ai-greeting"; }
49
49
  static get encapsulation() { return "shadow"; }
@@ -29,7 +29,7 @@ export class BsAiThinking {
29
29
  /** The status text shown next to the icon, e.g. "Retrieving", "Thinking", "Searching". */
30
30
  label = 'Thinking';
31
31
  render() {
32
- return (h("div", { key: '29dcf35868288138ffdd7e1a59ecd48396b45ce7', class: "bs-ai-thinking", role: "status", "aria-live": "polite" }, h("img", { key: 'ca7354850cc25b2c55b2901f7d34ce216fe79d76', part: "icon", class: "bs-ai-thinking__icon", src: GENIE_MARK_ICON, alt: "", "aria-hidden": "true" }), h("span", { key: '888e38812266e053a58ad91932d4a7df804e52da', part: "label", class: "bs-ai-thinking__label" }, this.label)));
32
+ return (h("div", { key: '310fa2c79337dd330219ea2f0c11c5105692f964', class: "bs-ai-thinking", role: "status", "aria-live": "polite" }, h("img", { key: '0e6b3bf38aeff1166675e6761ada150ddfc344b1', part: "icon", class: "bs-ai-thinking__icon", src: GENIE_MARK_ICON, alt: "", "aria-hidden": "true" }), h("span", { key: '5611170fc41f29361c79be7e30599ae61ef5a976', part: "label", class: "bs-ai-thinking__label" }, this.label)));
33
33
  }
34
34
  static get is() { return "bs-ai-thinking"; }
35
35
  static get encapsulation() { return "shadow"; }
@@ -58,7 +58,7 @@ export class BsAttachmentList {
58
58
  this.canScrollRight = row.scrollWidth - row.clientWidth - row.scrollLeft > 1;
59
59
  };
60
60
  render() {
61
- return (h("div", { key: '5508a6c6185bf836d4b30e7341f29f80ba06f2c3', class: "bs-attachment-list" }, h("div", { key: 'c8652402e683f80aee373adad7ad41590dd7fbaf', part: "row", class: "bs-attachment-list__row", ref: el => (this.row = el), onScroll: this.onScroll, role: "group", "aria-label": this.ariaLabel, tabIndex: 0 }, h("slot", { key: 'fb838b763b7047419d072c2c9f2cbe81046041e4', onSlotchange: this.onSlotchange })), this.canScrollRight && h("div", { key: 'faaf4be7542539a32675fb2046b26840e539d509', part: "fade", class: "bs-attachment-list__fade", "aria-hidden": "true" })));
61
+ return (h("div", { key: '2e265dcc82737c0b129be0196f68c0ec1a745789', class: "bs-attachment-list" }, h("div", { key: 'b148b3743237126437344dc1680c6c64c311f89a', part: "row", class: "bs-attachment-list__row", ref: el => (this.row = el), onScroll: this.onScroll, role: "group", "aria-label": this.ariaLabel, tabIndex: 0 }, h("slot", { key: 'db30b9615067b73db4c048991745055742be759f', onSlotchange: this.onSlotchange })), this.canScrollRight && h("div", { key: '989a64c7dc6e8cb99036a779b0eefc02b4706dc6', part: "fade", class: "bs-attachment-list__fade", "aria-hidden": "true" })));
62
62
  }
63
63
  static get is() { return "bs-attachment-list"; }
64
64
  static get encapsulation() { return "shadow"; }
@@ -54,7 +54,7 @@ export class BsBreadcrumbs {
54
54
  });
55
55
  }
56
56
  render() {
57
- return (h("nav", { key: '5ff4734b3de9444f7347443acdc0dcea94bb43a1', "aria-label": this.label }, h("ol", { key: '0aebf74594c40b9268576cf1ccdb872dc3866ab3', part: "list", class: "bs-breadcrumbs__list" }, h("slot", { key: '998f3aeb715ef1fdf4e602cb50e612f9125832af', onSlotchange: this.onSlotChange }))));
57
+ return (h("nav", { key: '14bf783e0dc34d1f8368bde48499e684b1410b94', "aria-label": this.label }, h("ol", { key: 'feef69a5164f6d7dad670e56cdbd7912aff96c2c', part: "list", class: "bs-breadcrumbs__list" }, h("slot", { key: 'b616fc5fcf0181025be6e5570b7d0fa10cae146e', onSlotchange: this.onSlotChange }))));
58
58
  }
59
59
  static get is() { return "bs-breadcrumbs"; }
60
60
  static get encapsulation() { return "shadow"; }
@@ -50,7 +50,7 @@ export class BsIconButton {
50
50
  */
51
51
  ariaLabel = null;
52
52
  render() {
53
- return (h("button", { key: '86ddd0f1ff23372e205035ac1273a6b90a779855', class: `bs-icon-button bs-icon-button--${this.variant} bs-icon-button--${this.size}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel }, h("span", { key: 'f45944557ce068283c394e6a48fbc0f56087fbd9', part: "icon", class: "bs-icon-button__icon" }, h("slot", { key: 'ed067830c7f465099edbf40401b0e3ec6fb1e1c9' }))));
53
+ return (h("button", { key: '0721387caf111462e6ae846647ba1c48363158aa', class: `bs-icon-button bs-icon-button--${this.variant} bs-icon-button--${this.size}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel }, h("span", { key: '8c69f815b6ca603cfcfab34e3530f4c783da0ee7', part: "icon", class: "bs-icon-button__icon" }, h("slot", { key: '8533f8ecfae182d6bd7d7e0dd6af328015948864' }))));
54
54
  }
55
55
  static get is() { return "bs-icon-button"; }
56
56
  static get encapsulation() { return "shadow"; }
@@ -25,7 +25,7 @@ export class BsButtonSkeleton {
25
25
  /** Sizing scale, matching the `bs-button` size it stands in for. */
26
26
  size = 'md';
27
27
  render() {
28
- return h("span", { key: 'bc4e9d282c745bfacede27fbeae7dfc8ea5d7aed', part: "container", class: `bs-button-skeleton bs-button-skeleton--${this.size}`, role: "status", "aria-label": "Loading" });
28
+ return h("span", { key: '1b7d442c2522cd4591862c6d72ee9bc491570518', part: "container", class: `bs-button-skeleton bs-button-skeleton--${this.size}`, role: "status", "aria-label": "Loading" });
29
29
  }
30
30
  static get is() { return "bs-button-skeleton"; }
31
31
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,198 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ import { afterEach, beforeEach, vi } from "vitest";
3
+ import { userEvent } from "vitest/browser";
4
+ import { assertShadowParts, runAxeCheck } from "../../test/helpers/conventions";
5
+ const slides = (n) => Array.from({ length: n }, (_, i) => h("div", null, "Slide ", i + 1));
6
+ const visible = (root) => Array.from(root.children).filter(c => !c.hidden).map(c => c.textContent);
7
+ // Autoplay deliberately holds while the pointer is over the carousel (WCAG pause-on-hover). The test
8
+ // browser keeps ONE pointer for the whole run, so an earlier test that hovered something near the top
9
+ // of the page leaves it resting where the next carousel renders -- which then holds autoplay and
10
+ // never advances (this is exactly what failed on the CI runner while passing locally). Park the
11
+ // pointer in the opposite corner before each autoplay test so they don't depend on test order.
12
+ const parkPointer = async () => {
13
+ const dot = document.createElement('div');
14
+ dot.style.cssText = 'position:fixed;right:0;bottom:0;width:8px;height:8px';
15
+ document.body.appendChild(dot);
16
+ await userEvent.hover(dot);
17
+ dot.remove();
18
+ };
19
+ // Autoplay also starts paused for users who prefer reduced motion; make that independent of the
20
+ // machine running the tests.
21
+ const stubReducedMotion = (reduce) => vi.spyOn(window, 'matchMedia').mockImplementation((query) => ({
22
+ matches: reduce && query.includes('prefers-reduced-motion'),
23
+ media: query,
24
+ onchange: null,
25
+ addListener: () => undefined,
26
+ removeListener: () => undefined,
27
+ addEventListener: () => undefined,
28
+ removeEventListener: () => undefined,
29
+ dispatchEvent: () => false,
30
+ }));
31
+ // Resolves with the page of the next bsPageChange. Rejects with the carousel's state if none comes in
32
+ // time, so a failure says WHY autoplay held (hovered/focused/paused) instead of just "timed out".
33
+ const nextPage = (el, timeout = 5000) => new Promise((resolve, reject) => {
34
+ const timer = setTimeout(() => {
35
+ const host = el;
36
+ const live = el.shadowRoot?.querySelector('[part="slides"]')?.getAttribute('aria-live');
37
+ reject(new Error(`no bsPageChange within the timeout (paused=${host.paused}, :hover=${el.matches(':hover')}, ` +
38
+ `:focus-within=${el.matches(':focus-within')}, aria-live=${live})`));
39
+ }, timeout);
40
+ el.addEventListener('bsPageChange', (e) => {
41
+ clearTimeout(timer);
42
+ resolve(e.detail);
43
+ }, { once: true });
44
+ });
45
+ const btn = (el) => el?.shadowRoot?.querySelector('button');
46
+ describe('bs-carousel', () => {
47
+ it('has no axe-core violations (dots and numbers)', async () => {
48
+ for (const tracker of ['dots', 'numbers']) {
49
+ const { root } = await render(h("bs-carousel", { tracker: tracker, autoplay: true, label: "Featured" }, slides(9)));
50
+ await runAxeCheck(root);
51
+ }
52
+ });
53
+ it('exposes its documented shadow parts', async () => {
54
+ const { root } = await render(h("bs-carousel", { autoplay: true }, slides(9)));
55
+ assertShadowParts(root.shadowRoot, ['carousel', 'slides', 'tracker', 'prev', 'next', 'dots', 'dot', 'current', 'pause']);
56
+ });
57
+ it('shows slidesPerView slides per page and hides the rest', async () => {
58
+ const { root } = await render(h("bs-carousel", null, slides(7)));
59
+ expect(visible(root)).toEqual(['Slide 1', 'Slide 2', 'Slide 3']);
60
+ });
61
+ it('slidesPerView=1 shows one slide per page', async () => {
62
+ const { root } = await render(h("bs-carousel", { slidesPerView: 1 }, slides(3)));
63
+ expect(visible(root)).toEqual(['Slide 1']);
64
+ });
65
+ it('labels the region and each slide, without overriding existing labels', async () => {
66
+ const { root } = await render(h("bs-carousel", { label: "News" }, h("div", { "aria-label": "Custom" }, "A"), h("div", null, "B")));
67
+ const region = root.shadowRoot.querySelector('[part="carousel"]');
68
+ expect(region).toEqualAttribute('role', 'region');
69
+ expect(region).toEqualAttribute('aria-roledescription', 'carousel');
70
+ expect(region).toEqualAttribute('aria-label', 'News');
71
+ expect(root.children[0].getAttribute('aria-label')).toBe('Custom');
72
+ expect(root.children[1].getAttribute('aria-label')).toBe('2 of 2');
73
+ expect(root.children[1].getAttribute('aria-roledescription')).toBe('slide');
74
+ });
75
+ describe('dots tracker', () => {
76
+ it('renders one dot per page with the current one active', async () => {
77
+ const { root } = await render(h("bs-carousel", null, slides(12)));
78
+ const dots = root.shadowRoot.querySelectorAll('[part~="dot"]');
79
+ expect(dots.length).toBe(4);
80
+ expect(dots[0].getAttribute('part')).toContain('current');
81
+ expect(root.shadowRoot.querySelectorAll('[part~="current"]').length).toBe(1);
82
+ });
83
+ it('next/previous move the page, emit bsPageChange, and disable at the ends', async () => {
84
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-carousel", null, slides(9)));
85
+ const spy = spyOnEvent('bsPageChange');
86
+ const prev = root.shadowRoot.querySelector('[part="prev"]');
87
+ const next = root.shadowRoot.querySelector('[part="next"]');
88
+ expect(prev.disabled).toBe(true);
89
+ btn(next).click();
90
+ await waitForChanges();
91
+ expect(visible(root)).toEqual(['Slide 4', 'Slide 5', 'Slide 6']);
92
+ expect(root.currentPage).toBe(2);
93
+ expect(spy).toHaveReceivedEventDetail(2);
94
+ btn(next).click();
95
+ await waitForChanges();
96
+ expect(next.disabled).toBe(true);
97
+ btn(prev).click();
98
+ await waitForChanges();
99
+ expect(root.currentPage).toBe(2);
100
+ });
101
+ });
102
+ describe('numbers tracker', () => {
103
+ it('renders a bs-pagination with one number per page and navigates on click', async () => {
104
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-carousel", { tracker: "numbers" }, slides(15)));
105
+ const spy = spyOnEvent('bsPageChange');
106
+ const pagination = root.shadowRoot.querySelector('bs-pagination');
107
+ expect(pagination.totalPages).toBe(5);
108
+ pagination.shadowRoot.querySelectorAll('.bs-pagination__page')[2].click();
109
+ await waitForChanges();
110
+ expect(root.currentPage).toBe(3);
111
+ expect(visible(root)).toEqual(['Slide 7', 'Slide 8', 'Slide 9']);
112
+ expect(spy).toHaveReceivedEventTimes(1);
113
+ expect(spy).toHaveReceivedEventDetail(3);
114
+ });
115
+ });
116
+ it('hides the tracker when there is only one page', async () => {
117
+ const { root } = await render(h("bs-carousel", null, slides(3)));
118
+ expect(root.shadowRoot.querySelector('[part="tracker"]')).toBeNull();
119
+ });
120
+ it('clamps an out-of-range currentPage', async () => {
121
+ const { root, waitForChanges } = await render(h("bs-carousel", { currentPage: 99 }, slides(9)));
122
+ await waitForChanges();
123
+ expect(root.currentPage).toBe(3);
124
+ expect(visible(root)).toEqual(['Slide 7', 'Slide 8', 'Slide 9']);
125
+ });
126
+ it('reacts to slides being added', async () => {
127
+ const { root, waitForChanges } = await render(h("bs-carousel", null, slides(3)));
128
+ for (let i = 4; i <= 7; i++) {
129
+ const d = document.createElement('div');
130
+ d.textContent = `Slide ${i}`;
131
+ root.appendChild(d);
132
+ }
133
+ await waitForChanges();
134
+ expect(root.shadowRoot.querySelectorAll('[part~="dot"]').length).toBe(3);
135
+ });
136
+ describe('autoplay', () => {
137
+ beforeEach(async () => {
138
+ stubReducedMotion(false);
139
+ await parkPointer();
140
+ });
141
+ afterEach(() => {
142
+ vi.restoreAllMocks();
143
+ });
144
+ it('renders no Pause button unless autoplay is set', async () => {
145
+ const { root } = await render(h("bs-carousel", null, slides(9)));
146
+ expect(root.shadowRoot.querySelector('[part="pause"]')).toBeNull();
147
+ });
148
+ it('auto-advances, looping from the last page to the first', async () => {
149
+ const { root } = await render(h("bs-carousel", { autoplay: true, interval: 250 }, slides(6)));
150
+ expect(await nextPage(root)).toBe(2);
151
+ expect(await nextPage(root)).toBe(1);
152
+ });
153
+ it('starts paused (showing Play) for users who prefer reduced motion, and does not advance', async () => {
154
+ stubReducedMotion(true);
155
+ const { root, waitForChanges } = await render(h("bs-carousel", { autoplay: true, interval: 250 }, slides(6)));
156
+ await waitForChanges();
157
+ expect(root.paused).toBe(true);
158
+ expect(root.shadowRoot.querySelector('[part="pause"]').textContent).toContain('Play');
159
+ await new Promise(r => setTimeout(r, 700));
160
+ expect(root.currentPage).toBe(1);
161
+ });
162
+ it('holds auto-advance while the pointer is over the carousel', async () => {
163
+ const { root, waitForChanges } = await render(h("bs-carousel", { autoplay: true, interval: 250 }, slides(6)));
164
+ await waitForChanges();
165
+ root.dispatchEvent(new MouseEvent('mouseenter'));
166
+ await waitForChanges();
167
+ expect(root.shadowRoot.querySelector('[part="slides"]').getAttribute('aria-live')).toBe('polite');
168
+ await new Promise(r => setTimeout(r, 700));
169
+ expect(root.currentPage).toBe(1);
170
+ root.dispatchEvent(new MouseEvent('mouseleave'));
171
+ expect(await nextPage(root)).toBe(2);
172
+ });
173
+ it('Pause stops auto-advance, flips to Play, and emits bsPauseChange', async () => {
174
+ const { root, waitForChanges, spyOnEvent } = await render(h("bs-carousel", { autoplay: true, interval: 1000 }, slides(9)));
175
+ const spy = spyOnEvent('bsPauseChange');
176
+ const pause = root.shadowRoot.querySelector('[part="pause"]');
177
+ expect(pause.textContent).toContain('Pause');
178
+ btn(pause).click();
179
+ await waitForChanges();
180
+ expect(root.paused).toBe(true);
181
+ expect(pause.textContent).toContain('Play');
182
+ expect(spy).toHaveReceivedEventDetail(true);
183
+ // Longer than one interval: had it not stopped, it would have advanced by now.
184
+ await new Promise(r => setTimeout(r, 1300));
185
+ expect(root.currentPage).toBe(1);
186
+ });
187
+ it('holds auto-advance while focus is inside, and announces politely only when not rotating', async () => {
188
+ const { root, waitForChanges } = await render(h("bs-carousel", { autoplay: true, interval: 1000 }, slides(9)));
189
+ const live = () => root.shadowRoot.querySelector('[part="slides"]').getAttribute('aria-live');
190
+ expect(live()).toBe('off');
191
+ root.dispatchEvent(new FocusEvent('focusin'));
192
+ await waitForChanges();
193
+ expect(live()).toBe('polite');
194
+ await new Promise(r => setTimeout(r, 1300));
195
+ expect(root.currentPage).toBe(1);
196
+ });
197
+ });
198
+ });
@@ -0,0 +1,107 @@
1
+ /**
2
+ * @prop --bs-carousel-gap: Gap between visible slides. Aliased to --bs-spacing-200.
3
+ * @prop --bs-carousel-tracker-offset: Vertical gap between the slides and the tracker row. Aliased to --bs-spacing-200.
4
+ * @prop --bs-carousel-tracker-gap: Gap between the items of the tracker row (previous, dots, next, Pause). Aliased to --bs-spacing-50.
5
+ * @prop --bs-carousel-dot-size: Width/height of an inactive dot; the active dot is twice as wide. Aliased to --bs-spacing-100 (8px, exact match to Figma).
6
+ * @prop --bs-carousel-dot-radius: Corner radius of a dot. Aliased to --bs-border-radius-full.
7
+ * @prop --bs-carousel-dot-color: Fill of an inactive dot. Aliased to --bs-surface-container.
8
+ * @prop --bs-carousel-dot-active-color: Fill of the active dot. Aliased to --bs-color-primary-default.
9
+ * @prop --bs-carousel-dots-gap: Gap between dots. Aliased to --bs-spacing-50.
10
+ */
11
+ :host {
12
+ display: block;
13
+
14
+ --bs-carousel-gap: var(--bs-spacing-200);
15
+ --bs-carousel-tracker-offset: var(--bs-spacing-200);
16
+ --bs-carousel-tracker-gap: var(--bs-spacing-50);
17
+
18
+ --bs-carousel-dot-size: var(--bs-spacing-100);
19
+ --bs-carousel-dot-radius: var(--bs-border-radius-full);
20
+ --bs-carousel-dot-color: var(--bs-surface-container);
21
+ --bs-carousel-dot-active-color: var(--bs-color-primary-default);
22
+ --bs-carousel-dots-gap: var(--bs-spacing-50);
23
+ }
24
+
25
+ .bs-carousel {
26
+ display: flex;
27
+ flex-direction: column;
28
+ align-items: center;
29
+ gap: var(--bs-carousel-tracker-offset);
30
+ }
31
+
32
+ .bs-carousel__slides {
33
+ display: flex;
34
+ align-items: flex-start;
35
+ gap: var(--bs-carousel-gap);
36
+ width: 100%;
37
+ }
38
+
39
+ /* Each slide takes an equal share of the row for the configured slidesPerView (set inline by the
40
+ component -- an internal variable, not a customization point). */
41
+ .bs-carousel__slides ::slotted(*) {
42
+ flex: 0 0
43
+ calc(
44
+ (100% - (var(--bs-carousel-slides-per-view) - 1) * var(--bs-carousel-gap)) / var(--bs-carousel-slides-per-view)
45
+ );
46
+ min-width: 0;
47
+ box-sizing: border-box;
48
+ }
49
+
50
+ /* Off-page slides carry the `hidden` attribute; a slide's own :host { display } would otherwise
51
+ override the UA's [hidden] rule. */
52
+ .bs-carousel__slides ::slotted([hidden]) {
53
+ display: none !important;
54
+ }
55
+
56
+ .bs-carousel__tracker {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: var(--bs-carousel-tracker-gap);
60
+ }
61
+
62
+ .bs-carousel__nav {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: var(--bs-carousel-tracker-gap);
66
+ }
67
+
68
+ .bs-carousel__dots {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: var(--bs-carousel-dots-gap);
72
+ }
73
+
74
+ .bs-carousel__dot {
75
+ display: block;
76
+ width: var(--bs-carousel-dot-size);
77
+ height: var(--bs-carousel-dot-size);
78
+ border-radius: var(--bs-carousel-dot-radius);
79
+ background: var(--bs-carousel-dot-color);
80
+ }
81
+
82
+ .bs-carousel__dot--active {
83
+ width: calc(var(--bs-carousel-dot-size) * 2);
84
+ background: var(--bs-carousel-dot-active-color);
85
+ }
86
+
87
+ /* Figma colors the previous/next chevrons with the default icon color (--bs-icon-default, #21262e),
88
+ one step darker than bs-icon-button's subtle variant (--bs-icon-neutral-default). Re-pointing that
89
+ token on these buttons only keeps the alias-to-a-token rule without touching bs-icon-button. */
90
+ .bs-carousel__nav bs-icon-button {
91
+ --bs-icon-neutral-default: var(--bs-icon-default);
92
+ }
93
+
94
+ /* In RTL the previous button sits on the right, so its chevron must point right (and vice versa). */
95
+ :host(:dir(rtl)) .bs-carousel__chevron {
96
+ transform: scaleX(-1);
97
+ }
98
+
99
+ @media (forced-colors: active) {
100
+ .bs-carousel__dot {
101
+ forced-color-adjust: none;
102
+ background: GrayText;
103
+ }
104
+ .bs-carousel__dot--active {
105
+ background: Highlight;
106
+ }
107
+ }