@brandsync/wc 1.6.0 → 1.8.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 (376) hide show
  1. package/custom-elements.json +1302 -90
  2. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  3. package/dist/brandsync-wc/{p-387ed85f.entry.js → p-002d258d.entry.js} +1 -1
  4. package/dist/brandsync-wc/{p-e35249c4.entry.js → p-03b08508.entry.js} +1 -1
  5. package/dist/brandsync-wc/{p-db46376b.entry.js → p-051d3064.entry.js} +1 -1
  6. package/dist/brandsync-wc/{p-c054f493.entry.js → p-05c7de28.entry.js} +1 -1
  7. package/dist/brandsync-wc/{p-639946e7.entry.js → p-062cfa34.entry.js} +1 -1
  8. package/dist/brandsync-wc/p-0e39b9cc.entry.js +1 -0
  9. package/dist/brandsync-wc/{p-9fb8848c.entry.js → p-114d2fd8.entry.js} +1 -1
  10. package/dist/brandsync-wc/{p-ef68f29b.entry.js → p-153da845.entry.js} +1 -1
  11. package/dist/brandsync-wc/{p-6754dfa9.entry.js → p-1c0db4d6.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-4a1a5d6e.entry.js → p-1f7208cb.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-43617f2e.entry.js → p-235ae012.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-2700a63e.entry.js → p-275072dd.entry.js} +1 -1
  15. package/dist/brandsync-wc/p-2891d40b.entry.js +1 -0
  16. package/dist/brandsync-wc/p-29027559.entry.js +1 -0
  17. package/dist/brandsync-wc/p-2e7a1082.entry.js +1 -0
  18. package/dist/brandsync-wc/{p-604553a0.entry.js → p-3176d1d3.entry.js} +1 -1
  19. package/dist/brandsync-wc/p-33e44094.entry.js +1 -0
  20. package/dist/brandsync-wc/p-360452c2.entry.js +1 -0
  21. package/dist/brandsync-wc/p-3ec74d35.entry.js +1 -0
  22. package/dist/brandsync-wc/p-4574a707.entry.js +1 -0
  23. package/dist/brandsync-wc/p-4e5dcaff.entry.js +1 -0
  24. package/dist/brandsync-wc/p-612cf79c.entry.js +1 -0
  25. package/dist/brandsync-wc/p-61c1a2a3.entry.js +1 -0
  26. package/dist/brandsync-wc/{p-11224cab.entry.js → p-6331de9c.entry.js} +1 -1
  27. package/dist/brandsync-wc/{p-d03eba2b.entry.js → p-652d4068.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-a603a13a.entry.js → p-6bf2f116.entry.js} +1 -1
  29. package/dist/brandsync-wc/{p-9b72cc12.entry.js → p-70f64b25.entry.js} +1 -1
  30. package/dist/brandsync-wc/{p-44bfdd4b.entry.js → p-7b00dd36.entry.js} +1 -1
  31. package/dist/brandsync-wc/p-7c94e6ae.entry.js +1 -0
  32. package/dist/brandsync-wc/p-835a8dc7.entry.js +1 -0
  33. package/dist/brandsync-wc/{p-0aca5f0e.entry.js → p-8ee0153b.entry.js} +1 -1
  34. package/dist/brandsync-wc/{p-bb77098b.entry.js → p-9f65f998.entry.js} +1 -1
  35. package/dist/brandsync-wc/p-9f8852a0.entry.js +1 -0
  36. package/dist/brandsync-wc/{p-DuyFft7h.js → p-AgoOSYvW.js} +2 -2
  37. package/dist/brandsync-wc/{p-a8e2a2b2.entry.js → p-a09e157f.entry.js} +1 -1
  38. package/dist/brandsync-wc/p-a0d5a620.entry.js +1 -0
  39. package/dist/brandsync-wc/{p-525504c2.entry.js → p-a5feaad4.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-cbaa19ab.entry.js → p-a92eec48.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-57e1dc35.entry.js → p-ae978c9a.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-f2ce9a1f.entry.js → p-bbcc47b0.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-fcd4ec60.entry.js → p-bc69a96c.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-80cf96ff.entry.js → p-be2c1740.entry.js} +1 -1
  45. package/dist/brandsync-wc/p-bf53ad52.entry.js +1 -0
  46. package/dist/brandsync-wc/p-c10d2529.entry.js +1 -0
  47. package/dist/brandsync-wc/{p-abda1d69.entry.js → p-c4de155c.entry.js} +1 -1
  48. package/dist/brandsync-wc/p-c7f4c114.entry.js +1 -0
  49. package/dist/brandsync-wc/{p-52d5f6a9.entry.js → p-cfcf3f0a.entry.js} +1 -1
  50. package/dist/brandsync-wc/p-de7c946d.entry.js +1 -0
  51. package/dist/brandsync-wc/{p-a8cdf449.entry.js → p-e9b43754.entry.js} +1 -1
  52. package/dist/brandsync-wc/{p-c5011746.entry.js → p-ee7da23d.entry.js} +1 -1
  53. package/dist/brandsync-wc/{p-4bff9b4b.entry.js → p-f006d962.entry.js} +1 -1
  54. package/dist/brandsync-wc/p-f074f94e.entry.js +1 -0
  55. package/dist/brandsync-wc/p-f7d47c17.entry.js +1 -0
  56. package/dist/brandsync-wc/{p-7609221f.entry.js → p-fc58c663.entry.js} +1 -1
  57. package/dist/brandsync-wc/{p-a3a4d541.entry.js → p-fddc7bd1.entry.js} +1 -1
  58. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  59. package/dist/cjs/bs-accordion.cjs.entry.js +2 -2
  60. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +2 -2
  61. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  62. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  63. package/dist/cjs/bs-attachment-list.cjs.entry.js +3 -3
  64. package/dist/cjs/bs-attachment.cjs.entry.js +2 -2
  65. package/dist/cjs/bs-avatar.cjs.entry.js +1 -1
  66. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  67. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +2 -2
  68. package/dist/cjs/bs-breadcrumb.cjs.entry.js +1 -1
  69. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +2 -2
  70. package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
  71. package/dist/cjs/bs-button.cjs.entry.js +23 -4
  72. package/dist/cjs/bs-card.cjs.entry.js +2 -2
  73. package/dist/cjs/bs-carousel.cjs.entry.js +196 -0
  74. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +3 -3
  75. package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
  76. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +3 -3
  77. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
  78. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +2 -2
  79. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +2 -2
  80. package/dist/cjs/bs-checkbox.cjs.entry.js +48 -3
  81. package/dist/cjs/bs-chip-filter.cjs.entry.js +3 -3
  82. package/dist/cjs/bs-chip-informative.cjs.entry.js +3 -3
  83. package/dist/cjs/bs-chip-input.cjs.entry.js +3 -3
  84. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +2 -2
  85. package/dist/cjs/bs-composer.cjs.entry.js +2 -2
  86. package/dist/cjs/bs-data-table.cjs.entry.js +4 -4
  87. package/dist/cjs/bs-dialog.cjs.entry.js +2 -2
  88. package/dist/cjs/bs-file-upload-item.cjs.entry.js +85 -0
  89. package/dist/cjs/bs-file-upload.cjs.entry.js +110 -0
  90. package/dist/cjs/bs-icon-button.cjs.entry.js +22 -3
  91. package/dist/cjs/bs-inline-tab.cjs.entry.js +7 -3
  92. package/dist/cjs/bs-input.cjs.entry.js +69 -5
  93. package/dist/cjs/bs-logo.cjs.entry.js +1 -1
  94. package/dist/cjs/bs-menu-item.cjs.entry.js +2 -2
  95. package/dist/cjs/bs-menu.cjs.entry.js +25 -3
  96. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +2 -2
  97. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +2 -2
  98. package/dist/cjs/bs-navigation-header.cjs.entry.js +2 -2
  99. package/dist/cjs/bs-pagination.cjs.entry.js +2 -2
  100. package/dist/cjs/bs-progress-linear.cjs.entry.js +8 -3
  101. package/dist/cjs/bs-progress.cjs.entry.js +8 -3
  102. package/dist/cjs/bs-radio.cjs.entry.js +81 -12
  103. package/dist/cjs/bs-slider.cjs.entry.js +54 -2
  104. package/dist/cjs/bs-snackbar.cjs.entry.js +2 -2
  105. package/dist/cjs/bs-source-link.cjs.entry.js +4 -4
  106. package/dist/cjs/bs-stepper-step.cjs.entry.js +3 -3
  107. package/dist/cjs/bs-stepper.cjs.entry.js +3 -2
  108. package/dist/cjs/bs-switch.cjs.entry.js +36 -3
  109. package/dist/cjs/bs-tab.cjs.entry.js +7 -3
  110. package/dist/cjs/bs-tabs.cjs.entry.js +51 -2
  111. package/dist/cjs/bs-toast.cjs.entry.js +2 -2
  112. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  113. package/dist/cjs/{index-D7e6DfLV.js → index-kk9YXF2S.js} +43 -5
  114. package/dist/cjs/loader.cjs.js +2 -2
  115. package/dist/collection/collection-manifest.json +3 -0
  116. package/dist/collection/components/bs-a11y.cmp.test.js +54 -0
  117. package/dist/collection/components/bs-accordion/bs-accordion.cmp.test.js +5 -0
  118. package/dist/collection/components/bs-accordion/bs-accordion.css +5 -5
  119. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  120. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  121. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  122. package/dist/collection/components/bs-attachment/bs-attachment.css +1 -1
  123. package/dist/collection/components/bs-attachment-list/bs-attachment-list.css +1 -1
  124. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  125. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.css +1 -1
  126. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  127. package/dist/collection/components/bs-button/bs-button/bs-button.css +17 -10
  128. package/dist/collection/components/bs-button/bs-button/bs-button.js +16 -3
  129. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +16 -3
  130. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  131. package/dist/collection/components/bs-card/bs-card.css +4 -0
  132. package/dist/collection/components/bs-carousel/bs-carousel.cmp.test.js +198 -0
  133. package/dist/collection/components/bs-carousel/bs-carousel.css +107 -0
  134. package/dist/collection/components/bs-carousel/bs-carousel.js +531 -0
  135. package/dist/collection/components/bs-carousel/bs-carousel.stories.js +68 -0
  136. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.css +1 -1
  137. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  138. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  139. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.css +3 -3
  140. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  141. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  142. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  143. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  144. package/dist/collection/components/bs-checkbox/bs-checkbox.css +8 -1
  145. package/dist/collection/components/bs-checkbox/bs-checkbox.js +100 -2
  146. package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.css +4 -4
  147. package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.js +1 -1
  148. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.css +4 -4
  149. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.js +1 -1
  150. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.css +5 -5
  151. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.js +1 -1
  152. package/dist/collection/components/bs-composer/bs-composer.js +1 -1
  153. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +1 -1
  154. package/dist/collection/components/bs-data-table/bs-data-table.css +1 -1
  155. package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
  156. package/dist/collection/components/bs-dialog/bs-dialog.css +5 -1
  157. package/dist/collection/components/bs-file-upload/bs-file-upload.cmp.test.js +119 -0
  158. package/dist/collection/components/bs-file-upload/bs-file-upload.css +139 -0
  159. package/dist/collection/components/bs-file-upload/bs-file-upload.js +342 -0
  160. package/dist/collection/components/bs-file-upload/bs-file-upload.stories.js +116 -0
  161. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.cmp.test.js +115 -0
  162. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.css +154 -0
  163. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +329 -0
  164. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.stories.js +54 -0
  165. package/dist/collection/components/bs-form-association.cmp.test.js +172 -0
  166. package/dist/collection/components/bs-input/bs-input.css +10 -4
  167. package/dist/collection/components/bs-input/bs-input.js +82 -4
  168. package/dist/collection/components/bs-keyboard-nav.cmp.test.js +100 -0
  169. package/dist/collection/components/bs-menu/bs-menu.css +4 -0
  170. package/dist/collection/components/bs-menu/bs-menu.js +33 -1
  171. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  172. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  173. package/dist/collection/components/bs-progress/bs-progress.js +27 -2
  174. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +27 -2
  175. package/dist/collection/components/bs-radio/bs-radio.cmp.test.js +4 -10
  176. package/dist/collection/components/bs-radio/bs-radio.css +7 -1
  177. package/dist/collection/components/bs-radio/bs-radio.js +92 -14
  178. package/dist/collection/components/bs-radio/bs-radio.stories.js +1 -10
  179. package/dist/collection/components/bs-slider/bs-slider.js +68 -2
  180. package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
  181. package/dist/collection/components/bs-source-link/bs-source-link.css +2 -2
  182. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  183. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +3 -2
  184. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.css +3 -3
  185. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  186. package/dist/collection/components/bs-switch/bs-switch.css +10 -1
  187. package/dist/collection/components/bs-switch/bs-switch.js +69 -2
  188. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.css +2 -2
  189. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +24 -1
  190. package/dist/collection/components/bs-tab/bs-tab/bs-tab.css +2 -2
  191. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +24 -1
  192. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +57 -1
  193. package/dist/collection/components/bs-toast/bs-toast.js +1 -1
  194. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  195. package/dist/collection/components/forms/forms.stories.js +63 -0
  196. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +1 -1
  197. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  198. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  199. package/dist/collection/test/helpers/conventions.js +46 -0
  200. package/dist/collection/test/helpers/conventions.unit.test.js +38 -0
  201. package/dist/components/bs-accordion.js +1 -1
  202. package/dist/components/bs-ai-disclaimer.js +1 -1
  203. package/dist/components/bs-ai-greeting.js +1 -1
  204. package/dist/components/bs-ai-thinking.js +1 -1
  205. package/dist/components/bs-attachment-list.js +1 -1
  206. package/dist/components/bs-attachment.js +1 -1
  207. package/dist/components/bs-avatar.js +1 -1
  208. package/dist/components/bs-badge.js +1 -1
  209. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  210. package/dist/components/bs-breadcrumb.js +1 -1
  211. package/dist/components/bs-breadcrumbs.js +1 -1
  212. package/dist/components/bs-button-skeleton.js +1 -1
  213. package/dist/components/bs-button.js +1 -1
  214. package/dist/components/bs-card.js +1 -1
  215. package/dist/components/bs-carousel.d.ts +11 -0
  216. package/dist/components/bs-carousel.js +1 -0
  217. package/dist/components/bs-chatbot-feedback.js +1 -1
  218. package/dist/components/bs-chatbot-header.js +1 -1
  219. package/dist/components/bs-chatbot-response-action.js +1 -1
  220. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  221. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  222. package/dist/components/bs-checkbox-skeleton.js +1 -1
  223. package/dist/components/bs-checkbox.js +1 -1
  224. package/dist/components/bs-chip-filter.js +1 -1
  225. package/dist/components/bs-chip-informative.js +1 -1
  226. package/dist/components/bs-chip-input.js +1 -1
  227. package/dist/components/bs-composer-status-banner.js +1 -1
  228. package/dist/components/bs-composer.js +1 -1
  229. package/dist/components/bs-data-table.js +1 -1
  230. package/dist/components/bs-dialog.js +1 -1
  231. package/dist/components/bs-file-upload-item.d.ts +11 -0
  232. package/dist/components/bs-file-upload-item.js +1 -0
  233. package/dist/components/bs-file-upload.d.ts +11 -0
  234. package/dist/components/bs-file-upload.js +1 -0
  235. package/dist/components/bs-icon-button.js +1 -1
  236. package/dist/components/bs-inline-tab.js +1 -1
  237. package/dist/components/bs-input.js +1 -1
  238. package/dist/components/bs-logo.js +1 -1
  239. package/dist/components/bs-menu-item.js +1 -1
  240. package/dist/components/bs-menu.js +1 -1
  241. package/dist/components/bs-navigation-drawer-item.js +1 -1
  242. package/dist/components/bs-navigation-drawer.js +1 -1
  243. package/dist/components/bs-navigation-header.js +1 -1
  244. package/dist/components/bs-pagination.js +1 -1
  245. package/dist/components/bs-progress-linear.js +1 -1
  246. package/dist/components/bs-progress.js +1 -1
  247. package/dist/components/bs-radio.js +1 -1
  248. package/dist/components/bs-slider.js +1 -1
  249. package/dist/components/bs-snackbar.js +1 -1
  250. package/dist/components/bs-source-link.js +1 -1
  251. package/dist/components/bs-stepper-step.js +1 -1
  252. package/dist/components/bs-stepper.js +1 -1
  253. package/dist/components/bs-switch.js +1 -1
  254. package/dist/components/bs-tab.js +1 -1
  255. package/dist/components/bs-tabs.js +1 -1
  256. package/dist/components/bs-toast.js +1 -1
  257. package/dist/components/bs-tooltip.js +1 -1
  258. package/dist/components/index.js +1 -1
  259. package/dist/components/{p-B8eut73c.js → p-BA3c9Rom.js} +1 -1
  260. package/dist/components/{p-DIezWdNu.js → p-BfEyD6Ku.js} +1 -1
  261. package/dist/components/p-BkHYJIyj.js +1 -0
  262. package/dist/components/p-Buly0d5G.js +1 -0
  263. package/dist/components/p-CpUHnsq9.js +1 -0
  264. package/dist/components/p-EtXc94lJ.js +1 -0
  265. package/dist/components/{p-mnGJPH85.js → p-JYlmcxBn.js} +1 -1
  266. package/dist/components/{p-BhvV55-6.js → p-R2MlkUzD.js} +1 -1
  267. package/dist/components/p-wei0Ija2.js +1 -0
  268. package/dist/esm/brandsync-wc.js +3 -3
  269. package/dist/esm/bs-accordion.entry.js +2 -2
  270. package/dist/esm/bs-ai-disclaimer.entry.js +2 -2
  271. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  272. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  273. package/dist/esm/bs-attachment-list.entry.js +3 -3
  274. package/dist/esm/bs-attachment.entry.js +2 -2
  275. package/dist/esm/bs-avatar.entry.js +1 -1
  276. package/dist/esm/bs-badge.entry.js +1 -1
  277. package/dist/esm/bs-breadcrumb-overflow.entry.js +2 -2
  278. package/dist/esm/bs-breadcrumb.entry.js +1 -1
  279. package/dist/esm/bs-breadcrumbs.entry.js +2 -2
  280. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  281. package/dist/esm/bs-button.entry.js +23 -4
  282. package/dist/esm/bs-card.entry.js +2 -2
  283. package/dist/esm/bs-carousel.entry.js +194 -0
  284. package/dist/esm/bs-chatbot-feedback.entry.js +3 -3
  285. package/dist/esm/bs-chatbot-header.entry.js +2 -2
  286. package/dist/esm/bs-chatbot-response-action.entry.js +3 -3
  287. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  288. package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
  289. package/dist/esm/bs-checkbox-skeleton.entry.js +2 -2
  290. package/dist/esm/bs-checkbox.entry.js +48 -3
  291. package/dist/esm/bs-chip-filter.entry.js +3 -3
  292. package/dist/esm/bs-chip-informative.entry.js +3 -3
  293. package/dist/esm/bs-chip-input.entry.js +3 -3
  294. package/dist/esm/bs-composer-status-banner.entry.js +2 -2
  295. package/dist/esm/bs-composer.entry.js +2 -2
  296. package/dist/esm/bs-data-table.entry.js +4 -4
  297. package/dist/esm/bs-dialog.entry.js +2 -2
  298. package/dist/esm/bs-file-upload-item.entry.js +83 -0
  299. package/dist/esm/bs-file-upload.entry.js +108 -0
  300. package/dist/esm/bs-icon-button.entry.js +22 -3
  301. package/dist/esm/bs-inline-tab.entry.js +7 -3
  302. package/dist/esm/bs-input.entry.js +69 -5
  303. package/dist/esm/bs-logo.entry.js +1 -1
  304. package/dist/esm/bs-menu-item.entry.js +2 -2
  305. package/dist/esm/bs-menu.entry.js +25 -3
  306. package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
  307. package/dist/esm/bs-navigation-drawer.entry.js +2 -2
  308. package/dist/esm/bs-navigation-header.entry.js +2 -2
  309. package/dist/esm/bs-pagination.entry.js +2 -2
  310. package/dist/esm/bs-progress-linear.entry.js +8 -3
  311. package/dist/esm/bs-progress.entry.js +8 -3
  312. package/dist/esm/bs-radio.entry.js +81 -12
  313. package/dist/esm/bs-slider.entry.js +54 -2
  314. package/dist/esm/bs-snackbar.entry.js +2 -2
  315. package/dist/esm/bs-source-link.entry.js +4 -4
  316. package/dist/esm/bs-stepper-step.entry.js +3 -3
  317. package/dist/esm/bs-stepper.entry.js +3 -2
  318. package/dist/esm/bs-switch.entry.js +36 -3
  319. package/dist/esm/bs-tab.entry.js +7 -3
  320. package/dist/esm/bs-tabs.entry.js +51 -2
  321. package/dist/esm/bs-toast.entry.js +2 -2
  322. package/dist/esm/bs-tooltip.entry.js +2 -2
  323. package/dist/esm/{index-DuyFft7h.js → index-AgoOSYvW.js} +43 -5
  324. package/dist/esm/loader.js +3 -3
  325. package/dist/types/components/bs-a11y.cmp.test.d.ts +1 -0
  326. package/dist/types/components/bs-button/bs-button/bs-button.d.ts +4 -1
  327. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.d.ts +4 -1
  328. package/dist/types/components/bs-carousel/bs-carousel.cmp.test.d.ts +1 -0
  329. package/dist/types/components/bs-carousel/bs-carousel.d.ts +101 -0
  330. package/dist/types/components/bs-carousel/bs-carousel.stories.d.ts +17 -0
  331. package/dist/types/components/bs-checkbox/bs-checkbox.d.ts +12 -0
  332. package/dist/types/components/bs-file-upload/bs-file-upload.cmp.test.d.ts +1 -0
  333. package/dist/types/components/bs-file-upload/bs-file-upload.d.ts +59 -0
  334. package/dist/types/components/bs-file-upload/bs-file-upload.stories.d.ts +21 -0
  335. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.cmp.test.d.ts +1 -0
  336. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.d.ts +58 -0
  337. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.stories.d.ts +18 -0
  338. package/dist/types/components/bs-form-association.cmp.test.d.ts +1 -0
  339. package/dist/types/components/bs-input/bs-input.d.ts +12 -0
  340. package/dist/types/components/bs-keyboard-nav.cmp.test.d.ts +1 -0
  341. package/dist/types/components/bs-menu/bs-menu.d.ts +4 -0
  342. package/dist/types/components/bs-progress/bs-progress.d.ts +5 -0
  343. package/dist/types/components/bs-progress-linear/bs-progress-linear.d.ts +5 -0
  344. package/dist/types/components/bs-radio/bs-radio.d.ts +23 -9
  345. package/dist/types/components/bs-slider/bs-slider.d.ts +9 -0
  346. package/dist/types/components/bs-switch/bs-switch.d.ts +10 -0
  347. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.d.ts +4 -0
  348. package/dist/types/components/bs-tab/bs-tab/bs-tab.d.ts +4 -0
  349. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.d.ts +7 -0
  350. package/dist/types/components/forms/forms.stories.d.ts +6 -0
  351. package/dist/types/components.d.ts +735 -7
  352. package/dist/types/test/helpers/conventions.d.ts +21 -0
  353. package/dist/types/test/helpers/conventions.unit.test.d.ts +1 -0
  354. package/package.json +2 -1
  355. package/readme.md +14 -0
  356. package/dist/brandsync-wc/p-00f733ef.entry.js +0 -1
  357. package/dist/brandsync-wc/p-18c59979.entry.js +0 -1
  358. package/dist/brandsync-wc/p-3cb58df8.entry.js +0 -1
  359. package/dist/brandsync-wc/p-3ed5b215.entry.js +0 -1
  360. package/dist/brandsync-wc/p-413a1ee0.entry.js +0 -1
  361. package/dist/brandsync-wc/p-512dafc6.entry.js +0 -1
  362. package/dist/brandsync-wc/p-57609703.entry.js +0 -1
  363. package/dist/brandsync-wc/p-6bf8a5bd.entry.js +0 -1
  364. package/dist/brandsync-wc/p-6c769a1d.entry.js +0 -1
  365. package/dist/brandsync-wc/p-6d0c054b.entry.js +0 -1
  366. package/dist/brandsync-wc/p-7b9598d9.entry.js +0 -1
  367. package/dist/brandsync-wc/p-98021881.entry.js +0 -1
  368. package/dist/brandsync-wc/p-a96856fd.entry.js +0 -1
  369. package/dist/brandsync-wc/p-bb68e236.entry.js +0 -1
  370. package/dist/brandsync-wc/p-cfb49342.entry.js +0 -1
  371. package/dist/brandsync-wc/p-e2ac61c4.entry.js +0 -1
  372. package/dist/brandsync-wc/p-f714683d.entry.js +0 -1
  373. package/dist/brandsync-wc/p-fe778b6b.entry.js +0 -1
  374. package/dist/components/p-3gs695M6.js +0 -1
  375. package/dist/components/p-BaxFLlKS.js +0 -1
  376. package/dist/components/p-DKMMCLxx.js +0 -1
@@ -45,6 +45,11 @@ export class BsProgress {
45
45
  * `indeterminate` never shows a label regardless of this prop, since there's no percentage to
46
46
  * show. Defaults to `true`. */
47
47
  showLabel = true;
48
+ /** Accessible name for the progress bar (e.g. "Uploading report"). Required for assistive tech --
49
+ * a `role="progressbar"` with no name is an axe-core `aria-progressbar-name` violation. Setting
50
+ * `aria-label` on the host doesn't reach the inner element across the shadow boundary, so this
51
+ * prop binds it directly -- same pattern as `bs-button`'s `ariaLabel`. */
52
+ ariaLabel = null;
48
53
  get clampedValue() {
49
54
  return Math.min(100, Math.max(0, this.value));
50
55
  }
@@ -64,7 +69,7 @@ export class BsProgress {
64
69
  const isDeterminate = this.type === 'determinate';
65
70
  const value = this.clampedValue;
66
71
  const dashOffset = circumference * (1 - value / 100);
67
- return (h("div", { key: 'be12c5ee854fc0d82e66719458355543627f28b5', part: "container", class: "bs-progress" }, h("div", { key: '59eb972d0aeb33feea5ef4e8f4fa4eef99f7fcde', class: "bs-progress__box", style: { width: `${diameter}px`, height: `${diameter}px` }, role: "progressbar", "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("svg", { class: "bs-progress__ring", width: diameter, height: diameter, viewBox: `0 0 ${diameter} ${diameter}` }, h("circle", { part: "track", class: "bs-progress__track", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none" }), h("circle", { part: "arc", class: "bs-progress__arc", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none", "stroke-linecap": "round", "stroke-dasharray": circumference, "stroke-dashoffset": dashOffset }))) : (
72
+ return (h("div", { key: 'add8dfafdbee4eaa9712c6e2ba6ddff6f8f6c47f', part: "container", class: "bs-progress" }, h("div", { key: 'fd89c73aa247fc3770187a45dc4681857e257d4e', class: "bs-progress__box", style: { width: `${diameter}px`, height: `${diameter}px` }, role: "progressbar", "aria-label": this.ariaLabel, "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("svg", { class: "bs-progress__ring", width: diameter, height: diameter, viewBox: `0 0 ${diameter} ${diameter}` }, h("circle", { part: "track", class: "bs-progress__track", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none" }), h("circle", { part: "arc", class: "bs-progress__arc", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none", "stroke-linecap": "round", "stroke-dasharray": circumference, "stroke-dashoffset": dashOffset }))) : (
68
73
  // Figma's indeterminate ring is a fading "comet tail" (transparent -> solid color),
69
74
  // not a flat-colored partial arc -- SVG has no angular/conic gradient primitive, so a
70
75
  // CSS conic-gradient (color varying by angle) + a radial-gradient mask (carving the
@@ -73,7 +78,7 @@ export class BsProgress {
73
78
  h("div", { part: "arc", class: "bs-progress__spinner", style: {
74
79
  '--bs-progress-spinner-stroke-width': `${this.strokeWidth}px`,
75
80
  '--bs-progress-spinner-sweep': `${INDETERMINATE_SWEEP_DEGREES}deg`,
76
- } }))), isDeterminate && this.showLabel && (h("span", { key: 'dab01ef700c872174a1f0ff9eff0ef9b534f6f89', part: "label", class: `bs-progress__label bs-progress__label--${this.size}` }, value, "%"))));
81
+ } }))), isDeterminate && this.showLabel && (h("span", { key: '9c86dc195204f28c06e05bf09f823241bf9f3a86', part: "label", class: `bs-progress__label bs-progress__label--${this.size}` }, value, "%"))));
77
82
  }
78
83
  static get is() { return "bs-progress"; }
79
84
  static get encapsulation() { return "shadow"; }
@@ -206,6 +211,26 @@ export class BsProgress {
206
211
  "reflect": false,
207
212
  "attribute": "show-label",
208
213
  "defaultValue": "true"
214
+ },
215
+ "ariaLabel": {
216
+ "type": "string",
217
+ "mutable": false,
218
+ "complexType": {
219
+ "original": "string | null",
220
+ "resolved": "string",
221
+ "references": {}
222
+ },
223
+ "required": false,
224
+ "optional": false,
225
+ "docs": {
226
+ "tags": [],
227
+ "text": "Accessible name for the progress bar (e.g. \"Uploading report\"). Required for assistive tech --\na `role=\"progressbar\"` with no name is an axe-core `aria-progressbar-name` violation. Setting\n`aria-label` on the host doesn't reach the inner element across the shadow boundary, so this\nprop binds it directly -- same pattern as `bs-button`'s `ariaLabel`."
228
+ },
229
+ "getter": false,
230
+ "setter": false,
231
+ "reflect": false,
232
+ "attribute": "aria-label",
233
+ "defaultValue": "null"
209
234
  }
210
235
  };
211
236
  }
@@ -40,19 +40,24 @@ export class BsProgressLinear {
40
40
  /** Shows the slotted label below the bar. When `false`, or when no content is slotted, the
41
41
  * label wrapper isn't rendered at all. Defaults to `true`. */
42
42
  showLabel = true;
43
+ /** Accessible name for the progress bar (e.g. "Uploading report"). Required for assistive tech --
44
+ * a `role="progressbar"` with no name is an axe-core `aria-progressbar-name` violation. Setting
45
+ * `aria-label` on the host doesn't reach the inner element across the shadow boundary, so this
46
+ * prop binds it directly -- same pattern as `bs-button`'s `ariaLabel`. */
47
+ ariaLabel = null;
43
48
  get clampedValue() {
44
49
  return Math.min(100, Math.max(0, this.value));
45
50
  }
46
51
  render() {
47
52
  const isDeterminate = this.type === 'determinate';
48
53
  const value = this.clampedValue;
49
- return (h("div", { key: 'a740b860487e2f163fe7103191bd34b7fb1633ad', part: "container", class: "bs-progress-linear" }, h("div", { key: 'a1400ddeb695c45edaff4a6501589e191237c0aa', part: "track", class: `bs-progress-linear__track bs-progress-linear__track--${this.size}`, role: "progressbar", "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("div", { part: "fill", class: "bs-progress-linear__fill", style: { width: `${value}%` } })) : (
54
+ return (h("div", { key: '279dbb0cd17b9584b500570d58cc09bd91e8a0d7', part: "container", class: "bs-progress-linear" }, h("div", { key: '9299c229184d172f743fb7fb0dce2a9c55a4496f', part: "track", class: `bs-progress-linear__track bs-progress-linear__track--${this.size}`, role: "progressbar", "aria-label": this.ariaLabel, "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("div", { part: "fill", class: "bs-progress-linear__fill", style: { width: `${value}%` } })) : (
50
55
  // Figma's indeterminate bar is a soft "comet" gradient segment (transparent -> blue ->
51
56
  // transparent) sliding left-to-right across the track's full width in a loop -- the
52
57
  // same fade concept as bs-progress's indeterminate ring's conic-gradient comet tail,
53
58
  // but along a straight line via a linear-gradient + `transform: translateX(...)`
54
59
  // keyframe animation instead of a rotating conic-gradient.
55
- h("div", { part: "fill", class: "bs-progress-linear__fill bs-progress-linear__fill--indeterminate" }))), this.showLabel && this.hasLabelContent && (h("span", { key: '30ea4feeb5fa09cea28a89b515366b8d08fe6425', part: "label", class: "bs-progress-linear__label" }, h("slot", { key: 'b361ed81b85f3cd76ccb885ab1a0de5ec10b97b9' })))));
60
+ h("div", { part: "fill", class: "bs-progress-linear__fill bs-progress-linear__fill--indeterminate" }))), this.showLabel && this.hasLabelContent && (h("span", { key: '51a75cae90630fec1d8757d483c239a534385aa7', part: "label", class: "bs-progress-linear__label" }, h("slot", { key: '7e6639ff4f7219cbb3fa09d7c7570268534530b4' })))));
56
61
  }
57
62
  // The default slot's assigned content lives in the host's light DOM regardless of whether a
58
63
  // <slot> is currently rendered in the shadow tree, so this can be computed directly from the
@@ -180,6 +185,26 @@ export class BsProgressLinear {
180
185
  "reflect": false,
181
186
  "attribute": "show-label",
182
187
  "defaultValue": "true"
188
+ },
189
+ "ariaLabel": {
190
+ "type": "string",
191
+ "mutable": false,
192
+ "complexType": {
193
+ "original": "string | null",
194
+ "resolved": "string",
195
+ "references": {}
196
+ },
197
+ "required": false,
198
+ "optional": false,
199
+ "docs": {
200
+ "tags": [],
201
+ "text": "Accessible name for the progress bar (e.g. \"Uploading report\"). Required for assistive tech --\na `role=\"progressbar\"` with no name is an axe-core `aria-progressbar-name` violation. Setting\n`aria-label` on the host doesn't reach the inner element across the shadow boundary, so this\nprop binds it directly -- same pattern as `bs-button`'s `ariaLabel`."
202
+ },
203
+ "getter": false,
204
+ "setter": false,
205
+ "reflect": false,
206
+ "attribute": "aria-label",
207
+ "defaultValue": "null"
183
208
  }
184
209
  };
185
210
  }
@@ -30,14 +30,9 @@ describe('bs-radio', () => {
30
30
  expect(input).toEqualAttribute('name', 'fruit');
31
31
  expect(input).toEqualAttribute('value', 'apple');
32
32
  });
33
- // NOTE: each <bs-radio> has its own shadow root, so its native <input> lives in its own separate
34
- // DOM tree. Per the HTML spec, a "radio button group" is scoped to a single tree -- shadow DOM
35
- // boundaries mean same-`name` inputs in *different* <bs-radio> instances are NOT part of the same
36
- // native radio group, so clicking one does not natively uncheck another. This is a real, tested
37
- // limitation of composing native <input type="radio"> inside separate shadow roots, not a bug in
38
- // this component -- see bs-radio.mdx's Accessibility section for the documented gap. Within a
39
- // single instance's own shadow root the native input still behaves like a normal radio input.
40
- it('same-name bs-radio instances do NOT natively uncheck each other, since each lives in its own shadow root', async () => {
33
+ // Native same-name grouping can't cross each <bs-radio>'s own shadow root, so the component
34
+ // implements mutual exclusion itself (see bs-radio.tsx's `name` prop doc).
35
+ it('same-name bs-radio instances uncheck each other', async () => {
41
36
  const { root, waitForChanges } = await render(h("div", null, h("bs-radio", { name: "fruit", value: "apple" }), h("bs-radio", { name: "fruit", value: "banana" })));
42
37
  const [first, second] = Array.from(root.querySelectorAll('bs-radio'));
43
38
  const firstInput = first.shadowRoot.querySelector('input');
@@ -48,8 +43,7 @@ describe('bs-radio', () => {
48
43
  secondInput.click();
49
44
  await waitForChanges();
50
45
  expect(secondInput.checked).toBe(true);
51
- // Real (shadow-DOM-scoped) native behavior: the first input is untouched, not unchecked.
52
- expect(firstInput.checked).toBe(true);
46
+ expect(firstInput.checked).toBe(false);
53
47
  });
54
48
  describe('disabled', () => {
55
49
  it('sets the disabled attribute on the native input', async () => {
@@ -34,7 +34,7 @@
34
34
  .bs-radio__input {
35
35
  position: absolute;
36
36
  top: 0;
37
- left: 0;
37
+ inset-inline-start: 0;
38
38
  width: 100%;
39
39
  height: 100%;
40
40
  margin: 0;
@@ -162,3 +162,9 @@
162
162
  .bs-radio--disabled .bs-radio__label {
163
163
  color: var(--bs-radio-label-disabled);
164
164
  }
165
+
166
+ /* Windows High Contrast: ring and dot in system colors. */
167
+ @media (forced-colors: active) {
168
+ .bs-radio__circle { border: 2px solid ButtonText; forced-color-adjust: none; background: Canvas; }
169
+ .bs-radio__dot { background: Highlight; }
170
+ }
@@ -22,13 +22,10 @@ import { h } from "@stencil/core";
22
22
  export class BsRadio {
23
23
  el;
24
24
  /** The native radio input's `name` attribute. Passed straight through to the native input inside.
25
- * NOTE: because each `bs-radio` renders its own shadow root, native `<input type="radio">`
26
- * mutual-exclusion grouping (which the HTML spec scopes to a single DOM tree) does NOT extend
27
- * across separate `bs-radio` instances sharing the same `name` -- checking one will not natively
28
- * uncheck another. Within a single instance this still behaves like a normal radio input. See
29
- * bs-radio.mdx's Accessibility section for this known gap; consumers building a group currently
30
- * need to manage mutual exclusivity themselves (e.g. via `bsChange`) until a `bs-radio-group`
31
- * wrapper exists. */
25
+ * Also the group key: `bs-radio` elements sharing a `name` within the same root (document or
26
+ * shadow root) behave as one radio group -- checking one unchecks the others, arrow keys move
27
+ * between them, and only one is in the tab order. Native grouping can't cross each radio's own
28
+ * shadow root, so this component implements it itself. */
32
29
  name;
33
30
  /** The native radio input's `value` attribute -- read from `event.target.value`, or used when
34
31
  * wiring the group up to a form. */
@@ -40,9 +37,65 @@ export class BsRadio {
40
37
  disabled = false;
41
38
  /** Emitted with this radio's own `value` when it becomes checked via user interaction. Since
42
39
  * native same-`name` grouping doesn't cross shadow-root boundaries (see the `name` prop's doc),
43
- * a consumer wiring up a group of `bs-radio`s must itself set `checked = false` on the others in
44
- * response to this event -- there's no automatic un-checking to rely on here. */
40
+ * a consumer wiring up a group of `bs-radio`s does not need to un-check the others itself. */
45
41
  bsChange;
42
+ internals;
43
+ initialChecked = false;
44
+ /** Whether any radio in this group is checked -- drives roving tabindex (an unchecked radio is
45
+ * only tabbable while nothing in its group is checked). */
46
+ groupHasChecked = false;
47
+ /** Other `bs-radio`s sharing this one's `name` within the same root, in DOM order (including
48
+ * this one). */
49
+ groupMembers() {
50
+ if (!this.name)
51
+ return [this.el];
52
+ const root = this.el.getRootNode();
53
+ return Array.from(root.querySelectorAll('bs-radio')).filter(r => r.name === this.name);
54
+ }
55
+ onCheckedChange() {
56
+ this.internals?.setFormValue?.(this.checked ? this.value ?? 'on' : null);
57
+ if (this.checked) {
58
+ this.groupMembers().forEach(r => {
59
+ if (r !== this.el && r.checked)
60
+ r.checked = false;
61
+ });
62
+ }
63
+ this.refreshGroupState();
64
+ }
65
+ onAnyRadioChange() {
66
+ this.refreshGroupState();
67
+ }
68
+ refreshGroupState() {
69
+ this.groupHasChecked = this.groupMembers().some(r => r.checked);
70
+ }
71
+ componentWillLoad() {
72
+ this.initialChecked = this.checked;
73
+ this.internals?.setFormValue?.(this.checked ? this.value ?? 'on' : null);
74
+ }
75
+ componentDidLoad() {
76
+ this.refreshGroupState();
77
+ }
78
+ /** Called by the browser when the surrounding `<form>` is reset. */
79
+ formResetCallback() {
80
+ this.checked = this.initialChecked;
81
+ }
82
+ /** WAI-ARIA radio group pattern: arrows move selection (and focus) to the previous/next enabled
83
+ * radio in the group, wrapping at the ends. */
84
+ onKeyDown = (ev) => {
85
+ const forward = ev.key === 'ArrowRight' || ev.key === 'ArrowDown';
86
+ const backward = ev.key === 'ArrowLeft' || ev.key === 'ArrowUp';
87
+ if (!forward && !backward)
88
+ return;
89
+ const members = this.groupMembers().filter(r => !r.disabled);
90
+ if (members.length < 2)
91
+ return;
92
+ ev.preventDefault();
93
+ const idx = members.indexOf(this.el);
94
+ const next = members[(idx + (forward ? 1 : -1) + members.length) % members.length];
95
+ const input = next.shadowRoot?.querySelector('input');
96
+ input?.click();
97
+ input?.focus();
98
+ };
46
99
  onChange = (ev) => {
47
100
  const checked = ev.target.checked;
48
101
  this.checked = checked;
@@ -51,11 +104,12 @@ export class BsRadio {
51
104
  }
52
105
  };
53
106
  render() {
54
- return (h("label", { key: '0301eaf2b9f71e6e1eb7189ee424afa3eb66e3ea', class: `bs-radio ${this.disabled ? 'bs-radio--disabled' : ''}` }, h("input", { key: 'dd12fc11f43171fbfa1955747477d2e538f0d1db', class: "bs-radio__input", type: "radio", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, onChange: this.onChange }), h("span", { key: '3d6af7472becac1be3f080093587c54e5acbbb04', class: "bs-radio__hit-area" }, h("span", { key: 'e6b7384a4e87d6c216030bd4c5831b91f1bd409f', class: "bs-radio__state-layer" }, h("span", { key: '4b7c97752705660b97a6fb8b2157b5fcd37cd2e9', part: "circle", class: `bs-radio__circle ${this.checked ? 'bs-radio__circle--selected' : ''}` }, this.checked && h("span", { key: '5944fa6ac89d4806e8f243d8f216939f35d3f56f', part: "dot", class: "bs-radio__dot" })))), h("span", { key: 'df20ccc3d840b649f2b7a3ca627282e9a9ba480c', part: "label", class: "bs-radio__label" }, h("slot", { key: 'fc042c04e85bf2991b463d2fe0147ed9724c2aa5' }))));
107
+ return (h("label", { key: '84bfc39d5714d15c45936c8150b9bd7473b79574', class: `bs-radio ${this.disabled ? 'bs-radio--disabled' : ''}` }, h("input", { key: '0a118d5e59f4d33b0411f7be0fba08a706cda298', class: "bs-radio__input", type: "radio", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, tabIndex: this.checked || !this.groupHasChecked ? 0 : -1, onKeyDown: this.onKeyDown, onChange: this.onChange }), h("span", { key: '889dadd67126819c3d39a5823d48be58a9c71f9f', class: "bs-radio__hit-area" }, h("span", { key: '5bbed4d44bcf4d810693b5912a90855d680540d0', class: "bs-radio__state-layer" }, h("span", { key: '509389527b876127ca456900e3bb4aa21c735f72', part: "circle", class: `bs-radio__circle ${this.checked ? 'bs-radio__circle--selected' : ''}` }, this.checked && h("span", { key: '9a7e335f9646eb72fb06fb0ca9436e763c3ad278', part: "dot", class: "bs-radio__dot" })))), h("span", { key: '2017790d3d99355b4eb93e3659c809df58c61065', part: "label", class: "bs-radio__label" }, h("slot", { key: '199450bb26f7966cdd64b04c78e3015300d793c9' }))));
55
108
  }
56
109
  static get is() { return "bs-radio"; }
57
110
  static get encapsulation() { return "shadow"; }
58
111
  static get delegatesFocus() { return true; }
112
+ static get formAssociated() { return true; }
59
113
  static get originalStyleUrls() {
60
114
  return {
61
115
  "$": ["bs-radio.css"]
@@ -80,11 +134,11 @@ export class BsRadio {
80
134
  "optional": false,
81
135
  "docs": {
82
136
  "tags": [],
83
- "text": "The native radio input's `name` attribute. Passed straight through to the native input inside.\nNOTE: because each `bs-radio` renders its own shadow root, native `<input type=\"radio\">`\nmutual-exclusion grouping (which the HTML spec scopes to a single DOM tree) does NOT extend\nacross separate `bs-radio` instances sharing the same `name` -- checking one will not natively\nuncheck another. Within a single instance this still behaves like a normal radio input. See\nbs-radio.mdx's Accessibility section for this known gap; consumers building a group currently\nneed to manage mutual exclusivity themselves (e.g. via `bsChange`) until a `bs-radio-group`\nwrapper exists."
137
+ "text": "The native radio input's `name` attribute. Passed straight through to the native input inside.\nAlso the group key: `bs-radio` elements sharing a `name` within the same root (document or\nshadow root) behave as one radio group -- checking one unchecks the others, arrow keys move\nbetween them, and only one is in the tab order. Native grouping can't cross each radio's own\nshadow root, so this component implements it itself."
84
138
  },
85
139
  "getter": false,
86
140
  "setter": false,
87
- "reflect": false,
141
+ "reflect": true,
88
142
  "attribute": "name"
89
143
  },
90
144
  "value": {
@@ -142,12 +196,17 @@ export class BsRadio {
142
196
  },
143
197
  "getter": false,
144
198
  "setter": false,
145
- "reflect": false,
199
+ "reflect": true,
146
200
  "attribute": "disabled",
147
201
  "defaultValue": "false"
148
202
  }
149
203
  };
150
204
  }
205
+ static get states() {
206
+ return {
207
+ "groupHasChecked": {}
208
+ };
209
+ }
151
210
  static get events() {
152
211
  return [{
153
212
  "method": "bsChange",
@@ -157,7 +216,7 @@ export class BsRadio {
157
216
  "composed": true,
158
217
  "docs": {
159
218
  "tags": [],
160
- "text": "Emitted with this radio's own `value` when it becomes checked via user interaction. Since\nnative same-`name` grouping doesn't cross shadow-root boundaries (see the `name` prop's doc),\na consumer wiring up a group of `bs-radio`s must itself set `checked = false` on the others in\nresponse to this event -- there's no automatic un-checking to rely on here."
219
+ "text": "Emitted with this radio's own `value` when it becomes checked via user interaction. Since\nnative same-`name` grouping doesn't cross shadow-root boundaries (see the `name` prop's doc),\na consumer wiring up a group of `bs-radio`s does not need to un-check the others itself."
161
220
  },
162
221
  "complexType": {
163
222
  "original": "string",
@@ -167,4 +226,23 @@ export class BsRadio {
167
226
  }];
168
227
  }
169
228
  static get elementRef() { return "el"; }
229
+ static get watchers() {
230
+ return [{
231
+ "propName": "checked",
232
+ "methodName": "onCheckedChange"
233
+ }, {
234
+ "propName": "value",
235
+ "methodName": "onCheckedChange"
236
+ }];
237
+ }
238
+ static get listeners() {
239
+ return [{
240
+ "name": "bsChange",
241
+ "method": "onAnyRadioChange",
242
+ "target": "document",
243
+ "capture": false,
244
+ "passive": false
245
+ }];
246
+ }
247
+ static get attachInternalsMemberName() { return "internals"; }
170
248
  }
@@ -35,19 +35,10 @@ export const DisabledChecked = {
35
35
  name: 'Disabled + checked',
36
36
  args: { disabled: true, checked: true },
37
37
  };
38
- // Native same-name radio grouping doesn't extend across separate <bs-radio> instances (each has
39
- // its own shadow root -- see bs-radio.mdx's Accessibility section), so this story manages mutual
40
- // exclusivity itself by listening for bsChange and unchecking the siblings.
41
- const onGroupChange = (ev) => {
42
- const group = ev.target.closest('[data-radio-group]');
43
- group?.querySelectorAll('bs-radio').forEach(radio => {
44
- radio.checked = radio === ev.target;
45
- });
46
- };
47
38
  export const Group = {
48
39
  name: 'Radio group',
49
40
  render: () => html `
50
- <div data-radio-group style="display: flex; flex-direction: column; gap: 8px;" @bsChange=${onGroupChange}>
41
+ <div role="radiogroup" aria-label="Options" style="display: flex; flex-direction: column; gap: 8px;">
51
42
  <bs-radio name="group-story" value="option-1" checked>Option 1</bs-radio>
52
43
  <bs-radio name="group-story" value="option-2">Option 2</bs-radio>
53
44
  <bs-radio name="group-story" value="option-3">Option 3</bs-radio>
@@ -32,6 +32,9 @@ export class BsSlider {
32
32
  * and `segmented` use one thumb (`value`). `segmented` additionally draws `segments` tick marks
33
33
  * along the track. */
34
34
  type = 'default';
35
+ /** The `name` the value is submitted under in a surrounding `<form>`'s `FormData`. `type="range"`
36
+ * submits two entries under this name: the start value, then the end value. */
37
+ name;
35
38
  /** Shows/hides the "Label" text and editable percentage field(s) above the track, and the
36
39
  * static min/max bound labels flanking it. When `false`, only the bare track (and its
37
40
  * knob/knobs) renders. */
@@ -78,6 +81,33 @@ export class BsSlider {
78
81
  /** Emitted when `valueStart`/`valueEnd` changes via user interaction, with both current values.
79
82
  * Only fires for `type="range"`. */
80
83
  bsRangeChange;
84
+ internals;
85
+ initial = { value: 0, valueStart: undefined, valueEnd: undefined };
86
+ componentWillLoad() {
87
+ this.initial = { value: this.value, valueStart: this.valueStart, valueEnd: this.valueEnd };
88
+ this.syncFormValue();
89
+ }
90
+ syncFormValue() {
91
+ if (!this.internals?.setFormValue)
92
+ return;
93
+ if (this.type === 'range') {
94
+ const data = new FormData();
95
+ if (this.name) {
96
+ data.append(this.name, String(this.effectiveValueStart));
97
+ data.append(this.name, String(this.effectiveValueEnd));
98
+ }
99
+ this.internals.setFormValue(data);
100
+ }
101
+ else {
102
+ this.internals.setFormValue(String(this.value));
103
+ }
104
+ }
105
+ /** Called by the browser when the surrounding `<form>` is reset. */
106
+ formResetCallback() {
107
+ this.value = this.initial.value;
108
+ this.valueStart = this.initial.valueStart;
109
+ this.valueEnd = this.initial.valueEnd;
110
+ }
81
111
  get effectiveValueStart() {
82
112
  return this.valueStart ?? this.min;
83
113
  }
@@ -199,11 +229,12 @@ export class BsSlider {
199
229
  render() {
200
230
  const isRange = this.type === 'range';
201
231
  const rootClasses = ['bs-slider', this.disabled ? 'bs-slider--disabled' : ''].filter(Boolean).join(' ');
202
- return (h("div", { key: 'eea08bf9b13476683a75c02c3b2880acc2a5830d', class: rootClasses }, this.showLabel && (h("div", { key: 'ce7a0f60767b6eccf537e121ab588a273d82170b', class: "bs-slider__header" }, h("span", { key: '9de6ffe94a76e896e007d9928e11f1599443aa76', id: "bs-slider-label", part: "label", class: "bs-slider__label" }, this.label), isRange ? (h("span", { class: "bs-slider__value-fields" }, this.renderPercentField(this.percent(this.effectiveValueStart), this.onStartPercentFieldChange, this.ariaLabel ?? 'Start value'), h("span", { class: "bs-slider__separator" }, "\u2013"), this.renderPercentField(this.percent(this.effectiveValueEnd), this.onEndPercentFieldChange, this.ariaLabel ? `${this.ariaLabel} end` : 'End value'))) : (this.renderPercentField(this.percent(this.value), this.onPercentFieldChange, this.ariaLabel ? `${this.ariaLabel} value` : 'Value')))), h("div", { key: '7c1d900c13c1890b587c5ac4e326434b44e33895', class: "bs-slider__row" }, this.showLabel && (h("span", { key: '5ed265337a997272765c4a94a985081dc25cebea', part: "bound", class: "bs-slider__bound" }, this.min)), isRange ? this.renderRangeThumbs() : this.renderSingleThumb(), this.showLabel && (h("span", { key: '63da44c53587366349113f9f7f7ec0bc290dad35', part: "bound", class: "bs-slider__bound" }, this.max)))));
232
+ return (h("div", { key: 'f2db9b3d88d97f4183227dca165e4943586100b7', class: rootClasses }, this.showLabel && (h("div", { key: 'b5898da538670e481c1e0c0120f8ac67fec49ffe', class: "bs-slider__header" }, h("span", { key: '3f0257ee85b18fdce7a51825f9e3005b7c8c8985', id: "bs-slider-label", part: "label", class: "bs-slider__label" }, this.label), isRange ? (h("span", { class: "bs-slider__value-fields" }, this.renderPercentField(this.percent(this.effectiveValueStart), this.onStartPercentFieldChange, this.ariaLabel ?? 'Start value'), h("span", { class: "bs-slider__separator" }, "\u2013"), this.renderPercentField(this.percent(this.effectiveValueEnd), this.onEndPercentFieldChange, this.ariaLabel ? `${this.ariaLabel} end` : 'End value'))) : (this.renderPercentField(this.percent(this.value), this.onPercentFieldChange, this.ariaLabel ? `${this.ariaLabel} value` : 'Value')))), h("div", { key: '74adbfd1c596cb0de4bf484cd2ffbc2f283d9074', class: "bs-slider__row" }, this.showLabel && (h("span", { key: '334f03095f5246d4156e7853a1b9d3ddcb594f0a', part: "bound", class: "bs-slider__bound" }, this.min)), isRange ? this.renderRangeThumbs() : this.renderSingleThumb(), this.showLabel && (h("span", { key: '5173a19292bd029121cf9412a2087383700ec61b', part: "bound", class: "bs-slider__bound" }, this.max)))));
203
233
  }
204
234
  static get is() { return "bs-slider"; }
205
235
  static get encapsulation() { return "shadow"; }
206
236
  static get delegatesFocus() { return true; }
237
+ static get formAssociated() { return true; }
207
238
  static get originalStyleUrls() {
208
239
  return {
209
240
  "$": ["bs-slider.css"]
@@ -242,6 +273,25 @@ export class BsSlider {
242
273
  "attribute": "type",
243
274
  "defaultValue": "'default'"
244
275
  },
276
+ "name": {
277
+ "type": "string",
278
+ "mutable": false,
279
+ "complexType": {
280
+ "original": "string",
281
+ "resolved": "string",
282
+ "references": {}
283
+ },
284
+ "required": false,
285
+ "optional": true,
286
+ "docs": {
287
+ "tags": [],
288
+ "text": "The `name` the value is submitted under in a surrounding `<form>`'s `FormData`. `type=\"range\"`\nsubmits two entries under this name: the start value, then the end value."
289
+ },
290
+ "getter": false,
291
+ "setter": false,
292
+ "reflect": true,
293
+ "attribute": "name"
294
+ },
245
295
  "showLabel": {
246
296
  "type": "boolean",
247
297
  "mutable": false,
@@ -436,7 +486,7 @@ export class BsSlider {
436
486
  },
437
487
  "getter": false,
438
488
  "setter": false,
439
- "reflect": false,
489
+ "reflect": true,
440
490
  "attribute": "disabled",
441
491
  "defaultValue": "false"
442
492
  },
@@ -496,4 +546,20 @@ export class BsSlider {
496
546
  }];
497
547
  }
498
548
  static get elementRef() { return "el"; }
549
+ static get watchers() {
550
+ return [{
551
+ "propName": "value",
552
+ "methodName": "syncFormValue"
553
+ }, {
554
+ "propName": "valueStart",
555
+ "methodName": "syncFormValue"
556
+ }, {
557
+ "propName": "valueEnd",
558
+ "methodName": "syncFormValue"
559
+ }, {
560
+ "propName": "type",
561
+ "methodName": "syncFormValue"
562
+ }];
563
+ }
564
+ static get attachInternalsMemberName() { return "internals"; }
499
565
  }
@@ -61,7 +61,7 @@ export class BsSnackbar {
61
61
  this.bsDismiss.emit();
62
62
  };
63
63
  render() {
64
- return (h("div", { key: '21d9ad89971ec2f6c8a546bb601caf9fe0fdeaad', part: "container", class: `bs-snackbar bs-snackbar--${this.variant}`, role: "status", "aria-live": this.variant === 'error' ? 'assertive' : 'polite' }, h("div", { key: '4c0a6eeae82f0183269952d12203030c8e38707f', class: "bs-snackbar__content" }, h("span", { key: 'd7702b65066518434b571fdc2a9bba4b715daf80', part: "icon", class: "bs-snackbar__icon", "aria-hidden": "true" }, this.loading ? h("span", { class: "bs-snackbar__spinner" }) : h(CheckCircleIcon, null)), h("span", { key: '943f72a2a1829a2859daef2cf1852d35d8da8a1e', part: "message", class: "bs-snackbar__message" }, h("slot", { key: 'c5cc1160992c936603abb57201beabe1e6eb4664' }))), h("div", { key: '31764bce2583aa5c794084ea1f532b5bca7e1f8c', class: "bs-snackbar__actions" }, this.actionLabel && (h("bs-button", { key: 'b7ae59d32bd58358f9090251f0fcd033925b4cba', part: "action", variant: ACTION_VARIANT[this.variant], size: "sm", onClick: this.onAction }, this.actionLabel)), h("bs-icon-button", { key: 'ce995bb3ba94cd67628bb0d281395b700c6075df', part: "close", variant: "subtle", size: "md", ariaLabel: "Dismiss", onClick: this.onDismiss }, h(CloseIcon, { key: '51562d0658077d511ce46466386735456c4b6a77' })))));
64
+ return (h("div", { key: 'c84de130f993938339fd16d9f534f1da18fe6c0a', part: "container", class: `bs-snackbar bs-snackbar--${this.variant}`, role: "status", "aria-live": this.variant === 'error' ? 'assertive' : 'polite' }, h("div", { key: '0941f900229f6b3208f8268d34b0cde49e4dba22', class: "bs-snackbar__content" }, h("span", { key: 'cf89eff5ea640950573f9b610d6eff46e5d0154e', part: "icon", class: "bs-snackbar__icon", "aria-hidden": "true" }, this.loading ? h("span", { class: "bs-snackbar__spinner" }) : h(CheckCircleIcon, null)), h("span", { key: 'd4ae7e62ecaea7b53962b08d69bae435ecf0a810', part: "message", class: "bs-snackbar__message" }, h("slot", { key: 'a99ec601f27f79f42fc61cd14c0fed742d2fa334' }))), h("div", { key: 'a139c0287e2eacb26ccbd604ff0343bca23eeb5d', class: "bs-snackbar__actions" }, this.actionLabel && (h("bs-button", { key: 'f22c4a63903fdb50da087ab2c38dd076298a12ed', part: "action", variant: ACTION_VARIANT[this.variant], size: "sm", onClick: this.onAction }, this.actionLabel)), h("bs-icon-button", { key: '4cd5c8f367ee71f11dad1f6f47ff1cdf6436a764', part: "close", variant: "subtle", size: "md", ariaLabel: "Dismiss", onClick: this.onDismiss }, h(CloseIcon, { key: 'a52e6af7acf7c95a54aa6cb5237f2b53e30ea601' })))));
65
65
  }
66
66
  static get is() { return "bs-snackbar"; }
67
67
  static get encapsulation() { return "shadow"; }
@@ -24,7 +24,7 @@
24
24
  border: none;
25
25
  border-radius: var(--bs-source-link-radius);
26
26
  font-family: inherit;
27
- text-align: left;
27
+ text-align: start;
28
28
  text-decoration: none;
29
29
  cursor: pointer;
30
30
  transition: background-color var(--bs-duration-fast) var(--bs-easing-standard);
@@ -84,7 +84,7 @@
84
84
  display: flex;
85
85
  align-items: center;
86
86
  gap: var(--bs-spacing-50);
87
- padding-left: 22px;
87
+ padding-inline-start: 22px;
88
88
  }
89
89
 
90
90
  .bs-source-link__source,
@@ -51,8 +51,8 @@ export class BsSourceLink {
51
51
  };
52
52
  render() {
53
53
  const inner = [
54
- h("span", { key: 'c492c873401ffec62e4079b9254f9e8d82ef2160', class: "bs-source-link__left" }, h("span", { key: 'aa6e13547e540d9bd649a31fd185edb75db27af0', class: "bs-source-link__filename-row" }, h("span", { key: 'f540d25f1504c5a70dfcff3d46b69545b30cc3ce', part: "icon", class: "bs-source-link__icon" }, h("slot", { key: 'bb9c39f0f55161fef91d693da05d966ed0e8b52f', name: "icon" }, h(FileTextIcon, { key: 'cd092cc8acc6c4dc94b1fd0df3813eea321a6322' }))), h("p", { key: '8b80cdf2e65bba6f79ce4df85df9e7891b4688eb', part: "filename", class: "bs-source-link__filename" }, this.fileName)), h("span", { key: '6b1403dc64d26773e61a385ce79c15a9e526bca8', class: "bs-source-link__meta" }, this.sourceName && (h("span", { key: 'a10ac29439339287e551cd5d67a68b57ba32a732', part: "source", class: "bs-source-link__source" }, this.sourceName)), this.sourceName && this.version && h("span", { key: '219e40bd91dd4c9f830f2124474408c10d660241', class: "bs-source-link__dot", "aria-hidden": "true" }), this.version && (h("span", { key: '47da27d3758239a74b6f3baf246c5cdc90dbeaec', part: "version", class: "bs-source-link__version" }, this.version)))),
55
- h("span", { key: '383bdb322e97930920f11312d6b3e475fc490c0e', part: "arrow", class: "bs-source-link__arrow", "aria-hidden": "true" }, h(ArrowUpRightIcon, { key: '543df594e433598dfe2275fab1e0af2ba3431788' })),
54
+ h("span", { key: '5c6382ad80cc971f302da1d80af089306a612e73', class: "bs-source-link__left" }, h("span", { key: '07c8591469e23fe4304846e9282cea0a9eae3ba2', class: "bs-source-link__filename-row" }, h("span", { key: 'ffdb99816134be212cc4d30ebdbf8dd8bcdc085f', part: "icon", class: "bs-source-link__icon" }, h("slot", { key: '475cd85bcb5caa1d3a82d08318731ef4bdf6cb60', name: "icon" }, h(FileTextIcon, { key: '6915810a89f15b823b2b744d30db5b2cefff8162' }))), h("p", { key: '14facc92c71f91701654ea2ce2f9f2ef4b980c5e', part: "filename", class: "bs-source-link__filename" }, this.fileName)), h("span", { key: 'ecd7080f8bc8ce5d7e169f917aaae275ac7a474e', class: "bs-source-link__meta" }, this.sourceName && (h("span", { key: 'f1697d3e278225b26909ec1c40ce2c4cb51c884b', part: "source", class: "bs-source-link__source" }, this.sourceName)), this.sourceName && this.version && h("span", { key: '8efe25341dc7c68ec9c66b91f5f399c9b8ed659f', class: "bs-source-link__dot", "aria-hidden": "true" }), this.version && (h("span", { key: 'cddd46792f911af65434554e56d1cb72d2b88cae', part: "version", class: "bs-source-link__version" }, this.version)))),
55
+ h("span", { key: '166b5070329771cd7e8f20689e5b257d3f6f1fd0', part: "arrow", class: "bs-source-link__arrow", "aria-hidden": "true" }, h(ArrowUpRightIcon, { key: 'c2a820c6b36ead5f1bbfd74d84c70cb9894c8f1f' })),
56
56
  ];
57
57
  return this.href ? (h("a", { class: "bs-source-link", href: this.href, target: this.target, rel: "noopener noreferrer", onClick: this.onClick }, inner)) : (h("button", { type: "button", class: "bs-source-link", onClick: this.onClick }, inner));
58
58
  }
@@ -1,4 +1,4 @@
1
- import { h } from "@stencil/core";
1
+ import { h, Host } from "@stencil/core";
2
2
  /**
3
3
  * A sequence of named steps showing overall progress through a multi-step flow (e.g. a checkout,
4
4
  * an onboarding wizard) -- each step reads as enabled (not yet reached), current, done, error, or
@@ -61,7 +61,8 @@ export class BsStepper {
61
61
  });
62
62
  }
63
63
  render() {
64
- return h("slot", { key: 'b2c5468b93468b4cab41afb39364bb9f84eea22f', onSlotchange: this.onSlotChange });
64
+ // role="list" so each bs-stepper-step's role="listitem" has the required parent.
65
+ return (h(Host, { key: 'a9c1838c549b0c3ea9cc145624bc38e9edb32a51', role: "list" }, h("slot", { key: '549a18512ad246b5988008b8d2b6a9142e5380a5', onSlotchange: this.onSlotChange })));
65
66
  }
66
67
  static get is() { return "bs-stepper"; }
67
68
  static get encapsulation() { return "shadow"; }
@@ -147,7 +147,7 @@
147
147
  the icon's own right edge to .top's right edge with no positioning assumptions to get wrong. */
148
148
  :host(.bs-stepper-step--horizontal) .bs-stepper-step__connector {
149
149
  flex: 1 1 auto;
150
- margin-left: var(--bs-stepper-step-gap);
150
+ margin-inline-start: var(--bs-stepper-step-gap);
151
151
  }
152
152
 
153
153
  :host(.bs-stepper-step--vertical) .bs-stepper-step__connector {
@@ -218,8 +218,8 @@
218
218
  }
219
219
 
220
220
  :host(.bs-stepper-step--vertical) .bs-stepper-step__label {
221
- margin-left: var(--bs-stepper-step-gap);
222
- text-align: left;
221
+ margin-inline-start: var(--bs-stepper-step-gap);
222
+ text-align: start;
223
223
  }
224
224
 
225
225
  /* white-space: nowrap -- .label is deliberately narrowed to just the icon's width (see .label's own
@@ -57,7 +57,7 @@ export class BsStepperStep {
57
57
  }
58
58
  render() {
59
59
  const state = this.state;
60
- return (h(Host, { key: 'b67337d4b2effe8ff1fa464ca099898e02b73bc5', role: "listitem", class: `bs-stepper-step--${this.direction}` }, h("div", { key: '0d7c52bc6dc8be1686a89d8b385176ec2cf0e968', class: "bs-stepper-step__top" }, h("span", { key: '4a4a42431c2b989c4a6f16c08f9f6bc208d13b9e', part: "icon", class: `bs-stepper-step__icon bs-stepper-step__icon--${state}` }, state === 'current' && h("span", { key: '4ec68f74e86a332a3d44114b82c4cbaa9490cf27', class: "bs-stepper-step__icon-dot" }), state === 'done' && h(CheckIcon, { key: '4697669ec3c6a9b214383319a6217783a24baf9c' }), state === 'error' && h(ExclamationIcon, { key: '2c08710bdde154d466dea2009162a7935333d3e8' })), h("span", { key: '4d51b40f0436d2874d8734735b1a68ccae8d7a00', part: "connector", class: "bs-stepper-step__connector", "aria-hidden": "true" }, h("span", { key: '93657587c505a5ccd279acc21afcef2c92147a12', class: "bs-stepper-step__connector-line" }))), h("span", { key: 'f887e799dea83c792ce6547f08e28f9d9f8f3c45', part: "label", class: `bs-stepper-step__label bs-stepper-step__label--${state}` }, h("span", { key: 'b233032bf31f50bb83ad6ba5f8fed4893fe7f2fe', part: "name", class: "bs-stepper-step__name" }, this.name), this.showDescription && this.description && (h("span", { key: '17ff926779a02578b700d3086a84911ffcca33a1', part: "description", class: "bs-stepper-step__description" }, this.description)))));
60
+ return (h(Host, { key: 'fe270c356f44c25a3a12450eec8e1a7657d4d88f', role: "listitem", class: `bs-stepper-step--${this.direction}` }, h("div", { key: '1bc833a5ca917d141078e3b69e9e455ec8d877ad', class: "bs-stepper-step__top" }, h("span", { key: 'aa91b7e91d600b08c389be456b28f4a65450d72e', part: "icon", class: `bs-stepper-step__icon bs-stepper-step__icon--${state}` }, state === 'current' && h("span", { key: 'e3fee594c97bf9f5d47e1b922bf9adffa1c0d438', class: "bs-stepper-step__icon-dot" }), state === 'done' && h(CheckIcon, { key: '4930e7653d7c81c8fcf18920fdd0a9a0e975eee4' }), state === 'error' && h(ExclamationIcon, { key: 'ca757e769dd4411c987bf5f22b7cda904d9fd067' })), h("span", { key: '2b0621849727e355d4d0944087ff1d9eacb5b5f7', part: "connector", class: "bs-stepper-step__connector", "aria-hidden": "true" }, h("span", { key: '0d08b9591ea2c9a967ebf85dce105f667cb86370', class: "bs-stepper-step__connector-line" }))), h("span", { key: '3bd0490ef190a4e4f33f822383be230e4e20e7dc', part: "label", class: `bs-stepper-step__label bs-stepper-step__label--${state}` }, h("span", { key: 'cf6cb4f72fcf546a954085d125a72548cfe521fe', part: "name", class: "bs-stepper-step__name" }, this.name), this.showDescription && this.description && (h("span", { key: 'b0ef234071983ae8c87d68440e7bfa4a491a35f5', part: "description", class: "bs-stepper-step__description" }, this.description)))));
61
61
  }
62
62
  static get is() { return "bs-stepper-step"; }
63
63
  static get encapsulation() { return "shadow"; }
@@ -85,7 +85,7 @@
85
85
  .bs-switch__input {
86
86
  position: absolute;
87
87
  top: 0;
88
- left: 0;
88
+ inset-inline-start: 0;
89
89
  width: 100%;
90
90
  height: 100%;
91
91
  margin: 0;
@@ -194,3 +194,12 @@
194
194
  .bs-switch--disabled .bs-switch__label {
195
195
  color: var(--bs-switch-label-color-disabled);
196
196
  }
197
+
198
+ /* Windows High Contrast: track outline + knob in system colors; checked = Highlight. */
199
+ @media (forced-colors: active) {
200
+ .bs-switch__track { border: 2px solid ButtonText; forced-color-adjust: none; background: Canvas; }
201
+ .bs-switch__track--checked { background: Highlight; border-color: Highlight; }
202
+ .bs-switch__knob { background: ButtonText; }
203
+ .bs-switch__track--checked .bs-switch__knob { background: HighlightText; }
204
+ .bs-switch__track--disabled { border-color: GrayText; }
205
+ }