@brandsync/wc 1.2.0 → 1.4.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 (281) hide show
  1. package/custom-elements.json +453 -91
  2. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  3. package/dist/brandsync-wc/{p-a35d5ea7.entry.js → p-03a8fbbf.entry.js} +1 -1
  4. package/dist/brandsync-wc/{p-41732f18.entry.js → p-0534d0a9.entry.js} +1 -1
  5. package/dist/brandsync-wc/{p-3e6d37a4.entry.js → p-07043faa.entry.js} +1 -1
  6. package/dist/brandsync-wc/{p-b6425ac2.entry.js → p-0c7f993e.entry.js} +1 -1
  7. package/dist/brandsync-wc/{p-c76ca89f.entry.js → p-1030c935.entry.js} +1 -1
  8. package/dist/brandsync-wc/{p-ce08c9d7.entry.js → p-10ad342b.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-03f9fd54.entry.js → p-113ed9df.entry.js} +1 -1
  10. package/dist/brandsync-wc/{p-f6fafbd6.entry.js → p-117a52dc.entry.js} +1 -1
  11. package/dist/brandsync-wc/{p-17dbd4b3.entry.js → p-17cef278.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-6970a24c.entry.js → p-1d50cff0.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-7f14660d.entry.js → p-2eb6db9f.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-a73bfd31.entry.js → p-3145cc00.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-1e9ceb9d.entry.js → p-31fe38dd.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-650b7eef.entry.js → p-3b3ef658.entry.js} +1 -1
  17. package/dist/brandsync-wc/{p-18e0cff4.entry.js → p-3c060d84.entry.js} +1 -1
  18. package/dist/brandsync-wc/{p-7091f130.entry.js → p-3eecd03e.entry.js} +1 -1
  19. package/dist/brandsync-wc/p-4567c1d0.entry.js +1 -0
  20. package/dist/brandsync-wc/{p-ca74c7d9.entry.js → p-4ba7690a.entry.js} +1 -1
  21. package/dist/brandsync-wc/{p-673546bf.entry.js → p-507b5c4b.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-a597dc2b.entry.js → p-5bf18d08.entry.js} +1 -1
  23. package/dist/brandsync-wc/{p-260e14de.entry.js → p-6b850a6c.entry.js} +1 -1
  24. package/dist/brandsync-wc/{p-ed704126.entry.js → p-6dc7fc4a.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-04d6aa95.entry.js → p-6fa6a576.entry.js} +1 -1
  26. package/dist/brandsync-wc/{p-0299e8e1.entry.js → p-700fb759.entry.js} +1 -1
  27. package/dist/brandsync-wc/{p-67bc2ec8.entry.js → p-826c08ac.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-cff188cb.entry.js → p-8dec61f7.entry.js} +1 -1
  29. package/dist/brandsync-wc/p-93984743.entry.js +1 -0
  30. package/dist/brandsync-wc/{p-f94449da.entry.js → p-984e9878.entry.js} +1 -1
  31. package/dist/brandsync-wc/p-9a2f986d.entry.js +1 -0
  32. package/dist/brandsync-wc/{p-aac6b59b.entry.js → p-9bc67188.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-CvfB8CQv.js → p-CcPfH1dJ.js} +2 -2
  34. package/dist/brandsync-wc/{p-c8480d21.entry.js → p-a6bc823e.entry.js} +1 -1
  35. package/dist/brandsync-wc/p-b1353da8.entry.js +1 -0
  36. package/dist/brandsync-wc/{p-718ce85f.entry.js → p-b176c547.entry.js} +1 -1
  37. package/dist/brandsync-wc/{p-2e7586dd.entry.js → p-b22038b2.entry.js} +1 -1
  38. package/dist/brandsync-wc/p-b5ebbc76.entry.js +1 -0
  39. package/dist/brandsync-wc/{p-fc9d52d4.entry.js → p-b6dba2bf.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-f652d79c.entry.js → p-ba650ca9.entry.js} +1 -1
  41. package/dist/brandsync-wc/p-baea8952.entry.js +1 -0
  42. package/dist/brandsync-wc/{p-8f2cfe31.entry.js → p-bbd238cd.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-0921ca0d.entry.js → p-bca1149c.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-72e02bd5.entry.js → p-c89ab519.entry.js} +1 -1
  45. package/dist/brandsync-wc/{p-2a7cc40c.entry.js → p-c8fabfd0.entry.js} +1 -1
  46. package/dist/brandsync-wc/{p-c7b9a5c7.entry.js → p-d5ea1b72.entry.js} +1 -1
  47. package/dist/brandsync-wc/{p-8b5f4ca7.entry.js → p-d7ce9505.entry.js} +1 -1
  48. package/dist/brandsync-wc/{p-b63362e7.entry.js → p-da6fa359.entry.js} +1 -1
  49. package/dist/brandsync-wc/p-dc974d62.entry.js +1 -0
  50. package/dist/brandsync-wc/p-df0fc514.entry.js +1 -0
  51. package/dist/brandsync-wc/{p-a16afeaa.entry.js → p-e5b1d254.entry.js} +1 -1
  52. package/dist/brandsync-wc/{p-205deb32.entry.js → p-f0df6653.entry.js} +1 -1
  53. package/dist/brandsync-wc/{p-7655e741.entry.js → p-fc52e0df.entry.js} +1 -1
  54. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  55. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +2 -2
  56. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  57. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  58. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  59. package/dist/cjs/bs-attachment.cjs.entry.js +1 -1
  60. package/dist/cjs/bs-avatar.cjs.entry.js +1 -1
  61. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  62. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +1 -1
  63. package/dist/cjs/bs-breadcrumb.cjs.entry.js +1 -1
  64. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +2 -2
  65. package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
  66. package/dist/cjs/bs-button.cjs.entry.js +2 -2
  67. package/dist/cjs/bs-card.cjs.entry.js +1 -1
  68. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
  69. package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
  70. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
  71. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
  72. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +2 -2
  73. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +2 -2
  74. package/dist/cjs/bs-checkbox.cjs.entry.js +1 -1
  75. package/dist/cjs/bs-chip-filter.cjs.entry.js +10 -6
  76. package/dist/cjs/bs-chip-informative.cjs.entry.js +1 -1
  77. package/dist/cjs/bs-chip-input.cjs.entry.js +1 -1
  78. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +1 -1
  79. package/dist/cjs/bs-composer.cjs.entry.js +26 -3
  80. package/dist/cjs/bs-data-table.cjs.entry.js +21 -4
  81. package/dist/cjs/bs-dialog.cjs.entry.js +1 -1
  82. package/dist/cjs/bs-icon-button.cjs.entry.js +3 -3
  83. package/dist/cjs/bs-inline-tab.cjs.entry.js +2 -2
  84. package/dist/cjs/bs-input.cjs.entry.js +3 -3
  85. package/dist/cjs/bs-logo.cjs.entry.js +1 -1
  86. package/dist/cjs/bs-menu-item.cjs.entry.js +2 -2
  87. package/dist/cjs/bs-menu.cjs.entry.js +2 -2
  88. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +2 -2
  89. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +3 -3
  90. package/dist/cjs/bs-navigation-header.cjs.entry.js +3 -3
  91. package/dist/cjs/bs-pagination.cjs.entry.js +2 -2
  92. package/dist/cjs/bs-progress-linear.cjs.entry.js +65 -0
  93. package/dist/cjs/bs-progress.cjs.entry.js +69 -0
  94. package/dist/cjs/bs-radio.cjs.entry.js +2 -2
  95. package/dist/cjs/bs-slider.cjs.entry.js +2 -2
  96. package/dist/cjs/bs-snackbar.cjs.entry.js +13 -3
  97. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  98. package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
  99. package/dist/cjs/bs-stepper.cjs.entry.js +2 -2
  100. package/dist/cjs/bs-switch.cjs.entry.js +2 -2
  101. package/dist/cjs/bs-tab.cjs.entry.js +2 -2
  102. package/dist/cjs/bs-tabs.cjs.entry.js +2 -2
  103. package/dist/cjs/bs-toast.cjs.entry.js +2 -2
  104. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  105. package/dist/cjs/{index-CdAh5BFg.js → index-Bj1mNOtg.js} +17 -0
  106. package/dist/cjs/loader.cjs.js +2 -2
  107. package/dist/collection/collection-manifest.json +2 -0
  108. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  109. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  110. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  111. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  112. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  113. package/dist/collection/components/bs-button/bs-button/bs-button.css +15 -5
  114. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.css +15 -7
  115. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +1 -1
  116. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  117. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  118. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  119. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  120. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  121. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  122. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  123. package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.cmp.test.js +19 -5
  124. package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.js +11 -7
  125. package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +44 -0
  126. package/dist/collection/components/bs-composer/bs-composer.js +29 -6
  127. package/dist/collection/components/bs-data-table/bs-data-table.cmp.test.js +108 -0
  128. package/dist/collection/components/bs-data-table/bs-data-table.css +5 -3
  129. package/dist/collection/components/bs-data-table/bs-data-table.js +40 -2
  130. package/dist/collection/components/bs-input/bs-input.js +2 -2
  131. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  132. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  133. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  134. package/dist/collection/components/bs-progress/bs-progress.cmp.test.js +96 -0
  135. package/dist/collection/components/bs-progress/bs-progress.css +119 -0
  136. package/dist/collection/components/bs-progress/bs-progress.js +212 -0
  137. package/dist/collection/components/bs-progress/bs-progress.stories.js +72 -0
  138. package/dist/collection/components/bs-progress-linear/bs-progress-linear.cmp.test.js +92 -0
  139. package/dist/collection/components/bs-progress-linear/bs-progress-linear.css +108 -0
  140. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +192 -0
  141. package/dist/collection/components/bs-progress-linear/bs-progress-linear.stories.js +66 -0
  142. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  143. package/dist/collection/components/bs-slider/bs-slider.js +1 -1
  144. package/dist/collection/components/bs-snackbar/bs-snackbar.cmp.test.js +4 -1
  145. package/dist/collection/components/bs-snackbar/bs-snackbar.css +8 -155
  146. package/dist/collection/components/bs-snackbar/bs-snackbar.js +11 -1
  147. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  148. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  149. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  150. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  151. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  152. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  153. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  154. package/dist/collection/components/bs-toast/bs-toast.js +1 -1
  155. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  156. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +6 -0
  157. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.css +43 -1
  158. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +1 -1
  159. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  160. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.css +25 -0
  161. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  162. package/dist/components/bs-ai-disclaimer.js +1 -1
  163. package/dist/components/bs-ai-greeting.js +1 -1
  164. package/dist/components/bs-ai-thinking.js +1 -1
  165. package/dist/components/bs-attachment-list.js +1 -1
  166. package/dist/components/bs-attachment.js +1 -1
  167. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  168. package/dist/components/bs-breadcrumbs.js +1 -1
  169. package/dist/components/bs-button-skeleton.js +1 -1
  170. package/dist/components/bs-button.js +1 -1
  171. package/dist/components/bs-chatbot-feedback.js +1 -1
  172. package/dist/components/bs-chatbot-header.js +1 -1
  173. package/dist/components/bs-chatbot-response-action.js +1 -1
  174. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  175. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  176. package/dist/components/bs-checkbox-skeleton.js +1 -1
  177. package/dist/components/bs-chip-filter.js +1 -1
  178. package/dist/components/bs-composer.js +1 -1
  179. package/dist/components/bs-data-table.js +1 -1
  180. package/dist/components/bs-dialog.js +1 -1
  181. package/dist/components/bs-icon-button.js +1 -1
  182. package/dist/components/bs-inline-tab.js +1 -1
  183. package/dist/components/bs-input.js +1 -1
  184. package/dist/components/bs-menu-item.js +1 -1
  185. package/dist/components/bs-menu.js +1 -1
  186. package/dist/components/bs-navigation-drawer-item.js +1 -1
  187. package/dist/components/bs-navigation-drawer.js +1 -1
  188. package/dist/components/bs-navigation-header.js +1 -1
  189. package/dist/components/bs-pagination.js +1 -1
  190. package/dist/components/bs-progress-linear.d.ts +11 -0
  191. package/dist/components/bs-progress-linear.js +1 -0
  192. package/dist/components/bs-progress.d.ts +11 -0
  193. package/dist/components/bs-progress.js +1 -0
  194. package/dist/components/bs-radio.js +1 -1
  195. package/dist/components/bs-slider.js +1 -1
  196. package/dist/components/bs-snackbar.js +1 -1
  197. package/dist/components/bs-source-link.js +1 -1
  198. package/dist/components/bs-stepper-step.js +1 -1
  199. package/dist/components/bs-stepper.js +1 -1
  200. package/dist/components/bs-switch.js +1 -1
  201. package/dist/components/bs-tab.js +1 -1
  202. package/dist/components/bs-tabs.js +1 -1
  203. package/dist/components/bs-toast.js +1 -1
  204. package/dist/components/bs-tooltip.js +1 -1
  205. package/dist/components/p-BQdQhCjF.js +1 -0
  206. package/dist/components/{p-Bg98eW9H.js → p-Bi4KsnwA.js} +1 -1
  207. package/dist/components/p-C5ducC76.js +1 -0
  208. package/dist/components/{p-BlCziuES.js → p-CKXzHFVu.js} +1 -1
  209. package/dist/components/{p-BOP5EJrQ.js → p-CbSuTCj1.js} +1 -1
  210. package/dist/esm/brandsync-wc.js +3 -3
  211. package/dist/esm/bs-ai-disclaimer.entry.js +2 -2
  212. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  213. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  214. package/dist/esm/bs-attachment-list.entry.js +2 -2
  215. package/dist/esm/bs-attachment.entry.js +1 -1
  216. package/dist/esm/bs-avatar.entry.js +1 -1
  217. package/dist/esm/bs-badge.entry.js +1 -1
  218. package/dist/esm/bs-breadcrumb-overflow.entry.js +1 -1
  219. package/dist/esm/bs-breadcrumb.entry.js +1 -1
  220. package/dist/esm/bs-breadcrumbs.entry.js +2 -2
  221. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  222. package/dist/esm/bs-button.entry.js +2 -2
  223. package/dist/esm/bs-card.entry.js +1 -1
  224. package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
  225. package/dist/esm/bs-chatbot-header.entry.js +2 -2
  226. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  227. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  228. package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
  229. package/dist/esm/bs-checkbox-skeleton.entry.js +2 -2
  230. package/dist/esm/bs-checkbox.entry.js +1 -1
  231. package/dist/esm/bs-chip-filter.entry.js +10 -6
  232. package/dist/esm/bs-chip-informative.entry.js +1 -1
  233. package/dist/esm/bs-chip-input.entry.js +1 -1
  234. package/dist/esm/bs-composer-status-banner.entry.js +1 -1
  235. package/dist/esm/bs-composer.entry.js +26 -3
  236. package/dist/esm/bs-data-table.entry.js +21 -4
  237. package/dist/esm/bs-dialog.entry.js +1 -1
  238. package/dist/esm/bs-icon-button.entry.js +3 -3
  239. package/dist/esm/bs-inline-tab.entry.js +2 -2
  240. package/dist/esm/bs-input.entry.js +3 -3
  241. package/dist/esm/bs-logo.entry.js +1 -1
  242. package/dist/esm/bs-menu-item.entry.js +2 -2
  243. package/dist/esm/bs-menu.entry.js +2 -2
  244. package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
  245. package/dist/esm/bs-navigation-drawer.entry.js +3 -3
  246. package/dist/esm/bs-navigation-header.entry.js +3 -3
  247. package/dist/esm/bs-pagination.entry.js +2 -2
  248. package/dist/esm/bs-progress-linear.entry.js +63 -0
  249. package/dist/esm/bs-progress.entry.js +67 -0
  250. package/dist/esm/bs-radio.entry.js +2 -2
  251. package/dist/esm/bs-slider.entry.js +2 -2
  252. package/dist/esm/bs-snackbar.entry.js +13 -3
  253. package/dist/esm/bs-source-link.entry.js +3 -3
  254. package/dist/esm/bs-stepper-step.entry.js +2 -2
  255. package/dist/esm/bs-stepper.entry.js +2 -2
  256. package/dist/esm/bs-switch.entry.js +2 -2
  257. package/dist/esm/bs-tab.entry.js +2 -2
  258. package/dist/esm/bs-tabs.entry.js +2 -2
  259. package/dist/esm/bs-toast.entry.js +2 -2
  260. package/dist/esm/bs-tooltip.entry.js +2 -2
  261. package/dist/esm/{index-CvfB8CQv.js → index-CcPfH1dJ.js} +17 -0
  262. package/dist/esm/loader.js +3 -3
  263. package/dist/types/components/bs-chip/bs-chip-filter/bs-chip-filter.d.ts +7 -2
  264. package/dist/types/components/bs-composer/bs-composer.d.ts +15 -1
  265. package/dist/types/components/bs-data-table/bs-data-table.cmp.test.d.ts +1 -0
  266. package/dist/types/components/bs-data-table/bs-data-table.d.ts +5 -0
  267. package/dist/types/components/bs-progress/bs-progress.cmp.test.d.ts +1 -0
  268. package/dist/types/components/bs-progress/bs-progress.d.ts +46 -0
  269. package/dist/types/components/bs-progress/bs-progress.stories.d.ts +18 -0
  270. package/dist/types/components/bs-progress-linear/bs-progress-linear.cmp.test.d.ts +1 -0
  271. package/dist/types/components/bs-progress-linear/bs-progress-linear.d.ts +50 -0
  272. package/dist/types/components/bs-progress-linear/bs-progress-linear.stories.d.ts +17 -0
  273. package/dist/types/components.d.ts +251 -6
  274. package/package.json +1 -1
  275. package/dist/brandsync-wc/p-00d40aca.entry.js +0 -1
  276. package/dist/brandsync-wc/p-127d698d.entry.js +0 -1
  277. package/dist/brandsync-wc/p-1780224d.entry.js +0 -1
  278. package/dist/brandsync-wc/p-35bcb932.entry.js +0 -1
  279. package/dist/brandsync-wc/p-393efb5d.entry.js +0 -1
  280. package/dist/brandsync-wc/p-b2abd8d9.entry.js +0 -1
  281. package/dist/components/p-B8JpGodL.js +0 -1
@@ -0,0 +1,72 @@
1
+ import { html } from "lit";
2
+ import { componentDescription, propDescription } from "../../stories-utils";
3
+ const types = ['determinate', 'indeterminate'];
4
+ const sizes = ['small', 'medium', 'large'];
5
+ const strokeWidths = [4, 8];
6
+ const meta = {
7
+ title: 'Components/bs-progress/Circular',
8
+ parameters: { docs: { description: { component: componentDescription('bs-progress') } } },
9
+ render: args => html `
10
+ <bs-progress
11
+ type=${args.type}
12
+ size=${args.size}
13
+ stroke-width=${args.strokeWidth}
14
+ value=${args.value}
15
+ show-label=${args.showLabel}
16
+ ></bs-progress>
17
+ `,
18
+ argTypes: {
19
+ type: { control: { type: 'select' }, options: types, description: propDescription('bs-progress', 'type') },
20
+ size: { control: { type: 'select' }, options: sizes, description: propDescription('bs-progress', 'size') },
21
+ strokeWidth: {
22
+ control: { type: 'select' },
23
+ options: strokeWidths,
24
+ description: propDescription('bs-progress', 'stroke-width'),
25
+ },
26
+ value: { control: { type: 'range', min: 0, max: 100 }, description: propDescription('bs-progress', 'value') },
27
+ showLabel: { control: 'boolean', description: propDescription('bs-progress', 'show-label') },
28
+ },
29
+ args: {
30
+ type: 'determinate',
31
+ size: 'small',
32
+ strokeWidth: 4,
33
+ value: 50,
34
+ showLabel: true,
35
+ },
36
+ };
37
+ export default meta;
38
+ export const Default = {};
39
+ // One instance per size, side by side, at a fixed mid-range value.
40
+ export const Sizes = {
41
+ name: 'Sizes',
42
+ render: () => html `
43
+ <div style="display: flex; align-items: flex-end; gap: 24px;">
44
+ ${sizes.map(size => html `<bs-progress size=${size} value="50"></bs-progress>`)}
45
+ </div>
46
+ `,
47
+ };
48
+ // One instance per stroke width, at a fixed size/value, to compare ring thickness directly.
49
+ export const StrokeWidths = {
50
+ name: 'Stroke widths',
51
+ render: () => html `
52
+ <div style="display: flex; align-items: flex-end; gap: 24px;">
53
+ ${strokeWidths.map(strokeWidth => html `<bs-progress size="large" stroke-width=${strokeWidth} value="50"></bs-progress>`)}
54
+ </div>
55
+ `,
56
+ };
57
+ // A few sample values across the range, illustrating the arc sweep from empty to full.
58
+ export const Values = {
59
+ name: 'Values',
60
+ render: () => html `
61
+ <div style="display: flex; align-items: flex-end; gap: 24px;">
62
+ ${[0, 25, 50, 75, 100].map(value => html `<bs-progress value=${value}></bs-progress>`)}
63
+ </div>
64
+ `,
65
+ };
66
+ export const WithoutLabel = {
67
+ name: 'Without label',
68
+ args: { showLabel: false },
69
+ };
70
+ export const Indeterminate = {
71
+ args: { type: 'indeterminate' },
72
+ };
@@ -0,0 +1,92 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ describe('bs-progress-linear', () => {
3
+ describe('size/type combinations', () => {
4
+ ['small', 'large'].forEach(size => {
5
+ it(`renders size="${size}" type="determinate"`, async () => {
6
+ const { root } = await render(h("bs-progress-linear", { size: size, type: "determinate", value: 40 }));
7
+ expect(root.shadowRoot.querySelector(`.bs-progress-linear__track--${size}`)).not.toBeNull();
8
+ expect(root.shadowRoot.querySelector('[part="track"]')).not.toBeNull();
9
+ expect(root.shadowRoot.querySelector('[part="fill"]')).not.toBeNull();
10
+ });
11
+ it(`renders size="${size}" type="indeterminate"`, async () => {
12
+ const { root } = await render(h("bs-progress-linear", { size: size, type: "indeterminate" }));
13
+ expect(root.shadowRoot.querySelector('.bs-progress-linear__fill--indeterminate')).not.toBeNull();
14
+ expect(root.shadowRoot.querySelector('[part="fill"]')).not.toBeNull();
15
+ });
16
+ });
17
+ });
18
+ describe('fill width', () => {
19
+ [0, 50, 100].forEach(value => {
20
+ it(`sets fill width to ${value}% for value=${value}`, async () => {
21
+ const { root } = await render(h("bs-progress-linear", { value: value }));
22
+ const fill = root.shadowRoot.querySelector('[part="fill"]');
23
+ expect(fill.style.width).toBe(`${value}%`);
24
+ });
25
+ });
26
+ it('produces a larger width for a larger value', async () => {
27
+ const { root: rootLow } = await render(h("bs-progress-linear", { value: 10 }));
28
+ const { root: rootHigh } = await render(h("bs-progress-linear", { value: 90 }));
29
+ const lowFill = rootLow.shadowRoot.querySelector('[part="fill"]');
30
+ const highFill = rootHigh.shadowRoot.querySelector('[part="fill"]');
31
+ expect(parseFloat(highFill.style.width)).toBeGreaterThan(parseFloat(lowFill.style.width));
32
+ });
33
+ });
34
+ describe('value clamping', () => {
35
+ it('clamps a value above 100 down to 100', async () => {
36
+ const { root } = await render(h("bs-progress-linear", { value: 150 }));
37
+ const fill = root.shadowRoot.querySelector('[part="fill"]');
38
+ expect(fill.style.width).toBe('100%');
39
+ const track = root.shadowRoot.querySelector('[part="track"]');
40
+ expect(track).toEqualAttribute('aria-valuenow', '100');
41
+ });
42
+ it('clamps a negative value up to 0', async () => {
43
+ const { root } = await render(h("bs-progress-linear", { value: -10 }));
44
+ const fill = root.shadowRoot.querySelector('[part="fill"]');
45
+ expect(fill.style.width).toBe('0%');
46
+ const track = root.shadowRoot.querySelector('[part="track"]');
47
+ expect(track).toEqualAttribute('aria-valuenow', '0');
48
+ });
49
+ });
50
+ describe('label', () => {
51
+ it('renders slotted content when showLabel is true (default)', async () => {
52
+ const { root } = await render(h("bs-progress-linear", { value: 42 }, "Uploading..."));
53
+ const label = root.shadowRoot.querySelector('[part="label"]');
54
+ expect(label).not.toBeNull();
55
+ // `label.textContent` only reflects a <slot>'s own fallback content, not its assigned
56
+ // (projected) nodes -- the projected text lives on the host itself.
57
+ expect(root.textContent.trim()).toBe('Uploading...');
58
+ });
59
+ it('omits the label when showLabel is false', async () => {
60
+ const { root } = await render(h("bs-progress-linear", { value: 42, showLabel: false }, "Uploading..."));
61
+ expect(root.shadowRoot.querySelector('[part="label"]')).toBeNull();
62
+ });
63
+ it('omits the label when showLabel is true but there is no slotted content', async () => {
64
+ const { root } = await render(h("bs-progress-linear", { value: 42 }));
65
+ expect(root.shadowRoot.querySelector('[part="label"]')).toBeNull();
66
+ });
67
+ it('omits the label when slotted content is only whitespace', async () => {
68
+ const { root } = await render(h("bs-progress-linear", { value: 42 }, " "));
69
+ expect(root.shadowRoot.querySelector('[part="label"]')).toBeNull();
70
+ });
71
+ });
72
+ describe('aria attributes', () => {
73
+ it('sets aria-valuemin/max/now for determinate', async () => {
74
+ const { root } = await render(h("bs-progress-linear", { type: "determinate", value: 65 }));
75
+ const track = root.shadowRoot.querySelector('[part="track"]');
76
+ expect(track).toEqualAttribute('role', 'progressbar');
77
+ expect(track).toEqualAttribute('aria-valuemin', '0');
78
+ expect(track).toEqualAttribute('aria-valuemax', '100');
79
+ expect(track).toEqualAttribute('aria-valuenow', '65');
80
+ expect(track.hasAttribute('aria-busy')).toBe(false);
81
+ });
82
+ it('omits aria-valuenow and sets aria-busy for indeterminate', async () => {
83
+ const { root } = await render(h("bs-progress-linear", { type: "indeterminate" }));
84
+ const track = root.shadowRoot.querySelector('[part="track"]');
85
+ expect(track).toEqualAttribute('role', 'progressbar');
86
+ expect(track.hasAttribute('aria-valuenow')).toBe(false);
87
+ expect(track.hasAttribute('aria-valuemin')).toBe(false);
88
+ expect(track.hasAttribute('aria-valuemax')).toBe(false);
89
+ expect(track).toEqualAttribute('aria-busy', 'true');
90
+ });
91
+ });
92
+ });
@@ -0,0 +1,108 @@
1
+ /**
2
+ * @prop --bs-progress-linear-gap: Gap between the bar and the label. Aliased to --bs-spacing-100.
3
+ * @prop --bs-progress-linear-track: Track bar background color. Aliased to --bs-surface-container
4
+ * (matches the Figma spec's `--color/surface/container` token exactly).
5
+ * @prop --bs-progress-linear-fill: Determinate fill / indeterminate comet color. Aliased to
6
+ * --bs-color-primary-default (the same brand-blue accent bs-progress's arc and bs-button's
7
+ * primary variant already use).
8
+ * @prop --bs-progress-linear-radius: Track/fill border-radius (full pill). A fixed 120px, matching
9
+ * the Figma spec's "rounded-full" treatment.
10
+ * @prop --bs-progress-linear-height-sm: Bar height, size="small". Fixed at 4px per the Figma spec.
11
+ * @prop --bs-progress-linear-height-lg: Bar height, size="large". Fixed at 8px per the Figma spec.
12
+ * @prop --bs-progress-linear-label-color: Label text color. Aliased to --bs-text-default.
13
+ * @prop --bs-progress-linear-label-font-size: Label font size (body/md). Aliased to --bs-fontsize-body-md.
14
+ * @prop --bs-progress-linear-label-line-height: Label line height (body/md). Aliased to --bs-line-height-body-md.
15
+ * @prop --bs-progress-linear-transition-duration: Determinate fill width transition. Aliased to
16
+ * --bs-duration-default if defined by brandsync-tokens, otherwise a plain 0.3s fallback.
17
+ * @prop --bs-progress-linear-slide-duration: Indeterminate comet slide duration. Aliased to
18
+ * --bs-duration-slower if defined by brandsync-tokens, otherwise a plain 1.6s fallback.
19
+ */
20
+ :host {
21
+ display: flex;
22
+
23
+ --bs-progress-linear-gap: var(--bs-spacing-100);
24
+ --bs-progress-linear-track: var(--bs-surface-container);
25
+ --bs-progress-linear-fill: var(--bs-color-primary-default);
26
+ --bs-progress-linear-radius: 120px;
27
+ --bs-progress-linear-height-sm: 4px;
28
+ --bs-progress-linear-height-lg: 8px;
29
+ --bs-progress-linear-label-color: var(--bs-text-default);
30
+ --bs-progress-linear-label-font-size: var(--bs-fontsize-body-md);
31
+ --bs-progress-linear-label-line-height: var(--bs-line-height-body-md);
32
+ --bs-progress-linear-transition-duration: 0.3s;
33
+ --bs-progress-linear-slide-duration: 1.6s;
34
+ }
35
+
36
+ .bs-progress-linear {
37
+ display: flex;
38
+ flex-direction: column;
39
+ width: 100%;
40
+ gap: var(--bs-progress-linear-gap);
41
+ font-family: inherit;
42
+ }
43
+
44
+ .bs-progress-linear__track {
45
+ position: relative;
46
+ width: 100%;
47
+ border-radius: var(--bs-progress-linear-radius);
48
+ background: var(--bs-progress-linear-track);
49
+ overflow: hidden;
50
+ }
51
+
52
+ .bs-progress-linear__track--small {
53
+ height: var(--bs-progress-linear-height-sm);
54
+ }
55
+
56
+ .bs-progress-linear__track--large {
57
+ height: var(--bs-progress-linear-height-lg);
58
+ }
59
+
60
+ .bs-progress-linear__fill {
61
+ height: 100%;
62
+ border-radius: var(--bs-progress-linear-radius);
63
+ background: var(--bs-progress-linear-fill);
64
+ transition: width var(--bs-progress-linear-transition-duration) ease;
65
+ }
66
+
67
+ /* Indeterminate: Figma's bar is a soft "comet" gradient segment (transparent -> solid color ->
68
+ transparent) sliding across the track's full width, not a flat-colored partial fill -- the same
69
+ fade concept as bs-progress's indeterminate ring's conic-gradient comet tail, but along a
70
+ straight line. A fixed-width gradient band is animated via `transform: translateX(...)` from
71
+ fully off-screen left to fully off-screen right, looping continuously. */
72
+ .bs-progress-linear__fill--indeterminate {
73
+ position: absolute;
74
+ top: 0;
75
+ left: 0;
76
+ /* Figma's static snapshot (left-9.01%/right-66.58% of the track) puts the comet band at ~24% of
77
+ the track's width -- matching that proportion here rather than the wider 40% guess this was
78
+ originally built with. */
79
+ width: 24%;
80
+ min-width: 80px;
81
+ background: linear-gradient(90deg, transparent 0%, var(--bs-progress-linear-fill) 50%, transparent 100%);
82
+ animation: bs-progress-linear-slide var(--bs-progress-linear-slide-duration) ease-in-out infinite;
83
+ }
84
+
85
+ @keyframes bs-progress-linear-slide {
86
+ from {
87
+ transform: translateX(-100%);
88
+ }
89
+ to {
90
+ transform: translateX(250%);
91
+ }
92
+ }
93
+
94
+ /* Reduced motion: freezing the slide entirely would remove the only visual signal that work is
95
+ still in progress (indeterminate has no percentage to fall back on), so this slows the slide to
96
+ a much slower loop instead of stopping it -- still obviously "in progress" without being
97
+ motion-sickness-inducing. Same intent/rationale as bs-progress's indeterminate ring. */
98
+ @media (prefers-reduced-motion: reduce) {
99
+ .bs-progress-linear__fill--indeterminate {
100
+ animation-duration: calc(var(--bs-progress-linear-slide-duration) * 4);
101
+ }
102
+ }
103
+
104
+ .bs-progress-linear__label {
105
+ color: var(--bs-progress-linear-label-color);
106
+ font-size: var(--bs-progress-linear-label-font-size);
107
+ line-height: calc(var(--bs-progress-linear-label-line-height) * 1px);
108
+ }
@@ -0,0 +1,192 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * A linear (horizontal) progress indicator -- either a static bar showing a percentage fill
4
+ * (`type="determinate"`) or a continuously sliding bar signaling in-progress work with no known
5
+ * completion percentage (`type="indeterminate"`).
6
+ *
7
+ * ## When to use
8
+ * - Showing the progress of a task with a known, quantifiable completion percentage (`determinate`),
9
+ * e.g. a file upload.
10
+ * - Signaling that work is happening in the background with no meaningful percentage to report
11
+ * (`indeterminate`), e.g. while waiting on a network response.
12
+ *
13
+ * ## When not to use
14
+ * - For a compact, ring-shaped progress indicator -- use `bs-progress` (circular) instead.
15
+ * - For a percentage that's better expressed as plain text, without the reserved space and visual
16
+ * weight of a bar.
17
+ *
18
+ * @slot - Free-form label content rendered below the bar (e.g. "Uploading..."), gated by
19
+ * `showLabel`. Unlike `bs-progress`'s label, this is not a computed `${value}%` string -- it's
20
+ * consumer-supplied content, per the Figma spec's free-text "Label" placeholder.
21
+ * @part container - The outer wrapper (bar + optional label).
22
+ * @part track - The background track bar.
23
+ * @part fill - The colored progress/sliding fill bar.
24
+ * @part label - The label wrapper (only rendered when `showLabel` is true and slotted content exists).
25
+ */
26
+ export class BsProgressLinear {
27
+ el;
28
+ /** Whether the default slot currently has any real (non-whitespace) content -- the label
29
+ * wrapper is only rendered when `showLabel` is true AND slotted content exists, so an empty
30
+ * label never reserves visual space/line-height for nothing. Recomputed on `slotchange`. */
31
+ hasLabelContent = false;
32
+ /** `determinate` renders a static fill reflecting `value`; `indeterminate` renders a
33
+ * continuously sliding gradient bar and ignores `value`. */
34
+ type = 'determinate';
35
+ /** Bar height: `small` (4px) or `large` (8px). */
36
+ size = 'large';
37
+ /** Progress percentage, `0`-`100`. Only meaningful for `type="determinate"` -- ignored (and
38
+ * never rendered) for `type="indeterminate"`. Out-of-range values are clamped defensively. */
39
+ value = 0;
40
+ /** Shows the slotted label below the bar. When `false`, or when no content is slotted, the
41
+ * label wrapper isn't rendered at all. Defaults to `true`. */
42
+ showLabel = true;
43
+ get clampedValue() {
44
+ return Math.min(100, Math.max(0, this.value));
45
+ }
46
+ render() {
47
+ const isDeterminate = this.type === 'determinate';
48
+ const value = this.clampedValue;
49
+ return (h("div", { key: '5195d1db1d788c4ad70913aff780ae966e2ae4c7', part: "container", class: "bs-progress-linear" }, h("div", { key: '518f1a552262d455b085acae72388bdcb9437624', 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}%` } })) : (
50
+ // Figma's indeterminate bar is a soft "comet" gradient segment (transparent -> blue ->
51
+ // transparent) sliding left-to-right across the track's full width in a loop -- the
52
+ // same fade concept as bs-progress's indeterminate ring's conic-gradient comet tail,
53
+ // but along a straight line via a linear-gradient + `transform: translateX(...)`
54
+ // 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: '7f7fc5eaf10993bdc7b7f0033a483a16b8b33a56', part: "label", class: "bs-progress-linear__label" }, h("slot", { key: '7eab67f682d84fe4808052b5f5eeb5701075af11' })))));
56
+ }
57
+ // The default slot's assigned content lives in the host's light DOM regardless of whether a
58
+ // <slot> is currently rendered in the shadow tree, so this can be computed directly from the
59
+ // host's childNodes -- no need to render an always-present hidden <slot> just to observe it.
60
+ componentWillLoad() {
61
+ this.updateLabelVisibility();
62
+ this.mutationObserver = new MutationObserver(() => this.updateLabelVisibility());
63
+ this.mutationObserver.observe(this.el, { childList: true, characterData: true, subtree: true });
64
+ }
65
+ disconnectedCallback() {
66
+ this.mutationObserver?.disconnect();
67
+ }
68
+ mutationObserver;
69
+ updateLabelVisibility() {
70
+ this.hasLabelContent = Array.from(this.el.childNodes).some(node => {
71
+ if (node.nodeType === Node.TEXT_NODE)
72
+ return (node.textContent ?? '').trim().length > 0;
73
+ if (node.nodeType === Node.ELEMENT_NODE)
74
+ return true;
75
+ return false;
76
+ });
77
+ }
78
+ static get is() { return "bs-progress-linear"; }
79
+ static get encapsulation() { return "shadow"; }
80
+ static get originalStyleUrls() {
81
+ return {
82
+ "$": ["bs-progress-linear.css"]
83
+ };
84
+ }
85
+ static get styleUrls() {
86
+ return {
87
+ "$": ["bs-progress-linear.css"]
88
+ };
89
+ }
90
+ static get properties() {
91
+ return {
92
+ "type": {
93
+ "type": "string",
94
+ "mutable": false,
95
+ "complexType": {
96
+ "original": "BsProgressLinearType",
97
+ "resolved": "\"determinate\" | \"indeterminate\"",
98
+ "references": {
99
+ "BsProgressLinearType": {
100
+ "location": "local",
101
+ "path": "/home/runner/work/Brandsync-webcomponents/Brandsync-webcomponents/packages/wc/src/components/bs-progress-linear/bs-progress-linear.tsx",
102
+ "id": "src/components/bs-progress-linear/bs-progress-linear.tsx::BsProgressLinearType"
103
+ }
104
+ }
105
+ },
106
+ "required": false,
107
+ "optional": false,
108
+ "docs": {
109
+ "tags": [],
110
+ "text": "`determinate` renders a static fill reflecting `value`; `indeterminate` renders a\ncontinuously sliding gradient bar and ignores `value`."
111
+ },
112
+ "getter": false,
113
+ "setter": false,
114
+ "reflect": false,
115
+ "attribute": "type",
116
+ "defaultValue": "'determinate'"
117
+ },
118
+ "size": {
119
+ "type": "string",
120
+ "mutable": false,
121
+ "complexType": {
122
+ "original": "BsProgressLinearSize",
123
+ "resolved": "\"large\" | \"small\"",
124
+ "references": {
125
+ "BsProgressLinearSize": {
126
+ "location": "local",
127
+ "path": "/home/runner/work/Brandsync-webcomponents/Brandsync-webcomponents/packages/wc/src/components/bs-progress-linear/bs-progress-linear.tsx",
128
+ "id": "src/components/bs-progress-linear/bs-progress-linear.tsx::BsProgressLinearSize"
129
+ }
130
+ }
131
+ },
132
+ "required": false,
133
+ "optional": false,
134
+ "docs": {
135
+ "tags": [],
136
+ "text": "Bar height: `small` (4px) or `large` (8px)."
137
+ },
138
+ "getter": false,
139
+ "setter": false,
140
+ "reflect": false,
141
+ "attribute": "size",
142
+ "defaultValue": "'large'"
143
+ },
144
+ "value": {
145
+ "type": "number",
146
+ "mutable": false,
147
+ "complexType": {
148
+ "original": "number",
149
+ "resolved": "number",
150
+ "references": {}
151
+ },
152
+ "required": false,
153
+ "optional": false,
154
+ "docs": {
155
+ "tags": [],
156
+ "text": "Progress percentage, `0`-`100`. Only meaningful for `type=\"determinate\"` -- ignored (and\nnever rendered) for `type=\"indeterminate\"`. Out-of-range values are clamped defensively."
157
+ },
158
+ "getter": false,
159
+ "setter": false,
160
+ "reflect": false,
161
+ "attribute": "value",
162
+ "defaultValue": "0"
163
+ },
164
+ "showLabel": {
165
+ "type": "boolean",
166
+ "mutable": false,
167
+ "complexType": {
168
+ "original": "boolean",
169
+ "resolved": "boolean",
170
+ "references": {}
171
+ },
172
+ "required": false,
173
+ "optional": false,
174
+ "docs": {
175
+ "tags": [],
176
+ "text": "Shows the slotted label below the bar. When `false`, or when no content is slotted, the\nlabel wrapper isn't rendered at all. Defaults to `true`."
177
+ },
178
+ "getter": false,
179
+ "setter": false,
180
+ "reflect": false,
181
+ "attribute": "show-label",
182
+ "defaultValue": "true"
183
+ }
184
+ };
185
+ }
186
+ static get states() {
187
+ return {
188
+ "hasLabelContent": {}
189
+ };
190
+ }
191
+ static get elementRef() { return "el"; }
192
+ }
@@ -0,0 +1,66 @@
1
+ import { html } from "lit";
2
+ import { componentDescription, propDescription } from "../../stories-utils";
3
+ const types = ['determinate', 'indeterminate'];
4
+ const sizes = ['small', 'large'];
5
+ const meta = {
6
+ title: 'Components/bs-progress/Linear',
7
+ parameters: { docs: { description: { component: componentDescription('bs-progress-linear') } } },
8
+ render: args => html `
9
+ <bs-progress-linear type=${args.type} size=${args.size} value=${args.value} show-label=${args.showLabel}>
10
+ ${args.label}
11
+ </bs-progress-linear>
12
+ `,
13
+ argTypes: {
14
+ type: { control: { type: 'select' }, options: types, description: propDescription('bs-progress-linear', 'type') },
15
+ size: { control: { type: 'select' }, options: sizes, description: propDescription('bs-progress-linear', 'size') },
16
+ value: { control: { type: 'range', min: 0, max: 100 }, description: propDescription('bs-progress-linear', 'value') },
17
+ showLabel: { control: 'boolean', description: propDescription('bs-progress-linear', 'show-label') },
18
+ label: { control: 'text', description: 'Slotted label content (default slot).' },
19
+ },
20
+ args: {
21
+ type: 'determinate',
22
+ size: 'large',
23
+ value: 40,
24
+ showLabel: true,
25
+ label: 'Label',
26
+ },
27
+ };
28
+ export default meta;
29
+ export const Default = {};
30
+ // One instance per size, stacked, at a fixed mid-range value.
31
+ export const Sizes = {
32
+ name: 'Sizes',
33
+ render: () => html `
34
+ <div style="display: flex; flex-direction: column; gap: 24px; width: 320px;">
35
+ ${sizes.map(size => html `<bs-progress-linear size=${size} value="40">Label</bs-progress-linear>`)}
36
+ </div>
37
+ `,
38
+ };
39
+ // A few sample values across the range, illustrating the fill from empty to full.
40
+ export const Values = {
41
+ name: 'Values',
42
+ render: () => html `
43
+ <div style="display: flex; flex-direction: column; gap: 24px; width: 320px;">
44
+ ${[0, 25, 50, 75, 100].map(value => html `<bs-progress-linear value=${value}>${value}%</bs-progress-linear>`)}
45
+ </div>
46
+ `,
47
+ };
48
+ export const WithoutLabel = {
49
+ name: 'Without label',
50
+ args: { showLabel: false },
51
+ render: args => html `
52
+ <div style="width: 320px;">
53
+ <bs-progress-linear type=${args.type} size=${args.size} value=${args.value} show-label=${args.showLabel}>
54
+ ${args.label}
55
+ </bs-progress-linear>
56
+ </div>
57
+ `,
58
+ };
59
+ export const Indeterminate = {
60
+ args: { type: 'indeterminate' },
61
+ render: args => html `
62
+ <div style="width: 320px;">
63
+ <bs-progress-linear type=${args.type} size=${args.size} show-label=${args.showLabel}> ${args.label} </bs-progress-linear>
64
+ </div>
65
+ `,
66
+ };
@@ -51,7 +51,7 @@ export class BsRadio {
51
51
  }
52
52
  };
53
53
  render() {
54
- return (h("label", { key: 'd2b90d388d4a165490c9e97f4716dc7b07a97d48', class: `bs-radio ${this.disabled ? 'bs-radio--disabled' : ''}` }, h("input", { key: 'a748a2fbcf810332d4046c4daec9c4a138ee127d', class: "bs-radio__input", type: "radio", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, onChange: this.onChange }), h("span", { key: 'f4aa8ca7333a598d921cad22c2ceb9e44745dbf4', class: "bs-radio__hit-area" }, h("span", { key: 'ecc93fe3be2284e86d2e8a8539edad55d40ce176', class: "bs-radio__state-layer" }, h("span", { key: 'e0f23810c8a7608654a75718aff71c468c24aecf', part: "circle", class: `bs-radio__circle ${this.checked ? 'bs-radio__circle--selected' : ''}` }, this.checked && h("span", { key: 'bb25cca2041b6c8a8978ee81d3c745530a1b660c', part: "dot", class: "bs-radio__dot" })))), h("span", { key: 'f8acfe4cac4182d922c63d7d9e96241c3eefabe9', part: "label", class: "bs-radio__label" }, h("slot", { key: '4b50c3944202d40f268c1e55bea8804273339e51' }))));
54
+ return (h("label", { key: 'dcf048ee4d4779e54bbefafffe624af7f4714b51', class: `bs-radio ${this.disabled ? 'bs-radio--disabled' : ''}` }, h("input", { key: 'b79b3a21bddfb3a043a3c509001b1be62ae260c7', class: "bs-radio__input", type: "radio", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, onChange: this.onChange }), h("span", { key: 'fea39784ffd4e99990fe217f3a6d0fbfd33fb999', class: "bs-radio__hit-area" }, h("span", { key: '30063338cf704559bfe141ba6aed997a30db00e1', class: "bs-radio__state-layer" }, h("span", { key: '528a36ac263b7711a8147306074679f53d48afc6', part: "circle", class: `bs-radio__circle ${this.checked ? 'bs-radio__circle--selected' : ''}` }, this.checked && h("span", { key: '56a4dbed5c8ba67446b2f790e47fc68374676e94', part: "dot", class: "bs-radio__dot" })))), h("span", { key: '018d3fe6d395d9dc571806f47dd4202a28590203', part: "label", class: "bs-radio__label" }, h("slot", { key: '35b436c2b3ccc1de215b1a6613d3351f030f9134' }))));
55
55
  }
56
56
  static get is() { return "bs-radio"; }
57
57
  static get encapsulation() { return "shadow"; }
@@ -199,7 +199,7 @@ export class BsSlider {
199
199
  render() {
200
200
  const isRange = this.type === 'range';
201
201
  const rootClasses = ['bs-slider', this.disabled ? 'bs-slider--disabled' : ''].filter(Boolean).join(' ');
202
- return (h("div", { key: 'e4647158959bb507711a1d9872e68f64d5f7bd34', class: rootClasses }, this.showLabel && (h("div", { key: 'eb5d67b8717cc627b63a17f85471e757d35cec85', class: "bs-slider__header" }, h("span", { key: '48f6184206774111a5beb1869857020d7008f013', 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: '1ee4796e51f2d29b1b5bad812d81f037d1d2d29f', class: "bs-slider__row" }, this.showLabel && (h("span", { key: '4bfdfd86f9c5ae5c2f8ca08c0758be9fce483056', part: "bound", class: "bs-slider__bound" }, this.min)), isRange ? this.renderRangeThumbs() : this.renderSingleThumb(), this.showLabel && (h("span", { key: '06ee3063570c858bcdf49960b9021a301e56288e', part: "bound", class: "bs-slider__bound" }, this.max)))));
202
+ return (h("div", { key: 'ddb7ca5769b3d59ef372b95b23fd5cc656f4c425', class: rootClasses }, this.showLabel && (h("div", { key: '8a5d6639e1d4affb8efb874727eae3361eeac8e5', class: "bs-slider__header" }, h("span", { key: '41a26138a837cb6a976d23162443825c8b3ab7ff', 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: 'c8275425323bb3ecdffeb7455572d60379be8fe3', class: "bs-slider__row" }, this.showLabel && (h("span", { key: 'aaaaa6d800478963f615bad21af88bb1ffddfa58', part: "bound", class: "bs-slider__bound" }, this.min)), isRange ? this.renderRangeThumbs() : this.renderSingleThumb(), this.showLabel && (h("span", { key: '23b49ac1dc4968a1b3a6cd0706283818c5ebe234', part: "bound", class: "bs-slider__bound" }, this.max)))));
203
203
  }
204
204
  static get is() { return "bs-slider"; }
205
205
  static get encapsulation() { return "shadow"; }
@@ -53,7 +53,10 @@ describe('bs-snackbar', () => {
53
53
  const { root } = await render(h("bs-snackbar", null, "Message"));
54
54
  const close = root.shadowRoot.querySelector('[part="close"]');
55
55
  expect(close).not.toBeNull();
56
- expect(close).toEqualAttribute('aria-label', 'Dismiss');
56
+ // bs-icon-button sets aria-label on its OWN inner <button> (inside its own shadow DOM), not
57
+ // on its host element -- so the accessible name lives one shadow root deeper than `close` itself.
58
+ const innerButton = close.shadowRoot.querySelector('button');
59
+ expect(innerButton).toEqualAttribute('aria-label', 'Dismiss');
57
60
  });
58
61
  it('emits bsDismiss when the close button is clicked', async () => {
59
62
  const { root, spyOnEvent } = await render(h("bs-snackbar", null, "Message"));