scb-wc 0.1.3 → 0.1.5

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 (451) hide show
  1. package/README.md +204 -164
  2. package/all.js +91 -5
  3. package/bin/scb-wc.mjs +141 -0
  4. package/blazor/CustomEvents.cs +83 -0
  5. package/blazor/ScbBlazorInteropBase.cs +4460 -1674
  6. package/blazor/scb-blazor-bridge.js +6827 -2805
  7. package/blazor/wrappers/ScbAccordion.razor +50 -0
  8. package/blazor/wrappers/ScbAppBar.razor +95 -0
  9. package/blazor/wrappers/ScbBreadcrumb.razor +59 -0
  10. package/blazor/wrappers/ScbCalendar.razor +100 -0
  11. package/blazor/wrappers/ScbCalendarCard.razor +189 -0
  12. package/blazor/wrappers/ScbCheckbox.razor +92 -0
  13. package/blazor/wrappers/ScbCollapse.razor +76 -0
  14. package/blazor/wrappers/ScbCookiesConsent.razor +106 -0
  15. package/blazor/wrappers/ScbDatepicker.razor +77 -0
  16. package/blazor/wrappers/ScbDialog.razor +72 -0
  17. package/blazor/wrappers/ScbDrawer.razor +64 -0
  18. package/blazor/wrappers/ScbDropZone.razor +168 -0
  19. package/blazor/wrappers/ScbDropdown.razor +76 -0
  20. package/blazor/wrappers/ScbHorizontalScroller.razor +137 -0
  21. package/blazor/wrappers/ScbList.razor +77 -0
  22. package/blazor/wrappers/ScbMenu.razor +71 -0
  23. package/blazor/wrappers/ScbNav.razor +92 -0
  24. package/blazor/wrappers/ScbNotificationCard.razor +122 -0
  25. package/blazor/wrappers/ScbOptionsMenu.razor +88 -0
  26. package/blazor/wrappers/ScbPagination.razor +80 -0
  27. package/blazor/wrappers/ScbRadioGroup.razor +94 -0
  28. package/blazor/wrappers/ScbSearch.razor +83 -0
  29. package/blazor/wrappers/ScbSegmentedButton.razor +85 -0
  30. package/blazor/wrappers/ScbSelect.razor +79 -0
  31. package/blazor/wrappers/ScbSlider.razor +96 -0
  32. package/blazor/wrappers/ScbSnackbar.razor +93 -0
  33. package/blazor/wrappers/ScbSwitch.razor +92 -0
  34. package/blazor/wrappers/ScbTable.razor +67 -0
  35. package/blazor/wrappers/ScbTableAdvanced.razor +78 -0
  36. package/blazor/wrappers/ScbTabs.razor +55 -0
  37. package/blazor/wrappers/ScbTextfield.razor +104 -0
  38. package/blazor/wrappers/ScbTooltip.razor +88 -0
  39. package/blazor/wrappers/ScbViz.razor +142 -0
  40. package/demo-data-preview.svg +12 -0
  41. package/dummy.png +0 -0
  42. package/fonts/inter/files/inter-latin-wght-italic.woff2 +0 -0
  43. package/fonts/inter/files/inter-latin-wght-normal.woff2 +0 -0
  44. package/fonts/material-symbols-outlined/files/material-symbols-outlined-latin-wght-normal.woff2 +0 -0
  45. package/index.js +88 -1
  46. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-accordion/scb-accordion-item.js +211 -0
  47. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-accordion/scb-accordion.js +44 -0
  48. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-app-bar/scb-app-bar.js +166 -0
  49. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-avatar/scb-avatar.js +111 -0
  50. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-badge/scb-badge.js +80 -0
  51. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-breadcrumb/scb-breadcrumb-item.js +14 -0
  52. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-breadcrumb/scb-breadcrumb.js +96 -0
  53. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-button/scb-button.js +268 -0
  54. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-calendar/scb-calendar-event.js +6 -0
  55. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-calendar/scb-calendar.js +168 -0
  56. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-calendar-card/scb-calendar-card.js +346 -0
  57. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-card/scb-card.js +761 -0
  58. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-checkbox/scb-checkbox-group.js +33 -0
  59. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-checkbox/scb-checkbox.js +140 -0
  60. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-chevron/scb-chevron.js +121 -0
  61. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-chip/scb-chip.js +66 -0
  62. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-collapse/scb-collapse.js +89 -0
  63. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-cookies-consent/scb-cookies-consent.js +78 -0
  64. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-datepicker/scb-datepicker.js +296 -0
  65. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-dialog/scb-dialog.js +265 -0
  66. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-divider/scb-divider.js +69 -0
  67. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-drawer/scb-drawer.js +128 -0
  68. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-drop-zone/scb-drop-zone.js +555 -0
  69. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-dropdown/scb-dropdown.js +306 -0
  70. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-fab/scb-fab.js +108 -0
  71. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-fact-card/scb-fact-card-content.js +46 -0
  72. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-fact-card/scb-fact-card.js +226 -0
  73. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-footer/scb-footer-section.js +3 -0
  74. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-footer/scb-footer.js +210 -0
  75. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-gallery-grid/scb-gallery-grid.js +131 -0
  76. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-grid/scb-grid-item.js +11 -0
  77. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-grid/scb-grid.js +98 -0
  78. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-grid/scb-stack.js +33 -0
  79. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-header/scb-header-menu-group.js +1 -0
  80. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-header/scb-header-menu-item.js +5 -0
  81. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-header/scb-header-tab.js +5 -0
  82. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-header/scb-header-utility.js +1 -0
  83. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-header/scb-header.js +681 -0
  84. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-horizontal-scroller/scb-horizontal-scroller.js +196 -0
  85. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-icon-button/scb-icon-button.js +171 -0
  86. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-keyfigure-card/scb-keyfigure-card.js +212 -0
  87. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-link/scb-link.js +61 -0
  88. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-list/scb-list-item.js +153 -0
  89. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-list/scb-list.js +26 -0
  90. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-menu/scb-menu-item.js +205 -0
  91. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-menu/scb-menu-section.js +42 -0
  92. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-menu/scb-menu.js +81 -0
  93. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-menu/scb-sub-menu.js +10 -0
  94. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-nav/scb-nav-item.js +28 -0
  95. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-nav/scb-nav.js +104 -0
  96. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-notification-card/scb-notification-card.js +358 -0
  97. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-options-menu/scb-options-menu-item.js +66 -0
  98. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-options-menu/scb-options-menu.js +88 -0
  99. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-options-menu/scb-options-sub-menu.js +34 -0
  100. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-overlay/scb-overlay.js +49 -0
  101. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-pagination/scb-pagination.js +312 -0
  102. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-progress-indicator/scb-progress-indicator.js +87 -0
  103. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-progress-stepper/scb-progress-step.js +147 -0
  104. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-progress-stepper/scb-progress-stepper.js +62 -0
  105. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-radio-button/scb-radio-button.js +132 -0
  106. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-radio-button/scb-radio-group.js +43 -0
  107. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-scrollspy/scb-scrollspy.js +79 -0
  108. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-search/scb-search.js +292 -0
  109. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-segmented-button/scb-segmented-button.js +32 -0
  110. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-segmented-button/scb-segmented-item.js +74 -0
  111. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-select/scb-select-option.js +61 -0
  112. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-select/scb-select.js +284 -0
  113. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-skeleton/scb-skeleton.js +38 -0
  114. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-slider/scb-slider.js +27 -0
  115. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-snackbar/scb-snackbar.js +128 -0
  116. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-status-pill/scb-status-pill.js +45 -0
  117. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-stepper/scb-step.js +239 -0
  118. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-stepper/scb-stepper.js +139 -0
  119. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-switch/scb-switch.js +59 -0
  120. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-table/scb-table.js +51 -0
  121. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-table-advanced/scb-table-advanced.js +76 -0
  122. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-tabs/scb-primary-tab.js +6 -0
  123. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-tabs/scb-secondary-tab.js +6 -0
  124. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-tabs/scb-tabs.js +28 -0
  125. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-textfield/scb-textfield.js +595 -0
  126. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-toc/scb-toc-item.js +303 -0
  127. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-toc/scb-toc.js +19 -0
  128. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-tooltip/scb-tooltip.js +196 -0
  129. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-vignette/scb-vignette.js +37 -0
  130. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-viz/scb-viz-actions-runtime.js +2 -0
  131. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-viz/scb-viz-print-runtime.js +98 -0
  132. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-viz/scb-viz-series-differentiation-registry.js +1 -0
  133. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-viz/scb-viz-series-differentiation-runtime.js +1 -0
  134. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-viz/scb-viz-table-runtime.js +1 -0
  135. package/mvc/components/Users/peter/Documents/SCB.Material-latest-dev/src/scb-test-components/scb-viz/scb-viz.js +1140 -0
  136. package/mvc/components/all.js +177 -1
  137. package/mvc/components/scb-accordion/scb-accordion-item.js +1 -0
  138. package/mvc/components/scb-accordion/scb-accordion.js +1 -0
  139. package/mvc/components/scb-app-bar/scb-app-bar.js +1 -0
  140. package/mvc/components/scb-avatar/scb-avatar.js +1 -0
  141. package/mvc/components/scb-badge/scb-badge.js +1 -0
  142. package/mvc/components/scb-breadcrumb/scb-breadcrumb-item.js +1 -0
  143. package/mvc/components/scb-breadcrumb/scb-breadcrumb.js +1 -0
  144. package/mvc/components/scb-button/scb-button.js +1 -0
  145. package/mvc/components/scb-calendar/scb-calendar-event.js +1 -0
  146. package/mvc/components/scb-calendar/scb-calendar.js +1 -0
  147. package/mvc/components/scb-calendar-card/scb-calendar-card.js +1 -0
  148. package/mvc/components/scb-card/scb-card.js +1 -0
  149. package/mvc/components/scb-checkbox/scb-checkbox-group.js +1 -0
  150. package/mvc/components/scb-checkbox/scb-checkbox.js +1 -0
  151. package/mvc/components/scb-chip/scb-chip.js +1 -0
  152. package/mvc/components/scb-collapse/scb-collapse.js +1 -0
  153. package/mvc/components/scb-cookies-consent/scb-cookies-consent.js +1 -0
  154. package/mvc/components/scb-dialog/scb-dialog.js +1 -0
  155. package/mvc/components/scb-divider/scb-divider.js +1 -0
  156. package/mvc/components/scb-drawer/scb-drawer.js +1 -0
  157. package/mvc/components/scb-drop-zone/scb-drop-zone.js +1 -0
  158. package/mvc/components/scb-dropdown/scb-dropdown.js +1 -0
  159. package/mvc/components/scb-fab/scb-fab.js +1 -0
  160. package/mvc/components/scb-fact-card/scb-fact-card-content.js +1 -0
  161. package/mvc/components/scb-fact-card/scb-fact-card.js +1 -0
  162. package/mvc/components/scb-footer/scb-footer-section.js +1 -0
  163. package/mvc/components/scb-footer/scb-footer.js +1 -0
  164. package/mvc/components/scb-gallery-grid/scb-gallery-grid.js +1 -0
  165. package/mvc/components/scb-grid/scb-grid-item.js +1 -0
  166. package/mvc/components/scb-grid/scb-grid.js +1 -0
  167. package/mvc/components/scb-grid/scb-stack.js +1 -0
  168. package/mvc/components/scb-header/scb-header-menu-group.js +1 -0
  169. package/mvc/components/scb-header/scb-header-menu-item.js +1 -0
  170. package/mvc/components/scb-header/scb-header-tab.js +1 -0
  171. package/mvc/components/scb-header/scb-header-utility.js +1 -0
  172. package/mvc/components/scb-header/scb-header.js +1 -0
  173. package/mvc/components/scb-horizontal-scroller/scb-horizontal-scroller.js +1 -0
  174. package/mvc/components/scb-icon-button/scb-icon-button.js +1 -0
  175. package/mvc/components/scb-keyfigure-card/scb-keyfigure-card.js +1 -0
  176. package/mvc/components/scb-link/scb-link.js +1 -0
  177. package/mvc/components/scb-list/scb-list-item.js +1 -0
  178. package/mvc/components/scb-list/scb-list.js +1 -0
  179. package/mvc/components/scb-menu/scb-menu-item.js +1 -0
  180. package/mvc/components/scb-menu/scb-menu-section.js +1 -0
  181. package/mvc/components/scb-menu/scb-menu.js +1 -0
  182. package/mvc/components/scb-menu/scb-sub-menu.js +1 -0
  183. package/mvc/components/scb-nav/scb-nav-item.js +1 -0
  184. package/mvc/components/scb-nav/scb-nav.js +1 -0
  185. package/mvc/components/scb-notification-card/scb-notification-card.js +1 -0
  186. package/mvc/components/scb-options-menu/scb-options-menu-item.js +1 -0
  187. package/mvc/components/scb-options-menu/scb-options-menu.js +1 -0
  188. package/mvc/components/scb-options-menu/scb-options-sub-menu.js +1 -0
  189. package/mvc/components/scb-overlay/scb-overlay.js +1 -0
  190. package/mvc/components/scb-pagination/scb-pagination.js +1 -0
  191. package/mvc/components/scb-progress-indicator/scb-progress-indicator.js +1 -0
  192. package/mvc/components/scb-progress-stepper/scb-progress-step.js +1 -0
  193. package/mvc/components/scb-progress-stepper/scb-progress-stepper.js +1 -0
  194. package/mvc/components/scb-radio-button/scb-radio-button.js +1 -0
  195. package/mvc/components/scb-radio-button/scb-radio-group.js +1 -0
  196. package/mvc/components/scb-scrollspy/scb-scrollspy.js +1 -0
  197. package/mvc/components/scb-search/scb-search.js +1 -0
  198. package/mvc/components/scb-segmented-button/scb-segmented-button.js +1 -0
  199. package/mvc/components/scb-segmented-button/scb-segmented-item.js +1 -0
  200. package/mvc/components/scb-select/scb-select-option.js +1 -0
  201. package/mvc/components/scb-select/scb-select.js +1 -0
  202. package/mvc/components/scb-skeleton/scb-skeleton.js +1 -0
  203. package/mvc/components/scb-slider/scb-slider.js +1 -0
  204. package/mvc/components/scb-snackbar/scb-snackbar.js +1 -0
  205. package/mvc/components/scb-status-pill/scb-status-pill.js +1 -0
  206. package/mvc/components/scb-stepper/scb-step.js +1 -0
  207. package/mvc/components/scb-stepper/scb-stepper.js +1 -0
  208. package/mvc/components/scb-switch/scb-switch.js +1 -0
  209. package/mvc/components/scb-table/scb-table.js +1 -0
  210. package/mvc/components/scb-table-advanced/scb-table-advanced.js +1 -0
  211. package/mvc/components/scb-tabs/scb-primary-tab.js +1 -0
  212. package/mvc/components/scb-tabs/scb-secondary-tab.js +1 -0
  213. package/mvc/components/scb-tabs/scb-tabs.js +1 -0
  214. package/mvc/components/scb-textfield/scb-textfield.js +1 -0
  215. package/mvc/components/scb-toc/scb-toc-item.js +1 -0
  216. package/mvc/components/scb-toc/scb-toc.js +1 -0
  217. package/mvc/components/scb-tooltip/scb-tooltip.js +1 -0
  218. package/mvc/components/scb-viz/scb-viz-actions-runtime.js +1 -0
  219. package/mvc/components/scb-viz/scb-viz-print-runtime.js +1 -0
  220. package/mvc/components/scb-viz/scb-viz-series-differentiation-registry.js +1 -0
  221. package/mvc/components/scb-viz/scb-viz-series-differentiation-runtime.js +1 -0
  222. package/mvc/components/scb-viz/scb-viz-table-runtime.js +1 -0
  223. package/mvc/components/scb-viz/scb-viz.js +1 -0
  224. package/mvc/fonts/inter/files/inter-latin-wght-italic.woff2 +0 -0
  225. package/mvc/fonts/inter/files/inter-latin-wght-normal.woff2 +0 -0
  226. package/mvc/fonts/material-symbols-outlined/files/material-symbols-outlined-latin-wght-normal.woff2 +0 -0
  227. package/mvc/scb-blazor-bridge.js +6827 -2805
  228. package/mvc/scb-logo.svg +20 -20
  229. package/mvc/scb-typography.css +1 -1
  230. package/mvc/scb-wc.css +3 -2
  231. package/mvc/scb.svg +13 -13
  232. package/mvc/vendor/assertClassBrand.js +1 -0
  233. package/mvc/vendor/classPrivateFieldGet2.js +1 -0
  234. package/mvc/vendor/decorate.js +1 -0
  235. package/mvc/vendor/preload-helper.js +1 -0
  236. package/mvc/vendor/vendor-lit.js +1 -0
  237. package/mvc/vendor/vendor-material.js +364 -0
  238. package/mvc/vendor/vendor.js +4 -0
  239. package/package.json +429 -77
  240. package/scb-accordion/scb-accordion-item.js +340 -0
  241. package/scb-accordion/scb-accordion.js +151 -0
  242. package/scb-app-bar/scb-app-bar.js +317 -0
  243. package/scb-avatar/scb-avatar.js +197 -0
  244. package/scb-badge/scb-badge.js +165 -0
  245. package/scb-breadcrumb/scb-breadcrumb-item.js +62 -0
  246. package/scb-breadcrumb/scb-breadcrumb.js +255 -0
  247. package/scb-button/scb-button.js +398 -0
  248. package/scb-calendar/scb-calendar-event.js +48 -0
  249. package/scb-calendar/scb-calendar.js +700 -0
  250. package/scb-calendar-card/scb-calendar-card.js +505 -0
  251. package/scb-card/scb-card.js +1231 -0
  252. package/scb-checkbox/scb-checkbox-group.js +104 -0
  253. package/scb-checkbox/scb-checkbox.js +316 -0
  254. package/scb-chevron/scb-chevron.js +143 -0
  255. package/scb-chip/scb-chip.js +234 -0
  256. package/scb-collapse/scb-collapse.js +231 -0
  257. package/scb-cookies-consent/scb-cookies-consent.js +164 -0
  258. package/scb-datepicker/scb-datepicker.js +469 -0
  259. package/scb-dialog/scb-dialog.js +574 -0
  260. package/scb-divider/scb-divider.js +119 -0
  261. package/scb-drawer/scb-drawer.js +297 -0
  262. package/scb-drop-zone/scb-drop-zone.js +965 -0
  263. package/scb-dropdown/scb-dropdown.js +598 -0
  264. package/scb-fab/scb-fab.js +190 -0
  265. package/scb-fact-card/scb-fact-card-content.js +82 -0
  266. package/scb-fact-card/scb-fact-card.js +376 -0
  267. package/scb-footer/scb-footer-section.js +23 -0
  268. package/scb-footer/scb-footer.js +343 -0
  269. package/scb-gallery-grid/scb-gallery-grid.js +242 -0
  270. package/scb-grid/scb-grid-item.js +81 -0
  271. package/scb-grid/scb-grid.js +200 -0
  272. package/scb-grid/scb-stack.js +120 -0
  273. package/scb-header/scb-header-menu-group.js +21 -0
  274. package/scb-header/scb-header-menu-item.js +22 -0
  275. package/scb-header/scb-header-tab.js +25 -0
  276. package/scb-header/scb-header-utility.js +27 -0
  277. package/scb-header/scb-header.js +1358 -0
  278. package/scb-horizontal-scroller/scb-horizontal-scroller.js +353 -0
  279. package/scb-icon-button/scb-icon-button.js +335 -0
  280. package/scb-keyfigure-card/scb-keyfigure-card.js +340 -0
  281. package/scb-link/scb-link.js +136 -0
  282. package/scb-list/scb-list-item.js +297 -0
  283. package/scb-list/scb-list.js +119 -0
  284. package/scb-menu/scb-menu-item.js +330 -0
  285. package/scb-menu/scb-menu-section.js +60 -0
  286. package/scb-menu/scb-menu.js +154 -0
  287. package/scb-menu/scb-sub-menu.js +36 -0
  288. package/scb-nav/scb-nav-item.js +96 -0
  289. package/scb-nav/scb-nav.js +263 -0
  290. package/scb-notification-card/scb-notification-card.js +479 -0
  291. package/scb-options-menu/scb-options-menu-item.js +218 -0
  292. package/scb-options-menu/scb-options-menu.js +237 -0
  293. package/scb-options-menu/scb-options-sub-menu.js +69 -0
  294. package/scb-overlay/scb-overlay.js +144 -0
  295. package/scb-pagination/scb-pagination.js +438 -0
  296. package/scb-progress-indicator/scb-progress-indicator.js +199 -0
  297. package/scb-progress-stepper/scb-progress-step.js +213 -0
  298. package/scb-progress-stepper/scb-progress-stepper.js +132 -0
  299. package/scb-radio-button/scb-radio-button.js +249 -0
  300. package/scb-radio-button/scb-radio-group.js +216 -0
  301. package/scb-scrollspy/scb-scrollspy.js +670 -0
  302. package/scb-search/scb-search.js +643 -0
  303. package/scb-segmented-button/scb-segmented-button.js +215 -0
  304. package/scb-segmented-button/scb-segmented-item.js +133 -0
  305. package/scb-select/scb-select-option.js +88 -0
  306. package/scb-select/scb-select.js +517 -0
  307. package/scb-skeleton/scb-skeleton.js +92 -0
  308. package/scb-slider/scb-slider.js +98 -0
  309. package/scb-snackbar/scb-snackbar.js +223 -0
  310. package/scb-status-pill/scb-status-pill.js +100 -0
  311. package/scb-stepper/scb-step.js +311 -0
  312. package/scb-stepper/scb-stepper.js +325 -0
  313. package/scb-switch/scb-switch.js +182 -0
  314. package/scb-table/scb-table.js +202 -0
  315. package/scb-table-advanced/scb-table-advanced.js +327 -0
  316. package/scb-tabs/scb-primary-tab.js +68 -0
  317. package/scb-tabs/scb-secondary-tab.js +68 -0
  318. package/scb-tabs/scb-tabs.js +100 -0
  319. package/scb-test-components/index.d.ts +90 -0
  320. package/scb-test-components/scb-accordion/scb-accordion-item.d.ts +39 -0
  321. package/scb-test-components/scb-accordion/scb-accordion.d.ts +27 -0
  322. package/scb-test-components/scb-app-bar/scb-app-bar.d.ts +25 -0
  323. package/scb-test-components/scb-avatar/scb-avatar.d.ts +37 -0
  324. package/scb-test-components/scb-badge/scb-badge.d.ts +28 -0
  325. package/scb-test-components/scb-breadcrumb/scb-breadcrumb-item.d.ts +15 -0
  326. package/scb-test-components/scb-breadcrumb/scb-breadcrumb.d.ts +27 -0
  327. package/scb-test-components/scb-button/scb-button.d.ts +40 -0
  328. package/scb-test-components/scb-calendar/scb-calendar-event.d.ts +15 -0
  329. package/scb-test-components/scb-calendar/scb-calendar.d.ts +77 -0
  330. package/scb-test-components/scb-calendar-card/scb-calendar-card.d.ts +45 -0
  331. package/scb-test-components/scb-card/scb-card.d.ts +101 -0
  332. package/scb-test-components/scb-checkbox/scb-checkbox-group.d.ts +23 -0
  333. package/scb-test-components/scb-checkbox/scb-checkbox.d.ts +52 -0
  334. package/scb-test-components/scb-chevron/scb-chevron.d.ts +13 -0
  335. package/scb-test-components/scb-chip/scb-chip.d.ts +61 -0
  336. package/scb-test-components/scb-collapse/scb-collapse.d.ts +29 -0
  337. package/scb-test-components/scb-cookies-consent/scb-cookies-consent.d.ts +23 -0
  338. package/scb-test-components/scb-datepicker/scb-datepicker.d.ts +39 -0
  339. package/scb-test-components/scb-dialog/scb-dialog.d.ts +72 -0
  340. package/scb-test-components/scb-divider/scb-divider.d.ts +34 -0
  341. package/scb-test-components/scb-drawer/scb-drawer.d.ts +72 -0
  342. package/scb-test-components/scb-drop-zone/scb-drop-zone.d.ts +143 -0
  343. package/scb-test-components/scb-dropdown/scb-dropdown.d.ts +70 -0
  344. package/scb-test-components/scb-fab/scb-fab.d.ts +42 -0
  345. package/scb-test-components/scb-fact-card/scb-fact-card-content.d.ts +15 -0
  346. package/scb-test-components/scb-fact-card/scb-fact-card.d.ts +49 -0
  347. package/scb-test-components/scb-footer/scb-footer-section.d.ts +20 -0
  348. package/scb-test-components/scb-footer/scb-footer.d.ts +31 -0
  349. package/scb-test-components/scb-gallery-grid/scb-gallery-grid.d.ts +20 -0
  350. package/scb-test-components/scb-grid/scb-grid-item.d.ts +32 -0
  351. package/scb-test-components/scb-grid/scb-grid.d.ts +36 -0
  352. package/scb-test-components/scb-grid/scb-stack.d.ts +32 -0
  353. package/scb-test-components/scb-header/scb-header-menu-group.d.ts +12 -0
  354. package/scb-test-components/scb-header/scb-header-menu-item.d.ts +13 -0
  355. package/scb-test-components/scb-header/scb-header-tab.d.ts +13 -0
  356. package/scb-test-components/scb-header/scb-header-utility.d.ts +14 -0
  357. package/scb-test-components/scb-header/scb-header.d.ts +132 -0
  358. package/scb-test-components/scb-horizontal-scroller/scb-horizontal-scroller.d.ts +47 -0
  359. package/scb-test-components/scb-icon-button/scb-icon-button.d.ts +76 -0
  360. package/scb-test-components/scb-keyfigure-card/scb-keyfigure-card.d.ts +46 -0
  361. package/scb-test-components/scb-link/scb-link.d.ts +25 -0
  362. package/scb-test-components/scb-list/scb-list-item.d.ts +38 -0
  363. package/scb-test-components/scb-list/scb-list.d.ts +26 -0
  364. package/scb-test-components/scb-menu/scb-menu-item.d.ts +52 -0
  365. package/scb-test-components/scb-menu/scb-menu-section.d.ts +11 -0
  366. package/scb-test-components/scb-menu/scb-menu.d.ts +25 -0
  367. package/scb-test-components/scb-menu/scb-sub-menu.d.ts +14 -0
  368. package/scb-test-components/scb-nav/scb-nav-item.d.ts +20 -0
  369. package/scb-test-components/scb-nav/scb-nav.d.ts +50 -0
  370. package/scb-test-components/scb-notification-card/scb-notification-card.d.ts +46 -0
  371. package/scb-test-components/scb-options-menu/scb-options-menu-item.d.ts +29 -0
  372. package/scb-test-components/scb-options-menu/scb-options-menu.d.ts +35 -0
  373. package/scb-test-components/scb-options-menu/scb-options-sub-menu.d.ts +11 -0
  374. package/scb-test-components/scb-overlay/scb-overlay.d.ts +24 -0
  375. package/scb-test-components/scb-pagination/scb-pagination.d.ts +36 -0
  376. package/scb-test-components/scb-progress-indicator/scb-progress-indicator.d.ts +28 -0
  377. package/scb-test-components/scb-progress-stepper/scb-progress-step.d.ts +21 -0
  378. package/scb-test-components/scb-progress-stepper/scb-progress-stepper.d.ts +22 -0
  379. package/scb-test-components/scb-radio-button/scb-radio-button.d.ts +26 -0
  380. package/scb-test-components/scb-radio-button/scb-radio-group.d.ts +49 -0
  381. package/scb-test-components/scb-scrollspy/scb-scrollspy.d.ts +217 -0
  382. package/scb-test-components/scb-search/scb-search.d.ts +96 -0
  383. package/scb-test-components/scb-segmented-button/scb-segmented-button.d.ts +80 -0
  384. package/scb-test-components/scb-segmented-button/scb-segmented-item.d.ts +21 -0
  385. package/scb-test-components/scb-select/scb-select-option.d.ts +16 -0
  386. package/scb-test-components/scb-select/scb-select.d.ts +62 -0
  387. package/scb-test-components/scb-skeleton/scb-skeleton.d.ts +25 -0
  388. package/scb-test-components/scb-slider/scb-slider.d.ts +28 -0
  389. package/scb-test-components/scb-snackbar/scb-snackbar.d.ts +24 -0
  390. package/scb-test-components/scb-status-pill/scb-status-pill.d.ts +22 -0
  391. package/scb-test-components/scb-stepper/scb-step.d.ts +22 -0
  392. package/scb-test-components/scb-stepper/scb-stepper.d.ts +47 -0
  393. package/scb-test-components/scb-switch/scb-switch.d.ts +52 -0
  394. package/scb-test-components/scb-table/scb-table.d.ts +24 -0
  395. package/scb-test-components/scb-table-advanced/scb-table-advanced.d.ts +39 -0
  396. package/scb-test-components/scb-tabs/scb-primary-tab.d.ts +15 -0
  397. package/scb-test-components/scb-tabs/scb-secondary-tab.d.ts +15 -0
  398. package/scb-test-components/scb-tabs/scb-tabs.d.ts +21 -0
  399. package/scb-test-components/scb-textfield/scb-textfield.d.ts +75 -0
  400. package/scb-test-components/scb-toc/scb-toc-item.d.ts +38 -0
  401. package/scb-test-components/scb-toc/scb-toc.d.ts +27 -0
  402. package/scb-test-components/scb-tooltip/scb-tooltip.d.ts +51 -0
  403. package/scb-test-components/scb-vignette/scb-vignette.d.ts +20 -0
  404. package/scb-test-components/scb-viz/scb-viz-actions-runtime.d.ts +26 -0
  405. package/scb-test-components/scb-viz/scb-viz-print-runtime.d.ts +27 -0
  406. package/scb-test-components/scb-viz/scb-viz-series-differentiation-registry.d.ts +21 -0
  407. package/scb-test-components/scb-viz/scb-viz-series-differentiation-runtime.d.ts +42 -0
  408. package/scb-test-components/scb-viz/scb-viz-table-runtime.d.ts +28 -0
  409. package/scb-test-components/scb-viz/scb-viz.d.ts +207 -0
  410. package/scb-textfield/scb-textfield.js +827 -0
  411. package/scb-toc/scb-toc-item.js +477 -0
  412. package/scb-toc/scb-toc.js +101 -0
  413. package/scb-tooltip/scb-tooltip.js +402 -0
  414. package/scb-typography.css +1 -1
  415. package/scb-vignette/scb-vignette.js +87 -0
  416. package/scb-viz/scb-viz-actions-runtime.js +143 -0
  417. package/scb-viz/scb-viz-print-runtime.js +121 -0
  418. package/scb-viz/scb-viz-series-differentiation-registry.js +117 -0
  419. package/scb-viz/scb-viz-series-differentiation-runtime.js +126 -0
  420. package/scb-viz/scb-viz-table-runtime.js +86 -0
  421. package/scb-viz/scb-viz.js +2195 -0
  422. package/scb-wc-public-entry/index.d.ts +87 -0
  423. package/scb-wc-selfhost.css +29 -0
  424. package/scb-wc.bundle.js +12893 -1099
  425. package/scb-wc.css +3 -2
  426. package/scb-wc.d.ts +174 -0
  427. package/starters/blazor/Components/App.razor +34 -0
  428. package/starters/blazor/Components/Layout/MainLayout.razor +39 -0
  429. package/starters/blazor/Components/Pages/Home.razor +80 -0
  430. package/starters/blazor/Components/Routes.razor +14 -0
  431. package/starters/blazor/Components/_Imports.razor +10 -0
  432. package/starters/blazor/Program.cs +23 -0
  433. package/starters/blazor/README.md +28 -0
  434. package/starters/blazor/ScbStarterApp.csproj +7 -0
  435. package/starters/blazor/dot-gitignore +3 -0
  436. package/starters/blazor/package.json +14 -0
  437. package/starters/blazor/wwwroot/app.css +54 -0
  438. package/starters/html/README.md +23 -0
  439. package/starters/html/dot-gitignore +2 -0
  440. package/starters/html/index.html +12 -0
  441. package/starters/html/main.js +135 -0
  442. package/starters/html/package.json +16 -0
  443. package/starters/react/README.md +24 -0
  444. package/starters/react/dot-gitignore +2 -0
  445. package/starters/react/index.html +12 -0
  446. package/starters/react/package.json +19 -0
  447. package/starters/react/src/App.jsx +118 -0
  448. package/starters/react/src/main.jsx +29 -0
  449. package/starters/react/vite.config.js +6 -0
  450. package/index.d.ts +0 -0
  451. package/mvc/components/index.js +0 -1
@@ -0,0 +1,965 @@
1
+ import { __decorate as e } from "../_virtual/_@oxc-project_runtime@0.126.0/helpers/decorate.js";
2
+ import "../scb-button/scb-button.js";
3
+ import { LitElement as t, css as n, html as r } from "lit";
4
+ import { customElement as i, property as a, state as o } from "lit/decorators.js";
5
+ //#region src/scb-test-components/scb-drop-zone/scb-drop-zone.ts
6
+ var s = class extends t {
7
+ static {
8
+ this.formAssociated = !0;
9
+ }
10
+ constructor() {
11
+ super(), this._internals = null, this.type = "default", this.name = "", this.multiple = !1, this.label = "", this.supportingText = "", this.metaText = "", this.buttonLabel = "", this.replaceButtonLabel = "", this.removeButtonLabel = "", this.previewEyebrow = "", this.emptyPreviewTitle = "", this.emptyPreviewMeta = "", this.accept = "", this.hidePreview = !1, this.showExistingPreview = !1, this.disabled = !1, this.previewSrc = "", this.previewAlt = "", this.previewTitle = "", this.previewMeta = "", this.existingValue = "", this.existingValueName = "", this.removeValueName = "", this._isDragOver = !1, this._selectedPreviewKind = "empty", this._selectedPreviewSrc = "", this._selectedPreviewAlt = "", this._selectedPreviewTitle = "", this._selectedPreviewMeta = "", this._selectedPreviewItems = [], this._markedForRemoval = !1, this._dragDepth = 0, this._previewSource = "external", this._form = null, this._formDataHandler = null, "attachInternals" in this && (this._internals = this.attachInternals());
12
+ }
13
+ static {
14
+ this.styles = n`
15
+ :host {
16
+ display: block;
17
+ width: 100%;
18
+ min-width: 0;
19
+ font-family: var(--brand-font, Inter, sans-serif);
20
+ color: var(--md-sys-color-on-surface, #111111);
21
+ }
22
+
23
+ .scb-drop-zone {
24
+ display: block;
25
+ width: 100%;
26
+ }
27
+
28
+ .scb-drop-zone__layout {
29
+ display: grid;
30
+ gap: var(--spacing-5, 16px);
31
+ align-items: stretch;
32
+ }
33
+
34
+ .scb-drop-zone__layout--with-preview {
35
+ grid-template-columns: minmax(0, 7fr) minmax(280px, 3fr);
36
+ }
37
+
38
+ :host([multiple]) .scb-drop-zone__layout--with-preview {
39
+ grid-template-columns: 1fr;
40
+ }
41
+
42
+ .scb-drop-zone__surface,
43
+ .scb-drop-zone__preview {
44
+ min-width: 0;
45
+ }
46
+
47
+ .scb-drop-zone__main {
48
+ min-width: 0;
49
+ display: grid;
50
+ gap: var(--spacing-4, 12px);
51
+ }
52
+
53
+ .scb-drop-zone__surface {
54
+ box-sizing: border-box;
55
+ width: 100%;
56
+ min-height: var(--scb-drop-zone-min-height, min(46vh, 420px));
57
+ height: 100%;
58
+ display: flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+ padding: var(--spacing-8, 32px);
62
+ border: 2px dashed var(--md-sys-color-outline-variant, #cccccc);
63
+ border-radius: var(--radius-l, 16px);
64
+ background: var(--md-sys-color-surface-container-lowest, #ffffff);
65
+ cursor: pointer;
66
+ transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
67
+ outline: none;
68
+ }
69
+
70
+ :host([multiple]) .scb-drop-zone__surface {
71
+ min-height: var(--scb-drop-zone-multi-min-height, min(32vh, 280px));
72
+ padding: var(--spacing-6, 20px);
73
+ }
74
+
75
+ .scb-drop-zone__surface:hover,
76
+ .scb-drop-zone__surface:focus-visible,
77
+ .scb-drop-zone__surface.is-dragover {
78
+ border-color: var(--md-sys-color-primary, #005799);
79
+ background: var(--md-sys-color-surface-container, #f5f5f5);
80
+ box-shadow: 0 0 0 1px var(--md-sys-color-primary, #005799);
81
+ }
82
+
83
+ :host([disabled]) .scb-drop-zone__surface {
84
+ cursor: default;
85
+ opacity: 0.6;
86
+ }
87
+
88
+ .scb-drop-zone__inner {
89
+ width: min(760px, 100%);
90
+ text-align: center;
91
+ }
92
+
93
+ .scb-drop-zone__title {
94
+ margin: 0 0 var(--spacing-3, 8px) 0;
95
+ font-size: var(--md-sys-typescale-headline-medium-size, 24px);
96
+ line-height: var(--md-sys-typescale-headline-medium-line-height, 30px);
97
+ color: var(--md-sys-color-on-surface, #111111);
98
+ }
99
+
100
+ .scb-drop-zone__lead {
101
+ margin: 0;
102
+ color: var(--md-sys-color-on-surface-variant, #444444);
103
+ line-height: 1.6;
104
+ }
105
+
106
+ .scb-drop-zone__meta {
107
+ margin: var(--spacing-4, 12px) 0 0 0;
108
+ color: var(--md-sys-color-on-surface-variant, #444444);
109
+ line-height: 1.6;
110
+ }
111
+
112
+ .scb-drop-zone__actions {
113
+ display: flex;
114
+ justify-content: center;
115
+ margin-top: var(--spacing-6, 20px);
116
+ }
117
+
118
+ .scb-drop-zone__native-input {
119
+ display: none;
120
+ }
121
+
122
+ .scb-drop-zone__preview {
123
+ display: grid;
124
+ grid-template-columns: 1fr;
125
+ grid-template-rows: minmax(0, 1fr) auto;
126
+ gap: var(--spacing-6, 20px);
127
+ min-height: var(--scb-drop-zone-min-height, min(46vh, 420px));
128
+ height: 100%;
129
+ padding: var(--spacing-6, 20px);
130
+ box-sizing: border-box;
131
+ border: 1px solid var(--md-sys-color-outline-variant, #cccccc);
132
+ border-radius: var(--radius-l, 16px);
133
+ background: var(--md-sys-color-surface-container-lowest, #ffffff);
134
+ align-items: stretch;
135
+ align-content: stretch;
136
+ }
137
+
138
+
139
+ .scb-drop-zone__preview-media {
140
+ width: 100%;
141
+ height: 100%;
142
+ min-height: 0;
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ padding: 0;
147
+ box-sizing: border-box;
148
+ }
149
+
150
+ .scb-drop-zone__preview-image {
151
+ display: block;
152
+ max-width: 100%;
153
+ max-height: var(--scb-drop-zone-preview-max-height, 240px);
154
+ width: auto;
155
+ height: auto;
156
+ object-fit: contain;
157
+ border-radius: var(--radius-m, 12px);
158
+ }
159
+
160
+ .scb-drop-zone__preview-image--thumb {
161
+ width: 40px;
162
+ height: 40px;
163
+ max-width: 40px;
164
+ max-height: 40px;
165
+ border-radius: var(--radius-s, 8px);
166
+ object-fit: cover;
167
+ flex: 0 0 auto;
168
+ }
169
+
170
+ .scb-drop-zone__preview-placeholder,
171
+ .scb-drop-zone__preview-file-card {
172
+ box-sizing: border-box;
173
+ width: 100%;
174
+ height: 100%;
175
+ display: flex;
176
+ align-items: center;
177
+ justify-content: center;
178
+ padding: var(--spacing-6, 20px);
179
+ }
180
+
181
+ .scb-drop-zone__preview-placeholder-inner,
182
+ .scb-drop-zone__preview-file-card-inner {
183
+ box-sizing: border-box;
184
+ width: 100%;
185
+ max-width: 320px;
186
+ height: 100%;
187
+ min-height: 180px;
188
+ display: flex;
189
+ flex-direction: column;
190
+ align-items: center;
191
+ justify-content: center;
192
+ gap: var(--spacing-4, 12px);
193
+ padding: var(--spacing-6, 20px);
194
+ border: 2px dashed var(--md-sys-color-outline-variant, #cccccc);
195
+ border-radius: var(--radius-m, 12px);
196
+ background: var(--md-sys-color-surface-container-lowest, #ffffff);
197
+ text-align: center;
198
+ }
199
+
200
+ .scb-drop-zone__preview-file-card-inner {
201
+ border-style: solid;
202
+ background: var(--md-sys-color-surface-container, #f5f5f5);
203
+ }
204
+
205
+ .scb-drop-zone__preview-placeholder-label,
206
+ .scb-drop-zone__preview-file-extension {
207
+ display: inline-flex;
208
+ align-items: center;
209
+ justify-content: center;
210
+ min-width: 72px;
211
+ min-height: 72px;
212
+ padding: var(--spacing-3, 8px);
213
+ border-radius: var(--radius-m, 12px);
214
+ background: var(--md-sys-color-surface-container, #f5f5f5);
215
+ color: var(--md-sys-color-on-surface, #111111);
216
+ font-size: var(--md-sys-typescale-title-medium-size, 16px);
217
+ line-height: var(--md-sys-typescale-title-medium-line-height, 24px);
218
+ font-weight: 700;
219
+ letter-spacing: 0.06em;
220
+ text-transform: uppercase;
221
+ }
222
+
223
+ .scb-drop-zone__preview-file-extension {
224
+ background: var(--md-sys-color-primary-container, #d9e2ff);
225
+ color: var(--md-sys-color-on-primary-container, #001944);
226
+ }
227
+
228
+ .scb-drop-zone__preview-file-label {
229
+ margin: 0;
230
+ color: var(--md-sys-color-on-surface-variant, #444444);
231
+ line-height: 1.6;
232
+ }
233
+
234
+ .scb-drop-zone__preview-list {
235
+ width: 100%;
236
+ max-height: 300px;
237
+ margin: 0;
238
+ padding: 0;
239
+ list-style: none;
240
+ display: grid;
241
+ gap: var(--spacing-2, 4px);
242
+ overflow: auto;
243
+ }
244
+
245
+
246
+ .scb-drop-zone__preview-list-item {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: var(--spacing-3, 8px);
250
+ min-width: 0;
251
+ padding: var(--spacing-3, 8px);
252
+ border-radius: var(--radius-s, 8px);
253
+ background: var(--md-sys-color-surface-container, #f5f5f5);
254
+ }
255
+
256
+ .scb-drop-zone__preview-list-extension {
257
+ display: inline-flex;
258
+ align-items: center;
259
+ justify-content: center;
260
+ flex: 0 0 auto;
261
+ border-radius: var(--radius-s, 8px);
262
+ color: var(--md-sys-color-on-primary-container, #001944);
263
+ font-size: var(--md-sys-typescale-label-medium-size, 12px);
264
+ line-height: var(--md-sys-typescale-label-medium-line-height, 16px);
265
+ font-weight: 700;
266
+ letter-spacing: 0.04em;
267
+ text-transform: uppercase;
268
+ }
269
+
270
+ .scb-drop-zone__preview-list-content {
271
+ display: flex;
272
+ flex-direction: column;
273
+ min-width: 0;
274
+ text-align: left;
275
+ flex: 1 1 auto;
276
+ }
277
+
278
+ .scb-drop-zone__preview-list-item-action {
279
+ flex: 0 0 auto;
280
+ margin-left: auto;
281
+ }
282
+
283
+ .scb-drop-zone__preview-list-title,
284
+ .scb-drop-zone__preview-list-meta {
285
+ white-space: nowrap;
286
+ overflow: hidden;
287
+ text-overflow: ellipsis;
288
+ }
289
+
290
+ .scb-drop-zone__preview-list-title {
291
+ font-size: var(--md-sys-typescale-body-medium-size, 16px);
292
+ line-height: var(--md-sys-typescale-body-medium-line-height, 24px);
293
+ color: var(--md-sys-color-on-surface, #111111);
294
+ }
295
+
296
+ .scb-drop-zone__preview-list-meta {
297
+ font-size: var(--md-sys-typescale-body-small-size, 14px);
298
+ line-height: var(--md-sys-typescale-body-small-line-height, 20px);
299
+ color: var(--md-sys-color-on-surface-variant, #444444);
300
+ }
301
+
302
+ .scb-drop-zone__sr-only {
303
+ position: absolute;
304
+ width: 1px;
305
+ height: 1px;
306
+ padding: 0;
307
+ margin: -1px;
308
+ overflow: hidden;
309
+ clip: rect(0, 0, 0, 0);
310
+ white-space: nowrap;
311
+ border: 0;
312
+ }
313
+
314
+ .scb-drop-zone__preview-body {
315
+ display: flex;
316
+ flex-direction: column;
317
+ min-width: 0;
318
+ }
319
+
320
+ .scb-drop-zone__preview-eyebrow {
321
+ margin: 0 0 var(--spacing-2, 4px) 0;
322
+ color: var(--md-sys-color-on-surface-variant, #444444);
323
+ font-size: var(--md-sys-typescale-body-small-size, 14px);
324
+ line-height: var(--md-sys-typescale-body-small-line-height, 20px);
325
+ letter-spacing: var(--md-sys-typescale-body-small-tracking, 0.1px);
326
+ text-transform: uppercase;
327
+ }
328
+
329
+ .scb-drop-zone__preview-title {
330
+ margin: 0;
331
+ color: var(--md-sys-color-on-surface, #111111);
332
+ font-size: var(--md-sys-typescale-title-large-size, 20px);
333
+ line-height: var(--md-sys-typescale-title-large-line-height, 28px);
334
+ word-break: break-word;
335
+ }
336
+
337
+ .scb-drop-zone__preview-meta {
338
+ margin: var(--spacing-3, 8px) 0 0 0;
339
+ color: var(--md-sys-color-on-surface-variant, #444444);
340
+ line-height: 1.6;
341
+ word-break: break-word;
342
+ }
343
+
344
+ .scb-drop-zone__preview-actions {
345
+ display: flex;
346
+ flex-wrap: wrap;
347
+ gap: var(--spacing-3, 8px);
348
+ margin-top: auto;
349
+ padding-top: var(--spacing-5, 16px);
350
+ }
351
+
352
+ .scb-drop-zone__selected-images {
353
+ display: grid;
354
+ grid-template-columns: repeat(4, minmax(180px, 1fr));
355
+ gap: var(--spacing-3, 8px);
356
+ margin-top: var(--spacing-4, 12px);
357
+ }
358
+
359
+ .scb-drop-zone__selected-image-card {
360
+ display: grid;
361
+ gap: var(--spacing-2, 4px);
362
+ border: 1px solid var(--md-sys-color-outline-variant, #cccccc);
363
+ border-radius: var(--radius-m, 12px);
364
+ background: var(--md-sys-color-surface-container-lowest, #ffffff);
365
+ padding: var(--spacing-3, 8px);
366
+ min-width: 0;
367
+ }
368
+
369
+ .scb-drop-zone__selected-image {
370
+ display: block;
371
+ width: 100%;
372
+ aspect-ratio: 4 / 3;
373
+ object-fit: cover;
374
+ border-radius: var(--radius-s, 8px);
375
+ background: var(--md-sys-color-surface-container, #f5f5f5);
376
+ }
377
+
378
+ .scb-drop-zone__selected-image-title,
379
+ .scb-drop-zone__selected-image-meta {
380
+ white-space: nowrap;
381
+ overflow: hidden;
382
+ text-overflow: ellipsis;
383
+ }
384
+
385
+ .scb-drop-zone__selected-image-title {
386
+ font-size: var(--md-sys-typescale-body-medium-size, 16px);
387
+ line-height: var(--md-sys-typescale-body-medium-line-height, 24px);
388
+ color: var(--md-sys-color-on-surface, #111111);
389
+ }
390
+
391
+ .scb-drop-zone__selected-image-meta {
392
+ font-size: var(--md-sys-typescale-body-small-size, 14px);
393
+ line-height: var(--md-sys-typescale-body-small-line-height, 20px);
394
+ color: var(--md-sys-color-on-surface-variant, #444444);
395
+ }
396
+
397
+ .scb-drop-zone__selected-image-action {
398
+ justify-self: end;
399
+ }
400
+
401
+ @media (max-width: 1280px) {
402
+ .scb-drop-zone__selected-images {
403
+ grid-template-columns: repeat(3, minmax(180px, 1fr));
404
+ }
405
+ }
406
+
407
+ @media (max-width: 900px) {
408
+ .scb-drop-zone__layout--with-preview {
409
+ grid-template-columns: 1fr;
410
+ }
411
+
412
+ .scb-drop-zone__selected-images {
413
+ grid-template-columns: repeat(2, minmax(180px, 1fr));
414
+ }
415
+ }
416
+
417
+ @media (max-width: 640px) {
418
+ .scb-drop-zone__selected-images {
419
+ grid-template-columns: 1fr;
420
+ }
421
+ }
422
+ `;
423
+ }
424
+ get _resolvedAccept() {
425
+ return this.accept.trim() || (this.type === "image" ? "image/*,.png,.jpg,.jpeg,.webp,.svg,.gif,.bmp,.avif" : "");
426
+ }
427
+ get _hasExistingPreview() {
428
+ return this.multiple || this._markedForRemoval || !(this.existingValue.trim() || this.previewSrc.trim() || this.previewTitle.trim() || this.previewMeta.trim()) ? !1 : this.showExistingPreview || !!this.previewSrc.trim();
429
+ }
430
+ get _resolvedPreviewKind() {
431
+ return this._previewSource === "external" && this._hasExistingPreview ? this.previewSrc.trim() ? "image" : "file" : this._selectedPreviewKind;
432
+ }
433
+ get _hasPreview() {
434
+ return this._resolvedPreviewKind !== "empty";
435
+ }
436
+ get _resolvedLabel() {
437
+ return this.label || (this.type === "image" ? "Ladda upp bild" : "Ladda upp fil");
438
+ }
439
+ get _resolvedSupportingText() {
440
+ return this.multiple ? this.supportingText || (this.type === "image" ? "Dra och släpp en eller flera bilder här, eller välj bilder från din dator." : "Dra och släpp en eller flera filer här, eller välj filer från din dator.") : this.supportingText || (this.type === "image" ? "Dra och släpp en bild här, eller välj en bild från din dator." : "Dra och släpp en fil här, eller välj en fil från din dator.");
441
+ }
442
+ get _resolvedMetaText() {
443
+ return this.metaText ? this.metaText : this.type === "image" ? "PNG, JPG, SVG, GIF, BMP, AVIF och WebP stöds." : "Alla filtyper stöds.";
444
+ }
445
+ get _resolvedButtonLabel() {
446
+ return this.buttonLabel || (this.type === "image" ? "Välj bild" : "Välj fil");
447
+ }
448
+ get _resolvedReplaceButtonLabel() {
449
+ return this.replaceButtonLabel ? this.replaceButtonLabel : this.multiple || this._resolvedPreviewKind === "multi" ? "Lägg till fler filer" : this._previewSource === "external" && this._hasExistingPreview ? this._resolvedPreviewKind === "image" ? "Ersätt bild" : "Ersätt fil" : this._resolvedPreviewKind === "image" ? "Byt bild" : "Byt fil";
450
+ }
451
+ get _resolvedRemoveButtonLabel() {
452
+ return this.removeButtonLabel ? this.removeButtonLabel : this._resolvedPreviewKind === "multi" ? "Ta bort filer" : this._previewSource === "external" && this._hasExistingPreview ? this._resolvedPreviewKind === "image" ? "Ta bort befintlig bild" : "Ta bort befintlig fil" : this._resolvedPreviewKind === "image" ? "Ta bort bild" : "Ta bort fil";
453
+ }
454
+ get _resolvedPreviewEyebrow() {
455
+ return this.previewEyebrow ? this.previewEyebrow : this._hasPreview ? this._resolvedPreviewKind === "multi" ? "Uppladdade filer" : this._previewSource === "external" && this._hasExistingPreview ? this._resolvedPreviewKind === "image" ? "Befintlig bild" : "Befintlig fil" : this._resolvedPreviewKind === "image" ? "Uppladdad bild" : "Uppladdad fil" : "Förhandsvisning";
456
+ }
457
+ get _resolvedEmptyPreviewTitle() {
458
+ return this.emptyPreviewTitle ? this.emptyPreviewTitle : this.multiple ? this.type === "image" ? "Inga bilder uppladdade" : "Inga filer uppladdade" : this.type === "image" ? "Ingen bild uppladdad" : "Ingen fil uppladdad";
459
+ }
460
+ get _resolvedEmptyPreviewMeta() {
461
+ return this.emptyPreviewMeta ? this.emptyPreviewMeta : this.multiple ? this.type === "image" ? "Förhandsvisningen visas här när du har laddat upp bilder." : "Förhandsvisningen visas här när du har laddat upp filer." : this.type === "image" ? "Förhandsvisningen visas här när du har laddat upp en bild." : "Förhandsvisningen visas här när du har laddat upp en fil.";
462
+ }
463
+ get _resolvedPreviewSrc() {
464
+ return this._previewSource === "external" && this._hasExistingPreview ? this.previewSrc.trim() : this._selectedPreviewSrc;
465
+ }
466
+ get _resolvedPreviewAlt() {
467
+ return this._previewSource === "external" && this._hasExistingPreview ? this.previewAlt : this._selectedPreviewAlt;
468
+ }
469
+ get _resolvedPreviewTitle() {
470
+ return this._previewSource === "external" && this._hasExistingPreview ? this.previewTitle || (this._resolvedPreviewKind === "image" ? "Befintlig bild" : "Befintlig fil") : this._selectedPreviewTitle;
471
+ }
472
+ get _resolvedPreviewMeta() {
473
+ return this._previewSource === "external" && this._hasExistingPreview ? this.previewMeta : this._selectedPreviewMeta;
474
+ }
475
+ connectedCallback() {
476
+ super.connectedCallback(), this._syncFormValue(), this._form = this.closest("form"), this._form && (this._formDataHandler = (e) => {
477
+ let t = e.formData;
478
+ t && this._appendToFormData(t);
479
+ }, this._form.addEventListener("formdata", this._formDataHandler));
480
+ }
481
+ disconnectedCallback() {
482
+ this._form && this._formDataHandler && this._form.removeEventListener("formdata", this._formDataHandler), this._formDataHandler = null, this._form = null, this._revokeObjectUrl(), super.disconnectedCallback();
483
+ }
484
+ updated(e) {
485
+ e.has("type") && this.type === "image" && this._selectedPreviewKind === "file" && this._clearSelectedFileState(), (e.has("disabled") || e.has("name") || e.has("multiple") || e.has("existingValueName") || e.has("removeValueName") || e.has("existingValue")) && this._syncFormValue();
486
+ }
487
+ formDisabledCallback(e) {
488
+ this.disabled = e;
489
+ }
490
+ formResetCallback() {
491
+ this._clearSelectedFileState(), this._markedForRemoval = !1, this._previewSource = "external", this._clearNativeInputValue(), this._syncFormValue();
492
+ }
493
+ _syncFormValue() {
494
+ if (!this._internals) return;
495
+ let e = this.name.trim(), t = this.existingValueName.trim(), n = this.removeValueName.trim(), r = new FormData();
496
+ if (!this.disabled && e && this._selectedPreviewItems.length && this._selectedPreviewItems.forEach((t) => {
497
+ r.append(e, t.file, t.file.name);
498
+ }), !this.disabled && !this.multiple && t && this.existingValue.trim() && r.append(t, this.existingValue), !this.disabled && !this.multiple && n && r.append(n, this._markedForRemoval ? "true" : "false"), [...r.keys()].length === 0) {
499
+ this._internals.setFormValue(null);
500
+ return;
501
+ }
502
+ this._internals.setFormValue(r);
503
+ }
504
+ _appendToFormData(e) {
505
+ if (this.disabled) return;
506
+ let t = this.name.trim();
507
+ if (t && this._selectedPreviewItems.length && (e.getAll(t).some((e) => e instanceof File && this._selectedPreviewItems.some((t) => t.file === e)) || this._selectedPreviewItems.forEach((n) => {
508
+ e.append(t, n.file, n.file.name);
509
+ })), !this.multiple) {
510
+ let t = this.existingValueName.trim();
511
+ t && this.existingValue.trim() && !e.has(t) && e.append(t, this.existingValue);
512
+ let n = this.removeValueName.trim();
513
+ n && !e.has(n) && e.append(n, this._markedForRemoval ? "true" : "false");
514
+ }
515
+ }
516
+ openPicker() {
517
+ if (this.disabled) return;
518
+ let e = this.renderRoot.querySelector("[data-role=\"native-input\"]");
519
+ if (e) {
520
+ try {
521
+ e.value = "";
522
+ } catch {}
523
+ e.click();
524
+ }
525
+ }
526
+ setPreviewState(e) {
527
+ this.previewSrc = e?.src ?? "", this.previewAlt = e?.alt ?? "", this.previewTitle = e?.title ?? "", this.previewMeta = e?.meta ?? "", this._markedForRemoval = !1, this._previewSource = this._selectedPreviewItems.length ? "internal" : "external", this._syncFormValue();
528
+ }
529
+ setExistingFileState(e) {
530
+ if (this.multiple) {
531
+ this.existingValue = "", this.previewSrc = "", this.previewAlt = "", this.previewTitle = "", this.previewMeta = "", this._markedForRemoval = !1, this._syncFormValue();
532
+ return;
533
+ }
534
+ this.existingValue = e?.value ?? "", this.previewSrc = e?.src ?? "", this.previewAlt = e?.alt ?? "", this.previewTitle = e?.title ?? "", this.previewMeta = e?.meta ?? "", this._markedForRemoval = !1, this._previewSource = this._selectedPreviewItems.length ? "internal" : "external", this._syncFormValue();
535
+ }
536
+ clearPreviewState() {
537
+ this.previewSrc = "", this.previewAlt = "", this.previewTitle = "", this.previewMeta = "", this._markedForRemoval = !1, this._previewSource = "external", this._clearSelectedFileState(), this._clearNativeInputValue(), this._syncFormValue();
538
+ }
539
+ clearExistingFileState() {
540
+ this.existingValue = "", this.previewSrc = "", this.previewAlt = "", this.previewTitle = "", this.previewMeta = "", this._markedForRemoval = !1, this._selectedPreviewItems.length || (this._previewSource = "external"), this._syncFormValue();
541
+ }
542
+ _dispatch(e, t = {}, n = !1) {
543
+ let r = new CustomEvent(e, {
544
+ detail: t,
545
+ bubbles: !0,
546
+ composed: !0,
547
+ cancelable: n
548
+ });
549
+ return this.dispatchEvent(r), r;
550
+ }
551
+ _handleFiles(e) {
552
+ let t = Array.from(e ?? []).filter((e) => this._isAcceptedFile(e));
553
+ if (!t.length) return;
554
+ let n = this.multiple ? t : [t[0]];
555
+ this._setSelectedFilesState(n, this.multiple);
556
+ let r = this._selectedPreviewItems.map((e) => e.file);
557
+ this._dispatch("file-selected", {
558
+ file: r[0],
559
+ files: r,
560
+ addedFiles: n,
561
+ existingValue: this.existingValue,
562
+ markedForRemoval: this._markedForRemoval
563
+ }), this._dispatch("change", {
564
+ file: r[0],
565
+ files: r,
566
+ addedFiles: n,
567
+ existingValue: this.existingValue,
568
+ markedForRemoval: this._markedForRemoval
569
+ });
570
+ }
571
+ _onZoneClick(e) {
572
+ this.disabled || e.composedPath().some((e) => e instanceof HTMLElement && e.getAttribute("data-role") === "choose-button") || this.openPicker();
573
+ }
574
+ _onZoneKeydown(e) {
575
+ this.disabled || (e.key === "Enter" || e.key === " " || e.key === "Spacebar") && (e.preventDefault(), this.openPicker());
576
+ }
577
+ _preventDefaultDrag(e) {
578
+ e.preventDefault(), e.stopPropagation();
579
+ }
580
+ _onDragEnter(e) {
581
+ this.disabled || (this._preventDefaultDrag(e), this._dragDepth += 1, this._isDragOver = !0);
582
+ }
583
+ _onDragOver(e) {
584
+ this.disabled || (this._preventDefaultDrag(e), this._isDragOver = !0);
585
+ }
586
+ _onDragLeave(e) {
587
+ this.disabled || (this._preventDefaultDrag(e), this._dragDepth = Math.max(0, this._dragDepth - 1), this._dragDepth || (this._isDragOver = !1));
588
+ }
589
+ _onDrop(e) {
590
+ this.disabled || (this._preventDefaultDrag(e), this._dragDepth = 0, this._isDragOver = !1, this._handleFiles(e.dataTransfer?.files ?? null));
591
+ }
592
+ _onNativeInputChange(e) {
593
+ let t = e.currentTarget;
594
+ this._handleFiles(t?.files ?? null);
595
+ }
596
+ _onChooseButtonClick(e) {
597
+ e.preventDefault(), e.stopPropagation(), this.openPicker();
598
+ }
599
+ _onReplaceButtonClick(e) {
600
+ e.preventDefault(), e.stopPropagation(), this.openPicker();
601
+ }
602
+ _onRemoveButtonClick(e) {
603
+ if (e.preventDefault(), e.stopPropagation(), !this._dispatch("clear-request", {
604
+ file: this._selectedPreviewItems[0]?.file ?? null,
605
+ files: this._selectedPreviewItems.map((e) => e.file),
606
+ existingValue: this.existingValue,
607
+ markedForRemoval: this._markedForRemoval
608
+ }, !0).defaultPrevented) {
609
+ if (this._selectedPreviewItems.length) {
610
+ this._clearSelectedFileState(), this._clearNativeInputValue(), this._previewSource = this._hasExistingPreview ? "external" : "internal", this._dispatch("change", {
611
+ file: null,
612
+ files: [],
613
+ existingValue: this.existingValue,
614
+ markedForRemoval: this._markedForRemoval
615
+ });
616
+ return;
617
+ }
618
+ if (this._hasExistingPreview) {
619
+ this._markedForRemoval = !0, this._previewSource = "external", this._syncFormValue(), this.requestUpdate(), this._dispatch("change", {
620
+ file: null,
621
+ files: [],
622
+ existingValue: this.existingValue,
623
+ markedForRemoval: !0
624
+ });
625
+ return;
626
+ }
627
+ this.clearPreviewState();
628
+ }
629
+ }
630
+ _onRemoveSelectedItemClick(e) {
631
+ if (e.preventDefault(), e.stopPropagation(), this.disabled) return;
632
+ let t = e.currentTarget?.getAttribute("data-index") || "", n = Number.parseInt(t, 10);
633
+ Number.isInteger(n) && this._removeSelectedItemAt(n);
634
+ }
635
+ _isAcceptedFile(e) {
636
+ let t = this._resolvedAccept.trim();
637
+ if (!t) return !0;
638
+ let n = e.name.toLowerCase(), r = (e.type || "").toLowerCase(), i = t.split(",").map((e) => e.trim().toLowerCase()).filter(Boolean);
639
+ return i.length ? i.some((e) => e === "*/*" ? !0 : e.endsWith("/*") ? r.startsWith(e.slice(0, -1)) : e.startsWith(".") ? n.endsWith(e) : r === e) : !0;
640
+ }
641
+ _setSelectedFilesState(e, t) {
642
+ let n = e.filter(Boolean);
643
+ if (!n.length) return;
644
+ let r = t ? this._selectedPreviewItems : [], i = n.map((e) => {
645
+ let t = this._getPreviewKindForFile(e), n = this._getFileTypeLabel(e), r = this._formatFileSize(e.size);
646
+ return {
647
+ file: e,
648
+ kind: t,
649
+ src: t === "image" ? URL.createObjectURL(e) : "",
650
+ alt: t === "image" ? e.name || "Uppladdad bild" : "",
651
+ title: e.name || (t === "image" ? "Uppladdad bild" : "Uppladdad fil"),
652
+ meta: [n, r].filter(Boolean).join(" • ")
653
+ };
654
+ });
655
+ t || this._revokeObjectUrl();
656
+ let a = this.multiple ? [...r, ...i] : [i[0]];
657
+ !this.multiple && r.length && this._revokeObjectUrlsForItems(r), this._markedForRemoval = !1, this._applySelectedPreviewItems(a);
658
+ }
659
+ _clearSelectedFileState() {
660
+ this._revokeObjectUrl(), this._applySelectedPreviewItems([]);
661
+ }
662
+ _applySelectedPreviewItems(e) {
663
+ this._selectedPreviewItems = e;
664
+ let t = e[0];
665
+ if (!t) {
666
+ this._selectedPreviewKind = "empty", this._selectedPreviewTitle = "", this._selectedPreviewMeta = "", this._selectedPreviewAlt = "", this._selectedPreviewSrc = "", this._previewSource = "internal", this._syncFormValue();
667
+ return;
668
+ }
669
+ if (e.length > 1) {
670
+ let t = e.reduce((e, t) => e + (Number.isFinite(t.file.size) ? t.file.size : 0), 0);
671
+ this._selectedPreviewKind = "multi", this._selectedPreviewTitle = `${e.length} filer valda`, this._selectedPreviewMeta = `Totalt ${this._formatFileSize(t)}`, this._selectedPreviewAlt = "", this._selectedPreviewSrc = "";
672
+ } else this._selectedPreviewKind = t.kind, this._selectedPreviewTitle = t.title, this._selectedPreviewMeta = t.meta, this._selectedPreviewAlt = t.alt, this._selectedPreviewSrc = t.src;
673
+ this._previewSource = "internal", this._syncFormValue();
674
+ }
675
+ _removeSelectedItemAt(e) {
676
+ if (e < 0 || e >= this._selectedPreviewItems.length) return;
677
+ let t = this._selectedPreviewItems[e];
678
+ t.src && URL.revokeObjectURL(t.src);
679
+ let n = this._selectedPreviewItems.filter((t, n) => n !== e);
680
+ this._applySelectedPreviewItems(n), this._dispatch("file-removed", {
681
+ file: t.file,
682
+ files: n.map((e) => e.file),
683
+ index: e,
684
+ existingValue: this.existingValue,
685
+ markedForRemoval: this._markedForRemoval
686
+ }), this._dispatch("change", {
687
+ file: n[0]?.file ?? null,
688
+ files: n.map((e) => e.file),
689
+ removedFile: t.file,
690
+ removedIndex: e,
691
+ existingValue: this.existingValue,
692
+ markedForRemoval: this._markedForRemoval
693
+ });
694
+ }
695
+ _renderSelectedImageCards() {
696
+ return !this.multiple || this.type !== "image" || this.hidePreview || !this._selectedPreviewItems.some((e) => e.kind === "image" && e.src) ? null : r`
697
+ <div class="scb-drop-zone__selected-images" aria-label="Valda bilder">
698
+ ${this._selectedPreviewItems.map((e, t) => e.kind !== "image" || !e.src ? null : r`
699
+ <article class="scb-drop-zone__selected-image-card" aria-label=${`${e.title}, ${e.meta}`}>
700
+ <img class="scb-drop-zone__selected-image" src=${e.src} alt=${e.alt || e.title} />
701
+ <span class="scb-drop-zone__selected-image-title">${e.title}</span>
702
+ <span class="scb-drop-zone__selected-image-meta">${e.meta}</span>
703
+ <scb-button
704
+ class="scb-drop-zone__selected-image-action"
705
+ data-index=${String(t)}
706
+ variant="text"
707
+ size="small"
708
+ label="Ta bort"
709
+ aria-label=${`Ta bort ${e.title}`}
710
+ @click=${this._onRemoveSelectedItemClick}
711
+ ></scb-button>
712
+ </article>
713
+ `)}
714
+ </div>
715
+ `;
716
+ }
717
+ _clearNativeInputValue() {
718
+ let e = this.renderRoot.querySelector("[data-role=\"native-input\"]");
719
+ if (e) try {
720
+ e.value = "";
721
+ } catch {}
722
+ }
723
+ _revokeObjectUrl() {
724
+ this._revokeObjectUrlsForItems(this._selectedPreviewItems);
725
+ }
726
+ _revokeObjectUrlsForItems(e) {
727
+ e.forEach((e) => {
728
+ e.src && URL.revokeObjectURL(e.src);
729
+ });
730
+ }
731
+ _getPreviewKindForFile(e) {
732
+ let t = (e.type || "").toLowerCase(), n = this._getFileExtension(e.name).toLowerCase();
733
+ return t.startsWith("image/") || [
734
+ "png",
735
+ "jpg",
736
+ "jpeg",
737
+ "webp",
738
+ "svg",
739
+ "gif",
740
+ "bmp",
741
+ "avif"
742
+ ].includes(n) ? "image" : "file";
743
+ }
744
+ _getFileExtension(e) {
745
+ return /\.([^.]+)$/.exec(e || "")?.[1] ?? "";
746
+ }
747
+ _getFileExtensionLabel(e) {
748
+ return (this._getFileExtension(e) || (this._resolvedPreviewKind === "image" ? "IMG" : "FIL")).slice(0, 6).toUpperCase();
749
+ }
750
+ _getFileTypeLabel(e) {
751
+ if (e.type) return e.type;
752
+ let t = this._getFileExtension(e.name);
753
+ return t ? t.toUpperCase() : "Okänd filtyp";
754
+ }
755
+ _formatFileSize(e) {
756
+ return !Number.isFinite(e) || e < 0 ? "" : e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${new Intl.NumberFormat("sv-SE", { maximumFractionDigits: 1 }).format(e / 1024)} kB` : `${new Intl.NumberFormat("sv-SE", { maximumFractionDigits: 1 }).format(e / (1024 * 1024))} MB`;
757
+ }
758
+ _renderPreviewMedia() {
759
+ return this._resolvedPreviewKind === "multi" ? this.multiple && this.type === "image" ? r`
760
+ <div class="scb-drop-zone__preview-placeholder">
761
+ <div class="scb-drop-zone__preview-placeholder-inner">
762
+ <span class="scb-drop-zone__preview-placeholder-label">Bild</span>
763
+ <p class="scb-drop-zone__preview-file-label">Valda bilder visas under uppladdningsytan.</p>
764
+ </div>
765
+ </div>
766
+ ` : r`
767
+ <ul class="scb-drop-zone__preview-list" aria-label="Valda filer">
768
+ ${this._selectedPreviewItems.map((e, t) => r`
769
+ <li class="scb-drop-zone__preview-list-item" aria-label=${`${e.title}, ${e.meta}`}>
770
+ ${e.kind === "image" && e.src ? r`<img class="scb-drop-zone__preview-image scb-drop-zone__preview-image--thumb" src=${e.src} alt=${e.alt || e.title} />` : r`
771
+ <span class="scb-drop-zone__preview-list-extension" aria-hidden="true">
772
+ ${this._getFileExtensionLabel(e.title)}
773
+ </span>
774
+ <span class="scb-drop-zone__sr-only">Fil</span>
775
+ `}
776
+ <span class="scb-drop-zone__preview-list-content">
777
+ <span class="scb-drop-zone__preview-list-title">${e.title}</span>
778
+ <span class="scb-drop-zone__preview-list-meta">${e.meta}</span>
779
+ </span>
780
+ <scb-button
781
+ class="scb-drop-zone__preview-list-item-action"
782
+ data-index=${String(t)}
783
+ variant="text"
784
+ size="small"
785
+ label="Ta bort"
786
+ aria-label=${`Ta bort ${e.title}`}
787
+ @click=${this._onRemoveSelectedItemClick}
788
+ ></scb-button>
789
+ </li>
790
+ `)}
791
+ </ul>
792
+ ` : this._resolvedPreviewKind === "image" && this._resolvedPreviewSrc ? r`<img class="scb-drop-zone__preview-image" src=${this._resolvedPreviewSrc} alt=${this._resolvedPreviewAlt} />` : this._hasPreview ? r`
793
+ <div class="scb-drop-zone__preview-file-card">
794
+ <div class="scb-drop-zone__preview-file-card-inner">
795
+ <span class="scb-drop-zone__preview-file-extension">${this._getFileExtensionLabel(this._resolvedPreviewTitle)}</span>
796
+ <p class="scb-drop-zone__preview-file-label">${this._previewSource === "external" ? "Befintlig fil" : "Vald fil"}</p>
797
+ </div>
798
+ </div>
799
+ ` : r`
800
+ <div class="scb-drop-zone__preview-placeholder">
801
+ <div class="scb-drop-zone__preview-placeholder-inner">
802
+ <span class="scb-drop-zone__preview-placeholder-label">${this.type === "image" ? "Bild" : "Fil"}</span>
803
+ </div>
804
+ </div>
805
+ `;
806
+ }
807
+ _renderPreview() {
808
+ if (this.hidePreview || this.multiple && this.type === "image") return null;
809
+ let e = this._hasPreview ? this._resolvedPreviewTitle : this._resolvedEmptyPreviewTitle, t = this._hasPreview ? this._resolvedPreviewMeta : this._resolvedEmptyPreviewMeta;
810
+ return r`
811
+ <div class="scb-drop-zone__preview">
812
+ <div class="scb-drop-zone__preview-media">
813
+ ${this._renderPreviewMedia()}
814
+ </div>
815
+
816
+ <div class="scb-drop-zone__preview-body">
817
+ <p class="scb-drop-zone__preview-eyebrow">${this._resolvedPreviewEyebrow}</p>
818
+ <h3 class="scb-drop-zone__preview-title">${e}</h3>
819
+ <p class="scb-drop-zone__preview-meta" aria-live="polite">${t}</p>
820
+
821
+ ${this._hasPreview ? r`
822
+ <div class="scb-drop-zone__preview-actions">
823
+ <scb-button
824
+ data-role="replace-button"
825
+ variant="outlined"
826
+ size="medium"
827
+ label=${this._resolvedReplaceButtonLabel}
828
+ @click=${this._onReplaceButtonClick}
829
+ ></scb-button>
830
+ <scb-button
831
+ data-role="remove-button"
832
+ variant="text"
833
+ size="medium"
834
+ label=${this._resolvedRemoveButtonLabel}
835
+ @click=${this._onRemoveButtonClick}
836
+ ></scb-button>
837
+ </div>
838
+ ` : null}
839
+ </div>
840
+ </div>
841
+ `;
842
+ }
843
+ render() {
844
+ let e = {
845
+ "scb-drop-zone__surface": !0,
846
+ "is-dragover": this._isDragOver
847
+ };
848
+ return r`
849
+ <div class="scb-drop-zone">
850
+ <div class="scb-drop-zone__layout ${this.hidePreview ? "" : "scb-drop-zone__layout--with-preview"}">
851
+ <div class="scb-drop-zone__main">
852
+ <div
853
+ class=${Object.keys(e).filter((t) => e[t]).join(" ")}
854
+ data-role="zone"
855
+ role="button"
856
+ tabindex=${this.disabled ? "-1" : "0"}
857
+ aria-label=${this._resolvedLabel}
858
+ @click=${this._onZoneClick}
859
+ @keydown=${this._onZoneKeydown}
860
+ @dragenter=${this._onDragEnter}
861
+ @dragover=${this._onDragOver}
862
+ @dragleave=${this._onDragLeave}
863
+ @drop=${this._onDrop}
864
+ >
865
+ <input
866
+ class="scb-drop-zone__native-input"
867
+ data-role="native-input"
868
+ type="file"
869
+ .accept=${this._resolvedAccept}
870
+ ?multiple=${this.multiple}
871
+ ?disabled=${this.disabled}
872
+ @change=${this._onNativeInputChange}
873
+ />
874
+
875
+ <div class="scb-drop-zone__inner">
876
+ <h2 class="scb-drop-zone__title">${this._resolvedLabel}</h2>
877
+ <p class="scb-drop-zone__lead">${this._resolvedSupportingText}</p>
878
+ ${this._resolvedMetaText ? r`<p class="scb-drop-zone__meta">${this._resolvedMetaText}</p>` : null}
879
+
880
+ <div class="scb-drop-zone__actions">
881
+ <scb-button
882
+ data-role="choose-button"
883
+ variant="filled"
884
+ size="medium"
885
+ label=${this._resolvedButtonLabel}
886
+ @click=${this._onChooseButtonClick}
887
+ ></scb-button>
888
+ </div>
889
+ </div>
890
+ </div>
891
+ </div>
892
+
893
+ ${this._renderPreview()}
894
+ </div>
895
+
896
+ ${this._renderSelectedImageCards()}
897
+ </div>
898
+ `;
899
+ }
900
+ };
901
+ e([a({
902
+ type: String,
903
+ reflect: !0
904
+ })], s.prototype, "type", void 0), e([a({ type: String })], s.prototype, "name", void 0), e([a({
905
+ type: Boolean,
906
+ reflect: !0
907
+ })], s.prototype, "multiple", void 0), e([a({ type: String })], s.prototype, "label", void 0), e([a({
908
+ type: String,
909
+ attribute: "supporting-text"
910
+ })], s.prototype, "supportingText", void 0), e([a({
911
+ type: String,
912
+ attribute: "meta-text"
913
+ })], s.prototype, "metaText", void 0), e([a({
914
+ type: String,
915
+ attribute: "button-label"
916
+ })], s.prototype, "buttonLabel", void 0), e([a({
917
+ type: String,
918
+ attribute: "replace-button-label"
919
+ })], s.prototype, "replaceButtonLabel", void 0), e([a({
920
+ type: String,
921
+ attribute: "remove-button-label"
922
+ })], s.prototype, "removeButtonLabel", void 0), e([a({
923
+ type: String,
924
+ attribute: "preview-eyebrow"
925
+ })], s.prototype, "previewEyebrow", void 0), e([a({
926
+ type: String,
927
+ attribute: "empty-preview-title"
928
+ })], s.prototype, "emptyPreviewTitle", void 0), e([a({
929
+ type: String,
930
+ attribute: "empty-preview-meta"
931
+ })], s.prototype, "emptyPreviewMeta", void 0), e([a({ type: String })], s.prototype, "accept", void 0), e([a({
932
+ type: Boolean,
933
+ attribute: "hide-preview",
934
+ reflect: !0
935
+ })], s.prototype, "hidePreview", void 0), e([a({
936
+ type: Boolean,
937
+ attribute: "show-existing-preview",
938
+ reflect: !0
939
+ })], s.prototype, "showExistingPreview", void 0), e([a({
940
+ type: Boolean,
941
+ reflect: !0
942
+ })], s.prototype, "disabled", void 0), e([a({
943
+ type: String,
944
+ attribute: "preview-src"
945
+ })], s.prototype, "previewSrc", void 0), e([a({
946
+ type: String,
947
+ attribute: "preview-alt"
948
+ })], s.prototype, "previewAlt", void 0), e([a({
949
+ type: String,
950
+ attribute: "preview-title"
951
+ })], s.prototype, "previewTitle", void 0), e([a({
952
+ type: String,
953
+ attribute: "preview-meta"
954
+ })], s.prototype, "previewMeta", void 0), e([a({
955
+ type: String,
956
+ attribute: "existing-value"
957
+ })], s.prototype, "existingValue", void 0), e([a({
958
+ type: String,
959
+ attribute: "existing-value-name"
960
+ })], s.prototype, "existingValueName", void 0), e([a({
961
+ type: String,
962
+ attribute: "remove-value-name"
963
+ })], s.prototype, "removeValueName", void 0), e([o()], s.prototype, "_isDragOver", void 0), e([o()], s.prototype, "_selectedPreviewKind", void 0), e([o()], s.prototype, "_selectedPreviewSrc", void 0), e([o()], s.prototype, "_selectedPreviewAlt", void 0), e([o()], s.prototype, "_selectedPreviewTitle", void 0), e([o()], s.prototype, "_selectedPreviewMeta", void 0), e([o()], s.prototype, "_selectedPreviewItems", void 0), e([o()], s.prototype, "_markedForRemoval", void 0), s = e([i("scb-drop-zone")], s);
964
+ //#endregion
965
+ export { s as ScbDropZone };