@brandsync/wc 1.5.4 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/custom-elements.json +1122 -98
  2. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  3. package/dist/brandsync-wc/{p-1b16b6e4.entry.js → p-06e9b45d.entry.js} +1 -1
  4. package/dist/brandsync-wc/p-0d86c22d.entry.js +1 -0
  5. package/dist/brandsync-wc/{p-dc974a34.entry.js → p-13e4966c.entry.js} +1 -1
  6. package/dist/brandsync-wc/{p-42f428b0.entry.js → p-18021c05.entry.js} +1 -1
  7. package/dist/brandsync-wc/{p-1d094352.entry.js → p-1c8160c2.entry.js} +1 -1
  8. package/dist/brandsync-wc/{p-692fd5f0.entry.js → p-21c14465.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-3145cc00.entry.js → p-2700a63e.entry.js} +1 -1
  10. package/dist/brandsync-wc/{p-6acdf2e1.entry.js → p-27100489.entry.js} +1 -1
  11. package/dist/brandsync-wc/{p-a55a3d87.entry.js → p-2d6955d6.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-46957b76.entry.js → p-309f920e.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-899d24f8.entry.js → p-30d6a6d0.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-58969b2b.entry.js → p-387ed85f.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-27741046.entry.js → p-3eab22a5.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-da6fa359.entry.js → p-4a1a5d6e.entry.js} +1 -1
  17. package/dist/brandsync-wc/{p-a77a5438.entry.js → p-4b0938a5.entry.js} +1 -1
  18. package/dist/brandsync-wc/{p-6b62bf53.entry.js → p-4bff9b4b.entry.js} +1 -1
  19. package/dist/brandsync-wc/{p-943fc6b9.entry.js → p-5312b6a5.entry.js} +1 -1
  20. package/dist/brandsync-wc/{p-95e0fb92.entry.js → p-538cc08e.entry.js} +1 -1
  21. package/dist/brandsync-wc/p-55e6438c.entry.js +1 -0
  22. package/dist/brandsync-wc/{p-83bda5f1.entry.js → p-600b5434.entry.js} +1 -1
  23. package/dist/brandsync-wc/p-61db6ce2.entry.js +1 -0
  24. package/dist/brandsync-wc/{p-5ea24f7e.entry.js → p-6754dfa9.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-a34c7553.entry.js → p-70e035ed.entry.js} +1 -1
  26. package/dist/brandsync-wc/{p-1bfc80c3.entry.js → p-77433277.entry.js} +1 -1
  27. package/dist/brandsync-wc/{p-906b4faa.entry.js → p-777a9dbf.entry.js} +1 -1
  28. package/dist/brandsync-wc/p-7ed5670e.entry.js +1 -0
  29. package/dist/brandsync-wc/{p-e92f09b3.entry.js → p-80cf96ff.entry.js} +1 -1
  30. package/dist/brandsync-wc/{p-3e4a9f38.entry.js → p-819a3dae.entry.js} +1 -1
  31. package/dist/brandsync-wc/{p-f4cb1337.entry.js → p-85c70f6d.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-ac2ccc4b.entry.js → p-8b2ab522.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-76a37a98.entry.js → p-8b57f606.entry.js} +1 -1
  34. package/dist/brandsync-wc/{p-a96ec9a1.entry.js → p-9c1be2a0.entry.js} +1 -1
  35. package/dist/brandsync-wc/{p-CcPfH1dJ.js → p-DuyFft7h.js} +2 -2
  36. package/dist/brandsync-wc/{p-e9a89ea0.entry.js → p-a36a0e6a.entry.js} +1 -1
  37. package/dist/brandsync-wc/{p-eb1c98a5.entry.js → p-a96856fd.entry.js} +1 -1
  38. package/dist/brandsync-wc/{p-a64b64f8.entry.js → p-b0634051.entry.js} +1 -1
  39. package/dist/brandsync-wc/{p-5f233b4e.entry.js → p-b2dc9886.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-c91eb3eb.entry.js → p-bcee3d60.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-3f6980bf.entry.js → p-be14f99f.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-cd90ed34.entry.js → p-c197cc95.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-8f90e906.entry.js → p-c3a28a89.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-ba650ca9.entry.js → p-cbaa19ab.entry.js} +1 -1
  45. package/dist/brandsync-wc/{p-d1dfd37d.entry.js → p-d03eba2b.entry.js} +1 -1
  46. package/dist/brandsync-wc/{p-f0a6ff05.entry.js → p-d06543a5.entry.js} +1 -1
  47. package/dist/brandsync-wc/{p-dbd49107.entry.js → p-d25b7b74.entry.js} +1 -1
  48. package/dist/brandsync-wc/{p-69c76966.entry.js → p-e1069ba9.entry.js} +1 -1
  49. package/dist/brandsync-wc/p-e427bbda.entry.js +1 -0
  50. package/dist/brandsync-wc/{p-2c2057f5.entry.js → p-e61efe4d.entry.js} +1 -1
  51. package/dist/brandsync-wc/{p-35850bfe.entry.js → p-f14bda01.entry.js} +1 -1
  52. package/dist/brandsync-wc/{p-fd1acc0f.entry.js → p-f243683f.entry.js} +1 -1
  53. package/dist/brandsync-wc/{p-9d5cf289.entry.js → p-f2ce9a1f.entry.js} +1 -1
  54. package/dist/brandsync-wc/{p-b332fe01.entry.js → p-f518f486.entry.js} +1 -1
  55. package/dist/brandsync-wc/{p-b4211012.entry.js → p-f8f03334.entry.js} +1 -1
  56. package/dist/brandsync-wc/{p-6fd1fb04.entry.js → p-fba01c96.entry.js} +1 -1
  57. package/dist/brandsync-wc/{p-d69e5034.entry.js → p-fde5e9f1.entry.js} +1 -1
  58. package/dist/cjs/brandsync-wc.cjs.js +3 -3
  59. package/dist/cjs/bs-accordion.cjs.entry.js +1 -1
  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 +2 -2
  64. package/dist/cjs/bs-attachment.cjs.entry.js +1 -1
  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 +1 -1
  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 +1 -1
  72. package/dist/cjs/bs-card.cjs.entry.js +1 -1
  73. package/dist/cjs/bs-carousel.cjs.entry.js +196 -0
  74. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
  75. package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
  76. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
  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 +2 -2
  81. package/dist/cjs/bs-chip-filter.cjs.entry.js +2 -2
  82. package/dist/cjs/bs-chip-informative.cjs.entry.js +2 -2
  83. package/dist/cjs/bs-chip-input.cjs.entry.js +2 -2
  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 +3 -3
  87. package/dist/cjs/bs-dialog.cjs.entry.js +1 -1
  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 +2 -2
  91. package/dist/cjs/bs-inline-tab.cjs.entry.js +2 -2
  92. package/dist/cjs/bs-input.cjs.entry.js +3 -3
  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 +2 -2
  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 +3 -3
  102. package/dist/cjs/bs-radio.cjs.entry.js +2 -2
  103. package/dist/cjs/bs-slider.cjs.entry.js +2 -2
  104. package/dist/cjs/bs-snackbar.cjs.entry.js +2 -2
  105. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  106. package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
  107. package/dist/cjs/bs-stepper.cjs.entry.js +2 -2
  108. package/dist/cjs/bs-switch.cjs.entry.js +2 -2
  109. package/dist/cjs/bs-tab.cjs.entry.js +2 -2
  110. package/dist/cjs/bs-tabs.cjs.entry.js +2 -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-Bj1mNOtg.js → index-D7e6DfLV.js} +24 -27
  114. package/dist/cjs/loader.cjs.js +2 -2
  115. package/dist/collection/collection-manifest.json +4 -1
  116. package/dist/collection/components/bs-accordion/bs-accordion.cmp.test.js +5 -0
  117. package/dist/collection/components/bs-accordion/bs-accordion.js +1 -1
  118. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  119. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  120. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  121. package/dist/collection/components/bs-attachment/bs-attachment.js +1 -1
  122. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  123. package/dist/collection/components/bs-avatar/bs-avatar.js +2 -2
  124. package/dist/collection/components/bs-badge/bs-badge.js +1 -1
  125. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.js +1 -1
  126. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.js +1 -1
  127. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  128. package/dist/collection/components/bs-button/bs-button/bs-button.js +2 -2
  129. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +3 -3
  130. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  131. package/dist/collection/components/bs-card/bs-card.js +1 -1
  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.js +1 -1
  137. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  138. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  139. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  140. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  141. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  142. package/dist/collection/components/bs-checkbox/bs-checkbox.js +2 -2
  143. package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.js +2 -2
  144. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.js +3 -3
  145. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.js +2 -2
  146. package/dist/collection/components/bs-composer/bs-composer.js +3 -3
  147. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +2 -2
  148. package/dist/collection/components/bs-data-table/bs-data-table.js +6 -6
  149. package/dist/collection/components/bs-dialog/bs-dialog.js +1 -1
  150. package/dist/collection/components/bs-file-upload/bs-file-upload.cmp.test.js +119 -0
  151. package/dist/collection/components/bs-file-upload/bs-file-upload.css +139 -0
  152. package/dist/collection/components/bs-file-upload/bs-file-upload.js +342 -0
  153. package/dist/collection/components/bs-file-upload/bs-file-upload.stories.js +116 -0
  154. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.cmp.test.js +115 -0
  155. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.css +154 -0
  156. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +329 -0
  157. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.stories.js +54 -0
  158. package/dist/collection/components/bs-input/bs-input.js +2 -2
  159. package/dist/collection/components/bs-logo/bs-logo.js +2 -2
  160. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  161. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  162. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  163. package/dist/collection/components/bs-progress/bs-progress.js +5 -5
  164. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +29 -4
  165. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  166. package/dist/collection/components/bs-slider/bs-slider.js +2 -2
  167. package/dist/collection/components/bs-snackbar/bs-snackbar.js +2 -2
  168. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  169. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  170. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +3 -3
  171. package/dist/collection/components/bs-switch/bs-switch.js +2 -2
  172. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  173. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +2 -2
  174. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +3 -3
  175. package/dist/collection/components/bs-toast/bs-toast.js +2 -2
  176. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  177. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +1 -1
  178. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  179. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +2 -2
  180. package/dist/collection/test/helpers/conventions.js +46 -0
  181. package/dist/collection/test/helpers/conventions.unit.test.js +38 -0
  182. package/dist/components/bs-accordion.js +1 -1
  183. package/dist/components/bs-ai-disclaimer.js +1 -1
  184. package/dist/components/bs-ai-greeting.js +1 -1
  185. package/dist/components/bs-ai-thinking.js +1 -1
  186. package/dist/components/bs-attachment-list.js +1 -1
  187. package/dist/components/bs-attachment.js +1 -1
  188. package/dist/components/bs-avatar.js +1 -1
  189. package/dist/components/bs-badge.js +1 -1
  190. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  191. package/dist/components/bs-breadcrumb.js +1 -1
  192. package/dist/components/bs-breadcrumbs.js +1 -1
  193. package/dist/components/bs-button-skeleton.js +1 -1
  194. package/dist/components/bs-button.js +1 -1
  195. package/dist/components/bs-card.js +1 -1
  196. package/dist/components/bs-carousel.d.ts +11 -0
  197. package/dist/components/bs-carousel.js +1 -0
  198. package/dist/components/bs-chatbot-feedback.js +1 -1
  199. package/dist/components/bs-chatbot-header.js +1 -1
  200. package/dist/components/bs-chatbot-response-action.js +1 -1
  201. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  202. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  203. package/dist/components/bs-checkbox-skeleton.js +1 -1
  204. package/dist/components/bs-checkbox.js +1 -1
  205. package/dist/components/bs-chip-filter.js +1 -1
  206. package/dist/components/bs-chip-informative.js +1 -1
  207. package/dist/components/bs-chip-input.js +1 -1
  208. package/dist/components/bs-composer-status-banner.js +1 -1
  209. package/dist/components/bs-composer.js +1 -1
  210. package/dist/components/bs-data-table.js +1 -1
  211. package/dist/components/bs-dialog.js +1 -1
  212. package/dist/components/bs-file-upload-item.d.ts +11 -0
  213. package/dist/components/bs-file-upload-item.js +1 -0
  214. package/dist/components/bs-file-upload.d.ts +11 -0
  215. package/dist/components/bs-file-upload.js +1 -0
  216. package/dist/components/bs-icon-button.js +1 -1
  217. package/dist/components/bs-inline-tab.js +1 -1
  218. package/dist/components/bs-input.js +1 -1
  219. package/dist/components/bs-logo.js +1 -1
  220. package/dist/components/bs-menu-item.js +1 -1
  221. package/dist/components/bs-menu.js +1 -1
  222. package/dist/components/bs-navigation-drawer-item.js +1 -1
  223. package/dist/components/bs-navigation-drawer.js +1 -1
  224. package/dist/components/bs-navigation-header.js +1 -1
  225. package/dist/components/bs-pagination.js +1 -1
  226. package/dist/components/bs-progress-linear.js +1 -1
  227. package/dist/components/bs-progress.js +1 -1
  228. package/dist/components/bs-radio.js +1 -1
  229. package/dist/components/bs-slider.js +1 -1
  230. package/dist/components/bs-snackbar.js +1 -1
  231. package/dist/components/bs-source-link.js +1 -1
  232. package/dist/components/bs-stepper-step.js +1 -1
  233. package/dist/components/bs-stepper.js +1 -1
  234. package/dist/components/bs-switch.js +1 -1
  235. package/dist/components/bs-tab.js +1 -1
  236. package/dist/components/bs-tabs.js +1 -1
  237. package/dist/components/bs-toast.js +1 -1
  238. package/dist/components/bs-tooltip.js +1 -1
  239. package/dist/components/index.js +1 -1
  240. package/dist/components/{p-D4omPSOU.js → p-BaxFLlKS.js} +1 -1
  241. package/dist/components/{p-DwVm6HIb.js → p-BhvV55-6.js} +1 -1
  242. package/dist/components/p-BxFJ74fI.js +1 -0
  243. package/dist/components/{p-Byl-ZwBI.js → p-DI5GgSqL.js} +1 -1
  244. package/dist/components/{p-DOApNIwD.js → p-Dqt-Qp4W.js} +1 -1
  245. package/dist/components/p-Dx8gAOVC.js +1 -0
  246. package/dist/components/{p-Dkv8x1_Z.js → p-LYvoWZt4.js} +1 -1
  247. package/dist/components/{p-CsnFdZ3v.js → p-mnGJPH85.js} +1 -1
  248. package/dist/components/{p-lvnXqw5g.js → p-v4T0qPVn.js} +1 -1
  249. package/dist/esm/brandsync-wc.js +4 -4
  250. package/dist/esm/bs-accordion.entry.js +1 -1
  251. package/dist/esm/bs-ai-disclaimer.entry.js +2 -2
  252. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  253. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  254. package/dist/esm/bs-attachment-list.entry.js +2 -2
  255. package/dist/esm/bs-attachment.entry.js +1 -1
  256. package/dist/esm/bs-avatar.entry.js +1 -1
  257. package/dist/esm/bs-badge.entry.js +1 -1
  258. package/dist/esm/bs-breadcrumb-overflow.entry.js +1 -1
  259. package/dist/esm/bs-breadcrumb.entry.js +1 -1
  260. package/dist/esm/bs-breadcrumbs.entry.js +2 -2
  261. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  262. package/dist/esm/bs-button.entry.js +1 -1
  263. package/dist/esm/bs-card.entry.js +1 -1
  264. package/dist/esm/bs-carousel.entry.js +194 -0
  265. package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
  266. package/dist/esm/bs-chatbot-header.entry.js +2 -2
  267. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  268. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  269. package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
  270. package/dist/esm/bs-checkbox-skeleton.entry.js +2 -2
  271. package/dist/esm/bs-checkbox.entry.js +2 -2
  272. package/dist/esm/bs-chip-filter.entry.js +2 -2
  273. package/dist/esm/bs-chip-informative.entry.js +2 -2
  274. package/dist/esm/bs-chip-input.entry.js +2 -2
  275. package/dist/esm/bs-composer-status-banner.entry.js +2 -2
  276. package/dist/esm/bs-composer.entry.js +2 -2
  277. package/dist/esm/bs-data-table.entry.js +3 -3
  278. package/dist/esm/bs-dialog.entry.js +1 -1
  279. package/dist/esm/bs-file-upload-item.entry.js +83 -0
  280. package/dist/esm/bs-file-upload.entry.js +108 -0
  281. package/dist/esm/bs-icon-button.entry.js +2 -2
  282. package/dist/esm/bs-inline-tab.entry.js +2 -2
  283. package/dist/esm/bs-input.entry.js +3 -3
  284. package/dist/esm/bs-logo.entry.js +1 -1
  285. package/dist/esm/bs-menu-item.entry.js +2 -2
  286. package/dist/esm/bs-menu.entry.js +2 -2
  287. package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
  288. package/dist/esm/bs-navigation-drawer.entry.js +2 -2
  289. package/dist/esm/bs-navigation-header.entry.js +2 -2
  290. package/dist/esm/bs-pagination.entry.js +2 -2
  291. package/dist/esm/bs-progress-linear.entry.js +8 -3
  292. package/dist/esm/bs-progress.entry.js +3 -3
  293. package/dist/esm/bs-radio.entry.js +2 -2
  294. package/dist/esm/bs-slider.entry.js +2 -2
  295. package/dist/esm/bs-snackbar.entry.js +2 -2
  296. package/dist/esm/bs-source-link.entry.js +3 -3
  297. package/dist/esm/bs-stepper-step.entry.js +2 -2
  298. package/dist/esm/bs-stepper.entry.js +2 -2
  299. package/dist/esm/bs-switch.entry.js +2 -2
  300. package/dist/esm/bs-tab.entry.js +2 -2
  301. package/dist/esm/bs-tabs.entry.js +2 -2
  302. package/dist/esm/bs-toast.entry.js +2 -2
  303. package/dist/esm/bs-tooltip.entry.js +2 -2
  304. package/dist/esm/{index-CcPfH1dJ.js → index-DuyFft7h.js} +24 -27
  305. package/dist/esm/loader.js +3 -3
  306. package/dist/types/components/bs-carousel/bs-carousel.cmp.test.d.ts +1 -0
  307. package/dist/types/components/bs-carousel/bs-carousel.d.ts +101 -0
  308. package/dist/types/components/bs-carousel/bs-carousel.stories.d.ts +17 -0
  309. package/dist/types/components/bs-file-upload/bs-file-upload.cmp.test.d.ts +1 -0
  310. package/dist/types/components/bs-file-upload/bs-file-upload.d.ts +59 -0
  311. package/dist/types/components/bs-file-upload/bs-file-upload.stories.d.ts +21 -0
  312. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.cmp.test.d.ts +1 -0
  313. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.d.ts +58 -0
  314. package/dist/types/components/bs-file-upload-item/bs-file-upload-item.stories.d.ts +18 -0
  315. package/dist/types/components/bs-progress-linear/bs-progress-linear.d.ts +5 -0
  316. package/dist/types/components.d.ts +594 -0
  317. package/dist/types/test/helpers/conventions.d.ts +21 -0
  318. package/dist/types/test/helpers/conventions.unit.test.d.ts +1 -0
  319. package/package.json +4 -2
  320. package/dist/brandsync-wc/p-4df71e00.entry.js +0 -1
  321. package/dist/brandsync-wc/p-dadbb3f1.entry.js +0 -1
@@ -1859,6 +1859,358 @@
1859
1859
  }
1860
1860
  ]
1861
1861
  },
1862
+ {
1863
+ "kind": "javascript-module",
1864
+ "path": "src/components/bs-carousel/bs-carousel.tsx",
1865
+ "declarations": [
1866
+ {
1867
+ "kind": "class",
1868
+ "customElement": true,
1869
+ "tagName": "bs-carousel",
1870
+ "name": "BsCarousel",
1871
+ "description": "A carousel that shows a page of slides at a time, with a tracker (dots or numbered blocks) and\nprevious/next controls, and optional auto-advance with a Pause/Play button.\n\nSlides are the default slot's direct children (a `bs-card`, an image, anything). The carousel\nshows `slidesPerView` of them at once, so there are `ceil(slides / slidesPerView)` pages. It\nmanages two things on those slide elements: the `hidden` attribute (off-page slides are hidden,\nso they leave the tab order and the accessibility tree) and, only when not already set,\n`role=\"group\"`, `aria-roledescription=\"slide\"` and an `aria-label` of \"n of N\".\n\nComposes `bs-pagination` (`tracker=\"numbers\"`), `bs-icon-button` (previous/next for\n`tracker=\"dots\"`) and `bs-button` (Pause/Play) rather than re-implementing them.\n\n## When to use\n- Browsing a set of related items (cards, images, announcements) where only a few fit at once.\n- Rotating promotional or highlight content, where auto-advance with a Pause control is wanted.\n\n## When not to use\n- Content users must see in full to complete a task -- hiding it behind paging hurts discovery;\n lay it out in a list or grid instead.\n- A strict sequence of steps -- use `bs-stepper`.\n- Paging through a large, addressable result set -- use `bs-pagination`.",
1872
+ "attributes": [
1873
+ {
1874
+ "name": "autoplay",
1875
+ "description": "Auto-advances to the next page every `interval` ms, looping from the last page to the first.\nOff by default. The Pause/Play button is only rendered when this is set. Auto-advance also\nstops while the pointer is over the carousel or focus is inside it, and starts paused for\nusers who prefer reduced motion.",
1876
+ "type": {
1877
+ "text": "boolean"
1878
+ },
1879
+ "default": "false",
1880
+ "fieldName": "autoplay"
1881
+ },
1882
+ {
1883
+ "name": "current-page",
1884
+ "description": "The visible page, 1-based (same convention as `bs-pagination`). Mutable so the carousel\nadvances it itself (tracker, previous/next, autoplay). Clamped to the available pages.",
1885
+ "type": {
1886
+ "text": "number"
1887
+ },
1888
+ "default": "1",
1889
+ "fieldName": "currentPage"
1890
+ },
1891
+ {
1892
+ "name": "interval",
1893
+ "description": "Milliseconds between auto-advances, when `autoplay` is set.",
1894
+ "type": {
1895
+ "text": "number"
1896
+ },
1897
+ "default": "5000",
1898
+ "fieldName": "interval"
1899
+ },
1900
+ {
1901
+ "name": "label",
1902
+ "description": "Accessible name of the carousel region (e.g. \"Featured articles\").",
1903
+ "type": {
1904
+ "text": "string"
1905
+ },
1906
+ "default": "'Carousel'",
1907
+ "fieldName": "label"
1908
+ },
1909
+ {
1910
+ "name": "next-label",
1911
+ "description": "Accessible name of the next button (`tracker=\"dots\"`) -- override for localisation.",
1912
+ "type": {
1913
+ "text": "string"
1914
+ },
1915
+ "default": "'Next slide'",
1916
+ "fieldName": "nextLabel"
1917
+ },
1918
+ {
1919
+ "name": "pause-label",
1920
+ "description": "Label of the Pause/Play button while auto-advance is running.",
1921
+ "type": {
1922
+ "text": "string"
1923
+ },
1924
+ "default": "'Pause'",
1925
+ "fieldName": "pauseLabel"
1926
+ },
1927
+ {
1928
+ "name": "paused",
1929
+ "description": "Whether auto-advance is paused by the user (the Pause/Play button). Mutable and reflected so\nthe state is visible to CSS and settable from outside. Only meaningful with `autoplay`.",
1930
+ "type": {
1931
+ "text": "boolean"
1932
+ },
1933
+ "default": "false",
1934
+ "fieldName": "paused"
1935
+ },
1936
+ {
1937
+ "name": "play-label",
1938
+ "description": "Label of the Pause/Play button while auto-advance is paused.",
1939
+ "type": {
1940
+ "text": "string"
1941
+ },
1942
+ "default": "'Play'",
1943
+ "fieldName": "playLabel"
1944
+ },
1945
+ {
1946
+ "name": "previous-label",
1947
+ "description": "Accessible name of the previous button (`tracker=\"dots\"`) -- override for localisation.",
1948
+ "type": {
1949
+ "text": "string"
1950
+ },
1951
+ "default": "'Previous slide'",
1952
+ "fieldName": "previousLabel"
1953
+ },
1954
+ {
1955
+ "name": "slides-per-view",
1956
+ "description": "How many slides are visible at once. The tracker counts pages: `ceil(slides / slidesPerView)`.",
1957
+ "type": {
1958
+ "text": "number"
1959
+ },
1960
+ "default": "3",
1961
+ "fieldName": "slidesPerView"
1962
+ },
1963
+ {
1964
+ "name": "tracker",
1965
+ "description": "Which tracker to show under the slides. `dots` is a compact dot row between previous/next\nbuttons (the dots are an indicator, not buttons); `numbers` is a numbered `bs-pagination`\nwhere each page can be jumped to directly.",
1966
+ "type": {
1967
+ "text": "\"dots\" | \"numbers\"",
1968
+ "references": [
1969
+ {
1970
+ "name": "BsCarouselTracker"
1971
+ }
1972
+ ]
1973
+ },
1974
+ "default": "'dots'",
1975
+ "fieldName": "tracker"
1976
+ }
1977
+ ],
1978
+ "members": [
1979
+ {
1980
+ "kind": "field",
1981
+ "name": "autoplay",
1982
+ "description": "Auto-advances to the next page every `interval` ms, looping from the last page to the first.\nOff by default. The Pause/Play button is only rendered when this is set. Auto-advance also\nstops while the pointer is over the carousel or focus is inside it, and starts paused for\nusers who prefer reduced motion.",
1983
+ "type": {
1984
+ "text": "boolean"
1985
+ },
1986
+ "default": "false",
1987
+ "attribute": "autoplay"
1988
+ },
1989
+ {
1990
+ "kind": "field",
1991
+ "name": "currentPage",
1992
+ "description": "The visible page, 1-based (same convention as `bs-pagination`). Mutable so the carousel\nadvances it itself (tracker, previous/next, autoplay). Clamped to the available pages.",
1993
+ "type": {
1994
+ "text": "number"
1995
+ },
1996
+ "default": "1",
1997
+ "attribute": "current-page",
1998
+ "reflects": true
1999
+ },
2000
+ {
2001
+ "kind": "field",
2002
+ "name": "interval",
2003
+ "description": "Milliseconds between auto-advances, when `autoplay` is set.",
2004
+ "type": {
2005
+ "text": "number"
2006
+ },
2007
+ "default": "5000",
2008
+ "attribute": "interval"
2009
+ },
2010
+ {
2011
+ "kind": "field",
2012
+ "name": "label",
2013
+ "description": "Accessible name of the carousel region (e.g. \"Featured articles\").",
2014
+ "type": {
2015
+ "text": "string"
2016
+ },
2017
+ "default": "'Carousel'",
2018
+ "attribute": "label"
2019
+ },
2020
+ {
2021
+ "kind": "field",
2022
+ "name": "nextLabel",
2023
+ "description": "Accessible name of the next button (`tracker=\"dots\"`) -- override for localisation.",
2024
+ "type": {
2025
+ "text": "string"
2026
+ },
2027
+ "default": "'Next slide'",
2028
+ "attribute": "next-label"
2029
+ },
2030
+ {
2031
+ "kind": "field",
2032
+ "name": "pauseLabel",
2033
+ "description": "Label of the Pause/Play button while auto-advance is running.",
2034
+ "type": {
2035
+ "text": "string"
2036
+ },
2037
+ "default": "'Pause'",
2038
+ "attribute": "pause-label"
2039
+ },
2040
+ {
2041
+ "kind": "field",
2042
+ "name": "paused",
2043
+ "description": "Whether auto-advance is paused by the user (the Pause/Play button). Mutable and reflected so\nthe state is visible to CSS and settable from outside. Only meaningful with `autoplay`.",
2044
+ "type": {
2045
+ "text": "boolean"
2046
+ },
2047
+ "default": "false",
2048
+ "attribute": "paused",
2049
+ "reflects": true
2050
+ },
2051
+ {
2052
+ "kind": "field",
2053
+ "name": "playLabel",
2054
+ "description": "Label of the Pause/Play button while auto-advance is paused.",
2055
+ "type": {
2056
+ "text": "string"
2057
+ },
2058
+ "default": "'Play'",
2059
+ "attribute": "play-label"
2060
+ },
2061
+ {
2062
+ "kind": "field",
2063
+ "name": "previousLabel",
2064
+ "description": "Accessible name of the previous button (`tracker=\"dots\"`) -- override for localisation.",
2065
+ "type": {
2066
+ "text": "string"
2067
+ },
2068
+ "default": "'Previous slide'",
2069
+ "attribute": "previous-label"
2070
+ },
2071
+ {
2072
+ "kind": "field",
2073
+ "name": "slidesPerView",
2074
+ "description": "How many slides are visible at once. The tracker counts pages: `ceil(slides / slidesPerView)`.",
2075
+ "type": {
2076
+ "text": "number"
2077
+ },
2078
+ "default": "3",
2079
+ "attribute": "slides-per-view"
2080
+ },
2081
+ {
2082
+ "kind": "field",
2083
+ "name": "tracker",
2084
+ "description": "Which tracker to show under the slides. `dots` is a compact dot row between previous/next\nbuttons (the dots are an indicator, not buttons); `numbers` is a numbered `bs-pagination`\nwhere each page can be jumped to directly.",
2085
+ "type": {
2086
+ "text": "\"dots\" | \"numbers\"",
2087
+ "references": [
2088
+ {
2089
+ "name": "BsCarouselTracker"
2090
+ }
2091
+ ]
2092
+ },
2093
+ "default": "'dots'",
2094
+ "attribute": "tracker"
2095
+ }
2096
+ ],
2097
+ "events": [
2098
+ {
2099
+ "name": "bsPageChange",
2100
+ "description": "Fires after the visible page changes via the tracker, previous/next or autoplay, with the\nnew 1-based page.",
2101
+ "type": {
2102
+ "text": "CustomEvent<number>"
2103
+ }
2104
+ },
2105
+ {
2106
+ "name": "bsPauseChange",
2107
+ "description": "Fires when the user toggles the Pause/Play button, with the new `paused` value.",
2108
+ "type": {
2109
+ "text": "CustomEvent<boolean>"
2110
+ }
2111
+ }
2112
+ ],
2113
+ "slots": [
2114
+ {
2115
+ "name": "",
2116
+ "description": "Default slot: the slides. Each direct child is one slide."
2117
+ }
2118
+ ],
2119
+ "cssParts": [
2120
+ {
2121
+ "name": "carousel",
2122
+ "description": "The outer region (`role=\"region\"`, `aria-roledescription=\"carousel\"`)."
2123
+ },
2124
+ {
2125
+ "name": "current",
2126
+ "description": "The current page's dot (in addition to `dot`)."
2127
+ },
2128
+ {
2129
+ "name": "dot",
2130
+ "description": "Each dot (`tracker=\"dots\"`)."
2131
+ },
2132
+ {
2133
+ "name": "dots",
2134
+ "description": "The dot group (`tracker=\"dots\"`)."
2135
+ },
2136
+ {
2137
+ "name": "next",
2138
+ "description": "The next button (`tracker=\"dots\"`)."
2139
+ },
2140
+ {
2141
+ "name": "pagination",
2142
+ "description": "The numbered tracker (`tracker=\"numbers\"`)."
2143
+ },
2144
+ {
2145
+ "name": "pause",
2146
+ "description": "The Pause/Play button (only rendered when `autoplay`)."
2147
+ },
2148
+ {
2149
+ "name": "prev",
2150
+ "description": "The previous button (`tracker=\"dots\"`)."
2151
+ },
2152
+ {
2153
+ "name": "slides",
2154
+ "description": "The row holding the visible slides."
2155
+ },
2156
+ {
2157
+ "name": "tracker",
2158
+ "description": "The row holding the tracker and the Pause/Play button."
2159
+ }
2160
+ ],
2161
+ "cssProperties": [
2162
+ {
2163
+ "name": "--bs-carousel-dot-active-color",
2164
+ "description": "Fill of the active dot. Aliased to --bs-color-primary-default."
2165
+ },
2166
+ {
2167
+ "name": "--bs-carousel-dot-color",
2168
+ "description": "Fill of an inactive dot. Aliased to --bs-surface-container."
2169
+ },
2170
+ {
2171
+ "name": "--bs-carousel-dot-radius",
2172
+ "description": "Corner radius of a dot. Aliased to --bs-border-radius-full."
2173
+ },
2174
+ {
2175
+ "name": "--bs-carousel-dot-size",
2176
+ "description": "Width/height of an inactive dot; the active dot is twice as wide. Aliased to --bs-spacing-100 (8px, exact match to Figma)."
2177
+ },
2178
+ {
2179
+ "name": "--bs-carousel-dots-gap",
2180
+ "description": "Gap between dots. Aliased to --bs-spacing-50."
2181
+ },
2182
+ {
2183
+ "name": "--bs-carousel-gap",
2184
+ "description": "Gap between visible slides. Aliased to --bs-spacing-200."
2185
+ },
2186
+ {
2187
+ "name": "--bs-carousel-tracker-gap",
2188
+ "description": "Gap between the items of the tracker row (previous, dots, next, Pause). Aliased to --bs-spacing-50."
2189
+ },
2190
+ {
2191
+ "name": "--bs-carousel-tracker-offset",
2192
+ "description": "Vertical gap between the slides and the tracker row. Aliased to --bs-spacing-200."
2193
+ }
2194
+ ]
2195
+ }
2196
+ ],
2197
+ "exports": [
2198
+ {
2199
+ "kind": "js",
2200
+ "name": "BsCarousel",
2201
+ "declaration": {
2202
+ "name": "BsCarousel"
2203
+ }
2204
+ },
2205
+ {
2206
+ "kind": "custom-element-definition",
2207
+ "name": "bs-carousel",
2208
+ "declaration": {
2209
+ "name": "BsCarousel"
2210
+ }
2211
+ }
2212
+ ]
2213
+ },
1862
2214
  {
1863
2215
  "kind": "javascript-module",
1864
2216
  "path": "src/components/bs-chatbot-feedback/bs-chatbot-feedback.tsx",
@@ -4053,44 +4405,541 @@
4053
4405
  }
4054
4406
  }
4055
4407
  ],
4056
- "events": [
4408
+ "events": [
4409
+ {
4410
+ "name": "bsRowSelect",
4411
+ "type": {
4412
+ "text": "CustomEvent<{ id: string | number; selected: boolean; }>"
4413
+ }
4414
+ },
4415
+ {
4416
+ "name": "bsSort",
4417
+ "type": {
4418
+ "text": "CustomEvent<{ column: string; direction: \"desc\" | \"asc\"; }>"
4419
+ }
4420
+ }
4421
+ ],
4422
+ "cssParts": [
4423
+ {
4424
+ "name": "body",
4425
+ "description": "The `<tbody>` element."
4426
+ },
4427
+ {
4428
+ "name": "cell",
4429
+ "description": "Each `<td>` in a body row."
4430
+ },
4431
+ {
4432
+ "name": "head",
4433
+ "description": "The `<thead>` element."
4434
+ },
4435
+ {
4436
+ "name": "header-cell",
4437
+ "description": "Each `<th>` in the header row."
4438
+ },
4439
+ {
4440
+ "name": "row",
4441
+ "description": "Each `<tr>` in the body."
4442
+ },
4443
+ {
4444
+ "name": "table",
4445
+ "description": "The `<table>` element."
4446
+ }
4447
+ ]
4448
+ }
4449
+ ],
4450
+ "exports": [
4451
+ {
4452
+ "kind": "js",
4453
+ "name": "BsDataTable",
4454
+ "declaration": {
4455
+ "name": "BsDataTable"
4456
+ }
4457
+ },
4458
+ {
4459
+ "kind": "custom-element-definition",
4460
+ "name": "bs-data-table",
4461
+ "declaration": {
4462
+ "name": "BsDataTable"
4463
+ }
4464
+ }
4465
+ ]
4466
+ },
4467
+ {
4468
+ "kind": "javascript-module",
4469
+ "path": "src/components/bs-dialog/bs-dialog.tsx",
4470
+ "declarations": [
4471
+ {
4472
+ "kind": "class",
4473
+ "customElement": true,
4474
+ "tagName": "bs-dialog",
4475
+ "name": "BsDialog",
4476
+ "description": "An overlay dialog that interrupts the current flow for a focused task or confirmation.\nCloses itself on backdrop click, Escape, or its own close button, and emits `bsClose`.\n\n## When to use\n- Confirming a consequential action (e.g. \"Confirm booking\") before it takes effect.\n- A short, focused task that doesn't warrant navigating to a new page.\n\n## When not to use\n- For non-blocking status messages — use a toast/notification instead of interrupting the user.\n- For a long, multi-step flow — a full page or a dedicated route is usually a better fit than a\n dialog that just gets taller and taller.\n\nTwo additional slots cover the Figma \"Dialog\" component's other states: `image` (a hero image\nacross the top, close button floats over it instead of sitting in the header row) and `icon`\n(only rendered when `centered` is set, e.g. a success checkmark above a centered heading). The\nclose button \"floats\" (absolute-positioned, top-right of the dialog, with its own background)\nwhenever `centered` is true or the `image` slot has content -- otherwise it's the plain inline\nbutton in the header row next to the heading, same as before this addition.",
4477
+ "attributes": [
4478
+ {
4479
+ "name": "centered",
4480
+ "description": "Switches to the Figma \"Icon Centered\" layout: heading/body text centered, the `icon` slot\nrendered above the heading, and the close button floating top-right of the dialog instead of\ninline in the header row. Doesn't hide a slotted `image` if one is also provided -- Figma's\nspec doesn't show the two combined, so this is unspecified rather than actively blocked.\nReflected so consumers/CSS can target `bs-dialog[centered]`.",
4481
+ "type": {
4482
+ "text": "boolean"
4483
+ },
4484
+ "default": "false",
4485
+ "fieldName": "centered"
4486
+ },
4487
+ {
4488
+ "name": "heading",
4489
+ "type": {
4490
+ "text": "string"
4491
+ },
4492
+ "fieldName": "heading"
4493
+ },
4494
+ {
4495
+ "name": "open",
4496
+ "description": "Mutable + reflected so the component can close itself (backdrop click, Escape, close button)\nthe same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.",
4497
+ "type": {
4498
+ "text": "boolean"
4499
+ },
4500
+ "default": "false",
4501
+ "fieldName": "open"
4502
+ },
4503
+ {
4504
+ "name": "size",
4505
+ "type": {
4506
+ "text": "\"lg\" | \"md\" | \"sm\"",
4507
+ "references": [
4508
+ {
4509
+ "name": "BsDialogSize"
4510
+ }
4511
+ ]
4512
+ },
4513
+ "default": "'md'",
4514
+ "fieldName": "size"
4515
+ }
4516
+ ],
4517
+ "members": [
4518
+ {
4519
+ "kind": "field",
4520
+ "name": "centered",
4521
+ "description": "Switches to the Figma \"Icon Centered\" layout: heading/body text centered, the `icon` slot\nrendered above the heading, and the close button floating top-right of the dialog instead of\ninline in the header row. Doesn't hide a slotted `image` if one is also provided -- Figma's\nspec doesn't show the two combined, so this is unspecified rather than actively blocked.\nReflected so consumers/CSS can target `bs-dialog[centered]`.",
4522
+ "type": {
4523
+ "text": "boolean"
4524
+ },
4525
+ "default": "false",
4526
+ "attribute": "centered",
4527
+ "reflects": true
4528
+ },
4529
+ {
4530
+ "kind": "field",
4531
+ "name": "heading",
4532
+ "type": {
4533
+ "text": "string"
4534
+ },
4535
+ "attribute": "heading"
4536
+ },
4537
+ {
4538
+ "kind": "field",
4539
+ "name": "open",
4540
+ "description": "Mutable + reflected so the component can close itself (backdrop click, Escape, close button)\nthe same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.",
4541
+ "type": {
4542
+ "text": "boolean"
4543
+ },
4544
+ "default": "false",
4545
+ "attribute": "open",
4546
+ "reflects": true
4547
+ },
4548
+ {
4549
+ "kind": "field",
4550
+ "name": "size",
4551
+ "type": {
4552
+ "text": "\"lg\" | \"md\" | \"sm\"",
4553
+ "references": [
4554
+ {
4555
+ "name": "BsDialogSize"
4556
+ }
4557
+ ]
4558
+ },
4559
+ "default": "'md'",
4560
+ "attribute": "size"
4561
+ }
4562
+ ],
4563
+ "events": [
4564
+ {
4565
+ "name": "bsClose",
4566
+ "type": {
4567
+ "text": "CustomEvent<void>"
4568
+ }
4569
+ }
4570
+ ],
4571
+ "slots": [
4572
+ {
4573
+ "name": "",
4574
+ "description": "Default slot: the dialog body content."
4575
+ },
4576
+ {
4577
+ "name": "footer",
4578
+ "description": "Optional footer content (typically action buttons)."
4579
+ },
4580
+ {
4581
+ "name": "icon",
4582
+ "description": "Optional icon shown above the heading, only rendered at all when `centered` is true."
4583
+ },
4584
+ {
4585
+ "name": "image",
4586
+ "description": "Optional hero image across the top of the dialog. Presence of assigned content\nswitches the close button to float over it; doesn't affect layout when empty."
4587
+ }
4588
+ ],
4589
+ "cssParts": [
4590
+ {
4591
+ "name": "backdrop",
4592
+ "description": "The full-viewport overlay behind the dialog."
4593
+ },
4594
+ {
4595
+ "name": "body",
4596
+ "description": "The body content wrapper."
4597
+ },
4598
+ {
4599
+ "name": "close",
4600
+ "description": "The close button (inline in the header, or floating -- see the class doc above)."
4601
+ },
4602
+ {
4603
+ "name": "dialog",
4604
+ "description": "The dialog box itself."
4605
+ },
4606
+ {
4607
+ "name": "footer",
4608
+ "description": "The footer wrapper (only visible when the footer slot has content)."
4609
+ },
4610
+ {
4611
+ "name": "header",
4612
+ "description": "The header row (heading + close button, when the close button isn't floating)."
4613
+ },
4614
+ {
4615
+ "name": "icon",
4616
+ "description": "The icon wrapper (only rendered when `centered` is true)."
4617
+ },
4618
+ {
4619
+ "name": "image",
4620
+ "description": "The hero image wrapper (only visible when the `image` slot has content)."
4621
+ }
4622
+ ]
4623
+ }
4624
+ ],
4625
+ "exports": [
4626
+ {
4627
+ "kind": "js",
4628
+ "name": "BsDialog",
4629
+ "declaration": {
4630
+ "name": "BsDialog"
4631
+ }
4632
+ },
4633
+ {
4634
+ "kind": "custom-element-definition",
4635
+ "name": "bs-dialog",
4636
+ "declaration": {
4637
+ "name": "BsDialog"
4638
+ }
4639
+ }
4640
+ ]
4641
+ },
4642
+ {
4643
+ "kind": "javascript-module",
4644
+ "path": "src/components/bs-file-upload/bs-file-upload.tsx",
4645
+ "declarations": [
4646
+ {
4647
+ "kind": "class",
4648
+ "customElement": true,
4649
+ "tagName": "bs-file-upload",
4650
+ "name": "BsFileUpload",
4651
+ "description": "A file dropzone: drag files onto it, or press \"Browse file\" to open the file picker. It reports\nthe chosen files and does nothing else -- the consuming app owns the upload itself and shows its\nprogress with `bs-file-upload-item`.\n\n## When to use\n- Letting users add one or more files (documents, images) to upload.\n\n## When not to use\n- Attaching files to a chat message -- see `bs-composer` / `bs-attachment`.\n- A file input that must submit with a native `<form>`: this component is **not**\n form-associated. Read the files from `bsFilesSelect` and submit them yourself.",
4652
+ "attributes": [
4653
+ {
4654
+ "name": "accept",
4655
+ "description": "Which files are accepted, same syntax as the native `accept` attribute: comma-separated\nextensions (`.pdf`), MIME types (`image/png`) or wildcards (`image/*`). Applied to the picker\nand also to dropped files, which the browser does not filter.",
4656
+ "type": {
4657
+ "text": "string"
4658
+ },
4659
+ "fieldName": "accept"
4660
+ },
4661
+ {
4662
+ "name": "button-label",
4663
+ "description": "Label of the browse button. Override for localisation.",
4664
+ "type": {
4665
+ "text": "string"
4666
+ },
4667
+ "default": "'Browse file'",
4668
+ "fieldName": "buttonLabel"
4669
+ },
4670
+ {
4671
+ "name": "description",
4672
+ "description": "Guidelines under the heading (e.g. \"PDF or JPG, up to 8MB\").",
4673
+ "type": {
4674
+ "text": "string"
4675
+ },
4676
+ "fieldName": "description"
4677
+ },
4678
+ {
4679
+ "name": "direction",
4680
+ "description": "Layout: icon beside the text (`horizontal`) or stacked above it, centered (`vertical`).",
4681
+ "type": {
4682
+ "text": "\"horizontal\" | \"vertical\"",
4683
+ "references": [
4684
+ {
4685
+ "name": "BsFileUploadDirection"
4686
+ }
4687
+ ]
4688
+ },
4689
+ "default": "'horizontal'",
4690
+ "fieldName": "direction"
4691
+ },
4692
+ {
4693
+ "name": "disabled",
4694
+ "description": "Disables the browse button and ignores drops.",
4695
+ "type": {
4696
+ "text": "boolean"
4697
+ },
4698
+ "default": "false",
4699
+ "fieldName": "disabled"
4700
+ },
4701
+ {
4702
+ "name": "dragging",
4703
+ "description": "Whether a file is currently being dragged over the dropzone (the Figma \"Drop\" state). Set by\nthe component during a drag; mutable and reflected so it can also be set to show the state\nstatically.",
4704
+ "type": {
4705
+ "text": "boolean"
4706
+ },
4707
+ "default": "false",
4708
+ "fieldName": "dragging"
4709
+ },
4710
+ {
4711
+ "name": "heading",
4712
+ "description": "Heading text (e.g. \"Upload your documents\").",
4713
+ "type": {
4714
+ "text": "string"
4715
+ },
4716
+ "fieldName": "heading"
4717
+ },
4718
+ {
4719
+ "name": "multiple",
4720
+ "description": "Allows selecting/dropping more than one file. Without it only the first file is taken.",
4721
+ "type": {
4722
+ "text": "boolean"
4723
+ },
4724
+ "default": "false",
4725
+ "fieldName": "multiple"
4726
+ }
4727
+ ],
4728
+ "members": [
4729
+ {
4730
+ "kind": "field",
4731
+ "name": "accept",
4732
+ "description": "Which files are accepted, same syntax as the native `accept` attribute: comma-separated\nextensions (`.pdf`), MIME types (`image/png`) or wildcards (`image/*`). Applied to the picker\nand also to dropped files, which the browser does not filter.",
4733
+ "type": {
4734
+ "text": "string"
4735
+ },
4736
+ "attribute": "accept"
4737
+ },
4738
+ {
4739
+ "kind": "field",
4740
+ "name": "buttonLabel",
4741
+ "description": "Label of the browse button. Override for localisation.",
4742
+ "type": {
4743
+ "text": "string"
4744
+ },
4745
+ "default": "'Browse file'",
4746
+ "attribute": "button-label"
4747
+ },
4748
+ {
4749
+ "kind": "field",
4750
+ "name": "description",
4751
+ "description": "Guidelines under the heading (e.g. \"PDF or JPG, up to 8MB\").",
4752
+ "type": {
4753
+ "text": "string"
4754
+ },
4755
+ "attribute": "description"
4756
+ },
4757
+ {
4758
+ "kind": "field",
4759
+ "name": "direction",
4760
+ "description": "Layout: icon beside the text (`horizontal`) or stacked above it, centered (`vertical`).",
4761
+ "type": {
4762
+ "text": "\"horizontal\" | \"vertical\"",
4763
+ "references": [
4764
+ {
4765
+ "name": "BsFileUploadDirection"
4766
+ }
4767
+ ]
4768
+ },
4769
+ "default": "'horizontal'",
4770
+ "attribute": "direction",
4771
+ "reflects": true
4772
+ },
4773
+ {
4774
+ "kind": "field",
4775
+ "name": "disabled",
4776
+ "description": "Disables the browse button and ignores drops.",
4777
+ "type": {
4778
+ "text": "boolean"
4779
+ },
4780
+ "default": "false",
4781
+ "attribute": "disabled",
4782
+ "reflects": true
4783
+ },
4784
+ {
4785
+ "kind": "field",
4786
+ "name": "dragging",
4787
+ "description": "Whether a file is currently being dragged over the dropzone (the Figma \"Drop\" state). Set by\nthe component during a drag; mutable and reflected so it can also be set to show the state\nstatically.",
4788
+ "type": {
4789
+ "text": "boolean"
4790
+ },
4791
+ "default": "false",
4792
+ "attribute": "dragging",
4793
+ "reflects": true
4794
+ },
4795
+ {
4796
+ "kind": "field",
4797
+ "name": "heading",
4798
+ "description": "Heading text (e.g. \"Upload your documents\").",
4799
+ "type": {
4800
+ "text": "string"
4801
+ },
4802
+ "attribute": "heading"
4803
+ },
4804
+ {
4805
+ "kind": "field",
4806
+ "name": "multiple",
4807
+ "description": "Allows selecting/dropping more than one file. Without it only the first file is taken.",
4808
+ "type": {
4809
+ "text": "boolean"
4810
+ },
4811
+ "default": "false",
4812
+ "attribute": "multiple"
4813
+ }
4814
+ ],
4815
+ "events": [
4816
+ {
4817
+ "name": "bsFilesReject",
4818
+ "description": "Fires with files that were not taken: they didn't match `accept`, or were extra files\ndropped while `multiple` is off.",
4819
+ "type": {
4820
+ "text": "CustomEvent<File[]>",
4821
+ "references": [
4822
+ {
4823
+ "name": "File",
4824
+ "package": "global:"
4825
+ }
4826
+ ]
4827
+ }
4828
+ },
4829
+ {
4830
+ "name": "bsFilesSelect",
4831
+ "description": "Fires with the accepted files, after the picker closes or files are dropped.",
4832
+ "type": {
4833
+ "text": "CustomEvent<File[]>",
4834
+ "references": [
4835
+ {
4836
+ "name": "File",
4837
+ "package": "global:"
4838
+ }
4839
+ ]
4840
+ }
4841
+ }
4842
+ ],
4843
+ "slots": [
4844
+ {
4845
+ "name": "icon",
4846
+ "description": "Replaces the default upload icon inside the round icon area."
4847
+ }
4848
+ ],
4849
+ "cssParts": [
4850
+ {
4851
+ "name": "browse",
4852
+ "description": "The \"Browse file\" button."
4853
+ },
4854
+ {
4855
+ "name": "description",
4856
+ "description": "The guidelines text under the heading."
4857
+ },
4858
+ {
4859
+ "name": "dropzone",
4860
+ "description": "The dashed drop area."
4861
+ },
4862
+ {
4863
+ "name": "heading",
4864
+ "description": "The heading text."
4865
+ },
4866
+ {
4867
+ "name": "icon",
4868
+ "description": "The round icon area."
4869
+ }
4870
+ ],
4871
+ "cssProperties": [
4057
4872
  {
4058
- "name": "bsRowSelect",
4059
- "type": {
4060
- "text": "CustomEvent<{ id: string | number; selected: boolean; }>"
4061
- }
4873
+ "name": "--bs-file-upload-bg",
4874
+ "description": "Background of the dropzone at rest. Aliased to --bs-surface-raised."
4062
4875
  },
4063
4876
  {
4064
- "name": "bsSort",
4065
- "type": {
4066
- "text": "CustomEvent<{ column: string; direction: \"desc\" | \"asc\"; }>"
4067
- }
4068
- }
4069
- ],
4070
- "cssParts": [
4877
+ "name": "--bs-file-upload-bg-dragging",
4878
+ "description": "Background while a file is dragged over it. Aliased to --bs-surface-container."
4879
+ },
4071
4880
  {
4072
- "name": "body",
4073
- "description": "The `<tbody>` element."
4881
+ "name": "--bs-file-upload-border-color",
4882
+ "description": "Dashed border color at rest. Aliased to --bs-border-neutral-container."
4074
4883
  },
4075
4884
  {
4076
- "name": "cell",
4077
- "description": "Each `<td>` in a body row."
4885
+ "name": "--bs-file-upload-border-color-dragging",
4886
+ "description": "Dashed border color while dragging. Aliased to --bs-border-neutral-container-pressed."
4078
4887
  },
4079
4888
  {
4080
- "name": "head",
4081
- "description": "The `<thead>` element."
4889
+ "name": "--bs-file-upload-border-width",
4890
+ "description": "Dashed border width. Aliased to --bs-border-width-medium."
4082
4891
  },
4083
4892
  {
4084
- "name": "header-cell",
4085
- "description": "Each `<th>` in the header row."
4893
+ "name": "--bs-file-upload-content-gap",
4894
+ "description": "Gap between the text and the browse button. Aliased to --bs-spacing-100."
4086
4895
  },
4087
4896
  {
4088
- "name": "row",
4089
- "description": "Each `<tr>` in the body."
4897
+ "name": "--bs-file-upload-description-color",
4898
+ "description": "Guidelines color. Aliased to --bs-text-secondary."
4090
4899
  },
4091
4900
  {
4092
- "name": "table",
4093
- "description": "The `<table>` element."
4901
+ "name": "--bs-file-upload-font-size",
4902
+ "description": "Text size. Aliased to --bs-font-size-md."
4903
+ },
4904
+ {
4905
+ "name": "--bs-file-upload-gap",
4906
+ "description": "Gap between the icon area and the content. Aliased to --bs-spacing-300."
4907
+ },
4908
+ {
4909
+ "name": "--bs-file-upload-heading-color",
4910
+ "description": "Heading color. Aliased to --bs-text-default."
4911
+ },
4912
+ {
4913
+ "name": "--bs-file-upload-icon-bg",
4914
+ "description": "Background of the round icon area at rest. Aliased to --bs-surface-hover."
4915
+ },
4916
+ {
4917
+ "name": "--bs-file-upload-icon-bg-dragging",
4918
+ "description": "Background of the icon area while dragging. Aliased to --bs-surface-raised."
4919
+ },
4920
+ {
4921
+ "name": "--bs-file-upload-icon-color",
4922
+ "description": "Upload icon color. Aliased to --bs-icon-default."
4923
+ },
4924
+ {
4925
+ "name": "--bs-file-upload-icon-size",
4926
+ "description": "Diameter of the round icon area. 102px, per the Figma spec."
4927
+ },
4928
+ {
4929
+ "name": "--bs-file-upload-line-height",
4930
+ "description": "Text line height. Aliased to --bs-line-height-body-md."
4931
+ },
4932
+ {
4933
+ "name": "--bs-file-upload-padding",
4934
+ "description": "Padding on all sides. Aliased to --bs-spacing-300."
4935
+ },
4936
+ {
4937
+ "name": "--bs-file-upload-radius",
4938
+ "description": "Corner radius. Aliased to --bs-border-radius-150."
4939
+ },
4940
+ {
4941
+ "name": "--bs-file-upload-text-gap",
4942
+ "description": "Gap between the heading and the guidelines. Aliased to --bs-spacing-25."
4094
4943
  }
4095
4944
  ]
4096
4945
  }
@@ -4098,119 +4947,221 @@
4098
4947
  "exports": [
4099
4948
  {
4100
4949
  "kind": "js",
4101
- "name": "BsDataTable",
4950
+ "name": "BsFileUpload",
4102
4951
  "declaration": {
4103
- "name": "BsDataTable"
4952
+ "name": "BsFileUpload"
4104
4953
  }
4105
4954
  },
4106
4955
  {
4107
4956
  "kind": "custom-element-definition",
4108
- "name": "bs-data-table",
4957
+ "name": "bs-file-upload",
4109
4958
  "declaration": {
4110
- "name": "BsDataTable"
4959
+ "name": "BsFileUpload"
4111
4960
  }
4112
4961
  }
4113
4962
  ]
4114
4963
  },
4115
4964
  {
4116
4965
  "kind": "javascript-module",
4117
- "path": "src/components/bs-dialog/bs-dialog.tsx",
4966
+ "path": "src/components/bs-file-upload-item/bs-file-upload-item.tsx",
4118
4967
  "declarations": [
4119
4968
  {
4120
4969
  "kind": "class",
4121
4970
  "customElement": true,
4122
- "tagName": "bs-dialog",
4123
- "name": "BsDialog",
4124
- "description": "An overlay dialog that interrupts the current flow for a focused task or confirmation.\nCloses itself on backdrop click, Escape, or its own close button, and emits `bsClose`.\n\n## When to use\n- Confirming a consequential action (e.g. \"Confirm booking\") before it takes effect.\n- A short, focused task that doesn't warrant navigating to a new page.\n\n## When not to use\n- For non-blocking status messages — use a toast/notification instead of interrupting the user.\n- For a long, multi-step flow — a full page or a dedicated route is usually a better fit than a\n dialog that just gets taller and taller.\n\nTwo additional slots cover the Figma \"Dialog\" component's other states: `image` (a hero image\nacross the top, close button floats over it instead of sitting in the header row) and `icon`\n(only rendered when `centered` is set, e.g. a success checkmark above a centered heading). The\nclose button \"floats\" (absolute-positioned, top-right of the dialog, with its own background)\nwhenever `centered` is true or the `image` slot has content -- otherwise it's the plain inline\nbutton in the header row next to the heading, same as before this addition.",
4971
+ "tagName": "bs-file-upload-item",
4972
+ "name": "BsFileUploadItem",
4973
+ "description": "One file in an upload list: a thumbnail, the file name and size, a status line (a progress bar\nwhile uploading, or a success / error message) and an action button (cancel while uploading or\nafter an error, remove once uploaded).\n\nPresentational only -- the consuming app owns the upload and drives `state`, `progress` and\n`message` from it. Pair with `bs-file-upload` (the dropzone that picks the files).\n\n## When to use\n- Showing the status of each file the user has added, in a list under a `bs-file-upload`.\n\n## When not to use\n- Attaching files to a chat message -- use `bs-attachment`.",
4125
4974
  "attributes": [
4126
4975
  {
4127
- "name": "centered",
4128
- "description": "Switches to the Figma \"Icon Centered\" layout: heading/body text centered, the `icon` slot\nrendered above the heading, and the close button floating top-right of the dialog instead of\ninline in the header row. Doesn't hide a slotted `image` if one is also provided -- Figma's\nspec doesn't show the two combined, so this is unspecified rather than actively blocked.\nReflected so consumers/CSS can target `bs-dialog[centered]`.",
4976
+ "name": "cancel-label",
4977
+ "description": "Accessible name of the cancel button (`loading`, `in-progress`, `error`).",
4129
4978
  "type": {
4130
- "text": "boolean"
4979
+ "text": "string"
4131
4980
  },
4132
- "default": "false",
4133
- "fieldName": "centered"
4981
+ "default": "'Cancel upload'",
4982
+ "fieldName": "cancelLabel"
4134
4983
  },
4135
4984
  {
4136
- "name": "heading",
4985
+ "name": "file-name",
4986
+ "description": "The file name.",
4137
4987
  "type": {
4138
4988
  "text": "string"
4139
4989
  },
4140
- "fieldName": "heading"
4990
+ "default": "''",
4991
+ "fieldName": "fileName"
4141
4992
  },
4142
4993
  {
4143
- "name": "open",
4144
- "description": "Mutable + reflected so the component can close itself (backdrop click, Escape, close button)\nthe same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.",
4994
+ "name": "file-size",
4995
+ "description": "The file size, already formatted (e.g. \"8MB\").",
4145
4996
  "type": {
4146
- "text": "boolean"
4997
+ "text": "string"
4147
4998
  },
4148
- "default": "false",
4149
- "fieldName": "open"
4999
+ "fieldName": "fileSize"
4150
5000
  },
4151
5001
  {
4152
- "name": "size",
5002
+ "name": "message",
5003
+ "description": "The status text. Defaults per state: \"Loading...\" (`loading`), \"{progress}% uploaded\"\n(`in-progress`), \"Upload failed\" (`error`), \"File uploaded successfully\" (`success`). Provide\nyour own for localisation or a specific error.",
4153
5004
  "type": {
4154
- "text": "\"lg\" | \"md\" | \"sm\"",
5005
+ "text": "string"
5006
+ },
5007
+ "fieldName": "message"
5008
+ },
5009
+ {
5010
+ "name": "progress",
5011
+ "description": "Upload progress, 0-100. Only used when `state=\"in-progress\"`.",
5012
+ "type": {
5013
+ "text": "number"
5014
+ },
5015
+ "default": "0",
5016
+ "fieldName": "progress"
5017
+ },
5018
+ {
5019
+ "name": "remove-label",
5020
+ "description": "Accessible name of the remove button (`success`).",
5021
+ "type": {
5022
+ "text": "string"
5023
+ },
5024
+ "default": "'Remove file'",
5025
+ "fieldName": "removeLabel"
5026
+ },
5027
+ {
5028
+ "name": "state",
5029
+ "description": "Where the upload is. `loading` = working with no known percentage (indeterminate bar);\n`in-progress` = uploading with a known `progress`; `error` and `success` are final.",
5030
+ "type": {
5031
+ "text": "\"error\" | \"in-progress\" | \"loading\" | \"success\"",
4155
5032
  "references": [
4156
5033
  {
4157
- "name": "BsDialogSize"
5034
+ "name": "BsFileUploadItemState"
4158
5035
  }
4159
5036
  ]
4160
5037
  },
4161
- "default": "'md'",
4162
- "fieldName": "size"
5038
+ "default": "'loading'",
5039
+ "fieldName": "state"
5040
+ },
5041
+ {
5042
+ "name": "thumbnail-alt",
5043
+ "description": "Alt text for `thumbnailSrc`. Leave empty when the file name already says it all.",
5044
+ "type": {
5045
+ "text": "string"
5046
+ },
5047
+ "default": "''",
5048
+ "fieldName": "thumbnailAlt"
5049
+ },
5050
+ {
5051
+ "name": "thumbnail-src",
5052
+ "description": "A preview image of the file. Shown instead of the placeholder icon when set.",
5053
+ "type": {
5054
+ "text": "string"
5055
+ },
5056
+ "fieldName": "thumbnailSrc"
4163
5057
  }
4164
5058
  ],
4165
5059
  "members": [
4166
5060
  {
4167
5061
  "kind": "field",
4168
- "name": "centered",
4169
- "description": "Switches to the Figma \"Icon Centered\" layout: heading/body text centered, the `icon` slot\nrendered above the heading, and the close button floating top-right of the dialog instead of\ninline in the header row. Doesn't hide a slotted `image` if one is also provided -- Figma's\nspec doesn't show the two combined, so this is unspecified rather than actively blocked.\nReflected so consumers/CSS can target `bs-dialog[centered]`.",
5062
+ "name": "cancelLabel",
5063
+ "description": "Accessible name of the cancel button (`loading`, `in-progress`, `error`).",
4170
5064
  "type": {
4171
- "text": "boolean"
5065
+ "text": "string"
4172
5066
  },
4173
- "default": "false",
4174
- "attribute": "centered",
4175
- "reflects": true
5067
+ "default": "'Cancel upload'",
5068
+ "attribute": "cancel-label"
4176
5069
  },
4177
5070
  {
4178
5071
  "kind": "field",
4179
- "name": "heading",
5072
+ "name": "fileName",
5073
+ "description": "The file name.",
4180
5074
  "type": {
4181
5075
  "text": "string"
4182
5076
  },
4183
- "attribute": "heading"
5077
+ "default": "''",
5078
+ "attribute": "file-name"
4184
5079
  },
4185
5080
  {
4186
5081
  "kind": "field",
4187
- "name": "open",
4188
- "description": "Mutable + reflected so the component can close itself (backdrop click, Escape, close button)\nthe same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.",
5082
+ "name": "fileSize",
5083
+ "description": "The file size, already formatted (e.g. \"8MB\").",
4189
5084
  "type": {
4190
- "text": "boolean"
5085
+ "text": "string"
4191
5086
  },
4192
- "default": "false",
4193
- "attribute": "open",
4194
- "reflects": true
5087
+ "attribute": "file-size"
4195
5088
  },
4196
5089
  {
4197
5090
  "kind": "field",
4198
- "name": "size",
5091
+ "name": "message",
5092
+ "description": "The status text. Defaults per state: \"Loading...\" (`loading`), \"{progress}% uploaded\"\n(`in-progress`), \"Upload failed\" (`error`), \"File uploaded successfully\" (`success`). Provide\nyour own for localisation or a specific error.",
4199
5093
  "type": {
4200
- "text": "\"lg\" | \"md\" | \"sm\"",
5094
+ "text": "string"
5095
+ },
5096
+ "attribute": "message"
5097
+ },
5098
+ {
5099
+ "kind": "field",
5100
+ "name": "progress",
5101
+ "description": "Upload progress, 0-100. Only used when `state=\"in-progress\"`.",
5102
+ "type": {
5103
+ "text": "number"
5104
+ },
5105
+ "default": "0",
5106
+ "attribute": "progress"
5107
+ },
5108
+ {
5109
+ "kind": "field",
5110
+ "name": "removeLabel",
5111
+ "description": "Accessible name of the remove button (`success`).",
5112
+ "type": {
5113
+ "text": "string"
5114
+ },
5115
+ "default": "'Remove file'",
5116
+ "attribute": "remove-label"
5117
+ },
5118
+ {
5119
+ "kind": "field",
5120
+ "name": "state",
5121
+ "description": "Where the upload is. `loading` = working with no known percentage (indeterminate bar);\n`in-progress` = uploading with a known `progress`; `error` and `success` are final.",
5122
+ "type": {
5123
+ "text": "\"error\" | \"in-progress\" | \"loading\" | \"success\"",
4201
5124
  "references": [
4202
5125
  {
4203
- "name": "BsDialogSize"
5126
+ "name": "BsFileUploadItemState"
4204
5127
  }
4205
5128
  ]
4206
5129
  },
4207
- "default": "'md'",
4208
- "attribute": "size"
5130
+ "default": "'loading'",
5131
+ "attribute": "state",
5132
+ "reflects": true
5133
+ },
5134
+ {
5135
+ "kind": "field",
5136
+ "name": "thumbnailAlt",
5137
+ "description": "Alt text for `thumbnailSrc`. Leave empty when the file name already says it all.",
5138
+ "type": {
5139
+ "text": "string"
5140
+ },
5141
+ "default": "''",
5142
+ "attribute": "thumbnail-alt"
5143
+ },
5144
+ {
5145
+ "kind": "field",
5146
+ "name": "thumbnailSrc",
5147
+ "description": "A preview image of the file. Shown instead of the placeholder icon when set.",
5148
+ "type": {
5149
+ "text": "string"
5150
+ },
5151
+ "attribute": "thumbnail-src"
4209
5152
  }
4210
5153
  ],
4211
5154
  "events": [
4212
5155
  {
4213
- "name": "bsClose",
5156
+ "name": "bsCancel",
5157
+ "description": "Fires when the cancel button is clicked (`loading`, `in-progress`, `error`). The consumer\nstops the upload and removes the item.",
5158
+ "type": {
5159
+ "text": "CustomEvent<void>"
5160
+ }
5161
+ },
5162
+ {
5163
+ "name": "bsRemove",
5164
+ "description": "Fires when the remove button is clicked (`success`). The consumer removes the file.",
4214
5165
  "type": {
4215
5166
  "text": "CustomEvent<void>"
4216
5167
  }
@@ -4218,54 +5169,108 @@
4218
5169
  ],
4219
5170
  "slots": [
4220
5171
  {
4221
- "name": "",
4222
- "description": "Default slot: the dialog body content."
5172
+ "name": "thumbnail",
5173
+ "description": "Replaces the thumbnail content (the image-placeholder icon, or `thumbnailSrc`)."
5174
+ }
5175
+ ],
5176
+ "cssParts": [
5177
+ {
5178
+ "name": "action",
5179
+ "description": "The cancel / remove button."
4223
5180
  },
4224
5181
  {
4225
- "name": "footer",
4226
- "description": "Optional footer content (typically action buttons)."
5182
+ "name": "item",
5183
+ "description": "The card."
4227
5184
  },
4228
5185
  {
4229
- "name": "icon",
4230
- "description": "Optional icon shown above the heading, only rendered at all when `centered` is true."
5186
+ "name": "name",
5187
+ "description": "The file name."
4231
5188
  },
4232
5189
  {
4233
- "name": "image",
4234
- "description": "Optional hero image across the top of the dialog. Presence of assigned content\nswitches the close button to float over it; doesn't affect layout when empty."
5190
+ "name": "progress",
5191
+ "description": "The progress bar (`loading` / `in-progress`)."
5192
+ },
5193
+ {
5194
+ "name": "size",
5195
+ "description": "The file size text."
5196
+ },
5197
+ {
5198
+ "name": "status",
5199
+ "description": "The success / error message line."
5200
+ },
5201
+ {
5202
+ "name": "thumbnail",
5203
+ "description": "The thumbnail box."
4235
5204
  }
4236
5205
  ],
4237
- "cssParts": [
5206
+ "cssProperties": [
4238
5207
  {
4239
- "name": "backdrop",
4240
- "description": "The full-viewport overlay behind the dialog."
5208
+ "name": "--bs-file-upload-item-bg",
5209
+ "description": "Card background. Aliased to --bs-surface-base."
4241
5210
  },
4242
5211
  {
4243
- "name": "body",
4244
- "description": "The body content wrapper."
5212
+ "name": "--bs-file-upload-item-border-color",
5213
+ "description": "Card border color. Aliased to --bs-border-default."
4245
5214
  },
4246
5215
  {
4247
- "name": "close",
4248
- "description": "The close button (inline in the header, or floating -- see the class doc above)."
5216
+ "name": "--bs-file-upload-item-border-width",
5217
+ "description": "Card border width. Aliased to --bs-border-width-thin."
4249
5218
  },
4250
5219
  {
4251
- "name": "dialog",
4252
- "description": "The dialog box itself."
5220
+ "name": "--bs-file-upload-item-content-gap",
5221
+ "description": "Gap between the name/size block and the status line. Aliased to --bs-spacing-100."
4253
5222
  },
4254
5223
  {
4255
- "name": "footer",
4256
- "description": "The footer wrapper (only visible when the footer slot has content)."
5224
+ "name": "--bs-file-upload-item-error-color",
5225
+ "description": "Error text color. Aliased to --bs-text-error."
4257
5226
  },
4258
5227
  {
4259
- "name": "header",
4260
- "description": "The header row (heading + close button, when the close button isn't floating)."
5228
+ "name": "--bs-file-upload-item-error-icon-color",
5229
+ "description": "Error icon color. Aliased to --bs-icon-error."
4261
5230
  },
4262
5231
  {
4263
- "name": "icon",
4264
- "description": "The icon wrapper (only rendered when `centered` is true)."
5232
+ "name": "--bs-file-upload-item-gap",
5233
+ "description": "Gap between the thumbnail, the content and the action. Aliased to --bs-spacing-150."
4265
5234
  },
4266
5235
  {
4267
- "name": "image",
4268
- "description": "The hero image wrapper (only visible when the `image` slot has content)."
5236
+ "name": "--bs-file-upload-item-name-color",
5237
+ "description": "File name color. Aliased to --bs-text-default."
5238
+ },
5239
+ {
5240
+ "name": "--bs-file-upload-item-padding",
5241
+ "description": "Card padding on all sides. Aliased to --bs-spacing-200."
5242
+ },
5243
+ {
5244
+ "name": "--bs-file-upload-item-radius",
5245
+ "description": "Card corner radius. Aliased to --bs-border-radius-150."
5246
+ },
5247
+ {
5248
+ "name": "--bs-file-upload-item-size-color",
5249
+ "description": "File size color. Aliased to --bs-text-default."
5250
+ },
5251
+ {
5252
+ "name": "--bs-file-upload-item-success-color",
5253
+ "description": "Success text color. Aliased to --bs-text-success."
5254
+ },
5255
+ {
5256
+ "name": "--bs-file-upload-item-success-icon-color",
5257
+ "description": "Success icon color. Aliased to --bs-icon-success."
5258
+ },
5259
+ {
5260
+ "name": "--bs-file-upload-item-thumbnail-bg",
5261
+ "description": "Placeholder background (when there is no image). Aliased to --bs-surface-container."
5262
+ },
5263
+ {
5264
+ "name": "--bs-file-upload-item-thumbnail-icon-color",
5265
+ "description": "Placeholder icon color. Aliased to --bs-icon-muted."
5266
+ },
5267
+ {
5268
+ "name": "--bs-file-upload-item-thumbnail-radius",
5269
+ "description": "Thumbnail corner radius. Aliased to --bs-border-radius-100."
5270
+ },
5271
+ {
5272
+ "name": "--bs-file-upload-item-thumbnail-size",
5273
+ "description": "Thumbnail width/height. 80px, per the Figma spec."
4269
5274
  }
4270
5275
  ]
4271
5276
  }
@@ -4273,16 +5278,16 @@
4273
5278
  "exports": [
4274
5279
  {
4275
5280
  "kind": "js",
4276
- "name": "BsDialog",
5281
+ "name": "BsFileUploadItem",
4277
5282
  "declaration": {
4278
- "name": "BsDialog"
5283
+ "name": "BsFileUploadItem"
4279
5284
  }
4280
5285
  },
4281
5286
  {
4282
5287
  "kind": "custom-element-definition",
4283
- "name": "bs-dialog",
5288
+ "name": "bs-file-upload-item",
4284
5289
  "declaration": {
4285
- "name": "BsDialog"
5290
+ "name": "BsFileUploadItem"
4286
5291
  }
4287
5292
  }
4288
5293
  ]
@@ -6969,6 +7974,15 @@
6969
7974
  "name": "BsProgressLinear",
6970
7975
  "description": "A linear (horizontal) progress indicator -- either a static bar showing a percentage fill\n(`type=\"determinate\"`) or a continuously sliding bar signaling in-progress work with no known\ncompletion percentage (`type=\"indeterminate\"`).\n\n## When to use\n- Showing the progress of a task with a known, quantifiable completion percentage (`determinate`),\n e.g. a file upload.\n- Signaling that work is happening in the background with no meaningful percentage to report\n (`indeterminate`), e.g. while waiting on a network response.\n\n## When not to use\n- For a compact, ring-shaped progress indicator -- use `bs-progress` (circular) instead.\n- For a percentage that's better expressed as plain text, without the reserved space and visual\n weight of a bar.",
6971
7976
  "attributes": [
7977
+ {
7978
+ "name": "aria-label",
7979
+ "description": "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`.",
7980
+ "type": {
7981
+ "text": "string"
7982
+ },
7983
+ "default": "null",
7984
+ "fieldName": "ariaLabel"
7985
+ },
6972
7986
  {
6973
7987
  "name": "show-label",
6974
7988
  "description": "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`.",
@@ -7017,6 +8031,16 @@
7017
8031
  }
7018
8032
  ],
7019
8033
  "members": [
8034
+ {
8035
+ "kind": "field",
8036
+ "name": "ariaLabel",
8037
+ "description": "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`.",
8038
+ "type": {
8039
+ "text": "string"
8040
+ },
8041
+ "default": "null",
8042
+ "attribute": "aria-label"
8043
+ },
7020
8044
  {
7021
8045
  "kind": "field",
7022
8046
  "name": "showLabel",