@mosaicoo/form-angular 0.7.0 → 0.9.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.
@@ -1 +1 @@
1
- {"version":3,"file":"mosaicoo-form-angular-designer.mjs","sources":["../../../packages/angular/designer/src/designer-node.component.ts","../../../packages/angular/designer/src/inspector.component.ts","../../../packages/angular/designer/src/field-catalog.ts","../../../packages/angular/designer/src/blocks.ts","../../../packages/angular/designer/src/workspace.ts","../../../packages/angular/designer/src/designer.component.ts","../../../packages/angular/designer/src/public-api.ts","../../../packages/angular/designer/src/mosaicoo-form-angular-designer.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type { ContainerField, FieldNode, FormEngine, NodePath } from '@mosaicoo/form-core';\nimport { FormNodeComponent } from '@mosaicoo/form-angular';\n\n/**\n * Canvas node: draws the selection frame and structure chrome, delegating\n * leaf rendering to the RUNTIME `<mform-node>` so what you see is what the\n * renderer will produce. Canvas controls are non-interactive — testing\n * happens in Preview mode.\n */\n@Component({\n selector: 'mform-designer-node',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [FormNodeComponent],\n template: `\n @let n = node();\n <div\n class=\"dz-node\"\n [class.is-selected]=\"isSelected()\"\n [class.is-container]=\"n.kind === 'container'\"\n (click)=\"onSelect($event)\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"onSelect($event)\"\n [attr.aria-label]=\"chip() + (isSelected() ? ' (selected)' : '')\"\n >\n <span class=\"dz-chip\">{{ chip() }}</span>\n\n @if (n.kind === 'container') {\n @if (n.type === 'tabs') {\n <div class=\"dz-tabbar\">\n @for (tab of container().children; track tab.key; let i = $index) {\n <button\n type=\"button\"\n class=\"dz-tab\"\n [class.is-active]=\"activeTab() === i\"\n (click)=\"setTab(i, $event)\"\n >\n {{ tab.label || 'Tab ' + (i + 1) }}\n </button>\n }\n </div>\n @for (tab of container().children; track tab.key; let i = $index) {\n @if (activeTab() === i) {\n <div class=\"dz-children\">\n <mform-designer-node\n [node]=\"tab\"\n [path]=\"childPath(i)\"\n [engine]=\"engine()\"\n [selected]=\"selected()\"\n (selectNode)=\"selectNode.emit($event)\"\n />\n </div>\n }\n }\n } @else if (n.type === 'columns' && container().columns?.length) {\n <div class=\"dz-columns\" [style.grid-template-columns]=\"columnsTemplate()\">\n @for (column of container().columns; track $index) {\n <div class=\"dz-column\">\n @for (childIndex of column.children; track childIndex) {\n <mform-designer-node\n [node]=\"container().children[childIndex]!\"\n [path]=\"childPath(childIndex)\"\n [engine]=\"engine()\"\n [selected]=\"selected()\"\n (selectNode)=\"selectNode.emit($event)\"\n />\n }\n @if (column.children.length === 0) {\n <div class=\"dz-empty\">empty column</div>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"dz-children\">\n @for (child of container().children; track child.key; let i = $index) {\n <mform-designer-node\n [node]=\"child\"\n [path]=\"childPath(i)\"\n [engine]=\"engine()\"\n [selected]=\"selected()\"\n (selectNode)=\"selectNode.emit($event)\"\n />\n } @empty {\n <div class=\"dz-empty\">empty — select and add fields</div>\n }\n </div>\n }\n } @else {\n <div class=\"dz-leaf\" inert>\n <mform-node [node]=\"n\" [engine]=\"engine()\" [tick]=\"0\" />\n </div>\n }\n </div>\n `,\n})\nexport class DesignerNodeComponent {\n readonly node = input.required<FieldNode>();\n readonly path = input.required<NodePath>();\n readonly engine = input.required<FormEngine>();\n readonly selected = input<NodePath | null>(null);\n readonly selectNode = output<NodePath>();\n\n readonly activeTab = signal(0);\n\n container(): ContainerField {\n return this.node() as ContainerField;\n }\n\n chip(): string {\n const node = this.node();\n const label = node.kind === 'container' || node.kind === 'static'\n ? node.label ?? node.key\n : node.label ?? node.key;\n return `${label} · ${node.type}`;\n }\n\n isSelected(): boolean {\n const selected = this.selected();\n return selected !== null && selected.join('.') === this.path().join('.');\n }\n\n childPath(index: number): NodePath {\n return [...this.path(), index];\n }\n\n columnsTemplate(): string {\n const columns = this.container().columns ?? [];\n const total = columns.reduce((sum, c) => sum + c.width, 0) || 12;\n return columns.map((c) => `${((c.width / total) * 100).toFixed(3)}fr`).join(' ');\n }\n\n onSelect(event: Event): void {\n event.stopPropagation();\n this.selectNode.emit(this.path());\n }\n\n setTab(index: number, event: Event): void {\n event.stopPropagation();\n this.activeTab.set(index);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type {\n Condition,\n ContainerField,\n FieldNode,\n FieldOption,\n FormSchema,\n InputField,\n StaticField,\n ValidatorSpec,\n} from '@mosaicoo/form-core';\nimport { collectInputs } from '@mosaicoo/form-core';\n\n/** Patch emitted towards the shell (applied via core `updateNode`). */\nexport interface InspectorPatch {\n patch: Partial<FieldNode>;\n}\n\n/**\n * Property panel of the selected node. Emits immutable patches — the shell\n * owns the document, history and validation.\n */\n@Component({\n selector: 'mform-inspector',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @let n = node();\n <div class=\"dz-inspector\">\n <h3>{{ n.type }} <code>{{ n.key }}</code></h3>\n\n <label class=\"dz-prop\">\n <span>Key</span>\n <input type=\"text\" [value]=\"n.key\" (change)=\"patchText('key', $event)\" />\n </label>\n <label class=\"dz-prop\">\n <span>Label</span>\n <input type=\"text\" [value]=\"n.label ?? ''\" (change)=\"patchText('label', $event)\" />\n </label>\n <label class=\"dz-prop\">\n <span>Description</span>\n <input type=\"text\" [value]=\"n.description ?? ''\" (change)=\"patchText('description', $event)\" />\n </label>\n\n @if (n.kind === 'input') {\n <label class=\"dz-prop\">\n <span>Placeholder</span>\n <input type=\"text\" [value]=\"field().placeholder ?? ''\" (change)=\"patchText('placeholder', $event)\" />\n </label>\n <label class=\"dz-prop\">\n <span>Default value</span>\n <input type=\"text\" [value]=\"defaultValueText()\" (change)=\"patchDefault($event)\" />\n </label>\n <label class=\"dz-check\">\n <input type=\"checkbox\" [checked]=\"isRequired()\" (change)=\"toggleRequired($event)\" />\n <span>Required</span>\n </label>\n\n <details class=\"dz-section\" open>\n <summary>Validation</summary>\n <label class=\"dz-prop\"><span>Min length</span>\n <input type=\"number\" [value]=\"validatorValue('minLength')\" (change)=\"patchValidator('minLength', $event)\" /></label>\n <label class=\"dz-prop\"><span>Max length</span>\n <input type=\"number\" [value]=\"validatorValue('maxLength')\" (change)=\"patchValidator('maxLength', $event)\" /></label>\n <label class=\"dz-prop\"><span>Min</span>\n <input type=\"number\" [value]=\"validatorValue('min')\" (change)=\"patchValidator('min', $event)\" /></label>\n <label class=\"dz-prop\"><span>Max</span>\n <input type=\"number\" [value]=\"validatorValue('max')\" (change)=\"patchValidator('max', $event)\" /></label>\n <label class=\"dz-prop\"><span>Pattern (regex)</span>\n <input type=\"text\" [value]=\"patternValue()\" (change)=\"patchPattern($event)\" /></label>\n </details>\n\n @if (hasOptions()) {\n <details class=\"dz-section\" open>\n <summary>Options</summary>\n @for (option of field().options ?? []; track $index; let i = $index) {\n <div class=\"dz-option-row\">\n <input type=\"text\" placeholder=\"Label\" [value]=\"option.label\"\n (change)=\"patchOption(i, 'label', $event)\" />\n <input type=\"text\" placeholder=\"Value\" [value]=\"option.value\"\n (change)=\"patchOption(i, 'value', $event)\" />\n <button type=\"button\" (click)=\"removeOption(i)\" aria-label=\"Remove option\">✕</button>\n </div>\n }\n <button type=\"button\" class=\"dz-add\" (click)=\"addOption()\">+ Option</button>\n </details>\n }\n }\n\n @if (n.kind === 'static' && n.type === 'content') {\n <label class=\"dz-prop\">\n <span>Content (HTML)</span>\n <textarea rows=\"5\" [value]=\"static_().content ?? ''\" (change)=\"patchText('content', $event)\"></textarea>\n </label>\n }\n\n @if (n.kind === 'container' && n.type === 'columns') {\n <label class=\"dz-prop\">\n <span>Column widths (of 12, comma-separated)</span>\n <input type=\"text\" [value]=\"columnWidths()\" (change)=\"patchColumnWidths($event)\" />\n </label>\n }\n\n <details class=\"dz-section\">\n <summary>Visibility</summary>\n <label class=\"dz-check\">\n <input type=\"checkbox\" [checked]=\"n.hidden === true\" (change)=\"patchFlag('hidden', $event)\" />\n <span>Hidden</span>\n </label>\n <label class=\"dz-check\">\n <input type=\"checkbox\" [checked]=\"n.disabled === true\" (change)=\"patchFlag('disabled', $event)\" />\n <span>Disabled</span>\n </label>\n <label class=\"dz-prop\">\n <span>Show when field…</span>\n <select [value]=\"simpleCondition()?.field ?? ''\" (change)=\"patchConditionField($event)\">\n <option value=\"\">(always visible)</option>\n @for (path of otherInputPaths(); track path) {\n <option [value]=\"path\" [selected]=\"simpleCondition()?.field === path\">{{ path }}</option>\n }\n </select>\n </label>\n @if (simpleCondition()) {\n <label class=\"dz-prop\">\n <span>…equals value</span>\n <input type=\"text\" [value]=\"conditionValueText()\" (change)=\"patchConditionValue($event)\" />\n </label>\n }\n <label class=\"dz-prop\">\n <span>Show when expression (advanced)</span>\n <input\n type=\"text\"\n placeholder=\"ex.: total > 1000 && status == 'ok'\"\n [value]=\"conditionExpression()\"\n (change)=\"patchConditionExpression($event)\"\n />\n </label>\n </details>\n\n @if (n.kind === 'input') {\n <details class=\"dz-section\">\n <summary>Advanced</summary>\n <label class=\"dz-prop\">\n <span>Calculated value (expression)</span>\n <input\n type=\"text\"\n placeholder=\"ex.: qty * price\"\n [value]=\"field().calculate ?? ''\"\n (change)=\"patchCalculate($event)\"\n />\n </label>\n <label class=\"dz-prop\">\n <span>Input mask (0=digit A=letter S=any)</span>\n <input\n type=\"text\"\n placeholder=\"ex.: 000.000.000-00\"\n [value]=\"field().format?.mask ?? ''\"\n (change)=\"patchMask($event)\"\n />\n </label>\n <label class=\"dz-check\">\n <input type=\"checkbox\" [checked]=\"field().multiple === true\" (change)=\"patchMultiple($event)\" />\n <span>Multiple values</span>\n </label>\n </details>\n\n <details class=\"dz-section\">\n <summary>Options source</summary>\n <label class=\"dz-prop\">\n <span>Source</span>\n <select [value]=\"sourceKind()\" (change)=\"patchSourceKind($event)\">\n <option value=\"\">Static list</option>\n <option value=\"provider\" [selected]=\"sourceKind() === 'provider'\">Host provider</option>\n <option value=\"remote\" [selected]=\"sourceKind() === 'remote'\">Remote URL</option>\n </select>\n </label>\n @if (sourceKind() === 'provider') {\n <label class=\"dz-prop\">\n <span>Provider name</span>\n <input type=\"text\" [value]=\"providerName()\" (change)=\"patchProviderName($event)\" />\n </label>\n }\n @if (sourceKind() === 'remote') {\n <label class=\"dz-prop\">\n <span>URL</span>\n <input type=\"text\" [value]=\"remoteUrl()\" (change)=\"patchRemoteUrl($event)\" />\n </label>\n }\n @if (sourceKind()) {\n <label class=\"dz-prop\">\n <span>Refresh on (field path or \"data\")</span>\n <input type=\"text\" [value]=\"refreshOn()\" (change)=\"patchRefreshOn($event)\" />\n </label>\n }\n </details>\n }\n\n <!-- Type-specific configuration for CUSTOM components: the host reads\n these from field.props (e.g. a board's columns, a chart's series). -->\n <details class=\"dz-section\" [open]=\"hasProps()\">\n <summary>Type settings (props)</summary>\n <label class=\"dz-prop\">\n <span>JSON passed to the field component</span>\n <textarea\n rows=\"5\"\n spellcheck=\"false\"\n [value]=\"propsText()\"\n (change)=\"patchProps($event)\"\n ></textarea>\n </label>\n @if (propsError()) {\n <p class=\"dz-import-error\" role=\"alert\">{{ propsError() }}</p>\n }\n </details>\n </div>\n `,\n})\nexport class InspectorComponent {\n readonly node = input.required<FieldNode>();\n readonly schema = input.required<FormSchema>();\n readonly nodePatch = output<InspectorPatch>();\n\n field(): InputField {\n return this.node() as InputField;\n }\n\n static_(): StaticField {\n return this.node() as StaticField;\n }\n\n hasOptions(): boolean {\n return ['select', 'radio', 'checkbox-group'].includes(this.node().type);\n }\n\n readonly otherInputPaths = computed(() =>\n collectInputs(this.schema())\n .map((entry) => entry.path)\n .filter((path) => !path.includes('*')),\n );\n\n private emitPatch(patch: Partial<FieldNode>): void {\n this.nodePatch.emit({ patch });\n }\n\n private inputValue(event: Event): string {\n return (event.target as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value;\n }\n\n patchText(member: 'key' | 'label' | 'description' | 'placeholder' | 'content', event: Event): void {\n const value = this.inputValue(event).trim();\n if (member === 'key' && value === '') return; // key can never be emptied\n this.emitPatch({ [member]: value === '' ? undefined : value } as Partial<FieldNode>);\n }\n\n patchFlag(member: 'hidden' | 'disabled', event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this.emitPatch({ [member]: checked ? true : undefined } as Partial<FieldNode>);\n }\n\n defaultValueText(): string {\n const value = this.field().defaultValue;\n return value === undefined || value === null ? '' : String(value);\n }\n\n patchDefault(event: Event): void {\n const raw = this.inputValue(event);\n if (raw === '') {\n this.emitPatch({ defaultValue: undefined } as Partial<FieldNode>);\n return;\n }\n const field = this.field();\n let value: unknown = raw;\n if (field.dataType === 'number') value = Number(raw);\n if (field.dataType === 'boolean') value = raw === 'true';\n this.emitPatch({ defaultValue: value } as Partial<FieldNode>);\n }\n\n // -- validators -----------------------------------------------------------\n\n private validators(): ValidatorSpec[] {\n return this.field().validators ?? [];\n }\n\n isRequired(): boolean {\n return this.validators().some((v) => v.type === 'required');\n }\n\n toggleRequired(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n const rest = this.validators().filter((v) => v.type !== 'required');\n this.emitValidators(checked ? [{ type: 'required' }, ...rest] : rest);\n }\n\n validatorValue(type: 'minLength' | 'maxLength' | 'min' | 'max'): string {\n const spec = this.validators().find((v) => v.type === type);\n return spec && 'value' in spec ? String(spec.value) : '';\n }\n\n patchValidator(type: 'minLength' | 'maxLength' | 'min' | 'max', event: Event): void {\n const raw = this.inputValue(event);\n const rest = this.validators().filter((v) => v.type !== type);\n this.emitValidators(raw === '' ? rest : [...rest, { type, value: Number(raw) }]);\n }\n\n patternValue(): string {\n const spec = this.validators().find((v) => v.type === 'pattern');\n return spec && 'value' in spec ? String(spec.value) : '';\n }\n\n patchPattern(event: Event): void {\n const raw = this.inputValue(event);\n const rest = this.validators().filter((v) => v.type !== 'pattern');\n this.emitValidators(raw === '' ? rest : [...rest, { type: 'pattern', value: raw }]);\n }\n\n private emitValidators(validators: ValidatorSpec[]): void {\n this.emitPatch({ validators: validators.length ? validators : undefined } as Partial<FieldNode>);\n }\n\n // -- options --------------------------------------------------------------\n\n patchOption(index: number, member: 'label' | 'value', event: Event): void {\n const options = [...(this.field().options ?? [])];\n options[index] = { ...options[index]!, [member]: this.inputValue(event) };\n this.emitPatch({ options } as Partial<FieldNode>);\n }\n\n addOption(): void {\n const options = [...(this.field().options ?? [])];\n options.push({ label: `Option ${options.length + 1}`, value: `option${options.length + 1}` });\n this.emitPatch({ options } as Partial<FieldNode>);\n }\n\n removeOption(index: number): void {\n const options = (this.field().options ?? []).filter((_, i) => i !== index);\n this.emitPatch({ options: options.length ? options : undefined } as Partial<FieldNode>);\n }\n\n // -- columns --------------------------------------------------------------\n\n columnWidths(): string {\n return ((this.node() as ContainerField).columns ?? []).map((c) => c.width).join(', ');\n }\n\n patchColumnWidths(event: Event): void {\n const container = this.node() as ContainerField;\n const widths = this.inputValue(event)\n .split(',')\n .map((part) => Number(part.trim()))\n .filter((width) => Number.isFinite(width) && width > 0);\n if (widths.length === 0) return;\n const existing = container.columns ?? [];\n const columns = widths.map((width, i) => ({\n width,\n children: existing[i]?.children ?? [],\n }));\n // children in dropped columns are re-attached to the last remaining one\n for (let i = widths.length; i < existing.length; i++) {\n columns[columns.length - 1]!.children.push(...existing[i]!.children);\n }\n this.emitPatch({ columns } as Partial<FieldNode>);\n }\n\n // -- conditional ----------------------------------------------------------\n\n simpleCondition(): Extract<Condition, { field: string }> | null {\n const condition = this.node().conditional;\n return condition && 'field' in condition ? condition : null;\n }\n\n conditionExpression(): string {\n const condition = this.node().conditional;\n return condition && 'expression' in condition ? condition.expression : '';\n }\n\n conditionValueText(): string {\n const value = this.simpleCondition()?.value;\n return value === undefined || value === null ? '' : String(value);\n }\n\n patchConditionField(event: Event): void {\n const field = this.inputValue(event);\n if (field === '') {\n this.emitPatch({ conditional: undefined });\n return;\n }\n const current = this.simpleCondition();\n const conditional: Condition = {\n show: current?.show ?? true,\n op: current?.op ?? 'eq',\n field,\n value: current?.value ?? '',\n };\n this.emitPatch({ conditional });\n }\n\n patchConditionValue(event: Event): void {\n const current = this.simpleCondition();\n if (!current) return;\n const raw = this.inputValue(event);\n const value: unknown = raw === 'true' ? true : raw === 'false' ? false : raw;\n this.emitPatch({ conditional: { ...current, value } });\n }\n\n patchConditionExpression(event: Event): void {\n const expression = this.inputValue(event).trim();\n if (expression === '') {\n // clearing the expression keeps a simple condition, if one existed\n this.emitPatch({ conditional: this.simpleCondition() ?? undefined });\n return;\n }\n this.emitPatch({ conditional: { show: true, expression } });\n }\n\n // -- advanced (calculate / mask) ------------------------------------------\n\n patchCalculate(event: Event): void {\n const expression = this.inputValue(event).trim();\n this.emitPatch({ calculate: expression === '' ? undefined : expression } as Partial<FieldNode>);\n }\n\n patchMask(event: Event): void {\n const mask = this.inputValue(event).trim();\n this.emitPatch({ format: mask === '' ? undefined : { mask } } as Partial<FieldNode>);\n }\n\n patchMultiple(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this.emitPatch({\n multiple: checked ? true : undefined,\n dataType: checked ? 'array' : 'string',\n } as Partial<FieldNode>);\n }\n\n // -- options source -------------------------------------------------------\n\n sourceKind(): '' | 'provider' | 'remote' {\n return this.field().optionsSource?.type ?? '';\n }\n\n providerName(): string {\n const source = this.field().optionsSource;\n return source?.type === 'provider' ? source.name : '';\n }\n\n remoteUrl(): string {\n const source = this.field().optionsSource;\n return source?.type === 'remote' ? source.url : '';\n }\n\n refreshOn(): string {\n return this.field().optionsSource?.refreshOn ?? '';\n }\n\n patchSourceKind(event: Event): void {\n const kind = this.inputValue(event);\n if (kind === 'provider') {\n this.emitPatch({\n optionsSource: { type: 'provider', name: this.providerName() || this.field().key },\n } as Partial<FieldNode>);\n } else if (kind === 'remote') {\n this.emitPatch({\n optionsSource: { type: 'remote', url: this.remoteUrl() },\n } as Partial<FieldNode>);\n } else {\n this.emitPatch({ optionsSource: undefined } as Partial<FieldNode>);\n }\n }\n\n patchProviderName(event: Event): void {\n const name = this.inputValue(event).trim();\n if (name === '') return;\n this.emitPatch({\n optionsSource: { ...this.field().optionsSource, type: 'provider', name },\n } as Partial<FieldNode>);\n }\n\n patchRemoteUrl(event: Event): void {\n const url = this.inputValue(event).trim();\n this.emitPatch({\n optionsSource: { ...this.field().optionsSource, type: 'remote', url },\n } as Partial<FieldNode>);\n }\n\n patchRefreshOn(event: Event): void {\n const source = this.field().optionsSource;\n if (!source) return;\n const refreshOn = this.inputValue(event).trim();\n const next = { ...source };\n if (refreshOn === '') delete next.refreshOn;\n else next.refreshOn = refreshOn;\n this.emitPatch({ optionsSource: next } as Partial<FieldNode>);\n }\n\n // -- props (type-specific settings for custom components) -----------------\n\n readonly propsError = signal('');\n\n hasProps(): boolean {\n return Object.keys(this.node().props ?? {}).length > 0;\n }\n\n propsText(): string {\n const props = this.node().props;\n return props && Object.keys(props).length > 0 ? JSON.stringify(props, null, 2) : '';\n }\n\n patchProps(event: Event): void {\n const raw = this.inputValue(event).trim();\n if (raw === '') {\n this.propsError.set('');\n this.emitPatch({ props: undefined });\n return;\n }\n try {\n const parsed: unknown = JSON.parse(raw);\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n this.propsError.set('Props must be a JSON object.');\n return;\n }\n this.propsError.set('');\n this.emitPatch({ props: parsed as Record<string, unknown> });\n } catch (error) {\n this.propsError.set('Invalid JSON: ' + String(error instanceof Error ? error.message : error));\n }\n }\n}\n\n/** Re-export so the shell can type option edits without a deep import. */\nexport type { FieldOption };\n","import type { FieldNode, FormSchema } from '@mosaicoo/form-core';\nimport { generateKey } from '@mosaicoo/form-core';\n\n/**\n * Palette catalog: the node factories the Designer offers. Hosts can extend\n * the palette via the `extraCatalog` input of `<mform-designer>` — entries\n * here stay generic (no domain assumptions).\n */\n\nexport interface CatalogEntry {\n /** Field `type` produced (also used to key custom renderers). */\n type: string;\n label: string;\n /** Short glyph shown in the palette. */\n icon: string;\n create(schema: FormSchema): FieldNode;\n}\n\nexport interface CatalogGroup {\n label: string;\n entries: CatalogEntry[];\n}\n\nfunction input(\n type: string,\n dataType: 'string' | 'number' | 'boolean' | 'date' | 'object' | 'array',\n label: string,\n extra?: Partial<Extract<FieldNode, { kind: 'input' }>>,\n): (schema: FormSchema) => FieldNode {\n return (schema) => ({\n kind: 'input',\n key: generateKey(schema, type),\n type,\n label,\n dataType,\n ...extra,\n });\n}\n\nexport const DEFAULT_CATALOG: CatalogGroup[] = [\n {\n label: 'Basic',\n entries: [\n { type: 'text', label: 'Text', icon: 'Aa', create: input('text', 'string', 'Text') },\n { type: 'textarea', label: 'Text area', icon: '¶', create: input('textarea', 'string', 'Text area') },\n { type: 'number', label: 'Number', icon: '#', create: input('number', 'number', 'Number') },\n { type: 'currency', label: 'Currency', icon: '$', create: input('currency', 'number', 'Currency') },\n { type: 'checkbox', label: 'Checkbox', icon: '☑', create: input('checkbox', 'boolean', 'Checkbox') },\n { type: 'email', label: 'Email', icon: '@', create: input('email', 'string', 'Email', { validators: [{ type: 'email' }] }) },\n { type: 'phone', label: 'Phone', icon: '☎', create: input('phone', 'string', 'Phone') },\n { type: 'password', label: 'Password', icon: '••', create: input('password', 'string', 'Password') },\n ],\n },\n {\n label: 'Choices',\n entries: [\n {\n type: 'select', label: 'Select', icon: '▾',\n create: (s) => ({ ...input('select', 'string', 'Select')(s), options: [\n { label: 'Option 1', value: 'option1' }, { label: 'Option 2', value: 'option2' },\n ] } as FieldNode),\n },\n {\n type: 'radio', label: 'Radio', icon: '◉',\n create: (s) => ({ ...input('radio', 'string', 'Radio')(s), options: [\n { label: 'Option 1', value: 'option1' }, { label: 'Option 2', value: 'option2' },\n ] } as FieldNode),\n },\n {\n type: 'checkbox-group', label: 'Checkbox group', icon: '☷',\n create: (s) => ({ ...input('checkbox-group', 'object', 'Checkbox group')(s), options: [\n { label: 'Option 1', value: 'option1' }, { label: 'Option 2', value: 'option2' },\n ] } as FieldNode),\n },\n { type: 'tags', label: 'Tags', icon: '⌗', create: input('tags', 'array', 'Tags') },\n {\n type: 'reference', label: 'Reference', icon: '⌕',\n create: (s) => ({\n ...input('reference', 'string', 'Reference')(s),\n optionsSource: { type: 'provider', name: 'reference' },\n } as FieldNode),\n },\n ],\n },\n {\n label: 'Date & files',\n entries: [\n { type: 'datetime', label: 'Date & time', icon: '📅', create: input('datetime', 'date', 'Date & time') },\n { type: 'day', label: 'Date', icon: '▦', create: input('day', 'string', 'Date') },\n { type: 'time', label: 'Time', icon: '◷', create: input('time', 'string', 'Time') },\n { type: 'file', label: 'File', icon: '📎', create: input('file', 'array', 'File') },\n ],\n },\n {\n label: 'Layout',\n entries: [\n {\n type: 'panel', label: 'Panel', icon: '▭',\n create: (s) => ({ kind: 'container', key: generateKey(s, 'panel'), type: 'panel',\n dataScope: 'inherit', label: 'Panel', children: [] }),\n },\n {\n type: 'columns', label: 'Columns', icon: '▥',\n create: (s) => ({ kind: 'container', key: generateKey(s, 'columns'), type: 'columns',\n dataScope: 'inherit', children: [], columns: [\n { width: 6, children: [] }, { width: 6, children: [] },\n ] }),\n },\n {\n type: 'tabs', label: 'Tabs', icon: '⧉',\n create: (s) => {\n const key = generateKey(s, 'tabs');\n return { kind: 'container', key, type: 'tabs', dataScope: 'inherit', children: [\n { kind: 'container', key: `${key}-tab-1`, type: 'panel', dataScope: 'inherit', label: 'Tab 1', children: [] },\n { kind: 'container', key: `${key}-tab-2`, type: 'panel', dataScope: 'inherit', label: 'Tab 2', children: [] },\n ] };\n },\n },\n {\n type: 'accordion', label: 'Accordion', icon: '☰',\n create: (s) => {\n const key = generateKey(s, 'accordion');\n return { kind: 'container', key, type: 'accordion', dataScope: 'inherit', children: [\n { kind: 'container', key: `${key}-section-1`, type: 'panel', dataScope: 'inherit', label: 'Section 1', children: [] },\n { kind: 'container', key: `${key}-section-2`, type: 'panel', dataScope: 'inherit', label: 'Section 2', children: [] },\n ] };\n },\n },\n {\n type: 'group', label: 'Data group', icon: '⧈',\n create: (s) => ({ kind: 'container', key: generateKey(s, 'group'), type: 'group',\n dataScope: 'nested', label: 'Group', children: [] }),\n },\n {\n type: 'datagrid', label: 'Data grid', icon: '☰',\n create: (s) => ({ kind: 'container', key: generateKey(s, 'datagrid'), type: 'datagrid',\n dataScope: 'array', label: 'Data grid', children: [] }),\n },\n ],\n },\n {\n label: 'Static',\n entries: [\n {\n type: 'content', label: 'Content', icon: '¶¶',\n create: (s) => ({ kind: 'static', key: generateKey(s, 'content'), type: 'content',\n content: '<p>Content</p>' }),\n },\n {\n type: 'button', label: 'Submit button', icon: '⏎',\n create: (s) => ({ kind: 'static', key: generateKey(s, 'button'), type: 'button',\n label: 'Submit', props: { action: 'submit' } }),\n },\n ],\n },\n];\n","import type { FieldNode } from '@mosaicoo/form-core';\n\n/**\n * Reusable blocks: a named node subtree (an address group, a payment panel,\n * a compliance section) that can be dropped into any form. Blocks are plain\n * schema fragments — serializable, portable and free of runtime state.\n *\n * The designer keeps them locally by default; hosts that want blocks shared\n * across users bind `[blocks]` and persist `(blocksChanged)` themselves.\n */\n\nexport interface FormBlock {\n id: string;\n label: string;\n /** Schema subtree; keys are regenerated on insert to stay unique. */\n node: FieldNode;\n}\n\nconst STORAGE_KEY = 'mform-designer-blocks';\n\nexport function loadBlocks(storage: Storage | null): FormBlock[] {\n if (!storage) return [];\n try {\n const raw = storage.getItem(STORAGE_KEY);\n const parsed: unknown = raw ? JSON.parse(raw) : [];\n return Array.isArray(parsed) ? (parsed as FormBlock[]) : [];\n } catch {\n return [];\n }\n}\n\nexport function saveBlocks(storage: Storage | null, blocks: FormBlock[]): void {\n try {\n storage?.setItem(STORAGE_KEY, JSON.stringify(blocks));\n } catch {\n /* storage unavailable — blocks stay in memory for this session */\n }\n}\n","/**\n * Designer workspace layout.\n *\n * Panels are dockable like in professional tools: each one can sit on the\n * left, on the right, or be hidden — the canvas always keeps the center. The\n * arrangement is a plain serializable object so hosts can persist it per user\n * (the designer also remembers it locally by default).\n */\n\nexport type DockSide = 'left' | 'right' | 'hidden';\n\n/** Panels that can be docked around the canvas. */\nexport type PanelId = 'palette' | 'structure' | 'properties';\n\nexport interface WorkspaceLayout {\n palette: DockSide;\n structure: DockSide;\n properties: DockSide;\n /** Width of each dock rail, in pixels. */\n leftWidth: number;\n rightWidth: number;\n}\n\nexport const DEFAULT_LAYOUT: WorkspaceLayout = {\n palette: 'left',\n structure: 'left',\n properties: 'right',\n leftWidth: 240,\n rightWidth: 280,\n};\n\nexport interface WorkspacePreset {\n id: string;\n label: string;\n layout: WorkspaceLayout;\n}\n\n/** Ready-made arrangements offered in the workspace menu. */\nexport const WORKSPACE_PRESETS: WorkspacePreset[] = [\n { id: 'default', label: 'Default (fields left, properties right)', layout: DEFAULT_LAYOUT },\n {\n id: 'authoring',\n label: 'Authoring (everything left)',\n layout: { ...DEFAULT_LAYOUT, properties: 'left', leftWidth: 300 },\n },\n {\n id: 'inspect',\n label: 'Inspect (structure + properties right)',\n layout: { ...DEFAULT_LAYOUT, structure: 'right', properties: 'right', rightWidth: 320 },\n },\n {\n id: 'canvas',\n label: 'Canvas only (panels hidden)',\n layout: { ...DEFAULT_LAYOUT, palette: 'hidden', structure: 'hidden', properties: 'hidden' },\n },\n];\n\nexport const PANEL_LABELS: Record<PanelId, string> = {\n palette: 'Fields',\n structure: 'Structure',\n properties: 'Properties',\n};\n\nconst STORAGE_KEY = 'mform-designer-layout';\n\nexport function loadLayout(storage: Storage | null): WorkspaceLayout {\n if (!storage) return DEFAULT_LAYOUT;\n try {\n const raw = storage.getItem(STORAGE_KEY);\n if (!raw) return DEFAULT_LAYOUT;\n const parsed = JSON.parse(raw) as Partial<WorkspaceLayout>;\n return { ...DEFAULT_LAYOUT, ...parsed };\n } catch {\n return DEFAULT_LAYOUT;\n }\n}\n\nexport function saveLayout(storage: Storage | null, layout: WorkspaceLayout): void {\n try {\n storage?.setItem(STORAGE_KEY, JSON.stringify(layout));\n } catch {\n /* storage unavailable (private mode, SSR) — layout stays in memory */\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { JsonPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n createFormEngine,\n duplicateNode,\n generateKey,\n getNodeAt,\n insertNode,\n moveNode,\n parentOf,\n removeNode,\n updateNode,\n validateSchema,\n type FieldNode,\n type FormEngine,\n type FormSchema,\n type NodePath,\n type SchemaDiagnostic,\n} from '@mosaicoo/form-core';\nimport { createLegacyImporter, importForm } from '@mosaicoo/form-core/interop';\nimport { FormRendererComponent } from '@mosaicoo/form-angular';\nimport { DesignerNodeComponent } from './designer-node.component.js';\nimport { InspectorComponent, type InspectorPatch } from './inspector.component.js';\nimport { DEFAULT_CATALOG, type CatalogEntry, type CatalogGroup } from './field-catalog.js';\nimport { loadBlocks, saveBlocks, type FormBlock } from './blocks.js';\nimport {\n DEFAULT_LAYOUT,\n PANEL_LABELS,\n WORKSPACE_PRESETS,\n loadLayout,\n saveLayout,\n type DockSide,\n type PanelId,\n type WorkspaceLayout,\n} from './workspace.js';\n\nconst EMPTY_SCHEMA: FormSchema = { version: 1, fields: [] };\nconst HISTORY_LIMIT = 50;\n\n/** True when `target` is `from` itself or somewhere inside it. */\nfunction isSameOrInside(from: NodePath, target: NodePath): boolean {\n return from.every((segment, index) => target[index] === segment);\n}\n\n/**\n * A move removes before it inserts: when the source sits before the target\n * under the same parent, every index after it shifts down by one.\n */\nfunction adjustAfterRemoval(from: NodePath, target: NodePath): NodePath {\n const parentDepth = from.length - 1;\n const sameParent = from.slice(0, parentDepth).every((s, i) => target[i] === s);\n if (!sameParent || target.length < from.length) return target;\n const adjusted = [...target];\n const fromIndex = from[parentDepth]!;\n const targetIndex = adjusted[parentDepth]!;\n if (targetIndex > fromIndex) adjusted[parentDepth] = targetIndex - 1;\n return adjusted;\n}\n\n/** Deep copy of a block with fresh keys, so it can be inserted repeatedly. */\nfunction rekeyBlock(node: FieldNode, schema: FormSchema): FieldNode {\n const copy = JSON.parse(JSON.stringify(node)) as FieldNode;\n const assign = (target: FieldNode) => {\n target.key = generateKey(schema, target.key);\n if (target.kind === 'container') target.children.forEach(assign);\n };\n assign(copy);\n return copy;\n}\n\n/**\n * `<mform-designer>` — visual authoring of form schemas.\n *\n * The designer edits a DOCUMENT (the schema): every change goes through the\n * core's immutable edit operations, feeding undo/redo and `schemaChanged`.\n * Persistence, publishing and permissions belong to the host.\n */\n@Component({\n selector: 'mform-designer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n DesignerNodeComponent,\n InspectorComponent,\n FormRendererComponent,\n JsonPipe,\n NgTemplateOutlet,\n ],\n styleUrls: ['./designer-theme.css'],\n template: `\n <div class=\"dz-shell\" (keydown)=\"onKeydown($event)\">\n <header class=\"dz-toolbar\">\n <div class=\"dz-tools\">\n <button type=\"button\" (click)=\"undo()\" [disabled]=\"past().length === 0\" title=\"Undo (Ctrl+Z)\">↶</button>\n <button type=\"button\" (click)=\"redo()\" [disabled]=\"future().length === 0\" title=\"Redo (Ctrl+Y)\">↷</button>\n <span class=\"dz-sep\"></span>\n <button type=\"button\" (click)=\"moveSelected(-1)\" [disabled]=\"!selected()\" title=\"Move up\">↑</button>\n <button type=\"button\" (click)=\"moveSelected(1)\" [disabled]=\"!selected()\" title=\"Move down\">↓</button>\n <button type=\"button\" (click)=\"duplicateSelected()\" [disabled]=\"!selected()\" title=\"Duplicate (Ctrl+D)\">⧉</button>\n <button type=\"button\" (click)=\"removeSelected()\" [disabled]=\"!selected()\" title=\"Delete (Del)\">🗑</button>\n <button type=\"button\" (click)=\"saveAsBlock()\" [disabled]=\"!selected()\" title=\"Save as reusable block\">⊞</button>\n </div>\n <div class=\"dz-tools\">\n @if (diagnostics().length > 0) {\n <button type=\"button\" class=\"dz-diag-badge\" (click)=\"showDiagnostics.set(!showDiagnostics())\">\n ⚠ {{ diagnostics().length }}\n </button>\n }\n <div class=\"dz-menu\">\n <button type=\"button\" (click)=\"workspaceMenu.set(!workspaceMenu())\" title=\"Workspace layout\">\n ▦ Workspace\n </button>\n @if (workspaceMenu()) {\n <div class=\"dz-menu-panel\" role=\"menu\">\n <span class=\"dz-menu-title\">Panels</span>\n @for (panel of panelIds; track panel) {\n <div class=\"dz-menu-row\">\n <span>{{ panelLabel(panel) }}</span>\n <span class=\"dz-seg\">\n @for (side of dockSides; track side) {\n <button\n type=\"button\"\n [class.is-on]=\"layout()[panel] === side\"\n (click)=\"dock(panel, side)\"\n >{{ sideLabels[side] }}</button>\n }\n </span>\n </div>\n }\n <span class=\"dz-menu-title\">Presets</span>\n @for (preset of presets; track preset.id) {\n <button type=\"button\" class=\"dz-menu-item\" (click)=\"applyPreset(preset.id)\">\n {{ preset.label }}\n </button>\n }\n <button type=\"button\" class=\"dz-menu-item\" (click)=\"resetLayout()\">Reset layout</button>\n </div>\n }\n </div>\n <button type=\"button\" (click)=\"dialog.set(dialog() === 'import' ? null : 'import')\">Import</button>\n <button type=\"button\" (click)=\"openExport()\">Export</button>\n <button type=\"button\" class=\"dz-primary\" (click)=\"preview.set(!preview())\">\n {{ preview() ? 'Design' : 'Preview' }}\n </button>\n </div>\n </header>\n\n @if (showDiagnostics() && diagnostics().length > 0) {\n <div class=\"dz-diagnostics\" role=\"alert\">\n @for (diag of diagnostics(); track $index) {\n <div class=\"dz-diag\" [class.is-warning]=\"diag.severity === 'warning'\">\n <code>{{ diag.code }}</code> {{ diag.message }} <em>{{ diag.path }}</em>\n </div>\n }\n </div>\n }\n\n @if (dialog() === 'export') {\n <div class=\"dz-dialog\">\n <h4>Schema JSON</h4>\n <textarea readonly rows=\"12\">{{ exportedJson() }}</textarea>\n <div class=\"dz-dialog-actions\">\n <button type=\"button\" (click)=\"dialog.set(null)\">Close</button>\n </div>\n </div>\n }\n @if (dialog() === 'import') {\n <div class=\"dz-dialog\">\n <h4>Import definition (native schema or supported formats)</h4>\n <textarea rows=\"12\" #importArea placeholder='{\"version\":1,\"fields\":[…]} or a legacy definition'></textarea>\n @if (importError()) {\n <p class=\"dz-import-error\" role=\"alert\">{{ importError() }}</p>\n }\n <div class=\"dz-dialog-actions\">\n <button type=\"button\" (click)=\"dialog.set(null)\">Cancel</button>\n <button type=\"button\" class=\"dz-primary\" (click)=\"doImport(importArea.value)\">Import</button>\n </div>\n </div>\n }\n\n @if (preview()) {\n <div class=\"dz-preview\">\n <mform-renderer [schema]=\"draft()\" (valueChanged)=\"previewData.set($event)\" />\n <details class=\"dz-preview-data\">\n <summary>Test data</summary>\n <pre>{{ previewData() | json }}</pre>\n </details>\n </div>\n } @else {\n <div class=\"dz-body\" [style.grid-template-columns]=\"bodyColumns()\">\n @if (dockedPanels('left').length > 0) {\n <aside class=\"dz-dock dz-dock-left\">\n @for (panel of dockedPanels('left'); track panel) {\n <ng-container *ngTemplateOutlet=\"panelTemplate; context: { $implicit: panel }\" />\n }\n </aside>\n }\n\n <main class=\"dz-canvas\" [class.is-dragging]=\"isDragging()\" (click)=\"select(null)\">\n @for (node of draft().fields; track node.key; let i = $index) {\n <div\n class=\"dz-dropzone\"\n [class.is-over]=\"isDropTarget([i])\"\n (dragover)=\"allowDrop([i], $event)\"\n (drop)=\"drop([i], $event)\"\n ></div>\n <mform-designer-node\n [node]=\"node\"\n [path]=\"[i]\"\n [engine]=\"canvasEngine()\"\n [selected]=\"selected()\"\n (selectNode)=\"select($event)\"\n draggable=\"true\"\n (dragstart)=\"startNodeDrag([i], $event)\"\n (dragend)=\"endDrag()\"\n />\n } @empty {\n <div class=\"dz-canvas-empty\">\n Click a field in the palette — or drag it here — to start building.\n </div>\n }\n <div\n class=\"dz-dropzone is-last\"\n [class.is-over]=\"isDropTarget([draft().fields.length])\"\n (dragover)=\"allowDrop([draft().fields.length], $event)\"\n (drop)=\"drop([draft().fields.length], $event)\"\n ></div>\n </main>\n\n @if (dockedPanels('right').length > 0) {\n <aside class=\"dz-dock dz-dock-right\">\n @for (panel of dockedPanels('right'); track panel) {\n <ng-container *ngTemplateOutlet=\"panelTemplate; context: { $implicit: panel }\" />\n }\n </aside>\n }\n </div>\n }\n </div>\n\n <!-- One template per panel, rendered into whichever dock holds it. -->\n <ng-template #panelTemplate let-panel>\n <section class=\"dz-panel\" [attr.data-panel]=\"panel\">\n <header class=\"dz-panel-head\">\n <span>{{ panelLabel(panel) }}</span>\n <span class=\"dz-panel-actions\">\n <button\n type=\"button\"\n [title]=\"panelSide(panel) === 'left' ? 'Move right' : 'Move left'\"\n (click)=\"dock(panel, panelSide(panel) === 'left' ? 'right' : 'left')\"\n >{{ panelSide(panel) === 'left' ? '⇥' : '⇤' }}</button>\n <button type=\"button\" title=\"Hide panel\" (click)=\"dock(panel, 'hidden')\">✕</button>\n </span>\n </header>\n <div class=\"dz-panel-body\">\n @switch (panel) {\n @case ('palette') {\n @for (group of catalog(); track group.label) {\n <div class=\"dz-group\">\n <button\n type=\"button\"\n class=\"dz-group-toggle\"\n [class.is-open]=\"isGroupOpen(group.label)\"\n [attr.aria-expanded]=\"isGroupOpen(group.label)\"\n (click)=\"toggleGroup(group.label)\"\n >\n <span class=\"dz-caret\" aria-hidden=\"true\">{{ isGroupOpen(group.label) ? '▾' : '▸' }}</span>\n {{ group.label }}\n <span class=\"dz-group-count\">{{ group.entries.length }}</span>\n </button>\n @if (isGroupOpen(group.label)) {\n <div class=\"dz-group-entries\">\n @for (entry of group.entries; track entry.type) {\n <div class=\"dz-palette-row\">\n <button\n type=\"button\"\n class=\"dz-palette-item\"\n draggable=\"true\"\n (dragstart)=\"startEntryDrag(entry, $event)\"\n (dragend)=\"endDrag()\"\n (click)=\"add(entry)\"\n [title]=\"'Add ' + entry.label + ' (or drag onto the canvas)'\"\n >\n <span class=\"dz-icon\">{{ entry.icon }}</span>{{ entry.label }}\n </button>\n @if (isBlockEntry(entry)) {\n <button\n type=\"button\"\n class=\"dz-block-remove\"\n (click)=\"removeBlock(blockIdOf(entry))\"\n [attr.aria-label]=\"'Remove block ' + entry.label\"\n >✕</button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n @case ('structure') {\n <div class=\"dz-tree\" role=\"tree\">\n @for (item of tree(); track item.id) {\n <button\n type=\"button\"\n role=\"treeitem\"\n class=\"dz-tree-item\"\n [class.is-selected]=\"isSelectedPath(item.path)\"\n [style.padding-left.px]=\"8 + item.depth * 14\"\n (click)=\"select(item.path)\"\n >\n {{ item.label }}\n </button>\n } @empty {\n <span class=\"dz-empty\">no fields yet</span>\n }\n </div>\n }\n @case ('properties') {\n @if (selectedNode(); as node) {\n <mform-inspector\n [node]=\"node\"\n [schema]=\"draft()\"\n (nodePatch)=\"applyPatch($event)\"\n />\n } @else {\n <div class=\"dz-empty dz-props-empty\">Select a field to edit its properties.</div>\n }\n }\n }\n </div>\n </section>\n </ng-template>\n `,\n})\nexport class FormDesignerComponent {\n /** Initial native schema to edit. */\n readonly schema = input<FormSchema | null>(null);\n /** Initial foreign definition (converted through importers). */\n readonly source = input<unknown>(null);\n /** Extra palette groups contributed by the host. */\n readonly extraCatalog = input<CatalogGroup[]>([]);\n\n /** Emitted after every committed edit (undo/redo included). */\n readonly schemaChanged = output<FormSchema>();\n\n readonly draft = signal<FormSchema>(EMPTY_SCHEMA);\n readonly past = signal<FormSchema[]>([]);\n readonly future = signal<FormSchema[]>([]);\n readonly selected = signal<NodePath | null>(null);\n readonly preview = signal(false);\n readonly previewData = signal<Record<string, unknown>>({});\n readonly dialog = signal<'import' | 'export' | null>(null);\n readonly importError = signal('');\n readonly showDiagnostics = signal(false);\n\n // -- workspace ------------------------------------------------------------\n\n /** Panel arrangement; persisted locally unless the host controls it. */\n readonly layout = signal<WorkspaceLayout>(DEFAULT_LAYOUT);\n readonly workspaceMenu = signal(false);\n readonly panelIds: PanelId[] = ['palette', 'structure', 'properties'];\n readonly dockSides: DockSide[] = ['left', 'right', 'hidden'];\n readonly panelLabels = PANEL_LABELS;\n readonly sideLabels: Record<DockSide, string> = { left: '⇤', right: '⇥', hidden: '✕' };\n readonly presets = WORKSPACE_PRESETS;\n /** Collapsed palette groups (only the first stays open by default). */\n readonly openGroups = signal<Set<string>>(new Set());\n\n private readonly storage = (() => {\n try {\n return typeof localStorage === 'undefined' ? null : localStorage;\n } catch {\n return null;\n }\n })();\n\n panelLabel(panel: PanelId): string {\n return PANEL_LABELS[panel];\n }\n\n panelSide(panel: PanelId): DockSide {\n return this.layout()[panel];\n }\n\n dockedPanels(side: 'left' | 'right'): PanelId[] {\n const layout = this.layout();\n return this.panelIds.filter((panel) => layout[panel] === side);\n }\n\n bodyColumns(): string {\n const layout = this.layout();\n const left = this.dockedPanels('left').length > 0 ? `${layout.leftWidth}px ` : '';\n const right = this.dockedPanels('right').length > 0 ? ` ${layout.rightWidth}px` : '';\n return `${left}1fr${right}`;\n }\n\n dock(panel: PanelId, side: DockSide): void {\n this.layout.update((current) => ({ ...current, [panel]: side }));\n saveLayout(this.storage, this.layout());\n }\n\n applyPreset(id: string): void {\n const preset = WORKSPACE_PRESETS.find((p) => p.id === id);\n if (!preset) return;\n this.layout.set({ ...preset.layout });\n saveLayout(this.storage, this.layout());\n this.workspaceMenu.set(false);\n }\n\n resetLayout(): void {\n this.layout.set({ ...DEFAULT_LAYOUT });\n saveLayout(this.storage, this.layout());\n this.workspaceMenu.set(false);\n }\n\n isGroupOpen(label: string): boolean {\n return this.openGroups().has(label);\n }\n\n toggleGroup(label: string): void {\n this.openGroups.update((open) => {\n const next = new Set(open);\n if (next.has(label)) next.delete(label);\n else next.add(label);\n return next;\n });\n }\n\n /** Saved blocks (host-controlled when `[blocks]` is bound). */\n readonly blocks = input<FormBlock[] | null>(null);\n readonly blocksChanged = output<FormBlock[]>();\n private readonly localBlocks = signal<FormBlock[]>([]);\n readonly effectiveBlocks = computed<FormBlock[]>(() => this.blocks() ?? this.localBlocks());\n\n /** Palette = built-ins + host extras + saved blocks as a group. */\n readonly catalog = computed<CatalogGroup[]>(() => {\n const groups = [...DEFAULT_CATALOG, ...this.extraCatalog()];\n const blocks = this.effectiveBlocks();\n if (blocks.length > 0) {\n groups.push({\n label: 'Blocks',\n entries: blocks.map((block) => ({\n type: `block:${block.id}`,\n label: block.label,\n icon: '⊞',\n create: (schema: FormSchema) => rekeyBlock(block.node, schema),\n })),\n });\n }\n return groups;\n });\n readonly diagnostics = computed<SchemaDiagnostic[]>(() => validateSchema(this.draft()));\n readonly exportedJson = computed(() => JSON.stringify(this.draft(), null, 2));\n\n /** Disposable engine driving the canvas leaves (defaults visible). */\n readonly canvasEngine = computed<FormEngine>(() => createFormEngine(this.draft()));\n\n readonly selectedNode = computed<FieldNode | null>(() => {\n const path = this.selected();\n return path ? (getNodeAt(this.draft(), path) ?? null) : null;\n });\n\n /** Flat structure tree for navigation. */\n readonly tree = computed(() => {\n const items: Array<{ id: string; label: string; depth: number; path: NodePath }> = [];\n const visit = (nodes: FieldNode[], depth: number, prefix: NodePath) => {\n nodes.forEach((node, i) => {\n const path = [...prefix, i];\n items.push({\n id: path.join('.'),\n label: `${node.label ?? node.key} · ${node.type}`,\n depth,\n path,\n });\n if (node.kind === 'container') visit(node.children, depth + 1, path);\n });\n };\n visit(this.draft().fields, 0, []);\n return items;\n });\n\n constructor() {\n this.layout.set(loadLayout(this.storage));\n this.localBlocks.set(loadBlocks(this.storage));\n // First palette group starts expanded; the rest opens on demand.\n const first = this.catalog()[0]?.label;\n if (first) this.openGroups.set(new Set([first]));\n\n // (Re)load the document whenever the host hands a new definition in.\n effect(() => {\n const native = this.schema();\n const source = this.source();\n // Hosts often feed `schemaChanged` back into [schema] (controlled\n // usage) — the echo of our own draft must not reset history/selection.\n // `untracked` is essential: reading the draft as a dependency would make\n // every edit re-run this effect and revert the document.\n if (native && native === untracked(() => this.draft())) return;\n let initial = EMPTY_SCHEMA;\n if (native) {\n initial = native;\n } else if (source !== null && source !== undefined) {\n try {\n initial = importForm(source, [createLegacyImporter()]).schema;\n } catch {\n initial = EMPTY_SCHEMA;\n }\n }\n this.draft.set(initial);\n this.past.set([]);\n this.future.set([]);\n this.selected.set(null);\n });\n }\n\n // -- document mutation ----------------------------------------------------\n\n private commit(next: FormSchema): void {\n this.past.update((stack) => [...stack.slice(-(HISTORY_LIMIT - 1)), this.draft()]);\n this.future.set([]);\n this.draft.set(next);\n this.schemaChanged.emit(next);\n }\n\n undo(): void {\n const past = this.past();\n if (past.length === 0) return;\n this.future.update((stack) => [this.draft(), ...stack]);\n this.past.set(past.slice(0, -1));\n this.draft.set(past[past.length - 1]!);\n this.selected.set(null);\n this.schemaChanged.emit(this.draft());\n }\n\n redo(): void {\n const future = this.future();\n if (future.length === 0) return;\n this.past.update((stack) => [...stack, this.draft()]);\n this.future.set(future.slice(1));\n this.draft.set(future[0]!);\n this.selected.set(null);\n this.schemaChanged.emit(this.draft());\n }\n\n add(entry: CatalogEntry): void {\n const node = entry.create(this.draft());\n const target = this.insertionPath();\n this.commit(insertNode(this.draft(), target, node));\n this.select(target);\n }\n\n /** New nodes land inside a selected container, after a selected leaf, or at the end. */\n private insertionPath(): NodePath {\n const selected = this.selected();\n if (!selected) return [this.draft().fields.length];\n const node = getNodeAt(this.draft(), selected);\n if (node?.kind === 'container' && node.type !== 'columns') {\n return [...selected, node.children.length];\n }\n const { parent, index } = parentOf(selected);\n return [...parent, index + 1];\n }\n\n removeSelected(): void {\n const selected = this.selected();\n if (!selected) return;\n this.commit(removeNode(this.draft(), selected));\n this.selected.set(null);\n }\n\n duplicateSelected(): void {\n const selected = this.selected();\n if (!selected) return;\n this.commit(duplicateNode(this.draft(), selected));\n }\n\n moveSelected(delta: -1 | 1): void {\n const selected = this.selected();\n if (!selected) return;\n const { parent, index } = parentOf(selected);\n const siblings =\n parent.length === 0\n ? this.draft().fields\n : (getNodeAt(this.draft(), parent) as { children?: FieldNode[] })?.children ?? [];\n const target = index + delta;\n if (target < 0 || target >= siblings.length) return;\n this.commit(moveNode(this.draft(), selected, [...parent, target]));\n this.select([...parent, target]);\n }\n\n applyPatch(event: InspectorPatch): void {\n const selected = this.selected();\n if (!selected) return;\n this.commit(updateNode(this.draft(), selected, event.patch));\n }\n\n // -- reusable blocks ------------------------------------------------------\n\n /** Saves the selected node (with its subtree) as a reusable block. */\n saveAsBlock(): void {\n const selected = this.selected();\n const node = selected ? getNodeAt(this.draft(), selected) : null;\n if (!node) return;\n const label = node.label ?? node.key;\n const block: FormBlock = {\n id: `${node.key}-${this.effectiveBlocks().length + 1}`,\n label,\n node: JSON.parse(JSON.stringify(node)) as FieldNode,\n };\n const next = [...this.effectiveBlocks(), block];\n if (this.blocks() === null) {\n this.localBlocks.set(next);\n saveBlocks(this.storage, next);\n }\n this.blocksChanged.emit(next);\n }\n\n removeBlock(id: string): void {\n const next = this.effectiveBlocks().filter((block) => block.id !== id);\n if (this.blocks() === null) {\n this.localBlocks.set(next);\n saveBlocks(this.storage, next);\n }\n this.blocksChanged.emit(next);\n }\n\n isBlockEntry(entry: CatalogEntry): boolean {\n return entry.type.startsWith('block:');\n }\n\n blockIdOf(entry: CatalogEntry): string {\n return entry.type.slice('block:'.length);\n }\n\n // -- drag and drop --------------------------------------------------------\n\n /** What is being dragged: a palette entry or an existing node. */\n private readonly dragging = signal<\n { kind: 'entry'; entry: CatalogEntry } | { kind: 'node'; path: NodePath } | null\n >(null);\n /** Drop target highlighted while hovering. */\n readonly dropTarget = signal<string | null>(null);\n\n startEntryDrag(entry: CatalogEntry, event: DragEvent): void {\n this.dragging.set({ kind: 'entry', entry });\n event.dataTransfer?.setData('text/plain', entry.type);\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'copy';\n }\n\n startNodeDrag(path: NodePath, event: DragEvent): void {\n this.dragging.set({ kind: 'node', path });\n event.dataTransfer?.setData('text/plain', path.join('.'));\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'move';\n }\n\n endDrag(): void {\n this.dragging.set(null);\n this.dropTarget.set(null);\n }\n\n allowDrop(target: NodePath, event: DragEvent): void {\n if (!this.dragging()) return;\n event.preventDefault();\n event.stopPropagation();\n this.dropTarget.set(target.join('.'));\n }\n\n /** Drops onto `target`, the position the node should occupy. */\n drop(target: NodePath, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n const dragging = this.dragging();\n this.endDrag();\n if (!dragging) return;\n\n if (dragging.kind === 'entry') {\n const node = dragging.entry.create(this.draft());\n this.commit(insertNode(this.draft(), target, node));\n this.select(target);\n return;\n }\n const from = dragging.path;\n if (isSameOrInside(from, target)) return; // never drop a node into itself\n const adjusted = adjustAfterRemoval(from, target);\n this.commit(moveNode(this.draft(), from, adjusted));\n this.select(adjusted);\n }\n\n isDropTarget(path: NodePath): boolean {\n return this.dropTarget() === path.join('.');\n }\n\n isDragging(): boolean {\n return this.dragging() !== null;\n }\n\n // -- selection ------------------------------------------------------------\n\n select(path: NodePath | null): void {\n this.selected.set(path);\n }\n\n isSelectedPath(path: NodePath): boolean {\n return this.selected()?.join('.') === path.join('.');\n }\n\n // -- import / export ------------------------------------------------------\n\n openExport(): void {\n this.dialog.set(this.dialog() === 'export' ? null : 'export');\n }\n\n doImport(raw: string): void {\n try {\n const parsed: unknown = JSON.parse(raw);\n const { schema } = importForm(parsed, [createLegacyImporter()]);\n this.commit(schema);\n this.selected.set(null);\n this.dialog.set(null);\n this.importError.set('');\n } catch (error) {\n this.importError.set('Could not import: ' + String(error));\n }\n }\n\n // -- keyboard -------------------------------------------------------------\n\n onKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName)) return;\n const key = event.key.toLowerCase();\n if (event.ctrlKey && key === 'z' && !event.shiftKey) {\n event.preventDefault();\n this.undo();\n } else if ((event.ctrlKey && key === 'y') || (event.ctrlKey && event.shiftKey && key === 'z')) {\n event.preventDefault();\n this.redo();\n } else if (event.ctrlKey && key === 'd') {\n event.preventDefault();\n this.duplicateSelected();\n } else if (key === 'delete') {\n event.preventDefault();\n this.removeSelected();\n }\n }\n}\n","/*\n * Designer entry point (`@mosaicoo/form-angular/designer`).\n *\n * Authoring lives behind this secondary entry so applications that only\n * RENDER forms never load designer code — required for federated hosts and\n * lazy loading.\n */\nexport { FormDesignerComponent } from './designer.component.js';\nexport { DesignerNodeComponent } from './designer-node.component.js';\nexport { InspectorComponent, type InspectorPatch } from './inspector.component.js';\nexport { DEFAULT_CATALOG, type CatalogEntry, type CatalogGroup } from './field-catalog.js';\nexport type { FormBlock } from './blocks.js';\nexport {\n DEFAULT_LAYOUT,\n PANEL_LABELS,\n WORKSPACE_PRESETS,\n type DockSide,\n type PanelId,\n type WorkspaceLayout,\n type WorkspacePreset,\n} from './workspace.js';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["input","STORAGE_KEY"],"mappings":"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"}
1
+ {"version":3,"file":"mosaicoo-form-angular-designer.mjs","sources":["../../../packages/angular/designer/src/drag-drop.ts","../../../packages/angular/designer/src/designer-node.component.ts","../../../packages/angular/designer/src/inspector.component.ts","../../../packages/angular/designer/src/field-catalog.ts","../../../packages/angular/designer/src/blocks.ts","../../../packages/angular/designer/src/designer-labels.ts","../../../packages/angular/designer/src/workspace.ts","../../../packages/angular/designer/src/designer.component.ts","../../../packages/angular/designer/src/public-api.ts","../../../packages/angular/designer/src/mosaicoo-form-angular-designer.ts"],"sourcesContent":["import type { NodePath } from '@mosaicoo/form-core';\n\n/**\n * Drop-target identity shared by the canvas and the node components.\n * A target is a position in a parent's children list, optionally bound to a\n * column of a `columns` container.\n */\nexport interface DropTarget {\n path: NodePath;\n /** Column index when the parent lays children out in columns. */\n column?: number;\n}\n\nexport function dropId(target: DropTarget): string {\n return target.column === undefined\n ? target.path.join('.')\n : `${target.path.join('.')}@${target.column}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type { ContainerField, FieldNode, FormEngine, NodePath } from '@mosaicoo/form-core';\nimport { FormNodeComponent } from '@mosaicoo/form-angular';\nimport { dropId, type DropTarget } from './drag-drop.js';\n\n/**\n * Canvas node: draws the selection frame and structure chrome, delegating\n * leaf rendering to the RUNTIME `<mform-node>` so what you see is what the\n * renderer will produce. Canvas controls are non-interactive — testing\n * happens in Preview mode.\n *\n * Drop zones sit between children (and inside each column), so fields can be\n * dragged INTO containers, not just reordered at the root.\n */\n@Component({\n selector: 'mform-designer-node',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [FormNodeComponent],\n template: `\n @let n = node();\n <div\n class=\"dz-node\"\n [class.is-selected]=\"isSelected()\"\n [class.is-container]=\"n.kind === 'container'\"\n (click)=\"onSelect($event)\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"onSelect($event)\"\n [attr.aria-label]=\"chip() + (isSelected() ? ' (selected)' : '')\"\n >\n <span class=\"dz-chip\">{{ chip() }}</span>\n\n @if (n.kind === 'container') {\n @if (n.type === 'tabs') {\n <div class=\"dz-tabbar\">\n @for (tab of container().children; track tab.key; let i = $index) {\n <button\n type=\"button\"\n class=\"dz-tab\"\n [class.is-active]=\"activeTab() === i\"\n (click)=\"setTab(i, $event)\"\n >\n {{ tab.label || 'Tab ' + (i + 1) }}\n </button>\n }\n </div>\n @for (tab of container().children; track tab.key; let i = $index) {\n @if (activeTab() === i) {\n <div class=\"dz-children\">\n <mform-designer-node\n [node]=\"tab\"\n [path]=\"childPath(i)\"\n [engine]=\"engine()\"\n [selected]=\"selected()\"\n [dragging]=\"dragging()\"\n [activeDrop]=\"activeDrop()\"\n (selectNode)=\"selectNode.emit($event)\"\n (nodeDragStart)=\"nodeDragStart.emit($event)\"\n (dragOverTarget)=\"dragOverTarget.emit($event)\"\n (dropOnTarget)=\"dropOnTarget.emit($event)\"\n (dragFinished)=\"dragFinished.emit()\"\n />\n </div>\n }\n }\n } @else if (n.type === 'columns' && container().columns?.length) {\n <div class=\"dz-columns\" [style.grid-template-columns]=\"columnsTemplate()\">\n @for (column of container().columns; track $index; let c = $index) {\n <div class=\"dz-column\">\n @for (childIndex of column.children; track childIndex) {\n <div\n class=\"dz-dropzone\"\n [class.is-over]=\"isOver(childPath(childIndex), c)\"\n (dragover)=\"onDragOver(childPath(childIndex), c, $event)\"\n (drop)=\"onDrop(childPath(childIndex), c, $event)\"\n ></div>\n <mform-designer-node\n [node]=\"container().children[childIndex]!\"\n [path]=\"childPath(childIndex)\"\n [engine]=\"engine()\"\n [selected]=\"selected()\"\n [dragging]=\"dragging()\"\n [activeDrop]=\"activeDrop()\"\n draggable=\"true\"\n (dragstart)=\"onDragStart(childPath(childIndex), $event)\"\n (dragend)=\"dragFinished.emit()\"\n (selectNode)=\"selectNode.emit($event)\"\n (nodeDragStart)=\"nodeDragStart.emit($event)\"\n (dragOverTarget)=\"dragOverTarget.emit($event)\"\n (dropOnTarget)=\"dropOnTarget.emit($event)\"\n (dragFinished)=\"dragFinished.emit()\"\n />\n }\n <div\n class=\"dz-dropzone is-last\"\n [class.is-over]=\"isOver(childPath(container().children.length), c)\"\n (dragover)=\"onDragOver(childPath(container().children.length), c, $event)\"\n (drop)=\"onDrop(childPath(container().children.length), c, $event)\"\n ></div>\n @if (column.children.length === 0) {\n <div class=\"dz-empty\">empty column</div>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"dz-children\">\n @for (child of container().children; track child.key; let i = $index) {\n <div\n class=\"dz-dropzone\"\n [class.is-over]=\"isOver(childPath(i))\"\n (dragover)=\"onDragOver(childPath(i), undefined, $event)\"\n (drop)=\"onDrop(childPath(i), undefined, $event)\"\n ></div>\n <mform-designer-node\n [node]=\"child\"\n [path]=\"childPath(i)\"\n [engine]=\"engine()\"\n [selected]=\"selected()\"\n [dragging]=\"dragging()\"\n [activeDrop]=\"activeDrop()\"\n draggable=\"true\"\n (dragstart)=\"onDragStart(childPath(i), $event)\"\n (dragend)=\"dragFinished.emit()\"\n (selectNode)=\"selectNode.emit($event)\"\n (nodeDragStart)=\"nodeDragStart.emit($event)\"\n (dragOverTarget)=\"dragOverTarget.emit($event)\"\n (dropOnTarget)=\"dropOnTarget.emit($event)\"\n (dragFinished)=\"dragFinished.emit()\"\n />\n } @empty {\n <div class=\"dz-empty\">empty — drop fields here</div>\n }\n <div\n class=\"dz-dropzone is-last\"\n [class.is-over]=\"isOver(childPath(container().children.length))\"\n (dragover)=\"onDragOver(childPath(container().children.length), undefined, $event)\"\n (drop)=\"onDrop(childPath(container().children.length), undefined, $event)\"\n ></div>\n </div>\n }\n } @else {\n <div class=\"dz-leaf\" inert>\n <mform-node [node]=\"n\" [engine]=\"engine()\" [tick]=\"0\" />\n </div>\n }\n </div>\n `,\n})\nexport class DesignerNodeComponent {\n readonly node = input.required<FieldNode>();\n readonly path = input.required<NodePath>();\n readonly engine = input.required<FormEngine>();\n readonly selected = input<NodePath | null>(null);\n /** True while something is being dragged (reveals the drop zones). */\n readonly dragging = input<boolean>(false);\n /** Id of the drop zone currently hovered. */\n readonly activeDrop = input<string | null>(null);\n\n readonly selectNode = output<NodePath>();\n readonly nodeDragStart = output<NodePath>();\n readonly dragOverTarget = output<DropTarget>();\n readonly dropOnTarget = output<DropTarget>();\n readonly dragFinished = output<void>();\n\n readonly activeTab = signal(0);\n\n container(): ContainerField {\n return this.node() as ContainerField;\n }\n\n chip(): string {\n const node = this.node();\n const label = node.label ?? node.key;\n return `${label} · ${node.type}`;\n }\n\n isSelected(): boolean {\n const selected = this.selected();\n return selected !== null && selected.join('.') === this.path().join('.');\n }\n\n childPath(index: number): NodePath {\n return [...this.path(), index];\n }\n\n columnsTemplate(): string {\n const columns = this.container().columns ?? [];\n const total = columns.reduce((sum, c) => sum + c.width, 0) || 12;\n return columns.map((c) => `${((c.width / total) * 100).toFixed(3)}fr`).join(' ');\n }\n\n onSelect(event: Event): void {\n event.stopPropagation();\n this.selectNode.emit(this.path());\n }\n\n setTab(index: number, event: Event): void {\n event.stopPropagation();\n this.activeTab.set(index);\n }\n\n // -- drag and drop --------------------------------------------------------\n\n isOver(path: NodePath, column?: number): boolean {\n return this.activeDrop() === dropId({ path, column });\n }\n\n onDragStart(path: NodePath, event: Event): void {\n event.stopPropagation();\n this.nodeDragStart.emit(path);\n }\n\n onDragOver(path: NodePath, column: number | undefined, event: DragEvent): void {\n if (!this.dragging()) return;\n event.preventDefault();\n event.stopPropagation();\n this.dragOverTarget.emit({ path, column });\n }\n\n onDrop(path: NodePath, column: number | undefined, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dropOnTarget.emit({ path, column });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type {\n Condition,\n ContainerField,\n FieldNode,\n FieldOption,\n FormSchema,\n InputField,\n StaticField,\n ValidatorSpec,\n} from '@mosaicoo/form-core';\nimport { collectInputs } from '@mosaicoo/form-core';\n\n/** Patch emitted towards the shell (applied via core `updateNode`). */\nexport interface InspectorPatch {\n patch: Partial<FieldNode>;\n}\n\n/**\n * Property panel of the selected node. Emits immutable patches — the shell\n * owns the document, history and validation.\n */\n@Component({\n selector: 'mform-inspector',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @let n = node();\n <div class=\"dz-inspector\">\n <h3>{{ n.type }} <code>{{ n.key }}</code></h3>\n\n <label class=\"dz-prop\">\n <span>Key</span>\n <input type=\"text\" [value]=\"n.key\" (change)=\"patchText('key', $event)\" />\n </label>\n <label class=\"dz-prop\">\n <span>Label</span>\n <input type=\"text\" [value]=\"n.label ?? ''\" (change)=\"patchText('label', $event)\" />\n </label>\n <label class=\"dz-prop\">\n <span>Description</span>\n <input type=\"text\" [value]=\"n.description ?? ''\" (change)=\"patchText('description', $event)\" />\n </label>\n\n @if (n.kind === 'input') {\n <label class=\"dz-prop\">\n <span>Placeholder</span>\n <input type=\"text\" [value]=\"field().placeholder ?? ''\" (change)=\"patchText('placeholder', $event)\" />\n </label>\n <label class=\"dz-prop\">\n <span>Default value</span>\n <input type=\"text\" [value]=\"defaultValueText()\" (change)=\"patchDefault($event)\" />\n </label>\n <label class=\"dz-check\">\n <input type=\"checkbox\" [checked]=\"isRequired()\" (change)=\"toggleRequired($event)\" />\n <span>Required</span>\n </label>\n\n <details class=\"dz-section\" open>\n <summary>Validation</summary>\n <label class=\"dz-prop\"><span>Min length</span>\n <input type=\"number\" [value]=\"validatorValue('minLength')\" (change)=\"patchValidator('minLength', $event)\" /></label>\n <label class=\"dz-prop\"><span>Max length</span>\n <input type=\"number\" [value]=\"validatorValue('maxLength')\" (change)=\"patchValidator('maxLength', $event)\" /></label>\n <label class=\"dz-prop\"><span>Min</span>\n <input type=\"number\" [value]=\"validatorValue('min')\" (change)=\"patchValidator('min', $event)\" /></label>\n <label class=\"dz-prop\"><span>Max</span>\n <input type=\"number\" [value]=\"validatorValue('max')\" (change)=\"patchValidator('max', $event)\" /></label>\n <label class=\"dz-prop\"><span>Pattern (regex)</span>\n <input type=\"text\" [value]=\"patternValue()\" (change)=\"patchPattern($event)\" /></label>\n </details>\n\n @if (hasOptions()) {\n <details class=\"dz-section\" open>\n <summary>Options</summary>\n @for (option of field().options ?? []; track $index; let i = $index) {\n <div class=\"dz-option-row\">\n <input type=\"text\" placeholder=\"Label\" [value]=\"option.label\"\n (change)=\"patchOption(i, 'label', $event)\" />\n <input type=\"text\" placeholder=\"Value\" [value]=\"option.value\"\n (change)=\"patchOption(i, 'value', $event)\" />\n <button type=\"button\" (click)=\"removeOption(i)\" aria-label=\"Remove option\">✕</button>\n </div>\n }\n <button type=\"button\" class=\"dz-add\" (click)=\"addOption()\">+ Option</button>\n </details>\n }\n }\n\n @if (n.kind === 'static' && n.type === 'content') {\n <label class=\"dz-prop\">\n <span>Content (HTML)</span>\n <textarea rows=\"5\" [value]=\"static_().content ?? ''\" (change)=\"patchText('content', $event)\"></textarea>\n </label>\n }\n\n @if (n.kind === 'container' && n.type === 'columns') {\n <label class=\"dz-prop\">\n <span>Column widths (of 12, comma-separated)</span>\n <input type=\"text\" [value]=\"columnWidths()\" (change)=\"patchColumnWidths($event)\" />\n </label>\n }\n\n <details class=\"dz-section\">\n <summary>Visibility</summary>\n <label class=\"dz-check\">\n <input type=\"checkbox\" [checked]=\"n.hidden === true\" (change)=\"patchFlag('hidden', $event)\" />\n <span>Hidden</span>\n </label>\n <label class=\"dz-check\">\n <input type=\"checkbox\" [checked]=\"n.disabled === true\" (change)=\"patchFlag('disabled', $event)\" />\n <span>Disabled</span>\n </label>\n <label class=\"dz-prop\">\n <span>Show when field…</span>\n <select [value]=\"simpleCondition()?.field ?? ''\" (change)=\"patchConditionField($event)\">\n <option value=\"\">(always visible)</option>\n @for (path of otherInputPaths(); track path) {\n <option [value]=\"path\" [selected]=\"simpleCondition()?.field === path\">{{ path }}</option>\n }\n </select>\n </label>\n @if (simpleCondition()) {\n <label class=\"dz-prop\">\n <span>…equals value</span>\n <input type=\"text\" [value]=\"conditionValueText()\" (change)=\"patchConditionValue($event)\" />\n </label>\n }\n <label class=\"dz-prop\">\n <span>Show when expression (advanced)</span>\n <input\n type=\"text\"\n placeholder=\"ex.: total > 1000 && status == 'ok'\"\n [value]=\"conditionExpression()\"\n (change)=\"patchConditionExpression($event)\"\n />\n </label>\n </details>\n\n @if (n.kind === 'input') {\n <details class=\"dz-section\">\n <summary>Advanced</summary>\n <label class=\"dz-prop\">\n <span>Calculated value (expression)</span>\n <input\n type=\"text\"\n placeholder=\"ex.: qty * price\"\n [value]=\"field().calculate ?? ''\"\n (change)=\"patchCalculate($event)\"\n />\n </label>\n <label class=\"dz-prop\">\n <span>Input mask (0=digit A=letter S=any)</span>\n <input\n type=\"text\"\n placeholder=\"ex.: 000.000.000-00\"\n [value]=\"field().format?.mask ?? ''\"\n (change)=\"patchMask($event)\"\n />\n </label>\n <label class=\"dz-check\">\n <input type=\"checkbox\" [checked]=\"field().multiple === true\" (change)=\"patchMultiple($event)\" />\n <span>Multiple values</span>\n </label>\n </details>\n\n <details class=\"dz-section\">\n <summary>Options source</summary>\n <label class=\"dz-prop\">\n <span>Source</span>\n <select [value]=\"sourceKind()\" (change)=\"patchSourceKind($event)\">\n <option value=\"\">Static list</option>\n <option value=\"provider\" [selected]=\"sourceKind() === 'provider'\">Host provider</option>\n <option value=\"remote\" [selected]=\"sourceKind() === 'remote'\">Remote URL</option>\n </select>\n </label>\n @if (sourceKind() === 'provider') {\n <label class=\"dz-prop\">\n <span>Provider name</span>\n <input type=\"text\" [value]=\"providerName()\" (change)=\"patchProviderName($event)\" />\n </label>\n }\n @if (sourceKind() === 'remote') {\n <label class=\"dz-prop\">\n <span>URL</span>\n <input type=\"text\" [value]=\"remoteUrl()\" (change)=\"patchRemoteUrl($event)\" />\n </label>\n }\n @if (sourceKind()) {\n <label class=\"dz-prop\">\n <span>Refresh on (field path or \"data\")</span>\n <input type=\"text\" [value]=\"refreshOn()\" (change)=\"patchRefreshOn($event)\" />\n </label>\n }\n </details>\n }\n\n <!-- Type-specific configuration for CUSTOM components: the host reads\n these from field.props (e.g. a board's columns, a chart's series). -->\n <details class=\"dz-section\" [open]=\"hasProps()\">\n <summary>Type settings (props)</summary>\n <label class=\"dz-prop\">\n <span>JSON passed to the field component</span>\n <textarea\n rows=\"5\"\n spellcheck=\"false\"\n [value]=\"propsText()\"\n (change)=\"patchProps($event)\"\n ></textarea>\n </label>\n @if (propsError()) {\n <p class=\"dz-import-error\" role=\"alert\">{{ propsError() }}</p>\n }\n </details>\n </div>\n `,\n})\nexport class InspectorComponent {\n readonly node = input.required<FieldNode>();\n readonly schema = input.required<FormSchema>();\n readonly nodePatch = output<InspectorPatch>();\n\n field(): InputField {\n return this.node() as InputField;\n }\n\n static_(): StaticField {\n return this.node() as StaticField;\n }\n\n hasOptions(): boolean {\n return ['select', 'radio', 'checkbox-group'].includes(this.node().type);\n }\n\n readonly otherInputPaths = computed(() =>\n collectInputs(this.schema())\n .map((entry) => entry.path)\n .filter((path) => !path.includes('*')),\n );\n\n private emitPatch(patch: Partial<FieldNode>): void {\n this.nodePatch.emit({ patch });\n }\n\n private inputValue(event: Event): string {\n return (event.target as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value;\n }\n\n patchText(member: 'key' | 'label' | 'description' | 'placeholder' | 'content', event: Event): void {\n const value = this.inputValue(event).trim();\n if (member === 'key' && value === '') return; // key can never be emptied\n this.emitPatch({ [member]: value === '' ? undefined : value } as Partial<FieldNode>);\n }\n\n patchFlag(member: 'hidden' | 'disabled', event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this.emitPatch({ [member]: checked ? true : undefined } as Partial<FieldNode>);\n }\n\n defaultValueText(): string {\n const value = this.field().defaultValue;\n return value === undefined || value === null ? '' : String(value);\n }\n\n patchDefault(event: Event): void {\n const raw = this.inputValue(event);\n if (raw === '') {\n this.emitPatch({ defaultValue: undefined } as Partial<FieldNode>);\n return;\n }\n const field = this.field();\n let value: unknown = raw;\n if (field.dataType === 'number') value = Number(raw);\n if (field.dataType === 'boolean') value = raw === 'true';\n this.emitPatch({ defaultValue: value } as Partial<FieldNode>);\n }\n\n // -- validators -----------------------------------------------------------\n\n private validators(): ValidatorSpec[] {\n return this.field().validators ?? [];\n }\n\n isRequired(): boolean {\n return this.validators().some((v) => v.type === 'required');\n }\n\n toggleRequired(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n const rest = this.validators().filter((v) => v.type !== 'required');\n this.emitValidators(checked ? [{ type: 'required' }, ...rest] : rest);\n }\n\n validatorValue(type: 'minLength' | 'maxLength' | 'min' | 'max'): string {\n const spec = this.validators().find((v) => v.type === type);\n return spec && 'value' in spec ? String(spec.value) : '';\n }\n\n patchValidator(type: 'minLength' | 'maxLength' | 'min' | 'max', event: Event): void {\n const raw = this.inputValue(event);\n const rest = this.validators().filter((v) => v.type !== type);\n this.emitValidators(raw === '' ? rest : [...rest, { type, value: Number(raw) }]);\n }\n\n patternValue(): string {\n const spec = this.validators().find((v) => v.type === 'pattern');\n return spec && 'value' in spec ? String(spec.value) : '';\n }\n\n patchPattern(event: Event): void {\n const raw = this.inputValue(event);\n const rest = this.validators().filter((v) => v.type !== 'pattern');\n this.emitValidators(raw === '' ? rest : [...rest, { type: 'pattern', value: raw }]);\n }\n\n private emitValidators(validators: ValidatorSpec[]): void {\n this.emitPatch({ validators: validators.length ? validators : undefined } as Partial<FieldNode>);\n }\n\n // -- options --------------------------------------------------------------\n\n patchOption(index: number, member: 'label' | 'value', event: Event): void {\n const options = [...(this.field().options ?? [])];\n options[index] = { ...options[index]!, [member]: this.inputValue(event) };\n this.emitPatch({ options } as Partial<FieldNode>);\n }\n\n addOption(): void {\n const options = [...(this.field().options ?? [])];\n options.push({ label: `Option ${options.length + 1}`, value: `option${options.length + 1}` });\n this.emitPatch({ options } as Partial<FieldNode>);\n }\n\n removeOption(index: number): void {\n const options = (this.field().options ?? []).filter((_, i) => i !== index);\n this.emitPatch({ options: options.length ? options : undefined } as Partial<FieldNode>);\n }\n\n // -- columns --------------------------------------------------------------\n\n columnWidths(): string {\n return ((this.node() as ContainerField).columns ?? []).map((c) => c.width).join(', ');\n }\n\n patchColumnWidths(event: Event): void {\n const container = this.node() as ContainerField;\n const widths = this.inputValue(event)\n .split(',')\n .map((part) => Number(part.trim()))\n .filter((width) => Number.isFinite(width) && width > 0);\n if (widths.length === 0) return;\n const existing = container.columns ?? [];\n const columns = widths.map((width, i) => ({\n width,\n children: existing[i]?.children ?? [],\n }));\n // children in dropped columns are re-attached to the last remaining one\n for (let i = widths.length; i < existing.length; i++) {\n columns[columns.length - 1]!.children.push(...existing[i]!.children);\n }\n this.emitPatch({ columns } as Partial<FieldNode>);\n }\n\n // -- conditional ----------------------------------------------------------\n\n simpleCondition(): Extract<Condition, { field: string }> | null {\n const condition = this.node().conditional;\n return condition && 'field' in condition ? condition : null;\n }\n\n conditionExpression(): string {\n const condition = this.node().conditional;\n return condition && 'expression' in condition ? condition.expression : '';\n }\n\n conditionValueText(): string {\n const value = this.simpleCondition()?.value;\n return value === undefined || value === null ? '' : String(value);\n }\n\n patchConditionField(event: Event): void {\n const field = this.inputValue(event);\n if (field === '') {\n this.emitPatch({ conditional: undefined });\n return;\n }\n const current = this.simpleCondition();\n const conditional: Condition = {\n show: current?.show ?? true,\n op: current?.op ?? 'eq',\n field,\n value: current?.value ?? '',\n };\n this.emitPatch({ conditional });\n }\n\n patchConditionValue(event: Event): void {\n const current = this.simpleCondition();\n if (!current) return;\n const raw = this.inputValue(event);\n const value: unknown = raw === 'true' ? true : raw === 'false' ? false : raw;\n this.emitPatch({ conditional: { ...current, value } });\n }\n\n patchConditionExpression(event: Event): void {\n const expression = this.inputValue(event).trim();\n if (expression === '') {\n // clearing the expression keeps a simple condition, if one existed\n this.emitPatch({ conditional: this.simpleCondition() ?? undefined });\n return;\n }\n this.emitPatch({ conditional: { show: true, expression } });\n }\n\n // -- advanced (calculate / mask) ------------------------------------------\n\n patchCalculate(event: Event): void {\n const expression = this.inputValue(event).trim();\n this.emitPatch({ calculate: expression === '' ? undefined : expression } as Partial<FieldNode>);\n }\n\n patchMask(event: Event): void {\n const mask = this.inputValue(event).trim();\n this.emitPatch({ format: mask === '' ? undefined : { mask } } as Partial<FieldNode>);\n }\n\n patchMultiple(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this.emitPatch({\n multiple: checked ? true : undefined,\n dataType: checked ? 'array' : 'string',\n } as Partial<FieldNode>);\n }\n\n // -- options source -------------------------------------------------------\n\n sourceKind(): '' | 'provider' | 'remote' {\n return this.field().optionsSource?.type ?? '';\n }\n\n providerName(): string {\n const source = this.field().optionsSource;\n return source?.type === 'provider' ? source.name : '';\n }\n\n remoteUrl(): string {\n const source = this.field().optionsSource;\n return source?.type === 'remote' ? source.url : '';\n }\n\n refreshOn(): string {\n return this.field().optionsSource?.refreshOn ?? '';\n }\n\n patchSourceKind(event: Event): void {\n const kind = this.inputValue(event);\n if (kind === 'provider') {\n this.emitPatch({\n optionsSource: { type: 'provider', name: this.providerName() || this.field().key },\n } as Partial<FieldNode>);\n } else if (kind === 'remote') {\n this.emitPatch({\n optionsSource: { type: 'remote', url: this.remoteUrl() },\n } as Partial<FieldNode>);\n } else {\n this.emitPatch({ optionsSource: undefined } as Partial<FieldNode>);\n }\n }\n\n patchProviderName(event: Event): void {\n const name = this.inputValue(event).trim();\n if (name === '') return;\n this.emitPatch({\n optionsSource: { ...this.field().optionsSource, type: 'provider', name },\n } as Partial<FieldNode>);\n }\n\n patchRemoteUrl(event: Event): void {\n const url = this.inputValue(event).trim();\n this.emitPatch({\n optionsSource: { ...this.field().optionsSource, type: 'remote', url },\n } as Partial<FieldNode>);\n }\n\n patchRefreshOn(event: Event): void {\n const source = this.field().optionsSource;\n if (!source) return;\n const refreshOn = this.inputValue(event).trim();\n const next = { ...source };\n if (refreshOn === '') delete next.refreshOn;\n else next.refreshOn = refreshOn;\n this.emitPatch({ optionsSource: next } as Partial<FieldNode>);\n }\n\n // -- props (type-specific settings for custom components) -----------------\n\n readonly propsError = signal('');\n\n hasProps(): boolean {\n return Object.keys(this.node().props ?? {}).length > 0;\n }\n\n propsText(): string {\n const props = this.node().props;\n return props && Object.keys(props).length > 0 ? JSON.stringify(props, null, 2) : '';\n }\n\n patchProps(event: Event): void {\n const raw = this.inputValue(event).trim();\n if (raw === '') {\n this.propsError.set('');\n this.emitPatch({ props: undefined });\n return;\n }\n try {\n const parsed: unknown = JSON.parse(raw);\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n this.propsError.set('Props must be a JSON object.');\n return;\n }\n this.propsError.set('');\n this.emitPatch({ props: parsed as Record<string, unknown> });\n } catch (error) {\n this.propsError.set('Invalid JSON: ' + String(error instanceof Error ? error.message : error));\n }\n }\n}\n\n/** Re-export so the shell can type option edits without a deep import. */\nexport type { FieldOption };\n","import type { FieldNode, FormSchema } from '@mosaicoo/form-core';\nimport { generateKey } from '@mosaicoo/form-core';\n\n/**\n * Palette catalog: the node factories the Designer offers. Hosts can extend\n * the palette via the `extraCatalog` input of `<mform-designer>` — entries\n * here stay generic (no domain assumptions).\n */\n\nexport interface CatalogEntry {\n /** Field `type` produced (also used to key custom renderers). */\n type: string;\n label: string;\n /** Short glyph shown in the palette. */\n icon: string;\n create(schema: FormSchema): FieldNode;\n}\n\nexport interface CatalogGroup {\n label: string;\n entries: CatalogEntry[];\n}\n\nfunction input(\n type: string,\n dataType: 'string' | 'number' | 'boolean' | 'date' | 'object' | 'array',\n label: string,\n extra?: Partial<Extract<FieldNode, { kind: 'input' }>>,\n): (schema: FormSchema) => FieldNode {\n return (schema) => ({\n kind: 'input',\n key: generateKey(schema, type),\n type,\n label,\n dataType,\n ...extra,\n });\n}\n\nexport const DEFAULT_CATALOG: CatalogGroup[] = [\n {\n label: 'Basic',\n entries: [\n { type: 'text', label: 'Text', icon: 'Aa', create: input('text', 'string', 'Text') },\n { type: 'textarea', label: 'Text area', icon: '¶', create: input('textarea', 'string', 'Text area') },\n { type: 'number', label: 'Number', icon: '#', create: input('number', 'number', 'Number') },\n { type: 'currency', label: 'Currency', icon: '$', create: input('currency', 'number', 'Currency') },\n { type: 'checkbox', label: 'Checkbox', icon: '☑', create: input('checkbox', 'boolean', 'Checkbox') },\n { type: 'email', label: 'Email', icon: '@', create: input('email', 'string', 'Email', { validators: [{ type: 'email' }] }) },\n { type: 'phone', label: 'Phone', icon: '☎', create: input('phone', 'string', 'Phone') },\n { type: 'password', label: 'Password', icon: '••', create: input('password', 'string', 'Password') },\n ],\n },\n {\n label: 'Choices',\n entries: [\n {\n type: 'select', label: 'Select', icon: '▾',\n create: (s) => ({ ...input('select', 'string', 'Select')(s), options: [\n { label: 'Option 1', value: 'option1' }, { label: 'Option 2', value: 'option2' },\n ] } as FieldNode),\n },\n {\n type: 'radio', label: 'Radio', icon: '◉',\n create: (s) => ({ ...input('radio', 'string', 'Radio')(s), options: [\n { label: 'Option 1', value: 'option1' }, { label: 'Option 2', value: 'option2' },\n ] } as FieldNode),\n },\n {\n type: 'checkbox-group', label: 'Checkbox group', icon: '☷',\n create: (s) => ({ ...input('checkbox-group', 'object', 'Checkbox group')(s), options: [\n { label: 'Option 1', value: 'option1' }, { label: 'Option 2', value: 'option2' },\n ] } as FieldNode),\n },\n { type: 'tags', label: 'Tags', icon: '⌗', create: input('tags', 'array', 'Tags') },\n {\n type: 'reference', label: 'Reference', icon: '⌕',\n create: (s) => ({\n ...input('reference', 'string', 'Reference')(s),\n optionsSource: { type: 'provider', name: 'reference' },\n } as FieldNode),\n },\n ],\n },\n {\n label: 'Date & files',\n entries: [\n { type: 'datetime', label: 'Date & time', icon: '📅', create: input('datetime', 'date', 'Date & time') },\n { type: 'day', label: 'Date', icon: '▦', create: input('day', 'string', 'Date') },\n { type: 'time', label: 'Time', icon: '◷', create: input('time', 'string', 'Time') },\n { type: 'file', label: 'File', icon: '📎', create: input('file', 'array', 'File') },\n ],\n },\n {\n label: 'Layout',\n entries: [\n {\n type: 'panel', label: 'Panel', icon: '▭',\n create: (s) => ({ kind: 'container', key: generateKey(s, 'panel'), type: 'panel',\n dataScope: 'inherit', label: 'Panel', children: [] }),\n },\n {\n type: 'columns', label: 'Columns', icon: '▥',\n create: (s) => ({ kind: 'container', key: generateKey(s, 'columns'), type: 'columns',\n dataScope: 'inherit', children: [], columns: [\n { width: 6, children: [] }, { width: 6, children: [] },\n ] }),\n },\n {\n type: 'tabs', label: 'Tabs', icon: '⧉',\n create: (s) => {\n const key = generateKey(s, 'tabs');\n return { kind: 'container', key, type: 'tabs', dataScope: 'inherit', children: [\n { kind: 'container', key: `${key}-tab-1`, type: 'panel', dataScope: 'inherit', label: 'Tab 1', children: [] },\n { kind: 'container', key: `${key}-tab-2`, type: 'panel', dataScope: 'inherit', label: 'Tab 2', children: [] },\n ] };\n },\n },\n {\n type: 'accordion', label: 'Accordion', icon: '☰',\n create: (s) => {\n const key = generateKey(s, 'accordion');\n return { kind: 'container', key, type: 'accordion', dataScope: 'inherit', children: [\n { kind: 'container', key: `${key}-section-1`, type: 'panel', dataScope: 'inherit', label: 'Section 1', children: [] },\n { kind: 'container', key: `${key}-section-2`, type: 'panel', dataScope: 'inherit', label: 'Section 2', children: [] },\n ] };\n },\n },\n {\n type: 'group', label: 'Data group', icon: '⧈',\n create: (s) => ({ kind: 'container', key: generateKey(s, 'group'), type: 'group',\n dataScope: 'nested', label: 'Group', children: [] }),\n },\n {\n type: 'datagrid', label: 'Data grid', icon: '☰',\n create: (s) => ({ kind: 'container', key: generateKey(s, 'datagrid'), type: 'datagrid',\n dataScope: 'array', label: 'Data grid', children: [] }),\n },\n ],\n },\n {\n label: 'Static',\n entries: [\n {\n type: 'content', label: 'Content', icon: '¶¶',\n create: (s) => ({ kind: 'static', key: generateKey(s, 'content'), type: 'content',\n content: '<p>Content</p>' }),\n },\n {\n type: 'button', label: 'Submit button', icon: '⏎',\n create: (s) => ({ kind: 'static', key: generateKey(s, 'button'), type: 'button',\n label: 'Submit', props: { action: 'submit' } }),\n },\n ],\n },\n];\n","import type { FieldNode } from '@mosaicoo/form-core';\n\n/**\n * Reusable blocks: a named node subtree (an address group, a payment panel,\n * a compliance section) that can be dropped into any form. Blocks are plain\n * schema fragments — serializable, portable and free of runtime state.\n *\n * The designer keeps them locally by default; hosts that want blocks shared\n * across users bind `[blocks]` and persist `(blocksChanged)` themselves.\n */\n\nexport interface FormBlock {\n id: string;\n label: string;\n /** Schema subtree; keys are regenerated on insert to stay unique. */\n node: FieldNode;\n}\n\nconst STORAGE_KEY = 'mform-designer-blocks';\n\nexport function loadBlocks(storage: Storage | null): FormBlock[] {\n if (!storage) return [];\n try {\n const raw = storage.getItem(STORAGE_KEY);\n const parsed: unknown = raw ? JSON.parse(raw) : [];\n return Array.isArray(parsed) ? (parsed as FormBlock[]) : [];\n } catch {\n return [];\n }\n}\n\nexport function saveBlocks(storage: Storage | null, blocks: FormBlock[]): void {\n try {\n storage?.setItem(STORAGE_KEY, JSON.stringify(blocks));\n } catch {\n /* storage unavailable — blocks stay in memory for this session */\n }\n}\n","/**\n * Every visible string of the designer, so hosts can localize the authoring\n * experience the same way they already localize the runtime. Override\n * partially — unset entries fall back to English.\n *\n * The palette itself is DATA: translate `DEFAULT_CATALOG` (or supply your own\n * groups) and pass it through the `[catalog]` input.\n */\nexport interface DesignerLabels {\n undo: string;\n redo: string;\n moveUp: string;\n moveDown: string;\n nest: string;\n unnest: string;\n duplicate: string;\n delete: string;\n saveBlock: string;\n viewport: string;\n workspace: string;\n panels: string;\n presets: string;\n resetLayout: string;\n moveLeft: string;\n moveRight: string;\n hidePanel: string;\n import: string;\n export: string;\n preview: string;\n design: string;\n cancel: string;\n close: string;\n importTitle: string;\n importPlaceholder: string;\n importError: string;\n exportTitle: string;\n canvasEmpty: string;\n selectField: string;\n testData: string;\n panelFields: string;\n panelStructure: string;\n panelProperties: string;\n noFields: string;\n}\n\nexport const DESIGNER_LABELS_EN: DesignerLabels = {\n undo: 'Undo (Ctrl+Z)',\n redo: 'Redo (Ctrl+Y)',\n moveUp: 'Move up (Alt+↑)',\n moveDown: 'Move down (Alt+↓)',\n nest: 'Nest into the container above (Alt+→)',\n unnest: 'Move out of the container (Alt+←)',\n duplicate: 'Duplicate (Ctrl+D)',\n delete: 'Delete (Del)',\n saveBlock: 'Save as reusable block',\n viewport: 'Preview width',\n workspace: 'Workspace',\n panels: 'Panels',\n presets: 'Presets',\n resetLayout: 'Reset layout',\n moveLeft: 'Move left',\n moveRight: 'Move right',\n hidePanel: 'Hide panel',\n import: 'Import',\n export: 'Export',\n preview: 'Preview',\n design: 'Design',\n cancel: 'Cancel',\n close: 'Close',\n importTitle: 'Import definition (native schema or supported formats)',\n importPlaceholder: '{\"version\":1,\"fields\":[…]} or a legacy definition',\n importError: 'Could not import: ',\n exportTitle: 'Schema JSON',\n canvasEmpty: 'Click a field in the palette — or drag it here — to start building.',\n selectField: 'Select a field to edit its properties.',\n testData: 'Test data',\n panelFields: 'Fields',\n panelStructure: 'Structure',\n panelProperties: 'Properties',\n noFields: 'no fields yet',\n};\n","/**\n * Designer workspace layout.\n *\n * Panels are dockable like in professional tools: each one can sit on the\n * left, on the right, or be hidden — the canvas always keeps the center. The\n * arrangement is a plain serializable object so hosts can persist it per user\n * (the designer also remembers it locally by default).\n */\n\nexport type DockSide = 'left' | 'right' | 'hidden';\n\n/** Panels that can be docked around the canvas. */\nexport type PanelId = 'palette' | 'structure' | 'properties';\n\nexport interface WorkspaceLayout {\n palette: DockSide;\n structure: DockSide;\n properties: DockSide;\n /** Width of each dock rail, in pixels. */\n leftWidth: number;\n rightWidth: number;\n}\n\nexport const DEFAULT_LAYOUT: WorkspaceLayout = {\n palette: 'left',\n structure: 'left',\n properties: 'right',\n leftWidth: 240,\n rightWidth: 280,\n};\n\nexport interface WorkspacePreset {\n id: string;\n label: string;\n layout: WorkspaceLayout;\n}\n\n/** Ready-made arrangements offered in the workspace menu. */\nexport const WORKSPACE_PRESETS: WorkspacePreset[] = [\n { id: 'default', label: 'Default (fields left, properties right)', layout: DEFAULT_LAYOUT },\n {\n id: 'authoring',\n label: 'Authoring (everything left)',\n layout: { ...DEFAULT_LAYOUT, properties: 'left', leftWidth: 300 },\n },\n {\n id: 'inspect',\n label: 'Inspect (structure + properties right)',\n layout: { ...DEFAULT_LAYOUT, structure: 'right', properties: 'right', rightWidth: 320 },\n },\n {\n id: 'canvas',\n label: 'Canvas only (panels hidden)',\n layout: { ...DEFAULT_LAYOUT, palette: 'hidden', structure: 'hidden', properties: 'hidden' },\n },\n];\n\nexport const PANEL_LABELS: Record<PanelId, string> = {\n palette: 'Fields',\n structure: 'Structure',\n properties: 'Properties',\n};\n\nconst STORAGE_KEY = 'mform-designer-layout';\n\nexport function loadLayout(storage: Storage | null): WorkspaceLayout {\n if (!storage) return DEFAULT_LAYOUT;\n try {\n const raw = storage.getItem(STORAGE_KEY);\n if (!raw) return DEFAULT_LAYOUT;\n const parsed = JSON.parse(raw) as Partial<WorkspaceLayout>;\n return { ...DEFAULT_LAYOUT, ...parsed };\n } catch {\n return DEFAULT_LAYOUT;\n }\n}\n\nexport function saveLayout(storage: Storage | null, layout: WorkspaceLayout): void {\n try {\n storage?.setItem(STORAGE_KEY, JSON.stringify(layout));\n } catch {\n /* storage unavailable (private mode, SSR) — layout stays in memory */\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { JsonPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n createFormEngine,\n duplicateNode,\n generateKey,\n getNodeAt,\n insertNode,\n moveNode,\n parentOf,\n removeNode,\n updateNode,\n validateSchema,\n type FieldNode,\n type FormEngine,\n type FormSchema,\n type NodePath,\n type SchemaDiagnostic,\n} from '@mosaicoo/form-core';\nimport { createLegacyImporter, importForm } from '@mosaicoo/form-core/interop';\nimport { FormRendererComponent } from '@mosaicoo/form-angular';\nimport { DesignerNodeComponent } from './designer-node.component.js';\nimport { InspectorComponent, type InspectorPatch } from './inspector.component.js';\nimport { DEFAULT_CATALOG, type CatalogEntry, type CatalogGroup } from './field-catalog.js';\nimport { loadBlocks, saveBlocks, type FormBlock } from './blocks.js';\nimport { DESIGNER_LABELS_EN, type DesignerLabels } from './designer-labels.js';\nimport { dropId, type DropTarget } from './drag-drop.js';\nimport {\n DEFAULT_LAYOUT,\n PANEL_LABELS,\n WORKSPACE_PRESETS,\n loadLayout,\n saveLayout,\n type DockSide,\n type PanelId,\n type WorkspaceLayout,\n} from './workspace.js';\n\nconst EMPTY_SCHEMA: FormSchema = { version: 1, fields: [] };\nconst HISTORY_LIMIT = 50;\n\n/** True when `target` is `from` itself or somewhere inside it. */\nfunction isSameOrInside(from: NodePath, target: NodePath): boolean {\n return from.every((segment, index) => target[index] === segment);\n}\n\n/**\n * A move removes before it inserts: when the source sits before the target\n * under the same parent, every index after it shifts down by one.\n */\nfunction adjustAfterRemoval(from: NodePath, target: NodePath): NodePath {\n const parentDepth = from.length - 1;\n const sameParent = from.slice(0, parentDepth).every((s, i) => target[i] === s);\n if (!sameParent || target.length < from.length) return target;\n const adjusted = [...target];\n const fromIndex = from[parentDepth]!;\n const targetIndex = adjusted[parentDepth]!;\n if (targetIndex > fromIndex) adjusted[parentDepth] = targetIndex - 1;\n return adjusted;\n}\n\n/** Deep copy of a block with fresh keys, so it can be inserted repeatedly. */\nfunction rekeyBlock(node: FieldNode, schema: FormSchema): FieldNode {\n const copy = JSON.parse(JSON.stringify(node)) as FieldNode;\n const assign = (target: FieldNode) => {\n target.key = generateKey(schema, target.key);\n if (target.kind === 'container') target.children.forEach(assign);\n };\n assign(copy);\n return copy;\n}\n\n/**\n * `<mform-designer>` — visual authoring of form schemas.\n *\n * The designer edits a DOCUMENT (the schema): every change goes through the\n * core's immutable edit operations, feeding undo/redo and `schemaChanged`.\n * Persistence, publishing and permissions belong to the host.\n */\n@Component({\n selector: 'mform-designer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n DesignerNodeComponent,\n InspectorComponent,\n FormRendererComponent,\n JsonPipe,\n NgTemplateOutlet,\n ],\n styleUrls: ['./designer-theme.css'],\n template: `\n <div class=\"dz-shell\" (keydown)=\"onKeydown($event)\">\n <header class=\"dz-toolbar\">\n <div class=\"dz-tools\">\n <button type=\"button\" (click)=\"undo()\" [disabled]=\"past().length === 0\" [title]=\"labels().undo\">↶</button>\n <button type=\"button\" (click)=\"redo()\" [disabled]=\"future().length === 0\" [title]=\"labels().redo\">↷</button>\n <span class=\"dz-sep\"></span>\n <button type=\"button\" (click)=\"moveSelected(-1)\" [disabled]=\"!selected()\" [title]=\"labels().moveUp\">↑</button>\n <button type=\"button\" (click)=\"moveSelected(1)\" [disabled]=\"!selected()\" [title]=\"labels().moveDown\">↓</button>\n <button type=\"button\" (click)=\"unnestSelected()\" [disabled]=\"!canUnnest()\" [title]=\"labels().unnest\">⇤</button>\n <button type=\"button\" (click)=\"nestSelected()\" [disabled]=\"!canNest()\" [title]=\"labels().nest\">⇥</button>\n <button type=\"button\" (click)=\"duplicateSelected()\" [disabled]=\"!selected()\" [title]=\"labels().duplicate\">⧉</button>\n <button type=\"button\" (click)=\"removeSelected()\" [disabled]=\"!selected()\" [title]=\"labels().delete\">🗑</button>\n <button type=\"button\" (click)=\"saveAsBlock()\" [disabled]=\"!selected()\" [title]=\"labels().saveBlock\">⊞</button>\n </div>\n <div class=\"dz-tools\">\n @if (diagnostics().length > 0) {\n <button type=\"button\" class=\"dz-diag-badge\" (click)=\"showDiagnostics.set(!showDiagnostics())\">\n ⚠ {{ diagnostics().length }}\n </button>\n }\n <div class=\"dz-menu\">\n <button type=\"button\" (click)=\"workspaceMenu.set(!workspaceMenu())\" [title]=\"labels().workspace\">\n ▦ {{ labels().workspace }}\n </button>\n @if (workspaceMenu()) {\n <div class=\"dz-menu-panel\" role=\"menu\">\n <span class=\"dz-menu-title\">{{ labels().panels }}</span>\n @for (panel of panelIds; track panel) {\n <div class=\"dz-menu-row\">\n <span>{{ panelLabel(panel) }}</span>\n <span class=\"dz-seg\">\n @for (side of dockSides; track side) {\n <button\n type=\"button\"\n [class.is-on]=\"layout()[panel] === side\"\n (click)=\"dock(panel, side)\"\n >{{ sideLabels[side] }}</button>\n }\n </span>\n </div>\n }\n <span class=\"dz-menu-title\">{{ labels().presets }}</span>\n @for (preset of presets; track preset.id) {\n <button type=\"button\" class=\"dz-menu-item\" (click)=\"applyPreset(preset.id)\">\n {{ preset.label }}\n </button>\n }\n <button type=\"button\" class=\"dz-menu-item\" (click)=\"resetLayout()\">{{ labels().resetLayout }}</button>\n </div>\n }\n </div>\n <button type=\"button\" (click)=\"dialog.set(dialog() === 'import' ? null : 'import')\">{{ labels().import }}</button>\n <button type=\"button\" (click)=\"openExport()\">{{ labels().export }}</button>\n <button type=\"button\" class=\"dz-primary\" (click)=\"preview.set(!preview())\">\n {{ preview() ? labels().design : labels().preview }}\n </button>\n </div>\n </header>\n\n @if (showDiagnostics() && diagnostics().length > 0) {\n <div class=\"dz-diagnostics\" role=\"alert\">\n @for (diag of diagnostics(); track $index) {\n <div class=\"dz-diag\" [class.is-warning]=\"diag.severity === 'warning'\">\n <code>{{ diag.code }}</code> {{ diag.message }} <em>{{ diag.path }}</em>\n </div>\n }\n </div>\n }\n\n @if (dialog() === 'export') {\n <div class=\"dz-dialog\">\n <h4>{{ labels().exportTitle }}</h4>\n <textarea readonly rows=\"12\">{{ exportedJson() }}</textarea>\n <div class=\"dz-dialog-actions\">\n <button type=\"button\" (click)=\"dialog.set(null)\">{{ labels().close }}</button>\n </div>\n </div>\n }\n @if (dialog() === 'import') {\n <div class=\"dz-dialog\">\n <h4>{{ labels().importTitle }}</h4>\n <textarea rows=\"12\" #importArea [placeholder]=\"labels().importPlaceholder\"></textarea>\n @if (importError()) {\n <p class=\"dz-import-error\" role=\"alert\">{{ importError() }}</p>\n }\n <div class=\"dz-dialog-actions\">\n <button type=\"button\" (click)=\"dialog.set(null)\">{{ labels().cancel }}</button>\n <button type=\"button\" class=\"dz-primary\" (click)=\"doImport(importArea.value)\">{{ labels().import }}</button>\n </div>\n </div>\n }\n\n @if (preview()) {\n <div class=\"dz-preview\">\n <div class=\"dz-viewports\" role=\"group\" [attr.aria-label]=\"labels().viewport\">\n @for (option of viewports; track option.id) {\n <button\n type=\"button\"\n [class.is-on]=\"viewport() === option.id\"\n (click)=\"viewport.set(option.id)\"\n [title]=\"option.width ? option.label + ' · ' + option.width + 'px' : option.label\"\n >{{ option.icon }} {{ option.label }}</button>\n }\n </div>\n <div\n class=\"dz-preview-frame\"\n [class.is-constrained]=\"viewportWidth() !== null\"\n [style.max-width.px]=\"viewportWidth()\"\n >\n <mform-renderer [schema]=\"draft()\" (valueChanged)=\"previewData.set($event)\" />\n </div>\n <details class=\"dz-preview-data\">\n <summary>{{ labels().testData }}</summary>\n <pre>{{ previewData() | json }}</pre>\n </details>\n </div>\n } @else {\n <div\n class=\"dz-body\"\n [style.grid-template-columns]=\"bodyColumns()\"\n (pointermove)=\"onResizeMove($event)\"\n (pointerup)=\"endResize()\"\n (pointercancel)=\"endResize()\"\n >\n @if (dockedPanels('left').length > 0) {\n <aside class=\"dz-dock dz-dock-left\">\n @for (panel of dockedPanels('left'); track panel) {\n <ng-container *ngTemplateOutlet=\"panelTemplate; context: { $implicit: panel }\" />\n }\n <div\n class=\"dz-splitter dz-splitter-left\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n (pointerdown)=\"startResize('left', $event)\"\n ></div>\n </aside>\n }\n\n <main class=\"dz-canvas\" [class.is-dragging]=\"isDragging()\" (click)=\"select(null)\">\n @for (node of draft().fields; track node.key; let i = $index) {\n <div\n class=\"dz-dropzone\"\n [class.is-over]=\"isDropTarget({ path: [i] })\"\n (dragover)=\"allowDrop({ path: [i] }, $event)\"\n (drop)=\"drop({ path: [i] }, $event)\"\n ></div>\n <mform-designer-node\n [node]=\"node\"\n [path]=\"[i]\"\n [engine]=\"canvasEngine()\"\n [selected]=\"selected()\"\n [dragging]=\"isDragging()\"\n [activeDrop]=\"dropTarget()\"\n draggable=\"true\"\n (dragstart)=\"startNodeDrag([i], $event)\"\n (dragend)=\"endDrag()\"\n (selectNode)=\"select($event)\"\n (nodeDragStart)=\"startNodeDrag($event)\"\n (dragOverTarget)=\"allowDrop($event)\"\n (dropOnTarget)=\"drop($event)\"\n (dragFinished)=\"endDrag()\"\n />\n } @empty {\n <div class=\"dz-canvas-empty\">\n {{ labels().canvasEmpty }}\n </div>\n }\n <div\n class=\"dz-dropzone is-last\"\n [class.is-over]=\"isDropTarget({ path: [draft().fields.length] })\"\n (dragover)=\"allowDrop({ path: [draft().fields.length] }, $event)\"\n (drop)=\"drop({ path: [draft().fields.length] }, $event)\"\n ></div>\n </main>\n\n @if (dockedPanels('right').length > 0) {\n <aside class=\"dz-dock dz-dock-right\">\n <div\n class=\"dz-splitter dz-splitter-right\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n (pointerdown)=\"startResize('right', $event)\"\n ></div>\n @for (panel of dockedPanels('right'); track panel) {\n <ng-container *ngTemplateOutlet=\"panelTemplate; context: { $implicit: panel }\" />\n }\n </aside>\n }\n </div>\n }\n </div>\n\n <!-- One template per panel, rendered into whichever dock holds it. -->\n <ng-template #panelTemplate let-panel>\n <section class=\"dz-panel\" [attr.data-panel]=\"panel\">\n <header class=\"dz-panel-head\">\n <span>{{ panelLabel(panel) }}</span>\n <span class=\"dz-panel-actions\">\n <button\n type=\"button\"\n [title]=\"panelSide(panel) === 'left' ? labels().moveRight : labels().moveLeft\"\n (click)=\"dock(panel, panelSide(panel) === 'left' ? 'right' : 'left')\"\n >{{ panelSide(panel) === 'left' ? '⇥' : '⇤' }}</button>\n <button type=\"button\" [title]=\"labels().hidePanel\" (click)=\"dock(panel, 'hidden')\">✕</button>\n </span>\n </header>\n <div class=\"dz-panel-body\">\n @switch (panel) {\n @case ('palette') {\n @for (group of catalog(); track group.label) {\n <div class=\"dz-group\">\n <button\n type=\"button\"\n class=\"dz-group-toggle\"\n [class.is-open]=\"isGroupOpen(group.label)\"\n [attr.aria-expanded]=\"isGroupOpen(group.label)\"\n (click)=\"toggleGroup(group.label)\"\n >\n <span class=\"dz-caret\" aria-hidden=\"true\">{{ isGroupOpen(group.label) ? '▾' : '▸' }}</span>\n {{ group.label }}\n <span class=\"dz-group-count\">{{ group.entries.length }}</span>\n </button>\n @if (isGroupOpen(group.label)) {\n <div class=\"dz-group-entries\">\n @for (entry of group.entries; track entry.type) {\n <div class=\"dz-palette-row\">\n <button\n type=\"button\"\n class=\"dz-palette-item\"\n draggable=\"true\"\n (dragstart)=\"startEntryDrag(entry, $event)\"\n (dragend)=\"endDrag()\"\n (click)=\"add(entry)\"\n [title]=\"'Add ' + entry.label + ' (or drag onto the canvas)'\"\n >\n <span class=\"dz-icon\">{{ entry.icon }}</span>{{ entry.label }}\n </button>\n @if (isBlockEntry(entry)) {\n <button\n type=\"button\"\n class=\"dz-block-remove\"\n (click)=\"removeBlock(blockIdOf(entry))\"\n [attr.aria-label]=\"'Remove block ' + entry.label\"\n >✕</button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n @case ('structure') {\n <div class=\"dz-tree\" role=\"tree\">\n @for (item of tree(); track item.id) {\n <button\n type=\"button\"\n role=\"treeitem\"\n class=\"dz-tree-item\"\n [class.is-selected]=\"isSelectedPath(item.path)\"\n [style.padding-left.px]=\"8 + item.depth * 14\"\n (click)=\"select(item.path)\"\n >\n {{ item.label }}\n </button>\n } @empty {\n <span class=\"dz-empty\">{{ labels().noFields }}</span>\n }\n </div>\n }\n @case ('properties') {\n @if (selectedNode(); as node) {\n <mform-inspector\n [node]=\"node\"\n [schema]=\"draft()\"\n (nodePatch)=\"applyPatch($event)\"\n />\n } @else {\n <div class=\"dz-empty dz-props-empty\">{{ labels().selectField }}</div>\n }\n }\n }\n </div>\n </section>\n </ng-template>\n `,\n})\nexport class FormDesignerComponent {\n /** Initial native schema to edit. */\n readonly schema = input<FormSchema | null>(null);\n /** Initial foreign definition (converted through importers). */\n readonly source = input<unknown>(null);\n /** Extra palette groups contributed by the host. */\n readonly extraCatalog = input<CatalogGroup[]>([]);\n /** Replaces the built-in palette (e.g. a translated DEFAULT_CATALOG). */\n readonly catalogOverride = input<CatalogGroup[] | null>(null, { alias: 'catalog' });\n /** Designer texts; partial overrides fall back to English. */\n readonly labels = input(DESIGNER_LABELS_EN, {\n transform: (value: Partial<DesignerLabels>) => ({ ...DESIGNER_LABELS_EN, ...value }),\n });\n\n /** Emitted after every committed edit (undo/redo included). */\n readonly schemaChanged = output<FormSchema>();\n\n readonly draft = signal<FormSchema>(EMPTY_SCHEMA);\n readonly past = signal<FormSchema[]>([]);\n readonly future = signal<FormSchema[]>([]);\n readonly selected = signal<NodePath | null>(null);\n readonly preview = signal(false);\n readonly previewData = signal<Record<string, unknown>>({});\n\n /** Preview viewport: the frame drives the form's container queries. */\n readonly viewport = signal<'desktop' | 'tablet' | 'mobile'>('desktop');\n readonly viewports: Array<{ id: 'desktop' | 'tablet' | 'mobile'; label: string; icon: string; width: number | null }> = [\n { id: 'desktop', label: 'Desktop', icon: '🖥', width: null },\n { id: 'tablet', label: 'Tablet', icon: '▭', width: 768 },\n { id: 'mobile', label: 'Mobile', icon: '▯', width: 375 },\n ];\n\n viewportWidth(): number | null {\n return this.viewports.find((option) => option.id === this.viewport())?.width ?? null;\n }\n readonly dialog = signal<'import' | 'export' | null>(null);\n readonly importError = signal('');\n readonly showDiagnostics = signal(false);\n\n // -- workspace ------------------------------------------------------------\n\n /** Panel arrangement; persisted locally unless the host controls it. */\n readonly layout = signal<WorkspaceLayout>(DEFAULT_LAYOUT);\n readonly workspaceMenu = signal(false);\n readonly panelIds: PanelId[] = ['palette', 'structure', 'properties'];\n readonly dockSides: DockSide[] = ['left', 'right', 'hidden'];\n readonly panelLabels = PANEL_LABELS;\n readonly sideLabels: Record<DockSide, string> = { left: '⇤', right: '⇥', hidden: '✕' };\n readonly presets = WORKSPACE_PRESETS;\n /** Collapsed palette groups (only the first stays open by default). */\n readonly openGroups = signal<Set<string>>(new Set());\n\n private readonly storage = (() => {\n try {\n return typeof localStorage === 'undefined' ? null : localStorage;\n } catch {\n return null;\n }\n })();\n\n panelLabel(panel: PanelId): string {\n const labels = this.labels();\n if (panel === 'palette') return labels.panelFields;\n if (panel === 'structure') return labels.panelStructure;\n return labels.panelProperties;\n }\n\n panelSide(panel: PanelId): DockSide {\n return this.layout()[panel];\n }\n\n dockedPanels(side: 'left' | 'right'): PanelId[] {\n const layout = this.layout();\n return this.panelIds.filter((panel) => layout[panel] === side);\n }\n\n bodyColumns(): string {\n const layout = this.layout();\n const left = this.dockedPanels('left').length > 0 ? `${layout.leftWidth}px ` : '';\n const right = this.dockedPanels('right').length > 0 ? ` ${layout.rightWidth}px` : '';\n return `${left}1fr${right}`;\n }\n\n dock(panel: PanelId, side: DockSide): void {\n this.layout.update((current) => ({ ...current, [panel]: side }));\n saveLayout(this.storage, this.layout());\n }\n\n applyPreset(id: string): void {\n const preset = WORKSPACE_PRESETS.find((p) => p.id === id);\n if (!preset) return;\n this.layout.set({ ...preset.layout });\n saveLayout(this.storage, this.layout());\n this.workspaceMenu.set(false);\n }\n\n resetLayout(): void {\n this.layout.set({ ...DEFAULT_LAYOUT });\n saveLayout(this.storage, this.layout());\n this.workspaceMenu.set(false);\n }\n\n /** Live drag state of a dock splitter. */\n private resizing: { side: 'left' | 'right'; startX: number; startWidth: number } | null = null;\n\n startResize(side: 'left' | 'right', event: PointerEvent): void {\n event.preventDefault();\n const layout = this.layout();\n this.resizing = {\n side,\n startX: event.clientX,\n startWidth: side === 'left' ? layout.leftWidth : layout.rightWidth,\n };\n (event.target as HTMLElement).setPointerCapture?.(event.pointerId);\n }\n\n onResizeMove(event: PointerEvent): void {\n const resizing = this.resizing;\n if (!resizing) return;\n // dragging right widens a left dock and narrows a right one\n const delta = event.clientX - resizing.startX;\n const raw = resizing.startWidth + (resizing.side === 'left' ? delta : -delta);\n const width = Math.max(160, Math.min(520, Math.round(raw)));\n this.layout.update((current) =>\n resizing.side === 'left' ? { ...current, leftWidth: width } : { ...current, rightWidth: width },\n );\n }\n\n endResize(): void {\n if (!this.resizing) return;\n this.resizing = null;\n saveLayout(this.storage, this.layout());\n }\n\n isGroupOpen(label: string): boolean {\n return this.openGroups().has(label);\n }\n\n toggleGroup(label: string): void {\n this.openGroups.update((open) => {\n const next = new Set(open);\n if (next.has(label)) next.delete(label);\n else next.add(label);\n return next;\n });\n }\n\n /** Saved blocks (host-controlled when `[blocks]` is bound). */\n readonly blocks = input<FormBlock[] | null>(null);\n readonly blocksChanged = output<FormBlock[]>();\n private readonly localBlocks = signal<FormBlock[]>([]);\n readonly effectiveBlocks = computed<FormBlock[]>(() => this.blocks() ?? this.localBlocks());\n\n /** Palette = built-ins + host extras + saved blocks as a group. */\n readonly catalog = computed<CatalogGroup[]>(() => {\n const groups = [...(this.catalogOverride() ?? DEFAULT_CATALOG), ...this.extraCatalog()];\n const blocks = this.effectiveBlocks();\n if (blocks.length > 0) {\n groups.push({\n label: 'Blocks',\n entries: blocks.map((block) => ({\n type: `block:${block.id}`,\n label: block.label,\n icon: '⊞',\n create: (schema: FormSchema) => rekeyBlock(block.node, schema),\n })),\n });\n }\n return groups;\n });\n readonly diagnostics = computed<SchemaDiagnostic[]>(() => validateSchema(this.draft()));\n readonly exportedJson = computed(() => JSON.stringify(this.draft(), null, 2));\n\n /** Disposable engine driving the canvas leaves (defaults visible). */\n readonly canvasEngine = computed<FormEngine>(() => createFormEngine(this.draft()));\n\n readonly selectedNode = computed<FieldNode | null>(() => {\n const path = this.selected();\n return path ? (getNodeAt(this.draft(), path) ?? null) : null;\n });\n\n /** Flat structure tree for navigation. */\n readonly tree = computed(() => {\n const items: Array<{ id: string; label: string; depth: number; path: NodePath }> = [];\n const visit = (nodes: FieldNode[], depth: number, prefix: NodePath) => {\n nodes.forEach((node, i) => {\n const path = [...prefix, i];\n items.push({\n id: path.join('.'),\n label: `${node.label ?? node.key} · ${node.type}`,\n depth,\n path,\n });\n if (node.kind === 'container') visit(node.children, depth + 1, path);\n });\n };\n visit(this.draft().fields, 0, []);\n return items;\n });\n\n constructor() {\n this.layout.set(loadLayout(this.storage));\n this.localBlocks.set(loadBlocks(this.storage));\n // First palette group starts expanded; the rest opens on demand.\n const first = this.catalog()[0]?.label;\n if (first) this.openGroups.set(new Set([first]));\n\n // (Re)load the document whenever the host hands a new definition in.\n effect(() => {\n const native = this.schema();\n const source = this.source();\n // Hosts often feed `schemaChanged` back into [schema] (controlled\n // usage) — the echo of our own draft must not reset history/selection.\n // `untracked` is essential: reading the draft as a dependency would make\n // every edit re-run this effect and revert the document.\n if (native && native === untracked(() => this.draft())) return;\n let initial = EMPTY_SCHEMA;\n if (native) {\n initial = native;\n } else if (source !== null && source !== undefined) {\n try {\n initial = importForm(source, [createLegacyImporter()]).schema;\n } catch {\n initial = EMPTY_SCHEMA;\n }\n }\n this.draft.set(initial);\n this.past.set([]);\n this.future.set([]);\n this.selected.set(null);\n });\n }\n\n // -- document mutation ----------------------------------------------------\n\n private commit(next: FormSchema): void {\n this.past.update((stack) => [...stack.slice(-(HISTORY_LIMIT - 1)), this.draft()]);\n this.future.set([]);\n this.draft.set(next);\n this.schemaChanged.emit(next);\n }\n\n undo(): void {\n const past = this.past();\n if (past.length === 0) return;\n this.future.update((stack) => [this.draft(), ...stack]);\n this.past.set(past.slice(0, -1));\n this.draft.set(past[past.length - 1]!);\n this.selected.set(null);\n this.schemaChanged.emit(this.draft());\n }\n\n redo(): void {\n const future = this.future();\n if (future.length === 0) return;\n this.past.update((stack) => [...stack, this.draft()]);\n this.future.set(future.slice(1));\n this.draft.set(future[0]!);\n this.selected.set(null);\n this.schemaChanged.emit(this.draft());\n }\n\n add(entry: CatalogEntry): void {\n const node = entry.create(this.draft());\n const target = this.insertionPath();\n this.commit(insertNode(this.draft(), target, node));\n this.select(target);\n }\n\n /** New nodes land inside a selected container, after a selected leaf, or at the end. */\n private insertionPath(): NodePath {\n const selected = this.selected();\n if (!selected) return [this.draft().fields.length];\n const node = getNodeAt(this.draft(), selected);\n if (node?.kind === 'container' && node.type !== 'columns') {\n return [...selected, node.children.length];\n }\n const { parent, index } = parentOf(selected);\n return [...parent, index + 1];\n }\n\n removeSelected(): void {\n const selected = this.selected();\n if (!selected) return;\n this.commit(removeNode(this.draft(), selected));\n this.selected.set(null);\n }\n\n duplicateSelected(): void {\n const selected = this.selected();\n if (!selected) return;\n this.commit(duplicateNode(this.draft(), selected));\n }\n\n moveSelected(delta: -1 | 1): void {\n const selected = this.selected();\n if (!selected) return;\n const { parent, index } = parentOf(selected);\n const siblings =\n parent.length === 0\n ? this.draft().fields\n : (getNodeAt(this.draft(), parent) as { children?: FieldNode[] })?.children ?? [];\n const target = index + delta;\n if (target < 0 || target >= siblings.length) return;\n this.commit(moveNode(this.draft(), selected, [...parent, target]));\n this.select([...parent, target]);\n }\n\n applyPatch(event: InspectorPatch): void {\n const selected = this.selected();\n if (!selected) return;\n this.commit(updateNode(this.draft(), selected, event.patch));\n }\n\n /** Whether the selection can be nested into the container above it. */\n canNest(): boolean {\n const selected = this.selected();\n if (!selected) return false;\n const { parent, index } = parentOf(selected);\n if (index === 0) return false;\n return getNodeAt(this.draft(), [...parent, index - 1])?.kind === 'container';\n }\n\n canUnnest(): boolean {\n return (this.selected()?.length ?? 0) > 1;\n }\n\n /**\n * Nests the selection into the container right above it (Alt+→) — the\n * keyboard equivalent of dragging a field into a panel.\n */\n nestSelected(): void {\n const selected = this.selected();\n if (!selected) return;\n const { parent, index } = parentOf(selected);\n if (index === 0) return;\n const previous = getNodeAt(this.draft(), [...parent, index - 1]);\n if (!previous || previous.kind !== 'container') return;\n // after the removal the container keeps its position (it sits before)\n const target = [...parent, index - 1, previous.children.length];\n this.commit(moveNode(this.draft(), selected, target));\n this.select(target);\n }\n\n /** Moves the selection out of its container, right after it (Alt+←). */\n unnestSelected(): void {\n const selected = this.selected();\n if (!selected || selected.length < 2) return;\n const { parent } = parentOf(selected);\n const { parent: grandparent, index: parentIndex } = parentOf(parent);\n const target = [...grandparent, parentIndex + 1];\n this.commit(moveNode(this.draft(), selected, target));\n this.select(target);\n }\n\n // -- reusable blocks ------------------------------------------------------\n\n /** Saves the selected node (with its subtree) as a reusable block. */\n saveAsBlock(): void {\n const selected = this.selected();\n const node = selected ? getNodeAt(this.draft(), selected) : null;\n if (!node) return;\n const label = node.label ?? node.key;\n const block: FormBlock = {\n id: `${node.key}-${this.effectiveBlocks().length + 1}`,\n label,\n node: JSON.parse(JSON.stringify(node)) as FieldNode,\n };\n const next = [...this.effectiveBlocks(), block];\n if (this.blocks() === null) {\n this.localBlocks.set(next);\n saveBlocks(this.storage, next);\n }\n this.blocksChanged.emit(next);\n }\n\n removeBlock(id: string): void {\n const next = this.effectiveBlocks().filter((block) => block.id !== id);\n if (this.blocks() === null) {\n this.localBlocks.set(next);\n saveBlocks(this.storage, next);\n }\n this.blocksChanged.emit(next);\n }\n\n isBlockEntry(entry: CatalogEntry): boolean {\n return entry.type.startsWith('block:');\n }\n\n blockIdOf(entry: CatalogEntry): string {\n return entry.type.slice('block:'.length);\n }\n\n // -- drag and drop --------------------------------------------------------\n\n /** What is being dragged: a palette entry or an existing node. */\n private readonly dragging = signal<\n { kind: 'entry'; entry: CatalogEntry } | { kind: 'node'; path: NodePath } | null\n >(null);\n /** Drop zone highlighted while hovering (see `dropId`). */\n readonly dropTarget = signal<string | null>(null);\n\n startEntryDrag(entry: CatalogEntry, event: DragEvent): void {\n this.dragging.set({ kind: 'entry', entry });\n event.dataTransfer?.setData('text/plain', entry.type);\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'copy';\n }\n\n startNodeDrag(path: NodePath, event?: DragEvent): void {\n this.dragging.set({ kind: 'node', path });\n event?.dataTransfer?.setData('text/plain', path.join('.'));\n if (event?.dataTransfer) event.dataTransfer.effectAllowed = 'move';\n }\n\n endDrag(): void {\n this.dragging.set(null);\n this.dropTarget.set(null);\n }\n\n allowDrop(target: DropTarget, event?: DragEvent): void {\n if (!this.dragging()) return;\n event?.preventDefault();\n event?.stopPropagation();\n this.dropTarget.set(dropId(target));\n }\n\n /** Drops onto `target` — the position (and column) the node should occupy. */\n drop(target: DropTarget, event?: DragEvent): void {\n event?.preventDefault();\n event?.stopPropagation();\n const dragging = this.dragging();\n this.endDrag();\n if (!dragging) return;\n const options = target.column === undefined ? undefined : { column: target.column };\n\n if (dragging.kind === 'entry') {\n const node = dragging.entry.create(this.draft());\n this.commit(insertNode(this.draft(), target.path, node, options));\n this.select(target.path);\n return;\n }\n const from = dragging.path;\n if (isSameOrInside(from, target.path)) return; // never drop a node into itself\n const adjusted = adjustAfterRemoval(from, target.path);\n this.commit(moveNode(this.draft(), from, adjusted, options));\n this.select(adjusted);\n }\n\n isDropTarget(target: DropTarget): boolean {\n return this.dropTarget() === dropId(target);\n }\n\n isDragging(): boolean {\n return this.dragging() !== null;\n }\n\n // -- selection ------------------------------------------------------------\n\n select(path: NodePath | null): void {\n this.selected.set(path);\n }\n\n isSelectedPath(path: NodePath): boolean {\n return this.selected()?.join('.') === path.join('.');\n }\n\n // -- import / export ------------------------------------------------------\n\n openExport(): void {\n this.dialog.set(this.dialog() === 'export' ? null : 'export');\n }\n\n doImport(raw: string): void {\n try {\n const parsed: unknown = JSON.parse(raw);\n const { schema } = importForm(parsed, [createLegacyImporter()]);\n this.commit(schema);\n this.selected.set(null);\n this.dialog.set(null);\n this.importError.set('');\n } catch (error) {\n this.importError.set(this.labels().importError + String(error));\n }\n }\n\n // -- keyboard -------------------------------------------------------------\n\n onKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName)) return;\n const key = event.key.toLowerCase();\n if (event.ctrlKey && key === 'z' && !event.shiftKey) {\n event.preventDefault();\n this.undo();\n } else if ((event.ctrlKey && key === 'y') || (event.ctrlKey && event.shiftKey && key === 'z')) {\n event.preventDefault();\n this.redo();\n } else if (event.ctrlKey && key === 'd') {\n event.preventDefault();\n this.duplicateSelected();\n } else if (key === 'delete') {\n event.preventDefault();\n this.removeSelected();\n } else if (key === 'escape') {\n event.preventDefault();\n this.workspaceMenu.set(false);\n this.dialog.set(null);\n this.select(null);\n } else if (event.altKey && key === 'arrowup') {\n event.preventDefault();\n this.moveSelected(-1);\n } else if (event.altKey && key === 'arrowdown') {\n event.preventDefault();\n this.moveSelected(1);\n } else if (event.altKey && key === 'arrowright') {\n event.preventDefault();\n this.nestSelected();\n } else if (event.altKey && key === 'arrowleft') {\n event.preventDefault();\n this.unnestSelected();\n }\n }\n}\n","/*\n * Designer entry point (`@mosaicoo/form-angular/designer`).\n *\n * Authoring lives behind this secondary entry so applications that only\n * RENDER forms never load designer code — required for federated hosts and\n * lazy loading.\n */\nexport { FormDesignerComponent } from './designer.component.js';\nexport { DesignerNodeComponent } from './designer-node.component.js';\nexport { InspectorComponent, type InspectorPatch } from './inspector.component.js';\nexport { DEFAULT_CATALOG, type CatalogEntry, type CatalogGroup } from './field-catalog.js';\nexport type { FormBlock } from './blocks.js';\nexport { DESIGNER_LABELS_EN, type DesignerLabels } from './designer-labels.js';\nexport { dropId, type DropTarget } from './drag-drop.js';\nexport {\n DEFAULT_LAYOUT,\n PANEL_LABELS,\n WORKSPACE_PRESETS,\n type DockSide,\n type PanelId,\n type WorkspaceLayout,\n type WorkspacePreset,\n} from './workspace.js';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["input","STORAGE_KEY"],"mappings":"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"}