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.
- package/README.md +90 -41
- package/dist/components/accordion/snice-accordion-item.js +1 -1
- package/dist/components/accordion/snice-accordion-item.js.map +1 -1
- package/dist/components/accordion/snice-accordion.js +1 -1
- package/dist/components/accordion/snice-accordion.js.map +1 -1
- package/dist/components/alert/snice-alert.js +1 -1
- package/dist/components/alert/snice-alert.js.map +1 -1
- package/dist/components/avatar/snice-avatar.js +1 -1
- package/dist/components/avatar/snice-avatar.js.map +1 -1
- package/dist/components/badge/snice-badge.js +1 -1
- package/dist/components/badge/snice-badge.js.map +1 -1
- package/dist/components/banner/snice-banner.d.ts +22 -0
- package/dist/components/banner/snice-banner.js +180 -0
- package/dist/components/banner/snice-banner.js.map +1 -0
- package/dist/components/banner/snice-banner.types.d.ts +14 -0
- package/dist/components/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -1
- package/dist/components/button/snice-button.js +1 -1
- package/dist/components/button/snice-button.js.map +1 -1
- package/dist/components/card/snice-card.js +1 -1
- package/dist/components/card/snice-card.js.map +1 -1
- package/dist/components/checkbox/snice-checkbox.js +1 -1
- package/dist/components/checkbox/snice-checkbox.js.map +1 -1
- package/dist/components/chip/snice-chip.js +1 -1
- package/dist/components/chip/snice-chip.js.map +1 -1
- package/dist/components/color-display/snice-color-display.d.ts +14 -0
- package/dist/components/color-display/snice-color-display.js +151 -0
- package/dist/components/color-display/snice-color-display.js.map +1 -0
- package/dist/components/color-display/snice-color-display.types.d.ts +10 -0
- package/dist/components/color-picker/snice-color-picker.d.ts +50 -0
- package/dist/components/color-picker/snice-color-picker.js +489 -0
- package/dist/components/color-picker/snice-color-picker.js.map +1 -0
- package/dist/components/color-picker/snice-color-picker.types.d.ts +19 -0
- package/dist/components/date-picker/snice-date-picker.js +1 -1
- package/dist/components/date-picker/snice-date-picker.js.map +1 -1
- package/dist/components/divider/snice-divider.js +1 -1
- package/dist/components/divider/snice-divider.js.map +1 -1
- package/dist/components/drawer/snice-drawer.js +1 -1
- package/dist/components/drawer/snice-drawer.js.map +1 -1
- package/dist/components/empty-state/snice-empty-state.d.ts +13 -0
- package/dist/components/empty-state/snice-empty-state.js +121 -0
- package/dist/components/empty-state/snice-empty-state.js.map +1 -0
- package/dist/components/empty-state/snice-empty-state.types.d.ts +9 -0
- package/dist/components/file-upload/snice-file-upload.d.ts +45 -0
- package/dist/components/file-upload/snice-file-upload.js +394 -0
- package/dist/components/file-upload/snice-file-upload.js.map +1 -0
- package/dist/components/file-upload/snice-file-upload.types.d.ts +22 -0
- package/dist/components/image/snice-image.d.ts +22 -0
- package/dist/components/image/snice-image.js +201 -0
- package/dist/components/image/snice-image.js.map +1 -0
- package/dist/components/image/snice-image.types.d.ts +17 -0
- package/dist/components/input/snice-input.js +1 -1
- package/dist/components/input/snice-input.js.map +1 -1
- package/dist/components/kpi/snice-kpi.d.ts +16 -0
- package/dist/components/kpi/snice-kpi.js +162 -0
- package/dist/components/kpi/snice-kpi.js.map +1 -0
- package/dist/components/kpi/snice-kpi.types.d.ts +12 -0
- package/dist/components/layout/snice-layout-blog.js +1 -1
- package/dist/components/layout/snice-layout-blog.js.map +1 -1
- package/dist/components/layout/snice-layout-card.js +1 -1
- package/dist/components/layout/snice-layout-card.js.map +1 -1
- package/dist/components/layout/snice-layout-centered.js +1 -1
- package/dist/components/layout/snice-layout-centered.js.map +1 -1
- package/dist/components/layout/snice-layout-dashboard.js +1 -1
- package/dist/components/layout/snice-layout-dashboard.js.map +1 -1
- package/dist/components/layout/snice-layout-fullscreen.js +1 -1
- package/dist/components/layout/snice-layout-fullscreen.js.map +1 -1
- package/dist/components/layout/snice-layout-landing.js +1 -1
- package/dist/components/layout/snice-layout-landing.js.map +1 -1
- package/dist/components/layout/snice-layout-minimal.js +1 -1
- package/dist/components/layout/snice-layout-minimal.js.map +1 -1
- package/dist/components/layout/snice-layout-sidebar.js +1 -1
- package/dist/components/layout/snice-layout-sidebar.js.map +1 -1
- package/dist/components/layout/snice-layout-split.js +1 -1
- package/dist/components/layout/snice-layout-split.js.map +1 -1
- package/dist/components/layout/snice-layout.js +1 -1
- package/dist/components/layout/snice-layout.js.map +1 -1
- package/dist/components/link/snice-link.d.ts +13 -0
- package/dist/components/link/snice-link.js +137 -0
- package/dist/components/link/snice-link.js.map +1 -0
- package/dist/components/link/snice-link.types.d.ts +11 -0
- package/dist/components/login/snice-login.js +1 -1
- package/dist/components/login/snice-login.js.map +1 -1
- package/dist/components/modal/snice-modal.js +1 -1
- package/dist/components/modal/snice-modal.js.map +1 -1
- package/dist/components/nav/snice-nav.js +1 -1
- package/dist/components/nav/snice-nav.js.map +1 -1
- package/dist/components/progress/snice-progress.js +1 -1
- package/dist/components/progress/snice-progress.js.map +1 -1
- package/dist/components/radio/snice-radio.js +1 -1
- package/dist/components/radio/snice-radio.js.map +1 -1
- package/dist/components/select/snice-select.js +1 -1
- package/dist/components/select/snice-select.js.map +1 -1
- package/dist/components/skeleton/snice-skeleton.js +1 -1
- package/dist/components/skeleton/snice-skeleton.js.map +1 -1
- package/dist/components/slider/snice-slider.d.ts +53 -0
- package/dist/components/slider/snice-slider.js +479 -0
- package/dist/components/slider/snice-slider.js.map +1 -0
- package/dist/components/slider/snice-slider.types.d.ts +26 -0
- package/dist/components/snice-cell-C0slgOpe.js +4 -0
- package/dist/components/snice-cell-C0slgOpe.js.map +1 -0
- package/dist/components/sparkline/snice-sparkline.d.ts +21 -0
- package/dist/components/sparkline/snice-sparkline.js +228 -0
- package/dist/components/sparkline/snice-sparkline.js.map +1 -0
- package/dist/components/sparkline/snice-sparkline.types.d.ts +16 -0
- package/dist/components/spinner/snice-spinner.d.ts +10 -0
- package/dist/components/spinner/snice-spinner.js +109 -0
- package/dist/components/spinner/snice-spinner.js.map +1 -0
- package/dist/components/spinner/snice-spinner.types.d.ts +8 -0
- package/dist/components/stepper/snice-stepper-panel.d.ts +8 -0
- package/dist/components/stepper/snice-stepper-panel.js +70 -0
- package/dist/components/stepper/snice-stepper-panel.js.map +1 -0
- package/dist/components/stepper/snice-stepper-panel.types.d.ts +4 -0
- package/dist/components/stepper/snice-stepper.d.ts +15 -0
- package/dist/components/stepper/snice-stepper.js +163 -0
- package/dist/components/stepper/snice-stepper.js.map +1 -0
- package/dist/components/stepper/snice-stepper.types.d.ts +13 -0
- package/dist/components/switch/snice-switch.js +1 -1
- package/dist/components/switch/snice-switch.js.map +1 -1
- package/dist/components/table/snice-cell-actions.js +1 -1
- package/dist/components/table/snice-cell-actions.js.map +1 -1
- package/dist/components/table/snice-cell-boolean.js +1 -1
- package/dist/components/table/snice-cell-color.js +1 -1
- package/dist/components/table/snice-cell-color.js.map +1 -1
- package/dist/components/table/snice-cell-currency.js +1 -1
- package/dist/components/table/snice-cell-date.js +1 -1
- package/dist/components/table/snice-cell-duration.js +1 -1
- package/dist/components/table/snice-cell-email.js +1 -1
- package/dist/components/table/snice-cell-email.js.map +1 -1
- package/dist/components/table/snice-cell-filesize.js +1 -1
- package/dist/components/table/snice-cell-image.js +1 -1
- package/dist/components/table/snice-cell-image.js.map +1 -1
- package/dist/components/table/snice-cell-json.js +1 -1
- package/dist/components/table/snice-cell-json.js.map +1 -1
- package/dist/components/table/snice-cell-link.js +1 -1
- package/dist/components/table/snice-cell-link.js.map +1 -1
- package/dist/components/table/snice-cell-location.js +1 -1
- package/dist/components/table/snice-cell-location.js.map +1 -1
- package/dist/components/table/snice-cell-number.js +1 -1
- package/dist/components/table/snice-cell-percentage.js +1 -1
- package/dist/components/table/snice-cell-percentage.js.map +1 -1
- package/dist/components/table/snice-cell-phone.js +1 -1
- package/dist/components/table/snice-cell-phone.js.map +1 -1
- package/dist/components/table/snice-cell-progress.js +1 -1
- package/dist/components/table/snice-cell-rating.js +1 -1
- package/dist/components/table/snice-cell-sparkline.js +1 -1
- package/dist/components/table/snice-cell-status.js +1 -1
- package/dist/components/table/snice-cell-status.js.map +1 -1
- package/dist/components/table/snice-cell-tag.js +1 -1
- package/dist/components/table/snice-cell-tag.js.map +1 -1
- package/dist/components/table/snice-cell-text.js +1 -1
- package/dist/components/table/snice-cell.js +1 -1
- package/dist/components/table/snice-header.js +1 -1
- package/dist/components/table/snice-header.js.map +1 -1
- package/dist/components/table/snice-row.js +2 -2
- package/dist/components/table/snice-row.js.map +1 -1
- package/dist/components/table/snice-table.js +1 -1
- package/dist/components/tabs/snice-tab-panel.js +1 -1
- package/dist/components/tabs/snice-tab-panel.js.map +1 -1
- package/dist/components/tabs/snice-tab.js +1 -1
- package/dist/components/tabs/snice-tab.js.map +1 -1
- package/dist/components/tabs/snice-tabs.js +1 -1
- package/dist/components/tabs/snice-tabs.js.map +1 -1
- package/dist/components/textarea/snice-textarea.d.ts +52 -0
- package/dist/components/textarea/snice-textarea.js +407 -0
- package/dist/components/textarea/snice-textarea.js.map +1 -0
- package/dist/components/textarea/snice-textarea.types.d.ts +30 -0
- package/dist/components/timeline/snice-timeline.d.ts +11 -0
- package/dist/components/timeline/snice-timeline.js +112 -0
- package/dist/components/timeline/snice-timeline.js.map +1 -0
- package/dist/components/timeline/snice-timeline.types.d.ts +16 -0
- package/dist/components/tooltip/snice-tooltip.js +2 -2
- package/dist/components/tooltip/snice-tooltip.js.map +1 -1
- package/dist/index.cjs +125 -158
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +125 -158
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +125 -158
- package/dist/index.iife.js.map +1 -1
- package/dist/parts.d.ts +13 -16
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/template.d.ts +0 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/README.md +10 -1
- package/docs/ai/components/banner.md +84 -0
- package/docs/ai/components/color-display.md +48 -0
- package/docs/ai/components/color-picker.md +75 -0
- package/docs/ai/components/empty-state.md +72 -0
- package/docs/ai/components/file-upload.md +93 -0
- package/docs/ai/components/image.md +60 -0
- package/docs/ai/components/kpi.md +158 -0
- package/docs/ai/components/link.md +77 -0
- package/docs/ai/components/slider.md +87 -0
- package/docs/ai/components/sparkline.md +168 -0
- package/docs/ai/components/spinner.md +47 -0
- package/docs/ai/components/stepper.md +216 -0
- package/docs/ai/components/textarea.md +87 -0
- package/docs/ai/components/timeline.md +77 -0
- package/docs/components/banner.md +106 -0
- package/docs/components/color-display.md +96 -0
- package/docs/components/color-picker.md +81 -0
- package/docs/components/empty-state.md +79 -0
- package/docs/components/file-upload.md +263 -0
- package/docs/components/image.md +110 -0
- package/docs/components/kpi.md +251 -0
- package/docs/components/link.md +229 -0
- package/docs/components/slider.md +297 -0
- package/docs/components/sparkline.md +293 -0
- package/docs/components/spinner.md +63 -0
- package/docs/components/stepper.md +410 -0
- package/docs/components/textarea.md +235 -0
- package/docs/components/timeline.md +192 -0
- package/package.json +2 -1
- package/dist/components/snice-cell-BLFVdxPp.js +0 -4
- 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,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"> </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
|