@brandsync/wc 1.9.0 → 1.11.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 (440) hide show
  1. package/custom-elements.json +8864 -3754
  2. package/dist/brandsync-wc/brandsync-wc.css +33 -0
  3. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  4. package/dist/brandsync-wc/{p-9f8852a0.entry.js → p-00a0d489.entry.js} +1 -1
  5. package/dist/brandsync-wc/{p-a5feaad4.entry.js → p-061ddc46.entry.js} +1 -1
  6. package/dist/brandsync-wc/{p-360452c2.entry.js → p-09435f41.entry.js} +1 -1
  7. package/dist/brandsync-wc/{p-107b1c5d.entry.js → p-09bc1923.entry.js} +1 -1
  8. package/dist/brandsync-wc/{p-1f7208cb.entry.js → p-09cbf05b.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-7c94e6ae.entry.js → p-0b2d3b7e.entry.js} +1 -1
  10. package/dist/brandsync-wc/p-0b7c77c1.entry.js +1 -0
  11. package/dist/brandsync-wc/p-0ee4126c.entry.js +1 -0
  12. package/dist/brandsync-wc/{p-0e39b9cc.entry.js → p-0f8cd2e8.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-1c0db4d6.entry.js → p-1261f0b0.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-6bf2f116.entry.js → p-1978e63c.entry.js} +1 -1
  15. package/dist/brandsync-wc/p-1aab6d07.entry.js +1 -0
  16. package/dist/brandsync-wc/{p-6fd7dd6a.entry.js → p-20030f4d.entry.js} +1 -1
  17. package/dist/brandsync-wc/p-2177042f.entry.js +1 -0
  18. package/dist/brandsync-wc/{p-33e44094.entry.js → p-2368a92e.entry.js} +1 -1
  19. package/dist/brandsync-wc/{p-29027559.entry.js → p-247e36ad.entry.js} +1 -1
  20. package/dist/brandsync-wc/{p-ae978c9a.entry.js → p-2497d128.entry.js} +1 -1
  21. package/dist/brandsync-wc/{p-fc240aa0.entry.js → p-282ddbee.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-0eed6813.entry.js → p-2f4e08e1.entry.js} +1 -1
  23. package/dist/brandsync-wc/{p-c3f72584.entry.js → p-34e5feaf.entry.js} +1 -1
  24. package/dist/brandsync-wc/{p-062cfa34.entry.js → p-39a26c64.entry.js} +1 -1
  25. package/dist/brandsync-wc/p-3a1af63a.entry.js +1 -0
  26. package/dist/brandsync-wc/{p-9f6fe37d.entry.js → p-3f09296a.entry.js} +1 -1
  27. package/dist/brandsync-wc/p-416322bd.entry.js +1 -0
  28. package/dist/brandsync-wc/{p-bbcc47b0.entry.js → p-491b51e6.entry.js} +1 -1
  29. package/dist/brandsync-wc/p-52cb2358.entry.js +1 -0
  30. package/dist/brandsync-wc/{p-3ec74d35.entry.js → p-56c37e0a.entry.js} +1 -1
  31. package/dist/brandsync-wc/p-5ba90a13.entry.js +1 -0
  32. package/dist/brandsync-wc/{p-2181378f.entry.js → p-5f27f04d.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-a09e157f.entry.js → p-617bd13a.entry.js} +1 -1
  34. package/dist/brandsync-wc/p-68fcd4a4.entry.js +1 -0
  35. package/dist/brandsync-wc/{p-cfcf3f0a.entry.js → p-69c0a85d.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-9f65f998.entry.js → p-6a696161.entry.js} +1 -1
  37. package/dist/brandsync-wc/{p-8ee0153b.entry.js → p-6c6cdf77.entry.js} +1 -1
  38. package/dist/brandsync-wc/{p-051d3064.entry.js → p-6e735e37.entry.js} +1 -1
  39. package/dist/brandsync-wc/{p-fc58c663.entry.js → p-73f214ed.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-be2c1740.entry.js → p-7796b93f.entry.js} +1 -1
  41. package/dist/brandsync-wc/p-78a69a59.entry.js +1 -0
  42. package/dist/brandsync-wc/{p-27bbed83.entry.js → p-78f4fcf0.entry.js} +1 -1
  43. package/dist/brandsync-wc/p-7f954939.entry.js +1 -0
  44. package/dist/brandsync-wc/{p-835a8dc7.entry.js → p-81605b82.entry.js} +1 -1
  45. package/dist/brandsync-wc/{p-de7c946d.entry.js → p-823ab3b2.entry.js} +1 -1
  46. package/dist/brandsync-wc/{p-a92eec48.entry.js → p-89fabf27.entry.js} +1 -1
  47. package/dist/brandsync-wc/{p-AgoOSYvW.js → p-DqQRXQMx.js} +2 -2
  48. package/dist/brandsync-wc/{p-70f64b25.entry.js → p-a9169157.entry.js} +1 -1
  49. package/dist/brandsync-wc/{p-05c7de28.entry.js → p-afb07368.entry.js} +1 -1
  50. package/dist/brandsync-wc/{p-235ae012.entry.js → p-b84366a7.entry.js} +1 -1
  51. package/dist/brandsync-wc/p-b9a4042e.entry.js +1 -0
  52. package/dist/brandsync-wc/{p-275072dd.entry.js → p-b9ccd9d1.entry.js} +1 -1
  53. package/dist/brandsync-wc/{p-61c1a2a3.entry.js → p-be3dd446.entry.js} +1 -1
  54. package/dist/brandsync-wc/p-c0a92750.entry.js +1 -0
  55. package/dist/brandsync-wc/{p-6331de9c.entry.js → p-d754ee13.entry.js} +1 -1
  56. package/dist/brandsync-wc/{p-e9b43754.entry.js → p-d75f3f87.entry.js} +1 -1
  57. package/dist/brandsync-wc/{p-3176d1d3.entry.js → p-d8b29a53.entry.js} +1 -1
  58. package/dist/brandsync-wc/p-de110ad0.entry.js +1 -0
  59. package/dist/brandsync-wc/p-e2556b4e.entry.js +1 -0
  60. package/dist/brandsync-wc/{p-4574a707.entry.js → p-e5daa6ca.entry.js} +1 -1
  61. package/dist/brandsync-wc/{p-c4de155c.entry.js → p-f15d9524.entry.js} +1 -1
  62. package/dist/brandsync-wc/p-f5180578.entry.js +1 -0
  63. package/dist/brandsync-wc/{p-114d2fd8.entry.js → p-f7d15fbe.entry.js} +1 -1
  64. package/dist/brandsync-wc/{p-a0d5a620.entry.js → p-fc069773.entry.js} +1 -1
  65. package/dist/brandsync-wc/p-fcee0dc4.entry.js +1 -0
  66. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  67. package/dist/cjs/bs-accordion.cjs.entry.js +1 -1
  68. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +2 -2
  69. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  70. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  71. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  72. package/dist/cjs/bs-attachment.cjs.entry.js +1 -1
  73. package/dist/cjs/bs-avatar.cjs.entry.js +1 -1
  74. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  75. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +1 -1
  76. package/dist/cjs/bs-breadcrumb.cjs.entry.js +1 -1
  77. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +2 -2
  78. package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
  79. package/dist/cjs/bs-button.cjs.entry.js +3 -3
  80. package/dist/cjs/bs-card.cjs.entry.js +3 -3
  81. package/dist/cjs/bs-carousel.cjs.entry.js +1 -1
  82. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
  83. package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
  84. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
  85. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
  86. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +2 -2
  87. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +2 -2
  88. package/dist/cjs/bs-checkbox.cjs.entry.js +1 -1
  89. package/dist/cjs/bs-chip-filter.cjs.entry.js +1 -1
  90. package/dist/cjs/bs-chip-informative.cjs.entry.js +1 -1
  91. package/dist/cjs/bs-chip-input.cjs.entry.js +1 -1
  92. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +1 -1
  93. package/dist/cjs/bs-composer.cjs.entry.js +1 -1
  94. package/dist/cjs/bs-cookie-consent.cjs.entry.js +186 -0
  95. package/dist/cjs/bs-data-table.cjs.entry.js +1 -1
  96. package/dist/cjs/bs-datepicker.cjs.entry.js +414 -0
  97. package/dist/cjs/bs-dialog.cjs.entry.js +1 -1
  98. package/dist/cjs/bs-error-page.cjs.entry.js +103 -0
  99. package/dist/cjs/bs-file-upload-item.cjs.entry.js +2 -2
  100. package/dist/cjs/bs-file-upload.cjs.entry.js +2 -2
  101. package/dist/cjs/bs-icon-button.cjs.entry.js +2 -2
  102. package/dist/cjs/bs-icon-tile.cjs.entry.js +52 -0
  103. package/dist/cjs/bs-inline-tab.cjs.entry.js +2 -2
  104. package/dist/cjs/{bs-input.cjs.entry.js → bs-input_3.cjs.entry.js} +74 -6
  105. package/dist/cjs/bs-logo.cjs.entry.js +1 -1
  106. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +2 -2
  107. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +3 -3
  108. package/dist/cjs/bs-navigation-header.cjs.entry.js +2 -2
  109. package/dist/cjs/bs-onboarding-checklist.cjs.entry.js +161 -0
  110. package/dist/cjs/bs-pagination.cjs.entry.js +2 -2
  111. package/dist/cjs/bs-product-tour.cjs.entry.js +78 -0
  112. package/dist/cjs/bs-progress-linear.cjs.entry.js +4 -4
  113. package/dist/cjs/bs-progress.cjs.entry.js +3 -3
  114. package/dist/cjs/bs-qr-code.cjs.entry.js +148 -0
  115. package/dist/cjs/bs-radio.cjs.entry.js +2 -2
  116. package/dist/cjs/bs-session-timeout.cjs.entry.js +215 -0
  117. package/dist/cjs/bs-slider.cjs.entry.js +2 -2
  118. package/dist/cjs/bs-snackbar.cjs.entry.js +9 -3
  119. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  120. package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
  121. package/dist/cjs/bs-stepper.cjs.entry.js +2 -2
  122. package/dist/cjs/bs-switch.cjs.entry.js +2 -2
  123. package/dist/cjs/bs-tab_3.cjs.entry.js +255 -0
  124. package/dist/cjs/bs-timepicker.cjs.entry.js +209 -0
  125. package/dist/cjs/bs-toast.cjs.entry.js +2 -2
  126. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  127. package/dist/cjs/bs-whats-new.cjs.entry.js +144 -0
  128. package/dist/cjs/{index-kk9YXF2S.js → index-tFJjflK5.js} +15 -3
  129. package/dist/cjs/loader.cjs.js +2 -2
  130. package/dist/collection/collection-manifest.json +11 -0
  131. package/dist/collection/components/bs-a11y.cmp.test.js +26 -0
  132. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  133. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  134. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  135. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  136. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  137. package/dist/collection/components/bs-button/bs-button/bs-button.cmp.test.js +28 -0
  138. package/dist/collection/components/bs-button/bs-button/bs-button.css +8 -2
  139. package/dist/collection/components/bs-button/bs-button/bs-button.js +4 -1
  140. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +1 -1
  141. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  142. package/dist/collection/components/bs-card/bs-card.cmp.test.js +48 -0
  143. package/dist/collection/components/bs-card/bs-card.css +37 -16
  144. package/dist/collection/components/bs-card/bs-card.js +2 -2
  145. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  146. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  147. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  148. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  149. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  150. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  151. package/dist/collection/components/bs-cookie-consent/bs-cookie-consent.cmp.test.js +217 -0
  152. package/dist/collection/components/bs-cookie-consent/bs-cookie-consent.css +350 -0
  153. package/dist/collection/components/bs-cookie-consent/bs-cookie-consent.js +668 -0
  154. package/dist/collection/components/bs-cookie-consent/bs-cookie-consent.stories.js +103 -0
  155. package/dist/collection/components/bs-datepicker/bs-datepicker.cmp.test.js +191 -0
  156. package/dist/collection/components/bs-datepicker/bs-datepicker.css +325 -0
  157. package/dist/collection/components/bs-datepicker/bs-datepicker.js +788 -0
  158. package/dist/collection/components/bs-datepicker/bs-datepicker.stories.js +64 -0
  159. package/dist/collection/components/bs-error-page/bs-error-page.cmp.test.js +99 -0
  160. package/dist/collection/components/bs-error-page/bs-error-page.css +105 -0
  161. package/dist/collection/components/bs-error-page/bs-error-page.js +328 -0
  162. package/dist/collection/components/bs-error-page/bs-error-page.stories.js +57 -0
  163. package/dist/collection/components/bs-file-upload/bs-file-upload.js +1 -1
  164. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +1 -1
  165. package/dist/collection/components/bs-icon-tile/bs-icon-tile.cmp.test.js +175 -0
  166. package/dist/collection/components/bs-icon-tile/bs-icon-tile.css +112 -0
  167. package/dist/collection/components/bs-icon-tile/bs-icon-tile.js +158 -0
  168. package/dist/collection/components/bs-icon-tile/bs-icon-tile.stories.js +45 -0
  169. package/dist/collection/components/bs-input/bs-input.cmp.test.js +14 -0
  170. package/dist/collection/components/bs-input/bs-input.css +9 -2
  171. package/dist/collection/components/bs-input/bs-input.js +7 -4
  172. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  173. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  174. package/dist/collection/components/bs-onboarding-checklist/bs-onboarding-checklist.cmp.test.js +280 -0
  175. package/dist/collection/components/bs-onboarding-checklist/bs-onboarding-checklist.css +488 -0
  176. package/dist/collection/components/bs-onboarding-checklist/bs-onboarding-checklist.js +674 -0
  177. package/dist/collection/components/bs-onboarding-checklist/bs-onboarding-checklist.stories.js +92 -0
  178. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  179. package/dist/collection/components/bs-product-tour/bs-product-tour.cmp.test.js +116 -0
  180. package/dist/collection/components/bs-product-tour/bs-product-tour.css +265 -0
  181. package/dist/collection/components/bs-product-tour/bs-product-tour.js +391 -0
  182. package/dist/collection/components/bs-product-tour/bs-product-tour.stories.js +68 -0
  183. package/dist/collection/components/bs-progress/bs-progress.js +2 -2
  184. package/dist/collection/components/bs-progress-linear/bs-progress-linear.css +1 -1
  185. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +2 -2
  186. package/dist/collection/components/bs-qr-code/bs-qr-code.cmp.test.js +152 -0
  187. package/dist/collection/components/bs-qr-code/bs-qr-code.css +307 -0
  188. package/dist/collection/components/bs-qr-code/bs-qr-code.js +767 -0
  189. package/dist/collection/components/bs-qr-code/bs-qr-code.stories.js +99 -0
  190. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  191. package/dist/collection/components/bs-session-timeout/bs-session-timeout.cmp.test.js +202 -0
  192. package/dist/collection/components/bs-session-timeout/bs-session-timeout.css +239 -0
  193. package/dist/collection/components/bs-session-timeout/bs-session-timeout.js +772 -0
  194. package/dist/collection/components/bs-session-timeout/bs-session-timeout.stories.js +88 -0
  195. package/dist/collection/components/bs-slider/bs-slider.js +1 -1
  196. package/dist/collection/components/bs-snackbar/bs-snackbar.cmp.test.js +20 -0
  197. package/dist/collection/components/bs-snackbar/bs-snackbar.css +6 -4
  198. package/dist/collection/components/bs-snackbar/bs-snackbar.js +53 -1
  199. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  200. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  201. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  202. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  203. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  204. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  205. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  206. package/dist/collection/components/bs-timepicker/bs-timepicker.cmp.test.js +141 -0
  207. package/dist/collection/components/bs-timepicker/bs-timepicker.css +204 -0
  208. package/dist/collection/components/bs-timepicker/bs-timepicker.js +511 -0
  209. package/dist/collection/components/bs-timepicker/bs-timepicker.stories.js +44 -0
  210. package/dist/collection/components/bs-toast/bs-toast.js +1 -1
  211. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  212. package/dist/collection/components/bs-whats-new/bs-whats-new.cmp.test.js +200 -0
  213. package/dist/collection/components/bs-whats-new/bs-whats-new.css +315 -0
  214. package/dist/collection/components/bs-whats-new/bs-whats-new.js +790 -0
  215. package/dist/collection/components/bs-whats-new/bs-whats-new.stories.js +105 -0
  216. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.cmp.test.js +79 -0
  217. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.css +131 -0
  218. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.js +295 -0
  219. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.stories.js +67 -0
  220. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +2 -2
  221. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  222. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  223. package/dist/components/bs-accordion.js +1 -1
  224. package/dist/components/bs-ai-disclaimer.js +1 -1
  225. package/dist/components/bs-ai-greeting.js +1 -1
  226. package/dist/components/bs-ai-thinking.js +1 -1
  227. package/dist/components/bs-attachment-list.js +1 -1
  228. package/dist/components/bs-attachment.js +1 -1
  229. package/dist/components/bs-avatar.js +1 -1
  230. package/dist/components/bs-badge.js +1 -1
  231. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  232. package/dist/components/bs-breadcrumb.js +1 -1
  233. package/dist/components/bs-breadcrumbs.js +1 -1
  234. package/dist/components/bs-button-skeleton.js +1 -1
  235. package/dist/components/bs-button.js +1 -1
  236. package/dist/components/bs-card.js +1 -1
  237. package/dist/components/bs-carousel.js +1 -1
  238. package/dist/components/bs-chatbot-feedback.js +1 -1
  239. package/dist/components/bs-chatbot-header.js +1 -1
  240. package/dist/components/bs-chatbot-response-action.js +1 -1
  241. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  242. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  243. package/dist/components/bs-checkbox-skeleton.js +1 -1
  244. package/dist/components/bs-checkbox.js +1 -1
  245. package/dist/components/bs-chip-filter.js +1 -1
  246. package/dist/components/bs-chip-informative.js +1 -1
  247. package/dist/components/bs-chip-input.js +1 -1
  248. package/dist/components/bs-composer-status-banner.js +1 -1
  249. package/dist/components/bs-composer.js +1 -1
  250. package/dist/components/bs-cookie-consent.d.ts +11 -0
  251. package/dist/components/bs-cookie-consent.js +1 -0
  252. package/dist/components/bs-data-table.js +1 -1
  253. package/dist/components/bs-datepicker.d.ts +11 -0
  254. package/dist/components/bs-datepicker.js +1 -0
  255. package/dist/components/bs-dialog.js +1 -1
  256. package/dist/components/bs-error-page.d.ts +11 -0
  257. package/dist/components/bs-error-page.js +1 -0
  258. package/dist/components/bs-file-upload-item.js +1 -1
  259. package/dist/components/bs-file-upload.js +1 -1
  260. package/dist/components/bs-icon-button.js +1 -1
  261. package/dist/components/bs-icon-tile.d.ts +11 -0
  262. package/dist/components/bs-icon-tile.js +1 -0
  263. package/dist/components/bs-inline-tab.js +1 -1
  264. package/dist/components/bs-input.js +1 -1
  265. package/dist/components/bs-logo.js +1 -1
  266. package/dist/components/bs-menu-item.js +1 -1
  267. package/dist/components/bs-menu.js +1 -1
  268. package/dist/components/bs-navigation-drawer-item.js +1 -1
  269. package/dist/components/bs-navigation-drawer.js +1 -1
  270. package/dist/components/bs-navigation-header.js +1 -1
  271. package/dist/components/bs-onboarding-checklist.d.ts +11 -0
  272. package/dist/components/bs-onboarding-checklist.js +1 -0
  273. package/dist/components/bs-pagination.js +1 -1
  274. package/dist/components/bs-product-tour.d.ts +11 -0
  275. package/dist/components/bs-product-tour.js +1 -0
  276. package/dist/components/bs-progress-linear.js +1 -1
  277. package/dist/components/bs-progress.js +1 -1
  278. package/dist/components/bs-qr-code.d.ts +11 -0
  279. package/dist/components/bs-qr-code.js +1 -0
  280. package/dist/components/bs-radio.js +1 -1
  281. package/dist/components/bs-session-timeout.d.ts +11 -0
  282. package/dist/components/bs-session-timeout.js +1 -0
  283. package/dist/components/bs-slider.js +1 -1
  284. package/dist/components/bs-snackbar.js +1 -1
  285. package/dist/components/bs-source-link.js +1 -1
  286. package/dist/components/bs-stepper-step.js +1 -1
  287. package/dist/components/bs-stepper.js +1 -1
  288. package/dist/components/bs-switch.js +1 -1
  289. package/dist/components/bs-tab.js +1 -1
  290. package/dist/components/bs-tabs.js +1 -1
  291. package/dist/components/bs-timepicker.d.ts +11 -0
  292. package/dist/components/bs-timepicker.js +1 -0
  293. package/dist/components/bs-toast.js +1 -1
  294. package/dist/components/bs-tooltip.js +1 -1
  295. package/dist/components/bs-whats-new-entry.d.ts +11 -0
  296. package/dist/components/bs-whats-new-entry.js +1 -0
  297. package/dist/components/bs-whats-new.d.ts +11 -0
  298. package/dist/components/bs-whats-new.js +1 -0
  299. package/dist/components/index.js +1 -1
  300. package/dist/components/{p-R2MlkUzD.js → p-BEEoVNRu.js} +1 -1
  301. package/dist/components/{p-EtXc94lJ.js → p-BZ3M4lOU.js} +1 -1
  302. package/dist/components/p-B_I4UEMp.js +1 -0
  303. package/dist/components/{p-BfEyD6Ku.js → p-Be9L4_Fe.js} +1 -1
  304. package/dist/components/p-Be_Pmccm.js +1 -0
  305. package/dist/components/p-Bl_tVzeq.js +1 -0
  306. package/dist/components/p-C8yT2Ucq.js +1 -0
  307. package/dist/components/p-CA31vqjL.js +1 -0
  308. package/dist/components/p-CUfs0ROR.js +1 -0
  309. package/dist/components/{p-JYlmcxBn.js → p-CVrEuVFo.js} +1 -1
  310. package/dist/components/{p-BA3c9Rom.js → p-C_j_jDM6.js} +1 -1
  311. package/dist/components/p-CbimDNGY.js +1 -0
  312. package/dist/components/{p-Buly0d5G.js → p-CeUK3n7D.js} +1 -1
  313. package/dist/components/p-CncySD_-.js +1 -0
  314. package/dist/components/p-DE8K7fg0.js +1 -0
  315. package/dist/components/p-Dr0Qk9Zc.js +1 -0
  316. package/dist/components/p-DuLL7Ouw.js +1 -0
  317. package/dist/components/p-YsHQLXET.js +1 -0
  318. package/dist/components/p-qmS2CBqi.js +1 -0
  319. package/dist/components/{p-BoeorHNv.js → p-zTHlbyH6.js} +1 -1
  320. package/dist/esm/brandsync-wc.js +3 -3
  321. package/dist/esm/bs-accordion.entry.js +1 -1
  322. package/dist/esm/bs-ai-disclaimer.entry.js +2 -2
  323. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  324. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  325. package/dist/esm/bs-attachment-list.entry.js +2 -2
  326. package/dist/esm/bs-attachment.entry.js +1 -1
  327. package/dist/esm/bs-avatar.entry.js +1 -1
  328. package/dist/esm/bs-badge.entry.js +1 -1
  329. package/dist/esm/bs-breadcrumb-overflow.entry.js +1 -1
  330. package/dist/esm/bs-breadcrumb.entry.js +1 -1
  331. package/dist/esm/bs-breadcrumbs.entry.js +2 -2
  332. package/dist/esm/bs-button-skeleton.entry.js +2 -2
  333. package/dist/esm/bs-button.entry.js +3 -3
  334. package/dist/esm/bs-card.entry.js +3 -3
  335. package/dist/esm/bs-carousel.entry.js +1 -1
  336. package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
  337. package/dist/esm/bs-chatbot-header.entry.js +2 -2
  338. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  339. package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
  340. package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
  341. package/dist/esm/bs-checkbox-skeleton.entry.js +2 -2
  342. package/dist/esm/bs-checkbox.entry.js +1 -1
  343. package/dist/esm/bs-chip-filter.entry.js +1 -1
  344. package/dist/esm/bs-chip-informative.entry.js +1 -1
  345. package/dist/esm/bs-chip-input.entry.js +1 -1
  346. package/dist/esm/bs-composer-status-banner.entry.js +1 -1
  347. package/dist/esm/bs-composer.entry.js +1 -1
  348. package/dist/esm/bs-cookie-consent.entry.js +184 -0
  349. package/dist/esm/bs-data-table.entry.js +1 -1
  350. package/dist/esm/bs-datepicker.entry.js +412 -0
  351. package/dist/esm/bs-dialog.entry.js +1 -1
  352. package/dist/esm/bs-error-page.entry.js +101 -0
  353. package/dist/esm/bs-file-upload-item.entry.js +2 -2
  354. package/dist/esm/bs-file-upload.entry.js +2 -2
  355. package/dist/esm/bs-icon-button.entry.js +2 -2
  356. package/dist/esm/bs-icon-tile.entry.js +50 -0
  357. package/dist/esm/bs-inline-tab.entry.js +2 -2
  358. package/dist/esm/{bs-input.entry.js → bs-input_3.entry.js} +73 -7
  359. package/dist/esm/bs-logo.entry.js +1 -1
  360. package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
  361. package/dist/esm/bs-navigation-drawer.entry.js +3 -3
  362. package/dist/esm/bs-navigation-header.entry.js +2 -2
  363. package/dist/esm/bs-onboarding-checklist.entry.js +159 -0
  364. package/dist/esm/bs-pagination.entry.js +2 -2
  365. package/dist/esm/bs-product-tour.entry.js +76 -0
  366. package/dist/esm/bs-progress-linear.entry.js +4 -4
  367. package/dist/esm/bs-progress.entry.js +3 -3
  368. package/dist/esm/bs-qr-code.entry.js +146 -0
  369. package/dist/esm/bs-radio.entry.js +2 -2
  370. package/dist/esm/bs-session-timeout.entry.js +213 -0
  371. package/dist/esm/bs-slider.entry.js +2 -2
  372. package/dist/esm/bs-snackbar.entry.js +9 -3
  373. package/dist/esm/bs-source-link.entry.js +3 -3
  374. package/dist/esm/bs-stepper-step.entry.js +2 -2
  375. package/dist/esm/bs-stepper.entry.js +2 -2
  376. package/dist/esm/bs-switch.entry.js +2 -2
  377. package/dist/esm/bs-tab_3.entry.js +251 -0
  378. package/dist/esm/bs-timepicker.entry.js +207 -0
  379. package/dist/esm/bs-toast.entry.js +2 -2
  380. package/dist/esm/bs-tooltip.entry.js +2 -2
  381. package/dist/esm/bs-whats-new.entry.js +142 -0
  382. package/dist/esm/{index-AgoOSYvW.js → index-DqQRXQMx.js} +15 -3
  383. package/dist/esm/loader.js +3 -3
  384. package/dist/types/components/bs-button/bs-button/bs-button.d.ts +3 -0
  385. package/dist/types/components/bs-cookie-consent/bs-cookie-consent.cmp.test.d.ts +1 -0
  386. package/dist/types/components/bs-cookie-consent/bs-cookie-consent.d.ts +136 -0
  387. package/dist/types/components/bs-cookie-consent/bs-cookie-consent.stories.d.ts +16 -0
  388. package/dist/types/components/bs-datepicker/bs-datepicker.cmp.test.d.ts +1 -0
  389. package/dist/types/components/bs-datepicker/bs-datepicker.d.ts +138 -0
  390. package/dist/types/components/bs-datepicker/bs-datepicker.stories.d.ts +20 -0
  391. package/dist/types/components/bs-error-page/bs-error-page.cmp.test.d.ts +1 -0
  392. package/dist/types/components/bs-error-page/bs-error-page.d.ts +60 -0
  393. package/dist/types/components/bs-error-page/bs-error-page.stories.d.ts +22 -0
  394. package/dist/types/components/bs-icon-tile/bs-icon-tile.cmp.test.d.ts +1 -0
  395. package/dist/types/components/bs-icon-tile/bs-icon-tile.d.ts +40 -0
  396. package/dist/types/components/bs-icon-tile/bs-icon-tile.stories.d.ts +13 -0
  397. package/dist/types/components/bs-onboarding-checklist/bs-onboarding-checklist.cmp.test.d.ts +1 -0
  398. package/dist/types/components/bs-onboarding-checklist/bs-onboarding-checklist.d.ts +140 -0
  399. package/dist/types/components/bs-onboarding-checklist/bs-onboarding-checklist.stories.d.ts +18 -0
  400. package/dist/types/components/bs-product-tour/bs-product-tour.cmp.test.d.ts +1 -0
  401. package/dist/types/components/bs-product-tour/bs-product-tour.d.ts +78 -0
  402. package/dist/types/components/bs-product-tour/bs-product-tour.stories.d.ts +19 -0
  403. package/dist/types/components/bs-qr-code/bs-qr-code.cmp.test.d.ts +1 -0
  404. package/dist/types/components/bs-qr-code/bs-qr-code.d.ts +124 -0
  405. package/dist/types/components/bs-qr-code/bs-qr-code.stories.d.ts +28 -0
  406. package/dist/types/components/bs-session-timeout/bs-session-timeout.cmp.test.d.ts +1 -0
  407. package/dist/types/components/bs-session-timeout/bs-session-timeout.d.ts +141 -0
  408. package/dist/types/components/bs-session-timeout/bs-session-timeout.stories.d.ts +19 -0
  409. package/dist/types/components/bs-snackbar/bs-snackbar.d.ts +7 -0
  410. package/dist/types/components/bs-timepicker/bs-timepicker.cmp.test.d.ts +1 -0
  411. package/dist/types/components/bs-timepicker/bs-timepicker.d.ts +103 -0
  412. package/dist/types/components/bs-timepicker/bs-timepicker.stories.d.ts +14 -0
  413. package/dist/types/components/bs-whats-new/bs-whats-new.cmp.test.d.ts +1 -0
  414. package/dist/types/components/bs-whats-new/bs-whats-new.d.ts +147 -0
  415. package/dist/types/components/bs-whats-new/bs-whats-new.stories.d.ts +14 -0
  416. package/dist/types/components/bs-whats-new-entry/bs-whats-new-entry.cmp.test.d.ts +1 -0
  417. package/dist/types/components/bs-whats-new-entry/bs-whats-new-entry.d.ts +53 -0
  418. package/dist/types/components/bs-whats-new-entry/bs-whats-new-entry.stories.d.ts +18 -0
  419. package/dist/types/components.d.ts +3072 -17
  420. package/package.json +1 -1
  421. package/dist/brandsync-wc/p-2891d40b.entry.js +0 -1
  422. package/dist/brandsync-wc/p-36bf37d9.entry.js +0 -1
  423. package/dist/brandsync-wc/p-3b64e3cd.entry.js +0 -1
  424. package/dist/brandsync-wc/p-4e5dcaff.entry.js +0 -1
  425. package/dist/brandsync-wc/p-7b00dd36.entry.js +0 -1
  426. package/dist/brandsync-wc/p-c10d2529.entry.js +0 -1
  427. package/dist/brandsync-wc/p-f006d962.entry.js +0 -1
  428. package/dist/brandsync-wc/p-f074f94e.entry.js +0 -1
  429. package/dist/brandsync-wc/p-f7d47c17.entry.js +0 -1
  430. package/dist/brandsync-wc/p-fddc7bd1.entry.js +0 -1
  431. package/dist/cjs/bs-menu-item.cjs.entry.js +0 -34
  432. package/dist/cjs/bs-menu.cjs.entry.js +0 -39
  433. package/dist/cjs/bs-tab.cjs.entry.js +0 -88
  434. package/dist/cjs/bs-tabs.cjs.entry.js +0 -133
  435. package/dist/components/p-CpUHnsq9.js +0 -1
  436. package/dist/components/p-wei0Ija2.js +0 -1
  437. package/dist/esm/bs-menu-item.entry.js +0 -32
  438. package/dist/esm/bs-menu.entry.js +0 -37
  439. package/dist/esm/bs-tab.entry.js +0 -86
  440. package/dist/esm/bs-tabs.entry.js +0 -131
@@ -0,0 +1,76 @@
1
+ import { r as registerInstance, c as createEvent, h } from './index-DqQRXQMx.js';
2
+
3
+ const bsProductTourCss = () => `:host{display:inline-block;--bs-product-tour-bg:var(--bs-paper-bg-base);--bs-product-tour-radius:var(--bs-border-radius-150);--bs-product-tour-color:var(--bs-text-default);--bs-product-tour-color-secondary:var(--bs-text-secondary);--bs-product-tour-art-size:64px;--bs-product-tour-art-icon-size:28px;--bs-product-tour-arrow-width:22px;--bs-product-tour-arrow-height:16px;--bs-product-tour-arrow-offset:36px;--bs-product-tour-width:400px;--bs-product-tour-padding:var(--bs-spacing-300);--bs-product-tour-gap:var(--bs-spacing-150);--bs-product-tour-shadow-color:var(--bs-elevation-medium)}:host([type='pointer']){--bs-product-tour-width:320px;--bs-product-tour-padding:var(--bs-spacing-200);--bs-product-tour-gap:var(--bs-spacing-100);--bs-product-tour-shadow-color:var(--bs-elevation-high)}.bs-product-tour{position:relative;width:var(--bs-product-tour-width);max-width:100%;color:var(--bs-product-tour-color);font-family:inherit}.bs-product-tour,.bs-product-tour__card{--bs-card-bg:var(--bs-product-tour-bg);--bs-card-radius:var(--bs-product-tour-radius);--bs-card-padding:var(--bs-product-tour-padding)}.bs-product-tour__body{display:flex;flex-direction:column;gap:var(--bs-product-tour-gap)}.bs-product-tour p{margin:0}.bs-product-tour--card{--bs-card-shadow:0 4px 8px var(--bs-product-tour-shadow-color)}.bs-product-tour--card .bs-product-tour__body{align-items:center;text-align:center}.bs-product-tour__art{--bs-icon-tile-size:var(--bs-product-tour-art-size);--bs-icon-tile-icon-size:var(--bs-product-tour-art-icon-size)}.bs-product-tour__glyph,::slotted([slot='icon']){width:var(--bs-product-tour-art-icon-size);height:var(--bs-product-tour-art-icon-size)}.bs-product-tour--card .bs-product-tour__heading{align-self:stretch;font-size:var(--bs-font-size-2xl);font-weight:var(--bs-font-weight-bold);line-height:32px}.bs-product-tour--card .bs-product-tour__description{align-self:stretch;color:var(--bs-product-tour-color-secondary);font-size:var(--bs-font-size-sm);line-height:20px}.bs-product-tour--card .bs-product-tour__actions{padding-top:var(--bs-spacing-100)}.bs-product-tour--card .bs-product-tour__actions bs-button{--bs-button-height-md:var(--bs-spacing-550);min-width:94px}.bs-product-tour--pointer{filter:drop-shadow(0 4px 4px var(--bs-product-tour-shadow-color))}.bs-product-tour__card{display:block;--bs-card-shadow:none}.bs-product-tour--pointer .bs-product-tour__body{min-height:calc(140px - var(--bs-product-tour-padding) * 2)}.bs-product-tour--pointer .bs-product-tour__text{display:flex;flex-direction:column;gap:var(--bs-spacing-25);padding-inline-end:var(--bs-spacing-500)}.bs-product-tour--pointer .bs-product-tour__heading{font-size:var(--bs-font-size-md);font-weight:var(--bs-font-weight-semibold);line-height:24px}.bs-product-tour--pointer .bs-product-tour__description{color:var(--bs-product-tour-color-secondary);font-size:var(--bs-font-size-sm);line-height:20px}.bs-product-tour__close{position:absolute;top:3px;inset-inline-end:3px}.bs-product-tour__close svg{width:20px;height:20px}.bs-product-tour__footer{display:flex;align-items:center;justify-content:space-between;gap:var(--bs-spacing-100);margin-top:auto;padding-top:4px}.bs-product-tour__progress{color:var(--bs-product-tour-color-secondary);font-size:var(--bs-font-size-xs);line-height:16px;white-space:nowrap}.bs-product-tour--pointer .bs-product-tour__actions{display:flex;align-items:center;gap:var(--bs-spacing-100)}.bs-product-tour--pointer .bs-product-tour__actions bs-button{--bs-button-height-sm:var(--bs-spacing-400)}.bs-product-tour--card .bs-product-tour__actions{display:flex;align-items:center;gap:var(--bs-spacing-100)}.bs-product-tour__arrow{position:absolute;background:var(--bs-product-tour-bg);pointer-events:none}:host([direction^='top']) .bs-product-tour__arrow,:host([direction^='bottom']) .bs-product-tour__arrow{width:var(--bs-product-tour-arrow-width);height:calc(var(--bs-product-tour-arrow-height) + 1px)}:host([direction^='top']) .bs-product-tour__arrow{bottom:calc(100% - 1px);clip-path:polygon(50% 0, 100% 100%, 0 100%)}:host([direction^='bottom']) .bs-product-tour__arrow{top:calc(100% - 1px);clip-path:polygon(0 0, 100% 0, 50% 100%)}:host([direction='top']) .bs-product-tour__arrow,:host([direction='bottom']) .bs-product-tour__arrow{left:50%;transform:translateX(-50%)}:host([direction$='-left']) .bs-product-tour__arrow{left:var(--bs-product-tour-arrow-offset);transform:translateX(-50%)}:host([direction$='-right']) .bs-product-tour__arrow{right:var(--bs-product-tour-arrow-offset);transform:translateX(50%)}:host([direction^='left']) .bs-product-tour__arrow,:host([direction^='right']) .bs-product-tour__arrow{width:calc(var(--bs-product-tour-arrow-height) + 1px);height:var(--bs-product-tour-arrow-width)}:host([direction^='left']) .bs-product-tour__arrow{right:calc(100% - 1px);clip-path:polygon(0 50%, 100% 0, 100% 100%)}:host([direction^='right']) .bs-product-tour__arrow{left:calc(100% - 1px);clip-path:polygon(0 0, 100% 50%, 0 100%)}:host([direction='left']) .bs-product-tour__arrow,:host([direction='right']) .bs-product-tour__arrow{top:50%;transform:translateY(-50%)}:host([direction$='-top']) .bs-product-tour__arrow{top:var(--bs-product-tour-arrow-offset);transform:translateY(-50%)}:host([direction$='-bottom']) .bs-product-tour__arrow{bottom:var(--bs-product-tour-arrow-offset);transform:translateY(50%)}`;
4
+
5
+ const BsProductTour = class {
6
+ constructor(hostRef) {
7
+ registerInstance(this, hostRef);
8
+ this.bsPrimary = createEvent(this, "bsPrimary");
9
+ this.bsSecondary = createEvent(this, "bsSecondary");
10
+ this.bsClose = createEvent(this, "bsClose");
11
+ }
12
+ /** `welcome` and `success` are centred cards with an art tile; `pointer` is the compact step
13
+ * with an arrow. */
14
+ type = 'welcome';
15
+ /** Where the arrow sits (`pointer` only): the side of the card it's on, and for corners/edges
16
+ * which end it's near, e.g. `top-left` = on the top edge, near the left corner. */
17
+ direction = 'top';
18
+ /** Heading. */
19
+ heading;
20
+ /** Paragraph under the heading. */
21
+ description;
22
+ /** Current step, 1-based (`pointer`). Used with `total` for the progress label. */
23
+ step = 1;
24
+ /** Number of steps (`pointer`). The progress label is hidden when this is 0. */
25
+ total = 0;
26
+ /** Template of the progress label; `{step}` and `{total}` are replaced. */
27
+ progressLabel = '{step} of {total}';
28
+ /** Label of the primary button. Defaults to "Start" (`welcome`), "Done" (`success`) or "Next"
29
+ * (`pointer`). Set it to an empty string to hide the button. */
30
+ primaryLabel;
31
+ /** Label of the secondary button. Defaults to "Later" (`welcome`) or "Back" (`pointer`); none for
32
+ * `success`. Set it to an empty string to hide the button. */
33
+ secondaryLabel;
34
+ /** Shows a close button in the corner (`pointer`). */
35
+ closable = false;
36
+ /** Accessible name of the close button. */
37
+ closeLabel = 'Close';
38
+ /** Fires when the primary button is pressed. */
39
+ bsPrimary;
40
+ /** Fires when the secondary button is pressed. */
41
+ bsSecondary;
42
+ /** Fires when the close button is pressed. */
43
+ bsClose;
44
+ get primary() {
45
+ if (this.primaryLabel !== undefined)
46
+ return this.primaryLabel;
47
+ return { welcome: 'Start', success: 'Done', pointer: 'Next' }[this.type] ?? '';
48
+ }
49
+ get secondary() {
50
+ if (this.secondaryLabel !== undefined)
51
+ return this.secondaryLabel;
52
+ return { welcome: 'Later', success: '', pointer: 'Back' }[this.type] ?? '';
53
+ }
54
+ renderActions(buttonSize, secondaryVariant) {
55
+ const { primary, secondary } = this;
56
+ if (!primary && !secondary)
57
+ return null;
58
+ return (h("div", { part: "actions", class: "bs-product-tour__actions" }, secondary && (h("bs-button", { part: "secondary", variant: secondaryVariant, size: buttonSize, onClick: () => this.bsSecondary.emit() }, secondary)), primary && (h("bs-button", { part: "primary", variant: "primary", size: buttonSize, onClick: () => this.bsPrimary.emit() }, primary))));
59
+ }
60
+ renderCard() {
61
+ const success = this.type === 'success';
62
+ return (h("bs-card", { part: "container", class: "bs-product-tour bs-product-tour--card", surface: "base" }, h("div", { class: "bs-product-tour__body" }, h("bs-icon-tile", { part: "art", class: "bs-product-tour__art", intent: success ? 'success' : 'brand', size: "lg" }, h("slot", { name: "icon" }, success ? h(CheckIcon, null) : h(SparkleIcon, null))), this.heading && (h("p", { part: "heading", class: "bs-product-tour__heading" }, this.heading)), this.description && (h("p", { part: "description", class: "bs-product-tour__description" }, this.description)), this.renderActions('md', 'outlined'))));
63
+ }
64
+ renderPointer() {
65
+ const progress = this.total > 0 ? this.progressLabel.replace('{step}', String(this.step)).replace('{total}', String(this.total)) : '';
66
+ return (h("div", { class: "bs-product-tour bs-product-tour--pointer" }, h("div", { part: "arrow", class: "bs-product-tour__arrow", "aria-hidden": "true" }), h("bs-card", { part: "container", class: "bs-product-tour__card", surface: "base" }, this.closable && (h("bs-icon-button", { part: "close", class: "bs-product-tour__close", variant: "subtle", size: "sm", ariaLabel: this.closeLabel, onClick: () => this.bsClose.emit() }, h("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", "stroke-width": "1.6", "stroke-linecap": "round", "aria-hidden": "true" }, h("path", { d: "M5 5L15 15M15 5L5 15" })))), h("div", { class: "bs-product-tour__body" }, h("div", { class: "bs-product-tour__text" }, this.heading && (h("p", { part: "heading", class: "bs-product-tour__heading" }, this.heading)), this.description && (h("p", { part: "description", class: "bs-product-tour__description" }, this.description))), h("div", { part: "footer", class: "bs-product-tour__footer" }, progress ? (h("span", { part: "progress", class: "bs-product-tour__progress" }, progress)) : (h("span", null)), this.renderActions('sm', 'subtle'))))));
67
+ }
68
+ render() {
69
+ return this.type === 'pointer' ? this.renderPointer() : this.renderCard();
70
+ }
71
+ };
72
+ const SparkleIcon = () => (h("svg", { class: "bs-product-tour__glyph", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "1.6", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("path", { d: "M9.5 4L11.2 9.3L16.5 11L11.2 12.7L9.5 18L7.8 12.7L2.5 11L7.8 9.3L9.5 4Z" }), h("path", { d: "M18.5 3V7" }), h("path", { d: "M16.5 5H20.5" }), h("path", { d: "M18 16V20" }), h("path", { d: "M16 18H20" })));
73
+ const CheckIcon = () => (h("svg", { class: "bs-product-tour__glyph", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "1.8", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("circle", { cx: "12", cy: "12", r: "9" }), h("path", { d: "M8 12.5L10.8 15.3L16 9.5" })));
74
+ BsProductTour.style = bsProductTourCss();
75
+
76
+ export { BsProductTour as bs_product_tour };
@@ -1,6 +1,6 @@
1
- import { r as registerInstance, a as getElement, h } from './index-AgoOSYvW.js';
1
+ import { r as registerInstance, a as getElement, h } from './index-DqQRXQMx.js';
2
2
 
3
- const bsProgressLinearCss = () => `:host{display:flex;--bs-progress-linear-gap:var(--bs-spacing-100);--bs-progress-linear-track:var(--bs-surface-container);--bs-progress-linear-fill:var(--bs-color-primary-default);--bs-progress-linear-radius:120px;--bs-progress-linear-height-sm:4px;--bs-progress-linear-height-lg:8px;--bs-progress-linear-label-color:var(--bs-text-default);--bs-progress-linear-label-font-size:var(--bs-fontsize-body-md);--bs-progress-linear-label-line-height:var(--bs-line-height-body-md);--bs-progress-linear-transition-duration:0.3s;--bs-progress-linear-slide-duration:1.6s}.bs-progress-linear{display:flex;flex-direction:column;width:100%;gap:var(--bs-progress-linear-gap);font-family:inherit}.bs-progress-linear__track{position:relative;width:100%;border-radius:var(--bs-progress-linear-radius);background:var(--bs-progress-linear-track);overflow:hidden}.bs-progress-linear__track--small{height:var(--bs-progress-linear-height-sm)}.bs-progress-linear__track--large{height:var(--bs-progress-linear-height-lg)}.bs-progress-linear__fill{height:100%;border-radius:var(--bs-progress-linear-radius);background:var(--bs-progress-linear-fill);transition:width var(--bs-progress-linear-transition-duration) ease}.bs-progress-linear__fill--indeterminate{position:absolute;top:0;left:0;width:24%;min-width:80px;background:linear-gradient(90deg, transparent 0%, var(--bs-progress-linear-fill) 50%, transparent 100%);animation:bs-progress-linear-slide var(--bs-progress-linear-slide-duration) ease-in-out infinite}@keyframes bs-progress-linear-slide{from{transform:translateX(-100%)}to{transform:translateX(250%)}}@media (prefers-reduced-motion: reduce){.bs-progress-linear__fill--indeterminate{animation-duration:calc(var(--bs-progress-linear-slide-duration) * 4)}}.bs-progress-linear__label{color:var(--bs-progress-linear-label-color);font-size:var(--bs-progress-linear-label-font-size);line-height:calc(var(--bs-progress-linear-label-line-height) * 1px)}`;
3
+ const bsProgressLinearCss = () => `:host{display:flex;--bs-progress-linear-gap:var(--bs-spacing-100);--bs-progress-linear-track:var(--bs-surface-hover);--bs-progress-linear-fill:var(--bs-color-primary-default);--bs-progress-linear-radius:120px;--bs-progress-linear-height-sm:4px;--bs-progress-linear-height-lg:8px;--bs-progress-linear-label-color:var(--bs-text-default);--bs-progress-linear-label-font-size:var(--bs-fontsize-body-md);--bs-progress-linear-label-line-height:var(--bs-line-height-body-md);--bs-progress-linear-transition-duration:0.3s;--bs-progress-linear-slide-duration:1.6s}.bs-progress-linear{display:flex;flex-direction:column;width:100%;gap:var(--bs-progress-linear-gap);font-family:inherit}.bs-progress-linear__track{position:relative;width:100%;border-radius:var(--bs-progress-linear-radius);background:var(--bs-progress-linear-track);overflow:hidden}.bs-progress-linear__track--small{height:var(--bs-progress-linear-height-sm)}.bs-progress-linear__track--large{height:var(--bs-progress-linear-height-lg)}.bs-progress-linear__fill{height:100%;border-radius:var(--bs-progress-linear-radius);background:var(--bs-progress-linear-fill);transition:width var(--bs-progress-linear-transition-duration) ease}.bs-progress-linear__fill--indeterminate{position:absolute;top:0;left:0;width:24%;min-width:80px;background:linear-gradient(90deg, transparent 0%, var(--bs-progress-linear-fill) 50%, transparent 100%);animation:bs-progress-linear-slide var(--bs-progress-linear-slide-duration) ease-in-out infinite}@keyframes bs-progress-linear-slide{from{transform:translateX(-100%)}to{transform:translateX(250%)}}@media (prefers-reduced-motion: reduce){.bs-progress-linear__fill--indeterminate{animation-duration:calc(var(--bs-progress-linear-slide-duration) * 4)}}.bs-progress-linear__label{color:var(--bs-progress-linear-label-color);font-size:var(--bs-progress-linear-label-font-size);line-height:calc(var(--bs-progress-linear-label-line-height) * 1px)}`;
4
4
 
5
5
  const BsProgressLinear = class {
6
6
  constructor(hostRef) {
@@ -33,13 +33,13 @@ const BsProgressLinear = class {
33
33
  render() {
34
34
  const isDeterminate = this.type === 'determinate';
35
35
  const value = this.clampedValue;
36
- return (h("div", { key: '279dbb0cd17b9584b500570d58cc09bd91e8a0d7', part: "container", class: "bs-progress-linear" }, h("div", { key: '9299c229184d172f743fb7fb0dce2a9c55a4496f', part: "track", class: `bs-progress-linear__track bs-progress-linear__track--${this.size}`, role: "progressbar", "aria-label": this.ariaLabel, "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("div", { part: "fill", class: "bs-progress-linear__fill", style: { width: `${value}%` } })) : (
36
+ return (h("div", { key: '783f94f3ea320d9a8169c1d253037ae3631179e1', part: "container", class: "bs-progress-linear" }, h("div", { key: '9b5e0c1f0a641683bf9e763b2e3ede0b814f26cf', part: "track", class: `bs-progress-linear__track bs-progress-linear__track--${this.size}`, role: "progressbar", "aria-label": this.ariaLabel, "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("div", { part: "fill", class: "bs-progress-linear__fill", style: { width: `${value}%` } })) : (
37
37
  // Figma's indeterminate bar is a soft "comet" gradient segment (transparent -> blue ->
38
38
  // transparent) sliding left-to-right across the track's full width in a loop -- the
39
39
  // same fade concept as bs-progress's indeterminate ring's conic-gradient comet tail,
40
40
  // but along a straight line via a linear-gradient + `transform: translateX(...)`
41
41
  // keyframe animation instead of a rotating conic-gradient.
42
- h("div", { part: "fill", class: "bs-progress-linear__fill bs-progress-linear__fill--indeterminate" }))), this.showLabel && this.hasLabelContent && (h("span", { key: '51a75cae90630fec1d8757d483c239a534385aa7', part: "label", class: "bs-progress-linear__label" }, h("slot", { key: '7e6639ff4f7219cbb3fa09d7c7570268534530b4' })))));
42
+ h("div", { part: "fill", class: "bs-progress-linear__fill bs-progress-linear__fill--indeterminate" }))), this.showLabel && this.hasLabelContent && (h("span", { key: 'bb81cebfe79bb6e722fe0fb3cd561318a5f06ac6', part: "label", class: "bs-progress-linear__label" }, h("slot", { key: 'df04863716047f5b1fa4c70f20744ac25713840b' })))));
43
43
  }
44
44
  // The default slot's assigned content lives in the host's light DOM regardless of whether a
45
45
  // <slot> is currently rendered in the shadow tree, so this can be computed directly from the
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, h } from './index-AgoOSYvW.js';
1
+ import { r as registerInstance, h } from './index-DqQRXQMx.js';
2
2
 
3
3
  const bsProgressCss = () => `:host{display:inline-flex;--bs-progress-gap:var(--bs-spacing-100);--bs-progress-track:var(--bs-neutral-200);--bs-progress-arc:var(--bs-color-primary-default);--bs-progress-label-color:var(--bs-color-primary-default);--bs-progress-label-font-size-sm:var(--bs-fontsize-caption-md);--bs-progress-label-line-height-sm:var(--bs-line-height-caption-md);--bs-progress-label-font-size-lg:var(--bs-fontsize-body-md);--bs-progress-label-line-height-lg:var(--bs-line-height-body-md);--bs-progress-label-font-weight:var(--bs-font-weight-medium);--bs-progress-spin-duration:1.4s}.bs-progress{display:inline-flex;flex-direction:column;align-items:center;gap:var(--bs-progress-gap);font-family:inherit}.bs-progress__box{position:relative;display:inline-flex}.bs-progress__ring{transform:rotate(-90deg);overflow:visible}.bs-progress__track{stroke:var(--bs-progress-track)}.bs-progress__arc{stroke:var(--bs-progress-arc);transition:stroke-dashoffset 0.3s ease}.bs-progress__spinner{width:100%;height:100%;border-radius:50%;background:conic-gradient(from 0deg, transparent 0deg, var(--bs-progress-arc) var(--bs-progress-spinner-sweep), transparent var(--bs-progress-spinner-sweep));-webkit-mask:radial-gradient( farthest-side, transparent calc(100% - var(--bs-progress-spinner-stroke-width) - 1px), #000 calc(100% - var(--bs-progress-spinner-stroke-width)) );mask:radial-gradient( farthest-side, transparent calc(100% - var(--bs-progress-spinner-stroke-width) - 1px), #000 calc(100% - var(--bs-progress-spinner-stroke-width)) );animation:bs-progress-spin var(--bs-progress-spin-duration) linear infinite}@keyframes bs-progress-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.bs-progress__spinner{animation-duration:calc(var(--bs-progress-spin-duration) * 4)}}.bs-progress__label{color:var(--bs-progress-label-color);font-weight:var(--bs-progress-label-font-weight);text-align:center}.bs-progress__label--small,.bs-progress__label--medium{font-size:var(--bs-progress-label-font-size-sm);line-height:calc(var(--bs-progress-label-line-height-sm) * 1px)}.bs-progress__label--large{font-size:var(--bs-progress-label-font-size-lg);line-height:calc(var(--bs-progress-label-line-height-lg) * 1px)}`;
4
4
 
@@ -55,7 +55,7 @@ const BsProgress = class {
55
55
  const isDeterminate = this.type === 'determinate';
56
56
  const value = this.clampedValue;
57
57
  const dashOffset = circumference * (1 - value / 100);
58
- return (h("div", { key: 'add8dfafdbee4eaa9712c6e2ba6ddff6f8f6c47f', part: "container", class: "bs-progress" }, h("div", { key: 'fd89c73aa247fc3770187a45dc4681857e257d4e', class: "bs-progress__box", style: { width: `${diameter}px`, height: `${diameter}px` }, role: "progressbar", "aria-label": this.ariaLabel, "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("svg", { class: "bs-progress__ring", width: diameter, height: diameter, viewBox: `0 0 ${diameter} ${diameter}` }, h("circle", { part: "track", class: "bs-progress__track", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none" }), h("circle", { part: "arc", class: "bs-progress__arc", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none", "stroke-linecap": "round", "stroke-dasharray": circumference, "stroke-dashoffset": dashOffset }))) : (
58
+ return (h("div", { key: '9d9c371ea92f67811e9ab927d346f2bece833cf5', part: "container", class: "bs-progress" }, h("div", { key: '5753f1db2b3f79a55b2ff7936cdb836f10c29bc3', class: "bs-progress__box", style: { width: `${diameter}px`, height: `${diameter}px` }, role: "progressbar", "aria-label": this.ariaLabel, "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("svg", { class: "bs-progress__ring", width: diameter, height: diameter, viewBox: `0 0 ${diameter} ${diameter}` }, h("circle", { part: "track", class: "bs-progress__track", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none" }), h("circle", { part: "arc", class: "bs-progress__arc", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none", "stroke-linecap": "round", "stroke-dasharray": circumference, "stroke-dashoffset": dashOffset }))) : (
59
59
  // Figma's indeterminate ring is a fading "comet tail" (transparent -> solid color),
60
60
  // not a flat-colored partial arc -- SVG has no angular/conic gradient primitive, so a
61
61
  // CSS conic-gradient (color varying by angle) + a radial-gradient mask (carving the
@@ -64,7 +64,7 @@ const BsProgress = class {
64
64
  h("div", { part: "arc", class: "bs-progress__spinner", style: {
65
65
  '--bs-progress-spinner-stroke-width': `${this.strokeWidth}px`,
66
66
  '--bs-progress-spinner-sweep': `${INDETERMINATE_SWEEP_DEGREES}deg`,
67
- } }))), isDeterminate && this.showLabel && (h("span", { key: '9c86dc195204f28c06e05bf09f823241bf9f3a86', part: "label", class: `bs-progress__label bs-progress__label--${this.size}` }, value, "%"))));
67
+ } }))), isDeterminate && this.showLabel && (h("span", { key: '68381d4570b3f4d29d4b671f5069c7f4c02669e7', part: "label", class: `bs-progress__label bs-progress__label--${this.size}` }, value, "%"))));
68
68
  }
69
69
  };
70
70
  BsProgress.style = bsProgressCss();
@@ -0,0 +1,146 @@
1
+ import { r as registerInstance, c as createEvent, h } from './index-DqQRXQMx.js';
2
+
3
+ const bsQrCodeCss = () => `:host{display:inline-block;max-width:100%;--bs-qr-code-bg:var(--bs-paper-bg-base);--bs-qr-code-border:var(--bs-border-default);--bs-qr-code-radius:var(--bs-border-radius-150);--bs-qr-code-quiet-zone-bg:var(--bs-text-static-white);--bs-qr-code-module-color:var(--bs-text-static-black);--bs-qr-code-qr-border:var(--bs-border-default);--bs-qr-code-qr-radius:var(--bs-border-radius-100);--bs-qr-code-color:var(--bs-text-default);--bs-qr-code-color-secondary:var(--bs-text-secondary);--bs-qr-code-url-bg:var(--bs-surface-container);--bs-qr-code-url-radius:6px;--bs-qr-code-logo-size:20%;--bs-qr-code-padding:var(--bs-spacing-300);--bs-qr-code-gap:var(--bs-spacing-200);--bs-qr-code-code-size:200px;--bs-qr-code-quiet-zone:var(--bs-spacing-150);--bs-qr-code-amount-size:var(--bs-font-size-2xl);--bs-qr-code-amount-line-height:32px;--bs-qr-code-download-min-width:168px;--bs-qr-code-copy-min-width:126px}:host([size='sm']){--bs-qr-code-padding:var(--bs-spacing-200);--bs-qr-code-gap:var(--bs-spacing-150);--bs-qr-code-code-size:128px;--bs-qr-code-quiet-zone:var(--bs-spacing-100);--bs-qr-code-amount-size:var(--bs-font-size-xl);--bs-qr-code-amount-line-height:24px;--bs-qr-code-download-min-width:139px;--bs-qr-code-copy-min-width:102px}:host([size='lg']){--bs-qr-code-padding:var(--bs-spacing-400);--bs-qr-code-gap:var(--bs-spacing-250);--bs-qr-code-code-size:288px;--bs-qr-code-amount-size:32px;--bs-qr-code-amount-line-height:40px}.bs-qr-code{position:relative;width:fit-content;max-width:100%;color:var(--bs-qr-code-color);--bs-card-bg:var(--bs-qr-code-bg);--bs-card-radius:var(--bs-qr-code-radius);--bs-card-padding:var(--bs-qr-code-padding);--bs-card-border-width:1px;--bs-card-border-color:var(--bs-qr-code-border);--bs-card-shadow:none}.bs-qr-code__body{display:flex;flex-direction:column;align-items:center;gap:var(--bs-qr-code-gap)}.bs-qr-code__close{position:absolute;top:var(--bs-spacing-100);inset-inline-end:var(--bs-spacing-100)}.bs-qr-code__close svg{width:20px;height:20px}.bs-qr-code__head{display:flex;flex-direction:column;align-items:center;gap:2px;width:272px;max-width:100%;text-align:center}.bs-qr-code__head p,.bs-qr-code__amount p,.bs-qr-code__overlay p{margin:0}.bs-qr-code__title{font-size:var(--bs-font-size-2xl);font-weight:var(--bs-font-weight-bold);line-height:32px}.bs-qr-code__description{color:var(--bs-qr-code-color-secondary);font-size:var(--bs-font-size-md);line-height:24px}.bs-qr-code__qr{position:relative;box-sizing:border-box;flex:none;padding:var(--bs-qr-code-quiet-zone);border:1px solid var(--bs-qr-code-qr-border);border-radius:var(--bs-qr-code-qr-radius);background:var(--bs-qr-code-quiet-zone-bg);overflow:hidden}.bs-qr-code__code{position:relative;width:var(--bs-qr-code-code-size);height:var(--bs-qr-code-code-size);background:var(--bs-qr-code-quiet-zone-bg);color:var(--bs-qr-code-module-color)}.bs-qr-code__matrix,::slotted([slot='code']){display:block;width:100%;height:100%}.bs-qr-code__logo{position:absolute;top:50%;left:50%;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--bs-qr-code-logo-size);height:var(--bs-qr-code-logo-size);padding:4px;border-radius:var(--bs-border-radius-50);background:var(--bs-qr-code-quiet-zone-bg);transform:translate(-50%, -50%)}.bs-qr-code__logo{display:none}.bs-qr-code__logo--visible{display:flex}::slotted([slot='logo']){width:100%;height:100%;object-fit:contain}.bs-qr-code__overlay{position:absolute;inset:-1px;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--bs-spacing-100);padding:var(--bs-spacing-150);overflow:hidden;text-align:center;white-space:nowrap}.bs-qr-code__overlay--loading{background:var(--bs-color-neutral-container)}.bs-qr-code__overlay--error{background:var(--bs-surface-container)}.bs-qr-code__overlay--expired,.bs-qr-code__overlay--scanned{background:var(--bs-surface-base)}.bs-qr-code__overlay-caption{color:var(--bs-qr-code-color-secondary);font-size:var(--bs-font-size-xs);line-height:16px}.bs-qr-code__overlay-text{color:var(--bs-qr-code-color);font-size:var(--bs-font-size-sm);font-weight:var(--bs-font-weight-medium);line-height:20px}.bs-qr-code__overlay-text--strong{font-weight:var(--bs-font-weight-semibold)}.bs-qr-code__status-icon{width:32px;height:32px;color:var(--bs-qr-code-color-secondary)}.bs-qr-code__status-icon--error{color:var(--bs-icon-error)}.bs-qr-code__status-icon--scanned{width:44px;height:44px;color:var(--bs-icon-success)}.bs-qr-code__overlay bs-button{--bs-button-height-md:var(--bs-spacing-550)}.bs-qr-code__amount{display:flex;flex-direction:column;align-items:center;white-space:nowrap}.bs-qr-code__amount-label{color:var(--bs-qr-code-color-secondary);font-size:var(--bs-font-size-xs);line-height:16px}.bs-qr-code__amount-value{font-size:var(--bs-qr-code-amount-size);font-weight:var(--bs-font-weight-bold);line-height:var(--bs-qr-code-amount-line-height)}.bs-qr-code__url{padding:4px 10px;border-radius:var(--bs-qr-code-url-radius);background:var(--bs-qr-code-url-bg);font-size:var(--bs-font-size-xs);line-height:16px;text-align:center;white-space:nowrap}.bs-qr-code__actions{display:flex;align-items:center;gap:var(--bs-spacing-100)}.bs-qr-code__actions bs-button{display:inline-flex}.bs-qr-code__actions bs-button::part(button){width:100%}.bs-qr-code__actions bs-button[part='download']{min-width:var(--bs-qr-code-download-min-width)}.bs-qr-code__actions bs-button[part='copy']{min-width:var(--bs-qr-code-copy-min-width)}:host([size='sm']) .bs-qr-code__actions bs-button{--bs-button-height-sm:var(--bs-spacing-400)}`;
4
+
5
+ const BsQrCode = class {
6
+ constructor(hostRef) {
7
+ registerInstance(this, hostRef);
8
+ this.bsDownload = createEvent(this, "bsDownload");
9
+ this.bsCopy = createEvent(this, "bsCopy");
10
+ this.bsRetry = createEvent(this, "bsRetry");
11
+ this.bsRefresh = createEvent(this, "bsRefresh");
12
+ this.bsClose = createEvent(this, "bsClose");
13
+ }
14
+ /** `default` shows the URL under the code; `payment` shows the amount instead. */
15
+ type = 'default';
16
+ /** Card size: `sm`, `md` (default) or `lg`. */
17
+ size = 'md';
18
+ /** `default`, or one of the overlay states: `loading`, `error`, `expired`, `scanned`. */
19
+ state = 'default';
20
+ /** Heading text. */
21
+ heading = 'Share the order';
22
+ /** Line under the heading. */
23
+ description;
24
+ /** The link shown as text under the code (`type="default"`), and copied by Copy link. */
25
+ url;
26
+ /** The amount shown under the code (`type="payment"`), e.g. `"148,00 kr"`. */
27
+ amount;
28
+ /** Small label above the amount. */
29
+ amountLabel = 'Total';
30
+ /** Text of the expiry chip, e.g. `"Expires in 04:59"`. No chip when empty. */
31
+ expiry;
32
+ /** The code as a square matrix of modules, `true` = dark. Must be set as a JS property, not an
33
+ * HTML attribute -- see CONVENTIONS.md's non-string props rule. Ignored when the `code` slot is
34
+ * used. */
35
+ matrix;
36
+ /** Accessible name for the code image, e.g. `"QR code for order SO-10482"`. Applies to `matrix`;
37
+ * give a slotted `<img>` its own `alt`. */
38
+ codeLabel = 'QR code';
39
+ /** Shows a close button in the corner. */
40
+ closable = false;
41
+ /** Hides the Download and Copy link row. */
42
+ hideActions = false;
43
+ /** Hides the Download button. */
44
+ hideDownload = false;
45
+ /** Hides the Copy link button. */
46
+ hideCopy = false;
47
+ /** Label of the Download button. */
48
+ downloadLabel = 'Download PNG';
49
+ /** Label of the Copy link button. */
50
+ copyLabel = 'Copy link';
51
+ /** Label of the Retry button (`error`). */
52
+ retryLabel = 'Retry';
53
+ /** Label of the Refresh button (`expired`). */
54
+ refreshLabel = 'Refresh';
55
+ /** Text in the `loading` overlay. */
56
+ loadingLabel = 'Generating code';
57
+ /** Text in the `error` overlay. */
58
+ errorLabel = "Couldn't load code";
59
+ /** Text in the `expired` overlay. */
60
+ expiredLabel = 'Code expired';
61
+ /** Text in the `scanned` overlay. Defaults to "Payment received" for `type="payment"` and
62
+ * "Scanned" otherwise. */
63
+ scannedLabel;
64
+ /** Accessible name of the close button. */
65
+ closeLabel = 'Close';
66
+ /** Fires when Download is pressed. The component doesn't render a file; produce it from the code
67
+ * you generated. */
68
+ bsDownload;
69
+ /** Fires when Copy link is pressed, after the component tries to put `url` on the clipboard.
70
+ * `{ url }` is the `url` prop. */
71
+ bsCopy;
72
+ /** Fires when Retry is pressed (`error` state). Set `state` back to `loading` yourself. */
73
+ bsRetry;
74
+ /** Fires when Refresh is pressed (`expired` state). Set `state` back to `loading` yourself. */
75
+ bsRefresh;
76
+ /** Fires when the close button is pressed. */
77
+ bsClose;
78
+ /** True while something is assigned to the `logo` slot, so the white plate behind it only shows then. */
79
+ hasLogo = false;
80
+ onCopy = async () => {
81
+ if (this.url) {
82
+ try {
83
+ await navigator.clipboard?.writeText(this.url);
84
+ }
85
+ catch {
86
+ // Clipboard can be blocked (insecure context, permissions); the event still fires so the
87
+ // consumer can fall back.
88
+ }
89
+ }
90
+ this.bsCopy.emit({ url: this.url });
91
+ };
92
+ renderMatrix() {
93
+ const m = this.matrix;
94
+ if (!m || !m.length)
95
+ return null;
96
+ const n = m.length;
97
+ // One path, one horizontal run per row of consecutive dark modules.
98
+ let d = '';
99
+ for (let y = 0; y < n; y++) {
100
+ let x = 0;
101
+ while (x < n) {
102
+ if (!m[y][x]) {
103
+ x++;
104
+ continue;
105
+ }
106
+ const start = x;
107
+ while (x < n && m[y][x])
108
+ x++;
109
+ d += `M${start} ${y}h${x - start}v1h-${x - start}z`;
110
+ }
111
+ }
112
+ return (h("svg", { class: "bs-qr-code__matrix", viewBox: `0 0 ${n} ${n}`, "shape-rendering": "crispEdges", role: "img", "aria-label": this.codeLabel }, h("path", { d: d, fill: "currentColor" })));
113
+ }
114
+ renderOverlay() {
115
+ const { state } = this;
116
+ if (state === 'default')
117
+ return null;
118
+ if (state === 'loading') {
119
+ return (h("div", { part: "overlay", class: "bs-qr-code__overlay bs-qr-code__overlay--loading", role: "status" }, h("bs-progress", { type: "indeterminate", size: "medium", ariaLabel: this.loadingLabel }), h("p", { class: "bs-qr-code__overlay-caption" }, this.loadingLabel)));
120
+ }
121
+ if (state === 'error') {
122
+ return (h("div", { part: "overlay", class: "bs-qr-code__overlay bs-qr-code__overlay--error", role: "alert" }, h("svg", { class: "bs-qr-code__status-icon bs-qr-code__status-icon--error", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "aria-hidden": "true" }, h("circle", { cx: "12", cy: "12", r: "9" }), h("path", { d: "M12 7.5V12.5" }), h("path", { d: "M12 16.2V16.3" })), h("p", { class: "bs-qr-code__overlay-text" }, this.errorLabel), h("bs-button", { variant: "outlined", onClick: () => this.bsRetry.emit() }, h(RefreshIcon, { slot: "icon" }), this.retryLabel)));
123
+ }
124
+ if (state === 'expired') {
125
+ return (h("div", { part: "overlay", class: "bs-qr-code__overlay bs-qr-code__overlay--expired", role: "status" }, h("svg", { class: "bs-qr-code__status-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("circle", { cx: "12", cy: "12", r: "9" }), h("path", { d: "M12 7V12L15 14" })), h("p", { class: "bs-qr-code__overlay-text" }, this.expiredLabel), h("bs-button", { variant: "primary", onClick: () => this.bsRefresh.emit() }, h(RefreshIcon, { slot: "icon" }), this.refreshLabel)));
126
+ }
127
+ return (h("div", { part: "overlay", class: "bs-qr-code__overlay bs-qr-code__overlay--scanned", role: "status" }, h("svg", { class: "bs-qr-code__status-icon bs-qr-code__status-icon--scanned", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("circle", { cx: "12", cy: "12", r: "9" }), h("path", { d: "M8 12.5L10.8 15.3L16 9.5" })), h("p", { class: "bs-qr-code__overlay-text bs-qr-code__overlay-text--strong" }, this.scannedLabel ?? (this.type === 'payment' ? 'Payment received' : 'Scanned'))));
128
+ }
129
+ render() {
130
+ const { state } = this;
131
+ const interactive = state === 'default';
132
+ const showActions = !this.hideActions && state !== 'scanned';
133
+ const buttonSize = this.size === 'sm' ? 'sm' : 'md';
134
+ // Figma shows the unavailable actions as filled-disabled (grey) rather than a faded outline,
135
+ // which is what bs-button's disabled primary looks like.
136
+ return (h("bs-card", { key: '9224eadd42ddc8b59466a301ce72bf0311e00edd', part: "container", class: "bs-qr-code", surface: "base" }, this.closable && (h("bs-icon-button", { key: '1fd99ef2996a876ea8fe5ae237128c8059bfccbf', part: "close", class: "bs-qr-code__close", variant: "subtle", size: "sm", ariaLabel: this.closeLabel, onClick: () => this.bsClose.emit() }, h("svg", { key: 'e38bde58cd6532c3ca56b2920a42dfc157517484', viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", "stroke-width": "1.6", "stroke-linecap": "round", "aria-hidden": "true" }, h("path", { key: '6d6c93934c724a1cc0b8b66bdfd129650b1f9024', d: "M5 5L15 15M15 5L5 15" })))), h("div", { key: 'b8f2478eeb88a2d273f61f819679cb752e894a5a', class: "bs-qr-code__body" }, h("div", { key: '7e51f3bd0cde05566bb33c4fbe2478795ff3fe26', part: "head", class: "bs-qr-code__head" }, h("p", { key: '1d0956f6fc3e0f0658b5934a140e56ef25ae1f6b', part: "title", class: "bs-qr-code__title" }, this.heading), this.description && (h("p", { key: 'f43da3546accd752a856e1202baaff0043142ce4', part: "description", class: "bs-qr-code__description" }, this.description))), h("div", { key: '3b8dcdbb35c20e71f9c9e41ad4e2ae939e8dc0e7', part: "qr", class: "bs-qr-code__qr" }, h("div", { key: '3c86af5e70b746b2dc8ce9c7adf58649314a985d', part: "code", class: "bs-qr-code__code" }, h("slot", { key: '32d0dc8670a6045220b9546731ae5aef48d355df', name: "code" }, this.renderMatrix()), h("div", { key: 'ffba953b953bef8a8765955a5db4b9fba1e2cec8', part: "logo", class: { 'bs-qr-code__logo': true, 'bs-qr-code__logo--visible': this.hasLogo } }, h("slot", { key: 'b6e213f3a624cf8a6cf0b344c6ffc7b1f2c1be34', name: "logo", onSlotchange: (ev) => (this.hasLogo = ev.target.assignedNodes().length > 0) }))), this.renderOverlay()), this.type === 'payment' && this.amount && (h("div", { key: '56155722b1cf13d21850bae43e4323ddc0ed8635', part: "amount", class: "bs-qr-code__amount" }, this.amountLabel && h("p", { key: 'd1f90a299ef1f8d5c896a31147612ceef4485339', class: "bs-qr-code__amount-label" }, this.amountLabel), h("p", { key: '40ef657d7bc01e58089bf55044fb0ef8556386ba', class: "bs-qr-code__amount-value" }, this.amount))), this.type === 'default' && this.url && (h("div", { key: '5d7a7d2537752948631098567c732582e9e34d92', part: "url", class: "bs-qr-code__url" }, this.url)), this.expiry && (h("bs-chip-informative", { key: 'e040513edd4c24d60e41c4e09ed0b97be11e24b3', part: "expiry", size: "md" }, h(TimerIcon, { key: '0c1b8052bed0bddd2e84bc3ca9929008f781213c', slot: "icon" }), this.expiry)), showActions && (h("div", { key: 'f30073c9b79df1aec27f361d5b94e92c8aa8f7fc', part: "actions", class: "bs-qr-code__actions" }, !this.hideDownload && (h("bs-button", { key: '12b6b333efed74dfb76360441838de2a872f3c4b', part: "download", variant: interactive ? 'outlined' : 'primary', size: buttonSize, disabled: !interactive, onClick: () => interactive && this.bsDownload.emit() }, h(DownloadIcon, { key: '3c831e241288ccce97fb77a3d42c0c3de58e6734', slot: "icon" }), this.downloadLabel)), !this.hideCopy && (h("bs-button", { key: '260deebae80a52c700dc2532883a706363da0caa', part: "copy", variant: interactive ? 'outlined' : 'primary', size: buttonSize, disabled: !interactive, onClick: () => interactive && this.onCopy() }, h(CopyIcon, { key: '8a09b1b4a06d492449f563aa73c2b2191fb29680', slot: "icon" }), this.copyLabel)))))));
137
+ }
138
+ };
139
+ const iconProps = { viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-width': '2', 'stroke-linecap': 'round', 'stroke-linejoin': 'round', 'aria-hidden': 'true' };
140
+ const DownloadIcon = (props) => (h("svg", { ...iconProps, ...props }, h("path", { d: "M12 4V15" }), h("path", { d: "M7.5 11L12 15.5L16.5 11" }), h("path", { d: "M4.5 19.5H19.5" })));
141
+ const CopyIcon = (props) => (h("svg", { ...iconProps, ...props }, h("rect", { x: "8", y: "8", width: "11.5", height: "11.5", rx: "1.5" }), h("path", { d: "M16 8V5.5A1.5 1.5 0 0 0 14.5 4H5.5A1.5 1.5 0 0 0 4 5.5V14.5A1.5 1.5 0 0 0 5.5 16H8" })));
142
+ const RefreshIcon = (props) => (h("svg", { ...iconProps, ...props }, h("path", { d: "M19.5 12A7.5 7.5 0 1 1 17.3 6.7" }), h("path", { d: "M19.5 4.5V8.5H15.5" })));
143
+ const TimerIcon = (props) => (h("svg", { ...iconProps, ...props }, h("circle", { cx: "12", cy: "13.5", r: "7" }), h("path", { d: "M12 10V13.5L14 15" }), h("path", { d: "M9.5 3.5H14.5" })));
144
+ BsQrCode.style = bsQrCodeCss();
145
+
146
+ export { BsQrCode as bs_qr_code };
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, a as getElement, h } from './index-AgoOSYvW.js';
1
+ import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DqQRXQMx.js';
2
2
 
3
3
  const bsRadioCss = () => `:host{display:inline-block;--bs-radio-size:var(--bs-spacing-300);--bs-radio-border-width:2px;--bs-radio-state-layer-size:40px;--bs-radio-hit-area-size:48px;--bs-radio-gap:var(--bs-spacing-100)}.bs-radio{position:relative;display:inline-flex;align-items:center;gap:var(--bs-radio-gap);font-family:inherit;cursor:pointer}.bs-radio--disabled{cursor:not-allowed}.bs-radio__input{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:pointer}.bs-radio__input:disabled{cursor:not-allowed}.bs-radio__hit-area{box-sizing:border-box;position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--bs-radio-hit-area-size);height:var(--bs-radio-hit-area-size)}.bs-radio__state-layer{box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:var(--bs-radio-state-layer-size);height:var(--bs-radio-state-layer-size);border-radius:50%;background:var(--bs-radio-bg-default)}.bs-radio__circle{box-sizing:border-box;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--bs-radio-size);height:var(--bs-radio-size);border:var(--bs-radio-border-width) solid var(--bs-radio-enabled-border-default);border-radius:50%;background:transparent}.bs-radio__circle--selected{border-color:var(--bs-radio-selected-border-default)}.bs-radio__dot{width:50%;height:50%;border-radius:50%;background:var(--bs-radio-icon-checked)}.bs-radio__input:hover:not(:disabled)~.bs-radio__hit-area .bs-radio__state-layer{background:var(--bs-radio-bg-hover)}.bs-radio__input:hover:not(:disabled)~.bs-radio__hit-area .bs-radio__circle{border-color:var(--bs-radio-enabled-border-hover)}.bs-radio__input:hover:not(:disabled)~.bs-radio__hit-area .bs-radio__circle--selected{border-color:var(--bs-radio-selected-border-hover)}.bs-radio__input:hover:not(:disabled)~.bs-radio__hit-area .bs-radio__circle--selected .bs-radio__dot{background:var(--bs-radio-icon-hover)}.bs-radio__input:focus-visible~.bs-radio__hit-area .bs-radio__state-layer{background:var(--bs-radio-bg-focus);outline:2px solid var(--bs-radio-focus-ring);outline-offset:2px}.bs-radio__input:focus-visible~.bs-radio__hit-area .bs-radio__circle{border-color:var(--bs-radio-enabled-border-focus)}.bs-radio__input:focus-visible~.bs-radio__hit-area .bs-radio__circle--selected{border-color:var(--bs-radio-selected-border-focus)}.bs-radio__input:active:not(:disabled)~.bs-radio__hit-area .bs-radio__state-layer{background:var(--bs-radio-bg-pressed)}.bs-radio__input:active:not(:disabled)~.bs-radio__hit-area .bs-radio__circle{border-color:var(--bs-radio-enabled-border-pressed)}.bs-radio__input:active:not(:disabled)~.bs-radio__hit-area .bs-radio__circle--selected{border-color:var(--bs-radio-selected-border-pressed)}.bs-radio__input:disabled~.bs-radio__hit-area .bs-radio__state-layer{background:var(--bs-radio-bg-disabled)}.bs-radio__input:disabled~.bs-radio__hit-area .bs-radio__circle{border-color:var(--bs-radio-border-disabled)}.bs-radio__input:disabled~.bs-radio__hit-area .bs-radio__circle--selected .bs-radio__dot{background:var(--bs-radio-icon-disabled)}.bs-radio__label{font-size:var(--bs-font-size-md);color:var(--bs-radio-label-default)}.bs-radio--disabled .bs-radio__label{color:var(--bs-radio-label-disabled)}@media (forced-colors: active){.bs-radio__circle{border:2px solid ButtonText;forced-color-adjust:none;background:Canvas}.bs-radio__dot{background:Highlight}}`;
4
4
 
@@ -98,7 +98,7 @@ const BsRadio = class {
98
98
  }
99
99
  };
100
100
  render() {
101
- return (h("label", { key: '84bfc39d5714d15c45936c8150b9bd7473b79574', class: `bs-radio ${this.disabled ? 'bs-radio--disabled' : ''}` }, h("input", { key: '0a118d5e59f4d33b0411f7be0fba08a706cda298', class: "bs-radio__input", type: "radio", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, tabIndex: this.checked || !this.groupHasChecked ? 0 : -1, onKeyDown: this.onKeyDown, onChange: this.onChange }), h("span", { key: '889dadd67126819c3d39a5823d48be58a9c71f9f', class: "bs-radio__hit-area" }, h("span", { key: '5bbed4d44bcf4d810693b5912a90855d680540d0', class: "bs-radio__state-layer" }, h("span", { key: '509389527b876127ca456900e3bb4aa21c735f72', part: "circle", class: `bs-radio__circle ${this.checked ? 'bs-radio__circle--selected' : ''}` }, this.checked && h("span", { key: '9a7e335f9646eb72fb06fb0ca9436e763c3ad278', part: "dot", class: "bs-radio__dot" })))), h("span", { key: '2017790d3d99355b4eb93e3659c809df58c61065', part: "label", class: "bs-radio__label" }, h("slot", { key: '199450bb26f7966cdd64b04c78e3015300d793c9' }))));
101
+ return (h("label", { key: '62ae7bf3a50e1b0b6af17208685a5c7ffe6f5e5e', class: `bs-radio ${this.disabled ? 'bs-radio--disabled' : ''}` }, h("input", { key: '01b09c6a36c9765875d34abb96772554990ce095', class: "bs-radio__input", type: "radio", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, tabIndex: this.checked || !this.groupHasChecked ? 0 : -1, onKeyDown: this.onKeyDown, onChange: this.onChange }), h("span", { key: 'd56c108212d17d617e7abadc6189fd4b86dba233', class: "bs-radio__hit-area" }, h("span", { key: '63df5b0139573c1a7cbf64cf1c2e15009aeae8e2', class: "bs-radio__state-layer" }, h("span", { key: '43c32995245eba557d41a8c9a65ba9716d4a9766', part: "circle", class: `bs-radio__circle ${this.checked ? 'bs-radio__circle--selected' : ''}` }, this.checked && h("span", { key: '6ef4edf491bcaeac94b639abf5ef497e98cb8119', part: "dot", class: "bs-radio__dot" })))), h("span", { key: '60a21c23fdca6d92cbaad1bf69bd3c3c8441d24f', part: "label", class: "bs-radio__label" }, h("slot", { key: 'a920122f7b88b07ef743735e50f9ad71042be308' }))));
102
102
  }
103
103
  static get delegatesFocus() { return true; }
104
104
  static get formAssociated() { return true; }
@@ -0,0 +1,213 @@
1
+ import { h, r as registerInstance, c as createEvent, a as getElement } from './index-DqQRXQMx.js';
2
+
3
+ const bsSessionTimeoutCss = () => `:host{display:block;width:var(--bs-session-timeout-width);min-width:var(--bs-session-timeout-min-width);max-width:var(--bs-session-timeout-max-width);--bs-session-timeout-width:440px;--bs-session-timeout-min-width:380px;--bs-session-timeout-max-width:560px;--bs-session-timeout-bg:var(--bs-paper-bg-base);--bs-session-timeout-radius:var(--bs-border-radius-150);--bs-session-timeout-padding:var(--bs-spacing-200);--bs-session-timeout-gap:var(--bs-spacing-150);--bs-session-timeout-shadow:0 8px 8px var(--bs-elevation-higher);--bs-session-timeout-color:var(--bs-text-default);--bs-session-timeout-color-secondary:var(--bs-text-secondary);--bs-session-timeout-countdown-bg:var(--bs-surface-container);--bs-session-timeout-countdown-fill:var(--bs-color-warning-default);--bs-session-timeout-countdown-track:var(--bs-surface-hover);--bs-session-timeout-rule:var(--bs-border-default)}.bs-session-timeout{--bs-card-bg:var(--bs-session-timeout-bg);--bs-card-radius:var(--bs-session-timeout-radius);--bs-card-padding:var(--bs-session-timeout-padding);--bs-card-shadow:var(--bs-session-timeout-shadow);color:var(--bs-session-timeout-color)}.bs-session-timeout__body{display:flex;flex-direction:column;align-items:stretch;gap:var(--bs-session-timeout-gap)}bs-icon-tile{align-self:flex-start}.bs-session-timeout__glyph,::slotted([slot='icon']){width:24px;height:24px}.bs-session-timeout__heading-group{display:flex;flex-direction:column;gap:6px}.bs-session-timeout__heading{margin:0;font-size:var(--bs-font-size-2xl);font-weight:var(--bs-font-weight-bold);line-height:32px}.bs-session-timeout__description{margin:0;color:var(--bs-session-timeout-color-secondary);font-size:var(--bs-font-size-md);line-height:24px}.bs-session-timeout__countdown{display:flex;flex-direction:column;gap:var(--bs-spacing-100);padding:var(--bs-spacing-200);border-radius:var(--bs-border-radius-100);background:var(--bs-session-timeout-countdown-bg)}.bs-session-timeout__countdown bs-progress-linear{--bs-progress-linear-fill:var(--bs-session-timeout-countdown-fill);--bs-progress-linear-track:var(--bs-session-timeout-countdown-track)}.bs-session-timeout__time-row{display:flex;align-items:flex-end;gap:var(--bs-spacing-100)}.bs-session-timeout__time{font-size:var(--bs-font-size-3xl);font-weight:var(--bs-font-weight-bold);line-height:40px;font-variant-numeric:tabular-nums}.bs-session-timeout__unit{padding-bottom:6px;color:var(--bs-session-timeout-color-secondary);font-size:var(--bs-font-size-sm);line-height:20px}.bs-session-timeout__saved{display:flex;align-items:center;gap:var(--bs-spacing-100);margin:0;color:var(--bs-session-timeout-color-secondary);font-size:var(--bs-font-size-sm);line-height:20px}.bs-session-timeout__saved-icon{flex:none;width:16px;height:16px}.bs-session-timeout__actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--bs-spacing-100)}.bs-session-timeout__actions bs-button,.bs-session-timeout__alternatives bs-button,.bs-session-timeout__block-button{--bs-button-height-md:var(--bs-spacing-550)}.bs-session-timeout__account{display:flex;align-items:center;gap:var(--bs-spacing-200);padding:var(--bs-spacing-150) var(--bs-spacing-200);border:1px solid var(--bs-session-timeout-rule);border-radius:var(--bs-border-radius-100)}.bs-session-timeout__account-text{display:flex;flex-direction:column;gap:var(--bs-spacing-25);min-width:0;line-height:24px}.bs-session-timeout__account-name{font-weight:var(--bs-font-weight-semibold)}.bs-session-timeout__account-email{overflow-wrap:anywhere}.bs-session-timeout__actions--stacked{flex-direction:column;align-items:stretch;justify-content:flex-start}.bs-session-timeout__block-button,.bs-session-timeout__alternatives bs-button,.bs-session-timeout__actions--stacked bs-button{--bs-button-width:100%}.bs-session-timeout__text-button{--bs-button-subtle-color:var(--bs-text-action);--bs-button-height-lg:var(--bs-spacing-600)}.bs-session-timeout__password{display:block;--bs-input-label-font-size:var(--bs-font-size-md);--bs-input-label-font-weight:var(--bs-font-weight-semibold);--bs-input-label-line-height:calc(var(--bs-line-height-body-md) * 1px);margin-bottom:calc(var(--bs-spacing-200) - var(--bs-session-timeout-gap))}.bs-session-timeout__divider{display:flex;align-items:center;gap:var(--bs-spacing-100);align-self:center;width:320px;max-width:100%;color:var(--bs-session-timeout-color-secondary);font-size:var(--bs-font-size-xs);line-height:16px}.bs-session-timeout__rule{flex:1 1 0;height:1px;background:var(--bs-session-timeout-rule)}.bs-session-timeout__alternatives{display:grid;grid-template-columns:repeat(auto-fit, minmax(0, 1fr));gap:var(--bs-spacing-100)}.bs-session-timeout__sr-only{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}`;
4
+
5
+ const BsSessionTimeout = class {
6
+ constructor(hostRef) {
7
+ registerInstance(this, hostRef);
8
+ this.bsPrimary = createEvent(this, "bsPrimary");
9
+ this.bsSecondary = createEvent(this, "bsSecondary");
10
+ this.bsAlternative = createEvent(this, "bsAlternative");
11
+ this.bsCancel = createEvent(this, "bsCancel");
12
+ this.bsExpire = createEvent(this, "bsExpire");
13
+ }
14
+ get el() { return getElement(this); }
15
+ /** Which moment: `warning`, `signed-out` or `confirm-identity`. */
16
+ type = 'warning';
17
+ /** Heading. Defaults per `type`. */
18
+ heading;
19
+ /** HTML heading level, 1-6. */
20
+ headingLevel = 2;
21
+ /** Paragraph under the heading. Defaults per `type`. */
22
+ description;
23
+ /** Hides the icon tile. */
24
+ hideIcon = false;
25
+ /** Label of the primary button. Defaults per `type` ("Stay signed in", "Sign in again", "Confirm"). */
26
+ primaryLabel;
27
+ /** Label of the secondary button. Defaults per `type` ("Sign out now", "Use a different account"); none for
28
+ * `confirm-identity`. Set to an empty string to hide it. */
29
+ secondaryLabel;
30
+ // --- warning -------------------------------------------------------------------------------
31
+ /** Seconds left before the session ends (`warning`). Mutable: with `countdown` the component
32
+ * decrements it itself; otherwise drive it from your own timer. */
33
+ secondsLeft = 0;
34
+ /** Length of the warning window in seconds, for the bar: it shows `secondsLeft / totalSeconds`.
35
+ * Defaults to the `secondsLeft` it first had. */
36
+ totalSeconds = 0;
37
+ /** Count `secondsLeft` down once a second (`warning`), firing `bsExpire` at zero. */
38
+ countdown = false;
39
+ /** Text next to the time while a minute or more is left. */
40
+ timeLeftLabel = 'minutes left';
41
+ /** Text next to the time under a minute. */
42
+ secondsLeftLabel = 'seconds left';
43
+ /** Note under the countdown, e.g. "Your draft of INV-2041 is saved automatically." Hidden when empty. */
44
+ savedMessage;
45
+ // --- signed-out ----------------------------------------------------------------------------
46
+ /** Name of the account that was signed in (`signed-out`). */
47
+ accountName;
48
+ /** Email of the account that was signed in (`signed-out`). */
49
+ accountEmail;
50
+ /** Initials in the avatar (`signed-out`). Derived from `accountName` when not set. */
51
+ accountInitials;
52
+ // --- confirm-identity ----------------------------------------------------------------------
53
+ /** Label of the password field. */
54
+ passwordLabel = 'Password';
55
+ /** Error shown under the password field, e.g. after a wrong password. */
56
+ passwordError;
57
+ /** Label of the divider between the password and the alternatives. */
58
+ dividerLabel = 'or';
59
+ /** Other ways to confirm, shown as outlined buttons under the divider: `[{ id, label, icon? }]`.
60
+ * Defaults to a passkey and a BankID button. Must be set as a JS property, not an HTML attribute --
61
+ * see CONVENTIONS.md's non-string props rule. Set `[]` to hide them. */
62
+ alternatives = [
63
+ { id: 'passkey', label: 'Use passkey', icon: 'fingerprint' },
64
+ { id: 'bankid', label: 'Use BankID', icon: 'key' },
65
+ ];
66
+ /** Label of the Cancel button (`confirm-identity`). Set to an empty string to hide it. */
67
+ cancelLabel = 'Cancel';
68
+ /** Fires when the primary button is pressed. For `confirm-identity` the detail is
69
+ * `{ password }`; otherwise it is empty. */
70
+ bsPrimary;
71
+ /** Fires when the secondary button is pressed. */
72
+ bsSecondary;
73
+ /** Fires when an alternative method is pressed (`confirm-identity`): `{ id }`. */
74
+ bsAlternative;
75
+ /** Fires when Cancel is pressed (`confirm-identity`). */
76
+ bsCancel;
77
+ /** Fires once when `countdown` reaches zero. */
78
+ bsExpire;
79
+ password = '';
80
+ announcement = '';
81
+ initialTotal = 0;
82
+ timer;
83
+ componentWillLoad() {
84
+ this.initialTotal = this.secondsLeft;
85
+ }
86
+ componentDidLoad() {
87
+ this.syncTimer();
88
+ }
89
+ disconnectedCallback() {
90
+ this.stopTimer();
91
+ }
92
+ connectedCallback() {
93
+ // Re-attached to the DOM after disconnectedCallback stopped the timer.
94
+ if (this.timer === undefined && this.el.isConnected)
95
+ this.syncTimer();
96
+ }
97
+ onTimerInputsChange() {
98
+ this.syncTimer();
99
+ }
100
+ stopTimer() {
101
+ if (this.timer !== undefined)
102
+ clearInterval(this.timer);
103
+ this.timer = undefined;
104
+ }
105
+ syncTimer() {
106
+ this.stopTimer();
107
+ if (!this.countdown || this.type !== 'warning' || this.secondsLeft <= 0)
108
+ return;
109
+ this.timer = setInterval(() => this.tick(), 1000);
110
+ }
111
+ tick() {
112
+ if (this.secondsLeft <= 0)
113
+ return;
114
+ this.secondsLeft = this.secondsLeft - 1;
115
+ // Announce sparingly: every second would drown a screen reader.
116
+ if ([60, 30, 10].includes(this.secondsLeft)) {
117
+ this.announcement = `${formatTime(this.secondsLeft)} ${this.secondsLeft >= 60 ? this.timeLeftLabel : this.secondsLeftLabel}`;
118
+ }
119
+ if (this.secondsLeft <= 0) {
120
+ this.stopTimer();
121
+ this.bsExpire.emit();
122
+ }
123
+ }
124
+ get defaults() {
125
+ return DEFAULTS[this.type] ?? DEFAULTS.warning;
126
+ }
127
+ // --- rendering ---------------------------------------------------------------------------
128
+ renderHeading(heading, description) {
129
+ const level = Math.min(6, Math.max(1, Math.trunc(Number(this.headingLevel)) || 2));
130
+ return (h("div", { class: "bs-session-timeout__heading-group" }, h(`h${level}`, { part: 'heading', id: 'heading', class: { 'bs-session-timeout__heading': true } }, heading), description && (h("p", { part: "description", class: "bs-session-timeout__description" }, description))));
131
+ }
132
+ renderWarning() {
133
+ const total = this.totalSeconds > 0 ? this.totalSeconds : this.initialTotal || this.secondsLeft;
134
+ const percent = total > 0 ? Math.max(0, Math.min(100, (this.secondsLeft / total) * 100)) : 0;
135
+ const unit = this.secondsLeft >= 60 ? this.timeLeftLabel : this.secondsLeftLabel;
136
+ return (h("div", { part: "countdown", class: "bs-session-timeout__countdown" }, h("div", { class: "bs-session-timeout__time-row" }, h("span", { part: "time", class: "bs-session-timeout__time", role: "timer" }, formatTime(this.secondsLeft)), h("span", { class: "bs-session-timeout__unit" }, unit)), h("bs-progress-linear", { type: "determinate", size: "large", value: percent, showLabel: false, ariaLabel: `${formatTime(this.secondsLeft)} ${unit}` })));
137
+ }
138
+ renderAccount() {
139
+ const name = this.accountName ?? '';
140
+ const initials = this.accountInitials ?? name.split(/\s+/).filter(Boolean).slice(0, 2).map(w => w[0].toUpperCase()).join('');
141
+ if (!name && !this.accountEmail)
142
+ return null;
143
+ return (h("div", { part: "account", class: "bs-session-timeout__account" }, h("bs-avatar", { type: "initials", size: "lg", initials: initials, ariaLabel: name || this.accountEmail }), h("div", { class: "bs-session-timeout__account-text" }, name && h("span", { class: "bs-session-timeout__account-name" }, name), this.accountEmail && h("span", { class: "bs-session-timeout__account-email" }, this.accountEmail))));
144
+ }
145
+ renderConfirm() {
146
+ const alternatives = this.alternatives ?? [];
147
+ return [
148
+ h("bs-input", { part: "password", class: "bs-session-timeout__password", type: "password", label: this.passwordLabel, value: this.password, error: this.passwordError, onBsInput: (ev) => (this.password = ev.detail), onBsChange: (ev) => (this.password = ev.detail) }),
149
+ h("bs-button", { part: "primary", class: "bs-session-timeout__block-button", variant: "primary", onClick: () => this.bsPrimary.emit({ password: this.password }) }, this.primaryLabel ?? this.defaults.primary),
150
+ alternatives.length > 0 && (h("div", { part: "divider", class: "bs-session-timeout__divider", role: "separator" }, h("span", { class: "bs-session-timeout__rule" }), h("span", { class: "bs-session-timeout__divider-label" }, this.dividerLabel), h("span", { class: "bs-session-timeout__rule" }))),
151
+ alternatives.length > 0 && (h("div", { part: "alternatives", class: "bs-session-timeout__alternatives" }, alternatives.map(a => (h("bs-button", { key: a.id, variant: "outlined", onClick: () => this.bsAlternative.emit({ id: a.id }) }, a.icon === 'key' ? h(KeyIcon, { slot: "icon" }) : h(FingerprintIcon, { slot: "icon" }), a.label))))),
152
+ this.cancelLabel && (h("bs-button", { part: "cancel", class: "bs-session-timeout__block-button bs-session-timeout__text-button", variant: "subtle", size: "lg", onClick: () => this.bsCancel.emit() }, this.cancelLabel)),
153
+ ];
154
+ }
155
+ render() {
156
+ const d = this.defaults;
157
+ const heading = this.heading ?? d.heading;
158
+ const description = this.description ?? d.description;
159
+ const primary = this.primaryLabel ?? d.primary;
160
+ const secondary = this.secondaryLabel ?? d.secondary;
161
+ return (h("bs-card", { key: '45a056eabc2f536128ee6adbc6104d76793301f4', part: "container", class: "bs-session-timeout", surface: "base", role: "region", "aria-labelledby": "heading" }, h("div", { key: '035795cb4b5b0252212270236f048e3216d5d401', class: "bs-session-timeout__body" }, !this.hideIcon && (h("bs-icon-tile", { key: '857db99f58d07483d3c7dadd95e5951a645d0c59', part: "art", intent: d.intent, size: "lg" }, h("slot", { key: '41504daf4751677d9b1df0d211e719d8f441f5b2', name: "icon" }, d.glyph()))), this.renderHeading(heading, description), this.type === 'warning' && this.renderWarning(), this.type === 'warning' && this.savedMessage && (h("p", { key: '8ba10b3921db4b3cedbeb3d45bddfb89425bbdbb', part: "saved", class: "bs-session-timeout__saved" }, h(InfoIcon, { key: '44ea938fca553c67ae23628833471ceb98e63b06' }), h("span", { key: '672ebc96828437ffbc67711082fd7018611153b7' }, this.savedMessage))), this.type === 'signed-out' && this.renderAccount(), this.type === 'confirm-identity' && this.renderConfirm(), this.type === 'warning' && (primary || secondary) && (h("div", { key: '94221156fe30010bd0fbe4fb0146c95feceab50f', part: "actions", class: "bs-session-timeout__actions" }, secondary && (h("bs-button", { key: '09b14d30bc185a4644902e52100f0493da6109a0', part: "secondary", variant: "outlined", onClick: () => this.bsSecondary.emit() }, secondary)), primary && (h("bs-button", { key: 'be381ed4be453efd306b28da3e1f4b7f0740c024', part: "primary", variant: "primary", onClick: () => this.bsPrimary.emit() }, primary)))), this.type === 'signed-out' && (primary || secondary) && (h("div", { key: '6b3b3622809165f70d83c68db409e2373ea1008e', part: "actions", class: "bs-session-timeout__actions bs-session-timeout__actions--stacked" }, primary && (h("bs-button", { key: 'f03d85c00ce0c18e14e26d2b4332ddb987b93f9e', part: "primary", class: "bs-session-timeout__block-button", variant: "primary", onClick: () => this.bsPrimary.emit() }, primary)), secondary && (h("bs-button", { key: 'a9bf95d13955110f7f36561b9acc3c89a5862de5', part: "secondary", class: "bs-session-timeout__text-button", variant: "subtle", size: "lg", onClick: () => this.bsSecondary.emit() }, secondary)))), h("div", { key: '69ada1eed62f93587b2c2f45aa1d3ea933ba682f', class: "bs-session-timeout__sr-only", role: "status", "aria-live": "polite" }, this.announcement))));
162
+ }
163
+ static get watchers() { return {
164
+ "countdown": [{
165
+ "onTimerInputsChange": 0
166
+ }],
167
+ "type": [{
168
+ "onTimerInputsChange": 0
169
+ }]
170
+ }; }
171
+ };
172
+ function pad(n) {
173
+ return String(n).padStart(2, '0');
174
+ }
175
+ function formatTime(total) {
176
+ const s = Math.max(0, Math.trunc(Number(total)) || 0);
177
+ return `${Math.floor(s / 60)}:${pad(s % 60)}`;
178
+ }
179
+ const svg = (children) => (props) => (h("svg", { class: "bs-session-timeout__glyph", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "1.8", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true", ...props }, children));
180
+ const TimerIcon = svg(h("g", null, h("circle", { cx: "12", cy: "13.5", r: "7" }), h("path", { d: "M12 10V13.5L14 15" }), h("path", { d: "M9.5 3.5H14.5" })));
181
+ const LockIcon = svg(h("g", null, h("rect", { x: "5", y: "10.5", width: "14", height: "9.5", rx: "1.5" }), h("path", { d: "M8.5 10.5V8A3.5 3.5 0 0 1 15.5 8V10.5" })));
182
+ const FingerprintIcon = svg(h("g", null, h("path", { d: "M6 10A6 6 0 0 1 18 10" }), h("path", { d: "M9 20C10 18 10 16 10 13A2 2 0 0 1 14 13C14 16 13.5 18.5 12.5 20.5" }), h("path", { d: "M6 13C6 15.5 5.5 17.5 4.5 19.5" }), h("path", { d: "M18 13C18 15.5 17.5 18 16.5 20" }), h("path", { d: "M12 13C12 15 11.5 17 10.8 18.5" })));
183
+ const KeyIcon = svg(h("g", null, h("circle", { cx: "8", cy: "15", r: "4" }), h("path", { d: "M11 12L19.5 3.5" }), h("path", { d: "M16 7L19 10" })));
184
+ const InfoIcon = () => (h("svg", { class: "bs-session-timeout__saved-icon", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "1.3", "stroke-linecap": "round", "aria-hidden": "true" }, h("circle", { cx: "8", cy: "8", r: "6.2" }), h("path", { d: "M8 7.2V11" }), h("path", { d: "M8 5V5.1" })));
185
+ const DEFAULTS = {
186
+ warning: {
187
+ intent: 'warning',
188
+ heading: 'You’ll be signed out soon',
189
+ description: 'For your security, we sign you out after a period without activity.',
190
+ primary: 'Stay signed in',
191
+ secondary: 'Sign out now',
192
+ glyph: () => h(TimerIcon, null),
193
+ },
194
+ 'signed-out': {
195
+ intent: 'default',
196
+ heading: 'You’ve been signed out',
197
+ description: 'You were inactive for a while. Your work was saved and will be there when you sign in.',
198
+ primary: 'Sign in again',
199
+ secondary: 'Use a different account',
200
+ glyph: () => h(LockIcon, null),
201
+ },
202
+ 'confirm-identity': {
203
+ intent: 'default',
204
+ heading: 'Confirm it’s you',
205
+ description: 'This action needs a fresh sign-in.',
206
+ primary: 'Confirm',
207
+ secondary: '',
208
+ glyph: () => h(FingerprintIcon, null),
209
+ },
210
+ };
211
+ BsSessionTimeout.style = bsSessionTimeoutCss();
212
+
213
+ export { BsSessionTimeout as bs_session_timeout };