@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.
- package/dist/designer/zs-app-wizard.d.ts +33 -0
- package/dist/designer/zs-app-wizard.d.ts.map +1 -0
- package/dist/designer/zs-app-wizard.js +493 -0
- package/dist/designer/zs-app-wizard.js.map +1 -0
- package/dist/designer/zs-page-designer.d.ts +30 -0
- package/dist/designer/zs-page-designer.d.ts.map +1 -0
- package/dist/designer/zs-page-designer.js +466 -0
- package/dist/designer/zs-page-designer.js.map +1 -0
- package/dist/fields/zs-field-address.d.ts +28 -0
- package/dist/fields/zs-field-address.d.ts.map +1 -0
- package/dist/fields/zs-field-address.js +129 -0
- package/dist/fields/zs-field-address.js.map +1 -0
- package/dist/fields/zs-field-chart.d.ts +27 -0
- package/dist/fields/zs-field-chart.d.ts.map +1 -0
- package/dist/fields/zs-field-chart.js +192 -0
- package/dist/fields/zs-field-chart.js.map +1 -0
- package/dist/fields/zs-field-checkbox.d.ts +33 -0
- package/dist/fields/zs-field-checkbox.d.ts.map +1 -0
- package/dist/fields/zs-field-checkbox.js +172 -0
- package/dist/fields/zs-field-checkbox.js.map +1 -0
- package/dist/fields/zs-field-chips.d.ts +38 -0
- package/dist/fields/zs-field-chips.d.ts.map +1 -0
- package/dist/fields/zs-field-chips.js +257 -0
- package/dist/fields/zs-field-chips.js.map +1 -0
- package/dist/fields/zs-field-date.d.ts +23 -0
- package/dist/fields/zs-field-date.d.ts.map +1 -0
- package/dist/fields/zs-field-date.js +98 -0
- package/dist/fields/zs-field-date.js.map +1 -0
- package/dist/fields/zs-field-file.d.ts +26 -0
- package/dist/fields/zs-field-file.d.ts.map +1 -0
- package/dist/fields/zs-field-file.js +190 -0
- package/dist/fields/zs-field-file.js.map +1 -0
- package/dist/fields/zs-field-heading.d.ts +14 -0
- package/dist/fields/zs-field-heading.d.ts.map +1 -0
- package/dist/fields/zs-field-heading.js +54 -0
- package/dist/fields/zs-field-heading.js.map +1 -0
- package/dist/fields/zs-field-html.d.ts +12 -0
- package/dist/fields/zs-field-html.d.ts.map +1 -0
- package/dist/fields/zs-field-html.js +38 -0
- package/dist/fields/zs-field-html.js.map +1 -0
- package/dist/fields/zs-field-lookup.d.ts +37 -0
- package/dist/fields/zs-field-lookup.d.ts.map +1 -0
- package/dist/fields/zs-field-lookup.js +204 -0
- package/dist/fields/zs-field-lookup.js.map +1 -0
- package/dist/fields/zs-field-media.d.ts +15 -0
- package/dist/fields/zs-field-media.d.ts.map +1 -0
- package/dist/fields/zs-field-media.js +59 -0
- package/dist/fields/zs-field-media.js.map +1 -0
- package/dist/fields/zs-field-number.d.ts +35 -0
- package/dist/fields/zs-field-number.d.ts.map +1 -0
- package/dist/fields/zs-field-number.js +192 -0
- package/dist/fields/zs-field-number.js.map +1 -0
- package/dist/fields/zs-field-select.d.ts +34 -0
- package/dist/fields/zs-field-select.d.ts.map +1 -0
- package/dist/fields/zs-field-select.js +237 -0
- package/dist/fields/zs-field-select.js.map +1 -0
- package/dist/fields/zs-field-separator.d.ts +12 -0
- package/dist/fields/zs-field-separator.d.ts.map +1 -0
- package/dist/fields/zs-field-separator.js +37 -0
- package/dist/fields/zs-field-separator.js.map +1 -0
- package/dist/fields/zs-field-signature.d.ts +34 -0
- package/dist/fields/zs-field-signature.d.ts.map +1 -0
- package/dist/fields/zs-field-signature.js +191 -0
- package/dist/fields/zs-field-signature.js.map +1 -0
- package/dist/fields/zs-field-switch.d.ts +19 -0
- package/dist/fields/zs-field-switch.d.ts.map +1 -0
- package/dist/fields/zs-field-switch.js +100 -0
- package/dist/fields/zs-field-switch.js.map +1 -0
- package/dist/fields/zs-field-text.d.ts +24 -0
- package/dist/fields/zs-field-text.d.ts.map +1 -0
- package/dist/fields/zs-field-text.js +115 -0
- package/dist/fields/zs-field-text.js.map +1 -0
- package/dist/fields/zs-field-treeview.d.ts +37 -0
- package/dist/fields/zs-field-treeview.d.ts.map +1 -0
- package/dist/fields/zs-field-treeview.js +234 -0
- package/dist/fields/zs-field-treeview.js.map +1 -0
- package/dist/styles/tokens.d.ts +3 -0
- package/dist/styles/tokens.d.ts.map +1 -0
- package/dist/styles/tokens.js +159 -0
- package/dist/styles/tokens.js.map +1 -0
- package/dist/zentto-studio-app.d.ts +55 -0
- package/dist/zentto-studio-app.d.ts.map +1 -0
- package/dist/zentto-studio-app.js +748 -0
- package/dist/zentto-studio-app.js.map +1 -0
- package/dist/zentto-studio-designer.d.ts +13 -0
- package/dist/zentto-studio-designer.d.ts.map +1 -0
- package/dist/zentto-studio-designer.js +75 -0
- package/dist/zentto-studio-designer.js.map +1 -0
- package/dist/zentto-studio-renderer.d.ts +53 -0
- package/dist/zentto-studio-renderer.d.ts.map +1 -0
- package/dist/zentto-studio-renderer.js +636 -0
- package/dist/zentto-studio-renderer.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
// @zentto/studio — Runtime Page Designer
|
|
2
|
+
// Allows users to drag-drop fields, reorder, resize, and edit properties
|
|
3
|
+
// in a live preview. Outputs the modified StudioSchema.
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
+
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;
|
|
8
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
+
};
|
|
10
|
+
import { LitElement, html, css, nothing } from 'lit';
|
|
11
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
12
|
+
import { studioTokens, fieldBaseStyles } from '../styles/tokens.js';
|
|
13
|
+
import { getAllFields } from '@zentto/studio-core';
|
|
14
|
+
// Import renderer for live preview
|
|
15
|
+
import '../zentto-studio-renderer.js';
|
|
16
|
+
let ZsPageDesigner = class ZsPageDesigner extends LitElement {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.schema = null;
|
|
20
|
+
this.data = {};
|
|
21
|
+
this.selectedFieldId = null;
|
|
22
|
+
this.viewMode = 'design';
|
|
23
|
+
this.dragType = null;
|
|
24
|
+
this.renderKey = 0;
|
|
25
|
+
}
|
|
26
|
+
static { this.styles = [studioTokens, fieldBaseStyles, css `
|
|
27
|
+
:host { display: block; font-family: var(--zs-font-family); height: 100%; }
|
|
28
|
+
|
|
29
|
+
.designer {
|
|
30
|
+
display: grid; grid-template-columns: 220px 1fr 280px;
|
|
31
|
+
height: 100%; overflow: hidden;
|
|
32
|
+
border: 1px solid var(--zs-border); border-radius: 8px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* ─── Toolbox (Left) ──────────────────────── */
|
|
36
|
+
.toolbox {
|
|
37
|
+
background: var(--zs-bg-secondary); border-right: 1px solid var(--zs-border);
|
|
38
|
+
overflow-y: auto; padding: 12px;
|
|
39
|
+
}
|
|
40
|
+
.toolbox-title {
|
|
41
|
+
font-size: 11px; font-weight: 600; text-transform: uppercase;
|
|
42
|
+
letter-spacing: 0.5px; color: var(--zs-text-secondary);
|
|
43
|
+
margin: 12px 0 8px; padding: 0 4px;
|
|
44
|
+
}
|
|
45
|
+
.toolbox-title:first-child { margin-top: 0; }
|
|
46
|
+
.toolbox-item {
|
|
47
|
+
display: flex; align-items: center; gap: 8px;
|
|
48
|
+
padding: 8px 10px; border-radius: 6px;
|
|
49
|
+
cursor: grab; font-size: 13px; color: var(--zs-text);
|
|
50
|
+
transition: all 100ms; margin-bottom: 2px;
|
|
51
|
+
border: 1px solid transparent;
|
|
52
|
+
}
|
|
53
|
+
.toolbox-item:hover { background: var(--zs-bg-hover); border-color: var(--zs-border); }
|
|
54
|
+
.toolbox-item:active { cursor: grabbing; background: var(--zs-primary-light); border-color: var(--zs-primary); }
|
|
55
|
+
.toolbox-item-icon { font-size: 16px; width: 24px; text-align: center; }
|
|
56
|
+
.toolbox-item-label { flex: 1; }
|
|
57
|
+
|
|
58
|
+
/* ─── Canvas (Center) ─────────────────────── */
|
|
59
|
+
.canvas {
|
|
60
|
+
overflow-y: auto; padding: 24px;
|
|
61
|
+
background: #f5f5f5; position: relative;
|
|
62
|
+
}
|
|
63
|
+
.canvas-header {
|
|
64
|
+
display: flex; align-items: center; gap: 8px;
|
|
65
|
+
margin-bottom: 16px; padding: 0 4px;
|
|
66
|
+
}
|
|
67
|
+
.canvas-title { font-size: 16px; font-weight: 600; color: var(--zs-text); }
|
|
68
|
+
.canvas-actions { margin-left: auto; display: flex; gap: 6px; }
|
|
69
|
+
.canvas-btn {
|
|
70
|
+
padding: 5px 12px; border: 1px solid var(--zs-border);
|
|
71
|
+
border-radius: 4px; background: var(--zs-bg); cursor: pointer;
|
|
72
|
+
font-size: 12px; color: var(--zs-text-secondary);
|
|
73
|
+
transition: all 100ms;
|
|
74
|
+
}
|
|
75
|
+
.canvas-btn:hover { background: var(--zs-bg-hover); color: var(--zs-text); }
|
|
76
|
+
.canvas-btn--active { background: var(--zs-primary); color: white; border-color: var(--zs-primary); }
|
|
77
|
+
|
|
78
|
+
/* Preview wrapper */
|
|
79
|
+
.preview-frame {
|
|
80
|
+
background: var(--zs-bg); border-radius: 8px;
|
|
81
|
+
border: 1px solid var(--zs-border);
|
|
82
|
+
box-shadow: 0 2px 8px var(--zs-shadow);
|
|
83
|
+
padding: 16px; min-height: 300px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Field overlay (clickable areas on preview) */
|
|
87
|
+
.field-overlay {
|
|
88
|
+
position: relative; cursor: pointer;
|
|
89
|
+
border: 2px solid transparent; border-radius: 4px;
|
|
90
|
+
transition: all 100ms; margin: -2px;
|
|
91
|
+
padding: 2px;
|
|
92
|
+
}
|
|
93
|
+
.field-overlay:hover { border-color: var(--zs-accent); background: rgba(52, 152, 219, 0.03); }
|
|
94
|
+
.field-overlay--selected { border-color: var(--zs-primary); background: rgba(230, 126, 34, 0.05); }
|
|
95
|
+
.field-overlay-label {
|
|
96
|
+
position: absolute; top: -10px; left: 8px;
|
|
97
|
+
font-size: 10px; background: var(--zs-primary); color: white;
|
|
98
|
+
padding: 1px 6px; border-radius: 3px;
|
|
99
|
+
opacity: 0; transition: opacity 100ms;
|
|
100
|
+
}
|
|
101
|
+
.field-overlay:hover .field-overlay-label,
|
|
102
|
+
.field-overlay--selected .field-overlay-label { opacity: 1; }
|
|
103
|
+
.field-overlay-actions {
|
|
104
|
+
position: absolute; top: -10px; right: 4px;
|
|
105
|
+
display: flex; gap: 2px;
|
|
106
|
+
opacity: 0; transition: opacity 100ms;
|
|
107
|
+
}
|
|
108
|
+
.field-overlay:hover .field-overlay-actions { opacity: 1; }
|
|
109
|
+
.field-overlay-btn {
|
|
110
|
+
width: 20px; height: 20px; border-radius: 3px;
|
|
111
|
+
border: none; cursor: pointer; font-size: 11px;
|
|
112
|
+
display: flex; align-items: center; justify-content: center;
|
|
113
|
+
transition: all 100ms;
|
|
114
|
+
}
|
|
115
|
+
.field-overlay-btn--move { background: var(--zs-accent); color: white; }
|
|
116
|
+
.field-overlay-btn--delete { background: var(--zs-danger); color: white; }
|
|
117
|
+
|
|
118
|
+
/* Drop zones */
|
|
119
|
+
.drop-zone {
|
|
120
|
+
border: 2px dashed var(--zs-border); border-radius: 6px;
|
|
121
|
+
padding: 20px; text-align: center; margin: 8px 0;
|
|
122
|
+
color: var(--zs-text-muted); font-size: 13px;
|
|
123
|
+
transition: all 150ms;
|
|
124
|
+
}
|
|
125
|
+
.drop-zone--active { border-color: var(--zs-primary); background: var(--zs-primary-light); color: var(--zs-primary); }
|
|
126
|
+
|
|
127
|
+
/* ─── Properties (Right) ──────────────────── */
|
|
128
|
+
.properties {
|
|
129
|
+
background: var(--zs-bg); border-left: 1px solid var(--zs-border);
|
|
130
|
+
overflow-y: auto; padding: 16px;
|
|
131
|
+
}
|
|
132
|
+
.props-title {
|
|
133
|
+
font-size: 11px; font-weight: 600; text-transform: uppercase;
|
|
134
|
+
letter-spacing: 0.5px; color: var(--zs-text-secondary);
|
|
135
|
+
margin: 16px 0 8px; padding-bottom: 4px;
|
|
136
|
+
border-bottom: 1px solid var(--zs-border);
|
|
137
|
+
}
|
|
138
|
+
.props-title:first-child { margin-top: 0; }
|
|
139
|
+
.props-row { margin-bottom: 12px; }
|
|
140
|
+
.props-label {
|
|
141
|
+
font-size: 12px; font-weight: 500; color: var(--zs-text-secondary);
|
|
142
|
+
margin-bottom: 4px; display: block;
|
|
143
|
+
}
|
|
144
|
+
.props-input {
|
|
145
|
+
width: 100%; padding: 6px 10px; border: 1px solid var(--zs-border);
|
|
146
|
+
border-radius: 4px; font-size: 13px; font-family: var(--zs-font-family);
|
|
147
|
+
background: var(--zs-bg); color: var(--zs-text);
|
|
148
|
+
outline: none; box-sizing: border-box;
|
|
149
|
+
}
|
|
150
|
+
.props-input:focus { border-color: var(--zs-primary); }
|
|
151
|
+
.props-select { height: 32px; }
|
|
152
|
+
.props-checkbox {
|
|
153
|
+
display: flex; align-items: center; gap: 6px;
|
|
154
|
+
font-size: 13px; cursor: pointer;
|
|
155
|
+
}
|
|
156
|
+
.props-checkbox input { accent-color: var(--zs-primary); }
|
|
157
|
+
.props-empty {
|
|
158
|
+
text-align: center; padding: 40px 16px;
|
|
159
|
+
color: var(--zs-text-muted); font-size: 13px;
|
|
160
|
+
}
|
|
161
|
+
.props-field-type {
|
|
162
|
+
display: inline-block; padding: 2px 8px;
|
|
163
|
+
background: var(--zs-primary-light); color: var(--zs-primary);
|
|
164
|
+
border-radius: 4px; font-size: 11px; font-weight: 600;
|
|
165
|
+
margin-bottom: 12px;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* JSON panel */
|
|
169
|
+
.json-panel {
|
|
170
|
+
font-family: 'Fira Code', 'Consolas', monospace;
|
|
171
|
+
font-size: 12px; line-height: 1.5;
|
|
172
|
+
background: #1e1e2d; color: #a2a3b7;
|
|
173
|
+
padding: 16px; border-radius: 8px;
|
|
174
|
+
overflow: auto; max-height: 400px;
|
|
175
|
+
white-space: pre; tab-size: 2;
|
|
176
|
+
}
|
|
177
|
+
`]; }
|
|
178
|
+
get selectedField() {
|
|
179
|
+
if (!this.schema || !this.selectedFieldId)
|
|
180
|
+
return null;
|
|
181
|
+
for (const section of this.schema.sections) {
|
|
182
|
+
const f = section.fields.find(f => f.id === this.selectedFieldId);
|
|
183
|
+
if (f)
|
|
184
|
+
return f;
|
|
185
|
+
}
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
get selectedSectionIndex() {
|
|
189
|
+
if (!this.schema || !this.selectedFieldId)
|
|
190
|
+
return -1;
|
|
191
|
+
return this.schema.sections.findIndex(s => s.fields.some(f => f.id === this.selectedFieldId));
|
|
192
|
+
}
|
|
193
|
+
// ─── Render ───────────────────────────────────────
|
|
194
|
+
render() {
|
|
195
|
+
return html `
|
|
196
|
+
<div class="designer">
|
|
197
|
+
${this.renderToolbox()}
|
|
198
|
+
${this.renderCanvas()}
|
|
199
|
+
${this.renderProperties()}
|
|
200
|
+
</div>
|
|
201
|
+
`;
|
|
202
|
+
}
|
|
203
|
+
// ─── Toolbox ──────────────────────────────────────
|
|
204
|
+
renderToolbox() {
|
|
205
|
+
const fields = getAllFields();
|
|
206
|
+
const categories = ['basic', 'advanced', 'data', 'media', 'layout'];
|
|
207
|
+
const categoryNames = {
|
|
208
|
+
basic: 'Basicos', advanced: 'Avanzados',
|
|
209
|
+
data: 'Datos', media: 'Media', layout: 'Layout',
|
|
210
|
+
};
|
|
211
|
+
return html `
|
|
212
|
+
<div class="toolbox">
|
|
213
|
+
${categories.map(cat => {
|
|
214
|
+
const items = fields.filter(f => f.category === cat);
|
|
215
|
+
if (items.length === 0)
|
|
216
|
+
return nothing;
|
|
217
|
+
return html `
|
|
218
|
+
<div class="toolbox-title">${categoryNames[cat] ?? cat}</div>
|
|
219
|
+
${items.map(f => html `
|
|
220
|
+
<div class="toolbox-item"
|
|
221
|
+
draggable="true"
|
|
222
|
+
@dragstart="${(e) => { this.dragType = f.type; e.dataTransfer?.setData('text/plain', f.type); }}"
|
|
223
|
+
@dragend="${() => { this.dragType = null; }}"
|
|
224
|
+
@dblclick="${() => this.addField(f.type)}"
|
|
225
|
+
>
|
|
226
|
+
<span class="toolbox-item-icon">${f.icon}</span>
|
|
227
|
+
<span class="toolbox-item-label">${f.label}</span>
|
|
228
|
+
</div>
|
|
229
|
+
`)}
|
|
230
|
+
`;
|
|
231
|
+
})}
|
|
232
|
+
</div>
|
|
233
|
+
`;
|
|
234
|
+
}
|
|
235
|
+
// ─── Canvas ───────────────────────────────────────
|
|
236
|
+
renderCanvas() {
|
|
237
|
+
return html `
|
|
238
|
+
<div class="canvas">
|
|
239
|
+
<div class="canvas-header">
|
|
240
|
+
<span class="canvas-title">${this.schema?.title || 'Sin titulo'}</span>
|
|
241
|
+
<div class="canvas-actions">
|
|
242
|
+
<button class="canvas-btn ${this.viewMode === 'design' ? 'canvas-btn--active' : ''}" @click="${() => { this.viewMode = 'design'; }}">Diseño</button>
|
|
243
|
+
<button class="canvas-btn ${this.viewMode === 'preview' ? 'canvas-btn--active' : ''}" @click="${() => { this.viewMode = 'preview'; }}">Preview</button>
|
|
244
|
+
<button class="canvas-btn ${this.viewMode === 'json' ? 'canvas-btn--active' : ''}" @click="${() => { this.viewMode = 'json'; }}">JSON</button>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
|
|
248
|
+
${this.viewMode === 'json'
|
|
249
|
+
? html `<div class="json-panel">${JSON.stringify(this.schema, null, 2)}</div>`
|
|
250
|
+
: this.viewMode === 'preview'
|
|
251
|
+
? html `<div class="preview-frame"><zentto-studio-renderer .schema="${this.schema}" .data="${this.data}"></zentto-studio-renderer></div>`
|
|
252
|
+
: this.renderDesignView()}
|
|
253
|
+
</div>
|
|
254
|
+
`;
|
|
255
|
+
}
|
|
256
|
+
renderDesignView() {
|
|
257
|
+
if (!this.schema)
|
|
258
|
+
return html `<div class="drop-zone">Arrastra campos del toolbox aqui</div>`;
|
|
259
|
+
return html `
|
|
260
|
+
<div class="preview-frame">
|
|
261
|
+
${this.schema.sections.map((section, si) => html `
|
|
262
|
+
<div style="margin-bottom:24px;">
|
|
263
|
+
${section.title ? html `<h3 style="font-size:16px;font-weight:600;margin:0 0 12px;color:var(--zs-text);border-bottom:2px solid var(--zs-primary-light);padding-bottom:6px;">${section.title}</h3>` : ''}
|
|
264
|
+
<div style="display:grid;grid-template-columns:repeat(${section.columns ?? this.schema?.layout.columns ?? 1}, 1fr);gap:12px;">
|
|
265
|
+
${section.fields.map((field, fi) => html `
|
|
266
|
+
<div class="field-overlay ${this.selectedFieldId === field.id ? 'field-overlay--selected' : ''}"
|
|
267
|
+
style="${field.colSpan ? `grid-column: span ${field.colSpan}` : ''}"
|
|
268
|
+
@click="${(e) => { e.stopPropagation(); this.selectedFieldId = field.id; }}"
|
|
269
|
+
>
|
|
270
|
+
<span class="field-overlay-label">${field.type}: ${field.id}</span>
|
|
271
|
+
<div class="field-overlay-actions">
|
|
272
|
+
${fi > 0 ? html `<button class="field-overlay-btn field-overlay-btn--move" @click="${(e) => { e.stopPropagation(); this.moveField(si, fi, -1); }}">↑</button>` : ''}
|
|
273
|
+
${fi < section.fields.length - 1 ? html `<button class="field-overlay-btn field-overlay-btn--move" @click="${(e) => { e.stopPropagation(); this.moveField(si, fi, 1); }}">↓</button>` : ''}
|
|
274
|
+
<button class="field-overlay-btn field-overlay-btn--delete" @click="${(e) => { e.stopPropagation(); this.removeField(si, fi); }}">✕</button>
|
|
275
|
+
</div>
|
|
276
|
+
<!-- Render actual field preview -->
|
|
277
|
+
<div style="pointer-events:none;opacity:0.9;">
|
|
278
|
+
<div style="font-size:12px;font-weight:500;color:var(--zs-text-secondary);margin-bottom:4px;">${field.label ?? field.id}${field.required ? ' *' : ''}</div>
|
|
279
|
+
<div style="height:36px;border:1px solid var(--zs-border);border-radius:4px;background:var(--zs-bg-secondary);display:flex;align-items:center;padding:0 10px;font-size:13px;color:var(--zs-text-muted);">${field.placeholder ?? field.type}</div>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
`)}
|
|
283
|
+
</div>
|
|
284
|
+
<!-- Drop zone at end of section -->
|
|
285
|
+
<div class="drop-zone ${this.dragType ? 'drop-zone--active' : ''}"
|
|
286
|
+
@dragover="${(e) => e.preventDefault()}"
|
|
287
|
+
@drop="${(e) => { e.preventDefault(); if (this.dragType) {
|
|
288
|
+
this.addFieldToSection(si, this.dragType);
|
|
289
|
+
this.dragType = null;
|
|
290
|
+
} }}"
|
|
291
|
+
>
|
|
292
|
+
${this.dragType ? 'Soltar aqui' : 'Arrastra un campo aqui'}
|
|
293
|
+
</div>
|
|
294
|
+
</div>
|
|
295
|
+
`)}
|
|
296
|
+
</div>
|
|
297
|
+
`;
|
|
298
|
+
}
|
|
299
|
+
// ─── Properties Panel ─────────────────────────────
|
|
300
|
+
renderProperties() {
|
|
301
|
+
const field = this.selectedField;
|
|
302
|
+
if (!field) {
|
|
303
|
+
return html `
|
|
304
|
+
<div class="properties">
|
|
305
|
+
<div class="props-empty">
|
|
306
|
+
<div style="font-size:32px;margin-bottom:8px;">👆</div>
|
|
307
|
+
Selecciona un campo para editar sus propiedades
|
|
308
|
+
</div>
|
|
309
|
+
${this.schema ? html `
|
|
310
|
+
<div class="props-title">FORMULARIO</div>
|
|
311
|
+
<div class="props-row">
|
|
312
|
+
<label class="props-label">Titulo</label>
|
|
313
|
+
<input class="props-input" .value="${this.schema.title}" @input="${(e) => { this.schema.title = e.target.value; this.emitChange(); }}" />
|
|
314
|
+
</div>
|
|
315
|
+
<div class="props-row">
|
|
316
|
+
<label class="props-label">Columnas</label>
|
|
317
|
+
<input class="props-input" type="number" min="1" max="6" .value="${String(this.schema.layout.columns ?? 1)}" @input="${(e) => { this.schema.layout.columns = parseInt(e.target.value) || 1; this.emitChange(); }}" />
|
|
318
|
+
</div>
|
|
319
|
+
` : ''}
|
|
320
|
+
</div>
|
|
321
|
+
`;
|
|
322
|
+
}
|
|
323
|
+
return html `
|
|
324
|
+
<div class="properties">
|
|
325
|
+
<span class="props-field-type">${field.type}</span>
|
|
326
|
+
|
|
327
|
+
<div class="props-title">GENERAL</div>
|
|
328
|
+
<div class="props-row">
|
|
329
|
+
<label class="props-label">ID</label>
|
|
330
|
+
<input class="props-input" .value="${field.id}" @input="${(e) => { field.id = e.target.value; this.emitChange(); }}" />
|
|
331
|
+
</div>
|
|
332
|
+
<div class="props-row">
|
|
333
|
+
<label class="props-label">Label</label>
|
|
334
|
+
<input class="props-input" .value="${field.label ?? ''}" @input="${(e) => { field.label = e.target.value; this.emitChange(); }}" />
|
|
335
|
+
</div>
|
|
336
|
+
<div class="props-row">
|
|
337
|
+
<label class="props-label">Field (binding)</label>
|
|
338
|
+
<input class="props-input" .value="${field.field}" @input="${(e) => { field.field = e.target.value; this.emitChange(); }}" />
|
|
339
|
+
</div>
|
|
340
|
+
<div class="props-row">
|
|
341
|
+
<label class="props-label">Placeholder</label>
|
|
342
|
+
<input class="props-input" .value="${field.placeholder ?? ''}" @input="${(e) => { field.placeholder = e.target.value; this.emitChange(); }}" />
|
|
343
|
+
</div>
|
|
344
|
+
<div class="props-row">
|
|
345
|
+
<label class="props-label">Help Text</label>
|
|
346
|
+
<input class="props-input" .value="${field.helpText ?? ''}" @input="${(e) => { field.helpText = e.target.value; this.emitChange(); }}" />
|
|
347
|
+
</div>
|
|
348
|
+
|
|
349
|
+
<div class="props-title">LAYOUT</div>
|
|
350
|
+
<div class="props-row">
|
|
351
|
+
<label class="props-label">Col Span</label>
|
|
352
|
+
<input class="props-input" type="number" min="1" max="6" .value="${String(field.colSpan ?? 1)}" @input="${(e) => { field.colSpan = parseInt(e.target.value) || 1; this.emitChange(); }}" />
|
|
353
|
+
</div>
|
|
354
|
+
<div class="props-row">
|
|
355
|
+
<label class="props-label">CSS Class</label>
|
|
356
|
+
<input class="props-input" .value="${field.cssClass ?? ''}" @input="${(e) => { field.cssClass = e.target.value; this.emitChange(); }}" />
|
|
357
|
+
</div>
|
|
358
|
+
|
|
359
|
+
<div class="props-title">COMPORTAMIENTO</div>
|
|
360
|
+
<div class="props-row">
|
|
361
|
+
<label class="props-checkbox"><input type="checkbox" .checked="${field.required ?? false}" @change="${(e) => { field.required = e.target.checked; this.emitChange(); }}" /> Requerido</label>
|
|
362
|
+
</div>
|
|
363
|
+
<div class="props-row">
|
|
364
|
+
<label class="props-checkbox"><input type="checkbox" .checked="${field.readOnly ?? false}" @change="${(e) => { field.readOnly = e.target.checked; this.emitChange(); }}" /> Solo lectura</label>
|
|
365
|
+
</div>
|
|
366
|
+
<div class="props-row">
|
|
367
|
+
<label class="props-checkbox"><input type="checkbox" .checked="${field.disabled ?? false}" @change="${(e) => { field.disabled = e.target.checked; this.emitChange(); }}" /> Deshabilitado</label>
|
|
368
|
+
</div>
|
|
369
|
+
<div class="props-row">
|
|
370
|
+
<label class="props-checkbox"><input type="checkbox" .checked="${field.hidden ?? false}" @change="${(e) => { field.hidden = e.target.checked; this.emitChange(); }}" /> Oculto</label>
|
|
371
|
+
</div>
|
|
372
|
+
|
|
373
|
+
<div class="props-title">REGLAS</div>
|
|
374
|
+
<div class="props-row">
|
|
375
|
+
<label class="props-label">Visibilidad (expresion)</label>
|
|
376
|
+
<input class="props-input" .value="${field.visibilityRule ?? ''}" placeholder='{role} == "admin"' @input="${(e) => { field.visibilityRule = e.target.value || undefined; this.emitChange(); }}" />
|
|
377
|
+
</div>
|
|
378
|
+
<div class="props-row">
|
|
379
|
+
<label class="props-label">Valor Computado</label>
|
|
380
|
+
<input class="props-input" .value="${field.computedValue ?? ''}" placeholder='{precio} * {cantidad}' @input="${(e) => { field.computedValue = e.target.value || undefined; this.emitChange(); }}" />
|
|
381
|
+
</div>
|
|
382
|
+
<div class="props-row">
|
|
383
|
+
<label class="props-label">Default Value</label>
|
|
384
|
+
<input class="props-input" .value="${String(field.defaultValue ?? '')}" @input="${(e) => { field.defaultValue = e.target.value || undefined; this.emitChange(); }}" />
|
|
385
|
+
</div>
|
|
386
|
+
</div>
|
|
387
|
+
`;
|
|
388
|
+
}
|
|
389
|
+
// ─── Actions ──────────────────────────────────────
|
|
390
|
+
addField(type) {
|
|
391
|
+
if (!this.schema) {
|
|
392
|
+
this.schema = {
|
|
393
|
+
id: 'new-form', version: '1.0', title: 'Nuevo Formulario',
|
|
394
|
+
layout: { type: 'grid', columns: 2 },
|
|
395
|
+
sections: [{ id: 'main', title: 'Datos', fields: [] }],
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
this.addFieldToSection(0, type);
|
|
399
|
+
}
|
|
400
|
+
addFieldToSection(sectionIndex, type) {
|
|
401
|
+
if (!this.schema)
|
|
402
|
+
return;
|
|
403
|
+
const id = `${type}_${Date.now()}`;
|
|
404
|
+
const meta = getAllFields().find(f => f.type === type);
|
|
405
|
+
const field = {
|
|
406
|
+
id,
|
|
407
|
+
type,
|
|
408
|
+
field: id,
|
|
409
|
+
label: meta?.label ?? type,
|
|
410
|
+
props: meta?.defaultProps ? { ...meta.defaultProps } : undefined,
|
|
411
|
+
};
|
|
412
|
+
this.schema.sections[sectionIndex].fields.push(field);
|
|
413
|
+
this.selectedFieldId = id;
|
|
414
|
+
this.emitChange();
|
|
415
|
+
}
|
|
416
|
+
removeField(sectionIndex, fieldIndex) {
|
|
417
|
+
if (!this.schema)
|
|
418
|
+
return;
|
|
419
|
+
const field = this.schema.sections[sectionIndex].fields[fieldIndex];
|
|
420
|
+
if (this.selectedFieldId === field.id)
|
|
421
|
+
this.selectedFieldId = null;
|
|
422
|
+
this.schema.sections[sectionIndex].fields.splice(fieldIndex, 1);
|
|
423
|
+
this.emitChange();
|
|
424
|
+
}
|
|
425
|
+
moveField(sectionIndex, fieldIndex, dir) {
|
|
426
|
+
if (!this.schema)
|
|
427
|
+
return;
|
|
428
|
+
const fields = this.schema.sections[sectionIndex].fields;
|
|
429
|
+
const newIndex = fieldIndex + dir;
|
|
430
|
+
if (newIndex < 0 || newIndex >= fields.length)
|
|
431
|
+
return;
|
|
432
|
+
[fields[fieldIndex], fields[newIndex]] = [fields[newIndex], fields[fieldIndex]];
|
|
433
|
+
this.emitChange();
|
|
434
|
+
}
|
|
435
|
+
emitChange() {
|
|
436
|
+
this.renderKey++;
|
|
437
|
+
this.requestUpdate();
|
|
438
|
+
this.dispatchEvent(new CustomEvent('schema-change', {
|
|
439
|
+
detail: { schema: structuredClone(this.schema) },
|
|
440
|
+
bubbles: true, composed: true,
|
|
441
|
+
}));
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
__decorate([
|
|
445
|
+
property({ type: Object })
|
|
446
|
+
], ZsPageDesigner.prototype, "schema", void 0);
|
|
447
|
+
__decorate([
|
|
448
|
+
property({ type: Object })
|
|
449
|
+
], ZsPageDesigner.prototype, "data", void 0);
|
|
450
|
+
__decorate([
|
|
451
|
+
state()
|
|
452
|
+
], ZsPageDesigner.prototype, "selectedFieldId", void 0);
|
|
453
|
+
__decorate([
|
|
454
|
+
state()
|
|
455
|
+
], ZsPageDesigner.prototype, "viewMode", void 0);
|
|
456
|
+
__decorate([
|
|
457
|
+
state()
|
|
458
|
+
], ZsPageDesigner.prototype, "dragType", void 0);
|
|
459
|
+
__decorate([
|
|
460
|
+
state()
|
|
461
|
+
], ZsPageDesigner.prototype, "renderKey", void 0);
|
|
462
|
+
ZsPageDesigner = __decorate([
|
|
463
|
+
customElement('zs-page-designer')
|
|
464
|
+
], ZsPageDesigner);
|
|
465
|
+
export { ZsPageDesigner };
|
|
466
|
+
//# sourceMappingURL=zs-page-designer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zs-page-designer.js","sourceRoot":"","sources":["../../src/designer/zs-page-designer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
interface AddressValue {
|
|
3
|
+
street?: string;
|
|
4
|
+
city?: string;
|
|
5
|
+
state?: string;
|
|
6
|
+
zip?: string;
|
|
7
|
+
country?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class ZsFieldAddress extends LitElement {
|
|
10
|
+
static styles: import("lit").CSSResult[];
|
|
11
|
+
fieldId: string;
|
|
12
|
+
label: string;
|
|
13
|
+
helpText: string;
|
|
14
|
+
value: AddressValue;
|
|
15
|
+
required: boolean;
|
|
16
|
+
disabled: boolean;
|
|
17
|
+
readOnly: boolean;
|
|
18
|
+
errors: string[];
|
|
19
|
+
private handleChange;
|
|
20
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
21
|
+
}
|
|
22
|
+
declare global {
|
|
23
|
+
interface HTMLElementTagNameMap {
|
|
24
|
+
'zs-field-address': ZsFieldAddress;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=zs-field-address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zs-field-address.d.ts","sourceRoot":"","sources":["../../src/fields/zs-field-address.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBACa,cAAe,SAAQ,UAAU;IAC5C,MAAM,CAAC,MAAM,4BAiBV;IAES,OAAO,SAAM;IACb,KAAK,SAAM;IACX,QAAQ,SAAM;IACE,KAAK,EAAE,YAAY,CAAM;IACxB,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACnB,MAAM,EAAE,MAAM,EAAE,CAAM;IAEjD,OAAO,CAAC,YAAY;IASpB,MAAM;CAoDP;AAED,OAAO,CAAC,MAAM,CAAC;IAAE,UAAU,qBAAqB;QAAG,kBAAkB,EAAE,cAAc,CAAC;KAAE;CAAE"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// @zentto/studio — Composite address 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 } from 'lit/decorators.js';
|
|
10
|
+
import { fieldBaseStyles } from '../styles/tokens.js';
|
|
11
|
+
let ZsFieldAddress = class ZsFieldAddress extends LitElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.fieldId = '';
|
|
15
|
+
this.label = '';
|
|
16
|
+
this.helpText = '';
|
|
17
|
+
this.value = {};
|
|
18
|
+
this.required = false;
|
|
19
|
+
this.disabled = false;
|
|
20
|
+
this.readOnly = false;
|
|
21
|
+
this.errors = [];
|
|
22
|
+
}
|
|
23
|
+
static { this.styles = [fieldBaseStyles, css `
|
|
24
|
+
:host { display: block; }
|
|
25
|
+
.zs-address-grid {
|
|
26
|
+
display: grid;
|
|
27
|
+
grid-template-columns: 1fr;
|
|
28
|
+
gap: 8px;
|
|
29
|
+
}
|
|
30
|
+
.zs-address-row {
|
|
31
|
+
display: grid;
|
|
32
|
+
gap: 8px;
|
|
33
|
+
}
|
|
34
|
+
.zs-address-row--2 { grid-template-columns: 1fr 1fr; }
|
|
35
|
+
.zs-address-row--3 { grid-template-columns: 2fr 1fr 1fr; }
|
|
36
|
+
.zs-address-mini-label {
|
|
37
|
+
font-size: 11px; color: var(--zs-text-muted);
|
|
38
|
+
margin-bottom: 2px; text-transform: uppercase; letter-spacing: 0.3px;
|
|
39
|
+
}
|
|
40
|
+
`]; }
|
|
41
|
+
handleChange(subfield, e) {
|
|
42
|
+
const input = e.target;
|
|
43
|
+
const newValue = { ...this.value, [subfield]: input.value };
|
|
44
|
+
this.dispatchEvent(new CustomEvent('field-change', {
|
|
45
|
+
detail: { fieldId: this.fieldId, value: newValue },
|
|
46
|
+
bubbles: true, composed: true,
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
render() {
|
|
50
|
+
const hasError = this.errors.length > 0;
|
|
51
|
+
const labelClass = `zs-label ${this.required ? 'zs-label--required' : ''}`;
|
|
52
|
+
const inputClass = `zs-input ${hasError ? 'zs-input--error' : ''}`;
|
|
53
|
+
return html `
|
|
54
|
+
<div class="zs-field">
|
|
55
|
+
${this.label ? html `<label class="${labelClass}">${this.label}</label>` : ''}
|
|
56
|
+
<div class="zs-address-grid">
|
|
57
|
+
<div>
|
|
58
|
+
<div class="zs-address-mini-label">Direccion</div>
|
|
59
|
+
<input class="${inputClass}" .value="${this.value.street ?? ''}"
|
|
60
|
+
placeholder="Calle, numero, piso"
|
|
61
|
+
?disabled="${this.disabled}" ?readonly="${this.readOnly}"
|
|
62
|
+
@input="${(e) => this.handleChange('street', e)}" />
|
|
63
|
+
</div>
|
|
64
|
+
<div class="zs-address-row zs-address-row--3">
|
|
65
|
+
<div>
|
|
66
|
+
<div class="zs-address-mini-label">Ciudad</div>
|
|
67
|
+
<input class="${inputClass}" .value="${this.value.city ?? ''}"
|
|
68
|
+
placeholder="Ciudad"
|
|
69
|
+
?disabled="${this.disabled}" ?readonly="${this.readOnly}"
|
|
70
|
+
@input="${(e) => this.handleChange('city', e)}" />
|
|
71
|
+
</div>
|
|
72
|
+
<div>
|
|
73
|
+
<div class="zs-address-mini-label">Estado/Provincia</div>
|
|
74
|
+
<input class="${inputClass}" .value="${this.value.state ?? ''}"
|
|
75
|
+
placeholder="Estado"
|
|
76
|
+
?disabled="${this.disabled}" ?readonly="${this.readOnly}"
|
|
77
|
+
@input="${(e) => this.handleChange('state', e)}" />
|
|
78
|
+
</div>
|
|
79
|
+
<div>
|
|
80
|
+
<div class="zs-address-mini-label">C.P.</div>
|
|
81
|
+
<input class="${inputClass}" .value="${this.value.zip ?? ''}"
|
|
82
|
+
placeholder="Codigo postal"
|
|
83
|
+
?disabled="${this.disabled}" ?readonly="${this.readOnly}"
|
|
84
|
+
@input="${(e) => this.handleChange('zip', e)}" />
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
<div>
|
|
88
|
+
<div class="zs-address-mini-label">Pais</div>
|
|
89
|
+
<input class="${inputClass}" .value="${this.value.country ?? ''}"
|
|
90
|
+
placeholder="Pais"
|
|
91
|
+
?disabled="${this.disabled}" ?readonly="${this.readOnly}"
|
|
92
|
+
@input="${(e) => this.handleChange('country', e)}" />
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
${hasError ? html `<span class="zs-error">${this.errors[0]}</span>` : ''}
|
|
96
|
+
${this.helpText && !hasError ? html `<span class="zs-help">${this.helpText}</span>` : ''}
|
|
97
|
+
</div>
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
__decorate([
|
|
102
|
+
property()
|
|
103
|
+
], ZsFieldAddress.prototype, "fieldId", void 0);
|
|
104
|
+
__decorate([
|
|
105
|
+
property()
|
|
106
|
+
], ZsFieldAddress.prototype, "label", void 0);
|
|
107
|
+
__decorate([
|
|
108
|
+
property()
|
|
109
|
+
], ZsFieldAddress.prototype, "helpText", void 0);
|
|
110
|
+
__decorate([
|
|
111
|
+
property({ type: Object })
|
|
112
|
+
], ZsFieldAddress.prototype, "value", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
property({ type: Boolean })
|
|
115
|
+
], ZsFieldAddress.prototype, "required", void 0);
|
|
116
|
+
__decorate([
|
|
117
|
+
property({ type: Boolean })
|
|
118
|
+
], ZsFieldAddress.prototype, "disabled", void 0);
|
|
119
|
+
__decorate([
|
|
120
|
+
property({ type: Boolean })
|
|
121
|
+
], ZsFieldAddress.prototype, "readOnly", void 0);
|
|
122
|
+
__decorate([
|
|
123
|
+
property({ type: Array })
|
|
124
|
+
], ZsFieldAddress.prototype, "errors", void 0);
|
|
125
|
+
ZsFieldAddress = __decorate([
|
|
126
|
+
customElement('zs-field-address')
|
|
127
|
+
], ZsFieldAddress);
|
|
128
|
+
export { ZsFieldAddress };
|
|
129
|
+
//# sourceMappingURL=zs-field-address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zs-field-address.js","sourceRoot":"","sources":["../../src/fields/zs-field-address.ts"],"names":[],"mappings":"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"}
|