@zentto/studio 0.1.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 (93) hide show
  1. package/dist/designer/zs-app-wizard.d.ts +33 -0
  2. package/dist/designer/zs-app-wizard.d.ts.map +1 -0
  3. package/dist/designer/zs-app-wizard.js +493 -0
  4. package/dist/designer/zs-app-wizard.js.map +1 -0
  5. package/dist/designer/zs-page-designer.d.ts +30 -0
  6. package/dist/designer/zs-page-designer.d.ts.map +1 -0
  7. package/dist/designer/zs-page-designer.js +466 -0
  8. package/dist/designer/zs-page-designer.js.map +1 -0
  9. package/dist/fields/zs-field-address.d.ts +28 -0
  10. package/dist/fields/zs-field-address.d.ts.map +1 -0
  11. package/dist/fields/zs-field-address.js +129 -0
  12. package/dist/fields/zs-field-address.js.map +1 -0
  13. package/dist/fields/zs-field-chart.d.ts +27 -0
  14. package/dist/fields/zs-field-chart.d.ts.map +1 -0
  15. package/dist/fields/zs-field-chart.js +192 -0
  16. package/dist/fields/zs-field-chart.js.map +1 -0
  17. package/dist/fields/zs-field-checkbox.d.ts +33 -0
  18. package/dist/fields/zs-field-checkbox.d.ts.map +1 -0
  19. package/dist/fields/zs-field-checkbox.js +172 -0
  20. package/dist/fields/zs-field-checkbox.js.map +1 -0
  21. package/dist/fields/zs-field-chips.d.ts +38 -0
  22. package/dist/fields/zs-field-chips.d.ts.map +1 -0
  23. package/dist/fields/zs-field-chips.js +257 -0
  24. package/dist/fields/zs-field-chips.js.map +1 -0
  25. package/dist/fields/zs-field-date.d.ts +23 -0
  26. package/dist/fields/zs-field-date.d.ts.map +1 -0
  27. package/dist/fields/zs-field-date.js +98 -0
  28. package/dist/fields/zs-field-date.js.map +1 -0
  29. package/dist/fields/zs-field-file.d.ts +26 -0
  30. package/dist/fields/zs-field-file.d.ts.map +1 -0
  31. package/dist/fields/zs-field-file.js +190 -0
  32. package/dist/fields/zs-field-file.js.map +1 -0
  33. package/dist/fields/zs-field-heading.d.ts +14 -0
  34. package/dist/fields/zs-field-heading.d.ts.map +1 -0
  35. package/dist/fields/zs-field-heading.js +54 -0
  36. package/dist/fields/zs-field-heading.js.map +1 -0
  37. package/dist/fields/zs-field-html.d.ts +12 -0
  38. package/dist/fields/zs-field-html.d.ts.map +1 -0
  39. package/dist/fields/zs-field-html.js +38 -0
  40. package/dist/fields/zs-field-html.js.map +1 -0
  41. package/dist/fields/zs-field-lookup.d.ts +37 -0
  42. package/dist/fields/zs-field-lookup.d.ts.map +1 -0
  43. package/dist/fields/zs-field-lookup.js +204 -0
  44. package/dist/fields/zs-field-lookup.js.map +1 -0
  45. package/dist/fields/zs-field-media.d.ts +15 -0
  46. package/dist/fields/zs-field-media.d.ts.map +1 -0
  47. package/dist/fields/zs-field-media.js +59 -0
  48. package/dist/fields/zs-field-media.js.map +1 -0
  49. package/dist/fields/zs-field-number.d.ts +35 -0
  50. package/dist/fields/zs-field-number.d.ts.map +1 -0
  51. package/dist/fields/zs-field-number.js +192 -0
  52. package/dist/fields/zs-field-number.js.map +1 -0
  53. package/dist/fields/zs-field-select.d.ts +34 -0
  54. package/dist/fields/zs-field-select.d.ts.map +1 -0
  55. package/dist/fields/zs-field-select.js +237 -0
  56. package/dist/fields/zs-field-select.js.map +1 -0
  57. package/dist/fields/zs-field-separator.d.ts +12 -0
  58. package/dist/fields/zs-field-separator.d.ts.map +1 -0
  59. package/dist/fields/zs-field-separator.js +37 -0
  60. package/dist/fields/zs-field-separator.js.map +1 -0
  61. package/dist/fields/zs-field-signature.d.ts +34 -0
  62. package/dist/fields/zs-field-signature.d.ts.map +1 -0
  63. package/dist/fields/zs-field-signature.js +191 -0
  64. package/dist/fields/zs-field-signature.js.map +1 -0
  65. package/dist/fields/zs-field-switch.d.ts +19 -0
  66. package/dist/fields/zs-field-switch.d.ts.map +1 -0
  67. package/dist/fields/zs-field-switch.js +100 -0
  68. package/dist/fields/zs-field-switch.js.map +1 -0
  69. package/dist/fields/zs-field-text.d.ts +24 -0
  70. package/dist/fields/zs-field-text.d.ts.map +1 -0
  71. package/dist/fields/zs-field-text.js +115 -0
  72. package/dist/fields/zs-field-text.js.map +1 -0
  73. package/dist/fields/zs-field-treeview.d.ts +37 -0
  74. package/dist/fields/zs-field-treeview.d.ts.map +1 -0
  75. package/dist/fields/zs-field-treeview.js +234 -0
  76. package/dist/fields/zs-field-treeview.js.map +1 -0
  77. package/dist/styles/tokens.d.ts +3 -0
  78. package/dist/styles/tokens.d.ts.map +1 -0
  79. package/dist/styles/tokens.js +159 -0
  80. package/dist/styles/tokens.js.map +1 -0
  81. package/dist/zentto-studio-app.d.ts +55 -0
  82. package/dist/zentto-studio-app.d.ts.map +1 -0
  83. package/dist/zentto-studio-app.js +748 -0
  84. package/dist/zentto-studio-app.js.map +1 -0
  85. package/dist/zentto-studio-designer.d.ts +13 -0
  86. package/dist/zentto-studio-designer.d.ts.map +1 -0
  87. package/dist/zentto-studio-designer.js +75 -0
  88. package/dist/zentto-studio-designer.js.map +1 -0
  89. package/dist/zentto-studio-renderer.d.ts +53 -0
  90. package/dist/zentto-studio-renderer.d.ts.map +1 -0
  91. package/dist/zentto-studio-renderer.js +636 -0
  92. package/dist/zentto-studio-renderer.js.map +1 -0
  93. package/package.json +56 -0
@@ -0,0 +1,257 @@
1
+ // @zentto/studio — Chips/pills input field
2
+ // Modern chip input with autocomplete, colors, removable, draggable
3
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
4
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
6
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
7
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
8
+ };
9
+ import { LitElement, html, css } from 'lit';
10
+ import { customElement, property, state } from 'lit/decorators.js';
11
+ import { fieldBaseStyles } from '../styles/tokens.js';
12
+ let ZsFieldChips = class ZsFieldChips extends LitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.fieldId = '';
16
+ this.label = '';
17
+ this.placeholder = 'Escriba y presione Enter...';
18
+ this.helpText = '';
19
+ this.value = [];
20
+ this.options = [];
21
+ this.required = false;
22
+ this.disabled = false;
23
+ this.allowCustom = true;
24
+ this.maxChips = 0; // 0 = unlimited
25
+ this.colorMode = 'default';
26
+ this.errors = [];
27
+ this.inputValue = '';
28
+ this.showSuggestions = false;
29
+ }
30
+ static { this.styles = [fieldBaseStyles, css `
31
+ :host { display: block; }
32
+ .zs-chips-wrapper {
33
+ display: flex; flex-wrap: wrap; gap: 6px;
34
+ padding: 6px 8px; min-height: var(--zs-input-height, 38px);
35
+ border: var(--zs-input-border, 1px solid #dee2e6);
36
+ border-radius: var(--zs-radius, 6px);
37
+ background: var(--zs-input-bg, white);
38
+ align-items: center; cursor: text;
39
+ transition: border-color var(--zs-transition, 150ms);
40
+ }
41
+ .zs-chips-wrapper:focus-within {
42
+ border-color: var(--zs-primary, #e67e22);
43
+ box-shadow: 0 0 0 3px var(--zs-primary-light, #fdebd0);
44
+ }
45
+ .zs-chip {
46
+ display: inline-flex; align-items: center; gap: 4px;
47
+ padding: 3px 10px; border-radius: 16px;
48
+ font-size: 13px; font-weight: 500;
49
+ background: var(--zs-bg-secondary, #f8f9fa);
50
+ color: var(--zs-text, #212529);
51
+ border: 1px solid var(--zs-border, #dee2e6);
52
+ transition: all var(--zs-transition, 150ms);
53
+ max-width: 200px;
54
+ }
55
+ .zs-chip:hover { background: var(--zs-bg-hover, #f1f3f5); }
56
+ .zs-chip--primary {
57
+ background: var(--zs-primary-light, #fdebd0);
58
+ color: var(--zs-primary, #e67e22);
59
+ border-color: transparent;
60
+ }
61
+ .zs-chip--success {
62
+ background: #d4edda; color: #155724; border-color: transparent;
63
+ }
64
+ .zs-chip--danger {
65
+ background: #f8d7da; color: #721c24; border-color: transparent;
66
+ }
67
+ .zs-chip--info {
68
+ background: #d1ecf1; color: #0c5460; border-color: transparent;
69
+ }
70
+ .zs-chip-icon { font-size: 14px; }
71
+ .zs-chip-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
72
+ .zs-chip-remove {
73
+ cursor: pointer; font-size: 14px; line-height: 1;
74
+ opacity: 0.6; transition: opacity 100ms;
75
+ border: none; background: none; padding: 0;
76
+ color: inherit;
77
+ }
78
+ .zs-chip-remove:hover { opacity: 1; }
79
+ .zs-chips-input {
80
+ border: none; outline: none; flex: 1; min-width: 80px;
81
+ font-family: var(--zs-font-family, sans-serif);
82
+ font-size: var(--zs-font-size, 14px);
83
+ background: transparent; color: var(--zs-text, #212529);
84
+ padding: 2px 4px;
85
+ }
86
+ .zs-chips-suggestions {
87
+ position: relative;
88
+ }
89
+ .zs-chips-dropdown {
90
+ position: absolute; top: 100%; left: 0; right: 0;
91
+ background: var(--zs-bg, white); border: 1px solid var(--zs-border, #dee2e6);
92
+ border-radius: var(--zs-radius, 6px);
93
+ box-shadow: 0 4px 12px var(--zs-shadow, rgba(0,0,0,0.08));
94
+ max-height: 200px; overflow-y: auto; z-index: 100;
95
+ margin-top: 2px;
96
+ }
97
+ .zs-chips-option {
98
+ padding: 8px 12px; cursor: pointer;
99
+ font-size: 13px; transition: background 100ms;
100
+ }
101
+ .zs-chips-option:hover { background: var(--zs-bg-hover, #f1f3f5); }
102
+ .zs-chips-option--disabled { opacity: 0.5; cursor: not-allowed; }
103
+ .zs-chip-count {
104
+ font-size: 11px; color: var(--zs-text-muted, #adb5bd);
105
+ margin-top: 4px;
106
+ }
107
+ `]; }
108
+ get filteredOptions() {
109
+ if (!this.inputValue)
110
+ return this.options.filter(o => !this.value.includes(o.value));
111
+ const q = this.inputValue.toLowerCase();
112
+ return this.options
113
+ .filter(o => !this.value.includes(o.value) && o.label.toLowerCase().includes(q));
114
+ }
115
+ addChip(chipValue) {
116
+ if (!chipValue.trim())
117
+ return;
118
+ if (this.maxChips > 0 && this.value.length >= this.maxChips)
119
+ return;
120
+ if (this.value.includes(chipValue))
121
+ return;
122
+ const newValue = [...this.value, chipValue];
123
+ this.inputValue = '';
124
+ this.showSuggestions = false;
125
+ this.dispatchEvent(new CustomEvent('field-change', {
126
+ detail: { fieldId: this.fieldId, value: newValue },
127
+ bubbles: true, composed: true,
128
+ }));
129
+ }
130
+ removeChip(chipValue) {
131
+ if (this.disabled)
132
+ return;
133
+ const newValue = this.value.filter(v => v !== chipValue);
134
+ this.dispatchEvent(new CustomEvent('field-change', {
135
+ detail: { fieldId: this.fieldId, value: newValue },
136
+ bubbles: true, composed: true,
137
+ }));
138
+ }
139
+ handleKeydown(e) {
140
+ if (e.key === 'Enter' || e.key === ',') {
141
+ e.preventDefault();
142
+ if (this.filteredOptions.length > 0) {
143
+ this.addChip(this.filteredOptions[0].value);
144
+ }
145
+ else if (this.allowCustom && this.inputValue.trim()) {
146
+ this.addChip(this.inputValue.trim());
147
+ }
148
+ }
149
+ else if (e.key === 'Backspace' && !this.inputValue && this.value.length > 0) {
150
+ this.removeChip(this.value[this.value.length - 1]);
151
+ }
152
+ }
153
+ getChipClass(chipValue) {
154
+ if (this.colorMode === 'default')
155
+ return 'zs-chip';
156
+ if (this.colorMode !== 'auto')
157
+ return `zs-chip zs-chip--${this.colorMode}`;
158
+ // Auto: cycle through colors
159
+ const colors = ['primary', 'success', 'info', 'danger'];
160
+ const idx = this.value.indexOf(chipValue) % colors.length;
161
+ return `zs-chip zs-chip--${colors[idx]}`;
162
+ }
163
+ getChipLabel(chipValue) {
164
+ return this.options.find(o => o.value === chipValue)?.label ?? chipValue;
165
+ }
166
+ render() {
167
+ const hasError = this.errors.length > 0;
168
+ const labelClass = `zs-label ${this.required ? 'zs-label--required' : ''}`;
169
+ return html `
170
+ <div class="zs-field">
171
+ ${this.label ? html `<label class="${labelClass}">${this.label}</label>` : ''}
172
+ <div class="zs-chips-suggestions">
173
+ <div class="zs-chips-wrapper" @click="${() => this.shadowRoot?.querySelector('.zs-chips-input')?.focus()}">
174
+ ${this.value.map(v => html `
175
+ <span class="${this.getChipClass(v)}">
176
+ <span class="zs-chip-label">${this.getChipLabel(v)}</span>
177
+ ${!this.disabled ? html `
178
+ <button class="zs-chip-remove" @click="${(e) => { e.stopPropagation(); this.removeChip(v); }}">×</button>
179
+ ` : ''}
180
+ </span>
181
+ `)}
182
+ <input class="zs-chips-input"
183
+ .value="${this.inputValue}"
184
+ placeholder="${this.value.length === 0 ? this.placeholder : ''}"
185
+ ?disabled="${this.disabled}"
186
+ @input="${(e) => { this.inputValue = e.target.value; this.showSuggestions = true; }}"
187
+ @keydown="${this.handleKeydown}"
188
+ @focus="${() => { this.showSuggestions = true; }}"
189
+ @blur="${() => { setTimeout(() => { this.showSuggestions = false; }, 200); }}"
190
+ />
191
+ </div>
192
+ ${this.showSuggestions && this.filteredOptions.length > 0 ? html `
193
+ <div class="zs-chips-dropdown">
194
+ ${this.filteredOptions.slice(0, 20).map(opt => html `
195
+ <div class="zs-chips-option" @mousedown="${() => this.addChip(opt.value)}">
196
+ ${opt.icon ? html `<span>${opt.icon} </span>` : ''}${opt.label}
197
+ </div>
198
+ `)}
199
+ </div>
200
+ ` : ''}
201
+ </div>
202
+ ${this.maxChips > 0 ? html `
203
+ <div class="zs-chip-count">${this.value.length} / ${this.maxChips}</div>
204
+ ` : ''}
205
+ ${hasError ? html `<span class="zs-error">${this.errors[0]}</span>` : ''}
206
+ ${this.helpText && !hasError ? html `<span class="zs-help">${this.helpText}</span>` : ''}
207
+ </div>
208
+ `;
209
+ }
210
+ };
211
+ __decorate([
212
+ property()
213
+ ], ZsFieldChips.prototype, "fieldId", void 0);
214
+ __decorate([
215
+ property()
216
+ ], ZsFieldChips.prototype, "label", void 0);
217
+ __decorate([
218
+ property()
219
+ ], ZsFieldChips.prototype, "placeholder", void 0);
220
+ __decorate([
221
+ property()
222
+ ], ZsFieldChips.prototype, "helpText", void 0);
223
+ __decorate([
224
+ property({ type: Array })
225
+ ], ZsFieldChips.prototype, "value", void 0);
226
+ __decorate([
227
+ property({ type: Array })
228
+ ], ZsFieldChips.prototype, "options", void 0);
229
+ __decorate([
230
+ property({ type: Boolean })
231
+ ], ZsFieldChips.prototype, "required", void 0);
232
+ __decorate([
233
+ property({ type: Boolean })
234
+ ], ZsFieldChips.prototype, "disabled", void 0);
235
+ __decorate([
236
+ property({ type: Boolean })
237
+ ], ZsFieldChips.prototype, "allowCustom", void 0);
238
+ __decorate([
239
+ property({ type: Number })
240
+ ], ZsFieldChips.prototype, "maxChips", void 0);
241
+ __decorate([
242
+ property()
243
+ ], ZsFieldChips.prototype, "colorMode", void 0);
244
+ __decorate([
245
+ property({ type: Array })
246
+ ], ZsFieldChips.prototype, "errors", void 0);
247
+ __decorate([
248
+ state()
249
+ ], ZsFieldChips.prototype, "inputValue", void 0);
250
+ __decorate([
251
+ state()
252
+ ], ZsFieldChips.prototype, "showSuggestions", void 0);
253
+ ZsFieldChips = __decorate([
254
+ customElement('zs-field-chips')
255
+ ], ZsFieldChips);
256
+ export { ZsFieldChips };
257
+ //# sourceMappingURL=zs-field-chips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zs-field-chips.js","sourceRoot":"","sources":["../../src/fields/zs-field-chips.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class ZsFieldDate extends LitElement {
3
+ static styles: import("lit").CSSResult[];
4
+ fieldId: string;
5
+ label: string;
6
+ value: string;
7
+ helpText: string;
8
+ mode: 'date' | 'time' | 'datetime';
9
+ required: boolean;
10
+ disabled: boolean;
11
+ readOnly: boolean;
12
+ min: string;
13
+ max: string;
14
+ errors: string[];
15
+ private handleInput;
16
+ render(): import("lit-html").TemplateResult<1>;
17
+ }
18
+ declare global {
19
+ interface HTMLElementTagNameMap {
20
+ 'zs-field-date': ZsFieldDate;
21
+ }
22
+ }
23
+ //# sourceMappingURL=zs-field-date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zs-field-date.d.ts","sourceRoot":"","sources":["../../src/fields/zs-field-date.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,qBACa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,MAAM,4BAEV;IAES,OAAO,SAAM;IACb,KAAK,SAAM;IACX,KAAK,SAAM;IACX,QAAQ,SAAM;IACd,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAU;IAC3B,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACjB,QAAQ,UAAS;IAClC,GAAG,SAAM;IACT,GAAG,SAAM;IACM,MAAM,EAAE,MAAM,EAAE,CAAM;IAEjD,OAAO,CAAC,WAAW;IAQnB,MAAM;CAyBP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,WAAW,CAAC;KAC9B;CACF"}
@@ -0,0 +1,98 @@
1
+ // @zentto/studio — Date field web component
2
+ // Handles: date, time, datetime
3
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
4
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
6
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
7
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
8
+ };
9
+ import { LitElement, html, css } from 'lit';
10
+ import { customElement, property } from 'lit/decorators.js';
11
+ import { fieldBaseStyles } from '../styles/tokens.js';
12
+ let ZsFieldDate = class ZsFieldDate extends LitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.fieldId = '';
16
+ this.label = '';
17
+ this.value = '';
18
+ this.helpText = '';
19
+ this.mode = 'date';
20
+ this.required = false;
21
+ this.disabled = false;
22
+ this.readOnly = false;
23
+ this.min = '';
24
+ this.max = '';
25
+ this.errors = [];
26
+ }
27
+ static { this.styles = [fieldBaseStyles, css `
28
+ :host { display: block; }
29
+ `]; }
30
+ handleInput(e) {
31
+ const input = e.target;
32
+ this.dispatchEvent(new CustomEvent('field-change', {
33
+ detail: { fieldId: this.fieldId, value: input.value },
34
+ bubbles: true, composed: true,
35
+ }));
36
+ }
37
+ render() {
38
+ const hasError = this.errors.length > 0;
39
+ const inputClass = `zs-input ${hasError ? 'zs-input--error' : ''}`;
40
+ const labelClass = `zs-label ${this.required ? 'zs-label--required' : ''}`;
41
+ const inputType = this.mode === 'datetime' ? 'datetime-local' : this.mode;
42
+ return html `
43
+ <div class="zs-field">
44
+ ${this.label ? html `<label class="${labelClass}">${this.label}</label>` : ''}
45
+ <input
46
+ class="${inputClass}"
47
+ type="${inputType}"
48
+ .value="${this.value ?? ''}"
49
+ min="${this.min}"
50
+ max="${this.max}"
51
+ ?disabled="${this.disabled}"
52
+ ?readonly="${this.readOnly}"
53
+ @input="${this.handleInput}"
54
+ />
55
+ ${hasError ? html `<span class="zs-error">${this.errors[0]}</span>` : ''}
56
+ ${this.helpText && !hasError ? html `<span class="zs-help">${this.helpText}</span>` : ''}
57
+ </div>
58
+ `;
59
+ }
60
+ };
61
+ __decorate([
62
+ property()
63
+ ], ZsFieldDate.prototype, "fieldId", void 0);
64
+ __decorate([
65
+ property()
66
+ ], ZsFieldDate.prototype, "label", void 0);
67
+ __decorate([
68
+ property()
69
+ ], ZsFieldDate.prototype, "value", void 0);
70
+ __decorate([
71
+ property()
72
+ ], ZsFieldDate.prototype, "helpText", void 0);
73
+ __decorate([
74
+ property()
75
+ ], ZsFieldDate.prototype, "mode", void 0);
76
+ __decorate([
77
+ property({ type: Boolean })
78
+ ], ZsFieldDate.prototype, "required", void 0);
79
+ __decorate([
80
+ property({ type: Boolean })
81
+ ], ZsFieldDate.prototype, "disabled", void 0);
82
+ __decorate([
83
+ property({ type: Boolean })
84
+ ], ZsFieldDate.prototype, "readOnly", void 0);
85
+ __decorate([
86
+ property()
87
+ ], ZsFieldDate.prototype, "min", void 0);
88
+ __decorate([
89
+ property()
90
+ ], ZsFieldDate.prototype, "max", void 0);
91
+ __decorate([
92
+ property({ type: Array })
93
+ ], ZsFieldDate.prototype, "errors", void 0);
94
+ ZsFieldDate = __decorate([
95
+ customElement('zs-field-date')
96
+ ], ZsFieldDate);
97
+ export { ZsFieldDate };
98
+ //# sourceMappingURL=zs-field-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zs-field-date.js","sourceRoot":"","sources":["../../src/fields/zs-field-date.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class ZsFieldFile extends LitElement {
3
+ static styles: import("lit").CSSResult[];
4
+ fieldId: string;
5
+ label: string;
6
+ helpText: string;
7
+ accept: string;
8
+ required: boolean;
9
+ disabled: boolean;
10
+ multiple: boolean;
11
+ errors: string[];
12
+ private files;
13
+ private preview;
14
+ private dragover;
15
+ private handleFiles;
16
+ private handleDrop;
17
+ private removeFile;
18
+ private formatSize;
19
+ render(): import("lit-html").TemplateResult<1>;
20
+ }
21
+ declare global {
22
+ interface HTMLElementTagNameMap {
23
+ 'zs-field-file': ZsFieldFile;
24
+ }
25
+ }
26
+ //# sourceMappingURL=zs-field-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zs-field-file.d.ts","sourceRoot":"","sources":["../../src/fields/zs-field-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,qBACa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,MAAM,4BA2CV;IAES,OAAO,SAAM;IACb,KAAK,SAAM;IACX,QAAQ,SAAM;IACd,MAAM,SAAM;IACK,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACnB,MAAM,EAAE,MAAM,EAAE,CAAM;IACxC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAS;IAElC,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAMlB,MAAM;CA2CP;AAED,OAAO,CAAC,MAAM,CAAC;IAAE,UAAU,qBAAqB;QAAG,eAAe,EAAE,WAAW,CAAC;KAAE;CAAE"}
@@ -0,0 +1,190 @@
1
+ // @zentto/studio — File upload field
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ import { LitElement, html, css } from 'lit';
9
+ import { customElement, property, state } from 'lit/decorators.js';
10
+ import { fieldBaseStyles } from '../styles/tokens.js';
11
+ let ZsFieldFile = class ZsFieldFile extends LitElement {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.fieldId = '';
15
+ this.label = '';
16
+ this.helpText = '';
17
+ this.accept = '';
18
+ this.required = false;
19
+ this.disabled = false;
20
+ this.multiple = false;
21
+ this.errors = [];
22
+ this.files = [];
23
+ this.preview = '';
24
+ this.dragover = false;
25
+ }
26
+ static { this.styles = [fieldBaseStyles, css `
27
+ :host { display: block; }
28
+ .zs-dropzone {
29
+ border: 2px dashed var(--zs-border);
30
+ border-radius: var(--zs-radius-lg);
31
+ padding: 24px;
32
+ text-align: center;
33
+ cursor: pointer;
34
+ transition: all var(--zs-transition);
35
+ background: var(--zs-bg-secondary);
36
+ }
37
+ .zs-dropzone:hover, .zs-dropzone--dragover {
38
+ border-color: var(--zs-primary);
39
+ background: var(--zs-primary-light);
40
+ }
41
+ .zs-dropzone-icon { font-size: 32px; margin-bottom: 8px; }
42
+ .zs-dropzone-text {
43
+ font-size: var(--zs-font-size);
44
+ color: var(--zs-text-secondary);
45
+ }
46
+ .zs-dropzone-hint {
47
+ font-size: var(--zs-font-size-sm);
48
+ color: var(--zs-text-muted);
49
+ margin-top: 4px;
50
+ }
51
+ .zs-file-list { margin-top: 8px; }
52
+ .zs-file-item {
53
+ display: flex; align-items: center; gap: 8px;
54
+ padding: 6px 10px; border-radius: var(--zs-radius);
55
+ background: var(--zs-bg-secondary); margin-bottom: 4px;
56
+ font-size: var(--zs-font-size-sm);
57
+ }
58
+ .zs-file-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
59
+ .zs-file-size { color: var(--zs-text-muted); }
60
+ .zs-file-remove {
61
+ cursor: pointer; color: var(--zs-danger); font-size: 16px;
62
+ border: none; background: none; padding: 0;
63
+ }
64
+ .zs-preview-img {
65
+ width: 100%; max-height: 200px; object-fit: contain;
66
+ border-radius: var(--zs-radius); margin-top: 8px;
67
+ }
68
+ input[type="file"] { display: none; }
69
+ `]; }
70
+ handleFiles(fileList) {
71
+ if (!fileList)
72
+ return;
73
+ const newFiles = Array.from(fileList);
74
+ this.files = this.multiple ? [...this.files, ...newFiles] : newFiles;
75
+ // Preview for images
76
+ if (this.accept.includes('image') && newFiles[0]) {
77
+ const reader = new FileReader();
78
+ reader.onload = () => { this.preview = reader.result; };
79
+ reader.readAsDataURL(newFiles[0]);
80
+ }
81
+ this.dispatchEvent(new CustomEvent('field-change', {
82
+ detail: {
83
+ fieldId: this.fieldId,
84
+ value: this.multiple ? this.files : this.files[0] ?? null,
85
+ },
86
+ bubbles: true, composed: true,
87
+ }));
88
+ }
89
+ handleDrop(e) {
90
+ e.preventDefault();
91
+ this.dragover = false;
92
+ this.handleFiles(e.dataTransfer?.files ?? null);
93
+ }
94
+ removeFile(index) {
95
+ this.files = this.files.filter((_, i) => i !== index);
96
+ if (this.files.length === 0)
97
+ this.preview = '';
98
+ this.dispatchEvent(new CustomEvent('field-change', {
99
+ detail: { fieldId: this.fieldId, value: this.multiple ? this.files : null },
100
+ bubbles: true, composed: true,
101
+ }));
102
+ }
103
+ formatSize(bytes) {
104
+ if (bytes < 1024)
105
+ return `${bytes} B`;
106
+ if (bytes < 1048576)
107
+ return `${(bytes / 1024).toFixed(1)} KB`;
108
+ return `${(bytes / 1048576).toFixed(1)} MB`;
109
+ }
110
+ render() {
111
+ const hasError = this.errors.length > 0;
112
+ const labelClass = `zs-label ${this.required ? 'zs-label--required' : ''}`;
113
+ const dropzoneClass = `zs-dropzone ${this.dragover ? 'zs-dropzone--dragover' : ''}`;
114
+ return html `
115
+ <div class="zs-field">
116
+ ${this.label ? html `<label class="${labelClass}">${this.label}</label>` : ''}
117
+ <div
118
+ class="${dropzoneClass}"
119
+ @click="${() => this.shadowRoot?.querySelector('input')?.click()}"
120
+ @dragover="${(e) => { e.preventDefault(); this.dragover = true; }}"
121
+ @dragleave="${() => { this.dragover = false; }}"
122
+ @drop="${this.handleDrop}"
123
+ >
124
+ <div class="zs-dropzone-icon">📁</div>
125
+ <div class="zs-dropzone-text">Haga clic o arrastre archivos aqui</div>
126
+ ${this.accept ? html `<div class="zs-dropzone-hint">Formatos: ${this.accept}</div>` : ''}
127
+ </div>
128
+ <input
129
+ type="file"
130
+ accept="${this.accept}"
131
+ ?multiple="${this.multiple}"
132
+ ?disabled="${this.disabled}"
133
+ @change="${(e) => this.handleFiles(e.target.files)}"
134
+ />
135
+ ${this.preview ? html `<img class="zs-preview-img" src="${this.preview}" alt="Preview" />` : ''}
136
+ ${this.files.length > 0 ? html `
137
+ <div class="zs-file-list">
138
+ ${this.files.map((f, i) => html `
139
+ <div class="zs-file-item">
140
+ <span class="zs-file-name">${f.name}</span>
141
+ <span class="zs-file-size">${this.formatSize(f.size)}</span>
142
+ <button class="zs-file-remove" @click="${() => this.removeFile(i)}">×</button>
143
+ </div>
144
+ `)}
145
+ </div>
146
+ ` : ''}
147
+ ${hasError ? html `<span class="zs-error">${this.errors[0]}</span>` : ''}
148
+ ${this.helpText && !hasError ? html `<span class="zs-help">${this.helpText}</span>` : ''}
149
+ </div>
150
+ `;
151
+ }
152
+ };
153
+ __decorate([
154
+ property()
155
+ ], ZsFieldFile.prototype, "fieldId", void 0);
156
+ __decorate([
157
+ property()
158
+ ], ZsFieldFile.prototype, "label", void 0);
159
+ __decorate([
160
+ property()
161
+ ], ZsFieldFile.prototype, "helpText", void 0);
162
+ __decorate([
163
+ property()
164
+ ], ZsFieldFile.prototype, "accept", void 0);
165
+ __decorate([
166
+ property({ type: Boolean })
167
+ ], ZsFieldFile.prototype, "required", void 0);
168
+ __decorate([
169
+ property({ type: Boolean })
170
+ ], ZsFieldFile.prototype, "disabled", void 0);
171
+ __decorate([
172
+ property({ type: Boolean })
173
+ ], ZsFieldFile.prototype, "multiple", void 0);
174
+ __decorate([
175
+ property({ type: Array })
176
+ ], ZsFieldFile.prototype, "errors", void 0);
177
+ __decorate([
178
+ state()
179
+ ], ZsFieldFile.prototype, "files", void 0);
180
+ __decorate([
181
+ state()
182
+ ], ZsFieldFile.prototype, "preview", void 0);
183
+ __decorate([
184
+ state()
185
+ ], ZsFieldFile.prototype, "dragover", void 0);
186
+ ZsFieldFile = __decorate([
187
+ customElement('zs-field-file')
188
+ ], ZsFieldFile);
189
+ export { ZsFieldFile };
190
+ //# sourceMappingURL=zs-field-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zs-field-file.js","sourceRoot":"","sources":["../../src/fields/zs-field-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class ZsFieldHeading extends LitElement {
3
+ static styles: import("lit").CSSResult;
4
+ label: string;
5
+ helpText: string;
6
+ level: 'h1' | 'h2' | 'h3' | 'h4';
7
+ render(): import("lit-html").TemplateResult<1>;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ 'zs-field-heading': ZsFieldHeading;
12
+ }
13
+ }
14
+ //# sourceMappingURL=zs-field-heading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zs-field-heading.d.ts","sourceRoot":"","sources":["../../src/fields/zs-field-heading.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,qBACa,cAAe,SAAQ,UAAU;IAC5C,MAAM,CAAC,MAAM,0BAgBX;IAEU,KAAK,SAAM;IACX,QAAQ,SAAM;IACd,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAEpD,MAAM;CAMP;AAED,OAAO,CAAC,MAAM,CAAC;IAAE,UAAU,qBAAqB;QAAG,kBAAkB,EAAE,cAAc,CAAC;KAAE;CAAE"}