@ngx-formly-builder/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-formly-builder-core.mjs","sources":["../../../src/app/builder-core/model.ts","../../../src/app/builder-core/adapter.ts","../../../src/app/builder-core/diagnostics.ts","../../../src/app/builder-core/schema.ts","../../../src/app/builder-core/migrations.ts","../../../src/app/builder-core/document.ts","../../../src/app/builder-core/ids.ts","../../../src/app/builder-core/formly-import/shared.ts","../../../src/app/builder-core/formly-import/field-mappers.ts","../../../src/app/builder-core/formly-import/layout-mappers.ts","../../../src/app/builder-core/formly-import.ts","../../../src/app/builder-core/plugins.ts","../../../src/app/builder-core/lookup-registry.ts","../../../src/app/builder-core/palette-config.ts","../../../src/app/builder-core/validation-presets.ts","../../../src/app/builder-core/registry.ts","../../../src/app/builder-core/presets.ts","../../../src/app/builder-core/store.commands.ts","../../../src/app/builder-core/store.resolvers.ts","../../../src/app/builder-core/store.state.ts","../../../src/app/builder-core/store.mutators.ts","../../../src/app/builder-core/store.ts","../../../src/app/builder/builder-templates.service.ts","../../../src/app/builder/palette/builder-palette.component.ts","../../../src/app/builder/palette/builder-palette.component.html","../../../src/app/builder/canvas/node-renderer/node-renderer.component.ts","../../../src/app/builder/canvas/node-renderer/node-renderer.component.html","../../../src/app/builder/canvas/builder-canvas.component.ts","../../../src/app/builder/canvas/builder-canvas.component.html","../../../src/app/builder/inspector/help-text.ts","../../../src/app/builder/inspector/builder-inspector.constants.ts","../../../src/app/builder/inspector/builder-inspector-rules.service.ts","../../../src/app/builder-core/async-validators.ts","../../../src/app/builder/inspector/builder-inspector-validation.service.ts","../../../src/app/builder/inspector/builder-inspector.options.ts","../../../src/app/builder/inspector/builder-inspector-data.service.ts","../../../src/app/builder/inspector/builder-inspector.component.ts","../../../src/app/builder/inspector/builder-inspector.component.html","../../../src/app/builder/history/builder-history-panel.component.ts","../../../src/app/builder/history/builder-history-panel.component.html","../../../src/app/builder-core/dynamic-options.ts","../../../src/app/builder-core/custom-validators.ts","../../../src/app/builder/preview/fb-panel-wrapper.component.ts","../../../src/app/builder/preview/fb-repeat.type.component.ts","../../../src/app/builder/preview/fb-tabs.type.component.ts","../../../src/app/builder/preview/fb-stepper.type.component.ts","../../../src/app/builder/preview/fb-accordion.type.component.ts","../../../src/app/builder/preview/formly-preview-config.ts","../../../src/app/builder/preview/preview-material-dialog.component.ts","../../../src/app/builder/preview/preview-dialog.component.html","../../../src/app/builder/preview/preview-bootstrap-dialog.component.ts","../../../src/app/builder/preview/json-dialog.component.ts","../../../src/app/builder/preview/json-dialog.component.html","../../../src/app/builder-core/json-schema.ts","../../../src/app/builder/shared/confirm-dialog.component.ts","../../../src/app/builder/builder-page.constants.ts","../../../src/app/builder/builder-page.palette.ts","../../../src/app/builder/builder-page.shortcuts.ts","../../../src/app/builder/builder-page.component.ts","../../../src/app/builder/builder-page.component.html","../../../src/public-api.ts","../../../src/ngx-formly-builder-core.ts"],"sourcesContent":["export type BuilderNodeType = 'field' | 'panel' | 'row' | 'col' | 'tabs' | 'stepper' | 'accordion';\n\nexport type PreviewRenderer = 'material' | 'bootstrap';\n\nexport type FieldKind =\n | 'input'\n | 'textarea'\n | 'checkbox'\n | 'radio'\n | 'select'\n | 'date'\n | 'number'\n | 'email'\n | 'password'\n | 'tel'\n | 'url'\n | 'file'\n | 'multiselect'\n | 'repeater';\n\nexport type AsyncUniqueSourceType = 'url' | 'lookup';\nexport type ValidatorPresetParamType = 'string' | 'number' | 'boolean';\nexport type ValidatorPresetParamValue = string | number | boolean;\n\nexport interface AsyncUniqueValidator {\n sourceType: AsyncUniqueSourceType;\n url?: string;\n lookupKey?: string;\n listPath?: string;\n valueKey?: string;\n caseSensitive?: boolean;\n message?: string;\n}\n\nexport interface BuilderValidators {\n required?: boolean;\n minLength?: number | null;\n maxLength?: number | null;\n min?: number | null;\n max?: number | null;\n pattern?: string | null;\n email?: boolean;\n asyncUnique?: AsyncUniqueValidator;\n customExpression?: string;\n customExpressionMessage?: string;\n presetId?: string;\n presetParams?: Record<string, ValidatorPresetParamValue>;\n}\n\nexport interface OptionItem {\n label: string;\n value: string;\n}\n\nexport type RuleOperator = 'truthy' | 'falsy' | 'eq' | 'ne' | 'contains' | 'gt' | 'lt';\n\nexport interface ConditionalRule {\n dependsOnKey: string;\n operator: RuleOperator;\n value?: string;\n}\n\nexport type OptionsSourceType = 'static' | 'url' | 'lookup';\n\nexport interface OptionsSource {\n type: OptionsSourceType;\n url?: string;\n lookupKey?: string;\n listPath?: string;\n labelKey?: string;\n valueKey?: string;\n}\n\nexport interface CommonProps {\n label?: string;\n description?: string;\n placeholder?: string;\n disabled?: boolean;\n hidden?: boolean;\n searchable?: boolean;\n}\n\nexport interface FieldProps extends CommonProps {\n key?: string;\n defaultValue?: unknown;\n options?: OptionItem[];\n optionsSource?: OptionsSource;\n multiple?: boolean;\n repeaterItemLabel?: string;\n repeaterItemPlaceholder?: string;\n visibleRule?: ConditionalRule;\n enabledRule?: ConditionalRule;\n visibleExpression?: string;\n enabledExpression?: string;\n /** Custom Formly type name override (from PaletteItem.formlyType). Overrides fieldKind-based type in adapter. */\n customType?: string;\n}\n\nexport interface ContainerProps extends CommonProps {\n title?: string;\n colSpan?: number; // 1..12\n}\n\nexport interface BuilderNodeBase {\n id: string;\n type: BuilderNodeType;\n parentId: string | null;\n children: string[];\n}\n\nexport interface FieldNode extends BuilderNodeBase {\n type: 'field';\n fieldKind: FieldKind;\n props: FieldProps;\n validators: BuilderValidators;\n}\n\nexport interface ContainerNode extends BuilderNodeBase {\n type: 'panel' | 'row' | 'col' | 'tabs' | 'stepper' | 'accordion';\n props: ContainerProps;\n}\n\nexport type BuilderNode = FieldNode | ContainerNode;\n\nexport interface BuilderDocument {\n schemaVersion: number;\n rootId: string;\n renderer?: PreviewRenderer;\n nodes: Record<string, BuilderNode>;\n selectedId: string | null;\n}\n\nexport interface DropLocation {\n containerId: string;\n index: number;\n}\n\nexport function isContainerNode(n: BuilderNode): n is ContainerNode {\n return (\n n.type === 'panel' ||\n n.type === 'row' ||\n n.type === 'col' ||\n n.type === 'tabs' ||\n n.type === 'stepper' ||\n n.type === 'accordion'\n );\n}\nexport function isFieldNode(n: BuilderNode): n is FieldNode {\n return n.type === 'field';\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport {\n AsyncUniqueValidator,\n BuilderDocument,\n BuilderNode,\n ConditionalRule,\n ContainerNode,\n FieldNode,\n isFieldNode,\n} from './model';\n\ninterface CustomValidationConfig {\n expression?: string;\n message?: string;\n}\n\ninterface FormlyFieldProps {\n label?: string;\n description?: string;\n placeholder?: string;\n disabled?: boolean;\n required?: boolean;\n options?: Array<{ label: string; value: string }>;\n optionsSource?: {\n type?: 'static' | 'lookup' | 'url';\n url?: string;\n lookupKey?: string;\n listPath?: string;\n labelKey?: string;\n valueKey?: string;\n };\n visibleRule?: ConditionalRule;\n enabledRule?: ConditionalRule;\n visibleExpression?: string;\n enabledExpression?: string;\n customValidation?: CustomValidationConfig;\n validatorPreset?: {\n id?: string;\n params?: Record<string, string | number | boolean>;\n };\n asyncUnique?: AsyncUniqueValidator;\n type?: string;\n min?: number;\n max?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n email?: boolean;\n multiple?: boolean;\n addText?: string;\n}\n\nfunction toFormlyType(fieldKind: FieldNode['fieldKind']): string {\n switch (fieldKind) {\n case 'textarea':\n return 'textarea';\n case 'checkbox':\n return 'checkbox';\n case 'radio':\n return 'radio';\n case 'select':\n case 'multiselect':\n return 'select';\n case 'repeater':\n return 'repeat';\n default:\n return 'input';\n }\n}\n\nfunction fieldProps(node: FieldNode): FormlyFieldProps {\n const props: FormlyFieldProps = {\n label: node.props.label ?? '',\n description: node.props.description,\n placeholder: node.props.placeholder,\n disabled: !!node.props.disabled,\n required: !!node.validators.required,\n };\n\n applyChoiceProps(node, props);\n applyRuleProps(node, props);\n applyTypeProps(node, props);\n applyValidatorProps(node, props);\n applyAsyncValidatorProps(node, props);\n applyCustomValidatorProps(node, props);\n applyValidatorPresetProps(node, props);\n applyRepeaterProps(node, props);\n return props;\n}\n\nfunction applyChoiceProps(node: FieldNode, props: FormlyFieldProps): void {\n if (node.fieldKind !== 'select' && node.fieldKind !== 'radio' && node.fieldKind !== 'multiselect') return;\n\n props.options = (node.props.options ?? []).map((option) => ({\n label: option.label,\n value: option.value,\n }));\n\n if (node.fieldKind === 'multiselect') props.multiple = true;\n\n const source = node.props.optionsSource;\n if (!source || source.type === 'static') return;\n\n props.optionsSource = {\n type: source.type,\n url: source.url,\n lookupKey: source.lookupKey,\n listPath: source.listPath,\n labelKey: source.labelKey,\n valueKey: source.valueKey,\n };\n}\n\nfunction applyRuleProps(node: FieldNode, props: FormlyFieldProps): void {\n if (node.props.visibleRule) props.visibleRule = { ...node.props.visibleRule };\n if (node.props.enabledRule) props.enabledRule = { ...node.props.enabledRule };\n if (node.props.visibleExpression) props.visibleExpression = node.props.visibleExpression;\n if (node.props.enabledExpression) props.enabledExpression = node.props.enabledExpression;\n}\n\nfunction applyTypeProps(node: FieldNode, props: FormlyFieldProps): void {\n switch (node.fieldKind) {\n case 'date':\n props.type = 'date';\n break;\n case 'number':\n props.type = 'number';\n break;\n case 'email':\n props.type = 'email';\n break;\n case 'password':\n props.type = 'password';\n break;\n case 'tel':\n props.type = 'tel';\n break;\n case 'url':\n props.type = 'url';\n break;\n case 'file':\n props.type = 'file';\n break;\n case 'input':\n if (node.validators.email) props.type = 'email';\n break;\n default:\n break;\n }\n}\n\nfunction applyValidatorProps(node: FieldNode, props: FormlyFieldProps): void {\n if (node.validators.min != null) props.min = node.validators.min;\n if (node.validators.max != null) props.max = node.validators.max;\n if (node.validators.minLength != null) props.minLength = node.validators.minLength;\n if (node.validators.maxLength != null) props.maxLength = node.validators.maxLength;\n if (node.validators.pattern) props.pattern = node.validators.pattern;\n if (node.validators.email) props.email = true;\n}\n\nfunction applyAsyncValidatorProps(node: FieldNode, props: FormlyFieldProps): void {\n if (!node.validators.asyncUnique) return;\n props.asyncUnique = { ...node.validators.asyncUnique };\n}\n\nfunction applyCustomValidatorProps(node: FieldNode, props: FormlyFieldProps): void {\n const expression = node.validators.customExpression?.trim();\n if (!expression) return;\n\n props.customValidation = {\n expression,\n ...(node.validators.customExpressionMessage ? { message: node.validators.customExpressionMessage } : {}),\n };\n}\n\nfunction applyValidatorPresetProps(node: FieldNode, props: FormlyFieldProps): void {\n const presetId = node.validators.presetId?.trim();\n if (!presetId) return;\n props.validatorPreset = {\n id: presetId,\n ...(node.validators.presetParams ? { params: { ...node.validators.presetParams } } : {}),\n };\n}\n\nfunction applyRepeaterProps(node: FieldNode, props: FormlyFieldProps): void {\n if (node.fieldKind !== 'repeater') return;\n props.addText = `Add ${node.props.label ?? 'item'}`;\n}\n\nfunction repeaterFieldArray(node: FieldNode): FormlyFieldConfig {\n return {\n type: 'input',\n key: 'value',\n props: {\n label: node.props.repeaterItemLabel ?? 'Item',\n placeholder: node.props.repeaterItemPlaceholder ?? 'Enter value',\n },\n };\n}\n\nfunction ruleConditionExpression(rule: ConditionalRule): string | null {\n if (!rule.dependsOnKey) return null;\n const ref = `model?.[${JSON.stringify(rule.dependsOnKey)}]`;\n const value = JSON.stringify(rule.value ?? '');\n\n switch (rule.operator) {\n case 'truthy':\n return `!!(${ref})`;\n case 'falsy':\n return `!(${ref})`;\n case 'eq':\n return `${ref} == ${value}`;\n case 'ne':\n return `${ref} != ${value}`;\n case 'contains':\n return `String(${ref} ?? '').includes(${value})`;\n case 'gt':\n return `Number(${ref}) > Number(${value})`;\n case 'lt':\n return `Number(${ref}) < Number(${value})`;\n default:\n return null;\n }\n}\n\nfunction normalizedAdvancedExpression(expression: string | undefined): string | null {\n const trimmed = expression?.trim();\n if (!trimmed) return null;\n\n const candidate = trimmed\n .split(';')\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0)\n .at(-1);\n\n if (!candidate) return null;\n\n const showMatch = candidate.match(/^show\\s*=\\s*(.+)$/);\n if (showMatch?.[1]) return showMatch[1].trim();\n\n const validMatch = candidate.match(/^valid\\s*=\\s*(.+)$/);\n if (validMatch?.[1]) return validMatch[1].trim();\n\n return candidate;\n}\n\nfunction rowClass(renderer: BuilderDocument['renderer']): string {\n return renderer === 'bootstrap' ? 'row' : 'fb-row';\n}\n\nfunction colClass(renderer: BuilderDocument['renderer'], span: number): string {\n return renderer === 'bootstrap' ? `col-${span}` : `fb-col fb-col-${span}`;\n}\n\nfunction containerLabel(container: ContainerNode, fallback: string): string {\n return container.props.title ?? container.props.label ?? fallback;\n}\n\nfunction formlyValidators(node: FieldNode): FormlyFieldConfig['validators'] | undefined {\n const validation: string[] = [];\n if (node.validators.email) validation.push('email');\n return validation.length > 0 ? { validation } : undefined;\n}\n\nfunction fieldNodeToFormly(node: FieldNode): FormlyFieldConfig {\n const safeKey =\n typeof node.props.key === 'string' && node.props.key.trim().length > 0 ? node.props.key.trim() : node.id;\n\n const expressions: Record<string, string> = {};\n const visibleExpr =\n normalizedAdvancedExpression(node.props.visibleExpression) ??\n (node.props.visibleRule ? ruleConditionExpression(node.props.visibleRule) : null);\n if (visibleExpr) expressions['hide'] = `!(${visibleExpr})`;\n\n const enabledExpr =\n normalizedAdvancedExpression(node.props.enabledExpression) ??\n (node.props.enabledRule ? ruleConditionExpression(node.props.enabledRule) : null);\n if (enabledExpr) expressions['props.disabled'] = `!(${enabledExpr})`;\n const validators = formlyValidators(node);\n\n const mapped: FormlyFieldConfig = {\n key: safeKey,\n type: node.props.customType ?? toFormlyType(node.fieldKind),\n props: fieldProps(node),\n hide: !!node.props.hidden,\n defaultValue: node.props.defaultValue,\n ...(Object.keys(expressions).length > 0 ? { expressions } : {}),\n ...(validators ? { validators } : {}),\n };\n\n if (node.fieldKind === 'repeater') {\n mapped.fieldArray = repeaterFieldArray(node);\n if (!Array.isArray(mapped.defaultValue)) mapped.defaultValue = [];\n }\n\n return mapped;\n}\n\nfunction containerNodeToFormly(\n doc: BuilderDocument,\n container: ContainerNode,\n visited: Set<string>,\n): FormlyFieldConfig[] {\n const childrenFields = container.children.flatMap((childId) => {\n const child = doc.nodes[childId];\n return child ? nodeToFormly(doc, child, visited) : [];\n });\n\n if (container.type === 'panel') {\n return [\n {\n wrappers: ['panel'],\n props: {\n label: container.props.title ?? container.props.label ?? 'Panel',\n description: container.props.description,\n },\n fieldGroup: childrenFields,\n },\n ];\n }\n\n if (container.type === 'row') {\n return [{ fieldGroup: childrenFields, fieldGroupClassName: rowClass(doc.renderer) }];\n }\n\n if (container.type === 'tabs') {\n return [\n {\n type: 'fb-tabs',\n props: {\n label: containerLabel(container, 'Tabs'),\n description: container.props.description,\n },\n fieldGroup: childrenFields,\n },\n ];\n }\n\n if (container.type === 'stepper') {\n return [\n {\n type: 'fb-stepper',\n props: {\n label: containerLabel(container, 'Stepper'),\n description: container.props.description,\n },\n fieldGroup: childrenFields,\n },\n ];\n }\n\n if (container.type === 'accordion') {\n return [\n {\n type: 'fb-accordion',\n props: {\n label: containerLabel(container, 'Accordion'),\n description: container.props.description,\n },\n fieldGroup: childrenFields,\n },\n ];\n }\n\n const span = Math.max(1, Math.min(12, container.props.colSpan ?? 12));\n return [{ fieldGroup: childrenFields, className: colClass(doc.renderer, span) }];\n}\n\nfunction nodeToFormly(doc: BuilderDocument, node: BuilderNode, visited: Set<string>): FormlyFieldConfig[] {\n if (visited.has(node.id)) return [];\n visited.add(node.id);\n\n if (isFieldNode(node)) return [fieldNodeToFormly(node)];\n return containerNodeToFormly(doc, node as ContainerNode, visited);\n}\n\n/**\n * Maps builder domain tree to FormlyFieldConfig[] for runtime rendering/export.\n */\nexport function builderToFormly(doc: BuilderDocument): FormlyFieldConfig[] {\n const root = doc.nodes[doc.rootId];\n if (!root || !('children' in root)) return [];\n\n const visited = new Set<string>([doc.rootId]);\n return root.children.flatMap((childId) => {\n const node = doc.nodes[childId];\n return node ? nodeToFormly(doc, node, visited) : [];\n });\n}\n","import { BuilderDocument, FieldNode, RuleOperator, isFieldNode } from './model';\n\nexport type DiagnosticSeverity = 'error' | 'warning';\n\nexport interface BuilderDiagnostic {\n severity: DiagnosticSeverity;\n code: string;\n message: string;\n nodeId?: string;\n}\n\nexport interface BuilderDiagnosticsReport {\n diagnostics: BuilderDiagnostic[];\n errorCount: number;\n warningCount: number;\n}\n\nexport interface BuildDiagnosticsOptions {\n knownValidatorPresetIds?: ReadonlySet<string>;\n}\n\nconst FORBIDDEN_EXPRESSION_TOKENS =\n /\\b(window|document|globalThis|Function|eval|constructor|prototype|__proto__|process|require|import|fetch|XMLHttpRequest)\\b/;\nconst RULE_VALUE_OPERATORS = new Set<RuleOperator>(['eq', 'ne', 'contains', 'gt', 'lt']);\n\nexport function buildDiagnostics(\n doc: BuilderDocument,\n options: BuildDiagnosticsOptions = {},\n): BuilderDiagnosticsReport {\n const diagnostics: BuilderDiagnostic[] = [];\n const fields = Object.values(doc.nodes).filter((node): node is FieldNode => isFieldNode(node));\n const fieldsByKey = indexFieldsByKey(fields);\n\n diagnostics.push(...duplicateKeyDiagnostics(fieldsByKey));\n diagnostics.push(...ruleDiagnostics(fields, fieldsByKey));\n diagnostics.push(...expressionDiagnostics(fields));\n diagnostics.push(...validatorPresetDiagnostics(fields, options.knownValidatorPresetIds));\n\n return {\n diagnostics,\n errorCount: diagnostics.filter((item) => item.severity === 'error').length,\n warningCount: diagnostics.filter((item) => item.severity === 'warning').length,\n };\n}\n\nfunction validatorPresetDiagnostics(\n fields: FieldNode[],\n knownValidatorPresetIds: ReadonlySet<string> | undefined,\n): BuilderDiagnostic[] {\n if (!knownValidatorPresetIds) return [];\n const diagnostics: BuilderDiagnostic[] = [];\n for (const field of fields) {\n const presetId = (field.validators.presetId ?? '').trim();\n if (!presetId) continue;\n if (knownValidatorPresetIds.has(presetId)) continue;\n diagnostics.push({\n severity: 'warning',\n code: 'validator-preset-missing',\n nodeId: field.id,\n message: `Validator preset \"${presetId}\" is not registered in current runtime.`,\n });\n }\n return diagnostics;\n}\n\nfunction indexFieldsByKey(fields: FieldNode[]): Map<string, FieldNode[]> {\n const map = new Map<string, FieldNode[]>();\n for (const field of fields) {\n const key = normalizedKey(field);\n if (!key) continue;\n const arr = map.get(key) ?? [];\n arr.push(field);\n map.set(key, arr);\n }\n return map;\n}\n\nfunction normalizedKey(field: FieldNode): string {\n return (field.props.key ?? '').trim();\n}\n\nfunction duplicateKeyDiagnostics(fieldsByKey: Map<string, FieldNode[]>): BuilderDiagnostic[] {\n const diagnostics: BuilderDiagnostic[] = [];\n for (const [key, fields] of fieldsByKey.entries()) {\n if (fields.length < 2) continue;\n for (const field of fields) {\n diagnostics.push({\n severity: 'error',\n code: 'duplicate-key',\n nodeId: field.id,\n message: `Duplicate field key \"${key}\". Keys must be unique.`,\n });\n }\n }\n return diagnostics;\n}\n\nfunction ruleDiagnostics(fields: FieldNode[], fieldsByKey: Map<string, FieldNode[]>): BuilderDiagnostic[] {\n const diagnostics: BuilderDiagnostic[] = [];\n for (const field of fields) {\n const ownKey = normalizedKey(field);\n for (const target of ['visibleRule', 'enabledRule'] as const) {\n const rule = field.props[target];\n if (!rule) continue;\n const dependsOnKey = (rule.dependsOnKey ?? '').trim();\n if (!dependsOnKey) {\n diagnostics.push({\n severity: 'warning',\n code: 'rule-missing-key',\n nodeId: field.id,\n message: `${target} is configured without \"dependsOnKey\".`,\n });\n } else {\n if (!fieldsByKey.has(dependsOnKey)) {\n diagnostics.push({\n severity: 'error',\n code: 'rule-missing-reference',\n nodeId: field.id,\n message: `${target} depends on missing key \"${dependsOnKey}\".`,\n });\n }\n if (ownKey && ownKey === dependsOnKey) {\n diagnostics.push({\n severity: 'warning',\n code: 'rule-self-reference',\n nodeId: field.id,\n message: `${target} references the same field key \"${dependsOnKey}\".`,\n });\n }\n }\n\n if (RULE_VALUE_OPERATORS.has(rule.operator) && !(rule.value ?? '').trim()) {\n diagnostics.push({\n severity: 'warning',\n code: 'rule-missing-value',\n nodeId: field.id,\n message: `${target} uses operator \"${rule.operator}\" but has an empty value.`,\n });\n }\n }\n }\n return diagnostics;\n}\n\nfunction expressionDiagnostics(fields: FieldNode[]): BuilderDiagnostic[] {\n const diagnostics: BuilderDiagnostic[] = [];\n for (const field of fields) {\n diagnostics.push(...validateRuleExpression(field, 'visibleExpression'));\n diagnostics.push(...validateRuleExpression(field, 'enabledExpression'));\n diagnostics.push(...validateCustomValidationExpression(field));\n }\n return diagnostics;\n}\n\nfunction validateRuleExpression(\n field: FieldNode,\n target: 'visibleExpression' | 'enabledExpression',\n): BuilderDiagnostic[] {\n const expression = (field.props[target] ?? '').trim();\n if (!expression) return [];\n return validateExpression(expression, {\n nodeId: field.id,\n label: target,\n maxLength: 500,\n compile: (value) => new Function('model', 'data', 'value', `return (${value});`),\n });\n}\n\nfunction validateCustomValidationExpression(field: FieldNode): BuilderDiagnostic[] {\n const expression = (field.validators.customExpression ?? '').trim();\n if (!expression) return [];\n return validateExpression(expression, {\n nodeId: field.id,\n label: 'customExpression',\n maxLength: 2000,\n compile: (value) =>\n new Function(\n 'form',\n 'model',\n 'data',\n 'row',\n 'field',\n 'control',\n 'value',\n `let valid = true; ${value}; return valid;`,\n ),\n additionalChecks: () => {\n if (!/\\bvalid\\s*=/.test(expression)) {\n return {\n severity: 'warning' as const,\n code: 'custom-expression-no-valid-assignment',\n message: 'customExpression does not assign to \"valid\".',\n };\n }\n return null;\n },\n });\n}\n\nfunction validateExpression(\n expression: string,\n options: {\n nodeId: string;\n label: string;\n maxLength: number;\n compile: (expression: string) => unknown;\n additionalChecks?: () => BuilderDiagnostic | null;\n },\n): BuilderDiagnostic[] {\n const diagnostics: BuilderDiagnostic[] = [];\n if (expression.length > options.maxLength) {\n diagnostics.push({\n severity: 'error',\n code: 'expression-too-long',\n nodeId: options.nodeId,\n message: `${options.label} exceeds ${options.maxLength} characters.`,\n });\n }\n\n if (FORBIDDEN_EXPRESSION_TOKENS.test(expression)) {\n diagnostics.push({\n severity: 'error',\n code: 'expression-unsafe-token',\n nodeId: options.nodeId,\n message: `${options.label} contains blocked tokens.`,\n });\n }\n\n try {\n options.compile(expression);\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'expression-invalid-syntax',\n nodeId: options.nodeId,\n message: `${options.label} has invalid syntax: ${(error as Error).message}`,\n });\n }\n\n const extra = options.additionalChecks?.();\n if (extra) diagnostics.push({ ...extra, nodeId: options.nodeId });\n\n return diagnostics;\n}\n","/**\n * Builder document schema versioning.\n * Increment CURRENT when making backward-incompatible JSON shape changes.\n */\nexport const LEGACY_BUILDER_SCHEMA_VERSION = 0;\nexport const CURRENT_BUILDER_SCHEMA_VERSION = 2;\n","import { CURRENT_BUILDER_SCHEMA_VERSION, LEGACY_BUILDER_SCHEMA_VERSION } from './schema';\n\nexport interface SchemaMigrationStep {\n from: number;\n to: number;\n run: (doc: Record<string, unknown>) => Record<string, unknown>;\n}\n\nconst SCHEMA_MIGRATIONS: readonly SchemaMigrationStep[] = [\n {\n from: 0,\n to: 1,\n run: migrateV0ToV1,\n },\n {\n from: 1,\n to: 2,\n run: migrateV1ToV2,\n },\n];\n\nexport function toSchemaVersion(value: unknown): number {\n const num = Number(value);\n if (!Number.isFinite(num) || num <= 0) return LEGACY_BUILDER_SCHEMA_VERSION;\n return Math.trunc(num);\n}\n\nexport function migrateBuilderSchema(rawDoc: Record<string, unknown>): {\n migrated: Record<string, unknown>;\n warnings: string[];\n} {\n const warnings: string[] = [];\n const fromVersion = toSchemaVersion(rawDoc['schemaVersion']);\n let out = { ...rawDoc };\n\n if (fromVersion > CURRENT_BUILDER_SCHEMA_VERSION) {\n warnings.push(\n `Document schema v${fromVersion} is newer than supported v${CURRENT_BUILDER_SCHEMA_VERSION}; imported in compatibility mode.`,\n );\n return { migrated: { ...out, schemaVersion: CURRENT_BUILDER_SCHEMA_VERSION }, warnings };\n }\n\n let current = fromVersion;\n while (current < CURRENT_BUILDER_SCHEMA_VERSION) {\n const step = SCHEMA_MIGRATIONS.find((candidate) => candidate.from === current);\n if (!step) {\n warnings.push(\n `Missing migration step from v${current}; forced schema to v${CURRENT_BUILDER_SCHEMA_VERSION} in compatibility mode.`,\n );\n return { migrated: { ...out, schemaVersion: CURRENT_BUILDER_SCHEMA_VERSION }, warnings };\n }\n out = step.run(out);\n warnings.push(`Migrated builder document schema v${step.from} to v${step.to}.`);\n current = step.to;\n }\n\n return { migrated: { ...out, schemaVersion: CURRENT_BUILDER_SCHEMA_VERSION }, warnings };\n}\n\nfunction migrateV0ToV1(doc: Record<string, unknown>): Record<string, unknown> {\n const nodes = asRecord(doc['nodes']);\n if (!nodes) return doc;\n const nextNodes: Record<string, unknown> = { ...nodes };\n for (const [id, rawNode] of Object.entries(nodes)) {\n const node = asRecord(rawNode);\n if (!node || node['type'] !== 'field') continue;\n\n const props = migrateLegacyRuleAliases(asRecord(node['props']) ?? {});\n const validators = migrateLegacyCustomValidationAlias(asRecord(node['validators']) ?? {});\n\n nextNodes[id] = {\n ...node,\n props,\n validators,\n };\n }\n return { ...doc, nodes: nextNodes };\n}\n\nfunction migrateLegacyRuleAliases(props: Record<string, unknown>): Record<string, unknown> {\n const visibleWhen = asRecord(props['visibleWhen']);\n if (visibleWhen && !asRecord(props['visibleRule'])) props['visibleRule'] = toRuleAlias(visibleWhen);\n delete props['visibleWhen'];\n\n const enabledWhen = asRecord(props['enabledWhen']);\n if (enabledWhen && !asRecord(props['enabledRule'])) props['enabledRule'] = toRuleAlias(enabledWhen);\n delete props['enabledWhen'];\n return props;\n}\n\nfunction toRuleAlias(value: Record<string, unknown>): Record<string, unknown> {\n return {\n dependsOnKey: value['dependsOnKey'],\n operator: value['operator'],\n value: value['value'],\n };\n}\n\nfunction migrateLegacyCustomValidationAlias(validators: Record<string, unknown>): Record<string, unknown> {\n const customValidation = asRecord(validators['customValidation']);\n if (!customValidation) return validators;\n if (typeof customValidation['expression'] === 'string' && !validators['customExpression']) {\n validators['customExpression'] = customValidation['expression'];\n }\n if (typeof customValidation['message'] === 'string' && !validators['customExpressionMessage']) {\n validators['customExpressionMessage'] = customValidation['message'];\n }\n delete validators['customValidation'];\n return validators;\n}\n\nfunction migrateV1ToV2(doc: Record<string, unknown>): Record<string, unknown> {\n const nodes = asRecord(doc['nodes']);\n if (!nodes) return doc;\n const nextNodes: Record<string, unknown> = { ...nodes };\n\n for (const [id, rawNode] of Object.entries(nodes)) {\n const node = asRecord(rawNode);\n if (!node || node['type'] !== 'field') continue;\n\n const props = asRecord(node['props']) ?? {};\n const validators = asRecord(node['validators']) ?? {};\n\n normalizeTrimmedExpression(props, 'visibleExpression');\n normalizeTrimmedExpression(props, 'enabledExpression');\n normalizeTrimmedExpression(validators, 'customExpression');\n\n nextNodes[id] = {\n ...node,\n props,\n validators,\n };\n }\n return { ...doc, nodes: nextNodes };\n}\n\nfunction normalizeTrimmedExpression(container: Record<string, unknown>, key: string): void {\n const value = container[key];\n if (typeof value !== 'string') return;\n const trimmed = value.trim();\n if (!trimmed) {\n delete container[key];\n return;\n }\n container[key] = trimmed;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n","import { BuilderDocument, BuilderNode, ContainerNode, FieldKind, FieldNode, PreviewRenderer } from './model';\nimport { CURRENT_BUILDER_SCHEMA_VERSION } from './schema';\nimport { migrateBuilderSchema } from './migrations';\n\nconst DEFAULT_ROOT_ID = 'root';\nconst VALID_FIELD_KINDS = new Set<FieldKind>([\n 'input',\n 'textarea',\n 'checkbox',\n 'radio',\n 'select',\n 'date',\n 'number',\n 'email',\n 'password',\n 'tel',\n 'url',\n 'file',\n 'multiselect',\n 'repeater',\n]);\n\ntype ParseResult = { ok: true; doc: BuilderDocument; warnings: string[] } | { ok: false; error: string };\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\nfunction toRenderer(v: unknown): PreviewRenderer {\n return v === 'material' ? 'material' : 'bootstrap';\n}\n\nfunction toStringArray(v: unknown): string[] {\n if (!Array.isArray(v)) return [];\n return v.filter((x): x is string => typeof x === 'string');\n}\n\nfunction toFieldKind(rawFieldKind: unknown): FieldKind {\n const candidate = typeof rawFieldKind === 'string' ? (rawFieldKind as FieldKind) : 'input';\n return VALID_FIELD_KINDS.has(candidate) ? candidate : 'input';\n}\n\nfunction normalizeFieldNode(raw: Record<string, unknown>, id: string, parentId: string | null): FieldNode {\n const props = isObject(raw['props']) ? raw['props'] : {};\n const validators = isObject(raw['validators']) ? raw['validators'] : {};\n\n return {\n id,\n type: 'field',\n parentId,\n children: [],\n fieldKind: toFieldKind(raw['fieldKind']),\n props: { ...(props as FieldNode['props']) },\n validators: { ...(validators as FieldNode['validators']) },\n };\n}\n\nfunction normalizeContainerNode(\n raw: Record<string, unknown>,\n id: string,\n type: ContainerNode['type'],\n parentId: string | null,\n): ContainerNode {\n const props = isObject(raw['props']) ? raw['props'] : {};\n const out: ContainerNode = {\n id,\n type,\n parentId,\n children: [],\n props: { ...(props as ContainerNode['props']) },\n };\n\n if (type === 'col') {\n const span = Number(out.props.colSpan ?? 6);\n const clamped = Number.isFinite(span) ? Math.max(1, Math.min(12, Math.trunc(span))) : 6;\n out.props.colSpan = clamped;\n }\n\n return out;\n}\n\nfunction normalizeNode(raw: Record<string, unknown>, id: string, parentId: string | null): BuilderNode | null {\n if (raw['type'] === 'field') return normalizeFieldNode(raw, id, parentId);\n if (\n raw['type'] === 'panel' ||\n raw['type'] === 'row' ||\n raw['type'] === 'col' ||\n raw['type'] === 'tabs' ||\n raw['type'] === 'stepper' ||\n raw['type'] === 'accordion'\n ) {\n return normalizeContainerNode(raw, id, raw['type'], parentId);\n }\n return null;\n}\n\nexport function parseBuilderDocument(json: string): ParseResult {\n try {\n return parseBuilderDocumentObject(JSON.parse(json));\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\nexport function parseBuilderDocumentObject(rawDoc: unknown): ParseResult {\n if (!isObject(rawDoc)) return { ok: false, error: 'Invalid document: expected object' };\n\n const migrated = migrateBuilderSchema(rawDoc);\n const source = migrated.migrated;\n if (!isObject(source['nodes'])) return { ok: false, error: 'Invalid document: nodes must be an object map' };\n\n const rawNodes = source['nodes'] as Record<string, unknown>;\n const requestedRootId = typeof source['rootId'] === 'string' ? source['rootId'] : DEFAULT_ROOT_ID;\n const rootId = rawNodes[requestedRootId] ? requestedRootId : DEFAULT_ROOT_ID;\n const warnings: string[] = [...migrated.warnings];\n\n if (rootId !== requestedRootId) {\n warnings.push(`Root \"${requestedRootId}\" missing, fell back to \"${DEFAULT_ROOT_ID}\".`);\n }\n\n if (!rawNodes[rootId]) {\n const root: ContainerNode = {\n id: DEFAULT_ROOT_ID,\n type: 'panel',\n parentId: null,\n children: [],\n props: { title: 'Form' },\n };\n return {\n ok: true,\n warnings: ['Root node missing; created empty root panel.'],\n doc: {\n rootId: DEFAULT_ROOT_ID,\n schemaVersion: CURRENT_BUILDER_SCHEMA_VERSION,\n nodes: { [DEFAULT_ROOT_ID]: root },\n selectedId: null,\n renderer: toRenderer(source['renderer']),\n },\n };\n }\n\n const outNodes: Record<string, BuilderNode> = {};\n const visited = new Set<string>();\n\n const visit = (id: string, parentId: string | null): string | null => {\n if (visited.has(id)) return null;\n const rawNode = rawNodes[id];\n if (!isObject(rawNode)) return null;\n\n const normalized = normalizeNode(rawNode, id, parentId);\n if (!normalized) {\n warnings.push(`Dropped node \"${id}\" with unknown type.`);\n return null;\n }\n\n visited.add(id);\n outNodes[id] = normalized;\n\n if (normalized.type === 'field') return id;\n\n const children = toStringArray(rawNode['children']);\n const childIds: string[] = [];\n for (const childId of children) {\n const resolved = visit(childId, id);\n if (resolved) childIds.push(resolved);\n }\n outNodes[id] = { ...normalized, children: childIds };\n return id;\n };\n\n const resolvedRootId = visit(rootId, null);\n if (!resolvedRootId) return { ok: false, error: 'Invalid document: root node is not usable' };\n\n const rootNode = outNodes[resolvedRootId];\n if (!rootNode || rootNode.type === 'field') {\n return { ok: false, error: 'Invalid document: root must be a container node' };\n }\n\n const selectedId =\n typeof source['selectedId'] === 'string' && outNodes[source['selectedId']] ? source['selectedId'] : null;\n if (source['selectedId'] && selectedId == null) {\n warnings.push('Selected node was invalid and has been cleared.');\n }\n\n return {\n ok: true,\n warnings,\n doc: {\n rootId: resolvedRootId,\n schemaVersion: CURRENT_BUILDER_SCHEMA_VERSION,\n nodes: outNodes,\n selectedId,\n renderer: toRenderer(source['renderer']),\n },\n };\n}\n","/**\n * Creates readable unique ids for builder nodes.\n */\nexport function uid(prefix = 'n'): string {\n return `${prefix}_${Math.random().toString(16).slice(2)}_${Date.now().toString(16)}`;\n}\n\n/**\n * Normalizes a node id to a safe Formly field key.\n */\nexport function toFieldKey(id: string): string {\n return `field_${id.replace(/[^a-zA-Z0-9_]/g, '')}`;\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type UnknownRecord = Record<string, unknown>;\n\nexport function isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function toStringOrUndefined(value: unknown): string | undefined {\n if (value == null) return undefined;\n return String(value);\n}\n\nexport function toNumberOrUndefined(value: unknown): number | undefined {\n if (value == null) return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport function toBooleanOrUndefined(value: unknown): boolean | undefined {\n if (value == null) return undefined;\n return Boolean(value);\n}\n\n/**\n * Returns normalized field props and supports legacy templateOptions as fallback.\n */\nexport function fieldPropsOf(field: FormlyFieldConfig): UnknownRecord {\n const props = field.props;\n if (isRecord(props)) return props;\n const legacy = (field as unknown as { templateOptions?: unknown }).templateOptions;\n return isRecord(legacy) ? legacy : {};\n}\n\nexport function getFieldGroup(field: FormlyFieldConfig): FormlyFieldConfig[] {\n return Array.isArray(field.fieldGroup) ? field.fieldGroup : [];\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport {\n AsyncUniqueValidator,\n ConditionalRule,\n FieldKind,\n FieldNode,\n FieldProps,\n OptionItem,\n OptionsSource,\n RuleOperator,\n} from '../model';\nimport { fieldPropsOf, isRecord, toBooleanOrUndefined, toNumberOrUndefined, toStringOrUndefined } from './shared';\n\nconst RULE_OPERATORS = new Set<RuleOperator>(['truthy', 'falsy', 'eq', 'ne', 'contains', 'gt', 'lt']);\nconst SOURCE_TYPES = new Set<OptionsSource['type']>(['static', 'lookup', 'url']);\nconst UNIQUE_SOURCE_TYPES = new Set<AsyncUniqueValidator['sourceType']>(['lookup', 'url']);\n\nconst DIRECT_FIELD_KIND_MAP: Record<string, FieldKind> = {\n textarea: 'textarea',\n checkbox: 'checkbox',\n radio: 'radio',\n};\n\nconst INPUT_FIELD_KIND_MAP: Record<string, FieldKind> = {\n date: 'date',\n number: 'number',\n email: 'email',\n password: 'password',\n tel: 'tel',\n url: 'url',\n file: 'file',\n};\n\nexport function fieldKindFromType(field: FormlyFieldConfig): FieldNode['fieldKind'] {\n const type = String(field.type ?? 'input');\n const props = fieldPropsOf(field);\n\n if (DIRECT_FIELD_KIND_MAP[type]) return DIRECT_FIELD_KIND_MAP[type];\n if (type === 'select') return props['multiple'] ? 'multiselect' : 'select';\n if (type === 'repeat' || field.fieldArray) return 'repeater';\n\n if (type === 'input') {\n const inputType = String(props['type'] ?? '').toLowerCase();\n return INPUT_FIELD_KIND_MAP[inputType] ?? 'input';\n }\n\n return 'input';\n}\n\nexport function toValidators(field: FormlyFieldConfig): FieldNode['validators'] {\n const props = fieldPropsOf(field);\n const validators: FieldNode['validators'] = {};\n\n applyValidatorsFromProps(validators, props);\n applyValidatorsFromFieldConfig(validators, field);\n\n return validators;\n}\n\nexport function toFieldProps(field: FormlyFieldConfig): FieldProps {\n const props = fieldPropsOf(field);\n\n const mapped: FieldProps = {\n key: toStringOrUndefined(field.key),\n label: toStringOrUndefined(props['label']),\n description: toStringOrUndefined(props['description']),\n placeholder: toStringOrUndefined(props['placeholder']),\n disabled: Boolean(props['disabled']),\n hidden: Boolean(field.hide),\n };\n\n const options = toOptionItems(props['options']);\n if (options.length > 0) mapped.options = options;\n\n const multiple = toBooleanOrUndefined(props['multiple']);\n if (multiple !== undefined) mapped.multiple = multiple;\n\n const source = toOptionsSource(props['optionsSource']);\n if (source) mapped.optionsSource = source;\n\n const visibleRule = toConditionalRule(props['visibleRule']);\n if (visibleRule) mapped.visibleRule = visibleRule;\n\n const enabledRule = toConditionalRule(props['enabledRule']);\n if (enabledRule) mapped.enabledRule = enabledRule;\n\n const visibleExpression = toStringOrUndefined(props['visibleExpression']);\n if (visibleExpression) mapped.visibleExpression = visibleExpression;\n\n const enabledExpression = toStringOrUndefined(props['enabledExpression']);\n if (enabledExpression) mapped.enabledExpression = enabledExpression;\n\n const searchable = toBooleanOrUndefined(props['searchable']);\n if (searchable !== undefined) mapped.searchable = searchable;\n\n const repeater = toRepeaterTemplate(field);\n if (repeater.itemLabel) mapped.repeaterItemLabel = repeater.itemLabel;\n if (repeater.itemPlaceholder) mapped.repeaterItemPlaceholder = repeater.itemPlaceholder;\n\n if (field.defaultValue !== undefined) mapped.defaultValue = field.defaultValue;\n\n return mapped;\n}\n\nfunction toOptionItems(value: unknown): OptionItem[] {\n if (!Array.isArray(value)) return [];\n return value.filter(isRecord).map((item) => ({\n label: String(item['label'] ?? ''),\n value: String(item['value'] ?? ''),\n }));\n}\n\nfunction toOptionsSource(value: unknown): OptionsSource | null {\n if (!isRecord(value)) return null;\n const type = value['type'];\n if (typeof type !== 'string' || !SOURCE_TYPES.has(type as OptionsSource['type'])) return null;\n\n return {\n type: type as OptionsSource['type'],\n url: toStringOrUndefined(value['url']),\n lookupKey: toStringOrUndefined(value['lookupKey']),\n listPath: toStringOrUndefined(value['listPath']),\n labelKey: toStringOrUndefined(value['labelKey']),\n valueKey: toStringOrUndefined(value['valueKey']),\n };\n}\n\nfunction toConditionalRule(value: unknown): ConditionalRule | null {\n if (!isRecord(value)) return null;\n const dependsOnKey = toStringOrUndefined(value['dependsOnKey']);\n const operatorRaw = toStringOrUndefined(value['operator']);\n if (!dependsOnKey || !operatorRaw || !RULE_OPERATORS.has(operatorRaw as RuleOperator)) return null;\n\n return {\n dependsOnKey,\n operator: operatorRaw as RuleOperator,\n value: toStringOrUndefined(value['value']),\n };\n}\n\nfunction toAsyncUniqueValidator(value: unknown): AsyncUniqueValidator | null {\n if (!isRecord(value)) return null;\n const sourceType = toStringOrUndefined(value['sourceType']);\n if (!sourceType || !UNIQUE_SOURCE_TYPES.has(sourceType as AsyncUniqueValidator['sourceType'])) return null;\n\n return {\n sourceType: sourceType as AsyncUniqueValidator['sourceType'],\n url: toStringOrUndefined(value['url']),\n lookupKey: toStringOrUndefined(value['lookupKey']),\n listPath: toStringOrUndefined(value['listPath']),\n valueKey: toStringOrUndefined(value['valueKey']),\n message: toStringOrUndefined(value['message']),\n caseSensitive: toBooleanOrUndefined(value['caseSensitive']),\n };\n}\n\nfunction toCustomValidation(value: unknown): { expression?: string; message?: string } {\n if (!isRecord(value)) return {};\n return {\n expression: toStringOrUndefined(value['expression']),\n message: toStringOrUndefined(value['message']),\n };\n}\n\nfunction toValidatorPreset(value: unknown): { id?: string; params?: Record<string, string | number | boolean> } {\n if (!isRecord(value)) return {};\n const id = toStringOrUndefined(value['id']);\n if (!id?.trim()) return {};\n const paramsRaw = value['params'];\n const params: Record<string, string | number | boolean> = {};\n if (isRecord(paramsRaw)) {\n for (const [key, paramValue] of Object.entries(paramsRaw)) {\n if (typeof paramValue === 'string' || typeof paramValue === 'number' || typeof paramValue === 'boolean') {\n params[key] = paramValue;\n }\n }\n }\n return { id: id.trim(), ...(Object.keys(params).length > 0 ? { params } : {}) };\n}\n\nfunction toRepeaterTemplate(field: FormlyFieldConfig): { itemLabel?: string; itemPlaceholder?: string } {\n const fieldArray = isRecord(field.fieldArray) ? (field.fieldArray as FormlyFieldConfig) : null;\n if (!fieldArray) return {};\n\n const arrayProps = fieldPropsOf(fieldArray);\n return {\n itemLabel: toStringOrUndefined(arrayProps['label']),\n itemPlaceholder: toStringOrUndefined(arrayProps['placeholder']),\n };\n}\n\nfunction applyValidatorsFromProps(validators: FieldNode['validators'], props: Record<string, unknown>): void {\n const required = toBooleanOrUndefined(props['required']);\n if (required !== undefined) validators.required = required;\n\n const minLength = toNumberOrUndefined(props['minLength']);\n if (minLength !== undefined) validators.minLength = minLength;\n\n const maxLength = toNumberOrUndefined(props['maxLength']);\n if (maxLength !== undefined) validators.maxLength = maxLength;\n\n const min = toNumberOrUndefined(props['min']);\n if (min !== undefined) validators.min = min;\n\n const max = toNumberOrUndefined(props['max']);\n if (max !== undefined) validators.max = max;\n\n const pattern = toStringOrUndefined(props['pattern']);\n if (pattern !== undefined) validators.pattern = pattern;\n\n const inputType = String(props['type'] ?? '').toLowerCase();\n if (inputType === 'email') validators.email = true;\n\n const asyncUnique = toAsyncUniqueValidator(props['asyncUnique']);\n if (asyncUnique) validators.asyncUnique = asyncUnique;\n\n const customValidation = toCustomValidation(props['customValidation']);\n if (customValidation.expression) validators.customExpression = customValidation.expression;\n if (customValidation.message) validators.customExpressionMessage = customValidation.message;\n\n const preset = toValidatorPreset(props['validatorPreset']);\n if (preset.id) validators.presetId = preset.id;\n if (preset.params) validators.presetParams = preset.params;\n}\n\nfunction applyValidatorsFromFieldConfig(validators: FieldNode['validators'], field: FormlyFieldConfig): void {\n if (!isRecord(field.validators)) return;\n\n const vMinLength = toNumberOrUndefined(field.validators['minLength']);\n if (vMinLength !== undefined) validators.minLength = vMinLength;\n\n const vMaxLength = toNumberOrUndefined(field.validators['maxLength']);\n if (vMaxLength !== undefined) validators.maxLength = vMaxLength;\n\n const vPattern = toStringOrUndefined(field.validators['pattern']);\n if (vPattern !== undefined) validators.pattern = vPattern;\n\n const email = toBooleanOrUndefined(field.validators['email']);\n if (email !== undefined) validators.email = email;\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { ContainerNode } from '../model';\nimport { fieldPropsOf, getFieldGroup } from './shared';\n\nconst ROW_REGEX = /\\b(?:fb-row|row)\\b/;\nconst COL_REGEX = /\\b(?:fb-col|col-(?:xs-|sm-|md-|lg-|xl-|xxl-)?\\d{1,2}|col-\\d{1,2})\\b/;\n\nexport type LayoutImportKind =\n | 'panel-wrapper'\n | 'tabs'\n | 'stepper'\n | 'accordion'\n | 'row'\n | 'col'\n | 'anonymous-group'\n | 'panel-group'\n | 'field';\n\nexport function detectLayoutKind(field: FormlyFieldConfig): LayoutImportKind {\n const wrappers = Array.isArray(field.wrappers) ? field.wrappers : [];\n if (wrappers.includes('panel')) return 'panel-wrapper';\n if (field.type === 'fb-tabs') return 'tabs';\n if (field.type === 'fb-stepper') return 'stepper';\n if (field.type === 'fb-accordion') return 'accordion';\n\n const group = getFieldGroup(field);\n if (group.length === 0) return 'field';\n\n const className = field.className ?? '';\n const fieldGroupClassName = field.fieldGroupClassName ?? '';\n if (ROW_REGEX.test(className) || ROW_REGEX.test(fieldGroupClassName)) return 'row';\n if (COL_REGEX.test(className)) return 'col';\n if (!field.type && !field.key) return 'anonymous-group';\n return 'panel-group';\n}\n\nexport function getColSpan(className?: string): number | null {\n if (!className) return null;\n const match = /\\b(?:fb-col-|col-(?:xs-|sm-|md-|lg-|xl-|xxl-)?)(\\d{1,2})\\b/.exec(className);\n if (!match) return null;\n const parsed = Number(match[1]);\n return Number.isFinite(parsed) ? Math.max(1, Math.min(12, parsed)) : null;\n}\n\nexport function getPanelTitle(field: FormlyFieldConfig, fallback: string): string {\n const props = fieldPropsOf(field);\n return String(props['label'] ?? fallback);\n}\n\nexport function getPanelDescription(field: FormlyFieldConfig): string | undefined {\n const props = fieldPropsOf(field);\n const value = props['description'];\n return value == null ? undefined : String(value);\n}\n\nexport function createContainerNode(type: ContainerNode['type'], id: string, parentId: string | null): ContainerNode {\n return { id, type, parentId, children: [], props: {} };\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BuilderDocument, ContainerNode, FieldNode } from './model';\nimport { CURRENT_BUILDER_SCHEMA_VERSION } from './schema';\nimport { toFieldKey, uid } from './ids';\nimport { fieldKindFromType, toFieldProps, toValidators } from './formly-import/field-mappers';\nimport {\n createContainerNode,\n detectLayoutKind,\n getColSpan,\n getPanelDescription,\n getPanelTitle,\n} from './formly-import/layout-mappers';\nimport { getFieldGroup } from './formly-import/shared';\n\nconst ROOT_ID = 'root';\n\n/**\n * Converts Formly config into builder domain JSON using a best-effort layout mapping.\n */\nexport function formlyToBuilder(\n fields: FormlyFieldConfig[],\n renderer: BuilderDocument['renderer'] = 'material',\n): BuilderDocument {\n const root = createContainerNode('panel', ROOT_ID, null);\n root.props.title = 'Form';\n\n const doc: BuilderDocument = {\n schemaVersion: CURRENT_BUILDER_SCHEMA_VERSION,\n rootId: ROOT_ID,\n nodes: { [ROOT_ID]: root },\n selectedId: null,\n renderer,\n };\n for (const field of fields ?? []) {\n importOne(doc, ROOT_ID, field);\n }\n return doc;\n}\n\nfunction importOne(doc: BuilderDocument, parentId: string, field: FormlyFieldConfig): void {\n const layoutKind = detectLayoutKind(field);\n\n switch (layoutKind) {\n case 'panel-wrapper': {\n const panel = createContainerNode('panel', uid('c'), parentId);\n panel.props.title = getPanelTitle(field, 'Panel');\n panel.props.description = getPanelDescription(field);\n attachContainer(doc, parentId, panel.id, panel);\n importGroup(doc, panel.id, getFieldGroup(field));\n return;\n }\n case 'row': {\n const row = createContainerNode('row', uid('c'), parentId);\n attachContainer(doc, parentId, row.id, row);\n importGroup(doc, row.id, getFieldGroup(field));\n return;\n }\n case 'tabs': {\n const tabs = createContainerNode('tabs', uid('c'), parentId);\n tabs.props.title = getPanelTitle(field, 'Tabs');\n tabs.props.description = getPanelDescription(field);\n attachContainer(doc, parentId, tabs.id, tabs);\n importGroup(doc, tabs.id, getFieldGroup(field));\n return;\n }\n case 'stepper': {\n const stepper = createContainerNode('stepper', uid('c'), parentId);\n stepper.props.title = getPanelTitle(field, 'Stepper');\n stepper.props.description = getPanelDescription(field);\n attachContainer(doc, parentId, stepper.id, stepper);\n importGroup(doc, stepper.id, getFieldGroup(field));\n return;\n }\n case 'accordion': {\n const accordion = createContainerNode('accordion', uid('c'), parentId);\n accordion.props.title = getPanelTitle(field, 'Accordion');\n accordion.props.description = getPanelDescription(field);\n attachContainer(doc, parentId, accordion.id, accordion);\n importGroup(doc, accordion.id, getFieldGroup(field));\n return;\n }\n case 'col': {\n const col = createContainerNode('col', uid('c'), parentId);\n const span = getColSpan(field.className ?? undefined);\n if (span != null) col.props.colSpan = span;\n attachContainer(doc, parentId, col.id, col);\n importGroup(doc, col.id, getFieldGroup(field));\n return;\n }\n case 'anonymous-group': {\n const row = createContainerNode('row', uid('c'), parentId);\n attachContainer(doc, parentId, row.id, row);\n importGroup(doc, row.id, getFieldGroup(field));\n return;\n }\n case 'panel-group': {\n const panel = createContainerNode('panel', uid('c'), parentId);\n panel.props.title = getPanelTitle(field, 'Group');\n attachContainer(doc, parentId, panel.id, panel);\n importGroup(doc, panel.id, getFieldGroup(field));\n return;\n }\n case 'field': {\n const mapped = createField(parentId, field);\n doc.nodes[mapped.id] = mapped;\n doc.nodes[parentId].children.push(mapped.id);\n return;\n }\n }\n}\n\nfunction importGroup(doc: BuilderDocument, parentId: string, fields: FormlyFieldConfig[]): void {\n for (const child of fields) {\n importOne(doc, parentId, child);\n }\n}\n\nfunction attachContainer(doc: BuilderDocument, parentId: string, id: string, container: ContainerNode): void {\n doc.nodes[id] = container;\n doc.nodes[parentId].children.push(id);\n}\n\nfunction createField(parentId: string, field: FormlyFieldConfig): FieldNode {\n const id = uid('f');\n const props = toFieldProps(field);\n if (!props.key) props.key = toFieldKey(id);\n\n return {\n id,\n type: 'field',\n parentId,\n children: [],\n fieldKind: fieldKindFromType(field),\n props,\n validators: toValidators(field),\n };\n}\n","import { InjectionToken } from '@angular/core';\n\nimport type { BuilderValidators, FieldKind, OptionItem } from './model';\nimport type { PaletteItem } from './registry';\nimport type { ValidatorPresetDefinition } from './validation-presets';\n\n/**\n * A subset of Formly's ConfigOption used to register custom types and wrappers.\n * Pass instances via BuilderPlugin.formlyExtensions to register them in the preview dialogs.\n */\nexport interface FormlyConfigExtension {\n types?: Array<{ name: string; component: unknown; extends?: string; wrappers?: string[] }>;\n wrappers?: Array<{ name: string; component: unknown }>;\n}\n\n/**\n * Product extension contract for builder capabilities.\n * Plugins can contribute palette entries, lookup datasets, validator presets, and custom Formly types.\n */\nexport interface BuilderPlugin {\n id: string;\n paletteItems?: readonly PaletteItem[];\n lookupRegistry?: Record<string, OptionItem[]>;\n validatorPresets?: Partial<Record<FieldKind, BuilderValidators>>;\n validatorPresetDefinitions?: readonly ValidatorPresetDefinition[];\n /** Custom Formly types/wrappers to register in the preview dialogs. */\n formlyExtensions?: readonly FormlyConfigExtension[];\n}\n\n/** Multi-plugin injection token used to compose runtime extensions. */\nexport const BUILDER_PLUGINS = new InjectionToken<readonly BuilderPlugin[]>('BUILDER_PLUGINS', {\n providedIn: 'root',\n factory: () => [],\n});\n\n/** Composes base palette with plugin palette contributions (override by `id`, otherwise append). */\nexport function composePalette(base: readonly PaletteItem[], plugins: readonly BuilderPlugin[]): PaletteItem[] {\n const ordered = [...base];\n const indexById = new Map<string, number>(ordered.map((item, index) => [item.id, index]));\n for (const plugin of plugins) {\n for (const item of plugin.paletteItems ?? []) {\n const existingIndex = indexById.get(item.id);\n if (existingIndex == null) {\n indexById.set(item.id, ordered.length);\n ordered.push({ ...item });\n } else {\n ordered[existingIndex] = { ...item };\n }\n }\n }\n return ordered;\n}\n\n/** Composes base lookup registry with plugin lookup contributions (override by key). */\nexport function composeLookupRegistry(\n base: Record<string, OptionItem[]>,\n plugins: readonly BuilderPlugin[],\n): Record<string, OptionItem[]> {\n const out: Record<string, OptionItem[]> = Object.fromEntries(\n Object.entries(base).map(([key, items]) => [key, [...items]]),\n );\n for (const plugin of plugins) {\n for (const [key, items] of Object.entries(plugin.lookupRegistry ?? {})) {\n out[key] = [...items];\n }\n }\n return out;\n}\n\n/** Composes validator presets by field kind (shallow merge by field kind key). */\nexport function composeValidatorPresets(\n base: Partial<Record<FieldKind, BuilderValidators>>,\n plugins: readonly BuilderPlugin[],\n): Partial<Record<FieldKind, BuilderValidators>> {\n const out: Partial<Record<FieldKind, BuilderValidators>> = { ...base };\n for (const plugin of plugins) {\n for (const [fieldKind, preset] of Object.entries(plugin.validatorPresets ?? {})) {\n out[fieldKind as FieldKind] = { ...(out[fieldKind as FieldKind] ?? {}), ...(preset ?? {}) };\n }\n }\n return out;\n}\n\n/** Composes named validator preset definitions (override by id, stable order). */\nexport function composeValidatorPresetDefinitions(\n base: readonly ValidatorPresetDefinition[],\n plugins: readonly BuilderPlugin[],\n): ValidatorPresetDefinition[] {\n const out = [...base];\n const indexById = new Map<string, number>(out.map((item, index) => [item.id, index]));\n\n for (const plugin of plugins) {\n for (const definition of plugin.validatorPresetDefinitions ?? []) {\n const existingIndex = indexById.get(definition.id);\n if (existingIndex == null) {\n indexById.set(definition.id, out.length);\n out.push({ ...definition });\n } else {\n out[existingIndex] = { ...definition };\n }\n }\n }\n\n return out;\n}\n\n/** Collects all formlyExtensions from plugins into a flat array. */\nexport function composeFormlyExtensions(plugins: readonly BuilderPlugin[]): FormlyConfigExtension[] {\n return plugins.flatMap((plugin) => [...(plugin.formlyExtensions ?? [])]);\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { OptionItem } from './model';\nimport { BUILDER_PLUGINS, composeLookupRegistry } from './plugins';\n\nexport const DEFAULT_LOOKUP_REGISTRY: Record<string, OptionItem[]> = {\n countries: [\n { label: 'United States', value: 'US' },\n { label: 'Canada', value: 'CA' },\n { label: 'Germany', value: 'DE' },\n ],\n priorities: [\n { label: 'Low', value: 'low' },\n { label: 'Medium', value: 'medium' },\n { label: 'High', value: 'high' },\n ],\n};\n\nexport const BUILDER_LOOKUP_REGISTRY = new InjectionToken<Record<string, OptionItem[]>>('BUILDER_LOOKUP_REGISTRY', {\n providedIn: 'root',\n factory: () => composeLookupRegistry(DEFAULT_LOOKUP_REGISTRY, inject(BUILDER_PLUGINS, { optional: true }) ?? []),\n});\n","import { BuilderNodeType, FieldKind } from './model';\nimport { PaletteItem } from './registry';\n\nconst NODE_TYPES = new Set<BuilderNodeType>(['field', 'panel', 'row', 'col', 'tabs', 'stepper', 'accordion']);\nconst FIELD_KINDS = new Set<FieldKind>([\n 'input',\n 'textarea',\n 'checkbox',\n 'radio',\n 'select',\n 'date',\n 'number',\n 'email',\n 'password',\n 'tel',\n 'url',\n 'file',\n 'multiselect',\n 'repeater',\n]);\n\nexport type PaletteValidationResult = { ok: true; palette: PaletteItem[] } | { ok: false; errors: string[] };\n\nexport function parsePaletteConfig(json: string): PaletteValidationResult {\n let parsed: unknown;\n try {\n parsed = JSON.parse(json);\n } catch (error) {\n return { ok: false, errors: [`Invalid JSON: ${(error as Error).message}`] };\n }\n return validatePaletteConfig(parsed);\n}\n\nexport function validatePaletteConfig(value: unknown): PaletteValidationResult {\n if (!Array.isArray(value)) return { ok: false, errors: ['Palette config must be a JSON array.'] };\n\n const errors: string[] = [];\n const palette: PaletteItem[] = [];\n const seen = new Set<string>();\n\n for (let i = 0; i < value.length; i++) {\n const parsed = parsePaletteItem(value[i], i, seen);\n if (!parsed.ok) {\n errors.push(...parsed.errors);\n continue;\n }\n palette.push(parsed.item);\n }\n\n errors.push(...validateTemplateReferences(palette));\n\n return errors.length > 0 ? { ok: false, errors } : { ok: true, palette };\n}\n\nfunction parsePaletteItem(\n value: unknown,\n index: number,\n seen: Set<string>,\n): { ok: true; item: PaletteItem } | { ok: false; errors: string[] } {\n if (!isRecord(value)) return { ok: false, errors: [`Item ${index}: must be an object.`] };\n\n const base = parseBasePaletteItemFields(value, index);\n if (!base.ok) return base;\n if (seen.has(base.id)) return { ok: false, errors: [`Duplicate palette id \"${base.id}\".`] };\n seen.add(base.id);\n\n const nodeType = base.nodeType as BuilderNodeType;\n const fieldKind = parseFieldKind(value, base.id, nodeType);\n if (!fieldKind.ok) return fieldKind;\n\n const defaults = value['defaults'] as Record<string, unknown>;\n return {\n ok: true,\n item: {\n id: base.id,\n category: base.category,\n title: base.title,\n nodeType,\n ...(nodeType === 'field' ? { fieldKind: fieldKind.value as FieldKind } : {}),\n defaults: normalizeDefaults(defaults),\n },\n };\n}\n\nfunction parseBasePaletteItemFields(\n value: Record<string, unknown>,\n index: number,\n): { ok: true; id: string; category: string; title: string; nodeType: string } | { ok: false; errors: string[] } {\n const { id, category, title, nodeType, errors } = validateBaseFields(value, index);\n errors.push(...validateDefaultsShape(value['defaults'], index));\n if (errors.length > 0 || !id || !category || !title || !nodeType) return { ok: false, errors };\n return { ok: true, id, category, title, nodeType };\n}\n\nfunction parseFieldKind(\n value: Record<string, unknown>,\n id: string,\n nodeType: BuilderNodeType,\n): { ok: true; value?: string } | { ok: false; errors: string[] } {\n const fieldKindRaw = nonEmptyString(value['fieldKind']);\n if (nodeType === 'field') {\n if (!fieldKindRaw || !FIELD_KINDS.has(fieldKindRaw as FieldKind)) {\n return { ok: false, errors: [`Item \"${id}\": \"fieldKind\" is required for field nodeType.`] };\n }\n return { ok: true, value: fieldKindRaw };\n }\n if (fieldKindRaw) return { ok: false, errors: [`Item \"${id}\": \"fieldKind\" is only allowed for field nodeType.`] };\n return { ok: true };\n}\n\nfunction normalizeDefaults(defaults: Record<string, unknown>): PaletteItem['defaults'] {\n return {\n props: { ...(defaults['props'] as Record<string, unknown>) } as PaletteItem['defaults']['props'],\n ...(isRecord(defaults['validators'])\n ? { validators: { ...(defaults['validators'] as Record<string, unknown>) } }\n : {}),\n ...(isStringArray(defaults['childrenTemplate']) ? { childrenTemplate: [...defaults['childrenTemplate']] } : {}),\n };\n}\n\nfunction validateTemplateReferences(palette: PaletteItem[]): string[] {\n const errors: string[] = [];\n const byId = new Map<string, PaletteItem>(palette.map((item) => [item.id, item]));\n for (const item of palette) {\n for (const childId of item.defaults.childrenTemplate ?? []) {\n const child = byId.get(childId);\n if (!child) {\n errors.push(`Item \"${item.id}\": childrenTemplate references missing id \"${childId}\".`);\n continue;\n }\n if (item.nodeType === 'row' && child.nodeType !== 'col') {\n errors.push(`Item \"${item.id}\": row childrenTemplate can only include column items.`);\n }\n }\n }\n return errors;\n}\n\nfunction validateBaseFields(\n value: Record<string, unknown>,\n index: number,\n): { id: string | null; category: string | null; title: string | null; nodeType: string | null; errors: string[] } {\n const errors: string[] = [];\n const id = nonEmptyString(value['id']);\n const category = nonEmptyString(value['category']);\n const title = nonEmptyString(value['title']);\n const nodeType = nonEmptyString(value['nodeType']);\n\n if (!id) errors.push(`Item ${index}: \"id\" is required.`);\n if (!category) errors.push(`Item ${index}: \"category\" is required.`);\n if (!title) errors.push(`Item ${index}: \"title\" is required.`);\n if (!nodeType || !NODE_TYPES.has(nodeType as BuilderNodeType)) {\n errors.push(`Item ${index}: \"nodeType\" must be one of field|panel|row|col|tabs|stepper|accordion.`);\n }\n return { id, category, title, nodeType, errors };\n}\n\nfunction validateDefaultsShape(defaults: unknown, index: number): string[] {\n const errors: string[] = [];\n if (!isRecord(defaults)) {\n errors.push(`Item ${index}: \"defaults\" object is required.`);\n return errors;\n }\n if (!isRecord(defaults['props'])) errors.push(`Item ${index}: \"defaults.props\" object is required.`);\n if (defaults['validators'] !== undefined && !isRecord(defaults['validators'])) {\n errors.push(`Item ${index}: \"defaults.validators\" must be an object when provided.`);\n }\n if (defaults['childrenTemplate'] !== undefined && !isStringArray(defaults['childrenTemplate'])) {\n errors.push(`Item ${index}: \"defaults.childrenTemplate\" must be a string array when provided.`);\n }\n return errors;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((item) => typeof item === 'string');\n}\n","import { inject, InjectionToken } from '@angular/core';\n\nimport { BuilderValidators, FieldKind, ValidatorPresetParamType, ValidatorPresetParamValue } from './model';\nimport { BUILDER_PLUGINS, composeValidatorPresetDefinitions, composeValidatorPresets } from './plugins';\n\n/**\n * Default validation presets for field kinds.\n * Users can override these in the inspector.\n */\nexport const FIELD_VALIDATION_PATTERNS = {\n tel: '^\\\\+?[1-9]\\\\d{7,14}$',\n url: '^https?:\\\\/\\\\/.+',\n} as const;\n\n/** Baseline validator presets for built-in field kinds. */\nexport const DEFAULT_FIELD_VALIDATION_PRESETS: Partial<Record<FieldKind, BuilderValidators>> = {\n email: { email: true },\n password: { minLength: 8 },\n tel: { pattern: FIELD_VALIDATION_PATTERNS.tel },\n url: { pattern: FIELD_VALIDATION_PATTERNS.url },\n};\n\nexport interface ValidatorPresetParamSchema {\n key: string;\n label: string;\n type: ValidatorPresetParamType;\n required?: boolean;\n description?: string;\n defaultValue?: ValidatorPresetParamValue;\n}\n\nexport interface ValidatorPresetDefinition {\n id: string;\n label: string;\n description?: string;\n fieldKinds?: readonly FieldKind[];\n params?: readonly ValidatorPresetParamSchema[];\n resolve: (params: Record<string, ValidatorPresetParamValue>) => Partial<BuilderValidators>;\n}\n\n/** Built-in validator preset definitions available in inspector and plugin extension points. */\nexport const DEFAULT_VALIDATOR_PRESET_DEFINITIONS: readonly ValidatorPresetDefinition[] = [\n {\n id: 'email-format',\n label: 'Email format',\n description: 'Marks field as email and applies Formly email validation.',\n fieldKinds: ['input', 'email'],\n resolve: () => ({ email: true }),\n },\n {\n id: 'phone-e164',\n label: 'Phone E.164',\n description: 'Validates international phone numbers using E.164 style pattern.',\n fieldKinds: ['input', 'tel'],\n resolve: () => ({ pattern: FIELD_VALIDATION_PATTERNS.tel }),\n },\n {\n id: 'url-http',\n label: 'URL (http/https)',\n description: 'Accepts only values that start with http:// or https://.',\n fieldKinds: ['input', 'url'],\n resolve: () => ({ pattern: FIELD_VALIDATION_PATTERNS.url }),\n },\n {\n id: 'length-range',\n label: 'Length range',\n description: 'Applies min/max length validators.',\n fieldKinds: ['input', 'textarea', 'email', 'password', 'tel', 'url'],\n params: [\n { key: 'minLength', label: 'Min length', type: 'number', defaultValue: 1 },\n { key: 'maxLength', label: 'Max length', type: 'number', defaultValue: 255 },\n ],\n resolve: (params) => ({\n minLength: toNumberOrNull(params['minLength']),\n maxLength: toNumberOrNull(params['maxLength']),\n }),\n },\n {\n id: 'numeric-range',\n label: 'Numeric range',\n description: 'Applies min/max numeric validators.',\n fieldKinds: ['number', 'input'],\n params: [\n { key: 'min', label: 'Min', type: 'number', defaultValue: 0 },\n { key: 'max', label: 'Max', type: 'number', defaultValue: 100 },\n ],\n resolve: (params) => ({\n min: toNumberOrNull(params['min']),\n max: toNumberOrNull(params['max']),\n }),\n },\n];\n\n/** Runtime validator preset token composed from built-ins and plugin contributions. */\nexport const BUILDER_VALIDATOR_PRESETS = new InjectionToken<Partial<Record<FieldKind, BuilderValidators>>>(\n 'BUILDER_VALIDATOR_PRESETS',\n {\n providedIn: 'root',\n factory: () =>\n composeValidatorPresets(DEFAULT_FIELD_VALIDATION_PRESETS, inject(BUILDER_PLUGINS, { optional: true }) ?? []),\n },\n);\n\n/** Runtime validator preset definitions composed from built-ins and plugin contributions (override by id). */\nexport const BUILDER_VALIDATOR_PRESET_DEFINITIONS = new InjectionToken<readonly ValidatorPresetDefinition[]>(\n 'BUILDER_VALIDATOR_PRESET_DEFINITIONS',\n {\n providedIn: 'root',\n factory: () =>\n composeValidatorPresetDefinitions(\n DEFAULT_VALIDATOR_PRESET_DEFINITIONS,\n inject(BUILDER_PLUGINS, { optional: true }) ?? [],\n ),\n },\n);\n\n/** Returns default validators for a given field kind using provided (or default) preset map. */\nexport function defaultValidatorsForFieldKind(\n fieldKind: FieldKind,\n presets: Partial<Record<FieldKind, BuilderValidators>> = DEFAULT_FIELD_VALIDATION_PRESETS,\n): BuilderValidators {\n return { ...(presets[fieldKind] ?? {}) };\n}\n\nexport function validatorPresetDefinitionsForFieldKind(\n fieldKind: FieldKind,\n definitions: readonly ValidatorPresetDefinition[],\n): ValidatorPresetDefinition[] {\n return definitions.filter((definition) => !definition.fieldKinds || definition.fieldKinds.includes(fieldKind));\n}\n\nexport function applyValidatorPreset(\n definition: ValidatorPresetDefinition,\n params: Record<string, ValidatorPresetParamValue> = {},\n): Partial<BuilderValidators> {\n const resolved = definition.resolve(params);\n return {\n required: resolved.required,\n minLength: resolved.minLength,\n maxLength: resolved.maxLength,\n min: resolved.min,\n max: resolved.max,\n pattern: resolved.pattern,\n email: resolved.email,\n };\n}\n\nexport function defaultParamsForValidatorPreset(\n definition: ValidatorPresetDefinition,\n): Record<string, ValidatorPresetParamValue> {\n const out: Record<string, ValidatorPresetParamValue> = {};\n for (const param of definition.params ?? []) {\n if (param.defaultValue !== undefined) out[param.key] = param.defaultValue;\n }\n return out;\n}\n\nfunction toNumberOrNull(value: unknown): number | null | undefined {\n if (value === undefined || value === null || value === '') return null;\n const num = Number(value);\n return Number.isFinite(num) ? num : null;\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { BuilderNodeType, BuilderValidators, ContainerProps, FieldKind, FieldProps } from './model';\nimport { BUILDER_PLUGINS, composePalette } from './plugins';\nimport { defaultValidatorsForFieldKind } from './validation-presets';\n\nexport const DEFAULT_PALETTE_CATEGORIES = {\n common: 'Common Fields',\n advanced: 'Advanced Fields',\n layout: 'Layout',\n} as const;\n\nexport interface PaletteItem {\n id: string;\n category: string;\n title: string;\n nodeType: BuilderNodeType;\n fieldKind?: FieldKind;\n /** Override the emitted Formly type name (e.g. 'my-datepicker'). Persisted as FieldProps.customType. */\n formlyType?: string;\n /** Optional hint shown in the inspector for custom field types. */\n inspectorHint?: string;\n defaults: {\n props: FieldProps | ContainerProps;\n validators?: BuilderValidators;\n childrenTemplate?: string[];\n };\n}\n\n/** Built-in palette used when no custom plugin or DI override is provided. */\nexport const PALETTE: PaletteItem[] = [\n {\n id: 'input',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Input',\n nodeType: 'field',\n fieldKind: 'input',\n defaults: { props: { label: 'Input', placeholder: 'Enter value' }, validators: {} },\n },\n {\n id: 'email',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Email',\n nodeType: 'field',\n fieldKind: 'email',\n defaults: {\n props: { label: 'Email', placeholder: 'name@example.com' },\n validators: defaultValidatorsForFieldKind('email'),\n },\n },\n {\n id: 'password',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Password',\n nodeType: 'field',\n fieldKind: 'password',\n defaults: {\n props: { label: 'Password', placeholder: 'Enter password' },\n validators: defaultValidatorsForFieldKind('password'),\n },\n },\n {\n id: 'tel',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Phone',\n nodeType: 'field',\n fieldKind: 'tel',\n defaults: {\n props: { label: 'Phone', placeholder: '+1 555 000 0000' },\n validators: defaultValidatorsForFieldKind('tel'),\n },\n },\n {\n id: 'url',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'URL',\n nodeType: 'field',\n fieldKind: 'url',\n defaults: {\n props: { label: 'URL', placeholder: 'https://example.com' },\n validators: defaultValidatorsForFieldKind('url'),\n },\n },\n {\n id: 'file',\n category: DEFAULT_PALETTE_CATEGORIES.advanced,\n title: 'File',\n nodeType: 'field',\n fieldKind: 'file',\n defaults: { props: { label: 'File upload' }, validators: {} },\n },\n {\n id: 'multiselect',\n category: DEFAULT_PALETTE_CATEGORIES.advanced,\n title: 'Multi-select',\n nodeType: 'field',\n fieldKind: 'multiselect',\n defaults: {\n props: {\n label: 'Multi-select',\n multiple: true,\n searchable: true,\n options: [\n { label: 'One', value: '1' },\n { label: 'Two', value: '2' },\n { label: 'Three', value: '3' },\n ],\n },\n validators: {},\n },\n },\n {\n id: 'repeater',\n category: DEFAULT_PALETTE_CATEGORIES.advanced,\n title: 'Repeater',\n nodeType: 'field',\n fieldKind: 'repeater',\n defaults: {\n props: {\n label: 'Repeater',\n repeaterItemLabel: 'Item',\n repeaterItemPlaceholder: 'Enter value',\n },\n validators: {},\n },\n },\n {\n id: 'textarea',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Textarea',\n nodeType: 'field',\n fieldKind: 'textarea',\n defaults: { props: { label: 'Textarea', placeholder: 'Enter text' }, validators: {} },\n },\n {\n id: 'checkbox',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Checkbox',\n nodeType: 'field',\n fieldKind: 'checkbox',\n defaults: { props: { label: 'Checkbox' }, validators: {} },\n },\n {\n id: 'radio',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Radio',\n nodeType: 'field',\n fieldKind: 'radio',\n defaults: {\n props: {\n label: 'Radio',\n options: [\n { label: 'Option A', value: 'A' },\n { label: 'Option B', value: 'B' },\n ],\n },\n validators: {},\n },\n },\n {\n id: 'select',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Select',\n nodeType: 'field',\n fieldKind: 'select',\n defaults: {\n props: {\n label: 'Select',\n searchable: false,\n options: [\n { label: 'One', value: '1' },\n { label: 'Two', value: '2' },\n ],\n },\n validators: {},\n },\n },\n {\n id: 'date',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Date',\n nodeType: 'field',\n fieldKind: 'date',\n defaults: { props: { label: 'Date' }, validators: {} },\n },\n {\n id: 'number',\n category: DEFAULT_PALETTE_CATEGORIES.common,\n title: 'Number',\n nodeType: 'field',\n fieldKind: 'number',\n defaults: { props: { label: 'Number' }, validators: {} },\n },\n\n {\n id: 'panel',\n category: DEFAULT_PALETTE_CATEGORIES.layout,\n title: 'Panel',\n nodeType: 'panel',\n defaults: { props: { title: 'Panel' }, childrenTemplate: ['row'] },\n },\n {\n id: 'row',\n category: DEFAULT_PALETTE_CATEGORIES.layout,\n title: 'Row',\n nodeType: 'row',\n defaults: { props: {}, childrenTemplate: ['col', 'col'] },\n },\n {\n id: 'col',\n category: DEFAULT_PALETTE_CATEGORIES.layout,\n title: 'Column',\n nodeType: 'col',\n defaults: { props: { colSpan: 6 }, childrenTemplate: [] },\n },\n {\n id: 'tabs',\n category: DEFAULT_PALETTE_CATEGORIES.layout,\n title: 'Tabs',\n nodeType: 'tabs',\n defaults: { props: { title: 'Tabs' }, childrenTemplate: [] },\n },\n {\n id: 'stepper',\n category: DEFAULT_PALETTE_CATEGORIES.layout,\n title: 'Stepper',\n nodeType: 'stepper',\n defaults: { props: { title: 'Stepper' }, childrenTemplate: [] },\n },\n {\n id: 'accordion',\n category: DEFAULT_PALETTE_CATEGORIES.layout,\n title: 'Accordion',\n nodeType: 'accordion',\n defaults: { props: { title: 'Accordion' }, childrenTemplate: [] },\n },\n];\n\n/** Runtime palette token. Default value composes built-in palette with `BUILDER_PLUGINS` palette items. */\nexport const BUILDER_PALETTE = new InjectionToken<readonly PaletteItem[]>('BUILDER_PALETTE', {\n providedIn: 'root',\n factory: () => composePalette(PALETTE, inject(BUILDER_PLUGINS, { optional: true }) ?? []),\n});\n\n/** Normalizes a palette category into deterministic CDK drop-list id. */\nexport function paletteListIdForCategory(category: string): string {\n return `palette_${category.replace(/\\s+/g, '_').toLowerCase()}`;\n}\n","import { BuilderDocument, ContainerNode, FieldNode } from './model';\n\nexport type BuilderPresetId = 'simple' | 'complex' | 'advanced' | 'advancedLogic';\n\nexport interface BuilderPresetMeta {\n id: BuilderPresetId;\n title: string;\n description: string;\n highlights: string[];\n thumbnailRows: number[];\n}\n\nexport const BUILDER_PRESETS: ReadonlyArray<BuilderPresetMeta> = [\n {\n id: 'simple',\n title: 'Simple Form',\n description: 'Single-column contact-style starter.',\n highlights: ['Fast start', 'Linear flow', 'Contact forms'],\n thumbnailRows: [100, 100, 100],\n },\n {\n id: 'complex',\n title: 'Complex Form',\n description: 'Two-column sectioned business form.',\n highlights: ['Two columns', 'Case intake', 'Balanced layout'],\n thumbnailRows: [100, 100, 100],\n },\n {\n id: 'advanced',\n title: 'Advanced Form',\n description: 'Nested layout with grouped sections.',\n highlights: ['Nested rows', 'Metadata column', 'Panel grouping'],\n thumbnailRows: [100, 72, 100],\n },\n {\n id: 'advancedLogic',\n title: 'Advanced Logic Form',\n description: 'Starter with conditional expressions and custom validation examples.',\n highlights: ['Conditional visibility', 'Conditional enablement', 'Custom validation'],\n thumbnailRows: [100, 88, 100],\n },\n];\n\nexport interface PresetNodeFactory {\n addContainerNode: (\n doc: BuilderDocument,\n type: ContainerNode['type'],\n parentId: string,\n props: ContainerNode['props'],\n ) => ContainerNode;\n addFieldNode: (\n doc: BuilderDocument,\n fieldKind: FieldNode['fieldKind'],\n parentId: string,\n props: FieldNode['props'],\n validators?: FieldNode['validators'],\n ) => FieldNode;\n}\n\n/**\n * Applies a starter layout into an existing builder document.\n * The function mutates `doc` intentionally for simpler composition.\n */\nexport function applyPresetToDocument(\n doc: BuilderDocument,\n presetId: BuilderPresetId,\n factory: PresetNodeFactory,\n): void {\n switch (presetId) {\n case 'simple':\n buildSimplePreset(doc, factory);\n break;\n case 'complex':\n buildComplexPreset(doc, factory);\n break;\n case 'advanced':\n buildAdvancedPreset(doc, factory);\n break;\n case 'advancedLogic':\n buildAdvancedLogicPreset(doc, factory);\n break;\n }\n}\n\nfunction buildSimplePreset(doc: BuilderDocument, factory: PresetNodeFactory): void {\n const panel = factory.addContainerNode(doc, 'panel', doc.rootId, { title: 'Contact Details' });\n factory.addFieldNode(doc, 'input', panel.id, { label: 'First name', placeholder: 'Enter first name' });\n factory.addFieldNode(doc, 'input', panel.id, { label: 'Last name', placeholder: 'Enter last name' });\n factory.addFieldNode(\n doc,\n 'input',\n panel.id,\n { label: 'Email', placeholder: 'name@company.com' },\n { required: true, email: true },\n );\n factory.addFieldNode(doc, 'textarea', panel.id, { label: 'Notes', placeholder: 'Additional notes' });\n}\n\nfunction buildComplexPreset(doc: BuilderDocument, factory: PresetNodeFactory): void {\n const panel = factory.addContainerNode(doc, 'panel', doc.rootId, { title: 'Case Intake' });\n const row1 = factory.addContainerNode(doc, 'row', panel.id, {});\n const row1Left = factory.addContainerNode(doc, 'col', row1.id, { colSpan: 6 });\n const row1Right = factory.addContainerNode(doc, 'col', row1.id, { colSpan: 6 });\n factory.addFieldNode(doc, 'input', row1Left.id, { label: 'Case ID', placeholder: 'CASE-0001' }, { required: true });\n factory.addFieldNode(\n doc,\n 'input',\n row1Right.id,\n { label: 'Requester', placeholder: 'Full name' },\n { required: true },\n );\n\n const row2 = factory.addContainerNode(doc, 'row', panel.id, {});\n const row2Left = factory.addContainerNode(doc, 'col', row2.id, { colSpan: 6 });\n const row2Right = factory.addContainerNode(doc, 'col', row2.id, { colSpan: 6 });\n factory.addFieldNode(doc, 'date', row2Left.id, { label: 'Opened date' });\n factory.addFieldNode(doc, 'radio', row2Right.id, {\n label: 'Contact method',\n options: [\n { label: 'Email', value: 'email' },\n { label: 'Phone', value: 'phone' },\n ],\n });\n\n const row3 = factory.addContainerNode(doc, 'row', panel.id, {});\n const row3Left = factory.addContainerNode(doc, 'col', row3.id, { colSpan: 6 });\n const row3Right = factory.addContainerNode(doc, 'col', row3.id, { colSpan: 6 });\n factory.addFieldNode(doc, 'select', row3Left.id, {\n label: 'Priority',\n options: [\n { label: 'Low', value: 'low' },\n { label: 'Medium', value: 'medium' },\n { label: 'High', value: 'high' },\n ],\n });\n factory.addFieldNode(\n doc,\n 'textarea',\n row3Right.id,\n { label: 'Summary', placeholder: 'Describe the request' },\n {\n required: true,\n },\n );\n}\n\nfunction buildAdvancedPreset(doc: BuilderDocument, factory: PresetNodeFactory): void {\n const panel = factory.addContainerNode(doc, 'panel', doc.rootId, { title: 'Advanced Profile' });\n const topRow = factory.addContainerNode(doc, 'row', panel.id, {});\n const profileCol = factory.addContainerNode(doc, 'col', topRow.id, { colSpan: 8 });\n const metaCol = factory.addContainerNode(doc, 'col', topRow.id, { colSpan: 4 });\n\n const nestedTop = factory.addContainerNode(doc, 'row', profileCol.id, {});\n const nestedTopLeft = factory.addContainerNode(doc, 'col', nestedTop.id, { colSpan: 6 });\n const nestedTopRight = factory.addContainerNode(doc, 'col', nestedTop.id, { colSpan: 6 });\n factory.addFieldNode(\n doc,\n 'input',\n nestedTopLeft.id,\n { label: 'Username', placeholder: 'j.doe' },\n { required: true, minLength: 3 },\n );\n factory.addFieldNode(doc, 'number', nestedTopRight.id, { label: 'Age', placeholder: '18' }, { min: 18, max: 120 });\n\n const nestedBottom = factory.addContainerNode(doc, 'row', profileCol.id, {});\n const nestedBottomLeft = factory.addContainerNode(doc, 'col', nestedBottom.id, { colSpan: 6 });\n const nestedBottomRight = factory.addContainerNode(doc, 'col', nestedBottom.id, { colSpan: 6 });\n factory.addFieldNode(\n doc,\n 'input',\n nestedBottomLeft.id,\n { label: 'Email', placeholder: 'j.doe@company.com' },\n { required: true, email: true },\n );\n factory.addFieldNode(doc, 'date', nestedBottomRight.id, { label: 'Start date' });\n\n factory.addFieldNode(doc, 'select', metaCol.id, {\n label: 'Department',\n searchable: true,\n options: [\n { label: 'Engineering', value: 'eng' },\n { label: 'Operations', value: 'ops' },\n { label: 'Finance', value: 'fin' },\n ],\n });\n factory.addFieldNode(doc, 'checkbox', metaCol.id, { label: 'Active profile' });\n\n const bottomPanel = factory.addContainerNode(doc, 'panel', panel.id, { title: 'Additional Details' });\n factory.addFieldNode(doc, 'textarea', bottomPanel.id, { label: 'Biography', placeholder: 'Short profile summary' });\n factory.addFieldNode(doc, 'textarea', bottomPanel.id, {\n label: 'Internal notes',\n placeholder: 'Visible to administrators',\n });\n}\n\nfunction buildAdvancedLogicPreset(doc: BuilderDocument, factory: PresetNodeFactory): void {\n const panel = factory.addContainerNode(doc, 'panel', doc.rootId, { title: 'Access Request' });\n factory.addFieldNode(\n doc,\n 'input',\n panel.id,\n { key: 'requesterName', label: 'Requester name', placeholder: 'Jane Doe' },\n { required: true },\n );\n factory.addFieldNode(doc, 'checkbox', panel.id, {\n key: 'isContractor',\n label: 'Requester is contractor',\n defaultValue: false,\n });\n factory.addFieldNode(doc, 'number', panel.id, {\n key: 'contractLengthMonths',\n label: 'Contract length (months)',\n visibleExpression: 'model?.isContractor === true',\n enabledExpression: 'model?.requesterName?.trim()?.length > 0',\n });\n factory.addFieldNode(doc, 'input', panel.id, {\n key: 'managerEmail',\n label: 'Manager email',\n placeholder: 'manager@company.com',\n visibleRule: { dependsOnKey: 'isContractor', operator: 'truthy' },\n });\n factory.addFieldNode(\n doc,\n 'input',\n panel.id,\n {\n key: 'costCenter',\n label: 'Cost center',\n placeholder: 'CC-1234',\n },\n {\n customExpression: \"valid = /^CC-\\\\d{4}$/.test(String(value ?? '')) ? true : 'Use format CC-1234';\",\n customExpressionMessage: 'Cost center format is invalid.',\n },\n );\n factory.addFieldNode(\n doc,\n 'textarea',\n panel.id,\n {\n key: 'justification',\n label: 'Justification',\n placeholder: 'Explain why this access is required',\n },\n {\n required: true,\n customExpression: \"valid = String(value ?? '').trim().length >= 20 ? true : 'Provide at least 20 characters.';\",\n customExpressionMessage: 'Justification is too short.',\n },\n );\n factory.addFieldNode(doc, 'select', panel.id, {\n key: 'accessLevel',\n label: 'Access level',\n options: [\n { label: 'Read', value: 'read' },\n { label: 'Write', value: 'write' },\n { label: 'Admin', value: 'admin' },\n ],\n enabledExpression: 'model?.requesterName?.trim()?.length > 0 && !!model?.costCenter',\n });\n}\n","import {\n BuilderDocument,\n BuilderNode,\n BuilderValidators,\n ContainerNode,\n DropLocation,\n FieldKind,\n FieldNode,\n isContainerNode,\n isFieldNode,\n} from './model';\nimport { toFieldKey, uid } from './ids';\nimport { PALETTE, PaletteItem } from './registry';\n\n/**\n * Pure command helpers used by BuilderStore.\n * Each function returns either the unchanged document (no-op) or a new immutable snapshot.\n */\n\nexport interface NodeClipboard {\n rootId: string;\n nodes: Record<string, BuilderNode>;\n}\n\nexport function removeNodeCommand(doc: BuilderDocument, id: string): BuilderDocument {\n const node = doc.nodes[id];\n if (!node || !node.parentId) return doc;\n\n const nodes = { ...doc.nodes };\n const parent = nodes[node.parentId];\n if (!parent || !isContainerNode(parent)) return doc;\n\n const toDelete: string[] = [];\n const stack = [id];\n while (stack.length) {\n const cur = stack.pop() as string;\n toDelete.push(cur);\n const current = nodes[cur];\n if (current && isContainerNode(current)) stack.push(...current.children);\n }\n for (const childId of toDelete) delete nodes[childId];\n\n nodes[parent.id] = { ...parent, children: parent.children.filter((childId) => childId !== id) };\n return { ...doc, nodes, selectedId: doc.selectedId === id ? null : doc.selectedId };\n}\n\nexport function updateNodePropsCommand(\n doc: BuilderDocument,\n id: string,\n patch: Record<string, unknown>,\n): BuilderDocument {\n const node = doc.nodes[id];\n if (!node) return doc;\n\n const nodes = { ...doc.nodes };\n if (isFieldNode(node)) {\n nodes[id] = { ...node, props: { ...node.props, ...(patch as Partial<FieldNode['props']>) } };\n } else {\n nodes[id] = { ...node, props: { ...node.props, ...(patch as Partial<ContainerNode['props']>) } };\n }\n return { ...doc, nodes };\n}\n\nexport function updateNodeValidatorsCommand(\n doc: BuilderDocument,\n id: string,\n patch: Record<string, unknown>,\n): BuilderDocument {\n const node = doc.nodes[id];\n if (!node || !isFieldNode(node)) return doc;\n\n const nodes = { ...doc.nodes };\n nodes[id] = { ...node, validators: { ...node.validators, ...(patch as Partial<BuilderValidators>) } };\n return { ...doc, nodes };\n}\n\nexport function addFromPaletteCommand(\n doc: BuilderDocument,\n paletteId: string,\n loc: DropLocation,\n palette: readonly PaletteItem[] = PALETTE,\n validatorsForFieldKind?: (fieldKind: FieldKind) => BuilderValidators,\n): BuilderDocument {\n const item = palette.find((candidate) => candidate.id === paletteId);\n if (!item) return doc;\n\n const nodes = { ...doc.nodes };\n const target = nodes[loc.containerId];\n if (!target || !isContainerNode(target)) return doc;\n if (target.type === 'row' && item.nodeType !== 'col') return doc;\n\n const created = createNodeFromPalette(item, loc.containerId, palette, validatorsForFieldKind);\n const children = [...target.children];\n const index = clampIndex(loc.index, children.length);\n children.splice(index, 0, created.id);\n nodes[loc.containerId] = { ...target, children };\n\n nodes[created.id] = created.node;\n for (const extra of created.extraNodes) nodes[extra.id] = extra;\n return { ...doc, nodes, selectedId: created.id };\n}\n\nexport function moveNodeCommand(doc: BuilderDocument, nodeId: string, to: DropLocation): BuilderDocument {\n const nodes = { ...doc.nodes };\n const node = nodes[nodeId];\n const target = nodes[to.containerId];\n if (!node || !target || !isContainerNode(target) || !node.parentId) return doc;\n if (target.type === 'row' && node.type !== 'col') return doc;\n if (nodeId === to.containerId) return doc;\n if (isContainerNode(node) && isDescendant(nodes, nodeId, to.containerId)) return doc;\n\n const fromParent = nodes[node.parentId];\n if (!fromParent || !isContainerNode(fromParent)) return doc;\n\n nodes[fromParent.id] = { ...fromParent, children: fromParent.children.filter((childId) => childId !== nodeId) };\n\n const targetChildren = [...target.children];\n const index = clampIndex(to.index, targetChildren.length);\n targetChildren.splice(index, 0, nodeId);\n nodes[target.id] = { ...target, children: targetChildren };\n nodes[nodeId] = { ...(node as BuilderNode), parentId: target.id };\n return { ...doc, nodes };\n}\n\nexport function reorderWithinCommand(\n doc: BuilderDocument,\n containerId: string,\n fromIndex: number,\n toIndex: number,\n): BuilderDocument {\n const nodes = { ...doc.nodes };\n const container = nodes[containerId];\n if (!container || !isContainerNode(container)) return doc;\n\n const arr = [...container.children];\n if (arr.length === 0) return doc;\n if (fromIndex < 0 || fromIndex >= arr.length) return doc;\n const clampedTo = clampIndex(toIndex, arr.length - 1);\n if (fromIndex === clampedTo) return doc;\n const [moved] = arr.splice(fromIndex, 1);\n arr.splice(clampedTo, 0, moved);\n nodes[containerId] = { ...container, children: arr };\n return { ...doc, nodes };\n}\n\nexport function addColumnToRowCommand(doc: BuilderDocument, rowId: string, span = 6): BuilderDocument {\n const nodes = { ...doc.nodes };\n const row = nodes[rowId];\n if (!row || row.type !== 'row') return doc;\n\n const colId = uid('c');\n const col: ContainerNode = {\n id: colId,\n type: 'col',\n parentId: rowId,\n children: [],\n props: { colSpan: clampSpan(span) },\n };\n\n nodes[colId] = col;\n nodes[rowId] = { ...row, children: [...row.children, colId] };\n return { ...doc, nodes, selectedId: colId };\n}\n\nexport function rebalanceRowColumnsCommand(doc: BuilderDocument, rowId: string): BuilderDocument {\n const nodes = { ...doc.nodes };\n const row = nodes[rowId];\n if (!row || row.type !== 'row' || row.children.length === 0) return doc;\n\n const spans = equalSpans(row.children.length);\n for (let i = 0; i < row.children.length; i++) {\n const colId = row.children[i];\n const col = nodes[colId];\n if (!col || col.type !== 'col') continue;\n nodes[colId] = { ...col, props: { ...col.props, colSpan: spans[i] } };\n }\n return { ...doc, nodes };\n}\n\nexport function splitColumnCommand(doc: BuilderDocument, columnId: string, parts = 2): BuilderDocument {\n const nodes = { ...doc.nodes };\n const col = nodes[columnId];\n if (!col || col.type !== 'col') return doc;\n\n const partCount = Math.max(2, Math.min(4, Math.trunc(parts) || 2));\n const spans = equalSpans(partCount);\n\n const rowId = uid('c');\n const row: ContainerNode = {\n id: rowId,\n type: 'row',\n parentId: columnId,\n children: [],\n props: {},\n };\n\n const previousChildren = [...col.children];\n for (let i = 0; i < partCount; i++) {\n const childColId = uid('c');\n const childCol: ContainerNode = {\n id: childColId,\n type: 'col',\n parentId: rowId,\n children: i === 0 ? previousChildren : [],\n props: { colSpan: spans[i] },\n };\n row.children.push(childColId);\n nodes[childColId] = childCol;\n }\n\n for (const childId of previousChildren) {\n const child = nodes[childId];\n if (!child) continue;\n nodes[childId] = { ...(child as BuilderNode), parentId: row.children[0] };\n }\n\n nodes[rowId] = row;\n nodes[columnId] = { ...col, children: [rowId] };\n return { ...doc, nodes, selectedId: row.children[0] };\n}\n\nexport function copyNodeSnapshot(doc: BuilderDocument, nodeId: string): NodeClipboard | null {\n const source = doc.nodes[nodeId];\n if (!source || source.id === doc.rootId) return null;\n\n const collected: Record<string, BuilderNode> = {};\n const stack = [nodeId];\n while (stack.length) {\n const currentId = stack.pop()!;\n const current = doc.nodes[currentId];\n if (!current || collected[currentId]) continue;\n collected[currentId] = cloneNode(current);\n if (isContainerNode(current)) stack.push(...current.children);\n }\n\n if (!collected[nodeId]) return null;\n collected[nodeId] = { ...collected[nodeId], parentId: null };\n return { rootId: nodeId, nodes: collected };\n}\n\nexport function pasteNodeCommand(\n doc: BuilderDocument,\n clipboard: NodeClipboard | null,\n loc: DropLocation,\n): BuilderDocument {\n if (!clipboard) return doc;\n\n const target = doc.nodes[loc.containerId];\n if (!target || !isContainerNode(target)) return doc;\n const sourceRoot = clipboard.nodes[clipboard.rootId];\n if (!sourceRoot) return doc;\n if (target.type === 'row' && sourceRoot.type !== 'col') return doc;\n\n const idMap = new Map<string, string>();\n const usedKeys = collectFieldKeys(doc);\n const createdNodes: Record<string, BuilderNode> = {};\n\n const createRecursive = (oldId: string, parentId: string | null): string | null => {\n const original = clipboard.nodes[oldId];\n if (!original) return null;\n\n const nextId = uid(original.type === 'field' ? 'f' : 'c');\n idMap.set(oldId, nextId);\n\n if (original.type === 'field') {\n const desiredKey = (original.props.key ?? '').trim() || toFieldKey(nextId);\n const uniqueKey = toUniqueFieldKey(desiredKey, usedKeys);\n createdNodes[nextId] = {\n ...original,\n id: nextId,\n parentId,\n children: [],\n props: { ...original.props, key: uniqueKey },\n validators: { ...original.validators },\n };\n return nextId;\n }\n\n const childIds: string[] = [];\n for (const childOldId of original.children) {\n const childNewId = createRecursive(childOldId, nextId);\n if (childNewId) childIds.push(childNewId);\n }\n\n createdNodes[nextId] = {\n ...original,\n id: nextId,\n parentId,\n children: childIds,\n props: { ...original.props },\n };\n return nextId;\n };\n\n const newRootId = createRecursive(clipboard.rootId, loc.containerId);\n if (!newRootId) return doc;\n\n const nodes = { ...doc.nodes, ...createdNodes };\n const children = [...target.children];\n const index = clampIndex(loc.index, children.length);\n children.splice(index, 0, newRootId);\n nodes[target.id] = { ...target, children };\n return { ...doc, nodes, selectedId: newRootId };\n}\n\nexport function duplicateNodeCommand(doc: BuilderDocument, nodeId: string): BuilderDocument {\n const source = doc.nodes[nodeId];\n if (!source || !source.parentId) return doc;\n const parent = doc.nodes[source.parentId];\n if (!parent || !isContainerNode(parent)) return doc;\n\n const index = parent.children.indexOf(nodeId);\n if (index < 0) return doc;\n const snapshot = copyNodeSnapshot(doc, nodeId);\n return pasteNodeCommand(doc, snapshot, { containerId: parent.id, index: index + 1 });\n}\n\nfunction createNodeFromPalette(\n item: PaletteItem,\n parentId: string,\n palette: readonly PaletteItem[],\n validatorsForFieldKind?: (fieldKind: FieldKind) => BuilderValidators,\n): { id: string; node: BuilderNode; extraNodes: BuilderNode[] } {\n const id = uid(item.nodeType === 'field' ? 'f' : 'c');\n const extraNodes: BuilderNode[] = [];\n\n if (item.nodeType === 'field') {\n const fieldKind = item.fieldKind as FieldNode['fieldKind'];\n const node: FieldNode = {\n id,\n type: 'field',\n parentId,\n children: [],\n fieldKind,\n props: {\n ...(item.defaults.props as any),\n key: toFieldKey(id),\n ...(item.formlyType ? { customType: item.formlyType } : {}),\n },\n validators: {\n ...(validatorsForFieldKind ? validatorsForFieldKind(fieldKind) : {}),\n ...(item.defaults.validators ?? {}),\n },\n };\n return { id, node, extraNodes };\n }\n\n const node: ContainerNode = {\n id,\n type: item.nodeType as ContainerNode['type'],\n parentId,\n children: [],\n props: { ...(item.defaults.props as any) },\n };\n\n const template = item.defaults.childrenTemplate ?? [];\n for (const childType of template) {\n const childItem = palette.find((paletteItem) => paletteItem.id === childType);\n if (!childItem) continue;\n const createdChild = createNodeFromPalette(childItem, id, palette, validatorsForFieldKind);\n node.children.push(createdChild.id);\n extraNodes.push(createdChild.node, ...createdChild.extraNodes);\n }\n return { id, node, extraNodes };\n}\n\nfunction cloneNode(node: BuilderNode): BuilderNode {\n if (node.type === 'field') {\n return {\n ...node,\n props: { ...node.props },\n validators: { ...node.validators },\n children: [],\n };\n }\n return {\n ...node,\n props: { ...node.props },\n children: [...node.children],\n };\n}\n\nfunction collectFieldKeys(doc: BuilderDocument): Set<string> {\n const out = new Set<string>();\n for (const node of Object.values(doc.nodes)) {\n if (node.type !== 'field') continue;\n const key = (node.props.key ?? '').trim();\n if (key) out.add(key);\n }\n return out;\n}\n\nfunction toUniqueFieldKey(base: string, usedKeys: Set<string>): string {\n if (!usedKeys.has(base)) {\n usedKeys.add(base);\n return base;\n }\n\n let index = 1;\n let candidate = `${base}_copy`;\n while (usedKeys.has(candidate)) {\n index += 1;\n candidate = `${base}_copy${index}`;\n }\n usedKeys.add(candidate);\n return candidate;\n}\n\nfunction isDescendant(nodes: Record<string, BuilderNode>, rootId: string, searchId: string): boolean {\n const root = nodes[rootId];\n if (!root || !isContainerNode(root)) return false;\n const stack = [...root.children];\n while (stack.length) {\n const id = stack.pop() as string;\n if (id === searchId) return true;\n const node = nodes[id];\n if (node && isContainerNode(node)) stack.push(...node.children);\n }\n return false;\n}\n\nfunction equalSpans(count: number): number[] {\n const c = Math.max(1, count);\n const base = Math.floor(12 / c);\n let rem = 12 - base * c;\n const out = Array.from({ length: c }, () => base);\n for (let i = 0; i < out.length && rem > 0; i++, rem--) out[i] += 1;\n return out;\n}\n\nfunction clampSpan(span: number): number {\n return Math.max(1, Math.min(12, Math.trunc(span) || 6));\n}\n\nfunction clampIndex(index: number, length: number): number {\n return Math.max(0, Math.min(index, length));\n}\n","import { inject } from '@angular/core';\n\nimport { BUILDER_LOOKUP_REGISTRY, DEFAULT_LOOKUP_REGISTRY } from './lookup-registry';\nimport { PALETTE, BUILDER_PALETTE, PaletteItem } from './registry';\nimport {\n BUILDER_VALIDATOR_PRESET_DEFINITIONS,\n BUILDER_VALIDATOR_PRESETS,\n DEFAULT_FIELD_VALIDATION_PRESETS,\n DEFAULT_VALIDATOR_PRESET_DEFINITIONS,\n} from './validation-presets';\n\nexport function resolveDefaultPalette(): readonly PaletteItem[] {\n try {\n return inject(BUILDER_PALETTE, { optional: true }) ?? PALETTE;\n } catch {\n // Allows direct `new BuilderStore()` in unit tests where no DI context exists.\n return PALETTE;\n }\n}\n\nexport function resolveValidatorPresets() {\n try {\n return inject(BUILDER_VALIDATOR_PRESETS, { optional: true }) ?? DEFAULT_FIELD_VALIDATION_PRESETS;\n } catch {\n return DEFAULT_FIELD_VALIDATION_PRESETS;\n }\n}\n\nexport function resolveValidatorPresetDefinitions() {\n try {\n return inject(BUILDER_VALIDATOR_PRESET_DEFINITIONS, { optional: true }) ?? DEFAULT_VALIDATOR_PRESET_DEFINITIONS;\n } catch {\n return DEFAULT_VALIDATOR_PRESET_DEFINITIONS;\n }\n}\n\nexport function resolveLookupRegistry() {\n try {\n return inject(BUILDER_LOOKUP_REGISTRY, { optional: true }) ?? DEFAULT_LOOKUP_REGISTRY;\n } catch {\n return DEFAULT_LOOKUP_REGISTRY;\n }\n}\n","import { BuilderDocument, ContainerNode } from './model';\nimport { CURRENT_BUILDER_SCHEMA_VERSION } from './schema';\n\nexport const ROOT_ID = 'root';\n\nexport interface ApplyOptions {\n recordHistory?: boolean;\n historyGroupKey?: string;\n historyWindowMs?: number;\n historyLabel?: string;\n}\n\nexport interface HistoryGroupState {\n key: string;\n expiresAt: number;\n}\n\nexport function createRoot(): BuilderDocument {\n const root: ContainerNode = { id: ROOT_ID, type: 'panel', parentId: null, children: [], props: { title: 'Form' } };\n return {\n schemaVersion: CURRENT_BUILDER_SCHEMA_VERSION,\n rootId: ROOT_ID,\n nodes: { [ROOT_ID]: root },\n selectedId: null,\n renderer: 'bootstrap',\n };\n}\n","import { BuilderDocument, ContainerNode, FieldNode, isContainerNode } from './model';\nimport { toFieldKey, uid } from './ids';\n\nexport function addContainerNodeToDoc(\n doc: BuilderDocument,\n type: ContainerNode['type'],\n parentId: string,\n props: ContainerNode['props'],\n): ContainerNode {\n const id = uid('c');\n const node: ContainerNode = { id, type, parentId, children: [], props: { ...props } };\n\n const nodes: BuilderDocument['nodes'] = { ...doc.nodes, [id]: node };\n const parent = doc.nodes[parentId];\n if (parent && isContainerNode(parent)) {\n nodes[parentId] = { ...parent, children: [...parent.children, id] };\n }\n doc.nodes = nodes;\n return node;\n}\n\nexport function addFieldNodeToDoc(\n doc: BuilderDocument,\n fieldKind: FieldNode['fieldKind'],\n parentId: string,\n props: FieldNode['props'],\n validators: FieldNode['validators'] = {},\n): FieldNode {\n const id = uid('f');\n const key = props.key ?? toFieldKey(id);\n const node: FieldNode = {\n id,\n type: 'field',\n parentId,\n children: [],\n fieldKind,\n props: { ...props, key },\n validators: { ...validators },\n };\n\n const nodes: BuilderDocument['nodes'] = { ...doc.nodes, [id]: node };\n const parent = doc.nodes[parentId];\n if (parent && isContainerNode(parent)) {\n nodes[parentId] = { ...parent, children: [...parent.children, id] };\n }\n doc.nodes = nodes;\n return node;\n}\n","import { computed, Injectable, signal, WritableSignal } from '@angular/core';\nimport { BuilderDocument, DropLocation, FieldNode, isContainerNode } from './model';\nimport { PALETTE, paletteListIdForCategory, PaletteItem } from './registry';\nimport { parseBuilderDocument } from './document';\nimport { buildDiagnostics } from './diagnostics';\nimport { DEFAULT_LOOKUP_REGISTRY } from './lookup-registry';\nimport {\n BuilderPlugin,\n composeLookupRegistry,\n composePalette,\n composeFormlyExtensions,\n composeValidatorPresetDefinitions,\n composeValidatorPresets,\n FormlyConfigExtension,\n} from './plugins';\nimport {\n defaultValidatorsForFieldKind,\n DEFAULT_FIELD_VALIDATION_PRESETS,\n DEFAULT_VALIDATOR_PRESET_DEFINITIONS,\n} from './validation-presets';\nimport { applyPresetToDocument, BUILDER_PRESETS, BuilderPresetId } from './presets';\nimport {\n addColumnToRowCommand,\n addFromPaletteCommand,\n copyNodeSnapshot,\n duplicateNodeCommand,\n moveNodeCommand,\n NodeClipboard,\n pasteNodeCommand,\n rebalanceRowColumnsCommand,\n removeNodeCommand,\n reorderWithinCommand,\n splitColumnCommand,\n updateNodePropsCommand,\n updateNodeValidatorsCommand,\n} from './store.commands';\nimport {\n resolveDefaultPalette,\n resolveLookupRegistry,\n resolveValidatorPresetDefinitions,\n resolveValidatorPresets,\n} from './store.resolvers';\nimport { ApplyOptions, createRoot, HistoryGroupState, ROOT_ID } from './store.state';\nimport { addContainerNodeToDoc, addFieldNodeToDoc } from './store.mutators';\n\nexport type { BuilderPresetId } from './presets';\n\n/**\n * Signal-based state container for the form builder editor.\n * Mutations are delegated to pure command helpers for maintainability.\n */\n@Injectable({ providedIn: 'root' })\nexport class BuilderStore {\n private readonly defaultPalette = resolveDefaultPalette();\n private readonly defaultLookupRegistry = resolveLookupRegistry();\n private readonly defaultValidatorPresets = resolveValidatorPresets();\n private readonly defaultValidatorPresetDefinitions = resolveValidatorPresetDefinitions();\n private readonly palette: WritableSignal<readonly PaletteItem[]>;\n private readonly _lookupRegistry = signal(this.defaultLookupRegistry);\n private readonly _validatorPresets = signal(this.defaultValidatorPresets);\n private readonly _validatorPresetDefinitions = signal(this.defaultValidatorPresetDefinitions);\n private readonly _doc = signal<BuilderDocument>(createRoot());\n private readonly _clipboard = signal<NodeClipboard | null>(null);\n private readonly _past = signal<BuilderDocument[]>([]);\n private readonly _future = signal<BuilderDocument[]>([]);\n private readonly _pastLabels = signal<string[]>([]);\n private readonly _futureLabels = signal<string[]>([]);\n private readonly _formlyExtensions = signal<FormlyConfigExtension[]>([]);\n private readonly maxHistory = 100;\n private historyGroup: HistoryGroupState | null = null;\n\n constructor() {\n this.palette = signal<readonly PaletteItem[]>(this.defaultPalette);\n }\n\n readonly doc = this._doc.asReadonly();\n readonly nodes = computed(() => this._doc().nodes);\n readonly rootId = computed(() => this._doc().rootId);\n readonly selectedId = computed(() => this._doc().selectedId);\n readonly canUndo = computed(() => this._past().length > 0);\n readonly canRedo = computed(() => this._future().length > 0);\n /** Past history labels, newest first (index 0 = most recent undoable action). */\n readonly pastLabels = computed(() => [...this._pastLabels()].reverse());\n /** Future (redoable) labels, most-recently-undone first (index 0 = next redo). */\n readonly futureLabels = computed(() => [...this._futureLabels()].reverse());\n readonly hasClipboard = computed(() => !!this._clipboard());\n readonly renderer = computed(() => this._doc().renderer ?? 'bootstrap');\n readonly presets = BUILDER_PRESETS;\n readonly paletteItems = computed(() => this.palette());\n readonly lookupRegistry = this._lookupRegistry.asReadonly();\n readonly validatorPresetDefinitions = this._validatorPresetDefinitions.asReadonly();\n readonly formlyExtensions = this._formlyExtensions.asReadonly();\n readonly diagnostics = computed(() =>\n buildDiagnostics(this._doc(), {\n knownValidatorPresetIds: new Set(this._validatorPresetDefinitions().map((item) => item.id)),\n }),\n );\n\n readonly selectedNode = computed(() => {\n const id = this._doc().selectedId;\n return id ? (this._doc().nodes[id] ?? null) : null;\n });\n\n readonly paletteByCategory = computed(() => {\n const map = new Map<string, PaletteItem[]>();\n for (const item of this.paletteItems()) {\n const arr = map.get(item.category) ?? [];\n arr.push(item);\n map.set(item.category, arr);\n }\n return map;\n });\n readonly paletteDropListIds = computed(() =>\n Array.from(this.paletteByCategory().keys()).map((category) => paletteListIdForCategory(category)),\n );\n\n /** Updates the active preview renderer. */\n setRenderer(renderer: 'material' | 'bootstrap'): void {\n this.apply((doc) => ({ ...doc, renderer }));\n }\n\n /** Selects a node in canvas/inspector. */\n select(id: string | null): void {\n this.apply((doc) => ({ ...doc, selectedId: id }), { recordHistory: false });\n }\n\n /** Resets builder state to a new empty document. */\n clear(): void {\n this.apply(() => createRoot(), { historyLabel: 'Clear canvas' });\n }\n\n /** Serializes builder document as formatted JSON. */\n exportDocument(): string {\n return JSON.stringify(this._doc(), null, 2);\n }\n\n /** Imports and validates builder JSON into current state. */\n importDocument(json: string): { ok: true } | { ok: false; error: string } {\n const parsed = parseBuilderDocument(json);\n if (!parsed.ok) return { ok: false, error: parsed.error };\n this.apply(() => parsed.doc, { historyLabel: 'Import' });\n return { ok: true };\n }\n\n /** Replaces current canvas with a predefined starter preset. */\n applyPreset(presetId: BuilderPresetId): void {\n this.apply(\n () => {\n const next = createRoot();\n applyPresetToDocument(next, presetId, {\n addContainerNode: (doc, type, parentId, props) => addContainerNodeToDoc(doc, type, parentId, props),\n addFieldNode: (doc, fieldKind, parentId, props, validators) =>\n addFieldNodeToDoc(doc, fieldKind, parentId, props, validators),\n });\n return next;\n },\n { historyLabel: 'Apply layout' },\n );\n }\n\n /** Restores previous snapshot from history. */\n undo(): void {\n const past = this._past();\n if (past.length === 0) return;\n\n this.historyGroup = null;\n const previous = past[past.length - 1];\n const current = this._doc();\n const pastLabels = this._pastLabels();\n const undoneLabel = pastLabels[pastLabels.length - 1] ?? 'Edit';\n this._past.set(past.slice(0, -1));\n this._pastLabels.set(pastLabels.slice(0, -1));\n this._future.update((future) => [...future, current]);\n this._futureLabels.update((labels) => [...labels, undoneLabel]);\n this._doc.set(previous);\n }\n\n /** Reapplies an undone snapshot from history. */\n redo(): void {\n const future = this._future();\n if (future.length === 0) return;\n\n this.historyGroup = null;\n const next = future[future.length - 1];\n const current = this._doc();\n const futureLabels = this._futureLabels();\n const redoneLabel = futureLabels[futureLabels.length - 1] ?? 'Edit';\n this._future.set(future.slice(0, -1));\n this._futureLabels.set(futureLabels.slice(0, -1));\n this._past.update((past) => [...past, current].slice(-this.maxHistory));\n this._pastLabels.update((labels) => [...labels, redoneLabel].slice(-this.maxHistory));\n this._doc.set(next);\n }\n\n /** Removes currently selected node if removable. */\n removeSelected(): void {\n const id = this._doc().selectedId;\n if (!id || id === ROOT_ID) return;\n this.removeNode(id);\n }\n\n /** Removes a node and all descendants. */\n removeNode(id: string): void {\n this.apply((doc) => removeNodeCommand(doc, id), { historyLabel: 'Remove node' });\n }\n\n /** Copies node subtree into builder clipboard. */\n copyNode(id: string): void {\n const snapshot = copyNodeSnapshot(this._doc(), id);\n this._clipboard.set(snapshot);\n }\n\n /** Copies currently selected node into builder clipboard. */\n copySelected(): void {\n const id = this._doc().selectedId;\n if (!id || id === ROOT_ID) return;\n this.copyNode(id);\n }\n\n /** Duplicates selected node subtree next to current node. */\n duplicateSelected(): void {\n const id = this._doc().selectedId;\n if (!id || id === ROOT_ID) return;\n this.apply((doc) => duplicateNodeCommand(doc, id), { historyLabel: 'Duplicate' });\n }\n\n /** Pastes clipboard subtree relative to current selection or root. */\n pasteFromClipboard(): void {\n const clipboard = this._clipboard();\n if (!clipboard) return;\n\n const selectedId = this._doc().selectedId;\n const selected = selectedId ? this._doc().nodes[selectedId] : null;\n if (selected && isContainerNode(selected)) {\n this.apply(\n (doc) => pasteNodeCommand(doc, clipboard, { containerId: selected.id, index: selected.children.length }),\n { historyLabel: 'Paste' },\n );\n return;\n }\n\n if (selected?.parentId) {\n const parent = this._doc().nodes[selected.parentId];\n if (parent && isContainerNode(parent)) {\n const index = parent.children.indexOf(selected.id);\n const at = index >= 0 ? index + 1 : parent.children.length;\n this.apply((doc) => pasteNodeCommand(doc, clipboard, { containerId: parent.id, index: at }), {\n historyLabel: 'Paste',\n });\n return;\n }\n }\n\n const root = this._doc().nodes[this._doc().rootId];\n if (!root || !isContainerNode(root)) return;\n this.apply((doc) => pasteNodeCommand(doc, clipboard, { containerId: root.id, index: root.children.length }), {\n historyLabel: 'Paste',\n });\n }\n\n /** Applies partial props patch to a node. */\n updateNodeProps(id: string, patch: Record<string, unknown>, historyLabel = 'Edit field'): void {\n this.apply((doc) => updateNodePropsCommand(doc, id, patch), { historyLabel });\n }\n\n /** Applies partial validator patch to a field node. */\n updateNodeValidators(id: string, patch: Record<string, unknown>, historyLabel = 'Edit field'): void {\n this.apply((doc) => updateNodeValidatorsCommand(doc, id, patch), { historyLabel });\n }\n\n /** Applies grouped props updates so rapid typing becomes one undo step. */\n updateNodePropsGrouped(\n id: string,\n patch: Record<string, unknown>,\n groupKey: string,\n historyWindowMs = 500,\n historyLabel = 'Edit field',\n ): void {\n this.apply((doc) => updateNodePropsCommand(doc, id, patch), {\n historyGroupKey: groupKey,\n historyWindowMs,\n historyLabel,\n });\n }\n\n /** Applies grouped validator updates so rapid typing becomes one undo step. */\n updateNodeValidatorsGrouped(\n id: string,\n patch: Record<string, unknown>,\n groupKey: string,\n historyWindowMs = 500,\n historyLabel = 'Edit field',\n ): void {\n this.apply((doc) => updateNodeValidatorsCommand(doc, id, patch), {\n historyGroupKey: groupKey,\n historyWindowMs,\n historyLabel,\n });\n }\n\n /** Adds a new palette item instance at drop location. */\n addFromPalette(paletteId: string, loc: DropLocation): void {\n const paletteItem = this.paletteItems().find((item) => item.id === paletteId);\n const historyLabel = paletteItem ? `Add ${paletteItem.title}` : 'Add field';\n this.apply(\n (doc) =>\n addFromPaletteCommand(doc, paletteId, loc, this.paletteItems(), this.defaultValidatorsForFieldKind.bind(this)),\n { historyLabel },\n );\n }\n\n getPaletteItem(paletteId: string): PaletteItem | null {\n return this.paletteItems().find((candidate) => candidate.id === paletteId) ?? null;\n }\n\n /** Replaces runtime palette with a validated custom collection. */\n setPalette(items: readonly PaletteItem[]): void {\n this.palette.set([...items]);\n }\n\n /** Restores runtime palette back to DI/default composed palette. */\n resetPalette(): void {\n this.palette.set([...this.defaultPalette]);\n }\n\n /** Applies runtime plugin/palette extensions for embeddable component scenarios. */\n configureRuntimeExtensions(\n options: { plugins?: readonly BuilderPlugin[]; palette?: readonly PaletteItem[] } = {},\n ): void {\n const plugins = options.plugins ?? [];\n const palette = options.palette ? [...options.palette] : composePalette(PALETTE, plugins);\n this.palette.set(palette);\n this._lookupRegistry.set(composeLookupRegistry(DEFAULT_LOOKUP_REGISTRY, plugins));\n this._validatorPresets.set(composeValidatorPresets(DEFAULT_FIELD_VALIDATION_PRESETS, plugins));\n this._validatorPresetDefinitions.set(\n composeValidatorPresetDefinitions(DEFAULT_VALIDATOR_PRESET_DEFINITIONS, plugins),\n );\n this._formlyExtensions.set(composeFormlyExtensions(plugins));\n }\n\n /** Restores runtime extensions back to DI/default-resolved values. */\n resetRuntimeExtensions(): void {\n this.palette.set([...this.defaultPalette]);\n this._lookupRegistry.set(this.defaultLookupRegistry);\n this._validatorPresets.set(this.defaultValidatorPresets);\n this._validatorPresetDefinitions.set(this.defaultValidatorPresetDefinitions);\n this._formlyExtensions.set([]);\n }\n\n /** Moves existing node between containers/reorder targets. */\n moveNode(nodeId: string, to: DropLocation): void {\n this.apply((doc) => moveNodeCommand(doc, nodeId, to), { historyLabel: 'Move node' });\n }\n\n /** Reorders children within the same container. */\n reorderWithin(containerId: string, fromIndex: number, toIndex: number): void {\n this.apply((doc) => reorderWithinCommand(doc, containerId, fromIndex, toIndex), { historyLabel: 'Reorder' });\n }\n\n /** Appends a column to an existing row. */\n addColumnToRow(rowId: string, span = 6): void {\n this.apply((doc) => addColumnToRowCommand(doc, rowId, span), { historyLabel: 'Add column' });\n }\n\n /** Rebalances row child columns so spans sum to 12. */\n rebalanceRowColumns(rowId: string): void {\n this.apply((doc) => rebalanceRowColumnsCommand(doc, rowId), { historyLabel: 'Rebalance columns' });\n }\n\n /** Splits one column into a nested row with N columns. */\n splitColumn(columnId: string, parts = 2): void {\n this.apply((doc) => splitColumnCommand(doc, columnId, parts), { historyLabel: 'Split column' });\n }\n\n private apply(mutator: (doc: BuilderDocument) => BuilderDocument, options: ApplyOptions = {}): void {\n const { recordHistory = true, historyGroupKey, historyWindowMs = 500, historyLabel = 'Edit' } = options;\n\n const previous = this._doc();\n const next = mutator(previous);\n if (next === previous) return;\n\n if (recordHistory) {\n const now = Date.now();\n const canGroup =\n !!historyGroupKey &&\n !!this.historyGroup &&\n this.historyGroup.key === historyGroupKey &&\n now <= this.historyGroup.expiresAt;\n\n if (!canGroup) {\n this._past.update((history) => [...history, previous].slice(-this.maxHistory));\n this._pastLabels.update((labels) => [...labels, historyLabel].slice(-this.maxHistory));\n }\n this._future.set([]);\n this._futureLabels.set([]);\n\n if (historyGroupKey) {\n this.historyGroup = { key: historyGroupKey, expiresAt: now + historyWindowMs };\n } else {\n this.historyGroup = null;\n }\n } else {\n this.historyGroup = null;\n }\n\n this._doc.set(next);\n }\n\n private defaultValidatorsForFieldKind(fieldKind: FieldNode['fieldKind']) {\n return defaultValidatorsForFieldKind(fieldKind, this._validatorPresets());\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { FieldNode } from '../builder-core/model';\nimport { parsePaletteConfig } from '../builder-core/palette-config';\nimport { PaletteItem } from '../builder-core/registry';\n\nconst TEMPLATES_STORAGE_KEY = 'formly-builder:field-templates';\nconst TEMPLATE_CATEGORY = 'My Templates';\nconst TEMPLATE_ID_PREFIX = 'template_';\n\n@Injectable({ providedIn: 'root' })\nexport class BuilderTemplatesService {\n private readonly _templates = signal<PaletteItem[]>(this.load());\n readonly templates = this._templates.asReadonly();\n\n toPaletteItems(): PaletteItem[] {\n return this._templates().map((item) => ({\n ...item,\n defaults: {\n props: { ...item.defaults.props },\n ...(item.defaults.validators ? { validators: { ...item.defaults.validators } } : {}),\n ...(item.defaults.childrenTemplate ? { childrenTemplate: [...item.defaults.childrenTemplate] } : {}),\n },\n }));\n }\n\n exportJson(): string {\n return JSON.stringify(this._templates(), null, 2);\n }\n\n importJson(json: string): { ok: true; count: number } | { ok: false; error: string } {\n const parsed = parsePaletteConfig(json);\n if (!parsed.ok) return { ok: false, error: parsed.errors[0] ?? 'Invalid template JSON.' };\n\n const fieldTemplates = parsed.palette.filter((item) => item.nodeType === 'field');\n if (fieldTemplates.length !== parsed.palette.length) {\n return { ok: false, error: 'Templates import supports field nodes only.' };\n }\n\n this._templates.set(\n fieldTemplates.map((item) => ({\n ...item,\n category: item.category || TEMPLATE_CATEGORY,\n })),\n );\n this.persist();\n return { ok: true, count: fieldTemplates.length };\n }\n\n saveFieldTemplate(field: FieldNode): string {\n const title = (field.props.label ?? field.fieldKind).trim() || 'Field';\n const id = this.nextTemplateId(title);\n const item: PaletteItem = {\n id,\n category: TEMPLATE_CATEGORY,\n title,\n nodeType: 'field',\n fieldKind: field.fieldKind,\n defaults: {\n props: { ...field.props },\n validators: { ...field.validators },\n },\n };\n this._templates.update((items) => [...items, item]);\n this.persist();\n return title;\n }\n\n clear(): void {\n this._templates.set([]);\n this.persist();\n }\n\n private nextTemplateId(title: string): string {\n const slug = this.slugify(title);\n const base = `${TEMPLATE_ID_PREFIX}${slug || 'field'}`;\n const taken = new Set(this._templates().map((item) => item.id));\n if (!taken.has(base)) return base;\n let index = 2;\n while (taken.has(`${base}_${index}`)) index += 1;\n return `${base}_${index}`;\n }\n\n private slugify(value: string): string {\n return value\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n }\n\n private load(): PaletteItem[] {\n try {\n const raw = localStorage.getItem(TEMPLATES_STORAGE_KEY);\n if (!raw) return [];\n const parsed = parsePaletteConfig(raw);\n if (!parsed.ok) return [];\n return parsed.palette.filter((item) => item.nodeType === 'field');\n } catch {\n return [];\n }\n }\n\n private persist(): void {\n try {\n localStorage.setItem(TEMPLATES_STORAGE_KEY, JSON.stringify(this._templates()));\n } catch {\n // Ignore storage errors.\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { CdkDrag, DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { BuilderStore } from '../../builder-core/store';\nimport { DEFAULT_PALETTE_CATEGORIES, paletteListIdForCategory, PaletteItem } from '../../builder-core/registry';\nimport { isContainerNode } from '../../builder-core/model';\n\n@Component({\n selector: 'app-builder-palette',\n standalone: true,\n imports: [DragDropModule, MatExpansionModule, MatFormFieldModule, MatInputModule, CdkDrag],\n templateUrl: './builder-palette.component.html',\n styleUrl: './builder-palette.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BuilderPaletteComponent {\n readonly store = inject(BuilderStore);\n readonly filter = signal('');\n private readonly categoryOrder: Record<string, number> = {\n [DEFAULT_PALETTE_CATEGORIES.common]: 0,\n [DEFAULT_PALETTE_CATEGORIES.advanced]: 1,\n [DEFAULT_PALETTE_CATEGORIES.layout]: 2,\n };\n readonly connectedDropLists = computed(() => {\n const ids: string[] = [];\n const nodes = this.store.nodes();\n const rootId = this.store.rootId();\n for (const node of Object.values(nodes)) {\n if (!isContainerNode(node)) continue;\n ids.push(`drop_${node.id}`);\n if (node.type !== 'row' && node.id !== rootId) ids.push(`drop_append_${node.id}`);\n }\n return ids;\n });\n\n readonly categories = computed(() => {\n const q = this.filter().trim().toLowerCase();\n const map = this.store.paletteByCategory();\n const out: Array<{ category: string; items: PaletteItem[] }> = [];\n for (const [category, items] of map.entries()) {\n const filtered = q ? items.filter((i) => i.title.toLowerCase().includes(q)) : items;\n out.push({ category, items: filtered });\n }\n return out.sort((a, b) => {\n const aRank = this.categoryOrder[a.category] ?? Number.MAX_SAFE_INTEGER;\n const bRank = this.categoryOrder[b.category] ?? Number.MAX_SAFE_INTEGER;\n if (aRank !== bRank) return aRank - bRank;\n return a.category.localeCompare(b.category);\n });\n });\n\n paletteListId(category: string): string {\n return paletteListIdForCategory(category);\n }\n\n isCategoryExpanded(category: string): boolean {\n return !/advanced/i.test(category);\n }\n}\n","<div class=\"fb-section\">\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Search palette</mat-label>\n <input matInput [value]=\"filter()\" (input)=\"filter.set(($any($event.target).value ?? '').toString())\" />\n </mat-form-field>\n <div class=\"fb-hint\">Drag items into the canvas. Canvas shows placeholders only; Preview renders the real form.</div>\n</div>\n\n<mat-accordion multi class=\"fb-section\">\n @for (cat of categories(); track cat.category) {\n <mat-expansion-panel [expanded]=\"isCategoryExpanded(cat.category)\">\n <mat-expansion-panel-header>\n <mat-panel-title>{{ cat.category }}</mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"fb-palette-items-wrap\">\n <div\n cdkDropList\n [id]=\"paletteListId(cat.category)\"\n [cdkDropListData]=\"[]\"\n [cdkDropListConnectedTo]=\"connectedDropLists()\"\n [cdkDropListSortingDisabled]=\"true\"\n >\n @for (item of cat.items; track item.id) {\n <div class=\"fb-palette-item\" cdkDrag [cdkDragData]=\"{ kind: 'palette', paletteId: item.id }\">\n <div>{{ item.title }}</div>\n <div class=\"fb-hint\">{{ item.category }}</div>\n </div>\n }\n </div>\n </div>\n </mat-expansion-panel>\n }\n</mat-accordion>\n","import { ChangeDetectionStrategy, Component, Input, computed, inject } from '@angular/core';\nimport { CdkDrag, CdkDropList, CdkDragPlaceholder, DragDropModule, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { BuilderStore } from '../../../builder-core/store';\nimport { BuilderNode, BuilderNodeType, isContainerNode, isFieldNode } from '../../../builder-core/model';\n\ntype DragData = { kind: 'palette'; paletteId: string } | { kind: 'node'; nodeId: string };\n\n@Component({\n selector: 'app-node-renderer',\n standalone: true,\n imports: [DragDropModule, MatIconModule, MatButtonModule, MatTooltipModule, CdkDropList, CdkDrag, CdkDragPlaceholder],\n templateUrl: './node-renderer.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NodeRendererComponent {\n readonly store = inject(BuilderStore);\n\n @Input({ required: true }) nodeId!: string;\n\n readonly node = computed<BuilderNode | null>(() => this.store.nodes()[this.nodeId] ?? null);\n readonly isContainer = computed(() => {\n const n = this.node();\n return !!n && isContainerNode(n);\n });\n\n readonly children = computed(() => {\n const n = this.node();\n return n && isContainerNode(n) ? n.children : [];\n });\n\n readonly selected = computed(() => this.store.selectedId() === this.nodeId);\n readonly isRoot = computed(() => this.nodeId === this.store.rootId());\n readonly connectedDropLists = computed(() => {\n const ids = [...this.store.paletteDropListIds()] as string[];\n const nodes = this.store.nodes();\n const rootId = this.store.rootId();\n for (const node of Object.values(nodes)) {\n if (!isContainerNode(node)) continue;\n ids.push(`drop_${node.id}`);\n if (node.type !== 'row' && node.id !== rootId) ids.push(`drop_append_${node.id}`);\n }\n return ids;\n });\n\n titleFor(n: BuilderNode): string {\n if (isFieldNode(n)) return n.props.label ?? n.fieldKind;\n if (n.type === 'col') return `Column (${(n as any).props?.colSpan ?? 12}/12)`;\n const titled = n.props.title ?? n.props.label;\n const fallback: Record<Exclude<BuilderNodeType, 'field' | 'col'>, string> = {\n panel: 'Panel',\n row: 'Row',\n tabs: 'Tabs',\n stepper: 'Stepper',\n accordion: 'Accordion',\n };\n return titled ?? fallback[n.type];\n }\n\n subtitleFor(n: BuilderNode): string {\n if (isFieldNode(n)) return `Field: ${n.fieldKind}`;\n return `Layout: ${n.type}`;\n }\n\n isRowNode(): boolean {\n const n = this.node();\n return !!n && n.type === 'row';\n }\n\n childFlexBasis(childId: string): string | null {\n if (!this.isRowNode()) return null;\n const child = this.store.nodes()[childId];\n if (!child || child.type !== 'col') return null;\n const span = Math.max(1, Math.min(12, child.props.colSpan ?? 12));\n return `${(span / 12) * 100}%`;\n }\n\n dropListId(): string {\n return `drop_${this.nodeId}`;\n }\n\n appendDropListId(): string {\n return `drop_append_${this.nodeId}`;\n }\n\n canEnter = (drag: CdkDrag<DragData>): boolean => {\n const container = this.node();\n if (!container || !isContainerNode(container)) return false;\n const draggedType = this.getDraggedNodeType(drag.data);\n if (!draggedType) return false;\n if (drag.data.kind === 'palette') return this.canEnterFromPalette(container.id, container.type, draggedType);\n return this.canEnterFromNode(container.id, container.type, drag.data.nodeId, draggedType);\n };\n\n canEnterAppend = (drag: CdkDrag<DragData>): boolean => {\n const container = this.node();\n if (!container || !isContainerNode(container)) return false;\n\n const draggedType = this.getDraggedNodeType(drag.data);\n if (!draggedType) return false;\n if (container.type === 'row' && draggedType !== 'col') return false;\n\n if (drag.data.kind === 'node' && this.isSelfOrDescendant(drag.data.nodeId, container.id)) return false;\n\n return true;\n };\n\n onDrop(event: CdkDragDrop<string[]>): void {\n const containerId = this.nodeId;\n const index = event.currentIndex;\n const data = event.item.data as DragData | undefined;\n if (!data) return;\n const container = this.node();\n const draggedType = this.getDraggedNodeType(data);\n if (!container || !isContainerNode(container) || !draggedType) return;\n\n if (data.kind === 'palette') {\n this.store.addFromPalette(data.paletteId, { containerId, index });\n return;\n }\n\n const nodeId = data.nodeId;\n const prevContainer =\n this.extractContainerId(event.previousContainer.id) ?? this.store.nodes()[nodeId]?.parentId ?? null;\n const nextContainer = this.extractContainerId(event.container.id) ?? containerId;\n if (!prevContainer || !nextContainer) return;\n\n if (prevContainer === nextContainer) {\n this.store.reorderWithin(containerId, event.previousIndex, event.currentIndex);\n } else {\n this.store.moveNode(nodeId, { containerId, index });\n }\n }\n\n onAppendDrop(event: CdkDragDrop<string[]>): void {\n const containerId = this.nodeId;\n const data = event.item.data as DragData | undefined;\n if (!data) return;\n\n if (data.kind === 'palette') {\n this.store.addFromPalette(data.paletteId, { containerId, index: this.children().length });\n return;\n }\n\n const prevContainer =\n this.extractContainerId(event.previousContainer.id) ?? this.store.nodes()[data.nodeId]?.parentId ?? null;\n if (!prevContainer) return;\n\n if (prevContainer === containerId) {\n const toIndex = this.children().length;\n this.store.reorderWithin(containerId, event.previousIndex, toIndex);\n } else {\n this.store.moveNode(data.nodeId, { containerId, index: this.children().length });\n }\n }\n\n private getDraggedNodeType(data: DragData): BuilderNodeType | null {\n if (data.kind === 'palette') {\n return this.store.getPaletteItem(data.paletteId)?.nodeType ?? null;\n }\n return this.store.nodes()[data.nodeId]?.type ?? null;\n }\n\n private canEnterFromPalette(\n containerId: string,\n containerType: BuilderNode['type'],\n draggedType: BuilderNodeType,\n ): boolean {\n if (containerId === this.store.rootId() && this.preferSelectedContainerTarget(draggedType)) return false;\n if (containerType === 'row' && draggedType !== 'col') return false;\n if (draggedType === 'field' && this.hasLayoutChildren(containerId)) return false;\n return true;\n }\n\n private canEnterFromNode(\n containerId: string,\n containerType: BuilderNode['type'],\n draggedNodeId: string,\n draggedType: BuilderNodeType,\n ): boolean {\n const rootId = this.store.rootId();\n if (containerId === rootId) {\n const dragged = this.store.nodes()[draggedNodeId];\n return !!dragged && dragged.parentId === rootId;\n }\n if (containerType === 'row' && draggedType !== 'col') return false;\n if (draggedType === 'field' && this.hasLayoutChildren(containerId)) return false;\n if (this.isSelfOrDescendant(draggedNodeId, containerId)) return false;\n return true;\n }\n\n private hasLayoutChildren(containerId: string): boolean {\n const container = this.store.nodes()[containerId];\n if (!container || !isContainerNode(container)) return false;\n const nodes = this.store.nodes();\n return container.children.some((childId) => {\n const child = nodes[childId];\n return !!child && isContainerNode(child);\n });\n }\n\n private preferSelectedContainerTarget(draggedType: BuilderNodeType): boolean {\n const selected = this.store.selectedNode();\n if (!selected || !isContainerNode(selected) || selected.id === this.store.rootId()) return false;\n if (this.containerCanAccept(selected.id, selected.type, draggedType)) return true;\n return this.hasCompatibleDescendantTarget(selected.id, draggedType);\n }\n\n private hasCompatibleDescendantTarget(containerId: string, draggedType: BuilderNodeType): boolean {\n const nodes = this.store.nodes();\n const stack = [containerId];\n while (stack.length) {\n const id = stack.pop()!;\n const node = nodes[id];\n if (!node || !isContainerNode(node)) continue;\n for (const childId of node.children) {\n const child = nodes[childId];\n if (!child || !isContainerNode(child)) continue;\n if (this.containerCanAccept(child.id, child.type, draggedType)) return true;\n stack.push(child.id);\n }\n }\n return false;\n }\n\n private containerCanAccept(\n containerId: string,\n containerType: BuilderNode['type'],\n draggedType: BuilderNodeType,\n ): boolean {\n if (containerType === 'row') return draggedType === 'col';\n if (draggedType === 'field' && this.hasLayoutChildren(containerId)) return false;\n return true;\n }\n\n private isSelfOrDescendant(sourceId: string, targetId: string): boolean {\n if (sourceId === targetId) return true;\n\n const nodes = this.store.nodes();\n const stack = [sourceId];\n while (stack.length) {\n const id = stack.pop()!;\n const node = nodes[id];\n if (!node || !isContainerNode(node)) continue;\n for (const childId of node.children) {\n if (childId === targetId) return true;\n stack.push(childId);\n }\n }\n return false;\n }\n\n private extractContainerId(dropListId: string): string | null {\n if (dropListId.startsWith('drop_append_')) return dropListId.replace(/^drop_append_/, '');\n if (dropListId.startsWith('drop_')) return dropListId.replace(/^drop_/, '');\n return null;\n }\n}\n","@let n = node();\n\n@if (!n) {\n <div class=\"fb-empty\">Missing node: {{ nodeId }}</div>\n} @else {\n @if (nodeId !== store.rootId()) {\n <div\n class=\"fb-node\"\n [attr.data-node-id]=\"nodeId\"\n [class.selected]=\"selected()\"\n cdkDrag\n [cdkDragData]=\"{ kind: 'node', nodeId: nodeId }\"\n (click)=\"store.select(nodeId)\"\n >\n <div class=\"fb-node-meta\">\n <div class=\"fb-node-title\">{{ titleFor(n) }}</div>\n <div class=\"fb-node-sub\">{{ subtitleFor(n) }}</div>\n </div>\n\n @if (selected()) {\n <div class=\"fb-node-actions\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button aria-label=\"Duplicate\" matTooltip=\"Duplicate\" (click)=\"store.duplicateSelected()\">\n <mat-icon>library_add</mat-icon>\n </button>\n <button mat-icon-button aria-label=\"Delete\" matTooltip=\"Delete (Del)\" (click)=\"store.removeSelected()\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n } @else {\n <mat-icon>{{ isContainer() ? 'view_week' : 'tune' }}</mat-icon>\n }\n\n <ng-template cdkDragPlaceholder>\n <div class=\"fb-drag-placeholder\"></div>\n </ng-template>\n </div>\n }\n\n @if (isContainer() && !isRoot() && n.type !== 'row') {\n <div\n class=\"fb-node-drop-target\"\n [class.root]=\"isRoot()\"\n cdkDropList\n [id]=\"appendDropListId()\"\n [cdkDropListData]=\"[]\"\n [cdkDropListConnectedTo]=\"connectedDropLists()\"\n [cdkDropListEnterPredicate]=\"canEnterAppend\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onAppendDrop($event)\"\n >\n @if (n.type === 'col') {\n Drop inside column\n } @else {\n Drop inside {{ n.type }}\n }\n </div>\n }\n\n @if (isContainer() && !isRoot() && n.type === 'row') {\n <div class=\"fb-row-hint\">Row accepts columns only.</div>\n }\n\n @if (isContainer()) {\n <div class=\"fb-container-children\" [class.root]=\"isRoot()\" [class.col]=\"n.type === 'col'\">\n <div\n class=\"fb-dropzone\"\n [class.root]=\"isRoot()\"\n [class.row]=\"isRowNode()\"\n [class.col]=\"n.type === 'col'\"\n cdkDropList\n [id]=\"dropListId()\"\n [cdkDropListData]=\"children()\"\n [cdkDropListConnectedTo]=\"connectedDropLists()\"\n [cdkDropListEnterPredicate]=\"canEnter\"\n (cdkDropListDropped)=\"onDrop($event)\"\n >\n @if (isRoot() && children().length === 0) {\n <div class=\"fb-empty fb-empty-dropzone fb-empty-guided\">\n <mat-icon class=\"fb-empty-icon\">dashboard_customize</mat-icon>\n <div class=\"fb-empty-title\">Start building your form</div>\n <div class=\"fb-hint\">\n Drag fields from the left panel — or use\n <strong>Layout</strong> in the toolbar to apply a starter template.\n </div>\n </div>\n }\n @for (cid of children(); track cid) {\n <div\n class=\"fb-child-slot\"\n [class.row-slot]=\"isRowNode()\"\n [style.flex-basis]=\"childFlexBasis(cid)\"\n [style.max-width]=\"childFlexBasis(cid)\"\n >\n <app-node-renderer [nodeId]=\"cid\" />\n </div>\n }\n </div>\n </div>\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { BuilderStore } from '../../builder-core/store';\nimport { NodeRendererComponent } from './node-renderer/node-renderer.component';\n\n@Component({\n selector: 'app-builder-canvas',\n standalone: true,\n imports: [DragDropModule, NodeRendererComponent],\n templateUrl: './builder-canvas.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BuilderCanvasComponent {\n readonly store = inject(BuilderStore);\n readonly root = computed(() => this.store.nodes()[this.store.rootId()]);\n readonly rootChildren = computed(() => this.root()?.children ?? []);\n}\n","<div class=\"fb-canvas-surface\">\n <app-node-renderer [nodeId]=\"store.rootId()\" />\n</div>\n","export interface DependencyKeyOption {\n key: string;\n label: string;\n fieldKind: string;\n}\n\nexport type HelpKey =\n | 'label'\n | 'panelTitle'\n | 'key'\n | 'placeholder'\n | 'description'\n | 'hidden'\n | 'disabled'\n | 'dependsOnKey'\n | 'operator'\n | 'ruleValue'\n | 'advancedExpression'\n | 'colSpan'\n | 'required'\n | 'email'\n | 'pattern'\n | 'validatorPreset'\n | 'customValidation'\n | 'customValidationMessage'\n | 'asyncUnique';\n\nexport const HELP_TEXT: Record<HelpKey, string> = {\n label: 'Human-readable label shown to end users.',\n panelTitle: 'Heading displayed for a panel section.',\n key: 'Stable model property name used in exports and conditional logic. Keep it unique and API-safe.',\n placeholder: 'Hint text shown when the field is empty.',\n description: 'Helper text shown to users for additional context.',\n hidden: 'When enabled, the field is hidden from rendered form UI.',\n disabled: 'When enabled, the field is shown but not editable.',\n dependsOnKey: \"Select another field key. This rule will evaluate against that field's current value.\",\n operator: 'How to compare the dependent field value with the value below.',\n ruleValue: 'Comparison value used by the selected operator (not used for truthy/falsy).',\n advancedExpression:\n \"JavaScript-like expression evaluated against model/data/value. When set, this overrides the simple rule builder. Example: model?.status === 'approved' && value !== 'blocked'\",\n colSpan: 'Column width in the 12-column grid.',\n required: 'Forces user input before submit.',\n email: 'Validates the value as a valid email format.',\n pattern: 'Regular expression pattern the value must match.',\n validatorPreset: 'Named preset that applies and tracks reusable validation rules with optional parameters.',\n customValidation:\n \"Custom expression must assign `valid` to true, false, or an error message string. Example: valid = value > 0 ? true : 'Value must be greater than 0';\",\n customValidationMessage: 'Fallback message shown when expression returns false.',\n asyncUnique: 'Checks uniqueness against lookup or URL data during validation.',\n};\n","import { AsyncUniqueSourceType, OptionsSourceType, RuleOperator } from '../../builder-core/model';\n\nexport type AsyncTestState = 'idle' | 'loading' | 'success' | 'error';\nexport type RuleTarget = 'visibleRule' | 'enabledRule';\nexport type RuleExpressionTarget = 'visibleExpression' | 'enabledExpression';\n\nexport interface DependencyKeyOption {\n key: string;\n label: string;\n fieldKind: string;\n}\n\nexport const OPTIONS_SOURCE_TYPES: Array<{ value: OptionsSourceType; label: string }> = [\n { value: 'static', label: 'Static options' },\n { value: 'lookup', label: 'Lookup key' },\n { value: 'url', label: 'URL (HTTP)' },\n];\n\nexport const ASYNC_UNIQUE_SOURCES: Array<{ value: AsyncUniqueSourceType; label: string }> = [\n { value: 'lookup', label: 'Lookup dataset' },\n { value: 'url', label: 'URL dataset' },\n];\n\nexport const RULE_OPERATORS: Array<{ value: RuleOperator; label: string }> = [\n { value: 'truthy', label: 'Is truthy' },\n { value: 'falsy', label: 'Is falsy' },\n { value: 'eq', label: 'Equals' },\n { value: 'ne', label: 'Not equals' },\n { value: 'contains', label: 'Contains' },\n { value: 'gt', label: 'Greater than' },\n { value: 'lt', label: 'Less than' },\n];\n\nexport function ruleOperatorNeedsValue(op?: RuleOperator): boolean {\n if (!op) return false;\n return op !== 'truthy' && op !== 'falsy';\n}\n","import { Injectable } from '@angular/core';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\n\nimport { BuilderStore } from '../../builder-core/store';\nimport { ConditionalRule, FieldNode, isFieldNode } from '../../builder-core/model';\nimport { DependencyKeyOption, RuleExpressionTarget, RuleTarget } from './builder-inspector.constants';\n\n@Injectable({ providedIn: 'root' })\nexport class BuilderInspectorRulesService {\n buildDependencyKeyOptions(\n nodes: ReturnType<BuilderStore['nodes']>,\n selectedNodeId: string | undefined,\n ): DependencyKeyOption[] {\n const out: DependencyKeyOption[] = [];\n const seen = new Set<string>();\n for (const node of Object.values(nodes)) {\n if (!isFieldNode(node) || node.id === selectedNodeId) continue;\n const key = (node.props.key ?? '').trim();\n if (!key || seen.has(key)) continue;\n seen.add(key);\n out.push({ key, label: node.props.label ?? key, fieldKind: node.fieldKind });\n }\n return out.sort((a, b) => a.label.localeCompare(b.label));\n }\n\n filterDependencyKeyOptions(options: DependencyKeyOption[], query: string): DependencyKeyOption[] {\n const q = query.trim().toLowerCase();\n if (!q) return options;\n return options.filter(\n (option) =>\n option.key.toLowerCase().includes(q) ||\n option.label.toLowerCase().includes(q) ||\n option.fieldKind.toLowerCase().includes(q),\n );\n }\n\n selectedRuleKey(event: MatAutocompleteSelectedEvent): string {\n return String(event.option.value ?? '');\n }\n\n rule(field: FieldNode | null, target: RuleTarget): ConditionalRule | null {\n return field?.props[target] ?? null;\n }\n\n initRule(store: BuilderStore, field: FieldNode | null, target: RuleTarget): void {\n if (!field) return;\n const next: ConditionalRule = { dependsOnKey: '', operator: 'truthy' };\n store.updateNodeProps(field.id, { [target]: next });\n }\n\n clearRule(store: BuilderStore, field: FieldNode | null, target: RuleTarget): void {\n if (!field) return;\n store.updateNodeProps(field.id, { [target]: undefined });\n }\n\n updateRule(store: BuilderStore, field: FieldNode | null, target: RuleTarget, patch: Partial<ConditionalRule>): void {\n if (!field) return;\n const current = field.props[target];\n const next: ConditionalRule = {\n dependsOnKey: current?.dependsOnKey ?? '',\n operator: current?.operator ?? 'truthy',\n value: current?.value,\n ...patch,\n };\n store.updateNodePropsGrouped(field.id, { [target]: next }, `${field.id}:${target}`);\n }\n\n ruleExpression(field: FieldNode | null, target: RuleExpressionTarget): string {\n return (field?.props[target] ?? '').trim();\n }\n\n setRuleExpression(store: BuilderStore, field: FieldNode | null, target: RuleExpressionTarget, value: string): void {\n if (!field) return;\n store.updateNodePropsGrouped(field.id, { [target]: value }, `${field.id}:${target}`);\n }\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\n\nimport { AsyncUniqueValidator, OptionItem } from './model';\n\nexport interface DynamicAsyncValidatorContext {\n lookupRegistry?: Record<string, OptionItem[]>;\n fetchJson?: (url: string) => Promise<unknown>;\n}\n\nexport interface AsyncUniqueCheckResult {\n unique: boolean;\n reason: 'empty' | 'unique' | 'duplicate' | 'source-error';\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | null {\n return !!value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null;\n}\n\nfunction resolveByPath(root: unknown, path: string): unknown {\n const steps = path\n .split('.')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n\n let cur: unknown = root;\n for (const step of steps) {\n const obj = asObject(cur);\n if (!obj) return undefined;\n cur = obj[step];\n }\n return cur;\n}\n\nfunction extractListPayload(payload: unknown, listPath?: string): unknown[] | null {\n if (Array.isArray(payload)) return payload;\n const obj = asObject(payload);\n if (!obj) return null;\n\n if (listPath?.trim()) {\n const fromPath = resolveByPath(payload, listPath);\n return Array.isArray(fromPath) ? fromPath : null;\n }\n\n for (const value of Object.values(obj)) {\n if (Array.isArray(value)) return value;\n }\n return null;\n}\n\nfunction collectFields(fields: FormlyFieldConfig[]): FormlyFieldConfig[] {\n const out: FormlyFieldConfig[] = [];\n const stack = [...fields];\n\n while (stack.length > 0) {\n const field = stack.pop() as FormlyFieldConfig;\n out.push(field);\n for (const child of field.fieldGroup ?? []) stack.push(child);\n }\n\n return out;\n}\n\nfunction normalizeValue(value: unknown, caseSensitive: boolean): string {\n const text = String(value ?? '').trim();\n return caseSensitive ? text : text.toLowerCase();\n}\n\nfunction toCandidate(item: unknown, valueKey?: string): string | null {\n if (item == null) return null;\n if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') return String(item);\n\n const obj = asObject(item);\n if (!obj) return null;\n\n const key = valueKey || 'value';\n const raw = obj[key] ?? obj['id'] ?? obj['key'] ?? obj['label'];\n return raw == null ? null : String(raw);\n}\n\nasync function loadExistingValues(\n config: AsyncUniqueValidator,\n ctx: DynamicAsyncValidatorContext,\n fetchCache: Map<string, Promise<unknown>>,\n): Promise<string[]> {\n if (config.sourceType === 'lookup') {\n const list = ctx.lookupRegistry?.[config.lookupKey ?? ''] ?? [];\n return list.map((item) => String(item.value));\n }\n\n const url = config.url?.trim();\n if (!url) return [];\n\n const fetchJson =\n ctx.fetchJson ??\n (async (endpoint: string): Promise<unknown> => {\n const res = await fetch(endpoint);\n if (!res.ok) throw new Error(`Failed loading async validator source: ${res.status}`);\n return res.json();\n });\n\n if (!fetchCache.has(url)) {\n fetchCache.set(url, fetchJson(url));\n }\n\n const payload = await (fetchCache.get(url) as Promise<unknown>);\n const list = extractListPayload(payload, config.listPath);\n if (!Array.isArray(list)) return [];\n\n return list.map((item) => toCandidate(item, config.valueKey)).filter((value): value is string => value != null);\n}\n\n/**\n * Evaluates one value against async unique source config.\n */\nexport async function checkAsyncUniqueValue(\n config: AsyncUniqueValidator,\n value: unknown,\n ctx: DynamicAsyncValidatorContext = {},\n fetchCache: Map<string, Promise<unknown>> = new Map<string, Promise<unknown>>(),\n): Promise<AsyncUniqueCheckResult> {\n if (value == null || String(value).trim() === '') return { unique: true, reason: 'empty' };\n\n try {\n const caseSensitive = !!config.caseSensitive;\n const existingValues = await loadExistingValues(config, ctx, fetchCache);\n const normalizedExisting = new Set(existingValues.map((item) => normalizeValue(item, caseSensitive)));\n const isUnique = !normalizedExisting.has(normalizeValue(value, caseSensitive));\n return { unique: isUnique, reason: isUnique ? 'unique' : 'duplicate' };\n } catch {\n return { unique: true, reason: 'source-error' };\n }\n}\n\n/**\n * Binds async unique validators defined in `props.asyncUnique` to Formly fields.\n */\nexport function resolveAsyncValidatorsForFields(\n fields: FormlyFieldConfig[],\n ctx: DynamicAsyncValidatorContext = {},\n): void {\n const fetchCache = new Map<string, Promise<unknown>>();\n\n for (const field of collectFields(fields)) {\n const props = (field.props ??= {});\n const config = props['asyncUnique'] as AsyncUniqueValidator | undefined;\n if (!config) continue;\n\n const caseSensitive = !!config.caseSensitive;\n const message = config.message || 'Value must be unique';\n let latestRunId = 0;\n\n field.asyncValidators = {\n ...(field.asyncValidators ?? {}),\n unique: {\n expression: async (control: { value: unknown }): Promise<boolean> => {\n const runId = ++latestRunId;\n await new Promise<void>((resolve) => setTimeout(resolve, 250));\n if (runId !== latestRunId) return true;\n\n const result = await checkAsyncUniqueValue(config, control?.value, ctx, fetchCache);\n if (runId !== latestRunId) return true;\n if (result.reason === 'source-error') return true;\n\n // Keep existing behavior of case-sensitive compare from config.\n // The helper already applies it; this local read ensures config remains captured by closure.\n void caseSensitive;\n return result.unique;\n },\n message,\n },\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { checkAsyncUniqueValue } from '../../builder-core/async-validators';\nimport { AsyncUniqueSourceType, AsyncUniqueValidator, FieldNode } from '../../builder-core/model';\nimport { BuilderStore } from '../../builder-core/store';\nimport {\n applyValidatorPreset,\n defaultParamsForValidatorPreset,\n ValidatorPresetDefinition,\n validatorPresetDefinitionsForFieldKind,\n} from '../../builder-core/validation-presets';\nimport { AsyncTestState } from './builder-inspector.constants';\n\n@Injectable({ providedIn: 'root' })\nexport class BuilderInspectorValidationService {\n asyncUnique(field: FieldNode | null): AsyncUniqueValidator | null {\n return field?.validators.asyncUnique ?? null;\n }\n\n enableAsyncUnique(store: BuilderStore, field: FieldNode | null, enabled: boolean): void {\n if (!field) return;\n if (!enabled) {\n store.updateNodeValidators(field.id, { asyncUnique: undefined });\n return;\n }\n const next: AsyncUniqueValidator = {\n sourceType: 'lookup',\n lookupKey: 'countries',\n caseSensitive: false,\n message: 'Value must be unique',\n };\n store.updateNodeValidators(field.id, { asyncUnique: next });\n }\n\n setAsyncUniqueSource(store: BuilderStore, field: FieldNode | null, sourceType: AsyncUniqueSourceType): void {\n if (!field?.validators.asyncUnique) return;\n store.updateNodeValidators(field.id, { asyncUnique: { ...field.validators.asyncUnique, sourceType } });\n }\n\n updateAsyncUnique(store: BuilderStore, field: FieldNode | null, patch: Partial<AsyncUniqueValidator>): void {\n if (!field?.validators.asyncUnique) return;\n store.updateNodeValidatorsGrouped(\n field.id,\n { asyncUnique: { ...field.validators.asyncUnique, ...patch } },\n `${field.id}:async-unique`,\n );\n }\n\n async runAsyncUniqueTest(\n config: AsyncUniqueValidator,\n sample: string,\n lookupRegistry: Record<string, { label: string; value: string }[]>,\n ): Promise<{ state: AsyncTestState; message: string }> {\n const value = sample.trim();\n if (!value) return { state: 'error', message: 'Enter a sample value to test.' };\n const result = await checkAsyncUniqueValue(config, value, { lookupRegistry });\n if (result.reason === 'duplicate') return { state: 'error', message: 'Duplicate found in source.' };\n if (result.reason === 'source-error') {\n return { state: 'error', message: 'Could not validate source. Check URL/lookup settings.' };\n }\n return { state: 'success', message: 'Value is unique.' };\n }\n\n customValidationEnabled(field: FieldNode | null): boolean {\n return !!field?.validators.customExpression?.trim();\n }\n\n setCustomValidationEnabled(store: BuilderStore, field: FieldNode | null, enabled: boolean): void {\n if (!field) return;\n if (!enabled) {\n store.updateNodeValidators(field.id, { customExpression: undefined, customExpressionMessage: undefined });\n return;\n }\n store.updateNodeValidators(field.id, {\n customExpression: field.validators.customExpression?.trim() || 'valid = true;',\n customExpressionMessage: field.validators.customExpressionMessage || 'Custom validation failed.',\n });\n }\n\n customValidationExpression(field: FieldNode | null): string {\n return field?.validators.customExpression ?? '';\n }\n\n customValidationMessage(field: FieldNode | null): string {\n return field?.validators.customExpressionMessage ?? 'Custom validation failed.';\n }\n\n setCustomValidationExpression(store: BuilderStore, field: FieldNode | null, value: string): void {\n if (!field) return;\n store.updateNodeValidatorsGrouped(field.id, { customExpression: value }, `${field.id}:customExpression`);\n }\n\n setCustomValidationMessage(store: BuilderStore, field: FieldNode | null, value: string): void {\n if (!field) return;\n store.updateNodeValidatorsGrouped(\n field.id,\n { customExpressionMessage: value },\n `${field.id}:customExpressionMessage`,\n );\n }\n\n validatorPresetDefinitionsForField(\n field: FieldNode | null,\n definitions: readonly ValidatorPresetDefinition[],\n ): ValidatorPresetDefinition[] {\n if (!field) return [];\n return validatorPresetDefinitionsForFieldKind(field.fieldKind, definitions);\n }\n\n selectedValidatorPresetId(field: FieldNode | null): string {\n return field?.validators.presetId ?? '';\n }\n\n validatorPresetParamValue(field: FieldNode | null, key: string): string | number | boolean | '' {\n return field?.validators.presetParams?.[key] ?? '';\n }\n\n setValidatorPreset(store: BuilderStore, field: FieldNode | null, presetId: string): void {\n if (!field) return;\n const trimmed = presetId.trim();\n if (!trimmed) {\n store.updateNodeValidators(field.id, { presetId: undefined, presetParams: undefined });\n return;\n }\n\n const definition = this.validatorPresetDefinitionsForField(field, store.validatorPresetDefinitions()).find(\n (item) => item.id === trimmed,\n );\n if (!definition) return;\n\n const params = defaultParamsForValidatorPreset(definition);\n const resolved = applyValidatorPreset(definition, params);\n store.updateNodeValidators(field.id, {\n ...resolved,\n presetId: definition.id,\n presetParams: params,\n });\n }\n\n setValidatorPresetParam(\n store: BuilderStore,\n field: FieldNode | null,\n param: { key: string; type: 'string' | 'number' | 'boolean' },\n value: unknown,\n ): void {\n if (!field) return;\n const presetId = field.validators.presetId?.trim();\n if (!presetId) return;\n\n const definition = this.validatorPresetDefinitionsForField(field, store.validatorPresetDefinitions()).find(\n (item) => item.id === presetId,\n );\n if (!definition) return;\n\n const nextParams = { ...(field.validators.presetParams ?? {}) };\n const coerced = this.coercePresetParamValue(param.type, value);\n if (coerced === undefined) delete nextParams[param.key];\n else nextParams[param.key] = coerced;\n\n const resolved = applyValidatorPreset(definition, nextParams);\n store.updateNodeValidatorsGrouped(\n field.id,\n {\n ...resolved,\n presetId,\n presetParams: nextParams,\n },\n `${field.id}:validatorPreset:${param.key}`,\n );\n }\n\n private coercePresetParamValue(\n type: 'string' | 'number' | 'boolean',\n value: unknown,\n ): string | number | boolean | undefined {\n if (type === 'boolean') return !!value;\n if (type === 'number') {\n if (value === '' || value === null || value === undefined) return undefined;\n const num = Number(value);\n return Number.isFinite(num) ? num : undefined;\n }\n const text = String(value ?? '').trim();\n return text.length > 0 ? text : undefined;\n }\n}\n","import { OptionItem } from '../../builder-core/model';\n\nexport function addOptionItem(options: OptionItem[] | undefined): OptionItem[] {\n const count = options?.length ?? 0;\n return [...(options ?? []), { label: `Option ${count + 1}`, value: `option_${count + 1}` }];\n}\n\nexport function updateOptionItem(\n options: OptionItem[] | undefined,\n index: number,\n patch: Partial<OptionItem>,\n): OptionItem[] | null {\n const current = [...(options ?? [])];\n if (!current[index]) return null;\n current[index] = { ...current[index], ...patch };\n return current;\n}\n\nexport function removeOptionItem(options: OptionItem[] | undefined, index: number): OptionItem[] | null {\n const current = [...(options ?? [])];\n if (!current[index]) return null;\n current.splice(index, 1);\n return current;\n}\n\nexport function moveOptionItem(\n options: OptionItem[] | undefined,\n index: number,\n direction: -1 | 1,\n): OptionItem[] | null {\n const current = [...(options ?? [])];\n const nextIndex = index + direction;\n if (!current[index] || nextIndex < 0 || nextIndex >= current.length) return null;\n const tmp = current[index];\n current[index] = current[nextIndex];\n current[nextIndex] = tmp;\n return current;\n}\n","import { Injectable } from '@angular/core';\n\nimport { FieldNode, OptionItem, OptionsSource, OptionsSourceType } from '../../builder-core/model';\nimport { BuilderStore } from '../../builder-core/store';\nimport { addOptionItem, moveOptionItem, removeOptionItem, updateOptionItem } from './builder-inspector.options';\n\n@Injectable({ providedIn: 'root' })\nexport class BuilderInspectorDataService {\n options(field: FieldNode | null, isChoiceField: boolean): OptionItem[] {\n return isChoiceField ? (field?.props.options ?? []) : [];\n }\n\n optionsSourceType(field: FieldNode | null, isChoiceField: boolean): OptionsSourceType {\n return isChoiceField ? (field?.props.optionsSource?.type ?? 'static') : 'static';\n }\n\n setOptionsSourceType(\n store: BuilderStore,\n field: FieldNode | null,\n isChoiceField: boolean,\n type: OptionsSourceType,\n ): void {\n if (!field || !isChoiceField) return;\n if (type === 'static') {\n store.updateNodeProps(field.id, { optionsSource: undefined });\n return;\n }\n const current: Partial<OptionsSource> = field.props.optionsSource ?? {};\n const next: OptionsSource = {\n type,\n url: current.url,\n lookupKey: current.lookupKey,\n listPath: current.listPath,\n labelKey: current.labelKey,\n valueKey: current.valueKey,\n };\n store.updateNodeProps(field.id, { optionsSource: next });\n }\n\n updateOptionsSource(\n store: BuilderStore,\n field: FieldNode | null,\n isChoiceField: boolean,\n sourceType: OptionsSourceType,\n patch: Partial<OptionsSource>,\n ): void {\n if (!field || !isChoiceField || sourceType === 'static') return;\n const current = field.props.optionsSource ?? { type: sourceType };\n store.updateNodePropsGrouped(field.id, { optionsSource: { ...current, ...patch } }, `${field.id}:options-source`);\n }\n\n addOption(store: BuilderStore, field: FieldNode | null, isChoiceField: boolean): void {\n if (!field || !isChoiceField) return;\n store.updateNodeProps(field.id, { options: addOptionItem(field.props.options) });\n }\n\n updateOption(\n store: BuilderStore,\n field: FieldNode | null,\n isChoiceField: boolean,\n index: number,\n patch: Partial<OptionItem>,\n ): void {\n if (!field || !isChoiceField) return;\n const next = updateOptionItem(field.props.options, index, patch);\n if (!next) return;\n store.updateNodePropsGrouped(field.id, { options: next }, `${field.id}:options`);\n }\n\n removeOption(store: BuilderStore, field: FieldNode | null, isChoiceField: boolean, index: number): void {\n if (!field || !isChoiceField) return;\n const next = removeOptionItem(field.props.options, index);\n if (!next) return;\n store.updateNodeProps(field.id, { options: next });\n }\n\n moveOption(\n store: BuilderStore,\n field: FieldNode | null,\n isChoiceField: boolean,\n index: number,\n direction: -1 | 1,\n ): void {\n if (!field || !isChoiceField) return;\n const next = moveOptionItem(field.props.options, index, direction);\n if (!next) return;\n store.updateNodeProps(field.id, { options: next });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatAutocompleteSelectedEvent, MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { BuilderStore } from '../../builder-core/store';\nimport {\n AsyncUniqueSourceType,\n AsyncUniqueValidator,\n ConditionalRule,\n OptionItem,\n OptionsSource,\n OptionsSourceType,\n RuleOperator,\n isContainerNode,\n isFieldNode,\n} from '../../builder-core/model';\nimport { HELP_TEXT, HelpKey } from './help-text';\nimport {\n ASYNC_UNIQUE_SOURCES,\n DependencyKeyOption,\n OPTIONS_SOURCE_TYPES,\n RULE_OPERATORS,\n RuleExpressionTarget,\n RuleTarget,\n AsyncTestState,\n ruleOperatorNeedsValue,\n} from './builder-inspector.constants';\nimport { BuilderInspectorRulesService } from './builder-inspector-rules.service';\nimport { BuilderInspectorValidationService } from './builder-inspector-validation.service';\nimport { BuilderInspectorDataService } from './builder-inspector-data.service';\nimport { ValidatorPresetDefinition } from '../../builder-core/validation-presets';\n@Component({\n selector: 'app-builder-inspector',\n standalone: true,\n imports: [\n FormsModule,\n MatAutocompleteModule,\n MatFormFieldModule,\n MatInputModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatButtonModule,\n MatSelectModule,\n MatTabsModule,\n MatIconModule,\n MatTooltipModule,\n ],\n templateUrl: './builder-inspector.component.html',\n styleUrl: './builder-inspector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BuilderInspectorComponent {\n readonly store = inject(BuilderStore);\n private readonly rulesService = inject(BuilderInspectorRulesService);\n private readonly validationService = inject(BuilderInspectorValidationService);\n private readonly dataService = inject(BuilderInspectorDataService);\n readonly node = this.store.selectedNode;\n readonly isField = computed(() => !!this.fieldNode());\n readonly fieldNode = computed(() => {\n const n = this.node();\n return n && isFieldNode(n) ? n : null;\n });\n readonly containerNode = computed(() => {\n const n = this.node();\n return n && isContainerNode(n) ? n : null;\n });\n readonly isChoiceField = computed(() => {\n const f = this.fieldNode();\n return !!f && (f.fieldKind === 'select' || f.fieldKind === 'radio' || f.fieldKind === 'multiselect');\n });\n\n readonly supportsEmailValidator = computed(() => {\n const f = this.fieldNode();\n if (!f) return false;\n return f.fieldKind === 'input' || f.fieldKind === 'email';\n });\n readonly customTypeHint = computed(() => {\n const field = this.fieldNode();\n const customType = field?.props.customType?.trim();\n if (!customType) return null;\n const match = this.store.paletteItems().find((item) => item.formlyType === customType);\n const hint = match?.inspectorHint?.trim();\n return hint || `Custom Formly type: ${customType}`;\n });\n\n private readonly tabByNodeType = signal<{ field: number; layout: number }>({ field: 0, layout: 0 });\n readonly selectedTabIndex = computed(() =>\n this.isField() ? this.tabByNodeType().field : this.tabByNodeType().layout,\n );\n readonly asyncUniqueSampleValue = signal('');\n readonly asyncUniqueTestState = signal<AsyncTestState>('idle');\n readonly asyncUniqueTestMessage = signal('');\n\n readonly visibleRuleKeyQuery = signal('');\n readonly enabledRuleKeyQuery = signal('');\n\n readonly dependencyKeyOptions = computed<DependencyKeyOption[]>(() => {\n return this.rulesService.buildDependencyKeyOptions(this.store.nodes(), this.fieldNode()?.id);\n });\n\n readonly optionsSourceTypes = OPTIONS_SOURCE_TYPES;\n readonly asyncUniqueSources = ASYNC_UNIQUE_SOURCES;\n readonly ruleOperators = RULE_OPERATORS;\n\n onSelectedTabChange(index: number): void {\n this.tabByNodeType.update((state) => (this.isField() ? { ...state, field: index } : { ...state, layout: index }));\n }\n\n helpText(key: HelpKey): string {\n return HELP_TEXT[key];\n }\n\n filteredDependencyKeyOptions(target: RuleTarget): DependencyKeyOption[] {\n const query = target === 'visibleRule' ? this.visibleRuleKeyQuery() : this.enabledRuleKeyQuery();\n return this.rulesService.filterDependencyKeyOptions(this.dependencyKeyOptions(), query);\n }\n\n onDependsOnKeyInput(target: RuleTarget, value: string): void {\n if (target === 'visibleRule') this.visibleRuleKeyQuery.set(value ?? '');\n else this.enabledRuleKeyQuery.set(value ?? '');\n this.updateRule(target, { dependsOnKey: value ?? '' });\n }\n\n onDependsOnKeySelected(target: RuleTarget, event: MatAutocompleteSelectedEvent): void {\n const key = this.rulesService.selectedRuleKey(event);\n if (target === 'visibleRule') this.visibleRuleKeyQuery.set(key);\n else this.enabledRuleKeyQuery.set(key);\n this.updateRule(target, { dependsOnKey: key });\n }\n\n isPanel(): boolean {\n return this.containerNode()?.type === 'panel';\n }\n isTitledLayout(): boolean {\n const type = this.containerNode()?.type;\n return type === 'panel' || type === 'tabs' || type === 'stepper' || type === 'accordion';\n }\n titledLayoutLabel(): string {\n const type = this.containerNode()?.type;\n if (type === 'tabs') return 'Tabs title';\n if (type === 'stepper') return 'Stepper title';\n if (type === 'accordion') return 'Accordion title';\n return 'Panel title';\n }\n isCol(): boolean {\n return this.containerNode()?.type === 'col';\n }\n isRow(): boolean {\n return this.containerNode()?.type === 'row';\n }\n\n addColumnToSelectedRow(): void {\n const n = this.containerNode();\n if (!n || n.type !== 'row') return;\n this.store.addColumnToRow(n.id);\n }\n\n rebalanceSelectedRow(): void {\n const n = this.containerNode();\n if (!n || n.type !== 'row') return;\n this.store.rebalanceRowColumns(n.id);\n }\n\n splitSelectedColumn(parts: number): void {\n const n = this.containerNode();\n if (!n || n.type !== 'col') return;\n this.store.splitColumn(n.id, parts);\n }\n\n options(): OptionItem[] {\n return this.dataService.options(this.fieldNode(), this.isChoiceField());\n }\n optionsSourceType(): OptionsSourceType {\n return this.dataService.optionsSourceType(this.fieldNode(), this.isChoiceField());\n }\n\n setOptionsSourceType(type: OptionsSourceType): void {\n this.dataService.setOptionsSourceType(this.store, this.fieldNode(), this.isChoiceField(), type);\n }\n\n updateOptionsSource(patch: Partial<OptionsSource>): void {\n this.dataService.updateOptionsSource(\n this.store,\n this.fieldNode(),\n this.isChoiceField(),\n this.optionsSourceType(),\n patch,\n );\n }\n\n asyncUnique(): AsyncUniqueValidator | null {\n return this.validationService.asyncUnique(this.fieldNode());\n }\n\n enableAsyncUnique(enabled: boolean): void {\n this.validationService.enableAsyncUnique(this.store, this.fieldNode(), enabled);\n this.resetAsyncUniqueTest();\n }\n\n setAsyncUniqueSource(sourceType: AsyncUniqueSourceType): void {\n this.validationService.setAsyncUniqueSource(this.store, this.fieldNode(), sourceType);\n this.resetAsyncUniqueTest();\n }\n\n updateAsyncUnique(patch: Partial<AsyncUniqueValidator>): void {\n this.validationService.updateAsyncUnique(this.store, this.fieldNode(), patch);\n this.resetAsyncUniqueTest();\n }\n\n setAsyncUniqueSampleValue(value: string): void {\n this.asyncUniqueSampleValue.set(value);\n }\n\n async runAsyncUniqueTest(): Promise<void> {\n const config = this.fieldNode()?.validators.asyncUnique;\n if (!config) return;\n this.asyncUniqueTestState.set('loading');\n this.asyncUniqueTestMessage.set('Checking...');\n const out = await this.validationService.runAsyncUniqueTest(\n config,\n this.asyncUniqueSampleValue(),\n this.store.lookupRegistry(),\n );\n this.asyncUniqueTestState.set(out.state);\n this.asyncUniqueTestMessage.set(out.message);\n }\n\n resetAsyncUniqueTest(): void {\n this.asyncUniqueTestState.set('idle');\n this.asyncUniqueTestMessage.set('');\n }\n\n rule(target: RuleTarget): ConditionalRule | null {\n return this.rulesService.rule(this.fieldNode(), target);\n }\n\n initRule(target: RuleTarget): void {\n this.rulesService.initRule(this.store, this.fieldNode(), target);\n if (target === 'visibleRule') this.visibleRuleKeyQuery.set('');\n else this.enabledRuleKeyQuery.set('');\n }\n\n clearRule(target: RuleTarget): void {\n this.rulesService.clearRule(this.store, this.fieldNode(), target);\n if (target === 'visibleRule') this.visibleRuleKeyQuery.set('');\n else this.enabledRuleKeyQuery.set('');\n }\n\n updateRule(target: RuleTarget, patch: Partial<ConditionalRule>): void {\n this.rulesService.updateRule(this.store, this.fieldNode(), target, patch);\n }\n\n ruleExpression(target: RuleExpressionTarget): string {\n return this.rulesService.ruleExpression(this.fieldNode(), target);\n }\n\n setRuleExpression(target: RuleExpressionTarget, value: string): void {\n this.rulesService.setRuleExpression(this.store, this.fieldNode(), target, value);\n }\n\n operatorNeedsValue(op?: RuleOperator): boolean {\n return ruleOperatorNeedsValue(op);\n }\n\n customValidationEnabled(): boolean {\n return this.validationService.customValidationEnabled(this.fieldNode());\n }\n\n setCustomValidationEnabled(enabled: boolean): void {\n this.validationService.setCustomValidationEnabled(this.store, this.fieldNode(), enabled);\n }\n\n customValidationExpression(): string {\n return this.validationService.customValidationExpression(this.fieldNode());\n }\n customValidationMessage(): string {\n return this.validationService.customValidationMessage(this.fieldNode());\n }\n\n setCustomValidationExpression(value: string): void {\n this.validationService.setCustomValidationExpression(this.store, this.fieldNode(), value);\n }\n\n setCustomValidationMessage(value: string): void {\n this.validationService.setCustomValidationMessage(this.store, this.fieldNode(), value);\n }\n\n validatorPresetDefinitions(): ValidatorPresetDefinition[] {\n return this.validationService.validatorPresetDefinitionsForField(\n this.fieldNode(),\n this.store.validatorPresetDefinitions(),\n );\n }\n\n validatorPresetId(): string {\n return this.validationService.selectedValidatorPresetId(this.fieldNode());\n }\n\n setValidatorPreset(value: string): void {\n this.validationService.setValidatorPreset(this.store, this.fieldNode(), value);\n }\n\n validatorPresetParamValue(key: string): string | number | boolean | '' {\n return this.validationService.validatorPresetParamValue(this.fieldNode(), key);\n }\n\n setValidatorPresetParam(param: { key: string; type: 'string' | 'number' | 'boolean' }, value: unknown): void {\n this.validationService.setValidatorPresetParam(this.store, this.fieldNode(), param, value);\n }\n\n addOption(): void {\n this.dataService.addOption(this.store, this.fieldNode(), this.isChoiceField());\n }\n\n updateOption(index: number, patch: Partial<OptionItem>): void {\n this.dataService.updateOption(this.store, this.fieldNode(), this.isChoiceField(), index, patch);\n }\n\n removeOption(index: number): void {\n this.dataService.removeOption(this.store, this.fieldNode(), this.isChoiceField(), index);\n }\n\n moveOption(index: number, direction: -1 | 1): void {\n this.dataService.moveOption(this.store, this.fieldNode(), this.isChoiceField(), index, direction);\n }\n\n setProp(key: string, value: unknown): void {\n const n = this.node();\n if (!n) return;\n if (typeof value === 'string' || typeof value === 'number') {\n this.store.updateNodePropsGrouped(n.id, { [key]: value }, `${n.id}:prop:${key}`);\n return;\n }\n this.store.updateNodeProps(n.id, { [key]: value });\n }\n\n setVal(key: string, value: unknown): void {\n const n = this.node();\n if (!n || !isFieldNode(n)) return;\n if (typeof value === 'string' || typeof value === 'number') {\n this.store.updateNodeValidatorsGrouped(n.id, { [key]: value }, `${n.id}:val:${key}`);\n return;\n }\n this.store.updateNodeValidators(n.id, { [key]: value });\n }\n}\n","<div class=\"fb-section\">\n <div class=\"fb-inspector-title\">Inspector</div>\n\n @if (!node()) {\n <div class=\"fb-hint\">Select an element on the canvas to edit its settings.</div>\n } @else {\n @let n = node()!;\n @let f = fieldNode();\n @let c = containerNode();\n\n <div class=\"fb-hint fb-inspector-editing\">\n Editing: <strong>{{ isField() ? 'Field' : 'Layout' }}</strong>\n </div>\n\n <mat-tab-group [selectedIndex]=\"selectedTabIndex()\" (selectedIndexChange)=\"onSelectedTabChange($event)\">\n <mat-tab label=\"Basic\">\n <div class=\"fb-tab-content\">\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Label</mat-label>\n <input matInput [ngModel]=\"n.props?.label\" (ngModelChange)=\"setProp('label', $event)\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('label')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n @if (isTitledLayout()) {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>{{ titledLayoutLabel() }}</mat-label>\n <input matInput [ngModel]=\"c?.props?.title\" (ngModelChange)=\"setProp('title', $event)\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('panelTitle')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n }\n\n @if (isField()) {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Key</mat-label>\n <input matInput [ngModel]=\"f?.props?.key\" (ngModelChange)=\"setProp('key', $event)\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('key')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n @if (customTypeHint()) {\n <div class=\"fb-hint fb-hint-margin-bottom\">{{ customTypeHint() }}</div>\n }\n }\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Placeholder</mat-label>\n <input matInput [ngModel]=\"n.props?.placeholder\" (ngModelChange)=\"setProp('placeholder', $event)\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('placeholder')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Description</mat-label>\n <input matInput [ngModel]=\"n.props?.description\" (ngModelChange)=\"setProp('description', $event)\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('description')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-slide-toggle\n [ngModel]=\"!!n.props?.hidden\"\n (ngModelChange)=\"setProp('hidden', $event)\"\n [matTooltip]=\"helpText('hidden')\"\n >Hidden</mat-slide-toggle\n >\n <mat-slide-toggle\n [ngModel]=\"!!n.props?.disabled\"\n (ngModelChange)=\"setProp('disabled', $event)\"\n [matTooltip]=\"helpText('disabled')\"\n >Disabled</mat-slide-toggle\n >\n\n @if (isField()) {\n <mat-divider class=\"fb-inspector-divider\"></mat-divider>\n <div class=\"fb-section-title\">Display rules</div>\n\n <div\n class=\"fb-inline-row fb-inline-row-space-between fb-inline-row-align-center fb-inline-row-margin-bottom\"\n >\n <div class=\"fb-subsection-title\">Visible when</div>\n @if (!rule('visibleRule')) {\n <button mat-stroked-button type=\"button\" (click)=\"initRule('visibleRule')\">Add rule</button>\n } @else {\n <button mat-button color=\"warn\" type=\"button\" (click)=\"clearRule('visibleRule')\">Clear</button>\n }\n </div>\n @if (rule('visibleRule')) {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Depends on key</mat-label>\n <input\n matInput\n [ngModel]=\"rule('visibleRule')?.dependsOnKey\"\n (ngModelChange)=\"onDependsOnKeyInput('visibleRule', $event)\"\n [matAutocomplete]=\"visibleRuleKeysAuto\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('dependsOnKey')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-autocomplete\n #visibleRuleKeysAuto=\"matAutocomplete\"\n (optionSelected)=\"onDependsOnKeySelected('visibleRule', $event)\"\n >\n @for (option of filteredDependencyKeyOptions('visibleRule'); track option.key) {\n <mat-option [value]=\"option.key\">{{ option.label }} ({{ option.key }})</mat-option>\n }\n @if (filteredDependencyKeyOptions('visibleRule').length === 0) {\n <mat-option disabled>No keys found</mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Operator</mat-label>\n <mat-select\n [ngModel]=\"rule('visibleRule')?.operator\"\n (ngModelChange)=\"updateRule('visibleRule', { operator: $event })\"\n >\n @for (op of ruleOperators; track op.value) {\n <mat-option [value]=\"op.value\">{{ op.label }}</mat-option>\n }\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('operator')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n @if (operatorNeedsValue(rule('visibleRule')?.operator)) {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Value</mat-label>\n <input\n matInput\n [ngModel]=\"rule('visibleRule')?.value\"\n (ngModelChange)=\"updateRule('visibleRule', { value: $event })\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('ruleValue')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n }\n }\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Advanced visible expression</mat-label>\n <textarea\n matInput\n rows=\"3\"\n placeholder=\"model?.showEmail === true\"\n [ngModel]=\"ruleExpression('visibleExpression')\"\n (ngModelChange)=\"setRuleExpression('visibleExpression', $event)\"\n ></textarea>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('advancedExpression')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"fb-hint fb-hint-margin-bottom\">\n Advanced expression overrides the simple \"Visible when\" rule when provided.\n </div>\n <div class=\"fb-hint fb-hint-margin-bottom\">Example: <code>model?.showEmail === true</code></div>\n\n <div class=\"fb-inline-row fb-inline-row-space-between fb-inline-row-align-center fb-enabled-row\">\n <div class=\"fb-subsection-title\">Enabled when</div>\n @if (!rule('enabledRule')) {\n <button mat-stroked-button type=\"button\" (click)=\"initRule('enabledRule')\">Add rule</button>\n } @else {\n <button mat-button color=\"warn\" type=\"button\" (click)=\"clearRule('enabledRule')\">Clear</button>\n }\n </div>\n @if (rule('enabledRule')) {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Depends on key</mat-label>\n <input\n matInput\n [ngModel]=\"rule('enabledRule')?.dependsOnKey\"\n (ngModelChange)=\"onDependsOnKeyInput('enabledRule', $event)\"\n [matAutocomplete]=\"enabledRuleKeysAuto\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('dependsOnKey')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-autocomplete\n #enabledRuleKeysAuto=\"matAutocomplete\"\n (optionSelected)=\"onDependsOnKeySelected('enabledRule', $event)\"\n >\n @for (option of filteredDependencyKeyOptions('enabledRule'); track option.key) {\n <mat-option [value]=\"option.key\">{{ option.label }} ({{ option.key }})</mat-option>\n }\n @if (filteredDependencyKeyOptions('enabledRule').length === 0) {\n <mat-option disabled>No keys found</mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Operator</mat-label>\n <mat-select\n [ngModel]=\"rule('enabledRule')?.operator\"\n (ngModelChange)=\"updateRule('enabledRule', { operator: $event })\"\n >\n @for (op of ruleOperators; track op.value) {\n <mat-option [value]=\"op.value\">{{ op.label }}</mat-option>\n }\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('operator')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n @if (operatorNeedsValue(rule('enabledRule')?.operator)) {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Value</mat-label>\n <input\n matInput\n [ngModel]=\"rule('enabledRule')?.value\"\n (ngModelChange)=\"updateRule('enabledRule', { value: $event })\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('ruleValue')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n }\n }\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Advanced enabled expression</mat-label>\n <textarea\n matInput\n rows=\"3\"\n placeholder=\"model?.canEdit === true\"\n [ngModel]=\"ruleExpression('enabledExpression')\"\n (ngModelChange)=\"setRuleExpression('enabledExpression', $event)\"\n ></textarea>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('advancedExpression')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"fb-hint fb-hint-margin-bottom\">\n Advanced expression overrides the simple \"Enabled when\" rule when provided.\n </div>\n <div class=\"fb-hint fb-hint-margin-bottom\">Example: <code>model?.canEdit === true</code></div>\n }\n\n @if (isCol()) {\n <mat-divider class=\"fb-inspector-divider\"></mat-divider>\n <div class=\"fb-section-title\">Column</div>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Span (1-12)</mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"c?.props?.colSpan\"\n (ngModelChange)=\"setProp('colSpan', +$event)\"\n />\n </mat-form-field>\n\n <div class=\"fb-inline-row fb-inline-row-gap-sm fb-inline-row-margin-top-sm\">\n <button mat-stroked-button type=\"button\" (click)=\"splitSelectedColumn(2)\">Split x2</button>\n <button mat-stroked-button type=\"button\" (click)=\"splitSelectedColumn(3)\">Split x3</button>\n </div>\n }\n\n @if (isRow()) {\n <mat-divider class=\"fb-inspector-divider\"></mat-divider>\n <div class=\"fb-section-title\">Row</div>\n <div class=\"fb-inline-row fb-inline-row-gap-sm fb-inline-row-wrap\">\n <button mat-stroked-button type=\"button\" (click)=\"addColumnToSelectedRow()\">Add column</button>\n <button mat-stroked-button type=\"button\" (click)=\"rebalanceSelectedRow()\">Rebalance columns</button>\n </div>\n }\n </div>\n </mat-tab>\n\n <mat-tab label=\"Validation\">\n <div class=\"fb-tab-content\">\n @if (isField()) {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Validator preset</mat-label>\n <mat-select [ngModel]=\"validatorPresetId()\" (ngModelChange)=\"setValidatorPreset($event)\">\n <mat-option value=\"\">None</mat-option>\n @for (preset of validatorPresetDefinitions(); track preset.id) {\n <mat-option [value]=\"preset.id\">{{ preset.label }}</mat-option>\n }\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('validatorPreset')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n @for (preset of validatorPresetDefinitions(); track preset.id) {\n @if (validatorPresetId() === preset.id) {\n @for (param of preset.params ?? []; track param.key) {\n @if (param.type === 'boolean') {\n <mat-slide-toggle\n [ngModel]=\"!!validatorPresetParamValue(param.key)\"\n (ngModelChange)=\"setValidatorPresetParam(param, $event)\"\n >\n {{ param.label }}\n </mat-slide-toggle>\n } @else {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>{{ param.label }}</mat-label>\n <input\n matInput\n [type]=\"param.type === 'number' ? 'number' : 'text'\"\n [ngModel]=\"validatorPresetParamValue(param.key)\"\n (ngModelChange)=\"setValidatorPresetParam(param, $event)\"\n />\n </mat-form-field>\n }\n }\n }\n }\n\n <mat-slide-toggle\n [ngModel]=\"!!f?.validators?.required\"\n (ngModelChange)=\"setVal('required', $event)\"\n [matTooltip]=\"helpText('required')\"\n >Required</mat-slide-toggle\n >\n\n @if (supportsEmailValidator()) {\n <mat-slide-toggle\n [ngModel]=\"!!f?.validators?.email\"\n (ngModelChange)=\"setVal('email', $event)\"\n [matTooltip]=\"helpText('email')\"\n >Email format</mat-slide-toggle\n >\n }\n\n <div class=\"fb-grid-gap fb-grid-gap-margin-top\">\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Min length</mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"f?.validators?.minLength\"\n (ngModelChange)=\"setVal('minLength', $event === '' ? null : +$event)\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Max length</mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"f?.validators?.maxLength\"\n (ngModelChange)=\"setVal('maxLength', $event === '' ? null : +$event)\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Min</mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"f?.validators?.min\"\n (ngModelChange)=\"setVal('min', $event === '' ? null : +$event)\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Max</mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"f?.validators?.max\"\n (ngModelChange)=\"setVal('max', $event === '' ? null : +$event)\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Pattern (regex)</mat-label>\n <input matInput [ngModel]=\"f?.validators?.pattern\" (ngModelChange)=\"setVal('pattern', $event)\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('pattern')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <mat-divider class=\"fb-inspector-divider\"></mat-divider>\n <div class=\"fb-inline-row fb-inline-row-align-center fb-inline-row-gap-sm\">\n <div class=\"fb-section-title fb-section-title-no-margin\">Custom validation</div>\n <button\n mat-icon-button\n type=\"button\"\n class=\"fb-help-icon-inline\"\n [matTooltip]=\"helpText('customValidation')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </div>\n <mat-slide-toggle [ngModel]=\"customValidationEnabled()\" (ngModelChange)=\"setCustomValidationEnabled($event)\"\n >Enable custom validation</mat-slide-toggle\n >\n\n @if (customValidationEnabled()) {\n <mat-form-field appearance=\"outline\" class=\"fb-field fb-field-margin-top\">\n <mat-label>Validation expression</mat-label>\n <textarea\n matInput\n rows=\"4\"\n placeholder=\"valid = String(value ?? '').endsWith('@company.com') ? true : 'Email must end with @company.com';\"\n [ngModel]=\"customValidationExpression()\"\n (ngModelChange)=\"setCustomValidationExpression($event)\"\n ></textarea>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('customValidation')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Error message</mat-label>\n <input\n matInput\n [ngModel]=\"customValidationMessage()\"\n (ngModelChange)=\"setCustomValidationMessage($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n tabindex=\"-1\"\n class=\"fb-help-icon\"\n [matTooltip]=\"helpText('customValidationMessage')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"fb-hint fb-hint-margin-bottom\">\n Set <code>valid</code> to <code>true</code>, <code>false</code>, or a custom error message string.\n </div>\n <div class=\"fb-hint fb-hint-margin-bottom\">\n Example: <code>valid = value ? true : 'Value is required';</code>\n </div>\n }\n\n <mat-divider class=\"fb-inspector-divider\"></mat-divider>\n <div class=\"fb-inline-row fb-inline-row-align-center fb-inline-row-gap-sm\">\n <div class=\"fb-section-title fb-section-title-no-margin\">Async uniqueness</div>\n <button mat-icon-button type=\"button\" class=\"fb-help-icon-inline\" [matTooltip]=\"helpText('asyncUnique')\">\n <mat-icon>help_outline</mat-icon>\n </button>\n </div>\n <mat-slide-toggle [ngModel]=\"!!asyncUnique()\" (ngModelChange)=\"enableAsyncUnique($event)\"\n >Enable unique check</mat-slide-toggle\n >\n\n @if (asyncUnique()) {\n <mat-form-field appearance=\"outline\" class=\"fb-field fb-field-margin-top\">\n <mat-label>Source</mat-label>\n <mat-select [ngModel]=\"asyncUnique()?.sourceType\" (ngModelChange)=\"setAsyncUniqueSource($event)\">\n @for (source of asyncUniqueSources; track source.value) {\n <mat-option [value]=\"source.value\">{{ source.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (asyncUnique()?.sourceType === 'lookup') {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Lookup key</mat-label>\n <input\n matInput\n [ngModel]=\"asyncUnique()?.lookupKey\"\n (ngModelChange)=\"updateAsyncUnique({ lookupKey: $event })\"\n />\n </mat-form-field>\n }\n\n @if (asyncUnique()?.sourceType === 'url') {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>URL</mat-label>\n <input matInput [ngModel]=\"asyncUnique()?.url\" (ngModelChange)=\"updateAsyncUnique({ url: $event })\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>List path (optional)</mat-label>\n <input\n matInput\n [ngModel]=\"asyncUnique()?.listPath\"\n (ngModelChange)=\"updateAsyncUnique({ listPath: $event })\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Value key</mat-label>\n <input\n matInput\n [ngModel]=\"asyncUnique()?.valueKey\"\n (ngModelChange)=\"updateAsyncUnique({ valueKey: $event })\"\n />\n </mat-form-field>\n }\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Error message</mat-label>\n <input\n matInput\n [ngModel]=\"asyncUnique()?.message\"\n (ngModelChange)=\"updateAsyncUnique({ message: $event })\"\n />\n </mat-form-field>\n <mat-slide-toggle\n [ngModel]=\"!!asyncUnique()?.caseSensitive\"\n (ngModelChange)=\"updateAsyncUnique({ caseSensitive: $event })\"\n >Case sensitive compare</mat-slide-toggle\n >\n\n <div class=\"fb-inline-row fb-inline-row-gap-sm fb-inline-row-align-center fb-inline-row-margin-top\">\n <mat-form-field appearance=\"outline\" class=\"fb-field fb-field-no-margin\">\n <mat-label>Test value</mat-label>\n <input\n matInput\n [ngModel]=\"asyncUniqueSampleValue()\"\n (ngModelChange)=\"setAsyncUniqueSampleValue($event)\"\n />\n </mat-form-field>\n <button mat-stroked-button type=\"button\" (click)=\"runAsyncUniqueTest()\">Test</button>\n </div>\n @if (asyncUniqueTestState() !== 'idle') {\n <div\n class=\"fb-hint fb-async-test-status\"\n [class.fb-async-test-success]=\"asyncUniqueTestState() === 'success'\"\n [class.fb-async-test-loading]=\"asyncUniqueTestState() === 'loading'\"\n [class.fb-async-test-error]=\"asyncUniqueTestState() === 'error'\"\n >\n {{ asyncUniqueTestMessage() }}\n </div>\n }\n }\n } @else {\n <div class=\"fb-hint\">Validation settings are available for fields only.</div>\n }\n </div>\n </mat-tab>\n\n <mat-tab label=\"Data\">\n <div class=\"fb-tab-content\">\n @if (isField()) {\n <div class=\"fb-section-title\">Field extras</div>\n <mat-slide-toggle [ngModel]=\"!!n.props?.searchable\" (ngModelChange)=\"setProp('searchable', $event)\"\n >Searchable (select only)</mat-slide-toggle\n >\n\n @if (isChoiceField()) {\n <mat-divider class=\"fb-inspector-divider\"></mat-divider>\n <div class=\"fb-section-title\">Options source</div>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Source</mat-label>\n <mat-select [ngModel]=\"optionsSourceType()\" (ngModelChange)=\"setOptionsSourceType($event)\">\n @for (item of optionsSourceTypes; track item.value) {\n <mat-option [value]=\"item.value\">{{ item.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (optionsSourceType() === 'lookup') {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Lookup key</mat-label>\n <input\n matInput\n [ngModel]=\"f?.props?.optionsSource?.lookupKey\"\n (ngModelChange)=\"updateOptionsSource({ lookupKey: $event })\"\n />\n </mat-form-field>\n }\n\n @if (optionsSourceType() === 'url') {\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>URL</mat-label>\n <input\n matInput\n [ngModel]=\"f?.props?.optionsSource?.url\"\n (ngModelChange)=\"updateOptionsSource({ url: $event })\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>List path (optional)</mat-label>\n <input\n matInput\n [ngModel]=\"f?.props?.optionsSource?.listPath\"\n (ngModelChange)=\"updateOptionsSource({ listPath: $event })\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Label key</mat-label>\n <input\n matInput\n [ngModel]=\"f?.props?.optionsSource?.labelKey\"\n (ngModelChange)=\"updateOptionsSource({ labelKey: $event })\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Value key</mat-label>\n <input\n matInput\n [ngModel]=\"f?.props?.optionsSource?.valueKey\"\n (ngModelChange)=\"updateOptionsSource({ valueKey: $event })\"\n />\n </mat-form-field>\n }\n\n @if (optionsSourceType() !== 'static') {\n <div class=\"fb-hint fb-hint-margin-bottom\">Static options below are used as fallback.</div>\n }\n\n <div class=\"fb-inline-row fb-inline-row-space-between fb-inline-row-align-center fb-options-header\">\n <div class=\"fb-section-title fb-section-title-no-margin\">Options</div>\n <button mat-stroked-button type=\"button\" (click)=\"addOption()\">Add option</button>\n </div>\n\n @for (opt of options(); track $index) {\n <div class=\"fb-option-card\">\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Label</mat-label>\n <input matInput [ngModel]=\"opt.label\" (ngModelChange)=\"updateOption($index, { label: $event })\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>Value</mat-label>\n <input matInput [ngModel]=\"opt.value\" (ngModelChange)=\"updateOption($index, { value: $event })\" />\n </mat-form-field>\n\n <div class=\"fb-inline-row fb-inline-row-gap-sm\">\n <button mat-button type=\"button\" (click)=\"moveOption($index, -1)\">Up</button>\n <button mat-button type=\"button\" (click)=\"moveOption($index, 1)\">Down</button>\n <button mat-button color=\"warn\" type=\"button\" (click)=\"removeOption($index)\">Remove</button>\n </div>\n </div>\n }\n } @else {\n <div class=\"fb-hint fb-hint-margin-top\">Data source settings are available for select/radio fields.</div>\n }\n } @else {\n <div class=\"fb-hint\">Data settings are available for fields only.</div>\n }\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <mat-divider class=\"fb-inspector-divider\"></mat-divider>\n <button mat-button color=\"warn\" (click)=\"store.removeSelected()\">Delete selected</button>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BuilderStore } from '../../builder-core/store';\n\n@Component({\n selector: 'app-builder-history-panel',\n standalone: true,\n imports: [MatIconModule, MatButtonModule, MatTooltipModule],\n templateUrl: './builder-history-panel.component.html',\n styleUrl: './builder-history-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BuilderHistoryPanelComponent {\n readonly store = inject(BuilderStore);\n\n undoTo(displayIndex: number): void {\n const times = displayIndex + 1;\n for (let i = 0; i < times; i++) this.store.undo();\n }\n\n redoTo(displayIndex: number): void {\n const times = displayIndex + 1;\n for (let i = 0; i < times; i++) this.store.redo();\n }\n}\n","<div class=\"fb-history-panel\">\n @if (store.pastLabels().length === 0 && store.futureLabels().length === 0) {\n <div class=\"fb-history-empty\">No history yet.</div>\n }\n\n @for (label of store.futureLabels(); track $index; let i = $index) {\n <div class=\"fb-history-item fb-history-future\" (click)=\"redoTo(i)\" matTooltip=\"Redo to here\">\n <mat-icon class=\"fb-history-icon\">redo</mat-icon>\n <span class=\"fb-history-label\">{{ label }}</span>\n </div>\n }\n\n <div class=\"fb-history-item fb-history-current\">\n <mat-icon class=\"fb-history-icon\">radio_button_checked</mat-icon>\n <span class=\"fb-history-label\">Current state</span>\n </div>\n\n @for (label of store.pastLabels(); track $index; let i = $index) {\n <div class=\"fb-history-item\" (click)=\"undoTo(i)\" matTooltip=\"Undo to here\">\n <mat-icon class=\"fb-history-icon\">undo</mat-icon>\n <span class=\"fb-history-label\">{{ label }}</span>\n </div>\n }\n</div>\n","import { FormlyFieldConfig } from '@ngx-formly/core';\n\nimport { OptionItem, OptionsSource } from './model';\n\nexport interface DynamicOptionsContext {\n lookupRegistry?: Record<string, OptionItem[]>;\n fetchJson?: (url: string) => Promise<unknown>;\n}\n\nfunction asObject(v: unknown): Record<string, unknown> | null {\n return !!v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : null;\n}\n\nfunction toOptionItem(item: unknown, labelKey?: string, valueKey?: string): OptionItem | null {\n if (item == null) return null;\n if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n const value = String(item);\n return { label: value, value };\n }\n const obj = asObject(item);\n if (!obj) return null;\n\n const lk = labelKey || 'label';\n const vk = valueKey || 'value';\n const rawLabel = obj[lk] ?? obj[vk];\n const rawValue = obj[vk] ?? obj[lk];\n if (rawLabel == null || rawValue == null) return null;\n return { label: String(rawLabel), value: String(rawValue) };\n}\n\nasync function resolveFromUrl(\n source: OptionsSource,\n fetchJson: (url: string) => Promise<unknown>,\n): Promise<OptionItem[]> {\n if (!source.url) return [];\n const payload = await fetchJson(source.url);\n const list = extractListPayload(payload, source.listPath);\n if (!Array.isArray(list)) return [];\n return list.map((item) => toOptionItem(item, source.labelKey, source.valueKey)).filter((x): x is OptionItem => !!x);\n}\n\nfunction resolveByPath(root: unknown, path: string): unknown {\n const steps = path\n .split('.')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n let cur: unknown = root;\n for (const step of steps) {\n const obj = asObject(cur);\n if (!obj) return undefined;\n cur = obj[step];\n }\n return cur;\n}\n\nfunction extractListPayload(payload: unknown, listPath?: string): unknown[] | null {\n if (Array.isArray(payload)) return payload;\n const obj = asObject(payload);\n if (!obj) return null;\n\n if (listPath?.trim()) {\n const fromPath = resolveByPath(payload, listPath);\n return Array.isArray(fromPath) ? fromPath : null;\n }\n\n // Fallback for simple wrapped payloads if no path is provided.\n for (const value of Object.values(obj)) {\n if (Array.isArray(value)) return value;\n }\n return null;\n}\n\nfunction resolveFromLookup(source: OptionsSource, lookupRegistry: Record<string, OptionItem[]>): OptionItem[] {\n if (!source.lookupKey) return [];\n return [...(lookupRegistry[source.lookupKey] ?? [])];\n}\n\nasync function resolveOptions(source: OptionsSource, ctx: DynamicOptionsContext): Promise<OptionItem[] | null> {\n if (!source || source.type === 'static') return null;\n if (source.type === 'lookup') return resolveFromLookup(source, ctx.lookupRegistry ?? {});\n if (source.type === 'url') {\n const fetchJson =\n ctx.fetchJson ??\n (async (url: string): Promise<unknown> => {\n const r = await fetch(url);\n if (!r.ok) throw new Error(`Failed loading options from ${url}: ${r.status}`);\n return r.json();\n });\n return resolveFromUrl(source, fetchJson);\n }\n return null;\n}\n\nfunction collectFieldRefs(fields: FormlyFieldConfig[]): FormlyFieldConfig[] {\n const out: FormlyFieldConfig[] = [];\n const stack = [...fields];\n while (stack.length > 0) {\n const field = stack.pop()!;\n out.push(field);\n for (const child of field.fieldGroup ?? []) stack.push(child);\n }\n return out;\n}\n\nexport async function resolveDynamicOptionsForFields(\n fields: FormlyFieldConfig[],\n ctx: DynamicOptionsContext = {},\n): Promise<void> {\n const nodes = collectFieldRefs(fields);\n for (const field of nodes) {\n const props = (field.props ??= {});\n const source = props['optionsSource'] as OptionsSource | undefined;\n if (!source) continue;\n const resolved = await resolveOptions(source, ctx);\n if (resolved) props['options'] = resolved;\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\n\ninterface CustomValidationConfig {\n expression?: string;\n message?: string;\n}\n\ninterface CustomValidationContext {\n control: AbstractControl;\n field: FormlyFieldConfig;\n form: unknown;\n model: Record<string, unknown>;\n data: Record<string, unknown>;\n row: Record<string, unknown>;\n value: unknown;\n}\n\ntype FormlyChild = FormlyFieldConfig | ((field: FormlyFieldConfig) => FormlyFieldConfig);\n\nfunction hasOwnObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isFormlyField(value: FormlyChild | undefined): value is FormlyFieldConfig {\n return !!value && typeof value !== 'function';\n}\n\nfunction toModel(field: FormlyFieldConfig): Record<string, unknown> {\n return hasOwnObject(field.model) ? field.model : {};\n}\n\nfunction toRow(field: FormlyFieldConfig): Record<string, unknown> {\n const parentModel = field.parent?.model;\n return hasOwnObject(parentModel) ? parentModel : toModel(field);\n}\n\nfunction evaluateCustomExpression(expression: string, context: CustomValidationContext): true | string {\n try {\n const evaluator = new Function(\n 'ctx',\n `const { form, model, data, row, field, control, value } = ctx; let valid = true; ${expression}; return valid;`,\n ) as (ctx: CustomValidationContext) => unknown;\n\n const output = evaluator(context);\n if (output === true || output == null) return true;\n if (output === false) return 'Invalid value.';\n if (typeof output === 'string') return output;\n return output ? true : 'Invalid value.';\n } catch {\n return 'Validation expression failed.';\n }\n}\n\nfunction resolveCustomValidation(field: FormlyFieldConfig): CustomValidationConfig | null {\n const props = field.props as Record<string, unknown> | undefined;\n if (!props) return null;\n const value = props['customValidation'];\n if (!hasOwnObject(value)) return null;\n\n const expression = typeof value['expression'] === 'string' ? value['expression'].trim() : '';\n if (!expression) return null;\n\n const message = typeof value['message'] === 'string' ? value['message'].trim() : undefined;\n return { expression, message };\n}\n\nfunction bindFieldValidator(field: FormlyFieldConfig): void {\n const config = resolveCustomValidation(field);\n if (!config) return;\n\n field.validators = {\n ...(field.validators ?? {}),\n builderCustom: {\n expression: (control: AbstractControl): boolean => {\n const context: CustomValidationContext = {\n control,\n field,\n form: field.form,\n model: toModel(field),\n data: toModel(field),\n row: toRow(field),\n value: control.value,\n };\n const result = evaluateCustomExpression(config.expression ?? '', context);\n return result === true;\n },\n },\n };\n\n if (!field.validation?.messages?.['builderCustom']) {\n const fallbackMessage = config.message ?? 'Custom validation failed.';\n field.validation = {\n ...(field.validation ?? {}),\n messages: {\n ...(field.validation?.messages ?? {}),\n builderCustom: (_error: unknown, currentField: FormlyFieldConfig): string => {\n const control = currentField.formControl as AbstractControl;\n const context: CustomValidationContext = {\n control,\n field: currentField,\n form: currentField.form,\n model: toModel(currentField),\n data: toModel(currentField),\n row: toRow(currentField),\n value: currentField.formControl?.value,\n };\n const result = evaluateCustomExpression(config.expression ?? '', context);\n return result === true ? fallbackMessage : result;\n },\n },\n };\n }\n}\n\nexport function resolveCustomValidatorsForFields(fields: FormlyFieldConfig[]): void {\n const visit = (field: FormlyFieldConfig): void => {\n bindFieldValidator(field);\n\n const group = field.fieldGroup as FormlyChild[] | undefined;\n if (Array.isArray(group)) {\n for (const child of group) {\n if (!isFormlyField(child)) continue;\n visit(child);\n }\n }\n\n const arrayField = field.fieldArray as FormlyChild | undefined;\n if (isFormlyField(arrayField)) {\n visit(arrayField);\n }\n };\n\n for (const field of fields) visit(field);\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldWrapper } from '@ngx-formly/core';\n\n@Component({\n selector: 'fb-panel-wrapper',\n standalone: true,\n template: `\n <div class=\"fb-panel-wrapper\">\n <div class=\"fb-panel-wrapper-title\">{{ props?.label }}</div>\n @if (props?.description) {\n <div class=\"fb-hint fb-panel-wrapper-description\">{{ props?.description }}</div>\n }\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n styles: [\n `\n .fb-panel-wrapper {\n border: 1px solid #e2e2f0;\n border-radius: 12px;\n padding: 12px;\n margin-bottom: 12px;\n background: #fff;\n }\n\n .fb-panel-wrapper-title {\n font-weight: 700;\n margin-bottom: 8px;\n }\n\n .fb-panel-wrapper-description {\n margin-bottom: 8px;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FbPanelWrapperComponent extends FieldWrapper {}\n","import { Component } from '@angular/core';\nimport { NgFor, NgIf } from '@angular/common';\nimport { FieldArrayType, FormlyModule } from '@ngx-formly/core';\n\n@Component({\n selector: 'fb-repeat-type',\n standalone: true,\n imports: [NgFor, NgIf, FormlyModule],\n template: `\n <div class=\"fb-repeat\">\n <div class=\"fb-repeat-item\" *ngFor=\"let childField of field.fieldGroup || []; let i = index\">\n <formly-field *ngIf=\"childField\" [field]=\"childField\"></formly-field>\n <button type=\"button\" class=\"btn btn-outline-danger btn-sm\" (click)=\"remove(i)\">Remove</button>\n </div>\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" (click)=\"add()\">\n {{ props?.['addText'] || 'Add item' }}\n </button>\n </div>\n `,\n})\nexport class FbRepeatTypeComponent extends FieldArrayType {}\n","import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport { FieldType, FormlyModule, FormlyFieldConfig } from '@ngx-formly/core';\n\n@Component({\n selector: 'fb-tabs-type',\n standalone: true,\n imports: [FormlyModule],\n template: `\n <div class=\"fb-layout-shell\">\n <div class=\"fb-layout-title\">{{ props?.label || 'Tabs' }}</div>\n @if (props?.description) {\n <div class=\"fb-hint fb-layout-description\">{{ props?.description }}</div>\n }\n\n <div class=\"fb-layout-tabs\">\n @for (section of sections(); track $index; let i = $index) {\n <button\n type=\"button\"\n class=\"fb-layout-tab\"\n [class.fb-layout-tab-active]=\"activeIndex() === i\"\n (click)=\"activeIndex.set(i)\"\n >\n {{ section.label }}\n </button>\n }\n </div>\n\n @let section = activeSection();\n @if (section) {\n <div class=\"fb-layout-body\">\n @for (child of section.fields; track child.id ?? $index) {\n <formly-field [field]=\"child\"></formly-field>\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n .fb-layout-shell {\n border: 1px solid #e2e2f0;\n border-radius: 12px;\n padding: 12px;\n margin-bottom: 12px;\n background: #fff;\n }\n\n .fb-layout-title {\n font-weight: 700;\n }\n\n .fb-layout-description {\n margin-top: 4px;\n }\n\n .fb-layout-tabs {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 10px;\n }\n\n .fb-layout-tab {\n border: 1px solid #d9d9ee;\n background: #fafaff;\n color: #303046;\n border-radius: 999px;\n padding: 6px 10px;\n font-size: 12px;\n cursor: pointer;\n }\n\n .fb-layout-tab-active {\n border-color: #7b7bf0;\n background: rgba(123, 123, 240, 0.08);\n }\n\n .fb-layout-body {\n margin-top: 12px;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FbTabsTypeComponent extends FieldType {\n readonly activeIndex = signal(0);\n readonly sections = computed(() => this.toSections(this.field.fieldGroup ?? []));\n\n activeSection(): { label: string; fields: FormlyFieldConfig[] } | null {\n const sections = this.sections();\n if (sections.length === 0) return null;\n const index = Math.max(0, Math.min(this.activeIndex(), sections.length - 1));\n return sections[index] ?? null;\n }\n\n private toSections(group: FormlyFieldConfig[]): Array<{ label: string; fields: FormlyFieldConfig[] }> {\n if (group.length === 0) return [];\n const hasContainerChildren = group.some(\n (child) => Array.isArray(child.fieldGroup) && (child.fieldGroup?.length ?? 0) > 0,\n );\n if (!hasContainerChildren) {\n return [{ label: String(this.props?.['label'] ?? 'Tab'), fields: group }];\n }\n\n return group.map((child, index) => {\n const props = child.props as Record<string, unknown> | undefined;\n const label =\n typeof props?.['label'] === 'string' && props['label'].trim() ? String(props['label']) : `Tab ${index + 1}`;\n return { label, fields: [child] };\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport { FieldType, FormlyModule, FormlyFieldConfig } from '@ngx-formly/core';\n\n@Component({\n selector: 'fb-stepper-type',\n standalone: true,\n imports: [FormlyModule],\n template: `\n <div class=\"fb-layout-shell\">\n <div class=\"fb-layout-title\">{{ props?.label || 'Stepper' }}</div>\n @if (props?.description) {\n <div class=\"fb-hint fb-layout-description\">{{ props?.description }}</div>\n }\n\n <div class=\"fb-layout-steps\">\n @for (section of sections(); track $index; let i = $index) {\n <div class=\"fb-layout-step\" [class.fb-layout-step-active]=\"activeIndex() === i\">\n {{ i + 1 }}. {{ section.label }}\n </div>\n }\n </div>\n\n @let section = activeSection();\n @if (section) {\n <div class=\"fb-layout-body\">\n @for (child of section.fields; track child.id ?? $index) {\n <formly-field [field]=\"child\"></formly-field>\n }\n </div>\n }\n\n <div class=\"fb-layout-actions\">\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary btn-sm\"\n (click)=\"previous()\"\n [disabled]=\"activeIndex() <= 0\"\n >\n Back\n </button>\n <button\n type=\"button\"\n class=\"btn btn-outline-primary btn-sm\"\n (click)=\"next()\"\n [disabled]=\"activeIndex() >= sections().length - 1\"\n >\n Next\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n .fb-layout-shell {\n border: 1px solid #e2e2f0;\n border-radius: 12px;\n padding: 12px;\n margin-bottom: 12px;\n background: #fff;\n }\n\n .fb-layout-title {\n font-weight: 700;\n }\n\n .fb-layout-description {\n margin-top: 4px;\n }\n\n .fb-layout-steps {\n display: grid;\n gap: 6px;\n margin-top: 10px;\n }\n\n .fb-layout-step {\n font-size: 12px;\n color: #5e5e78;\n }\n\n .fb-layout-step-active {\n color: #24243a;\n font-weight: 700;\n }\n\n .fb-layout-body {\n margin-top: 12px;\n }\n\n .fb-layout-actions {\n display: flex;\n justify-content: space-between;\n margin-top: 12px;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FbStepperTypeComponent extends FieldType {\n readonly activeIndex = signal(0);\n readonly sections = computed(() => this.toSections(this.field.fieldGroup ?? []));\n\n activeSection(): { label: string; fields: FormlyFieldConfig[] } | null {\n const sections = this.sections();\n if (sections.length === 0) return null;\n const index = Math.max(0, Math.min(this.activeIndex(), sections.length - 1));\n return sections[index] ?? null;\n }\n\n previous(): void {\n this.activeIndex.update((index) => Math.max(0, index - 1));\n }\n\n next(): void {\n const max = Math.max(0, this.sections().length - 1);\n this.activeIndex.update((index) => Math.min(max, index + 1));\n }\n\n private toSections(group: FormlyFieldConfig[]): Array<{ label: string; fields: FormlyFieldConfig[] }> {\n if (group.length === 0) return [];\n const hasContainerChildren = group.some(\n (child) => Array.isArray(child.fieldGroup) && (child.fieldGroup?.length ?? 0) > 0,\n );\n if (!hasContainerChildren) {\n return [{ label: String(this.props?.['label'] ?? 'Step'), fields: group }];\n }\n\n return group.map((child, index) => {\n const props = child.props as Record<string, unknown> | undefined;\n const label =\n typeof props?.['label'] === 'string' && props['label'].trim() ? String(props['label']) : `Step ${index + 1}`;\n return { label, fields: [child] };\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport { FieldType, FormlyModule, FormlyFieldConfig } from '@ngx-formly/core';\n\n@Component({\n selector: 'fb-accordion-type',\n standalone: true,\n imports: [FormlyModule],\n template: `\n <div class=\"fb-layout-shell\">\n <div class=\"fb-layout-title\">{{ props?.label || 'Accordion' }}</div>\n @if (props?.description) {\n <div class=\"fb-hint fb-layout-description\">{{ props?.description }}</div>\n }\n\n <div class=\"fb-layout-accordion\">\n @for (section of sections(); track $index; let i = $index) {\n <div class=\"fb-layout-section\">\n <button type=\"button\" class=\"fb-layout-toggle\" (click)=\"toggle(i)\">\n <span>{{ section.label }}</span>\n <span>{{ openIndex() === i ? '-' : '+' }}</span>\n </button>\n @if (openIndex() === i) {\n <div class=\"fb-layout-body\">\n @for (child of section.fields; track child.id ?? $index) {\n <formly-field [field]=\"child\"></formly-field>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n `,\n styles: [\n `\n .fb-layout-shell {\n border: 1px solid #e2e2f0;\n border-radius: 12px;\n padding: 12px;\n margin-bottom: 12px;\n background: #fff;\n }\n\n .fb-layout-title {\n font-weight: 700;\n }\n\n .fb-layout-description {\n margin-top: 4px;\n }\n\n .fb-layout-accordion {\n display: grid;\n gap: 8px;\n margin-top: 10px;\n }\n\n .fb-layout-section {\n border: 1px solid #e2e2f0;\n border-radius: 10px;\n }\n\n .fb-layout-toggle {\n width: 100%;\n border: 0;\n background: #fafaff;\n padding: 8px 10px;\n display: flex;\n justify-content: space-between;\n font-weight: 600;\n cursor: pointer;\n }\n\n .fb-layout-body {\n padding: 10px;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FbAccordionTypeComponent extends FieldType {\n readonly openIndex = signal(0);\n readonly sections = computed(() => this.toSections(this.field.fieldGroup ?? []));\n\n toggle(index: number): void {\n this.openIndex.update((current) => (current === index ? -1 : index));\n }\n\n private toSections(group: FormlyFieldConfig[]): Array<{ label: string; fields: FormlyFieldConfig[] }> {\n if (group.length === 0) return [];\n const hasContainerChildren = group.some(\n (child) => Array.isArray(child.fieldGroup) && (child.fieldGroup?.length ?? 0) > 0,\n );\n if (!hasContainerChildren) {\n return [{ label: String(this.props?.['label'] ?? 'Section'), fields: group }];\n }\n\n return group.map((child, index) => {\n const props = child.props as Record<string, unknown> | undefined;\n const label =\n typeof props?.['label'] === 'string' && props['label'].trim() ? String(props['label']) : `Section ${index + 1}`;\n return { label, fields: [child] };\n });\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';\n\nimport { FIELD_VALIDATION_PATTERNS } from '../../builder-core/validation-presets';\n\nexport interface PreviewFormState {\n submitted?: boolean;\n}\n\nfunction hasError(control: AbstractControl | null | undefined): boolean {\n return !!control && control.invalid;\n}\n\nexport function previewShowError(field: FormlyFieldConfig): boolean {\n const control = field.formControl;\n const submitted = Boolean((field.options?.formState as PreviewFormState | undefined)?.submitted);\n return hasError(control) && (Boolean(control?.dirty) || Boolean(control?.touched) || submitted);\n}\n\nexport function createPreviewOptions(): FormlyFormOptions {\n return {\n formState: { submitted: false },\n showError: previewShowError,\n };\n}\n\nfunction patternMessage(field: FormlyFieldConfig): string {\n const pattern = String(field.props?.['pattern'] ?? '');\n const presetId = String((field.props?.['validatorPreset'] as { id?: string } | undefined)?.id ?? '');\n const type = String(field.props?.['type'] ?? '');\n\n if (presetId === 'phone-e164' || pattern === FIELD_VALIDATION_PATTERNS.tel || type === 'tel') {\n return 'Please enter a valid phone number in international format (example: +15551234567).';\n }\n if (presetId === 'url-http' || pattern === FIELD_VALIDATION_PATTERNS.url || type === 'url') {\n return 'Please enter a valid URL starting with http:// or https://.';\n }\n return 'The value does not match the required format.';\n}\n\nexport const PREVIEW_VALIDATION_MESSAGES = [\n { name: 'required', message: 'This field is required.' },\n { name: 'email', message: 'Please enter a valid email address.' },\n {\n name: 'minLength',\n message: (_: unknown, field: FormlyFieldConfig) => `Minimum length is ${field.props?.['minLength']}.`,\n },\n {\n name: 'maxLength',\n message: (_: unknown, field: FormlyFieldConfig) => `Maximum length is ${field.props?.['maxLength']}.`,\n },\n { name: 'min', message: (_: unknown, field: FormlyFieldConfig) => `Minimum value is ${field.props?.['min']}.` },\n { name: 'max', message: (_: unknown, field: FormlyFieldConfig) => `Maximum value is ${field.props?.['max']}.` },\n { name: 'pattern', message: (_: unknown, field: FormlyFieldConfig) => patternMessage(field) },\n {\n name: 'asyncUnique',\n message: (_: unknown, field: FormlyFieldConfig) =>\n String(field.props?.['asyncUnique']?.['message'] ?? 'Value must be unique.'),\n },\n {\n name: 'builderCustom',\n message: (_: unknown, field: FormlyFieldConfig) =>\n String(field.props?.['customValidation']?.['message'] ?? 'Custom validation failed.'),\n },\n] as const;\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, signal } from '@angular/core';\nimport { JsonPipe } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FormlyConfig, FormlyFormOptions, FormlyModule, provideFormlyCore } from '@ngx-formly/core';\nimport { FormlyMaterialModule, withFormlyMaterial } from '@ngx-formly/material';\n\nimport { BuilderStore } from '../../builder-core/store';\nimport { builderToFormly } from '../../builder-core/adapter';\nimport { resolveDynamicOptionsForFields } from '../../builder-core/dynamic-options';\nimport { resolveAsyncValidatorsForFields } from '../../builder-core/async-validators';\nimport { resolveCustomValidatorsForFields } from '../../builder-core/custom-validators';\nimport { BuilderDocument, OptionItem } from '../../builder-core/model';\nimport type { FormlyConfigExtension } from '../../builder-core/plugins';\nimport { FbPanelWrapperComponent } from './fb-panel-wrapper.component';\nimport { FbRepeatTypeComponent } from './fb-repeat.type.component';\nimport { FbTabsTypeComponent } from './fb-tabs.type.component';\nimport { FbStepperTypeComponent } from './fb-stepper.type.component';\nimport { FbAccordionTypeComponent } from './fb-accordion.type.component';\nimport { createPreviewOptions, PREVIEW_VALIDATION_MESSAGES } from './formly-preview-config';\n\n@Component({\n selector: 'app-preview-material-dialog',\n standalone: true,\n imports: [\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n ReactiveFormsModule,\n FormlyModule,\n FormlyMaterialModule,\n JsonPipe,\n ],\n styleUrl: './preview-dialog.component.scss',\n providers: [\n provideFormlyCore([\n ...withFormlyMaterial(),\n { wrappers: [{ name: 'panel', component: FbPanelWrapperComponent }] },\n {\n types: [\n { name: 'repeat', component: FbRepeatTypeComponent },\n { name: 'fb-tabs', component: FbTabsTypeComponent },\n { name: 'fb-stepper', component: FbStepperTypeComponent },\n { name: 'fb-accordion', component: FbAccordionTypeComponent },\n ],\n },\n { validators: [{ name: 'email', validation: Validators.email }] },\n { validationMessages: PREVIEW_VALIDATION_MESSAGES as any },\n ]),\n ],\n templateUrl: './preview-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PreviewMaterialDialogComponent {\n readonly store = inject(BuilderStore);\n readonly ref = inject(MatDialogRef<PreviewMaterialDialogComponent>);\n readonly cdr = inject(ChangeDetectorRef);\n private readonly formlyConfig = inject(FormlyConfig);\n readonly data = inject(MAT_DIALOG_DATA) as {\n renderer?: 'material' | 'bootstrap';\n lookupRegistry?: Record<string, OptionItem[]>;\n doc?: BuilderDocument;\n formlyExtensions?: readonly FormlyConfigExtension[];\n };\n readonly lookupRegistry = this.data?.lookupRegistry ?? this.store.lookupRegistry();\n\n readonly form = new FormGroup({});\n model: any = {};\n readonly options: FormlyFormOptions = createPreviewOptions();\n fields = builderToFormly(this.data?.doc ?? this.store.doc());\n readonly viewport = signal<'desktop' | 'tablet' | 'mobile'>('desktop');\n\n constructor() {\n this.applyFormlyExtensions();\n void this.loadDynamicOptions();\n }\n\n get isBootstrap(): boolean {\n return this.data?.renderer === 'bootstrap';\n }\n\n close(): void {\n this.ref.close();\n }\n\n submit(): void {\n const formState = this.options.formState as { submitted?: boolean };\n formState.submitted = true;\n this.form.markAllAsTouched();\n this.form.updateValueAndValidity();\n if (this.form.invalid) return;\n alert(JSON.stringify(this.model, null, 2));\n }\n\n reset(): void {\n this.form.reset();\n this.model = {};\n const formState = this.options.formState as { submitted?: boolean };\n formState.submitted = false;\n }\n\n setViewport(viewport: 'desktop' | 'tablet' | 'mobile'): void {\n this.viewport.set(viewport);\n }\n\n viewportMaxWidth(): number | null {\n if (this.viewport() === 'tablet') return 820;\n if (this.viewport() === 'mobile') return 390;\n return null;\n }\n\n async loadDynamicOptions(): Promise<void> {\n await resolveDynamicOptionsForFields(this.fields, {\n lookupRegistry: this.lookupRegistry,\n });\n resolveAsyncValidatorsForFields(this.fields, {\n lookupRegistry: this.lookupRegistry,\n });\n resolveCustomValidatorsForFields(this.fields);\n this.fields = [...this.fields];\n this.cdr.markForCheck();\n }\n\n private applyFormlyExtensions(): void {\n for (const extension of this.data?.formlyExtensions ?? []) {\n this.formlyConfig.addConfig(extension as any);\n }\n }\n}\n","<h2 mat-dialog-title class=\"fb-preview-dialog-title\">\n <span>Preview</span>\n <div class=\"fb-preview-viewports\">\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"setViewport('desktop')\"\n [class.fb-preview-viewport-active]=\"viewport() === 'desktop'\"\n matTooltip=\"Desktop (~100%)\"\n >\n <mat-icon>desktop_mac</mat-icon> Desktop\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"setViewport('tablet')\"\n [class.fb-preview-viewport-active]=\"viewport() === 'tablet'\"\n matTooltip=\"Tablet (820px)\"\n >\n <mat-icon>tablet</mat-icon> Tablet\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"setViewport('mobile')\"\n [class.fb-preview-viewport-active]=\"viewport() === 'mobile'\"\n matTooltip=\"Mobile (390px)\"\n >\n <mat-icon>phone_iphone</mat-icon> Mobile\n </button>\n </div>\n <span class=\"fb-hint fb-preview-renderer-badge\">{{ isBootstrap ? 'Bootstrap' : 'Material' }}</span>\n</h2>\n\n<mat-dialog-content class=\"fb-form\">\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div\n class=\"fb-preview-viewport\"\n [class.fb-preview-desktop]=\"viewport() === 'desktop'\"\n [class.fb-preview-tablet]=\"viewport() === 'tablet'\"\n [class.fb-preview-mobile]=\"viewport() === 'mobile'\"\n [class.fb-preview-force-stack]=\"viewport() !== 'desktop'\"\n [style.max-width.px]=\"viewportMaxWidth()\"\n >\n <formly-form [form]=\"form\" [model]=\"model\" [fields]=\"fields\" [options]=\"options\"></formly-form>\n </div>\n\n <div class=\"fb-preview-actions\">\n @if (isBootstrap) {\n <button class=\"btn btn-primary\" type=\"submit\">Submit</button>\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"reset()\">Reset</button>\n } @else {\n <button mat-raised-button color=\"primary\" type=\"submit\">Submit</button>\n <button mat-button type=\"button\" (click)=\"reset()\">Reset</button>\n }\n </div>\n\n <div class=\"fb-preview-model\">\n <div class=\"fb-hint\">Model</div>\n <pre class=\"fb-preview-model-json\">{{ model | json }}</pre>\n </div>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n @if (isBootstrap) {\n <button class=\"btn btn-link\" (click)=\"close()\">Close</button>\n } @else {\n <button mat-button (click)=\"close()\">Close</button>\n }\n</mat-dialog-actions>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, signal } from '@angular/core';\nimport { JsonPipe } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FormlyConfig, FormlyFormOptions, FormlyModule, provideFormlyCore } from '@ngx-formly/core';\nimport { FormlyBootstrapModule, withFormlyBootstrap } from '@ngx-formly/bootstrap';\n\nimport { BuilderStore } from '../../builder-core/store';\nimport { builderToFormly } from '../../builder-core/adapter';\nimport { resolveDynamicOptionsForFields } from '../../builder-core/dynamic-options';\nimport { resolveAsyncValidatorsForFields } from '../../builder-core/async-validators';\nimport { resolveCustomValidatorsForFields } from '../../builder-core/custom-validators';\nimport { BuilderDocument, OptionItem } from '../../builder-core/model';\nimport type { FormlyConfigExtension } from '../../builder-core/plugins';\nimport { FbPanelWrapperComponent } from './fb-panel-wrapper.component';\nimport { FbRepeatTypeComponent } from './fb-repeat.type.component';\nimport { FbTabsTypeComponent } from './fb-tabs.type.component';\nimport { FbStepperTypeComponent } from './fb-stepper.type.component';\nimport { FbAccordionTypeComponent } from './fb-accordion.type.component';\nimport { createPreviewOptions, PREVIEW_VALIDATION_MESSAGES } from './formly-preview-config';\n\n@Component({\n selector: 'app-preview-bootstrap-dialog',\n standalone: true,\n imports: [\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n ReactiveFormsModule,\n FormlyModule,\n FormlyBootstrapModule,\n JsonPipe,\n ],\n styleUrl: './preview-dialog.component.scss',\n providers: [\n provideFormlyCore([\n ...withFormlyBootstrap(),\n { wrappers: [{ name: 'panel', component: FbPanelWrapperComponent }] },\n {\n types: [\n { name: 'repeat', component: FbRepeatTypeComponent },\n { name: 'fb-tabs', component: FbTabsTypeComponent },\n { name: 'fb-stepper', component: FbStepperTypeComponent },\n { name: 'fb-accordion', component: FbAccordionTypeComponent },\n ],\n },\n { validators: [{ name: 'email', validation: Validators.email }] },\n { validationMessages: PREVIEW_VALIDATION_MESSAGES as any },\n ]),\n ],\n templateUrl: './preview-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PreviewBootstrapDialogComponent {\n readonly store = inject(BuilderStore);\n readonly ref = inject(MatDialogRef<PreviewBootstrapDialogComponent>);\n readonly cdr = inject(ChangeDetectorRef);\n private readonly formlyConfig = inject(FormlyConfig);\n readonly data = inject(MAT_DIALOG_DATA) as {\n renderer?: 'material' | 'bootstrap';\n lookupRegistry?: Record<string, OptionItem[]>;\n doc?: BuilderDocument;\n formlyExtensions?: readonly FormlyConfigExtension[];\n };\n readonly lookupRegistry = this.data?.lookupRegistry ?? this.store.lookupRegistry();\n\n readonly form = new FormGroup({});\n model: any = {};\n readonly options: FormlyFormOptions = createPreviewOptions();\n fields = builderToFormly(this.data?.doc ?? this.store.doc());\n readonly viewport = signal<'desktop' | 'tablet' | 'mobile'>('desktop');\n\n constructor() {\n this.applyFormlyExtensions();\n void this.loadDynamicOptions();\n }\n\n get isBootstrap(): boolean {\n return this.data?.renderer === 'bootstrap';\n }\n\n close(): void {\n this.ref.close();\n }\n\n submit(): void {\n const formState = this.options.formState as { submitted?: boolean };\n formState.submitted = true;\n this.form.markAllAsTouched();\n this.form.updateValueAndValidity();\n if (this.form.invalid) return;\n alert(JSON.stringify(this.model, null, 2));\n }\n\n reset(): void {\n this.form.reset();\n this.model = {};\n const formState = this.options.formState as { submitted?: boolean };\n formState.submitted = false;\n }\n\n setViewport(viewport: 'desktop' | 'tablet' | 'mobile'): void {\n this.viewport.set(viewport);\n }\n\n viewportMaxWidth(): number | null {\n if (this.viewport() === 'tablet') return 820;\n if (this.viewport() === 'mobile') return 390;\n return null;\n }\n\n async loadDynamicOptions(): Promise<void> {\n await resolveDynamicOptionsForFields(this.fields, {\n lookupRegistry: this.lookupRegistry,\n });\n resolveAsyncValidatorsForFields(this.fields, {\n lookupRegistry: this.lookupRegistry,\n });\n resolveCustomValidatorsForFields(this.fields);\n this.fields = [...this.fields];\n this.cdr.markForCheck();\n }\n\n private applyFormlyExtensions(): void {\n for (const extension of this.data?.formlyExtensions ?? []) {\n this.formlyConfig.addConfig(extension as any);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-json-dialog',\n standalone: true,\n imports: [MatDialogModule, MatButtonModule, MatFormFieldModule, MatInputModule, FormsModule],\n templateUrl: './json-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JsonDialogComponent {\n private readonly ref = inject(MatDialogRef<JsonDialogComponent>);\n readonly data = inject(MAT_DIALOG_DATA) as {\n mode:\n | 'exportFormly'\n | 'exportBuilder'\n | 'exportJsonSchema'\n | 'exportTemplates'\n | 'import'\n | 'importFormly'\n | 'importPalette'\n | 'importTemplates';\n json: string;\n schemaVersion?: number;\n };\n\n readonly json = signal(this.data.json ?? '');\n\n close(): void {\n this.ref.close();\n }\n\n done(): void {\n this.ref.close({ json: this.json() });\n }\n\n copy(): void {\n navigator.clipboard.writeText(this.json()).catch(() => {});\n }\n\n download(): void {\n const blob = new Blob([this.json()], { type: 'application/json;charset=utf-8' });\n const href = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = href;\n a.download = this.fileName();\n a.click();\n URL.revokeObjectURL(href);\n }\n\n private fileName(): string {\n switch (this.data.mode) {\n case 'exportFormly':\n return 'formly-export.json';\n case 'exportBuilder':\n return `builder-export.v${this.data.schemaVersion ?? 'x'}.json`;\n case 'exportJsonSchema':\n return 'json-schema-export.json';\n case 'importFormly':\n return 'formly-import.json';\n case 'importPalette':\n return 'palette-import.json';\n case 'exportTemplates':\n return 'field-templates-export.json';\n case 'importTemplates':\n return 'field-templates-import.json';\n case 'import':\n default:\n return 'builder-import.json';\n }\n }\n}\n","<h2 mat-dialog-title>\n {{\n data.mode === 'exportFormly'\n ? 'Export Formly JSON'\n : data.mode === 'exportBuilder'\n ? 'Export Builder JSON'\n : data.mode === 'exportJsonSchema'\n ? 'Export JSON Schema'\n : data.mode === 'importFormly'\n ? 'Import Formly JSON'\n : data.mode === 'importPalette'\n ? 'Import Palette JSON'\n : data.mode === 'exportTemplates'\n ? 'Export Field Templates JSON'\n : data.mode === 'importTemplates'\n ? 'Import Field Templates JSON'\n : 'Import Builder JSON'\n }}\n</h2>\n\n<mat-dialog-content>\n <mat-form-field appearance=\"outline\" class=\"fb-field\">\n <mat-label>JSON</mat-label>\n <textarea matInput rows=\"18\" [ngModel]=\"json()\" (ngModelChange)=\"json.set($event)\"></textarea>\n </mat-form-field>\n <div class=\"fb-hint\">\n {{\n data.mode === 'exportFormly'\n ? 'FormlyFieldConfig[] ready to use in an application.'\n : data.mode === 'exportBuilder'\n ? 'Builder document JSON (domain tree). Schema v' + (data.schemaVersion ?? '?') + '.'\n : data.mode === 'exportJsonSchema'\n ? 'JSON Schema (Draft 7). Suitable for backend validation and ngx-formly JSON Schema support.'\n : data.mode === 'exportTemplates'\n ? 'Saved field template palette items.'\n : data.mode === 'importPalette'\n ? 'Palette item array JSON. Must include unique ids and valid node definitions.'\n : data.mode === 'importTemplates'\n ? 'Field template palette JSON. Field node templates only.'\n : 'Builder document JSON (domain tree).'\n }}\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n @if (\n data.mode === 'exportFormly' ||\n data.mode === 'exportBuilder' ||\n data.mode === 'exportJsonSchema' ||\n data.mode === 'exportTemplates'\n ) {\n <button mat-button (click)=\"copy()\">Copy</button>\n }\n <button mat-button (click)=\"download()\">Download</button>\n <button mat-button (click)=\"close()\">Close</button>\n <button mat-raised-button color=\"primary\" (click)=\"done()\">\n {{\n data.mode === 'import' ||\n data.mode === 'importFormly' ||\n data.mode === 'importPalette' ||\n data.mode === 'importTemplates'\n ? 'Import'\n : 'Done'\n }}\n </button>\n</mat-dialog-actions>\n","import { BuilderDocument, BuilderNode, ContainerNode, FieldKind, FieldNode, isFieldNode } from './model';\n\ntype JsonSchemaProperty = Record<string, unknown>;\n\ninterface SchemaCollector {\n properties: Record<string, JsonSchemaProperty>;\n required: string[];\n}\n\nfunction fieldKindToType(fieldKind: FieldKind): {\n type: string;\n format?: string;\n items?: Record<string, unknown>;\n} {\n switch (fieldKind) {\n case 'number':\n return { type: 'number' };\n case 'checkbox':\n return { type: 'boolean' };\n case 'date':\n return { type: 'string', format: 'date' };\n case 'email':\n return { type: 'string', format: 'email' };\n case 'tel':\n return { type: 'string', format: 'phone' };\n case 'url':\n return { type: 'string', format: 'uri' };\n case 'multiselect':\n return { type: 'array', items: { type: 'string' } };\n case 'repeater':\n return { type: 'array', items: { type: 'object' } };\n default:\n return { type: 'string' };\n }\n}\n\nfunction fieldNodeToProperty(node: FieldNode): [string, JsonSchemaProperty] {\n const safeKey =\n typeof node.props.key === 'string' && node.props.key.trim().length > 0 ? node.props.key.trim() : node.id;\n\n const { type, format, items } = fieldKindToType(node.fieldKind);\n const prop: JsonSchemaProperty = { type };\n\n if (node.props.label) prop['title'] = node.props.label;\n if (node.props.description) prop['description'] = node.props.description;\n\n const resolvedFormat = format ?? (node.validators.email ? 'email' : undefined);\n if (resolvedFormat) prop['format'] = resolvedFormat;\n\n if (items) prop['items'] = { ...items };\n applyEnumConstraint(node, prop);\n applyValidatorConstraints(node, prop);\n\n return [safeKey, prop];\n}\n\nfunction applyEnumConstraint(node: FieldNode, prop: JsonSchemaProperty): void {\n const isChoiceField = node.fieldKind === 'radio' || node.fieldKind === 'select' || node.fieldKind === 'multiselect';\n const options = node.props.options ?? [];\n if (!isChoiceField || options.length === 0) return;\n\n const enumValues = options.map((option) => option.value);\n if (node.fieldKind === 'multiselect') {\n (prop['items'] as Record<string, unknown>)['enum'] = enumValues;\n return;\n }\n prop['enum'] = enumValues;\n}\n\nfunction applyValidatorConstraints(node: FieldNode, prop: JsonSchemaProperty): void {\n if (node.validators.minLength != null) prop['minLength'] = node.validators.minLength;\n if (node.validators.maxLength != null) prop['maxLength'] = node.validators.maxLength;\n if (node.validators.pattern) prop['pattern'] = node.validators.pattern;\n if (node.validators.min != null) prop['minimum'] = node.validators.min;\n if (node.validators.max != null) prop['maximum'] = node.validators.max;\n}\n\nfunction collectFields(doc: BuilderDocument, node: BuilderNode, visited: Set<string>, out: SchemaCollector): void {\n if (visited.has(node.id)) return;\n visited.add(node.id);\n\n if (isFieldNode(node)) {\n const [key, prop] = fieldNodeToProperty(node);\n out.properties[key] = prop;\n if (node.validators.required) out.required.push(key);\n return;\n }\n\n for (const childId of (node as ContainerNode).children) {\n const child = doc.nodes[childId];\n if (child) collectFields(doc, child, visited, out);\n }\n}\n\n/**\n * Converts a BuilderDocument to a JSON Schema Draft 7 object.\n * Containers (panels, rows, cols, tabs, stepper, accordion) are structural and\n * their field children are flattened into the top-level `properties` object.\n */\nexport function builderToJsonSchema(doc: BuilderDocument): object {\n const root = doc.nodes[doc.rootId];\n if (!root || !('children' in root)) {\n return { $schema: 'http://json-schema.org/draft-07/schema#', type: 'object', properties: {} };\n }\n\n const out: SchemaCollector = { properties: {}, required: [] };\n const visited = new Set<string>([doc.rootId]);\n\n for (const childId of (root as ContainerNode).children) {\n const child = doc.nodes[childId];\n if (child) collectFields(doc, child, visited, out);\n }\n\n const schema: Record<string, unknown> = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: out.properties,\n };\n\n if (out.required.length > 0) schema['required'] = out.required;\n\n return schema;\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface ConfirmDialogData {\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n}\n\n@Component({\n selector: 'app-confirm-dialog',\n standalone: true,\n imports: [MatDialogModule, MatButtonModule],\n template: `\n <h2 mat-dialog-title>{{ data.title }}</h2>\n <mat-dialog-content>\n <p>{{ data.message }}</p>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <button mat-button type=\"button\" (click)=\"close(false)\">{{ data.cancelText ?? 'Cancel' }}</button>\n <button mat-raised-button color=\"warn\" type=\"button\" (click)=\"close(true)\">\n {{ data.confirmText ?? 'Confirm' }}\n </button>\n </mat-dialog-actions>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent {\n private readonly ref = inject(MatDialogRef<ConfirmDialogComponent, boolean>);\n readonly data = inject<ConfirmDialogData>(MAT_DIALOG_DATA);\n\n close(confirmed: boolean): void {\n this.ref.close(confirmed);\n }\n}\n","export const SAMPLE_PALETTE_JSON = JSON.stringify(\n [\n {\n id: 'input',\n category: 'Common Fields',\n title: 'Input',\n nodeType: 'field',\n fieldKind: 'input',\n defaults: { props: { label: 'Input', placeholder: 'Enter value' } },\n },\n {\n id: 'textarea',\n category: 'Common Fields',\n title: 'Textarea',\n nodeType: 'field',\n fieldKind: 'textarea',\n defaults: { props: { label: 'Textarea', placeholder: 'Enter details' } },\n },\n {\n id: 'rating',\n category: 'Advanced Fields',\n title: 'Rating (1-5)',\n nodeType: 'field',\n fieldKind: 'number',\n defaults: {\n props: { label: 'Rating', placeholder: '1 to 5' },\n validators: { min: 1, max: 5 },\n },\n },\n {\n id: 'row',\n category: 'Layout',\n title: 'Row',\n nodeType: 'row',\n defaults: { props: {}, childrenTemplate: ['col', 'col'] },\n },\n {\n id: 'col',\n category: 'Layout',\n title: 'Column',\n nodeType: 'col',\n defaults: { props: { colSpan: 6 } },\n },\n {\n id: 'panel',\n category: 'Layout',\n title: 'Panel',\n nodeType: 'panel',\n defaults: { props: { title: 'Panel' }, childrenTemplate: ['row'] },\n },\n ],\n null,\n 2,\n);\n","import { PaletteItem } from '../builder-core/registry';\n\nexport function mergePaletteById(base: readonly PaletteItem[], extra: readonly PaletteItem[]): PaletteItem[] {\n const out = [...base];\n const seen = new Set(out.map((item) => item.id));\n for (const item of extra) {\n if (seen.has(item.id)) continue;\n out.push(item);\n seen.add(item.id);\n }\n return out;\n}\n","export function handleHistoryShortcut(\n event: KeyboardEvent,\n metaOrCtrl: boolean,\n handlers: { undo: () => void; redo: () => void },\n): boolean {\n if (!metaOrCtrl) return false;\n const key = event.key.toLowerCase();\n if (key === 'z') {\n event.preventDefault();\n if (event.shiftKey) handlers.redo();\n else handlers.undo();\n return true;\n }\n if (key !== 'y') return false;\n event.preventDefault();\n handlers.redo();\n return true;\n}\n\nexport function handleClipboardShortcut(\n event: KeyboardEvent,\n metaOrCtrl: boolean,\n handlers: { copy: () => void; paste: () => void; duplicate: () => void },\n): boolean {\n if (!metaOrCtrl) return false;\n const key = event.key.toLowerCase();\n if (key === 'c') {\n event.preventDefault();\n handlers.copy();\n return true;\n }\n if (key === 'v') {\n event.preventDefault();\n handlers.paste();\n return true;\n }\n if (key === 'd') {\n event.preventDefault();\n handlers.duplicate();\n return true;\n }\n return false;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { firstValueFrom } from 'rxjs';\n\nimport { BuilderStore } from '../builder-core/store';\nimport { BuilderPaletteComponent } from './palette/builder-palette.component';\nimport { BuilderCanvasComponent } from './canvas/builder-canvas.component';\nimport { BuilderInspectorComponent } from './inspector/builder-inspector.component';\nimport { BuilderHistoryPanelComponent } from './history/builder-history-panel.component';\nimport { PreviewMaterialDialogComponent } from './preview/preview-material-dialog.component';\nimport { PreviewBootstrapDialogComponent } from './preview/preview-bootstrap-dialog.component';\nimport { JsonDialogComponent } from './preview/json-dialog.component';\nimport { formlyToBuilder } from '../builder-core/formly-import';\nimport { builderToFormly } from '../builder-core/adapter';\nimport { builderToJsonSchema } from '../builder-core/json-schema';\nimport { parsePaletteConfig } from '../builder-core/palette-config';\nimport { PALETTE, PaletteItem } from '../builder-core/registry';\nimport { composePalette, type BuilderPlugin } from '../builder-core/plugins';\nimport type { FormlyFieldConfig } from '@ngx-formly/core';\nimport { ConfirmDialogComponent } from './shared/confirm-dialog.component';\nimport { SAMPLE_PALETTE_JSON } from './builder-page.constants';\nimport type { BuilderDiagnosticsReport } from '../builder-core/diagnostics';\nimport { isFieldNode, type BuilderDocument } from '../builder-core/model';\nimport { BuilderTemplatesService } from './builder-templates.service';\nimport { mergePaletteById } from './builder-page.palette';\nimport { handleClipboardShortcut, handleHistoryShortcut } from './builder-page.shortcuts';\n\n@Component({\n selector: 'app-builder-page, formly-builder',\n standalone: true,\n imports: [\n MatButtonModule,\n MatIconModule,\n MatDialogModule,\n MatSnackBarModule,\n MatMenuModule,\n MatTooltipModule,\n MatDividerModule,\n DragDropModule,\n BuilderPaletteComponent,\n BuilderCanvasComponent,\n BuilderInspectorComponent,\n BuilderHistoryPanelComponent,\n ],\n providers: [BuilderStore],\n templateUrl: './builder-page.component.html',\n styleUrl: './builder-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BuilderPageComponent implements OnInit, OnChanges {\n readonly store = inject(BuilderStore);\n private readonly dialog = inject(MatDialog);\n private readonly snackBar = inject(MatSnackBar);\n private readonly templates = inject(BuilderTemplatesService);\n readonly diagnosticsOpen = signal(false);\n private readonly paletteOverride = signal<readonly PaletteItem[] | null>(null);\n private readonly ready = signal(false);\n private hasRestoredAutosave = false;\n private isApplyingInputConfig = false;\n\n @Input() config: BuilderDocument | null = null;\n @Input() plugins: readonly BuilderPlugin[] = [];\n @Input() palette: readonly PaletteItem[] | null = null;\n @Input() autosave = false;\n @Input() autosaveKey = 'formly-builder:draft';\n @Output() readonly configChange = new EventEmitter<BuilderDocument>();\n @Output() readonly diagnosticsChange = new EventEmitter<BuilderDiagnosticsReport>();\n\n constructor() {\n effect(() => {\n const isReady = this.ready();\n const doc = this.store.doc();\n const diagnostics = this.store.diagnostics();\n if (!isReady) return;\n if (!this.isApplyingInputConfig) this.configChange.emit(doc);\n this.diagnosticsChange.emit(diagnostics);\n if (this.autosave) this.saveToAutosave();\n });\n }\n\n ngOnInit(): void {\n this.applyRuntimeExtensions();\n if (this.config) {\n this.applyExternalConfig(this.config);\n } else if (this.autosave) {\n this.restoreFromAutosave();\n }\n this.ready.set(true);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['plugins'] || changes['palette']) this.applyRuntimeExtensions();\n\n if (changes['config'] && !changes['config'].firstChange && this.config) {\n this.applyExternalConfig(this.config);\n }\n\n if (changes['autosave'] && this.autosave && !this.hasRestoredAutosave && !this.config) {\n this.restoreFromAutosave();\n }\n }\n\n openPreview(): void {\n const renderer = this.store.renderer();\n const data = {\n renderer,\n lookupRegistry: this.store.lookupRegistry(),\n doc: this.store.doc(),\n formlyExtensions: this.store.formlyExtensions(),\n };\n if (renderer === 'bootstrap') {\n this.dialog.open(PreviewBootstrapDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data,\n });\n return;\n }\n this.dialog.open(PreviewMaterialDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data,\n });\n }\n\n openExport(): void {\n if (!this.canExport()) return;\n const formlyJson = JSON.stringify(builderToFormly(this.store.doc()), null, 2);\n this.dialog.open(JsonDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data: { mode: 'exportFormly', json: formlyJson },\n });\n }\n\n openExportBuilder(): void {\n if (!this.canExport()) return;\n this.dialog.open(JsonDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data: { mode: 'exportBuilder', json: this.store.exportDocument(), schemaVersion: this.store.doc().schemaVersion },\n });\n }\n\n openExportJsonSchema(): void {\n if (!this.canExport()) return;\n const schema = JSON.stringify(builderToJsonSchema(this.store.doc()), null, 2);\n this.dialog.open(JsonDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data: { mode: 'exportJsonSchema', json: schema },\n });\n }\n\n openImport(): void {\n this.dialog\n .open(JsonDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data: { mode: 'import', json: this.store.exportDocument() },\n })\n .afterClosed()\n .subscribe((res) => {\n if (!res?.json) return;\n const out = this.store.importDocument(res.json);\n if (!out.ok) this.notifyError(out.error);\n });\n }\n\n openImportFormly(): void {\n this.dialog\n .open(JsonDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data: { mode: 'importFormly', json: '[]' },\n })\n .afterClosed()\n .subscribe((res) => {\n if (!res?.json) return;\n try {\n const fields = JSON.parse(res.json) as FormlyFieldConfig[];\n const doc = formlyToBuilder(fields, this.store.renderer());\n const result = this.store.importDocument(JSON.stringify(doc));\n if (!result.ok) this.notifyError(result.error);\n } catch (e) {\n this.notifyError((e as Error).message);\n }\n });\n }\n\n openImportPalette(): void {\n this.dialog\n .open(JsonDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data: { mode: 'importPalette', json: SAMPLE_PALETTE_JSON },\n })\n .afterClosed()\n .subscribe((res) => {\n if (!res?.json) return;\n const parsed = parsePaletteConfig(res.json);\n if (!parsed.ok) {\n this.notifyError(`Invalid palette configuration: ${parsed.errors[0] ?? 'unknown error'}`);\n return;\n }\n this.paletteOverride.set(parsed.palette);\n this.applyRuntimeExtensions();\n });\n }\n\n resetPalette(): void {\n this.paletteOverride.set(null);\n this.applyRuntimeExtensions();\n }\n\n canSaveTemplate(): boolean {\n const selected = this.store.selectedNode();\n return !!selected && isFieldNode(selected);\n }\n\n saveSelectedAsTemplate(): void {\n const selected = this.store.selectedNode();\n if (!selected || !isFieldNode(selected)) return;\n const title = this.templates.saveFieldTemplate(selected);\n this.applyRuntimeExtensions();\n this.snackBar.open(`Saved template \"${title}\".`, 'Close', {\n duration: 4000,\n horizontalPosition: 'right',\n verticalPosition: 'top',\n });\n }\n\n openExportTemplates(): void {\n this.dialog.open(JsonDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data: { mode: 'exportTemplates', json: this.templates.exportJson() },\n });\n }\n\n openImportTemplates(): void {\n this.dialog\n .open(JsonDialogComponent, {\n width: '900px',\n maxWidth: '95vw',\n data: { mode: 'importTemplates', json: this.templates.exportJson() },\n })\n .afterClosed()\n .subscribe((res) => {\n if (!res?.json) return;\n const out = this.templates.importJson(res.json);\n if (!out.ok) {\n this.notifyError(out.error);\n return;\n }\n this.applyRuntimeExtensions();\n this.snackBar.open(`Imported ${out.count} template(s).`, 'Close', {\n duration: 4000,\n horizontalPosition: 'right',\n verticalPosition: 'top',\n });\n });\n }\n\n toggleDiagnostics(): void {\n this.diagnosticsOpen.update((value) => !value);\n }\n\n diagnosticsSummary(): string {\n const report = this.store.diagnostics();\n if (report.errorCount === 0 && report.warningCount === 0) return 'No issues';\n return `${report.errorCount} errors, ${report.warningCount} warnings`;\n }\n\n canCopyOrDuplicate(): boolean {\n const selected = this.store.selectedNode();\n return !!selected && selected.id !== this.store.rootId();\n }\n\n async clear(): Promise<void> {\n if (await this.confirmAction('Clear the builder?', 'Clear builder', 'Clear')) {\n this.store.clear();\n }\n }\n\n async applyPresetById(id: string): Promise<void> {\n const preset = this.store.presets.find((p) => p.id === id);\n const confirmed = await this.confirmAction(\n `Apply \"${preset?.title ?? id}\" layout? Current canvas will be replaced.`,\n 'Apply starter layout',\n 'Apply',\n );\n if (!confirmed) return;\n this.store.applyPreset(id as 'simple' | 'complex' | 'advanced' | 'advancedLogic');\n }\n\n private canExport(): boolean {\n const report = this.store.diagnostics();\n if (report.errorCount === 0) return true;\n this.notifyError(`Export blocked: ${report.errorCount} diagnostics error(s). Open Diagnostics for details.`);\n this.diagnosticsOpen.set(true);\n return false;\n }\n\n private notifyError(message: string): void {\n this.snackBar.open(message, 'Close', {\n duration: 7000,\n horizontalPosition: 'right',\n verticalPosition: 'top',\n });\n }\n\n private async confirmAction(message: string, title: string, confirmText: string): Promise<boolean> {\n const out = await firstValueFrom(\n this.dialog\n .open(ConfirmDialogComponent, {\n width: '420px',\n maxWidth: '95vw',\n data: { title, message, confirmText, cancelText: 'Cancel' },\n })\n .afterClosed(),\n );\n return !!out;\n }\n\n @HostListener('document:keydown', ['$event'])\n onKeyDown(e: KeyboardEvent): void {\n const target = e.target as HTMLElement | null;\n if (target) {\n const tag = target.tagName;\n const isEditable = target.isContentEditable || tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT';\n if (isEditable) return;\n }\n\n const metaOrCtrl = e.ctrlKey || e.metaKey;\n if (handleHistoryShortcut(e, metaOrCtrl, { undo: () => this.store.undo(), redo: () => this.store.redo() })) return;\n if (\n handleClipboardShortcut(e, metaOrCtrl, {\n copy: () => this.store.copySelected(),\n paste: () => this.store.pasteFromClipboard(),\n duplicate: () => this.store.duplicateSelected(),\n })\n ) {\n return;\n }\n if (e.key === 'Escape') this.store.select(null);\n if (e.key === 'Delete' || e.key === 'Backspace') this.store.removeSelected();\n }\n\n private applyRuntimeExtensions(): void {\n const basePalette =\n this.paletteOverride() ?? (this.palette?.length ? [...this.palette] : composePalette(PALETTE, this.plugins));\n this.store.configureRuntimeExtensions({\n plugins: this.plugins,\n palette: mergePaletteById(basePalette, this.templates.toPaletteItems()),\n });\n }\n\n private applyExternalConfig(config: BuilderDocument): void {\n this.isApplyingInputConfig = true;\n try {\n const result = this.store.importDocument(JSON.stringify(config));\n if (!result.ok) this.notifyError(result.error);\n } finally {\n this.isApplyingInputConfig = false;\n }\n }\n\n private saveToAutosave(): void {\n if (!this.autosave || !this.autosaveKey) return;\n try {\n localStorage.setItem(this.autosaveKey, this.store.exportDocument());\n } catch {\n // Ignore storage errors (quota/privacy mode).\n }\n }\n\n private restoreFromAutosave(): void {\n if (!this.autosave || !this.autosaveKey || this.hasRestoredAutosave) return;\n this.hasRestoredAutosave = true;\n try {\n const saved = localStorage.getItem(this.autosaveKey);\n if (!saved) return;\n const out = this.store.importDocument(saved);\n if (!out.ok) {\n localStorage.removeItem(this.autosaveKey);\n this.notifyError('Stored draft was invalid and has been cleared.');\n }\n } catch {\n // Ignore restore errors.\n }\n }\n}\n","<div class=\"fb-app\">\n <div class=\"fb-topbar\">\n <!-- Primary CTA -->\n <button mat-raised-button color=\"primary\" (click)=\"openPreview()\">\n <mat-icon>visibility</mat-icon>\n Preview\n </button>\n\n <div class=\"fb-toolbar-divider\"></div>\n\n <!-- File menu -->\n <button mat-button [matMenuTriggerFor]=\"fileMenu\">\n <mat-icon>folder_open</mat-icon> File <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #fileMenu=\"matMenu\">\n <button mat-menu-item (click)=\"openExport()\"><mat-icon>download</mat-icon> Export Formly JSON</button>\n <button mat-menu-item (click)=\"openExportBuilder()\"><mat-icon>dataset</mat-icon> Export Builder JSON</button>\n <button mat-menu-item (click)=\"openExportJsonSchema()\"><mat-icon>schema</mat-icon> Export JSON Schema</button>\n <mat-divider />\n <button mat-menu-item (click)=\"openImport()\"><mat-icon>upload</mat-icon> Import Builder JSON</button>\n <button mat-menu-item (click)=\"openImportFormly()\"><mat-icon>transform</mat-icon> Import Formly JSON</button>\n <mat-divider />\n <button mat-menu-item class=\"fb-menu-item-danger\" (click)=\"clear()\">\n <mat-icon>delete</mat-icon> Clear canvas\n </button>\n </mat-menu>\n\n <!-- Templates menu -->\n <button mat-button [matMenuTriggerFor]=\"templatesMenu\">\n <mat-icon>collections_bookmark</mat-icon> Templates <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #templatesMenu=\"matMenu\">\n <button mat-menu-item (click)=\"saveSelectedAsTemplate()\" [disabled]=\"!canSaveTemplate()\">\n <mat-icon>bookmark_add</mat-icon> Save selected as template\n </button>\n <mat-divider />\n <button mat-menu-item (click)=\"openImportTemplates()\"><mat-icon>upload</mat-icon> Import templates</button>\n <button mat-menu-item (click)=\"openExportTemplates()\"><mat-icon>download</mat-icon> Export templates</button>\n </mat-menu>\n\n <!-- Palette menu -->\n <button mat-button [matMenuTriggerFor]=\"paletteMenu\">\n <mat-icon>palette</mat-icon> Palette <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #paletteMenu=\"matMenu\">\n <button mat-menu-item (click)=\"openImportPalette()\"><mat-icon>upload</mat-icon> Load palette JSON</button>\n <button mat-menu-item (click)=\"resetPalette()\"><mat-icon>restart_alt</mat-icon> Reset palette</button>\n </mat-menu>\n\n <!-- Layout menu: starter presets + renderer toggle -->\n <button mat-button [matMenuTriggerFor]=\"layoutMenu\">\n <mat-icon>auto_awesome</mat-icon> Layout <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #layoutMenu=\"matMenu\">\n @for (preset of store.presets; track preset.id) {\n <button mat-menu-item (click)=\"applyPresetById(preset.id)\">\n <mat-icon>dashboard_customize</mat-icon> {{ preset.title }}\n </button>\n }\n <mat-divider />\n <button mat-menu-item (click)=\"store.setRenderer('material')\">\n <mat-icon>{{ store.renderer() === 'material' ? 'radio_button_checked' : 'radio_button_unchecked' }}</mat-icon>\n Material UI\n </button>\n <button mat-menu-item (click)=\"store.setRenderer('bootstrap')\">\n <mat-icon>{{ store.renderer() === 'bootstrap' ? 'radio_button_checked' : 'radio_button_unchecked' }}</mat-icon>\n Bootstrap UI\n </button>\n </mat-menu>\n\n <div class=\"fb-toolbar-divider\"></div>\n\n <!-- History -->\n <button\n mat-icon-button\n aria-label=\"Undo\"\n matTooltip=\"Undo (Ctrl+Z)\"\n (click)=\"store.undo()\"\n [disabled]=\"!store.canUndo()\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n <button\n mat-icon-button\n aria-label=\"Redo\"\n matTooltip=\"Redo (Ctrl+Shift+Z)\"\n (click)=\"store.redo()\"\n [disabled]=\"!store.canRedo()\"\n >\n <mat-icon>redo</mat-icon>\n </button>\n <button mat-icon-button aria-label=\"History\" matTooltip=\"History\" [matMenuTriggerFor]=\"historyMenu\">\n <mat-icon>history</mat-icon>\n </button>\n <mat-menu #historyMenu=\"matMenu\" class=\"fb-history-menu\">\n <app-builder-history-panel (click)=\"$event.stopPropagation()\" />\n </mat-menu>\n\n <div class=\"fb-toolbar-divider\"></div>\n\n <!-- Clipboard (labeled buttons for recognition over recall) -->\n <button\n mat-button\n aria-label=\"Copy selected\"\n matTooltip=\"Copy (Ctrl+C)\"\n (click)=\"store.copySelected()\"\n [disabled]=\"!canCopyOrDuplicate()\"\n >\n <mat-icon>content_copy</mat-icon> Copy\n </button>\n <button\n mat-button\n aria-label=\"Duplicate selected\"\n matTooltip=\"Duplicate (Ctrl+D)\"\n (click)=\"store.duplicateSelected()\"\n [disabled]=\"!canCopyOrDuplicate()\"\n >\n <mat-icon>library_add</mat-icon> Duplicate\n </button>\n <button\n mat-button\n aria-label=\"Paste\"\n matTooltip=\"Paste (Ctrl+V)\"\n (click)=\"store.pasteFromClipboard()\"\n [disabled]=\"!store.hasClipboard()\"\n >\n <mat-icon>content_paste</mat-icon> Paste\n </button>\n\n <div class=\"fb-toolbar-divider\"></div>\n\n <!-- Diagnostics indicator -->\n <button\n mat-button\n class=\"fb-diag-btn\"\n [class.fb-diag-error]=\"store.diagnostics().errorCount > 0\"\n [class.fb-diag-warn]=\"store.diagnostics().errorCount === 0 && store.diagnostics().warningCount > 0\"\n (click)=\"toggleDiagnostics()\"\n matTooltip=\"Toggle diagnostics panel\"\n >\n <mat-icon>{{\n store.diagnostics().errorCount > 0 ? 'error' : store.diagnostics().warningCount > 0 ? 'warning' : 'check_circle'\n }}</mat-icon>\n {{ diagnosticsSummary() }}\n </button>\n </div>\n\n @if (diagnosticsOpen()) {\n <div class=\"fb-diagnostics\">\n <div class=\"fb-diagnostics-title\">Diagnostics</div>\n @if (store.diagnostics().diagnostics.length === 0) {\n <div class=\"fb-hint\">No issues found.</div>\n } @else {\n @for (item of store.diagnostics().diagnostics.slice(0, 12); track $index) {\n <div class=\"fb-diagnostics-item\" [class.fb-diagnostics-item-error]=\"item.severity === 'error'\">\n <strong>{{ item.severity.toUpperCase() }}</strong\n >:\n {{ item.message }}\n @if (item.nodeId) {\n <span class=\"fb-diagnostics-node\">(node {{ item.nodeId }})</span>\n }\n </div>\n }\n }\n </div>\n }\n\n <div class=\"fb-workspace\" cdkDropListGroup>\n <div class=\"fb-panel\">\n <app-builder-palette />\n </div>\n\n <div class=\"fb-canvas\">\n <app-builder-canvas />\n </div>\n\n <div class=\"fb-panel right\">\n <app-builder-inspector />\n </div>\n </div>\n</div>\n","/**\n * Public API barrel for reuse/embedding scenarios.\n * This project is an Angular application, but this barrel provides a stable\n * export surface for host apps and future library packaging.\n */\nexport * from './app/builder-core';\nexport * from './app/builder/builder-templates.service';\nexport {\n BuilderPageComponent,\n BuilderPageComponent as FormlyBuilderComponent,\n} from './app/builder/builder-page.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isRecord","RULE_OPERATORS","ROOT_ID","i2","i3","i4","asObject","resolveByPath","extractListPayload","collectFields","i5","i7","i10","i11","i1","i6"],"mappings":"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"}