snice 3.1.0 → 3.2.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 (217) hide show
  1. package/README.md +90 -41
  2. package/dist/components/accordion/snice-accordion-item.js +1 -1
  3. package/dist/components/accordion/snice-accordion-item.js.map +1 -1
  4. package/dist/components/accordion/snice-accordion.js +1 -1
  5. package/dist/components/accordion/snice-accordion.js.map +1 -1
  6. package/dist/components/alert/snice-alert.js +1 -1
  7. package/dist/components/alert/snice-alert.js.map +1 -1
  8. package/dist/components/avatar/snice-avatar.js +1 -1
  9. package/dist/components/avatar/snice-avatar.js.map +1 -1
  10. package/dist/components/badge/snice-badge.js +1 -1
  11. package/dist/components/badge/snice-badge.js.map +1 -1
  12. package/dist/components/banner/snice-banner.d.ts +22 -0
  13. package/dist/components/banner/snice-banner.js +180 -0
  14. package/dist/components/banner/snice-banner.js.map +1 -0
  15. package/dist/components/banner/snice-banner.types.d.ts +14 -0
  16. package/dist/components/breadcrumbs/snice-breadcrumbs.js +1 -1
  17. package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -1
  18. package/dist/components/button/snice-button.js +1 -1
  19. package/dist/components/button/snice-button.js.map +1 -1
  20. package/dist/components/card/snice-card.js +1 -1
  21. package/dist/components/card/snice-card.js.map +1 -1
  22. package/dist/components/checkbox/snice-checkbox.js +1 -1
  23. package/dist/components/checkbox/snice-checkbox.js.map +1 -1
  24. package/dist/components/chip/snice-chip.js +1 -1
  25. package/dist/components/chip/snice-chip.js.map +1 -1
  26. package/dist/components/color-display/snice-color-display.d.ts +14 -0
  27. package/dist/components/color-display/snice-color-display.js +151 -0
  28. package/dist/components/color-display/snice-color-display.js.map +1 -0
  29. package/dist/components/color-display/snice-color-display.types.d.ts +10 -0
  30. package/dist/components/color-picker/snice-color-picker.d.ts +50 -0
  31. package/dist/components/color-picker/snice-color-picker.js +489 -0
  32. package/dist/components/color-picker/snice-color-picker.js.map +1 -0
  33. package/dist/components/color-picker/snice-color-picker.types.d.ts +19 -0
  34. package/dist/components/date-picker/snice-date-picker.js +1 -1
  35. package/dist/components/date-picker/snice-date-picker.js.map +1 -1
  36. package/dist/components/divider/snice-divider.js +1 -1
  37. package/dist/components/divider/snice-divider.js.map +1 -1
  38. package/dist/components/drawer/snice-drawer.js +1 -1
  39. package/dist/components/drawer/snice-drawer.js.map +1 -1
  40. package/dist/components/empty-state/snice-empty-state.d.ts +13 -0
  41. package/dist/components/empty-state/snice-empty-state.js +121 -0
  42. package/dist/components/empty-state/snice-empty-state.js.map +1 -0
  43. package/dist/components/empty-state/snice-empty-state.types.d.ts +9 -0
  44. package/dist/components/file-upload/snice-file-upload.d.ts +45 -0
  45. package/dist/components/file-upload/snice-file-upload.js +394 -0
  46. package/dist/components/file-upload/snice-file-upload.js.map +1 -0
  47. package/dist/components/file-upload/snice-file-upload.types.d.ts +22 -0
  48. package/dist/components/image/snice-image.d.ts +22 -0
  49. package/dist/components/image/snice-image.js +201 -0
  50. package/dist/components/image/snice-image.js.map +1 -0
  51. package/dist/components/image/snice-image.types.d.ts +17 -0
  52. package/dist/components/input/snice-input.js +1 -1
  53. package/dist/components/input/snice-input.js.map +1 -1
  54. package/dist/components/kpi/snice-kpi.d.ts +16 -0
  55. package/dist/components/kpi/snice-kpi.js +162 -0
  56. package/dist/components/kpi/snice-kpi.js.map +1 -0
  57. package/dist/components/kpi/snice-kpi.types.d.ts +12 -0
  58. package/dist/components/layout/snice-layout-blog.js +1 -1
  59. package/dist/components/layout/snice-layout-blog.js.map +1 -1
  60. package/dist/components/layout/snice-layout-card.js +1 -1
  61. package/dist/components/layout/snice-layout-card.js.map +1 -1
  62. package/dist/components/layout/snice-layout-centered.js +1 -1
  63. package/dist/components/layout/snice-layout-centered.js.map +1 -1
  64. package/dist/components/layout/snice-layout-dashboard.js +1 -1
  65. package/dist/components/layout/snice-layout-dashboard.js.map +1 -1
  66. package/dist/components/layout/snice-layout-fullscreen.js +1 -1
  67. package/dist/components/layout/snice-layout-fullscreen.js.map +1 -1
  68. package/dist/components/layout/snice-layout-landing.js +1 -1
  69. package/dist/components/layout/snice-layout-landing.js.map +1 -1
  70. package/dist/components/layout/snice-layout-minimal.js +1 -1
  71. package/dist/components/layout/snice-layout-minimal.js.map +1 -1
  72. package/dist/components/layout/snice-layout-sidebar.js +1 -1
  73. package/dist/components/layout/snice-layout-sidebar.js.map +1 -1
  74. package/dist/components/layout/snice-layout-split.js +1 -1
  75. package/dist/components/layout/snice-layout-split.js.map +1 -1
  76. package/dist/components/layout/snice-layout.js +1 -1
  77. package/dist/components/layout/snice-layout.js.map +1 -1
  78. package/dist/components/link/snice-link.d.ts +13 -0
  79. package/dist/components/link/snice-link.js +137 -0
  80. package/dist/components/link/snice-link.js.map +1 -0
  81. package/dist/components/link/snice-link.types.d.ts +11 -0
  82. package/dist/components/login/snice-login.js +1 -1
  83. package/dist/components/login/snice-login.js.map +1 -1
  84. package/dist/components/modal/snice-modal.js +1 -1
  85. package/dist/components/modal/snice-modal.js.map +1 -1
  86. package/dist/components/nav/snice-nav.js +1 -1
  87. package/dist/components/nav/snice-nav.js.map +1 -1
  88. package/dist/components/progress/snice-progress.js +1 -1
  89. package/dist/components/progress/snice-progress.js.map +1 -1
  90. package/dist/components/radio/snice-radio.js +1 -1
  91. package/dist/components/radio/snice-radio.js.map +1 -1
  92. package/dist/components/select/snice-select.js +1 -1
  93. package/dist/components/select/snice-select.js.map +1 -1
  94. package/dist/components/skeleton/snice-skeleton.js +1 -1
  95. package/dist/components/skeleton/snice-skeleton.js.map +1 -1
  96. package/dist/components/slider/snice-slider.d.ts +53 -0
  97. package/dist/components/slider/snice-slider.js +479 -0
  98. package/dist/components/slider/snice-slider.js.map +1 -0
  99. package/dist/components/slider/snice-slider.types.d.ts +26 -0
  100. package/dist/components/snice-cell-C0slgOpe.js +4 -0
  101. package/dist/components/snice-cell-C0slgOpe.js.map +1 -0
  102. package/dist/components/sparkline/snice-sparkline.d.ts +21 -0
  103. package/dist/components/sparkline/snice-sparkline.js +228 -0
  104. package/dist/components/sparkline/snice-sparkline.js.map +1 -0
  105. package/dist/components/sparkline/snice-sparkline.types.d.ts +16 -0
  106. package/dist/components/spinner/snice-spinner.d.ts +10 -0
  107. package/dist/components/spinner/snice-spinner.js +109 -0
  108. package/dist/components/spinner/snice-spinner.js.map +1 -0
  109. package/dist/components/spinner/snice-spinner.types.d.ts +8 -0
  110. package/dist/components/stepper/snice-stepper-panel.d.ts +8 -0
  111. package/dist/components/stepper/snice-stepper-panel.js +70 -0
  112. package/dist/components/stepper/snice-stepper-panel.js.map +1 -0
  113. package/dist/components/stepper/snice-stepper-panel.types.d.ts +4 -0
  114. package/dist/components/stepper/snice-stepper.d.ts +15 -0
  115. package/dist/components/stepper/snice-stepper.js +163 -0
  116. package/dist/components/stepper/snice-stepper.js.map +1 -0
  117. package/dist/components/stepper/snice-stepper.types.d.ts +13 -0
  118. package/dist/components/switch/snice-switch.js +1 -1
  119. package/dist/components/switch/snice-switch.js.map +1 -1
  120. package/dist/components/table/snice-cell-actions.js +1 -1
  121. package/dist/components/table/snice-cell-actions.js.map +1 -1
  122. package/dist/components/table/snice-cell-boolean.js +1 -1
  123. package/dist/components/table/snice-cell-color.js +1 -1
  124. package/dist/components/table/snice-cell-color.js.map +1 -1
  125. package/dist/components/table/snice-cell-currency.js +1 -1
  126. package/dist/components/table/snice-cell-date.js +1 -1
  127. package/dist/components/table/snice-cell-duration.js +1 -1
  128. package/dist/components/table/snice-cell-email.js +1 -1
  129. package/dist/components/table/snice-cell-email.js.map +1 -1
  130. package/dist/components/table/snice-cell-filesize.js +1 -1
  131. package/dist/components/table/snice-cell-image.js +1 -1
  132. package/dist/components/table/snice-cell-image.js.map +1 -1
  133. package/dist/components/table/snice-cell-json.js +1 -1
  134. package/dist/components/table/snice-cell-json.js.map +1 -1
  135. package/dist/components/table/snice-cell-link.js +1 -1
  136. package/dist/components/table/snice-cell-link.js.map +1 -1
  137. package/dist/components/table/snice-cell-location.js +1 -1
  138. package/dist/components/table/snice-cell-location.js.map +1 -1
  139. package/dist/components/table/snice-cell-number.js +1 -1
  140. package/dist/components/table/snice-cell-percentage.js +1 -1
  141. package/dist/components/table/snice-cell-percentage.js.map +1 -1
  142. package/dist/components/table/snice-cell-phone.js +1 -1
  143. package/dist/components/table/snice-cell-phone.js.map +1 -1
  144. package/dist/components/table/snice-cell-progress.js +1 -1
  145. package/dist/components/table/snice-cell-rating.js +1 -1
  146. package/dist/components/table/snice-cell-sparkline.js +1 -1
  147. package/dist/components/table/snice-cell-status.js +1 -1
  148. package/dist/components/table/snice-cell-status.js.map +1 -1
  149. package/dist/components/table/snice-cell-tag.js +1 -1
  150. package/dist/components/table/snice-cell-tag.js.map +1 -1
  151. package/dist/components/table/snice-cell-text.js +1 -1
  152. package/dist/components/table/snice-cell.js +1 -1
  153. package/dist/components/table/snice-header.js +1 -1
  154. package/dist/components/table/snice-header.js.map +1 -1
  155. package/dist/components/table/snice-row.js +2 -2
  156. package/dist/components/table/snice-row.js.map +1 -1
  157. package/dist/components/table/snice-table.js +1 -1
  158. package/dist/components/tabs/snice-tab-panel.js +1 -1
  159. package/dist/components/tabs/snice-tab-panel.js.map +1 -1
  160. package/dist/components/tabs/snice-tab.js +1 -1
  161. package/dist/components/tabs/snice-tab.js.map +1 -1
  162. package/dist/components/tabs/snice-tabs.js +1 -1
  163. package/dist/components/tabs/snice-tabs.js.map +1 -1
  164. package/dist/components/textarea/snice-textarea.d.ts +52 -0
  165. package/dist/components/textarea/snice-textarea.js +407 -0
  166. package/dist/components/textarea/snice-textarea.js.map +1 -0
  167. package/dist/components/textarea/snice-textarea.types.d.ts +30 -0
  168. package/dist/components/timeline/snice-timeline.d.ts +11 -0
  169. package/dist/components/timeline/snice-timeline.js +112 -0
  170. package/dist/components/timeline/snice-timeline.js.map +1 -0
  171. package/dist/components/timeline/snice-timeline.types.d.ts +16 -0
  172. package/dist/components/tooltip/snice-tooltip.js +2 -2
  173. package/dist/components/tooltip/snice-tooltip.js.map +1 -1
  174. package/dist/index.cjs +125 -158
  175. package/dist/index.cjs.map +1 -1
  176. package/dist/index.esm.js +125 -158
  177. package/dist/index.esm.js.map +1 -1
  178. package/dist/index.iife.js +125 -158
  179. package/dist/index.iife.js.map +1 -1
  180. package/dist/parts.d.ts +13 -16
  181. package/dist/symbols.cjs +1 -1
  182. package/dist/symbols.esm.js +1 -1
  183. package/dist/template.d.ts +0 -1
  184. package/dist/transitions.cjs +1 -1
  185. package/dist/transitions.esm.js +1 -1
  186. package/docs/ai/README.md +10 -1
  187. package/docs/ai/components/banner.md +84 -0
  188. package/docs/ai/components/color-display.md +48 -0
  189. package/docs/ai/components/color-picker.md +75 -0
  190. package/docs/ai/components/empty-state.md +72 -0
  191. package/docs/ai/components/file-upload.md +93 -0
  192. package/docs/ai/components/image.md +60 -0
  193. package/docs/ai/components/kpi.md +158 -0
  194. package/docs/ai/components/link.md +77 -0
  195. package/docs/ai/components/slider.md +87 -0
  196. package/docs/ai/components/sparkline.md +168 -0
  197. package/docs/ai/components/spinner.md +47 -0
  198. package/docs/ai/components/stepper.md +216 -0
  199. package/docs/ai/components/textarea.md +87 -0
  200. package/docs/ai/components/timeline.md +77 -0
  201. package/docs/components/banner.md +106 -0
  202. package/docs/components/color-display.md +96 -0
  203. package/docs/components/color-picker.md +81 -0
  204. package/docs/components/empty-state.md +79 -0
  205. package/docs/components/file-upload.md +263 -0
  206. package/docs/components/image.md +110 -0
  207. package/docs/components/kpi.md +251 -0
  208. package/docs/components/link.md +229 -0
  209. package/docs/components/slider.md +297 -0
  210. package/docs/components/sparkline.md +293 -0
  211. package/docs/components/spinner.md +63 -0
  212. package/docs/components/stepper.md +410 -0
  213. package/docs/components/textarea.md +235 -0
  214. package/docs/components/timeline.md +192 -0
  215. package/package.json +2 -1
  216. package/dist/components/snice-cell-BLFVdxPp.js +0 -4
  217. package/dist/components/snice-cell-BLFVdxPp.js.map +0 -1
@@ -0,0 +1,121 @@
1
+ import { __esDecorate, __runInitializers } from 'tslib';
2
+ import { element, property, render, styles, dispatch, html, css } from 'snice';
3
+
4
+ var cssContent = ":host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style paint}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--snice-spacing-2xl,3rem) var(--snice-spacing-xl,2rem);color:var(--snice-color-text-secondary,rgb(82 82 82))}.empty-state--small{padding:var(--snice-spacing-xl,2rem) var(--snice-spacing-lg,1.5rem)}.empty-state--medium{padding:var(--snice-spacing-2xl,3rem) var(--snice-spacing-xl,2rem)}.empty-state--large{padding:var(--snice-spacing-3xl,4rem) var(--snice-spacing-2xl,2.5rem)}.empty-state__icon{font-size:var(--snice-font-size-4xl, 4rem);margin-bottom:var(--snice-spacing-lg,1.5rem);opacity:.5;line-height:1}.empty-state--small .empty-state__icon{font-size:var(--snice-font-size-3xl, 3rem);margin-bottom:var(--snice-spacing-md,1rem)}.empty-state--large .empty-state__icon{font-size:var(--snice-font-size-5xl, 5rem);margin-bottom:var(--snice-spacing-xl,2rem)}.empty-state__title{font-size:var(--snice-font-size-xl, 1.25rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text,rgb(23 23 23));margin:0 0 var(--snice-spacing-xs,.5rem) 0}.empty-state--small .empty-state__title{font-size:var(--snice-font-size-lg, 1.125rem);margin-bottom:var(--snice-spacing-2xs,.375rem)}.empty-state--large .empty-state__title{font-size:var(--snice-font-size-2xl, 1.5rem);margin-bottom:var(--snice-spacing-sm,.75rem)}.empty-state__description{font-size:var(--snice-font-size-sm, .875rem);color:var(--snice-color-text-secondary,rgb(82 82 82));margin:0 0 var(--snice-spacing-lg,1.5rem) 0;max-width:32rem;line-height:var(--snice-line-height-normal, 1.5)}.empty-state--small .empty-state__description{font-size:var(--snice-font-size-xs, .8125rem);margin-bottom:var(--snice-spacing-md,1rem)}.empty-state--large .empty-state__description{font-size:var(--snice-font-size-md, 1rem);margin-bottom:var(--snice-spacing-xl,2rem)}.empty-state__action{display:inline-flex;align-items:center;justify-content:center;padding:var(--snice-spacing-xs,.5rem) var(--snice-spacing-md,1rem);font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);color:var(--snice-color-text-inverse,rgb(250 250 250));background:var(--snice-color-primary,rgb(37 99 235));border:none;border-radius:var(--snice-border-radius-md,.375rem);text-decoration:none;cursor:pointer;transition:background var(--snice-transition-fast, 150ms)}.empty-state__action:hover{background:var(--snice-color-primary-dark,rgb(29 78 216))}.empty-state--small .empty-state__action{padding:var(--snice-spacing-2xs,.375rem) var(--snice-spacing-sm,.75rem);font-size:var(--snice-font-size-xs, .8125rem)}.empty-state--large .empty-state__action{padding:var(--snice-spacing-sm,.625rem) var(--snice-spacing-lg,1.25rem);font-size:var(--snice-font-size-md, 1rem)}::slotted(*){margin-top:var(--snice-spacing-md,1rem)}";
5
+
6
+ let SniceEmptyState = (() => {
7
+ let _classDecorators = [element('snice-empty-state')];
8
+ let _classDescriptor;
9
+ let _classExtraInitializers = [];
10
+ let _classThis;
11
+ let _classSuper = HTMLElement;
12
+ let _instanceExtraInitializers = [];
13
+ let _size_decorators;
14
+ let _size_initializers = [];
15
+ let _size_extraInitializers = [];
16
+ let _icon_decorators;
17
+ let _icon_initializers = [];
18
+ let _icon_extraInitializers = [];
19
+ let _title_decorators;
20
+ let _title_initializers = [];
21
+ let _title_extraInitializers = [];
22
+ let _description_decorators;
23
+ let _description_initializers = [];
24
+ let _description_extraInitializers = [];
25
+ let _actionText_decorators;
26
+ let _actionText_initializers = [];
27
+ let _actionText_extraInitializers = [];
28
+ let _actionHref_decorators;
29
+ let _actionHref_initializers = [];
30
+ let _actionHref_extraInitializers = [];
31
+ let _renderContent_decorators;
32
+ let _componentStyles_decorators;
33
+ let _dispatchActionEvent_decorators;
34
+ (class extends _classSuper {
35
+ static { _classThis = this; }
36
+ static {
37
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
38
+ _size_decorators = [property({})];
39
+ _icon_decorators = [property({})];
40
+ _title_decorators = [property({})];
41
+ _description_decorators = [property({})];
42
+ _actionText_decorators = [property({ attribute: 'action-text', })];
43
+ _actionHref_decorators = [property({ attribute: 'action-href', })];
44
+ _renderContent_decorators = [render()];
45
+ _componentStyles_decorators = [styles()];
46
+ _dispatchActionEvent_decorators = [dispatch('@snice/empty-state-action', { bubbles: true, composed: true })];
47
+ __esDecorate(this, null, _renderContent_decorators, { kind: "method", name: "renderContent", static: false, private: false, access: { has: obj => "renderContent" in obj, get: obj => obj.renderContent }, metadata: _metadata }, null, _instanceExtraInitializers);
48
+ __esDecorate(this, null, _componentStyles_decorators, { kind: "method", name: "componentStyles", static: false, private: false, access: { has: obj => "componentStyles" in obj, get: obj => obj.componentStyles }, metadata: _metadata }, null, _instanceExtraInitializers);
49
+ __esDecorate(this, null, _dispatchActionEvent_decorators, { kind: "method", name: "dispatchActionEvent", static: false, private: false, access: { has: obj => "dispatchActionEvent" in obj, get: obj => obj.dispatchActionEvent }, metadata: _metadata }, null, _instanceExtraInitializers);
50
+ __esDecorate(null, null, _size_decorators, { kind: "field", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
51
+ __esDecorate(null, null, _icon_decorators, { kind: "field", name: "icon", static: false, private: false, access: { has: obj => "icon" in obj, get: obj => obj.icon, set: (obj, value) => { obj.icon = value; } }, metadata: _metadata }, _icon_initializers, _icon_extraInitializers);
52
+ __esDecorate(null, null, _title_decorators, { kind: "field", name: "title", static: false, private: false, access: { has: obj => "title" in obj, get: obj => obj.title, set: (obj, value) => { obj.title = value; } }, metadata: _metadata }, _title_initializers, _title_extraInitializers);
53
+ __esDecorate(null, null, _description_decorators, { kind: "field", name: "description", static: false, private: false, access: { has: obj => "description" in obj, get: obj => obj.description, set: (obj, value) => { obj.description = value; } }, metadata: _metadata }, _description_initializers, _description_extraInitializers);
54
+ __esDecorate(null, null, _actionText_decorators, { kind: "field", name: "actionText", static: false, private: false, access: { has: obj => "actionText" in obj, get: obj => obj.actionText, set: (obj, value) => { obj.actionText = value; } }, metadata: _metadata }, _actionText_initializers, _actionText_extraInitializers);
55
+ __esDecorate(null, null, _actionHref_decorators, { kind: "field", name: "actionHref", static: false, private: false, access: { has: obj => "actionHref" in obj, get: obj => obj.actionHref, set: (obj, value) => { obj.actionHref = value; } }, metadata: _metadata }, _actionHref_initializers, _actionHref_extraInitializers);
56
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
57
+ _classThis = _classDescriptor.value;
58
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
59
+ __runInitializers(_classThis, _classExtraInitializers);
60
+ }
61
+ renderContent() {
62
+ const emptyStateClasses = ['empty-state', `empty-state--${this.size}`].filter(Boolean).join(' ');
63
+ return html /*html*/ `
64
+ <div class="${emptyStateClasses}" part="container">
65
+ <div class="empty-state__icon" part="icon">${this.icon}</div>
66
+ <h3 class="empty-state__title" part="title">${this.title}</h3>
67
+ <if ${this.description}>
68
+ <p class="empty-state__description" part="description">${this.description}</p>
69
+ </if>
70
+ <if ${this.actionText}>
71
+ <case ${this.actionHref ? 'link' : 'button'}>
72
+ <when value="link">
73
+ <a
74
+ href="${this.actionHref}"
75
+ class="empty-state__action"
76
+ part="action"
77
+ @click=${this.handleActionClick}
78
+ >${this.actionText}</a>
79
+ </when>
80
+ <when value="button">
81
+ <button
82
+ class="empty-state__action"
83
+ part="action"
84
+ type="button"
85
+ @click=${this.handleActionClick}
86
+ >${this.actionText}</button>
87
+ </when>
88
+ </case>
89
+ </if>
90
+ <slot></slot>
91
+ </div>
92
+ `;
93
+ }
94
+ componentStyles() {
95
+ return css /*css*/ `${cssContent}`;
96
+ }
97
+ handleActionClick(e) {
98
+ if (!this.actionHref) {
99
+ e.preventDefault();
100
+ }
101
+ this.dispatchActionEvent();
102
+ }
103
+ dispatchActionEvent() {
104
+ return { emptyState: this };
105
+ }
106
+ constructor() {
107
+ super(...arguments);
108
+ this.size = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _size_initializers, 'medium'));
109
+ this.icon = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _icon_initializers, '📭'));
110
+ this.title = (__runInitializers(this, _icon_extraInitializers), __runInitializers(this, _title_initializers, 'No data'));
111
+ this.description = (__runInitializers(this, _title_extraInitializers), __runInitializers(this, _description_initializers, ''));
112
+ this.actionText = (__runInitializers(this, _description_extraInitializers), __runInitializers(this, _actionText_initializers, ''));
113
+ this.actionHref = (__runInitializers(this, _actionText_extraInitializers), __runInitializers(this, _actionHref_initializers, ''));
114
+ __runInitializers(this, _actionHref_extraInitializers);
115
+ }
116
+ });
117
+ return _classThis;
118
+ })();
119
+
120
+ export { SniceEmptyState };
121
+ //# sourceMappingURL=snice-empty-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snice-empty-state.js","sources":["../../../components/empty-state/snice-empty-state.css?inline","../../../../components/empty-state/snice-empty-state.ts"],"sourcesContent":["export default \":host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style paint}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--snice-spacing-2xl,3rem) var(--snice-spacing-xl,2rem);color:var(--snice-color-text-secondary,rgb(82 82 82))}.empty-state--small{padding:var(--snice-spacing-xl,2rem) var(--snice-spacing-lg,1.5rem)}.empty-state--medium{padding:var(--snice-spacing-2xl,3rem) var(--snice-spacing-xl,2rem)}.empty-state--large{padding:var(--snice-spacing-3xl,4rem) var(--snice-spacing-2xl,2.5rem)}.empty-state__icon{font-size:var(--snice-font-size-4xl, 4rem);margin-bottom:var(--snice-spacing-lg,1.5rem);opacity:.5;line-height:1}.empty-state--small .empty-state__icon{font-size:var(--snice-font-size-3xl, 3rem);margin-bottom:var(--snice-spacing-md,1rem)}.empty-state--large .empty-state__icon{font-size:var(--snice-font-size-5xl, 5rem);margin-bottom:var(--snice-spacing-xl,2rem)}.empty-state__title{font-size:var(--snice-font-size-xl, 1.25rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text,rgb(23 23 23));margin:0 0 var(--snice-spacing-xs,.5rem) 0}.empty-state--small .empty-state__title{font-size:var(--snice-font-size-lg, 1.125rem);margin-bottom:var(--snice-spacing-2xs,.375rem)}.empty-state--large .empty-state__title{font-size:var(--snice-font-size-2xl, 1.5rem);margin-bottom:var(--snice-spacing-sm,.75rem)}.empty-state__description{font-size:var(--snice-font-size-sm, .875rem);color:var(--snice-color-text-secondary,rgb(82 82 82));margin:0 0 var(--snice-spacing-lg,1.5rem) 0;max-width:32rem;line-height:var(--snice-line-height-normal, 1.5)}.empty-state--small .empty-state__description{font-size:var(--snice-font-size-xs, .8125rem);margin-bottom:var(--snice-spacing-md,1rem)}.empty-state--large .empty-state__description{font-size:var(--snice-font-size-md, 1rem);margin-bottom:var(--snice-spacing-xl,2rem)}.empty-state__action{display:inline-flex;align-items:center;justify-content:center;padding:var(--snice-spacing-xs,.5rem) var(--snice-spacing-md,1rem);font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);color:var(--snice-color-text-inverse,rgb(250 250 250));background:var(--snice-color-primary,rgb(37 99 235));border:none;border-radius:var(--snice-border-radius-md,.375rem);text-decoration:none;cursor:pointer;transition:background var(--snice-transition-fast, 150ms)}.empty-state__action:hover{background:var(--snice-color-primary-dark,rgb(29 78 216))}.empty-state--small .empty-state__action{padding:var(--snice-spacing-2xs,.375rem) var(--snice-spacing-sm,.75rem);font-size:var(--snice-font-size-xs, .8125rem)}.empty-state--large .empty-state__action{padding:var(--snice-spacing-sm,.625rem) var(--snice-spacing-lg,1.25rem);font-size:var(--snice-font-size-md, 1rem)}::slotted(*){margin-top:var(--snice-spacing-md,1rem)}\";",null],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type EmptyStateSize = 'small' | 'medium' | 'large';
2
+ export interface SniceEmptyStateElement extends HTMLElement {
3
+ size: EmptyStateSize;
4
+ icon: string;
5
+ title: string;
6
+ description: string;
7
+ actionText: string;
8
+ actionHref: string;
9
+ }
@@ -0,0 +1,45 @@
1
+ import type { FileUploadSize, FileUploadVariant, SniceFileUploadElement } from './snice-file-upload.types';
2
+ export declare class SniceFileUpload extends HTMLElement implements SniceFileUploadElement {
3
+ internals: ElementInternals;
4
+ constructor();
5
+ size: FileUploadSize;
6
+ variant: FileUploadVariant;
7
+ accept: string;
8
+ multiple: boolean;
9
+ disabled: boolean;
10
+ required: boolean;
11
+ invalid: boolean;
12
+ label: string;
13
+ helperText: string;
14
+ errorText: string;
15
+ maxSize: number;
16
+ maxFiles: number;
17
+ name: string;
18
+ dragDrop: boolean;
19
+ showPreview: boolean;
20
+ input?: HTMLInputElement;
21
+ uploadArea?: HTMLElement;
22
+ private isDragOver;
23
+ private selectedFiles;
24
+ get files(): FileList | null;
25
+ renderContent(): import("snice").TemplateResult;
26
+ private renderFileItem;
27
+ componentStyles(): import("snice").CSSResult;
28
+ init(): void;
29
+ private handleAreaClick;
30
+ private handleButtonClick;
31
+ private handleDragOver;
32
+ private handleDragLeave;
33
+ private handleDrop;
34
+ private handleFileChange;
35
+ private processFiles;
36
+ private handleRemoveFile;
37
+ private formatFileSize;
38
+ private updateFormValue;
39
+ private requestUpdate;
40
+ handleDisabledChange(): void;
41
+ private dispatchChangeEvent;
42
+ private dispatchErrorEvent;
43
+ clear(): void;
44
+ removeFile(index: number): void;
45
+ }
@@ -0,0 +1,394 @@
1
+ import { __esDecorate, __runInitializers } from 'tslib';
2
+ import { element, property, query, render, styles, ready, watch, dispatch, html, css } from 'snice';
3
+
4
+ var cssContent = ":host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style paint}.file-upload-wrapper{display:flex;flex-direction:column;gap:var(--snice-spacing-xs,.5rem)}.label{font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);color:var(--snice-color-text,rgb(23 23 23));margin-bottom:var(--snice-spacing-2xs,.25rem)}.label--required::after{content:' *';color:var(--snice-color-danger,rgb(220 38 38))}.upload-area{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--snice-spacing-sm,.75rem);padding:var(--snice-spacing-xl,2rem);border:2px dashed var(--snice-color-border,rgb(226 226 226));border-radius:var(--snice-border-radius-md,.375rem);background:var(--snice-color-background,rgb(255 255 255));cursor:pointer;transition:all var(--snice-transition-fast, 150ms);text-align:center}.upload-area:hover:not(.upload-area--disabled){border-color:var(--snice-color-primary,rgb(37 99 235));background:var(--snice-color-background-hover,rgb(249 250 251))}.upload-area--drag-over{border-color:var(--snice-color-primary,rgb(37 99 235));background:var(--snice-color-primary-alpha,rgb(59 130 246 / .05))}.upload-area--disabled{opacity:.5;cursor:not-allowed}.upload-area--filled{background:var(--snice-color-background-secondary,rgb(243 244 246));border-style:solid}.upload-area--small{padding:var(--snice-spacing-md,1rem)}.upload-area--medium{padding:var(--snice-spacing-xl,2rem)}.upload-area--large{padding:var(--snice-spacing-2xl,3rem)}.upload-area--invalid{border-color:var(--snice-color-danger,rgb(220 38 38))}.upload-icon{font-size:var(--snice-font-size-3xl, 3rem);color:var(--snice-color-text-tertiary,rgb(115 115 115))}.upload-icon--small{font-size:var(--snice-font-size-2xl, 2rem)}.upload-icon--large{font-size:var(--snice-font-size-4xl, 4rem)}.upload-text{font-size:var(--snice-font-size-sm, .875rem);color:var(--snice-color-text-secondary,rgb(82 82 82))}.upload-button{padding:var(--snice-spacing-xs,.5rem) var(--snice-spacing-md,1rem);background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250));border:none;border-radius:var(--snice-border-radius-md,.375rem);font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);cursor:pointer;transition:background var(--snice-transition-fast, 150ms)}.upload-button:hover{background:var(--snice-color-primary-dark,rgb(29 78 216))}.upload-button--small{padding:var(--snice-spacing-2xs,.375rem) var(--snice-spacing-sm,.75rem);font-size:var(--snice-font-size-xs, .75rem)}.upload-button--large{padding:var(--snice-spacing-sm,.625rem) var(--snice-spacing-lg,1.25rem);font-size:var(--snice-font-size-md, 1rem)}.file-input{position:absolute;opacity:0;pointer-events:none}.file-list{display:flex;flex-direction:column;gap:var(--snice-spacing-xs,.5rem);margin-top:var(--snice-spacing-md,1rem)}.file-item{display:flex;align-items:center;gap:var(--snice-spacing-sm,.75rem);padding:var(--snice-spacing-sm,.75rem);background:var(--snice-color-background-secondary,rgb(243 244 246));border-radius:var(--snice-border-radius-md,.375rem);border:1px solid var(--snice-color-border,rgb(226 226 226))}.file-preview{width:40px;height:40px;border-radius:var(--snice-border-radius-sm,.25rem);object-fit:cover;background:var(--snice-color-background,rgb(255 255 255))}.file-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:var(--snice-font-size-lg, 1.5rem);background:var(--snice-color-background,rgb(255 255 255));border-radius:var(--snice-border-radius-sm,.25rem);border:1px solid var(--snice-color-border,rgb(226 226 226))}.file-info{flex:1;min-width:0}.file-name{font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);color:var(--snice-color-text,rgb(23 23 23));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size{font-size:var(--snice-font-size-xs, .75rem);color:var(--snice-color-text-tertiary,rgb(115 115 115))}.file-remove{padding:var(--snice-spacing-2xs,.25rem);background:0 0;border:none;color:var(--snice-color-text-tertiary,rgb(115 115 115));cursor:pointer;border-radius:var(--snice-border-radius-sm,.25rem);transition:all var(--snice-transition-fast, 150ms)}.file-remove:hover{background:var(--snice-color-background-hover,rgb(229 231 235));color:var(--snice-color-danger,rgb(220 38 38))}.error-text,.helper-text{font-size:var(--snice-font-size-xs, .75rem);margin-top:var(--snice-spacing-2xs,.25rem)}.helper-text{color:var(--snice-color-text-secondary,rgb(82 82 82))}.error-text{color:var(--snice-color-danger,rgb(220 38 38))}";
5
+
6
+ let SniceFileUpload = (() => {
7
+ let _classDecorators = [element('snice-file-upload', { formAssociated: true })];
8
+ let _classDescriptor;
9
+ let _classExtraInitializers = [];
10
+ let _classThis;
11
+ let _classSuper = HTMLElement;
12
+ let _instanceExtraInitializers = [];
13
+ let _size_decorators;
14
+ let _size_initializers = [];
15
+ let _size_extraInitializers = [];
16
+ let _variant_decorators;
17
+ let _variant_initializers = [];
18
+ let _variant_extraInitializers = [];
19
+ let _accept_decorators;
20
+ let _accept_initializers = [];
21
+ let _accept_extraInitializers = [];
22
+ let _multiple_decorators;
23
+ let _multiple_initializers = [];
24
+ let _multiple_extraInitializers = [];
25
+ let _disabled_decorators;
26
+ let _disabled_initializers = [];
27
+ let _disabled_extraInitializers = [];
28
+ let _required_decorators;
29
+ let _required_initializers = [];
30
+ let _required_extraInitializers = [];
31
+ let _invalid_decorators;
32
+ let _invalid_initializers = [];
33
+ let _invalid_extraInitializers = [];
34
+ let _label_decorators;
35
+ let _label_initializers = [];
36
+ let _label_extraInitializers = [];
37
+ let _helperText_decorators;
38
+ let _helperText_initializers = [];
39
+ let _helperText_extraInitializers = [];
40
+ let _errorText_decorators;
41
+ let _errorText_initializers = [];
42
+ let _errorText_extraInitializers = [];
43
+ let _maxSize_decorators;
44
+ let _maxSize_initializers = [];
45
+ let _maxSize_extraInitializers = [];
46
+ let _maxFiles_decorators;
47
+ let _maxFiles_initializers = [];
48
+ let _maxFiles_extraInitializers = [];
49
+ let _name_decorators;
50
+ let _name_initializers = [];
51
+ let _name_extraInitializers = [];
52
+ let _dragDrop_decorators;
53
+ let _dragDrop_initializers = [];
54
+ let _dragDrop_extraInitializers = [];
55
+ let _showPreview_decorators;
56
+ let _showPreview_initializers = [];
57
+ let _showPreview_extraInitializers = [];
58
+ let _input_decorators;
59
+ let _input_initializers = [];
60
+ let _input_extraInitializers = [];
61
+ let _uploadArea_decorators;
62
+ let _uploadArea_initializers = [];
63
+ let _uploadArea_extraInitializers = [];
64
+ let _renderContent_decorators;
65
+ let _componentStyles_decorators;
66
+ let _init_decorators;
67
+ let _handleDisabledChange_decorators;
68
+ let _dispatchChangeEvent_decorators;
69
+ let _dispatchErrorEvent_decorators;
70
+ (class extends _classSuper {
71
+ static { _classThis = this; }
72
+ static {
73
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
74
+ _size_decorators = [property({})];
75
+ _variant_decorators = [property({})];
76
+ _accept_decorators = [property({})];
77
+ _multiple_decorators = [property({ type: Boolean, })];
78
+ _disabled_decorators = [property({ type: Boolean, })];
79
+ _required_decorators = [property({ type: Boolean, })];
80
+ _invalid_decorators = [property({ type: Boolean, })];
81
+ _label_decorators = [property({})];
82
+ _helperText_decorators = [property({ attribute: 'helper-text', })];
83
+ _errorText_decorators = [property({ attribute: 'error-text', })];
84
+ _maxSize_decorators = [property({ type: Number, attribute: 'max-size', })];
85
+ _maxFiles_decorators = [property({ type: Number, attribute: 'max-files', })];
86
+ _name_decorators = [property({})];
87
+ _dragDrop_decorators = [property({ type: Boolean, attribute: 'drag-drop', })];
88
+ _showPreview_decorators = [property({ type: Boolean, attribute: 'show-preview', })];
89
+ _input_decorators = [query('.file-input')];
90
+ _uploadArea_decorators = [query('.upload-area')];
91
+ _renderContent_decorators = [render()];
92
+ _componentStyles_decorators = [styles()];
93
+ _init_decorators = [ready()];
94
+ _handleDisabledChange_decorators = [watch('disabled')];
95
+ _dispatchChangeEvent_decorators = [dispatch('@snice/file-upload-change', { bubbles: true, composed: true })];
96
+ _dispatchErrorEvent_decorators = [dispatch('@snice/file-upload-error', { bubbles: true, composed: true })];
97
+ __esDecorate(this, null, _renderContent_decorators, { kind: "method", name: "renderContent", static: false, private: false, access: { has: obj => "renderContent" in obj, get: obj => obj.renderContent }, metadata: _metadata }, null, _instanceExtraInitializers);
98
+ __esDecorate(this, null, _componentStyles_decorators, { kind: "method", name: "componentStyles", static: false, private: false, access: { has: obj => "componentStyles" in obj, get: obj => obj.componentStyles }, metadata: _metadata }, null, _instanceExtraInitializers);
99
+ __esDecorate(this, null, _init_decorators, { kind: "method", name: "init", static: false, private: false, access: { has: obj => "init" in obj, get: obj => obj.init }, metadata: _metadata }, null, _instanceExtraInitializers);
100
+ __esDecorate(this, null, _handleDisabledChange_decorators, { kind: "method", name: "handleDisabledChange", static: false, private: false, access: { has: obj => "handleDisabledChange" in obj, get: obj => obj.handleDisabledChange }, metadata: _metadata }, null, _instanceExtraInitializers);
101
+ __esDecorate(this, null, _dispatchChangeEvent_decorators, { kind: "method", name: "dispatchChangeEvent", static: false, private: false, access: { has: obj => "dispatchChangeEvent" in obj, get: obj => obj.dispatchChangeEvent }, metadata: _metadata }, null, _instanceExtraInitializers);
102
+ __esDecorate(this, null, _dispatchErrorEvent_decorators, { kind: "method", name: "dispatchErrorEvent", static: false, private: false, access: { has: obj => "dispatchErrorEvent" in obj, get: obj => obj.dispatchErrorEvent }, metadata: _metadata }, null, _instanceExtraInitializers);
103
+ __esDecorate(null, null, _size_decorators, { kind: "field", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
104
+ __esDecorate(null, null, _variant_decorators, { kind: "field", name: "variant", static: false, private: false, access: { has: obj => "variant" in obj, get: obj => obj.variant, set: (obj, value) => { obj.variant = value; } }, metadata: _metadata }, _variant_initializers, _variant_extraInitializers);
105
+ __esDecorate(null, null, _accept_decorators, { kind: "field", name: "accept", static: false, private: false, access: { has: obj => "accept" in obj, get: obj => obj.accept, set: (obj, value) => { obj.accept = value; } }, metadata: _metadata }, _accept_initializers, _accept_extraInitializers);
106
+ __esDecorate(null, null, _multiple_decorators, { kind: "field", name: "multiple", static: false, private: false, access: { has: obj => "multiple" in obj, get: obj => obj.multiple, set: (obj, value) => { obj.multiple = value; } }, metadata: _metadata }, _multiple_initializers, _multiple_extraInitializers);
107
+ __esDecorate(null, null, _disabled_decorators, { kind: "field", name: "disabled", static: false, private: false, access: { has: obj => "disabled" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
108
+ __esDecorate(null, null, _required_decorators, { kind: "field", name: "required", static: false, private: false, access: { has: obj => "required" in obj, get: obj => obj.required, set: (obj, value) => { obj.required = value; } }, metadata: _metadata }, _required_initializers, _required_extraInitializers);
109
+ __esDecorate(null, null, _invalid_decorators, { kind: "field", name: "invalid", static: false, private: false, access: { has: obj => "invalid" in obj, get: obj => obj.invalid, set: (obj, value) => { obj.invalid = value; } }, metadata: _metadata }, _invalid_initializers, _invalid_extraInitializers);
110
+ __esDecorate(null, null, _label_decorators, { kind: "field", name: "label", static: false, private: false, access: { has: obj => "label" in obj, get: obj => obj.label, set: (obj, value) => { obj.label = value; } }, metadata: _metadata }, _label_initializers, _label_extraInitializers);
111
+ __esDecorate(null, null, _helperText_decorators, { kind: "field", name: "helperText", static: false, private: false, access: { has: obj => "helperText" in obj, get: obj => obj.helperText, set: (obj, value) => { obj.helperText = value; } }, metadata: _metadata }, _helperText_initializers, _helperText_extraInitializers);
112
+ __esDecorate(null, null, _errorText_decorators, { kind: "field", name: "errorText", static: false, private: false, access: { has: obj => "errorText" in obj, get: obj => obj.errorText, set: (obj, value) => { obj.errorText = value; } }, metadata: _metadata }, _errorText_initializers, _errorText_extraInitializers);
113
+ __esDecorate(null, null, _maxSize_decorators, { kind: "field", name: "maxSize", static: false, private: false, access: { has: obj => "maxSize" in obj, get: obj => obj.maxSize, set: (obj, value) => { obj.maxSize = value; } }, metadata: _metadata }, _maxSize_initializers, _maxSize_extraInitializers);
114
+ __esDecorate(null, null, _maxFiles_decorators, { kind: "field", name: "maxFiles", static: false, private: false, access: { has: obj => "maxFiles" in obj, get: obj => obj.maxFiles, set: (obj, value) => { obj.maxFiles = value; } }, metadata: _metadata }, _maxFiles_initializers, _maxFiles_extraInitializers);
115
+ __esDecorate(null, null, _name_decorators, { kind: "field", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
116
+ __esDecorate(null, null, _dragDrop_decorators, { kind: "field", name: "dragDrop", static: false, private: false, access: { has: obj => "dragDrop" in obj, get: obj => obj.dragDrop, set: (obj, value) => { obj.dragDrop = value; } }, metadata: _metadata }, _dragDrop_initializers, _dragDrop_extraInitializers);
117
+ __esDecorate(null, null, _showPreview_decorators, { kind: "field", name: "showPreview", static: false, private: false, access: { has: obj => "showPreview" in obj, get: obj => obj.showPreview, set: (obj, value) => { obj.showPreview = value; } }, metadata: _metadata }, _showPreview_initializers, _showPreview_extraInitializers);
118
+ __esDecorate(null, null, _input_decorators, { kind: "field", name: "input", static: false, private: false, access: { has: obj => "input" in obj, get: obj => obj.input, set: (obj, value) => { obj.input = value; } }, metadata: _metadata }, _input_initializers, _input_extraInitializers);
119
+ __esDecorate(null, null, _uploadArea_decorators, { kind: "field", name: "uploadArea", static: false, private: false, access: { has: obj => "uploadArea" in obj, get: obj => obj.uploadArea, set: (obj, value) => { obj.uploadArea = value; } }, metadata: _metadata }, _uploadArea_initializers, _uploadArea_extraInitializers);
120
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
121
+ _classThis = _classDescriptor.value;
122
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
123
+ __runInitializers(_classThis, _classExtraInitializers);
124
+ }
125
+ constructor() {
126
+ super();
127
+ this.internals = __runInitializers(this, _instanceExtraInitializers);
128
+ this.size = __runInitializers(this, _size_initializers, 'medium');
129
+ this.variant = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _variant_initializers, 'outlined'));
130
+ this.accept = (__runInitializers(this, _variant_extraInitializers), __runInitializers(this, _accept_initializers, ''));
131
+ this.multiple = (__runInitializers(this, _accept_extraInitializers), __runInitializers(this, _multiple_initializers, false));
132
+ this.disabled = (__runInitializers(this, _multiple_extraInitializers), __runInitializers(this, _disabled_initializers, false));
133
+ this.required = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _required_initializers, false));
134
+ this.invalid = (__runInitializers(this, _required_extraInitializers), __runInitializers(this, _invalid_initializers, false));
135
+ this.label = (__runInitializers(this, _invalid_extraInitializers), __runInitializers(this, _label_initializers, ''));
136
+ this.helperText = (__runInitializers(this, _label_extraInitializers), __runInitializers(this, _helperText_initializers, ''));
137
+ this.errorText = (__runInitializers(this, _helperText_extraInitializers), __runInitializers(this, _errorText_initializers, ''));
138
+ this.maxSize = (__runInitializers(this, _errorText_extraInitializers), __runInitializers(this, _maxSize_initializers, -1)); // in bytes
139
+ this.maxFiles = (__runInitializers(this, _maxSize_extraInitializers), __runInitializers(this, _maxFiles_initializers, -1));
140
+ this.name = (__runInitializers(this, _maxFiles_extraInitializers), __runInitializers(this, _name_initializers, ''));
141
+ this.dragDrop = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _dragDrop_initializers, true));
142
+ this.showPreview = (__runInitializers(this, _dragDrop_extraInitializers), __runInitializers(this, _showPreview_initializers, true));
143
+ this.input = (__runInitializers(this, _showPreview_extraInitializers), __runInitializers(this, _input_initializers, void 0));
144
+ this.uploadArea = (__runInitializers(this, _input_extraInitializers), __runInitializers(this, _uploadArea_initializers, void 0));
145
+ this.isDragOver = (__runInitializers(this, _uploadArea_extraInitializers), false);
146
+ this.selectedFiles = [];
147
+ if (typeof this.attachInternals == 'function') {
148
+ this.internals = this.attachInternals();
149
+ }
150
+ }
151
+ get files() {
152
+ return this.input?.files || null;
153
+ }
154
+ renderContent() {
155
+ const wrapperClasses = ['file-upload-wrapper'].filter(Boolean).join(' ');
156
+ const uploadAreaClasses = [
157
+ 'upload-area',
158
+ `upload-area--${this.size}`,
159
+ this.variant === 'filled' ? 'upload-area--filled' : '',
160
+ this.disabled ? 'upload-area--disabled' : '',
161
+ this.isDragOver ? 'upload-area--drag-over' : '',
162
+ this.invalid ? 'upload-area--invalid' : ''
163
+ ].filter(Boolean).join(' ');
164
+ const labelClasses = ['label', this.required ? 'label--required' : ''].filter(Boolean).join(' ');
165
+ const iconClasses = ['upload-icon', `upload-icon--${this.size}`].filter(Boolean).join(' ');
166
+ const buttonClasses = ['upload-button', `upload-button--${this.size}`].filter(Boolean).join(' ');
167
+ return html /*html*/ `
168
+ <div class="${wrapperClasses}">
169
+ <if ${this.label}>
170
+ <label class="${labelClasses}">
171
+ ${this.label}
172
+ </label>
173
+ </if>
174
+
175
+ <div
176
+ class="${uploadAreaClasses}"
177
+ part="upload-area"
178
+ @click=${this.handleAreaClick}
179
+ @dragover=${this.handleDragOver}
180
+ @dragleave=${this.handleDragLeave}
181
+ @drop=${this.handleDrop}
182
+ >
183
+ <div class="${iconClasses}">📁</div>
184
+ <div class="upload-text">
185
+ <if ${this.dragDrop}>
186
+ Drag and drop ${this.multiple ? 'files' : 'a file'} here or
187
+ </if>
188
+ </div>
189
+ <button
190
+ class="${buttonClasses}"
191
+ type="button"
192
+ ?disabled="${this.disabled}"
193
+ @click="${this.handleButtonClick}"
194
+ >
195
+ Choose ${this.multiple ? 'Files' : 'File'}
196
+ </button>
197
+
198
+ <input
199
+ class="file-input"
200
+ type="file"
201
+ accept="${this.accept}"
202
+ ?multiple="${this.multiple}"
203
+ ?disabled="${this.disabled}"
204
+ ?required="${this.required}"
205
+ name="${this.name || ''}"
206
+ @change=${this.handleFileChange}
207
+ part="input"
208
+ />
209
+ </div>
210
+
211
+ <if ${this.selectedFiles.length > 0}>
212
+ <div class="file-list">
213
+ ${this.selectedFiles.map((file, index) => this.renderFileItem(file, index))}
214
+ </div>
215
+ </if>
216
+
217
+ <case ${this.errorText ? 'error' : this.helperText ? 'helper' : 'empty'}>
218
+ <when value="error">
219
+ <span class="error-text" part="error-text">${this.errorText}</span>
220
+ </when>
221
+ <when value="helper">
222
+ <span class="helper-text" part="helper-text">${this.helperText}</span>
223
+ </when>
224
+ <default>
225
+ <span class="helper-text" part="helper-text">&nbsp;</span>
226
+ </default>
227
+ </case>
228
+ </div>
229
+ `;
230
+ }
231
+ renderFileItem(file, index) {
232
+ const isImage = file.type.startsWith('image/');
233
+ const fileUrl = isImage && this.showPreview ? URL.createObjectURL(file) : '';
234
+ const formattedSize = this.formatFileSize(file.size);
235
+ return html /*html*/ `
236
+ <div class="file-item" part="file-item">
237
+ <if ${isImage && this.showPreview}>
238
+ <img class="file-preview" src="${fileUrl}" alt="${file.name}" />
239
+ </if>
240
+ <if ${!isImage || !this.showPreview}>
241
+ <div class="file-icon">📄</div>
242
+ </if>
243
+
244
+ <div class="file-info">
245
+ <div class="file-name">${file.name}</div>
246
+ <div class="file-size">${formattedSize}</div>
247
+ </div>
248
+
249
+ <button
250
+ class="file-remove"
251
+ type="button"
252
+ @click=${() => this.handleRemoveFile(index)}
253
+ aria-label="Remove ${file.name}"
254
+ >
255
+
256
+ </button>
257
+ </div>
258
+ `;
259
+ }
260
+ componentStyles() {
261
+ return css /*css*/ `${cssContent}`;
262
+ }
263
+ init() {
264
+ if (this.internals) {
265
+ this.updateFormValue();
266
+ }
267
+ }
268
+ handleAreaClick(e) {
269
+ if (this.disabled)
270
+ return;
271
+ // Only trigger if clicking the area itself, not the button
272
+ if (e.target.classList.contains('upload-area')) {
273
+ this.input?.click();
274
+ }
275
+ }
276
+ handleButtonClick(e) {
277
+ e.stopPropagation();
278
+ if (!this.disabled) {
279
+ this.input?.click();
280
+ }
281
+ }
282
+ handleDragOver(e) {
283
+ if (!this.dragDrop || this.disabled)
284
+ return;
285
+ e.preventDefault();
286
+ e.stopPropagation();
287
+ this.isDragOver = true;
288
+ }
289
+ handleDragLeave(e) {
290
+ if (!this.dragDrop || this.disabled)
291
+ return;
292
+ e.preventDefault();
293
+ e.stopPropagation();
294
+ this.isDragOver = false;
295
+ }
296
+ handleDrop(e) {
297
+ if (!this.dragDrop || this.disabled)
298
+ return;
299
+ e.preventDefault();
300
+ e.stopPropagation();
301
+ this.isDragOver = false;
302
+ const files = Array.from(e.dataTransfer?.files || []);
303
+ this.processFiles(files);
304
+ }
305
+ handleFileChange(e) {
306
+ const input = e.target;
307
+ const files = Array.from(input.files || []);
308
+ this.processFiles(files);
309
+ }
310
+ processFiles(files) {
311
+ let validFiles = files;
312
+ // Apply max files limit
313
+ if (this.maxFiles > 0) {
314
+ const available = this.maxFiles - this.selectedFiles.length;
315
+ validFiles = validFiles.slice(0, available);
316
+ }
317
+ // Validate file size
318
+ if (this.maxSize > 0) {
319
+ validFiles = validFiles.filter(file => {
320
+ if (file.size > this.maxSize) {
321
+ this.dispatchErrorEvent(`File "${file.name}" exceeds maximum size`);
322
+ return false;
323
+ }
324
+ return true;
325
+ });
326
+ }
327
+ if (this.multiple) {
328
+ this.selectedFiles = [...this.selectedFiles, ...validFiles];
329
+ }
330
+ else {
331
+ this.selectedFiles = validFiles.slice(0, 1);
332
+ }
333
+ this.updateFormValue();
334
+ this.dispatchChangeEvent();
335
+ this.requestUpdate();
336
+ }
337
+ handleRemoveFile(index) {
338
+ this.removeFile(index);
339
+ }
340
+ formatFileSize(bytes) {
341
+ if (bytes === 0)
342
+ return '0 Bytes';
343
+ const k = 1024;
344
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
345
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
346
+ return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
347
+ }
348
+ updateFormValue() {
349
+ if (!this.internals)
350
+ return;
351
+ const dataTransfer = new DataTransfer();
352
+ this.selectedFiles.forEach(file => {
353
+ dataTransfer.items.add(file);
354
+ });
355
+ this.internals.setFormValue(dataTransfer.files.length > 0 ? dataTransfer.files : null);
356
+ }
357
+ requestUpdate() {
358
+ // Trigger re-render
359
+ this.dispatchEvent(new CustomEvent('_internal-update', { bubbles: false }));
360
+ }
361
+ handleDisabledChange() {
362
+ if (this.input) {
363
+ this.input.disabled = this.disabled;
364
+ }
365
+ }
366
+ dispatchChangeEvent() {
367
+ return { files: this.selectedFiles, fileUpload: this };
368
+ }
369
+ dispatchErrorEvent(message) {
370
+ return { message, fileUpload: this };
371
+ }
372
+ // Public API
373
+ clear() {
374
+ this.selectedFiles = [];
375
+ if (this.input) {
376
+ this.input.value = '';
377
+ }
378
+ this.updateFormValue();
379
+ this.requestUpdate();
380
+ }
381
+ removeFile(index) {
382
+ if (index >= 0 && index < this.selectedFiles.length) {
383
+ this.selectedFiles.splice(index, 1);
384
+ this.updateFormValue();
385
+ this.dispatchChangeEvent();
386
+ this.requestUpdate();
387
+ }
388
+ }
389
+ });
390
+ return _classThis;
391
+ })();
392
+
393
+ export { SniceFileUpload };
394
+ //# sourceMappingURL=snice-file-upload.js.map