@cluadwong/form-designer 0.2.0 → 0.3.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 (32) hide show
  1. package/dist/chunks/designer-ui.js +1383 -1302
  2. package/dist/chunks/renderer-core.js +1104 -1046
  3. package/dist/components/designer/FormDesigner.vue.d.ts.map +1 -1
  4. package/dist/components/designer/HelpPanel.vue.d.ts.map +1 -1
  5. package/dist/components/designer/InspectorPanel.vue.d.ts.map +1 -1
  6. package/dist/components/designer/PaletteSidebar.vue.d.ts.map +1 -1
  7. package/dist/components/designer/composables/useSchemaEdits.d.ts +5 -2
  8. package/dist/components/designer/composables/useSchemaEdits.d.ts.map +1 -1
  9. package/dist/components/designer/inspectors/FieldPInspector.vue.d.ts +9 -1
  10. package/dist/components/designer/inspectors/FieldPInspector.vue.d.ts.map +1 -1
  11. package/dist/components/designer/inspectors/ParamsFields.vue.d.ts +9 -0
  12. package/dist/components/designer/inspectors/ParamsFields.vue.d.ts.map +1 -0
  13. package/dist/components/designer/inspectors/TableInspector.vue.d.ts.map +1 -1
  14. package/dist/components/renderer-v2/FormRenderer.vue.d.ts +3 -3
  15. package/dist/components/renderer-v2/FormRenderer.vue.d.ts.map +1 -1
  16. package/dist/components/renderer-v2/GridFormRenderer.vue.d.ts +3 -3
  17. package/dist/components/renderer-v2/GridFormRenderer.vue.d.ts.map +1 -1
  18. package/dist/components/renderer-v2/GridSchemaNode.vue.d.ts +3 -3
  19. package/dist/components/renderer-v2/GridSchemaNode.vue.d.ts.map +1 -1
  20. package/dist/designer-ui.css +2 -2
  21. package/dist/index.js +24 -24
  22. package/dist/renderer-core.css +1 -1
  23. package/dist/renderer.js +25 -25
  24. package/dist/ticket-designer.css +2 -2
  25. package/dist/types/schema-v2-serialization.d.ts.map +1 -1
  26. package/dist/types/schema-v2.d.ts +36 -15
  27. package/dist/types/schema-v2.d.ts.map +1 -1
  28. package/dist/utils/date-format.d.ts +11 -5
  29. package/dist/utils/date-format.d.ts.map +1 -1
  30. package/dist/utils/node-params.d.ts +35 -0
  31. package/dist/utils/node-params.d.ts.map +1 -0
  32. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /* 以下内容内联自 renderer-core.css:设计器复用渲染内核呈现纸张与版式,必须一并加载 */
2
- .layout-html[data-v-2c9190b4]{width:100%;min-width:0}.layout-grid[data-v-3f4d7b64]{display:flex;flex-direction:column;width:100%;min-width:0;box-sizing:border-box}.layout-grid__cell--flex[data-v-3f4d7b64]{flex-wrap:wrap}.layout-grid__row[data-v-3f4d7b64]{display:grid;flex:0 0 auto;width:100%;min-width:0;box-sizing:border-box}.layout-grid__cell[data-v-3f4d7b64]{display:flex;min-width:0;min-height:0;box-sizing:border-box;overflow:hidden}.layout-grid__cell--flex>.layout-p[data-v-3f4d7b64],.layout-grid__cell--flex>.layout-text[data-v-3f4d7b64]{flex:0 1 auto;width:auto;min-width:0}.layout-grid--all[data-v-3f4d7b64],.layout-grid--outer[data-v-3f4d7b64]{border:1px solid #111827}.layout-grid--no-top[data-v-3f4d7b64]{border-top:none}.layout-grid--no-right[data-v-3f4d7b64]{border-right:none}.layout-grid--no-bottom[data-v-3f4d7b64]{border-bottom:none}.layout-grid--no-left[data-v-3f4d7b64]{border-left:none}.layout-grid--all>.layout-grid__row:not(:last-child)>.layout-grid__cell[data-v-3f4d7b64],.layout-grid--inner>.layout-grid__row:not(:last-child)>.layout-grid__cell[data-v-3f4d7b64]{border-bottom:1px solid #111827}.layout-grid--all>.layout-grid__row>.layout-grid__cell[data-v-3f4d7b64]:not(:last-child),.layout-grid--inner>.layout-grid__row>.layout-grid__cell[data-v-3f4d7b64]:not(:last-child){border-right:1px solid #111827}.layout-p[data-v-3f4d7b64]{display:flex;flex-wrap:wrap;width:100%;min-width:0;min-height:0;align-self:center;margin:0 1mm;padding:0;align-items:center;box-sizing:border-box;color:#111827;font-size:13px;line-height:1.35;white-space:pre-wrap;overflow-wrap:anywhere;outline:none}.layout-p[data-v-3f4d7b64] div{flex:1 1 100%;width:100%;min-width:0}.layout-p--inner-border[data-v-3f4d7b64] div{border-bottom:1px solid #111827}.layout-text[data-v-3f4d7b64]{display:flex;width:100%;min-width:0;min-height:0;align-self:center;margin:0;padding:0 1mm;align-items:center;box-sizing:border-box;color:#111827;font-size:13px;line-height:1.35;white-space:pre-wrap;overflow-wrap:anywhere;outline:none}.layout-p--field[data-v-3f4d7b64]{cursor:text}.layout-p--composite[data-v-3f4d7b64]{gap:1mm}.layout-p__label[data-v-3f4d7b64]{flex:0 0 auto;white-space:nowrap}.layout-p__input[data-v-3f4d7b64]{display:inline-block;flex:1 1 auto;min-width:12mm;min-height:1.35em;outline:none}.layout-p__value[data-v-3f4d7b64]{flex:1 1 auto;min-width:0;min-height:1.35em;white-space:pre-wrap;overflow-wrap:anywhere}.layout-p__line[data-v-3f4d7b64]{min-height:1.35em;width:100%;text-align:inherit;white-space:pre-wrap;overflow-wrap:anywhere}.layout-p__lines[data-v-3f4d7b64]{display:block;width:100%;outline:none;min-height:1.35em}.layout-p--underline[data-v-3f4d7b64]{border-bottom:1px solid #111827}.layout-table[data-v-3f4d7b64]{display:block;width:100%;min-width:0;box-sizing:border-box;border-collapse:collapse}.layout-table--all[data-v-3f4d7b64],.layout-table--outer[data-v-3f4d7b64]{border:1px solid #111827}.layout-table--all .layout-table__row[data-v-3f4d7b64]:not(:last-child),.layout-table--inner .layout-table__row[data-v-3f4d7b64]:not(:last-child){border-bottom:1px solid #111827}.layout-table--all .layout-table__cell[data-v-3f4d7b64]:not(:last-child),.layout-table--inner .layout-table__cell[data-v-3f4d7b64]:not(:last-child){border-right:1px solid #111827}.layout-table--all .layout-table__header[data-v-3f4d7b64],.layout-table--inner .layout-table__header[data-v-3f4d7b64]{border-bottom:1px solid #111827}.layout-table>thead[data-v-3f4d7b64],.layout-table>tbody[data-v-3f4d7b64]{display:block;width:100%}.layout-table__row[data-v-3f4d7b64]{display:grid;width:100%;min-width:0;flex:0 0 auto}.layout-table__cell[data-v-3f4d7b64]{display:flex;min-width:0;min-height:0;margin:0;padding:0 1mm;align-items:stretch;justify-content:center;box-sizing:border-box}.layout-table__header[data-v-3f4d7b64]{align-items:center;font-weight:600;text-align:center;font-size:16px}.layout-image[data-v-3f4d7b64]{max-width:100%;object-position:center}@media print{.layout-image--blank[data-v-3f4d7b64]{display:none}.layout-p--underline[data-v-3f4d7b64]{border-bottom:none}}.grid-form-canvas[data-v-f3e7b908]{height:100%;overflow:auto;padding:24px;background:#e5e7eb;box-sizing:border-box}.grid-form-canvas--bare[data-v-f3e7b908]{height:auto;padding:0;background:transparent;overflow:visible}.grid-form-paper[data-v-f3e7b908]{margin:0 auto 24px;background:#fff;box-sizing:border-box;box-shadow:0 4px 12px #0f172a24}.grid-form-band[data-v-f3e7b908]{position:absolute;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;box-sizing:border-box;overflow:hidden;font-size:12px;line-height:1.4;color:#111827}.grid-form-band__zone[data-v-f3e7b908]{min-width:0;white-space:nowrap}.grid-form-band__zone--left[data-v-f3e7b908],.grid-form-band__zone--right[data-v-f3e7b908]{overflow:hidden;text-overflow:ellipsis}.grid-form-band__zone--center[data-v-f3e7b908]{text-align:center}.grid-form-band__zone--right[data-v-f3e7b908]{text-align:right}@media print{.grid-form-canvas[data-v-f3e7b908]{height:auto;padding:0;overflow:visible;background:#fff}.grid-form-paper[data-v-f3e7b908]{margin:0;box-shadow:none;break-after:page}.grid-form-paper[data-v-f3e7b908]:last-child{break-after:auto}}.paper-viewport[data-v-2b6e9ef6]{position:relative;width:100%;height:100%;background:#e5e7eb}.paper-viewport__scaler[data-v-2b6e9ef6]{transform-origin:50% 50%;will-change:transform}.paper-viewport.is-space-pan .paper-viewport__scaler[data-v-2b6e9ef6]>*{pointer-events:none}.paper-viewport.is-space-pan[data-v-2b6e9ef6],.paper-viewport.is-space-pan .paper-viewport__scaler[data-v-2b6e9ef6]>*{cursor:grab}.paper-viewport.is-space-pan[data-v-2b6e9ef6]:active{cursor:grabbing}.paper-viewport__bar[data-v-2b6e9ef6]{position:absolute;right:12px;bottom:12px;z-index:20;display:flex;align-items:center;gap:6px;padding:4px 6px;background:#ffffffeb;border:1px solid #cbd5e1;border-radius:8px;box-shadow:0 2px 8px #0f172a1f;font-size:13px;-webkit-user-select:none;user-select:none}.paper-viewport__btn[data-v-2b6e9ef6]{min-width:26px;height:26px;padding:0 6px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#0f172a;cursor:pointer;font-size:14px;line-height:1}.paper-viewport__btn[data-v-2b6e9ef6]:hover{background:#f1f5f9}.paper-viewport__btn--text[data-v-2b6e9ef6]{font-size:12px}.paper-viewport__scale[data-v-2b6e9ef6]{min-width:44px;text-align:center;font-variant-numeric:tabular-nums;color:#334155}@media print{.paper-viewport[data-v-2b6e9ef6]{overflow:visible!important;height:auto!important;background:#fff!important}.paper-viewport__scaler[data-v-2b6e9ef6]{transform:none!important}.paper-viewport__bar[data-v-2b6e9ef6]{display:none!important}}
2
+ .layout-html[data-v-2c9190b4]{width:100%;min-width:0}.layout-grid[data-v-57df9cd1]{display:flex;flex-direction:column;width:100%;min-width:0;box-sizing:border-box}.layout-grid__cell--flex[data-v-57df9cd1]{flex-wrap:wrap}.layout-grid__row[data-v-57df9cd1]{display:grid;flex:0 0 auto;width:100%;min-width:0;box-sizing:border-box}.layout-grid__cell[data-v-57df9cd1]{display:flex;min-width:0;min-height:0;box-sizing:border-box;overflow:hidden}.layout-grid__cell--flex>.layout-p[data-v-57df9cd1],.layout-grid__cell--flex>.layout-text[data-v-57df9cd1]{flex:0 1 auto;width:auto;min-width:0}.layout-grid--all[data-v-57df9cd1],.layout-grid--outer[data-v-57df9cd1]{border:1px solid #111827}.layout-grid--no-top[data-v-57df9cd1]{border-top:none}.layout-grid--no-right[data-v-57df9cd1]{border-right:none}.layout-grid--no-bottom[data-v-57df9cd1]{border-bottom:none}.layout-grid--no-left[data-v-57df9cd1]{border-left:none}.layout-grid--all>.layout-grid__row:not(:last-child)>.layout-grid__cell[data-v-57df9cd1],.layout-grid--inner>.layout-grid__row:not(:last-child)>.layout-grid__cell[data-v-57df9cd1]{border-bottom:1px solid #111827}.layout-grid--all>.layout-grid__row>.layout-grid__cell[data-v-57df9cd1]:not(:last-child),.layout-grid--inner>.layout-grid__row>.layout-grid__cell[data-v-57df9cd1]:not(:last-child){border-right:1px solid #111827}.layout-p[data-v-57df9cd1]{display:flex;flex-wrap:wrap;width:100%;min-width:0;min-height:0;align-self:center;margin:0 1mm;padding:0;align-items:center;box-sizing:border-box;color:#111827;font-size:13px;line-height:1.35;white-space:pre-wrap;overflow-wrap:anywhere;outline:none}.layout-p[data-v-57df9cd1] div{flex:1 1 100%;width:100%;min-width:0}.layout-p--inner-border[data-v-57df9cd1] div{border-bottom:1px solid #111827}.layout-text[data-v-57df9cd1]{display:flex;width:100%;min-width:0;min-height:0;align-self:center;margin:0;padding:0 1mm;align-items:center;box-sizing:border-box;color:#111827;font-size:13px;line-height:1.35;white-space:pre-wrap;overflow-wrap:anywhere;outline:none}.layout-p--field[data-v-57df9cd1]{cursor:text}.layout-p--composite[data-v-57df9cd1]{gap:1mm}.layout-p__label[data-v-57df9cd1]{flex:0 0 auto;white-space:nowrap}.layout-p__input[data-v-57df9cd1]{display:inline-block;flex:1 1 auto;min-width:12mm;min-height:1.35em;outline:none}.layout-p__value[data-v-57df9cd1]{flex:1 1 auto;min-width:0;min-height:1.35em;white-space:pre-wrap;overflow-wrap:anywhere}.layout-p__line[data-v-57df9cd1]{min-height:1.35em;width:100%;text-align:inherit;white-space:pre-wrap;overflow-wrap:anywhere}.layout-p__lines[data-v-57df9cd1]{display:block;width:100%;outline:none;min-height:1.35em}.layout-p--underline[data-v-57df9cd1]{border-bottom:1px solid #111827}.layout-table[data-v-57df9cd1]{display:block;width:100%;min-width:0;box-sizing:border-box;border-collapse:collapse}.layout-table--all[data-v-57df9cd1],.layout-table--outer[data-v-57df9cd1]{border:1px solid #111827}.layout-table--all .layout-table__row[data-v-57df9cd1]:not(:last-child),.layout-table--inner .layout-table__row[data-v-57df9cd1]:not(:last-child){border-bottom:1px solid #111827}.layout-table--all .layout-table__cell[data-v-57df9cd1]:not(:last-child),.layout-table--inner .layout-table__cell[data-v-57df9cd1]:not(:last-child){border-right:1px solid #111827}.layout-table--all .layout-table__header[data-v-57df9cd1],.layout-table--inner .layout-table__header[data-v-57df9cd1]{border-bottom:1px solid #111827}.layout-table>thead[data-v-57df9cd1],.layout-table>tbody[data-v-57df9cd1]{display:block;width:100%}.layout-table__row[data-v-57df9cd1]{display:grid;width:100%;min-width:0;flex:0 0 auto}.layout-table__cell[data-v-57df9cd1]{display:flex;min-width:0;min-height:0;margin:0;padding:0 1mm;align-items:stretch;justify-content:center;box-sizing:border-box}.layout-table__header[data-v-57df9cd1]{align-items:center;font-weight:600;text-align:center;font-size:16px}.layout-image[data-v-57df9cd1]{max-width:100%;object-position:center}@media print{.layout-image--blank[data-v-57df9cd1]{display:none}.layout-p--underline[data-v-57df9cd1]{border-bottom:none}}.grid-form-canvas[data-v-f826627e]{height:100%;overflow:auto;padding:24px;background:#e5e7eb;box-sizing:border-box}.grid-form-canvas--bare[data-v-f826627e]{height:auto;padding:0;background:transparent;overflow:visible}.grid-form-paper[data-v-f826627e]{margin:0 auto 24px;background:#fff;box-sizing:border-box;box-shadow:0 4px 12px #0f172a24}.grid-form-band[data-v-f826627e]{position:absolute;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;box-sizing:border-box;overflow:hidden;font-size:12px;line-height:1.4;color:#111827}.grid-form-band__zone[data-v-f826627e]{min-width:0;white-space:nowrap}.grid-form-band__zone--left[data-v-f826627e],.grid-form-band__zone--right[data-v-f826627e]{overflow:hidden;text-overflow:ellipsis}.grid-form-band__zone--center[data-v-f826627e]{text-align:center}.grid-form-band__zone--right[data-v-f826627e]{text-align:right}@media print{.grid-form-canvas[data-v-f826627e]{height:auto;padding:0;overflow:visible;background:#fff}.grid-form-paper[data-v-f826627e]{margin:0;box-shadow:none;break-after:page}.grid-form-paper[data-v-f826627e]:last-child{break-after:auto}}.paper-viewport[data-v-2b6e9ef6]{position:relative;width:100%;height:100%;background:#e5e7eb}.paper-viewport__scaler[data-v-2b6e9ef6]{transform-origin:50% 50%;will-change:transform}.paper-viewport.is-space-pan .paper-viewport__scaler[data-v-2b6e9ef6]>*{pointer-events:none}.paper-viewport.is-space-pan[data-v-2b6e9ef6],.paper-viewport.is-space-pan .paper-viewport__scaler[data-v-2b6e9ef6]>*{cursor:grab}.paper-viewport.is-space-pan[data-v-2b6e9ef6]:active{cursor:grabbing}.paper-viewport__bar[data-v-2b6e9ef6]{position:absolute;right:12px;bottom:12px;z-index:20;display:flex;align-items:center;gap:6px;padding:4px 6px;background:#ffffffeb;border:1px solid #cbd5e1;border-radius:8px;box-shadow:0 2px 8px #0f172a1f;font-size:13px;-webkit-user-select:none;user-select:none}.paper-viewport__btn[data-v-2b6e9ef6]{min-width:26px;height:26px;padding:0 6px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#0f172a;cursor:pointer;font-size:14px;line-height:1}.paper-viewport__btn[data-v-2b6e9ef6]:hover{background:#f1f5f9}.paper-viewport__btn--text[data-v-2b6e9ef6]{font-size:12px}.paper-viewport__scale[data-v-2b6e9ef6]{min-width:44px;text-align:center;font-variant-numeric:tabular-nums;color:#334155}@media print{.paper-viewport[data-v-2b6e9ef6]{overflow:visible!important;height:auto!important;background:#fff!important}.paper-viewport__scaler[data-v-2b6e9ef6]{transform:none!important}.paper-viewport__bar[data-v-2b6e9ef6]{display:none!important}}
3
3
 
4
4
  /* ===== 内联自 renderer-core.css 结束 ===== */
5
- .v2-canvas-surface[data-v-deb3136c]{position:relative;width:100%;height:100%}.v2-canvas-surface--preview[data-v-deb3136c] .grid-form-canvas{padding:24px}.v2-canvas-surface[data-v-deb3136c] .is-design-selected{position:relative;z-index:2;background-color:#2563eb1f!important;box-shadow:inset 0 0 0 2px #2563eb!important}.v2-canvas-surface[data-v-deb3136c] .v2-drop-target{outline:2px dashed #2563eb;outline-offset:-2px;background:#eff6ff}.v2-insertion-line[data-v-deb3136c]{height:2px;background:#2563eb;box-shadow:0 0 0 1px #2563eb66;border-radius:1px;pointer-events:none;z-index:5}@media print{.v2-canvas-surface[data-v-deb3136c] .is-design-selected{background-color:transparent!important;box-shadow:none!important}.v2-canvas-surface[data-v-deb3136c] .v2-drop-target{outline:none!important;background:transparent!important}.v2-canvas-surface .v2-insertion-line[data-v-deb3136c]{display:none!important}}.status-bar[data-v-e5a749ea]{display:flex;align-items:center;justify-content:space-between;padding:0 16px;background:#1f2937;color:#d1d5db;font-size:12px;height:28px}.status-group[data-v-e5a749ea]{display:flex;align-items:center;gap:16px}.status-item[data-v-e5a749ea]{display:inline-flex;align-items:center;gap:4px}.status-item strong[data-v-e5a749ea]{color:#f9fafb}.warning-count.has-warning[data-v-e5a749ea]{color:#fbbf24}.warning-count.has-warning strong[data-v-e5a749ea]{color:#f59e0b}.muted[data-v-e5a749ea]{color:#6b7280}@media print{.status-bar[data-v-e5a749ea]{display:none!important}}.v2-toolbar__dirty[data-v-71ae7003]{padding:1px 8px;border-radius:10px;color:#94a3b8;background:#ffffff14;font-size:11px}.v2-toolbar__dirty--on[data-v-71ae7003]{color:#fde68a;background:#fde68a2e}.v2-toolbar__label[data-v-71ae7003]{align-self:center;margin-right:2px;font-size:12px;color:#9fb3c8}.v2-tree-row[data-v-10a2a207]{display:flex;align-items:center;gap:4px;padding:3px 6px;font-size:12px;line-height:1.5;color:#334155;cursor:pointer;border-radius:3px;-webkit-user-select:none;user-select:none}.v2-tree-row[data-v-10a2a207]:hover{background:#f1f5f9}.v2-tree-row--selected[data-v-10a2a207]{background:#dbeafe;color:#1d4ed8;font-weight:600}.v2-tree-toggle[data-v-10a2a207]{flex:0 0 auto;width:16px;height:16px;padding:0;border:none;background:transparent;color:#64748b;font-size:10px;line-height:16px;cursor:pointer}.v2-tree-dot[data-v-10a2a207]{flex:0 0 auto;width:16px;text-align:center;color:#cbd5e1}.v2-tree-label[data-v-10a2a207]{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v2-tree-type[data-v-10a2a207]{flex:0 0 auto;font-size:10px;color:#94a3b8;background:#f8fafc;border:1px solid #e2e8f0;border-radius:3px;padding:0 4px}.v2-sidebar__heading[data-v-91a9dac6]{margin-bottom:14px;color:#334155;font-size:13px;font-weight:700}.v2-sidebar__heading--tree[data-v-91a9dac6]{margin-top:16px;margin-bottom:8px;padding-top:12px;border-top:1px solid #e2e8f0}.v2-tree-head[data-v-91a9dac6]{display:flex;align-items:center;justify-content:space-between}.v2-tree__delete[data-v-91a9dac6]{padding:3px 8px;border:1px solid #fca5a5;border-radius:4px;color:#b91c1c;background:#fff7f7;font-size:12px;font-weight:500;cursor:pointer}.v2-tree__delete[data-v-91a9dac6]:hover:not(:disabled){background:#fee2e2}.v2-tree__delete[data-v-91a9dac6]:disabled{opacity:.45;cursor:not-allowed}.v2-tree__buttons[data-v-91a9dac6]{display:flex;gap:8px;margin-top:8px}.v2-tree__btn[data-v-91a9dac6]{flex:1 1 0;padding:5px 0;border:1px solid #cbd5e1;border-radius:4px;color:#334155;background:#f8fafc;font-size:12px;cursor:pointer}.v2-tree__btn[data-v-91a9dac6]:hover{background:#eef2f7}.v2-tree[data-v-91a9dac6]{max-height:42vh;overflow:auto;border:1px solid #e2e8f0;border-radius:4px;padding:4px 2px;background:#fcfdff}.v2-palette-item[data-v-91a9dac6]{display:block;width:100%;margin-bottom:8px;padding:9px 10px;border:1px solid #d8dee8;border-radius:4px;color:#334155;background:#f8fafc;font-size:12px}.v2-palette-item--button[data-v-91a9dac6]{text-align:left;cursor:pointer}.v2-palette-item--button[data-v-91a9dac6]:disabled{cursor:not-allowed;opacity:.45}.v2-sidebar__group-title[data-v-91a9dac6]{margin:16px 0 8px;padding-left:8px;border-left:3px solid #2563eb;color:#1e293b;font-size:12px;font-weight:700}.v2-sidebar__group-title[data-v-91a9dac6]:first-child{margin-top:0}.v2-col-table[data-v-6aacc8cd]{border:1px solid #e2e8f0;border-radius:6px;overflow:hidden}.v2-col-table__row[data-v-6aacc8cd]{display:grid;grid-template-columns:1fr 1fr 32px;align-items:center;gap:0;border-bottom:1px solid #f1f5f9}.v2-col-table__row[data-v-6aacc8cd]:last-child{border-bottom:none}.v2-col-table__head[data-v-6aacc8cd]{background:#f8fafc;border-bottom:1px solid #e2e8f0!important}.v2-col-table__th[data-v-6aacc8cd]{padding:6px 10px;font-size:11px;font-weight:700;color:#64748b;text-transform:none}.v2-col-table__th--action[data-v-6aacc8cd]{padding:6px 4px}.v2-col-table__input[data-v-6aacc8cd]{width:100%;min-height:32px;padding:4px 8px;border:none;border-right:1px solid #f1f5f9;background:#fff;font-size:12px;color:#1e293b;outline:none;box-sizing:border-box}.v2-col-table__input[data-v-6aacc8cd]:focus{background:#eff6ff;box-shadow:inset 0 0 0 1px #93c5fd}.v2-col-table__input--mono[data-v-6aacc8cd]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;color:#475569}.v2-inspector__delete[data-v-6aacc8cd]{margin-left:auto;padding:4px 8px;border:1px solid #fca5a5;border-radius:4px;color:#b91c1c;background:#fff7f7;font-size:12px;cursor:pointer}.v2-inspector__delete[data-v-6aacc8cd]:hover:not(:disabled){background:#fee2e2}.v2-inspector__delete[data-v-6aacc8cd]:disabled{opacity:.45;cursor:not-allowed}.v2-inspector__delete--small[data-v-6aacc8cd]{padding:2px 8px;font-size:11px}.v2-add-col[data-v-6aacc8cd]{width:100%;margin-top:8px;border-color:#93c5fd;color:#1d4ed8;background:#eff6ff}.v2-add-col[data-v-6aacc8cd]:hover{background:#dbeafe}.v2-issues[data-v-1f696812]{margin-top:18px;padding:10px;border:1px solid #f0b7b7;border-radius:4px;color:#991b1b;background:#fff5f5;font-size:12px}.v2-issues--ok[data-v-1f696812]{border-color:#b7dfc5;color:#166534;background:#f0fdf4}.v2-issue[data-v-1f696812]{margin-top:6px;line-height:1.45}.v2-issue--selectable[data-v-1f696812]{cursor:pointer}.v2-issue--selectable[data-v-1f696812]:hover{color:#1d4ed8;text-decoration:underline}.v2-sidebar--right[data-v-b0930d9c]{border-right:0;border-left:1px solid #d8dee8}.v2-inspector-row[data-v-b0930d9c]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;color:#64748b;font-size:12px}.v2-inspector-row--head[data-v-b0930d9c]{position:sticky;top:0;padding-bottom:10px;border-bottom:1px solid #e2e8f0;background:#fff}.v2-inspector-row code[data-v-b0930d9c]{max-width:150px;overflow:hidden;color:#334155;text-overflow:ellipsis;white-space:nowrap}.v2-help[data-v-3f47c5df]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;background:#0f172a73}.v2-help__panel[data-v-3f47c5df]{display:flex;flex-direction:column;width:min(760px,calc(100vw - 48px));max-height:min(86vh,900px);border-radius:8px;background:#fff;box-shadow:0 20px 60px #0f172a40;overflow:hidden}.v2-help__head[data-v-3f47c5df]{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;padding:12px 18px;border-bottom:1px solid #e2e8f0}.v2-help__head h2[data-v-3f47c5df]{margin:0;color:#1e293b;font-size:15px;font-weight:700}.v2-help__close[data-v-3f47c5df]{padding:2px 8px;border:1px solid #cbd5e1;border-radius:4px;color:#475569;background:#f8fafc;font-size:13px;line-height:1.4;cursor:pointer}.v2-help__close[data-v-3f47c5df]:hover{background:#eef2f7}.v2-help__body[data-v-3f47c5df]{padding:6px 18px 18px;overflow-y:auto;color:#334155;font-size:13px;line-height:1.7}.v2-help__body h3[data-v-3f47c5df]{margin:16px 0 6px;padding-left:8px;border-left:3px solid #2563eb;color:#1e293b;font-size:13px;font-weight:700}.v2-help__body p[data-v-3f47c5df]{margin:4px 0}.v2-help__body ul[data-v-3f47c5df],.v2-help__body ol[data-v-3f47c5df]{margin:4px 0;padding-left:20px}.v2-help__body li[data-v-3f47c5df]{margin:2px 0}.v2-help__body table[data-v-3f47c5df]{width:100%;margin:6px 0;border:1px solid #e2e8f0;border-collapse:collapse}.v2-help__body th[data-v-3f47c5df],.v2-help__body td[data-v-3f47c5df]{padding:4px 8px;border:1px solid #e2e8f0;text-align:left;vertical-align:top;font-weight:400}.v2-help__body th[data-v-3f47c5df]{width:34%;color:#1e293b;background:#f8fafc;font-weight:600;white-space:nowrap}.v2-help__tip[data-v-3f47c5df]{margin-top:6px!important;padding:6px 10px;border-radius:4px;background:#eff6ff}@media print{.v2-help[data-v-3f47c5df]{display:none!important}}.v2-toolbar{display:flex;align-items:center;gap:18px;padding:0 18px;color:#f8fafc;background:#172033;overflow-x:auto}.v2-toolbar>*{flex-shrink:0}.v2-toolbar__group{display:flex;gap:6px}.v2-toolbar__group:last-of-type{margin-left:auto}.v2-toolbar__button{height:28px;padding:0 12px;border:1px solid #4c6484;border-radius:4px;color:#f8fafc;background:#263957;cursor:pointer;font-size:12px;white-space:nowrap}.v2-toolbar__button:disabled{cursor:not-allowed;opacity:.4}.v2-toolbar__button--active{border-color:#60a5fa;background:#1d4ed8}.v2-toolbar--row{background:#fff}.v2-sidebar{min-width:0;padding:16px;overflow:auto;background:#fff;border-right:1px solid #d8dee8}.v2-sidebar__subheading{margin:16px 0 8px;color:#64748b;font-size:11px;font-weight:700}.v2-sidebar__hint{margin:18px 2px 0;color:#64748b;font-size:11px;line-height:1.6}.v2-control{display:flex;flex-direction:column;gap:6px;margin:14px 0;color:#475569;font-size:12px}.v2-control input,.v2-control select{width:100%;min-height:30px;padding:0 8px;border:1px solid #cbd5e1;border-radius:4px;box-sizing:border-box;color:#1e293b;background:#fff;font-size:12px}.v2-control input[type=checkbox]{width:16px;min-height:16px;height:16px;margin:0;padding:0;border:none;background:transparent;align-self:flex-start;accent-color:#2563eb;cursor:pointer}.v2-control--inline{flex-direction:column;align-items:stretch;gap:6px;margin:0}.v2-control--toggle{flex-direction:row;align-items:center;gap:6px;margin:14px 0 0}.v2-control--toggle span{color:#475569;font-size:12px}.v2-control--full{grid-column:1 / -1}.v2-grid-dimensions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.v2-grid-dimensions .v2-control{margin:0}.v2-style-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;margin-bottom:4px}.v2-style-grid .v2-control{margin-bottom:0}.v2-style-grid .v2-control--inline input[type=color]{width:100%;height:26px;padding:0;border:1px solid #cbd5e1;border-radius:3px;background:#fff}.v2-textarea{width:100%;min-height:30px;padding:6px 8px;border:1px solid #cbd5e1;border-radius:4px;box-sizing:border-box;color:#1e293b;background:#fff;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}.v2-hint{margin:-6px 0 12px;color:#64748b;font-size:11px;line-height:1.6}.v2-hint code{padding:1px 4px;border-radius:3px;background:#f1f5f9;font-size:11px}@media print{.v2-toolbar,.v2-sidebar{display:none!important}}.v2-designer[data-v-c31c7c34]{display:grid;grid-template-rows:48px minmax(0,1fr) 28px;height:var(--v2-designer-height, 100%);min-height:0;overflow:hidden;background:#f3f4f6}.v2-toolbar__file[data-v-c31c7c34]{display:none}.v2-designer__body[data-v-c31c7c34]{display:grid;grid-template-columns:360px minmax(0,1fr) 360px;min-height:0}.v2-canvas[data-v-c31c7c34]{min-width:0;overflow:hidden}@media print{[data-v-c31c7c34] .status-bar{display:none!important}.v2-designer[data-v-c31c7c34],.v2-designer__body[data-v-c31c7c34],.v2-canvas[data-v-c31c7c34]{display:block;height:auto;overflow:visible}}
5
+ .v2-canvas-surface[data-v-deb3136c]{position:relative;width:100%;height:100%}.v2-canvas-surface--preview[data-v-deb3136c] .grid-form-canvas{padding:24px}.v2-canvas-surface[data-v-deb3136c] .is-design-selected{position:relative;z-index:2;background-color:#2563eb1f!important;box-shadow:inset 0 0 0 2px #2563eb!important}.v2-canvas-surface[data-v-deb3136c] .v2-drop-target{outline:2px dashed #2563eb;outline-offset:-2px;background:#eff6ff}.v2-insertion-line[data-v-deb3136c]{height:2px;background:#2563eb;box-shadow:0 0 0 1px #2563eb66;border-radius:1px;pointer-events:none;z-index:5}@media print{.v2-canvas-surface[data-v-deb3136c] .is-design-selected{background-color:transparent!important;box-shadow:none!important}.v2-canvas-surface[data-v-deb3136c] .v2-drop-target{outline:none!important;background:transparent!important}.v2-canvas-surface .v2-insertion-line[data-v-deb3136c]{display:none!important}}.status-bar[data-v-e5a749ea]{display:flex;align-items:center;justify-content:space-between;padding:0 16px;background:#1f2937;color:#d1d5db;font-size:12px;height:28px}.status-group[data-v-e5a749ea]{display:flex;align-items:center;gap:16px}.status-item[data-v-e5a749ea]{display:inline-flex;align-items:center;gap:4px}.status-item strong[data-v-e5a749ea]{color:#f9fafb}.warning-count.has-warning[data-v-e5a749ea]{color:#fbbf24}.warning-count.has-warning strong[data-v-e5a749ea]{color:#f59e0b}.muted[data-v-e5a749ea]{color:#6b7280}@media print{.status-bar[data-v-e5a749ea]{display:none!important}}.v2-toolbar__dirty[data-v-71ae7003]{padding:1px 8px;border-radius:10px;color:#94a3b8;background:#ffffff14;font-size:11px}.v2-toolbar__dirty--on[data-v-71ae7003]{color:#fde68a;background:#fde68a2e}.v2-toolbar__label[data-v-71ae7003]{align-self:center;margin-right:2px;font-size:12px;color:#9fb3c8}.v2-tree-row[data-v-10a2a207]{display:flex;align-items:center;gap:4px;padding:3px 6px;font-size:12px;line-height:1.5;color:#334155;cursor:pointer;border-radius:3px;-webkit-user-select:none;user-select:none}.v2-tree-row[data-v-10a2a207]:hover{background:#f1f5f9}.v2-tree-row--selected[data-v-10a2a207]{background:#dbeafe;color:#1d4ed8;font-weight:600}.v2-tree-toggle[data-v-10a2a207]{flex:0 0 auto;width:16px;height:16px;padding:0;border:none;background:transparent;color:#64748b;font-size:10px;line-height:16px;cursor:pointer}.v2-tree-dot[data-v-10a2a207]{flex:0 0 auto;width:16px;text-align:center;color:#cbd5e1}.v2-tree-label[data-v-10a2a207]{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v2-tree-type[data-v-10a2a207]{flex:0 0 auto;font-size:10px;color:#94a3b8;background:#f8fafc;border:1px solid #e2e8f0;border-radius:3px;padding:0 4px}.v2-sidebar__heading[data-v-e580095e]{margin-bottom:14px;color:#334155;font-size:13px;font-weight:700}.v2-sidebar__heading--tree[data-v-e580095e]{margin-top:16px;margin-bottom:8px;padding-top:12px;border-top:1px solid #e2e8f0}.v2-tree-head[data-v-e580095e]{display:flex;align-items:center;justify-content:space-between}.v2-tree__delete[data-v-e580095e]{padding:3px 8px;border:1px solid #fca5a5;border-radius:4px;color:#b91c1c;background:#fff7f7;font-size:12px;font-weight:500;cursor:pointer}.v2-tree__delete[data-v-e580095e]:hover:not(:disabled){background:#fee2e2}.v2-tree__delete[data-v-e580095e]:disabled{opacity:.45;cursor:not-allowed}.v2-tree__buttons[data-v-e580095e]{display:flex;gap:8px;margin-top:8px}.v2-tree__btn[data-v-e580095e]{flex:1 1 0;padding:5px 0;border:1px solid #cbd5e1;border-radius:4px;color:#334155;background:#f8fafc;font-size:12px;cursor:pointer}.v2-tree__btn[data-v-e580095e]:hover{background:#eef2f7}.v2-tree[data-v-e580095e]{max-height:42vh;overflow:auto;border:1px solid #e2e8f0;border-radius:4px;padding:4px 2px;background:#fcfdff}.v2-palette-item[data-v-e580095e]{display:block;width:100%;margin-bottom:8px;padding:9px 10px;border:1px solid #d8dee8;border-radius:4px;color:#334155;background:#f8fafc;font-size:12px}.v2-palette-item--button[data-v-e580095e]{text-align:left;cursor:pointer}.v2-palette-item--button[data-v-e580095e]:disabled{cursor:not-allowed;opacity:.45}.v2-sidebar__group-title[data-v-e580095e]{margin:16px 0 8px;padding-left:8px;border-left:3px solid #2563eb;color:#1e293b;font-size:12px;font-weight:700}.v2-sidebar__group-title[data-v-e580095e]:first-child{margin-top:0}.v2-issues[data-v-1f696812]{margin-top:18px;padding:10px;border:1px solid #f0b7b7;border-radius:4px;color:#991b1b;background:#fff5f5;font-size:12px}.v2-issues--ok[data-v-1f696812]{border-color:#b7dfc5;color:#166534;background:#f0fdf4}.v2-issue[data-v-1f696812]{margin-top:6px;line-height:1.45}.v2-issue--selectable[data-v-1f696812]{cursor:pointer}.v2-issue--selectable[data-v-1f696812]:hover{color:#1d4ed8;text-decoration:underline}.v2-sidebar--right[data-v-06c2cbdb]{border-right:0;border-left:1px solid #d8dee8}.v2-inspector-row[data-v-06c2cbdb]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;color:#64748b;font-size:12px}.v2-inspector-row--head[data-v-06c2cbdb]{position:sticky;top:0;padding-bottom:10px;border-bottom:1px solid #e2e8f0;background:#fff}.v2-inspector-row code[data-v-06c2cbdb]{max-width:150px;overflow:hidden;color:#334155;text-overflow:ellipsis;white-space:nowrap}.v2-help[data-v-e521f73b]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;background:#0f172a73}.v2-help__panel[data-v-e521f73b]{display:flex;flex-direction:column;width:min(760px,calc(100vw - 48px));max-height:min(86vh,900px);border-radius:8px;background:#fff;box-shadow:0 20px 60px #0f172a40;overflow:hidden}.v2-help__head[data-v-e521f73b]{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;padding:12px 18px;border-bottom:1px solid #e2e8f0}.v2-help__head h2[data-v-e521f73b]{margin:0;color:#1e293b;font-size:15px;font-weight:700}.v2-help__close[data-v-e521f73b]{padding:2px 8px;border:1px solid #cbd5e1;border-radius:4px;color:#475569;background:#f8fafc;font-size:13px;line-height:1.4;cursor:pointer}.v2-help__close[data-v-e521f73b]:hover{background:#eef2f7}.v2-help__body[data-v-e521f73b]{padding:6px 18px 18px;overflow-y:auto;color:#334155;font-size:13px;line-height:1.7}.v2-help__body h3[data-v-e521f73b]{margin:16px 0 6px;padding-left:8px;border-left:3px solid #2563eb;color:#1e293b;font-size:13px;font-weight:700}.v2-help__body p[data-v-e521f73b]{margin:4px 0}.v2-help__body ul[data-v-e521f73b],.v2-help__body ol[data-v-e521f73b]{margin:4px 0;padding-left:20px}.v2-help__body li[data-v-e521f73b]{margin:2px 0}.v2-help__body table[data-v-e521f73b]{width:100%;margin:6px 0;border:1px solid #e2e8f0;border-collapse:collapse}.v2-help__body th[data-v-e521f73b],.v2-help__body td[data-v-e521f73b]{padding:4px 8px;border:1px solid #e2e8f0;text-align:left;vertical-align:top;font-weight:400}.v2-help__body th[data-v-e521f73b]{width:34%;color:#1e293b;background:#f8fafc;font-weight:600;white-space:nowrap}.v2-help__tip[data-v-e521f73b]{margin-top:6px!important;padding:6px 10px;border-radius:4px;background:#eff6ff}@media print{.v2-help[data-v-e521f73b]{display:none!important}}.v2-toolbar{display:flex;align-items:center;gap:18px;padding:0 18px;color:#f8fafc;background:#172033;overflow-x:auto}.v2-toolbar>*{flex-shrink:0}.v2-toolbar__group{display:flex;gap:6px}.v2-toolbar__group:last-of-type{margin-left:auto}.v2-toolbar__button{height:28px;padding:0 12px;border:1px solid #4c6484;border-radius:4px;color:#f8fafc;background:#263957;cursor:pointer;font-size:12px;white-space:nowrap}.v2-toolbar__button:disabled{cursor:not-allowed;opacity:.4}.v2-toolbar__button--active{border-color:#60a5fa;background:#1d4ed8}.v2-toolbar--row{background:#fff}.v2-sidebar{min-width:0;padding:16px;overflow:auto;background:#fff;border-right:1px solid #d8dee8}.v2-sidebar__subheading{margin:16px 0 8px;color:#64748b;font-size:11px;font-weight:700}.v2-sidebar__hint{margin:18px 2px 0;color:#64748b;font-size:11px;line-height:1.6}.v2-control{display:flex;flex-direction:column;gap:6px;margin:14px 0;color:#475569;font-size:12px}.v2-control input,.v2-control select{width:100%;min-height:30px;padding:0 8px;border:1px solid #cbd5e1;border-radius:4px;box-sizing:border-box;color:#1e293b;background:#fff;font-size:12px}.v2-control input[type=checkbox]{width:16px;min-height:16px;height:16px;margin:0;padding:0;border:none;background:transparent;align-self:flex-start;accent-color:#2563eb;cursor:pointer}.v2-control--inline{flex-direction:column;align-items:stretch;gap:6px;margin:0}.v2-control--toggle{flex-direction:row;align-items:center;gap:6px;margin:14px 0 0}.v2-control--toggle span{color:#475569;font-size:12px}.v2-control--full{grid-column:1 / -1}.v2-grid-dimensions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.v2-grid-dimensions .v2-control{margin:0}.v2-style-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;margin-bottom:4px}.v2-style-grid .v2-control{margin-bottom:0}.v2-style-grid .v2-control--inline input[type=color]{width:100%;height:26px;padding:0;border:1px solid #cbd5e1;border-radius:3px;background:#fff}.v2-textarea{width:100%;min-height:30px;padding:6px 8px;border:1px solid #cbd5e1;border-radius:4px;box-sizing:border-box;color:#1e293b;background:#fff;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}.v2-hint{margin:-6px 0 12px;color:#64748b;font-size:11px;line-height:1.6}.v2-hint code{padding:1px 4px;border-radius:3px;background:#f1f5f9;font-size:11px}.v2-hint--warn{color:#b91c1c}.v2-col-table{border:1px solid #e2e8f0;border-radius:6px;overflow:hidden}.v2-col-table__row{display:grid;grid-template-columns:1fr 1fr 32px;align-items:center;gap:0;border-bottom:1px solid #f1f5f9}.v2-col-table__row:last-child{border-bottom:none}.v2-col-table__head{background:#f8fafc;border-bottom:1px solid #e2e8f0!important}.v2-col-table__th{padding:6px 10px;font-size:11px;font-weight:700;color:#64748b;text-transform:none}.v2-col-table__th--action{padding:6px 4px}.v2-col-table__input{width:100%;min-height:32px;padding:4px 8px;border:none;border-right:1px solid #f1f5f9;background:#fff;font-size:12px;color:#1e293b;outline:none;box-sizing:border-box}.v2-col-table__input:focus{background:#eff6ff;box-shadow:inset 0 0 0 1px #93c5fd}.v2-col-table__input--mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;color:#475569}.v2-col-table__input--invalid{color:#b91c1c;background:#fff7f7}.v2-inspector__delete{margin-left:auto;padding:4px 8px;border:1px solid #fca5a5;border-radius:4px;color:#b91c1c;background:#fff7f7;font-size:12px;cursor:pointer}.v2-inspector__delete:hover:not(:disabled){background:#fee2e2}.v2-inspector__delete:disabled{opacity:.45;cursor:not-allowed}.v2-inspector__delete--small{padding:2px 8px;font-size:11px}.v2-add-col{width:100%;margin-top:8px;border-color:#93c5fd;color:#1d4ed8;background:#eff6ff}.v2-add-col:hover{background:#dbeafe}@media print{.v2-toolbar,.v2-sidebar{display:none!important}}.v2-designer[data-v-11f35b10]{display:grid;grid-template-rows:48px minmax(0,1fr) 28px;height:var(--v2-designer-height, 100%);min-height:0;overflow:hidden;background:#f3f4f6}.v2-toolbar__file[data-v-11f35b10]{display:none}.v2-designer__body[data-v-11f35b10]{display:grid;grid-template-columns:360px minmax(0,1fr) 360px;min-height:0}.v2-canvas[data-v-11f35b10]{min-width:0;overflow:hidden}@media print{[data-v-11f35b10] .status-bar{display:none!important}.v2-designer[data-v-11f35b10],.v2-designer__body[data-v-11f35b10],.v2-canvas[data-v-11f35b10]{display:block;height:auto;overflow:visible}}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-v2-serialization.d.ts","sourceRoot":"","sources":["../../src/types/schema-v2-serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,aAAa,EAAO;CAK1D;AA4FD,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CA4ClE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,UAAQ,GAAG,MAAM,CAKlF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,CAcvE;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,CAwChF"}
1
+ {"version":3,"file":"schema-v2-serialization.d.ts","sourceRoot":"","sources":["../../src/types/schema-v2-serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,aAAa,EAAO;CAK1D;AAyKD,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CA4ClE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,UAAQ,GAAG,MAAM,CAKlF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,CAcvE;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,CAwChF"}
@@ -72,8 +72,23 @@ export interface TextStyleV2 {
72
72
  /** 字体族(CSS font-family)。 */
73
73
  fontFamily?: string;
74
74
  }
75
+ /**
76
+ * 通用「额外属性」(params):键值对,设计器配置、渲染时**原样落到该节点根元素的 HTML 属性**上。
77
+ *
78
+ * 内核**不解释任何键**——「这些属性怎么消费」是宿主的职责(2026-09-15 用户拍板):
79
+ * 宿主可在填写态扫描 `[data-field]` 或自定义属性(如 `action` / `date-validate`)自行接管
80
+ * 交互与跨字段校验。这是「内核只做表单设计、不碰业务」的落点:内核只负责把设计态写下的
81
+ * 属性透传到 DOM,不引入任何业务词表。
82
+ *
83
+ * 安全:渲染前统一经黑名单过滤(`on*` 事件、`data-*` 内核寻址、`class`/`style`/`id` 等保留属性、
84
+ * 以及非「小写字母开头 + 小写字母/数字/短横线」的属性名一律丢弃),实现见
85
+ * `src/utils/node-params.ts`(含单测)。空串值与空对象不写属性。
86
+ */
87
+ export type NodeParamsV2 = Record<string, string>;
75
88
  export interface SchemaNodeBaseV2 {
76
89
  id: string;
90
+ /** 通用额外属性:渲染时作为 HTML 属性插入本节点根标签;内核不解释键(见 `NodeParamsV2`)。 */
91
+ params?: NodeParamsV2;
77
92
  }
78
93
  /**
79
94
  * 固定文字节点(text 类型,标题 / 标签 / 说明等)。
@@ -93,11 +108,17 @@ export interface FieldPNodeV2 extends SchemaNodeBaseV2 {
93
108
  prefix?: string;
94
109
  /** Optional inline label rendered after the input area. */
95
110
  suffix?: string;
96
- /** 外部组件触发类型(选项值):由宿主弹窗调用、在回调里把数据回写 data 再渲染到票面上。
97
- * text=无(纯文本输入)、date=日期选择器、signature=签名板、upload=文件上传。 */
98
- action?: "text" | "date" | "signature" | "upload";
99
- /** 外部组件的额外参数(含义由 `action` 决定,如 date 的 `format`)。 */
100
- actionParams?: Record<string, string>;
111
+ /**
112
+ * 可点击触发(原 `action` 闭枚举收敛出的 1 bit,2026-09-15 用户拍板):为 `true` 时渲染内核在
113
+ * **填写态**由**点击字段元素本身** emit `field-activate`,把触发权交还宿主。
114
+ *
115
+ * 内核只持有这 1 bit(「要不要绑点击、发不发事件」),**不持有控件类型词表**——「是日期选择器
116
+ * 还是时间选择器」等开放集由 `params` 表达(如 `params.action = "datePicker"`),
117
+ * 内核原样透传、不认识其值。故新增宿主控件类型零内核改动。
118
+ *
119
+ * 缺省 / `false`:不触发(传统纸类表单的普通输入框,仅就地输入)。
120
+ */
121
+ interactive?: boolean;
101
122
  underline?: boolean;
102
123
  webUnderline?: boolean;
103
124
  printUnderline?: boolean;
@@ -134,21 +155,21 @@ export interface FieldRuleV2 {
134
155
  required?: boolean;
135
156
  }
136
157
  /**
137
- * 专用控件触发事件契约(P9.1c):字段 P 配置了 `action`(非 text)时,渲染内核在
138
- * **填写态**(canFill)由**点击字段元素本身**触发(表单不加任何额外按钮),经
139
- * `action-trigger` 事件把触发权交还宿主——**宿主负责召唤外部输入组件(弹窗/选择器)并在
140
- * 回调里回写 data**(与 data 同轨,回写后票面自动重渲染)。内核不做任何弹窗实现
141
- * (分层:内核不认识宿主 UI)。
158
+ * 字段触发事件契约:字段配置 `interactive: true` 时,渲染内核在**填写态**(canFill)由
159
+ * **点击字段元素本身**触发(表单不加任何额外按钮),经 `field-activate` 事件把触发权交还
160
+ * 宿主——**宿主负责召唤外部输入组件(弹窗/选择器)并在回调里回写 data**(与 data 同轨,
161
+ * 回写后票面自动重渲染)。
162
+ *
163
+ * 分层:内核不做任何弹窗实现,**也不解释 `params` 的键**(内核不认识宿主 UI 与业务约定);
164
+ * 宿主从 `params` 自取所需(如 `params.action` 决定弹哪个选择器、`params.format` 决定显示格式)。
142
165
  */
143
- export interface FieldActionTriggerV2 {
166
+ export interface FieldActivateV2 {
144
167
  /** 触发源字段节点 id。 */
145
168
  nodeId: string;
146
169
  /** 字段名(宿主回写 data 的键)。 */
147
170
  field: string;
148
- /** 外部组件类型。 */
149
- action: NonNullable<FieldPNodeV2["action"]>;
150
- /** 外部组件额外参数(含义由 action 决定,如 date 的 format)。 */
151
- actionParams?: Record<string, string>;
171
+ /** 该字段的额外属性(原样透传,含义由宿主约定)。 */
172
+ params?: NodeParamsV2;
152
173
  }
153
174
  export interface GridNodeV2 extends SchemaNodeBaseV2 {
154
175
  type: "grid";
@@ -1 +1 @@
1
- {"version":3,"file":"schema-v2.d.ts","sourceRoot":"","sources":["../../src/types/schema-v2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-v2.d.ts","sourceRoot":"","sources":["../../src/types/schema-v2.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,20 @@
1
1
  /**
2
- * 日期字段显示格式工具(P 字段 action="date" 的「format」属性配套)。
2
+ * 日期字段显示格式工具(字段「额外属性」`date-format` 的配套工具)。
3
3
  *
4
4
  * 格式串 token:`{YYYY}` 年 / `{MM}` 月 / `{DD}` 日 / `{hh}` 时 / `{mm}` 分 / `{ss}` 秒。
5
5
  * 例:`{YYYY}年{MM}月{DD} {hh}时{mm}分{ss}秒`。
6
6
  *
7
- * 仅作用于【填写回写】环节:宿主(消费页)在 date 选择器 change 时把原生 ISO 值
8
- * (`YYYY-MM-DD` 或 `YYYY-MM-DDTHH:mm[:ss]`)按 `actionParams.format` 套成中文串写进 data,
9
- * 票面直接显示该串;脱敏/采集/打印均不改此逻辑(按 data 原样)。无 format 时原样存储(向后兼容)。
7
+ * 仅作用于【填写回写】环节:宿主(消费页)在日期选择器 change 时把原生 ISO 值
8
+ * (`YYYY-MM-DD` 或 `YYYY-MM-DDTHH:mm[:ss]`)按字段的格式串套成中文串写进 data,
9
+ * 票面直接显示该串;脱敏/采集/打印均不改此逻辑(按 data 原样)。无格式串时原样存储(向后兼容)。
10
10
  *
11
- * 渲染内核不认识这些 token——它们属于宿主的「外部输入组件」职责(与 action 机制同轨)。
11
+ * 格式串存在字段的「额外属性」里,键名 **`date-format`**——这是宿主词表:宿主
12
+ * `useFcDesigner.resolveDateFormat` 读的正是标签属性 `date-format`(并兼容
13
+ * `data-date-format` / `dateFormat`)。旧 schema 的 `actionParams.format` 在读入时
14
+ * 由 `schema-v2-serialization.ts` 改键迁移过来。
15
+ *
16
+ * 渲染内核不认识这些 token——它们属于宿主的「外部输入组件」职责:字段的 `params` 会原样
17
+ * 落成标签上的 HTML 属性(见 `src/utils/node-params.ts`),宿主从属性自取后调用本工具。
12
18
  */
13
19
  export interface DateParts {
14
20
  Y: string;
@@ -1 +1 @@
1
- {"version":3,"file":"date-format.d.ts","sourceRoot":"","sources":["../../src/utils/date-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAwBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBpE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAuBzE;AAED;gDACgD;AAChD,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtD"}
1
+ {"version":3,"file":"date-format.d.ts","sourceRoot":"","sources":["../../src/utils/date-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAwBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBpE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAuBzE;AAED;gDACgD;AAChD,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 节点「额外属性」(`SchemaNodeBaseV2.params`)→ 可安全渲染的 HTML 属性表。
3
+ *
4
+ * 设计口径(2026-09-15 用户拍板):
5
+ * - 内核只把 `params` 的键值**原样透传**成节点根标签的 HTML 属性,**不解释任何键**;
6
+ * 属性的语义(弹什么控件、怎么校验)全部归宿主。
7
+ * - 但「原样透传」不等于「无脑 `v-bind`」:Vue 会把对象里 `on*` 形式的键**绑定成事件监听器**,
8
+ * 任意键还可能覆盖内核自身写入的属性(`data-node-id` / `class` / `style` …),
9
+ * 故**必须**先过本文件的黑名单过滤,否则是一条脚本注入通道。
10
+ *
11
+ * 过滤规则(命中即丢弃该键,静默忽略、不抛错):
12
+ * 1. 属性名须匹配 `/^[a-z][a-z0-9_-]*$/`——小写字母开头,仅小写字母 / 数字 / `-` / `_`。
13
+ * 该规则天然挡掉 `innerHTML` / `textContent` / `objectFit` 等**大写驼峰**的名字
14
+ * (它们在 Vue 里会被当作 DOM property 设置而非属性)。
15
+ * 2. 不得以 `on` 开头(事件绑定通道)。
16
+ * 3. 不得以 `data-` 开头(内核节点寻址命名空间:`data-node-id` / `data-layout-id` / `data-field`)。
17
+ * 4. 不得命中 `RESERVED_ATTRS`(内核自身写入的属性)。
18
+ * 5. 值必须是非空字符串:`undefined` / 非字符串 / 空串一律不写属性。
19
+ *
20
+ * 注意本模块**只做过滤**,不做业务校验——宿主要写什么键、什么值,内核不管。
21
+ */
22
+ import type { NodeParamsV2 } from "../types";
23
+ /**
24
+ * 该键是否会作为 HTML 属性落到节点根标签上。
25
+ * 设计器用它给出即时反馈(非法键在面板里标红并提示),渲染内核用它过滤。
26
+ */
27
+ export declare function isParamNameAllowed(name: string): boolean;
28
+ /**
29
+ * `params` → 可安全 `v-bind` 的属性表。每次调用返回**新对象**(可直接用于模板),
30
+ * 过滤后的空对象等价于「不写任何属性」。
31
+ *
32
+ * 顺序保持 `params` 的插入顺序(`Object.entries` 语义),便于快照/测试稳定断言。
33
+ */
34
+ export declare function resolveNodeParamAttrs(params?: NodeParamsV2 | null): Record<string, string>;
35
+ //# sourceMappingURL=node-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-params.d.ts","sourceRoot":"","sources":["../../src/utils/node-params.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA8B5C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cluadwong/form-designer",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },