@ngstarter-ui/components 21.0.39 → 21.0.41

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":"ngstarter-ui-components-form-builder.mjs","sources":["../../../projects/components/form-builder/src/config.ts","../../../projects/components/form-builder/src/field-host/field-host.ts","../../../projects/components/form-builder/src/field-host/field-host.html","../../../projects/components/form-builder/src/form-builder-renderer/form-builder-renderer.ts","../../../projects/components/form-builder/src/form-builder-renderer/form-builder-renderer.html","../../../projects/components/form-builder/src/settings/basic-field-settings/basic-field-settings.ts","../../../projects/components/form-builder/src/settings/basic-field-settings/basic-field-settings.html","../../../projects/components/form-builder/src/settings/basic-layout-settings/basic-layout-settings.ts","../../../projects/components/form-builder/src/settings/basic-layout-settings/basic-layout-settings.html","../../../projects/components/form-builder/src/settings/basic-section-settings/basic-section-settings.ts","../../../projects/components/form-builder/src/settings/basic-section-settings/basic-section-settings.html","../../../projects/components/form-builder/src/settings-host/settings-host.ts","../../../projects/components/form-builder/src/settings-host/settings-host.html","../../../projects/components/form-builder/src/form-builder/form-builder.ts","../../../projects/components/form-builder/src/form-builder/form-builder.html","../../../projects/components/form-builder/ngstarter-ui-components-form-builder.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport {\n FormBuilderField,\n FormBuilderFieldDefinition,\n FormBuilderItemDefinition,\n FormBuilderSettingsDefinition,\n FormBuilderValidationRule\n} from './types';\n\nexport const FORM_BUILDER_ITEMS =\n new InjectionToken<FormBuilderItemDefinition[]>('FORM_BUILDER_ITEMS');\n\nexport const FORM_BUILDER_FIELDS =\n new InjectionToken<FormBuilderFieldDefinition[]>('FORM_BUILDER_FIELDS');\n\nexport const FORM_BUILDER_SETTINGS =\n new InjectionToken<FormBuilderSettingsDefinition[]>('FORM_BUILDER_SETTINGS');\n\nexport function formBuilderField(definition: FormBuilderFieldDefinition): FormBuilderFieldDefinition {\n return definition;\n}\n\nexport function formBuilderItem(definition: FormBuilderItemDefinition): FormBuilderItemDefinition {\n return definition;\n}\n\nexport function formBuilderSettings(definition: FormBuilderSettingsDefinition): FormBuilderSettingsDefinition {\n return definition;\n}\n\nexport function provideFormBuilder(config: {\n items?: FormBuilderItemDefinition[];\n fields?: FormBuilderFieldDefinition[];\n settings?: FormBuilderSettingsDefinition[];\n} = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...(config.items ?? []).map(item => ({\n provide: FORM_BUILDER_ITEMS,\n useValue: item,\n multi: true\n })),\n ...(config.fields ?? []).map(field => ({\n provide: FORM_BUILDER_FIELDS,\n useValue: field,\n multi: true\n })),\n ...(config.settings ?? []).map(settings => ({\n provide: FORM_BUILDER_SETTINGS,\n useValue: settings,\n multi: true\n }))\n ]);\n}\n\nexport const DEFAULT_FORM_BUILDER_FIELDS: FormBuilderFieldDefinition[] = [\n {\n type: 'text',\n label: 'Text',\n group: 'Basic',\n icon: 'fluent:text-font-24-regular',\n defaults: {\n label: 'Text field',\n placeholder: 'Enter text'\n }\n },\n {\n type: 'number',\n label: 'Number',\n group: 'Basic',\n icon: 'fluent:number-symbol-24-regular',\n defaults: {\n label: 'Number',\n placeholder: '0'\n }\n },\n {\n type: 'email',\n label: 'Email',\n group: 'Basic',\n icon: 'fluent:mail-24-regular',\n defaults: {\n label: 'Email',\n placeholder: 'name@example.com'\n },\n validators: field => field.required ? [Validators.required, Validators.email] : [Validators.email]\n },\n {\n type: 'textarea',\n label: 'Textarea',\n group: 'Basic',\n icon: 'fluent:text-description-24-regular',\n defaults: {\n label: 'Description',\n placeholder: 'Enter description',\n width: 12\n }\n },\n {\n type: 'group',\n label: 'Group',\n kind: 'layout',\n group: 'Layout',\n icon: 'fluent:group-24-regular',\n description: 'Container for nested fields.',\n acceptsChildren: true,\n defaults: {\n kind: 'layout',\n label: 'Group',\n width: 12,\n children: []\n }\n },\n {\n type: 'select',\n label: 'Select',\n group: 'Choices',\n icon: 'fluent:multiselect-ltr-24-regular',\n defaults: {\n label: 'Select',\n placeholder: 'Choose an option',\n options: [\n { label: 'Option 1', value: 'option_1' },\n { label: 'Option 2', value: 'option_2' }\n ]\n }\n },\n {\n type: 'checkbox',\n label: 'Checkbox',\n group: 'Choices',\n icon: 'fluent:checkbox-checked-24-regular',\n defaults: {\n label: 'Checkbox',\n defaultValue: false\n }\n },\n {\n type: 'toggle',\n label: 'Toggle',\n group: 'Choices',\n icon: 'fluent:toggle-right-24-regular',\n defaults: {\n label: 'Toggle',\n defaultValue: false\n }\n },\n {\n type: 'date',\n label: 'Date',\n group: 'Date and time',\n icon: 'fluent:calendar-ltr-24-regular',\n defaults: {\n label: 'Date',\n placeholder: 'Select date'\n }\n },\n {\n type: 'currency',\n label: 'Currency',\n group: 'Finance',\n icon: 'fluent:money-24-regular',\n defaults: {\n label: 'Amount',\n placeholder: '0.00'\n }\n }\n];\n\nexport const DEFAULT_FORM_BUILDER_ITEMS: FormBuilderItemDefinition[] = [\n {\n type: 'section',\n label: 'Section',\n kind: 'layout',\n group: 'Layout',\n icon: 'fluent:folder-24-regular',\n description: 'Top-level layout container.',\n acceptsChildren: true\n },\n ...DEFAULT_FORM_BUILDER_FIELDS\n];\n\nexport function validatorsFromRules(rules: FormBuilderValidationRule[] = [], field?: FormBuilderField) {\n const validators = [];\n\n if (field?.required || rules.some(rule => rule.type === 'required')) {\n validators.push(Validators.required);\n }\n\n for (const rule of rules) {\n if (rule.type === 'email') {\n validators.push(Validators.email);\n } else if (rule.type === 'minLength') {\n validators.push(Validators.minLength(Number(rule.value)));\n } else if (rule.type === 'maxLength') {\n validators.push(Validators.maxLength(Number(rule.value)));\n } else if (rule.type === 'min') {\n validators.push(Validators.min(Number(rule.value)));\n } else if (rule.type === 'max') {\n validators.push(Validators.max(Number(rule.value)));\n }\n }\n\n return validators;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewContainerRef,\n computed,\n effect,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { Datepicker, DatepickerInput, DatepickerToggle, provideNativeDateAdapter } from '@ngstarter-ui/components/datepicker';\nimport { FormField, Hint, IconButtonSuffix, Label } from '@ngstarter-ui/components/form-field';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { Select } from '@ngstarter-ui/components/select';\nimport { Option } from '@ngstarter-ui/components/option';\nimport { Checkbox } from '@ngstarter-ui/components/checkbox';\nimport { SlideToggle } from '@ngstarter-ui/components/slide-toggle';\nimport { FormBuilderField, FormBuilderFieldDefinition } from '../types';\n\n@Component({\n selector: 'ngs-form-builder-field-host',\n exportAs: 'ngsFormBuilderFieldHost',\n imports: [\n ReactiveFormsModule,\n Datepicker,\n DatepickerInput,\n DatepickerToggle,\n FormField,\n Hint,\n IconButtonSuffix,\n Label,\n Input,\n Select,\n Option,\n Checkbox,\n SlideToggle\n ],\n templateUrl: './field-host.html',\n styleUrl: './field-host.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n provideNativeDateAdapter()\n ],\n host: {\n 'class': 'ngs-form-builder-field-host',\n '[class.is-custom]': 'customLoaded()',\n '[class.is-width-1]': '!editableCanvas() && field().width === 1',\n '[class.is-width-2]': '!editableCanvas() && field().width === 2',\n '[class.is-width-3]': '!editableCanvas() && field().width === 3',\n '[class.is-width-4]': '!editableCanvas() && field().width === 4',\n '[class.is-width-5]': '!editableCanvas() && field().width === 5',\n '[class.is-width-6]': '!editableCanvas() && field().width === 6',\n '[class.is-width-7]': '!editableCanvas() && field().width === 7',\n '[class.is-width-8]': '!editableCanvas() && field().width === 8',\n '[class.is-width-9]': '!editableCanvas() && field().width === 9',\n '[class.is-width-10]': '!editableCanvas() && field().width === 10',\n '[class.is-width-11]': '!editableCanvas() && field().width === 11',\n '[class.is-width-12]': '!editableCanvas() && (field().width ?? 12) === 12'\n }\n})\nexport class FormBuilderFieldHost {\n readonly field = input.required<FormBuilderField>();\n readonly control = input.required<FormControl>();\n readonly definitions = input<FormBuilderFieldDefinition[]>([]);\n readonly readonly = input(false);\n readonly editableCanvas = input(false);\n\n protected readonly customLoaded = signal(false);\n protected readonly textInputType = computed(() => {\n const type = this.field().type;\n return type === 'number' || type === 'email' ? type : 'text';\n });\n\n private readonly anchor = viewChild.required('anchor', { read: ViewContainerRef });\n\n constructor() {\n effect(async () => {\n const field = this.field();\n const control = this.control();\n const definitions = this.definitions();\n const viewContainer = this.anchor();\n const renderer = definitions.find(definition => definition.type === field.type)?.renderer;\n\n viewContainer.clear();\n this.customLoaded.set(false);\n\n if (!renderer) {\n return;\n }\n\n const componentType = await renderer();\n const componentRef = viewContainer.createComponent(componentType);\n componentRef.setInput('field', field);\n componentRef.setInput('control', control);\n componentRef.setInput('readonly', this.readonly());\n componentRef.setInput('definition', definitions.find(definition => definition.type === field.type));\n this.customLoaded.set(true);\n });\n }\n}\n","<ng-container #anchor/>\n\n@if (!customLoaded()) {\n @switch (field().type) {\n @case ('textarea') {\n <ngs-form-field>\n <ngs-label>{{ field().label }}</ngs-label>\n <textarea ngsInput\n rows=\"3\"\n [formControl]=\"control()\"\n [placeholder]=\"field().placeholder || ''\"\n [readonly]=\"readonly() || field().readonly\"></textarea>\n @if (field().hint) {\n <ngs-hint>{{ field().hint }}</ngs-hint>\n }\n </ngs-form-field>\n }\n\n @case ('select') {\n <ngs-form-field>\n <ngs-label>{{ field().label }}</ngs-label>\n <ngs-select [formControl]=\"control()\" [placeholder]=\"field().placeholder || ''\">\n @for (option of field().options ?? []; track option.value) {\n <ngs-option [value]=\"option.value\">{{ option.label }}</ngs-option>\n }\n </ngs-select>\n @if (field().hint) {\n <ngs-hint>{{ field().hint }}</ngs-hint>\n }\n </ngs-form-field>\n }\n\n @case ('checkbox') {\n <div class=\"ngs-form-builder-check-field\">\n <ngs-checkbox [formControl]=\"control()\">\n {{ field().label }}\n </ngs-checkbox>\n @if (field().hint) {\n <span>{{ field().hint }}</span>\n }\n </div>\n }\n\n @case ('toggle') {\n <div class=\"ngs-form-builder-check-field\">\n <ngs-slide-toggle [formControl]=\"control()\">\n {{ field().label }}\n </ngs-slide-toggle>\n @if (field().hint) {\n <span>{{ field().hint }}</span>\n }\n </div>\n }\n\n @case ('date') {\n <ngs-form-field>\n <ngs-label>{{ field().label }}</ngs-label>\n <input ngsInput\n [ngsDatepicker]=\"picker\"\n [formControl]=\"control()\"\n [placeholder]=\"field().placeholder || ''\"\n [readonly]=\"readonly() || field().readonly\">\n <ngs-datepicker-toggle ngsIconButtonSuffix [for]=\"picker\"/>\n <ngs-datepicker #picker/>\n @if (field().hint) {\n <ngs-hint>{{ field().hint }}</ngs-hint>\n }\n </ngs-form-field>\n }\n\n @case ('currency') {\n <ngs-form-field>\n <ngs-label>{{ field().label }}</ngs-label>\n <input ngsInput\n type=\"number\"\n inputmode=\"decimal\"\n [formControl]=\"control()\"\n [placeholder]=\"field().placeholder || ''\"\n [readonly]=\"readonly() || field().readonly\">\n @if (field().hint) {\n <ngs-hint>{{ field().hint }}</ngs-hint>\n }\n </ngs-form-field>\n }\n\n @default {\n <ngs-form-field>\n <ngs-label>{{ field().label }}</ngs-label>\n <input ngsInput\n [type]=\"textInputType()\"\n [formControl]=\"control()\"\n [placeholder]=\"field().placeholder || ''\"\n [readonly]=\"readonly() || field().readonly\">\n @if (field().hint) {\n <ngs-hint>{{ field().hint }}</ngs-hint>\n }\n </ngs-form-field>\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n output\n} from '@angular/core';\nimport { ReactiveFormsModule, FormControl, FormGroup } from '@angular/forms';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { DEFAULT_FORM_BUILDER_ITEMS, FORM_BUILDER_FIELDS, FORM_BUILDER_ITEMS, validatorsFromRules } from '../config';\nimport { FormBuilderField, FormBuilderFieldDefinition, FormBuilderItemDefinition, FormBuilderLayoutItem, FormBuilderSchema, FormBuilderSection } from '../types';\nimport { FormBuilderFieldHost } from '../field-host/field-host';\n\ninterface FormBuilderRendererCanvasItem extends FormBuilderLayoutItem {\n field?: FormBuilderField;\n section?: FormBuilderSection;\n}\n\n@Component({\n selector: 'ngs-form-builder-renderer',\n exportAs: 'ngsFormBuilderRenderer',\n imports: [\n NgTemplateOutlet,\n ReactiveFormsModule,\n Button,\n FormBuilderFieldHost\n ],\n templateUrl: './form-builder-renderer.html',\n styleUrl: './form-builder-renderer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-form-builder-renderer'\n }\n})\nexport class FormBuilderRenderer {\n private readonly providedItems = inject(FORM_BUILDER_ITEMS, { optional: true }) ?? [];\n private readonly providedFields = inject(FORM_BUILDER_FIELDS, { optional: true }) ?? [];\n private readonly orphanControls = new Map<string, FormControl>();\n\n readonly schema = input.required<FormBuilderSchema>();\n readonly readonly = input(false);\n readonly showSubmit = input(true);\n readonly submitLabel = input('Submit');\n readonly value = model<Record<string, any>>({});\n readonly formSubmit = output<Record<string, any>>();\n readonly formReady = output<FormGroup>();\n\n protected readonly definitions = computed<FormBuilderFieldDefinition[]>(() => [\n ...DEFAULT_FORM_BUILDER_ITEMS,\n ...this.providedFields,\n ...this.providedItems\n ].reduce<FormBuilderFieldDefinition[]>((definitions, definition) => {\n const normalized = normalizeFieldDefinition(definition);\n const index = definitions.findIndex(item => item.type === normalized.type);\n\n if (index === -1) {\n definitions.push(normalized);\n } else {\n definitions[index] = {\n ...definitions[index],\n ...normalized,\n defaults: {\n ...definitions[index].defaults,\n ...normalized.defaults\n }\n };\n }\n\n return definitions;\n }, []));\n protected readonly visibleCanvasItems = computed<FormBuilderRendererCanvasItem[]>(() =>\n this.resolveCanvasItems(this.schema())\n .map(item => {\n if (item.field) {\n return {\n ...item,\n field: this.visibleFields([item.field])[0]\n };\n }\n\n return {\n ...item,\n section: {\n ...item.section!,\n fields: this.visibleFields(item.section!.fields)\n }\n };\n })\n .filter(item => !!item.field || !!item.section?.fields.length)\n );\n protected readonly formGroup = computed(() => this.createFormGroup());\n\n constructor() {\n effect(onCleanup => {\n const form = this.formGroup();\n this.formReady.emit(form);\n const subscription = form.valueChanges.subscribe(() => {\n this.value.set(form.getRawValue());\n });\n\n onCleanup(() => subscription.unsubscribe());\n });\n }\n\n protected getControl(field: FormBuilderField): FormControl {\n const control = this.formGroup().get(field.name);\n\n if (control instanceof FormControl) {\n return control;\n }\n\n const existing = this.orphanControls.get(field.id);\n\n if (existing) {\n return existing;\n }\n\n const nextControl = new FormControl({\n value: field.defaultValue ?? null,\n disabled: true\n });\n this.orphanControls.set(field.id, nextControl);\n return nextControl;\n }\n\n protected isContainerField(field: FormBuilderField): boolean {\n const definition = this.definitions().find(item => item.type === field.type);\n\n return definition?.acceptsChildren === true ||\n definition?.kind === 'layout' ||\n field.kind === 'layout' ||\n field.type === 'group' ||\n field.type === 'grid';\n }\n\n protected visibleChildren(field: FormBuilderField): FormBuilderField[] {\n return this.visibleFields(field.children ?? []);\n }\n\n protected submit(): void {\n const form = this.formGroup();\n\n if (form.invalid) {\n form.markAllAsTouched();\n return;\n }\n\n this.formSubmit.emit(form.getRawValue());\n }\n\n private createFormGroup(): FormGroup {\n const controls: Record<string, FormControl> = {};\n const value = this.value();\n\n const fields = [\n ...flattenFields(this.schema().fields ?? []),\n ...this.schema().sections.flatMap(section => flattenFields(section.fields))\n ];\n\n for (const field of fields) {\n const definition = this.definitions().find(item => item.type === field.type);\n\n if (this.isContainerField(field) || definition?.kind === 'static' || field.kind === 'static') {\n continue;\n }\n\n const validators = definition?.validators?.(field) ?? validatorsFromRules(field.validation, field);\n const control = new FormControl(\n {\n value: value[field.name] ?? field.defaultValue ?? null,\n disabled: field.disabled || this.readonly()\n },\n validators\n );\n\n controls[field.name] = control;\n }\n\n return new FormGroup(controls);\n }\n\n private visibleFields(fields: FormBuilderField[]): FormBuilderField[] {\n return fields\n .filter(field => field.visibility?.form !== false)\n .map(field => ({\n ...field,\n children: field.children ? this.visibleFields(field.children) : undefined\n }));\n }\n\n private resolveCanvasItems(schema: FormBuilderSchema): FormBuilderRendererCanvasItem[] {\n const fieldsById = new Map((schema.fields ?? []).map(field => [field.id, field]));\n const sectionsById = new Map(schema.sections.map(section => [section.id, section]));\n const items: FormBuilderRendererCanvasItem[] = [];\n\n for (const item of normalizedLayout(schema)) {\n if (item.kind === 'field') {\n const field = fieldsById.get(item.id);\n\n if (field) {\n items.push({ ...item, field });\n }\n\n continue;\n }\n\n const section = sectionsById.get(item.id);\n\n if (section) {\n items.push({ ...item, section });\n }\n }\n\n return items;\n }\n}\n\nfunction normalizeFieldDefinition(definition: FormBuilderItemDefinition): FormBuilderFieldDefinition {\n return {\n ...definition,\n kind: definition.kind ?? 'field'\n } as FormBuilderFieldDefinition;\n}\n\nfunction flattenFields(fields: FormBuilderField[]): FormBuilderField[] {\n return fields.flatMap(field => [field, ...flattenFields(field.children ?? [])]);\n}\n\nfunction normalizedLayout(schema: FormBuilderSchema): FormBuilderLayoutItem[] {\n const used = new Set<string>();\n const layout: FormBuilderLayoutItem[] = [];\n const fieldsById = new Map((schema.fields ?? []).map(field => [field.id, field]));\n const sectionsById = new Map(schema.sections.map(section => [section.id, section]));\n\n for (const item of schema.layout ?? []) {\n const key = `${item.kind}:${item.id}`;\n\n if (used.has(key)) {\n continue;\n }\n\n if ((item.kind === 'field' && fieldsById.has(item.id)) || (item.kind === 'section' && sectionsById.has(item.id))) {\n used.add(key);\n layout.push(item);\n }\n }\n\n for (const field of schema.fields ?? []) {\n const key = `field:${field.id}`;\n\n if (!used.has(key)) {\n used.add(key);\n layout.push({ kind: 'field', id: field.id });\n }\n }\n\n for (const section of schema.sections) {\n const key = `section:${section.id}`;\n\n if (!used.has(key)) {\n used.add(key);\n layout.push({ kind: 'section', id: section.id });\n }\n }\n\n return layout;\n}\n","<ng-template #renderFields let-fields>\n <div class=\"ngs-form-builder-renderer-grid\">\n @for (field of fields; track field.id) {\n @if (isContainerField(field)) {\n <section class=\"ngs-form-builder-renderer-grid-field\">\n <header>\n <h4>{{ field.label }}</h4>\n @if (field.hint) {\n <p>{{ field.hint }}</p>\n }\n </header>\n\n <ng-container\n [ngTemplateOutlet]=\"renderFields\"\n [ngTemplateOutletContext]=\"{ $implicit: visibleChildren(field) }\"/>\n </section>\n } @else {\n <ngs-form-builder-field-host\n [field]=\"field\"\n [control]=\"getControl(field)\"\n [definitions]=\"definitions()\"\n [readonly]=\"readonly()\"/>\n }\n }\n </div>\n</ng-template>\n\n<form [formGroup]=\"formGroup()\" (ngSubmit)=\"submit()\">\n <div class=\"flex flex-col gap-6\">\n @for (item of visibleCanvasItems(); track item.kind + ':' + item.id) {\n @if (item.field) {\n <ng-container\n [ngTemplateOutlet]=\"renderFields\"\n [ngTemplateOutletContext]=\"{ $implicit: [item.field] }\"/>\n } @else if (item.section; as section) {\n <section class=\"ngs-form-builder-renderer-section\">\n @if (section.title || section.description) {\n <header>\n @if (section.title) {\n <h3>{{ section.title }}</h3>\n }\n @if (section.description) {\n <p>{{ section.description }}</p>\n }\n </header>\n }\n\n <ng-container\n [ngTemplateOutlet]=\"renderFields\"\n [ngTemplateOutletContext]=\"{ $implicit: section.fields }\"/>\n </section>\n }\n }\n\n @if (showSubmit() && !readonly()) {\n <div class=\"flex justify-end\">\n <button ngsButton=\"filled\" type=\"submit\">{{ submitLabel() }}</button>\n </div>\n }\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormField, Hint, Label } from '@ngstarter-ui/components/form-field';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { Select } from '@ngstarter-ui/components/select';\nimport { Option } from '@ngstarter-ui/components/option';\nimport { SlideToggle } from '@ngstarter-ui/components/slide-toggle';\nimport { FormBuilderField, FormBuilderFieldWidth, FormBuilderOption } from '../../types';\n\n@Component({\n selector: 'ngs-basic-form-builder-field-settings',\n exportAs: 'ngsBasicFormBuilderFieldSettings',\n imports: [\n FormsModule,\n FormField,\n Hint,\n Label,\n Input,\n Select,\n Option,\n SlideToggle\n ],\n templateUrl: './basic-field-settings.html',\n styleUrl: './basic-field-settings.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-basic-form-builder-field-settings'\n }\n})\nexport class BasicFormBuilderFieldSettings {\n readonly field = input.required<FormBuilderField>();\n readonly update = input.required<(changes: Partial<FormBuilderField>) => void>();\n\n protected readonly fieldWidthOptions: FormBuilderFieldWidth[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n protected readonly hasCheckedState = computed(() => ['checkbox', 'toggle'].includes(this.field().type));\n protected readonly hasPlaceholder = computed(() => !['checkbox', 'toggle'].includes(this.field().type));\n protected readonly hasOptions = computed(() => ['select', 'radio', 'checkbox-list'].includes(this.field().type));\n protected readonly optionsText = computed(() =>\n (this.field().options ?? [])\n .map(option => `${option.label}:${option.value}`)\n .join('\\n')\n );\n\n protected patch(changes: Partial<FormBuilderField>): void {\n this.update()(changes);\n }\n\n protected patchOptions(value: string): void {\n const options: FormBuilderOption[] = value\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n const [label, optionValue] = line.split(':');\n\n return {\n label: label?.trim() || `Option ${index + 1}`,\n value: (optionValue ?? label ?? `option_${index + 1}`).trim()\n };\n });\n\n this.patch({ options });\n }\n}\n","<div class=\"flex flex-col gap-4\">\n <ngs-form-field>\n <ngs-label>Label</ngs-label>\n <input ngsInput\n [ngModel]=\"field().label\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ label: $event })\">\n </ngs-form-field>\n\n <ngs-form-field>\n <ngs-label>Field ID</ngs-label>\n <input ngsInput\n [ngModel]=\"field().name\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ name: $event })\">\n </ngs-form-field>\n\n @if (hasPlaceholder()) {\n <ngs-form-field>\n <ngs-label>Placeholder</ngs-label>\n <input ngsInput\n [ngModel]=\"field().placeholder || ''\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ placeholder: $event })\">\n </ngs-form-field>\n }\n\n <ngs-form-field>\n <ngs-label>Hint</ngs-label>\n <input ngsInput\n [ngModel]=\"field().hint || ''\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ hint: $event })\">\n </ngs-form-field>\n\n <ngs-form-field>\n <ngs-label>Width</ngs-label>\n <ngs-select [ngModel]=\"field().width ?? 12\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ width: $event })\">\n @for (width of fieldWidthOptions; track width) {\n <ngs-option [value]=\"width\">{{ width }}/12</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n\n <div class=\"flex flex-col gap-5 py-1\">\n <ngs-slide-toggle [ngModel]=\"field().required ?? false\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ required: $event })\">\n Required field\n </ngs-slide-toggle>\n\n <ngs-slide-toggle [ngModel]=\"field().readonly ?? false\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ readonly: $event })\">\n Readonly\n </ngs-slide-toggle>\n\n <ngs-slide-toggle [ngModel]=\"field().disabled ?? false\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ disabled: $event })\">\n Disabled\n </ngs-slide-toggle>\n\n @if (hasCheckedState()) {\n <ngs-slide-toggle [ngModel]=\"field().defaultValue === true\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ defaultValue: $event })\">\n Checked\n </ngs-slide-toggle>\n }\n </div>\n\n @if (hasOptions()) {\n <ngs-form-field>\n <ngs-label>Options</ngs-label>\n <textarea ngsInput\n rows=\"4\"\n [ngModel]=\"optionsText()\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patchOptions($event)\"></textarea>\n <ngs-hint>One option per line. Use Label:value to set explicit values.</ngs-hint>\n </ngs-form-field>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormField, Hint, Label } from '@ngstarter-ui/components/form-field';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { Option } from '@ngstarter-ui/components/option';\nimport { Select } from '@ngstarter-ui/components/select';\nimport { FormBuilderField, FormBuilderFieldWidth } from '../../types';\n\n@Component({\n selector: 'ngs-basic-form-builder-layout-settings',\n exportAs: 'ngsBasicFormBuilderLayoutSettings',\n imports: [\n FormsModule,\n FormField,\n Hint,\n Label,\n Input,\n Option,\n Select\n ],\n templateUrl: './basic-layout-settings.html',\n styleUrl: './basic-layout-settings.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-basic-form-builder-layout-settings'\n }\n})\nexport class BasicFormBuilderLayoutSettings {\n readonly field = input.required<FormBuilderField>();\n readonly update = input.required<(changes: Partial<FormBuilderField>) => void>();\n\n protected readonly fieldWidthOptions: FormBuilderFieldWidth[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\n protected patch(changes: Partial<FormBuilderField>): void {\n this.update()(changes);\n }\n}\n","<div class=\"flex flex-col gap-4\">\n <ngs-form-field>\n <ngs-label>Label</ngs-label>\n <input ngsInput\n [ngModel]=\"field().label\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ label: $event })\">\n </ngs-form-field>\n\n <ngs-form-field>\n <ngs-label>Hint</ngs-label>\n <input ngsInput\n [ngModel]=\"field().hint || ''\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ hint: $event })\">\n <ngs-hint>Shown below the layout title in preview and renderer.</ngs-hint>\n </ngs-form-field>\n\n <ngs-form-field>\n <ngs-label>Width</ngs-label>\n <ngs-select [ngModel]=\"field().width ?? 12\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ width: $event })\">\n @for (width of fieldWidthOptions; track width) {\n <ngs-option [value]=\"width\">{{ width }}/12</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormField, Hint, Label } from '@ngstarter-ui/components/form-field';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { SlideToggle } from '@ngstarter-ui/components/slide-toggle';\nimport { FormBuilderSection } from '../../types';\n\n@Component({\n selector: 'ngs-basic-form-builder-section-settings',\n exportAs: 'ngsBasicFormBuilderSectionSettings',\n imports: [\n FormsModule,\n FormField,\n Hint,\n Label,\n Input,\n SlideToggle\n ],\n templateUrl: './basic-section-settings.html',\n styleUrl: './basic-section-settings.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-basic-form-builder-section-settings'\n }\n})\nexport class BasicFormBuilderSectionSettings {\n readonly section = input.required<FormBuilderSection>();\n readonly update = input.required<(changes: Partial<FormBuilderSection>) => void>();\n\n protected patch(changes: Partial<FormBuilderSection>): void {\n this.update()(changes);\n }\n}\n","<div class=\"flex flex-col gap-4\">\n <ngs-form-field>\n <ngs-label>Title</ngs-label>\n <input ngsInput\n [ngModel]=\"section().title\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ title: $event })\">\n </ngs-form-field>\n\n <ngs-form-field>\n <ngs-label>Description</ngs-label>\n <textarea ngsInput\n rows=\"3\"\n [ngModel]=\"section().description || ''\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ description: $event })\"></textarea>\n <ngs-hint>Optional helper text rendered under the section title.</ngs-hint>\n </ngs-form-field>\n\n <ngs-slide-toggle [ngModel]=\"section().collapsed ?? false\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"patch({ collapsed: $event })\">\n Collapsed\n </ngs-slide-toggle>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewContainerRef,\n computed,\n effect,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport { FormBuilderField, FormBuilderFieldDefinition, FormBuilderSchema, FormBuilderSection, FormBuilderSettingsDefinition } from '../types';\nimport { BasicFormBuilderFieldSettings } from '../settings/basic-field-settings/basic-field-settings';\nimport { BasicFormBuilderLayoutSettings } from '../settings/basic-layout-settings/basic-layout-settings';\nimport { BasicFormBuilderSectionSettings } from '../settings/basic-section-settings/basic-section-settings';\n\n@Component({\n selector: 'ngs-form-builder-settings-host',\n exportAs: 'ngsFormBuilderSettingsHost',\n imports: [\n BasicFormBuilderFieldSettings,\n BasicFormBuilderLayoutSettings,\n BasicFormBuilderSectionSettings\n ],\n templateUrl: './settings-host.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-form-builder-settings-host',\n '[class.is-empty]': '!customLoaded()'\n }\n})\nexport class FormBuilderSettingsHost {\n readonly field = input<FormBuilderField | null>(null);\n readonly section = input<FormBuilderSection | null>(null);\n readonly schema = input.required<FormBuilderSchema>();\n readonly definitions = input<FormBuilderFieldDefinition[]>([]);\n readonly settingsDefinitions = input<FormBuilderSettingsDefinition[]>([]);\n readonly update = input<(changes: Partial<FormBuilderField>) => void>();\n readonly updateSection = input<(changes: Partial<FormBuilderSection>) => void>();\n\n protected readonly itemDefinition = computed(() => {\n const field = this.field();\n const section = this.section();\n\n if (section) {\n return this.definitions().find(definition => definition.type === 'section');\n }\n\n return field ? this.definitions().find(definition => definition.type === field.type) : undefined;\n });\n protected readonly fieldDefinition = this.itemDefinition;\n protected readonly fieldKind = computed(() => this.itemDefinition()?.kind ?? this.field()?.kind ?? 'field');\n protected readonly isLayoutField = computed(() =>\n this.fieldKind() === 'layout' || !!this.field()?.children?.length\n );\n\n protected readonly customLoaded = signal(false);\n private readonly anchor = viewChild.required('anchor', { read: ViewContainerRef });\n\n constructor() {\n effect(async () => {\n const field = this.field();\n const section = this.section();\n const definitions = this.definitions();\n const settingDefinitions = this.settingsDefinitions();\n const viewContainer = this.anchor();\n const type = section ? 'section' : field?.type;\n const itemDefinition = type ? definitions.find(definition => definition.type === type) : undefined;\n const kind = section ? 'layout' : (itemDefinition?.kind ?? field?.kind ?? 'field');\n const customSettings = itemDefinition?.settings ?? settingDefinitions.find(definition => {\n if (type && (definition.itemType === type || definition.fieldType === type || definition.type === type)) {\n return true;\n }\n\n return !!definition.kind && definition.kind === kind;\n })?.component;\n\n viewContainer.clear();\n this.customLoaded.set(false);\n\n if (!customSettings) {\n return;\n }\n\n const componentType = await customSettings();\n const componentRef = viewContainer.createComponent(componentType);\n componentRef.setInput('item', section ?? field);\n componentRef.setInput('field', field);\n componentRef.setInput('section', section);\n componentRef.setInput('schema', this.schema());\n componentRef.setInput('definition', itemDefinition);\n componentRef.setInput('update', section ? this.updateSection() : this.update());\n componentRef.setInput('updateField', this.update());\n componentRef.setInput('updateSection', this.updateSection());\n this.customLoaded.set(true);\n });\n }\n}\n","@if (section(); as sectionItem) {\n <ngs-basic-form-builder-section-settings\n [section]=\"sectionItem\"\n [update]=\"updateSection()!\"/>\n} @else if (field(); as fieldItem) {\n @if (isLayoutField()) {\n <ngs-basic-form-builder-layout-settings\n [field]=\"fieldItem\"\n [update]=\"update()!\"/>\n } @else {\n <ngs-basic-form-builder-field-settings\n [field]=\"fieldItem\"\n [update]=\"update()!\"/>\n }\n}\n\n<ng-container #anchor/>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, TemplateRef, computed, inject, input, model, output, signal, viewChild } from '@angular/core';\nimport { FormsModule, FormControl } from '@angular/forms';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Card, CardAside, CardContent, CardHeader } from '@ngstarter-ui/components/card';\nimport { ConfirmManager } from '@ngstarter-ui/components/confirm';\nimport { Dialog, DialogActions, DialogClose, DialogContent, DialogTitle } from '@ngstarter-ui/components/dialog';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { Panel, PanelAside, PanelContent, PanelHeader, PanelSidebar } from '@ngstarter-ui/components/panel';\nimport { ScrollbarArea } from '@ngstarter-ui/components/scrollbar-area';\nimport { Tab, TabGroup } from '@ngstarter-ui/components/tabs';\nimport { Tree, TreeDragPlaceholder, TreeNode, TreeNodeDef, TreeNodeDrop, TreeNodeDropPosition, TreeNodePadding } from '@ngstarter-ui/components/tree';\nimport {\n DEFAULT_FORM_BUILDER_ITEMS,\n FORM_BUILDER_FIELDS,\n FORM_BUILDER_ITEMS,\n FORM_BUILDER_SETTINGS\n} from '../config';\nimport {\n FormBuilderField,\n FormBuilderFieldChange,\n FormBuilderFieldDefinition,\n FormBuilderItemDefinition,\n FormBuilderLayoutItem,\n FormBuilderFieldWidth,\n FormBuilderSchema,\n FormBuilderSection,\n FormBuilderSettingsDefinition\n} from '../types';\nimport { FormBuilderFieldHost } from '../field-host/field-host';\nimport { FormBuilderRenderer } from '../form-builder-renderer/form-builder-renderer';\nimport { FormBuilderSettingsHost } from '../settings-host/settings-host';\n\ninterface FormBuilderPaletteGroup {\n name: string;\n fields: FormBuilderFieldDefinition[];\n}\n\ninterface FormBuilderFieldTreeNode {\n id: string;\n label: string;\n name?: string;\n type: string;\n icon: string;\n kind: 'section' | 'field';\n field?: FormBuilderField;\n section?: FormBuilderSection;\n children?: FormBuilderFieldTreeNode[];\n}\n\ninterface FormBuilderFieldLocation {\n field: FormBuilderField;\n section?: FormBuilderSection;\n siblings: FormBuilderField[];\n index: number;\n}\n\ninterface FormBuilderTreeInsertTarget {\n fields: FormBuilderField[];\n index: number;\n section?: FormBuilderSection;\n}\n\ninterface FormBuilderContainerLocation {\n id: string;\n fields: FormBuilderField[];\n section?: FormBuilderSection;\n owner?: FormBuilderField;\n}\n\ninterface FormBuilderCanvasItem extends FormBuilderLayoutItem {\n field?: FormBuilderField;\n section?: FormBuilderSection;\n}\n\ntype FormBuilderNativeDragItem =\n | { kind: 'field'; definition: FormBuilderFieldDefinition }\n | { kind: 'section' };\n\nconst ROOT_DROP_LIST_ID = 'ngs-form-builder-root-fields';\nconst PALETTE_DRAG_TYPE = 'application/x-ngstarter-form-builder-field';\nconst PALETTE_DRAG_ITEM = 'application/x-ngstarter-form-builder-item';\nconst ACTUAL_FIELDS_TAB_INDEX = 1;\n\n@Component({\n selector: 'ngs-form-builder',\n exportAs: 'ngsFormBuilder',\n imports: [\n NgTemplateOutlet,\n FormsModule,\n Button,\n Card,\n CardAside,\n CardContent,\n CardHeader,\n DialogActions,\n DialogClose,\n DialogContent,\n DialogTitle,\n Icon,\n Input,\n Panel,\n PanelAside,\n PanelContent,\n PanelHeader,\n PanelSidebar,\n ScrollbarArea,\n Tab,\n TabGroup,\n Tree,\n TreeDragPlaceholder,\n TreeNode,\n TreeNodeDef,\n TreeNodePadding,\n FormBuilderFieldHost,\n FormBuilderRenderer,\n FormBuilderSettingsHost\n ],\n templateUrl: './form-builder.html',\n styleUrl: './form-builder.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-form-builder'\n }\n})\nexport class FormBuilder {\n private readonly dialog = inject(Dialog);\n private readonly confirmManager = inject(ConfirmManager);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly providedItems = inject(FORM_BUILDER_ITEMS, { optional: true }) ?? [];\n private readonly providedFields = inject(FORM_BUILDER_FIELDS, { optional: true }) ?? [];\n private readonly providedSettings = inject(FORM_BUILDER_SETTINGS, { optional: true }) ?? [];\n private readonly previewControls = new Map<string, FormControl>();\n private readonly fieldTreeNodeCache = new Map<string, FormBuilderFieldTreeNode>();\n private readonly canvasAnimationTimers = new WeakMap<HTMLElement, number>();\n private readonly actualFieldsTree = viewChild<Tree<FormBuilderFieldTreeNode>>('actualFieldsTree');\n private fieldTreeRootNodes: FormBuilderFieldTreeNode[] = [];\n private fieldTreeStructureKey = '';\n private suppressPaletteClick = false;\n\n readonly schema = model<FormBuilderSchema>(createDefaultFormBuilderSchema());\n readonly paletteTitle = input('Fields');\n readonly inspectorTitle = input('Field properties');\n\n readonly fieldSelected = output<FormBuilderFieldChange>();\n readonly fieldAdded = output<FormBuilderFieldChange>();\n readonly fieldRemoved = output<FormBuilderFieldChange>();\n\n protected readonly search = signal('');\n protected readonly fieldsTabIndex = signal(0);\n protected readonly selectedFieldId = signal<string | null>(null);\n protected readonly nativeDragItem = signal<FormBuilderNativeDragItem | null>(null);\n protected readonly nativeDragFieldDefinition = computed(() => {\n const item = this.nativeDragItem();\n return item?.kind === 'field' ? item.definition : null;\n });\n protected readonly nativeDragSection = computed(() => this.nativeDragItem()?.kind === 'section');\n protected readonly nativeDropTarget = signal<{ containerId: string; index: number } | null>(null);\n protected readonly expandedFieldTreeNodeIds = signal<ReadonlySet<string>>(new Set());\n protected readonly definitions = computed<FormBuilderFieldDefinition[]>(() => [\n ...DEFAULT_FORM_BUILDER_ITEMS,\n ...this.providedFields,\n ...this.providedItems\n ].reduce<FormBuilderFieldDefinition[]>((definitions, definition) => {\n const normalized = normalizeFieldDefinition(definition);\n const index = definitions.findIndex(item => item.type === normalized.type);\n\n if (index === -1) {\n definitions.push(normalized);\n } else {\n definitions[index] = {\n ...definitions[index],\n ...normalized,\n defaults: {\n ...definitions[index].defaults,\n ...normalized.defaults\n }\n };\n }\n\n return definitions;\n }, []));\n protected readonly settingsDefinitions = computed<FormBuilderSettingsDefinition[]>(() => this.providedSettings);\n protected readonly canvasItems = computed<FormBuilderCanvasItem[]>(() => this.resolveCanvasItems(this.schema()));\n protected readonly layoutDefinitions = computed<FormBuilderFieldDefinition[]>(() => {\n const query = this.search().trim().toLowerCase();\n\n return this.definitions().filter(definition => {\n if (definition.type === 'section' || (definition.group || 'Other') !== 'Layout') {\n return false;\n }\n\n return this.matchesPaletteQuery(definition, query);\n });\n });\n protected readonly paletteGroups = computed<FormBuilderPaletteGroup[]>(() => {\n const query = this.search().trim().toLowerCase();\n const groups = new Map<string, FormBuilderFieldDefinition[]>();\n\n for (const definition of this.definitions()) {\n const group = definition.group || 'Other';\n\n if (group === 'Layout' || !this.matchesPaletteQuery(definition, query)) {\n continue;\n }\n\n groups.set(group, [...(groups.get(group) ?? []), definition]);\n }\n\n return Array.from(groups, ([name, fields]) => ({ name, fields }));\n });\n protected readonly selectedField = computed(() => {\n const selectedId = this.selectedFieldId();\n return selectedId ? this.findFieldLocation(this.schema(), selectedId)?.field ?? null : null;\n });\n protected readonly selectedSection = computed(() => {\n const selectedId = this.selectedFieldId();\n return selectedId ? this.schema().sections.find(section => section.id === selectedId) ?? null : null;\n });\n protected readonly fieldTree = computed<FormBuilderFieldTreeNode[]>(() => {\n const nodes = this.resolveCanvasItems(this.schema()).map(item => {\n return item.field\n ? this.upsertFieldTreeNode(item.field)\n : this.upsertSectionTreeNode(item.section!);\n });\n const structureKey = this.resolveFieldTreeStructureKey(nodes);\n\n if (structureKey !== this.fieldTreeStructureKey) {\n this.fieldTreeStructureKey = structureKey;\n this.fieldTreeRootNodes = nodes;\n return this.fieldTreeRootNodes;\n }\n\n replaceArrayContents(this.fieldTreeRootNodes, nodes);\n return this.fieldTreeRootNodes;\n });\n protected readonly fieldTreeChildrenAccessor = (node: FormBuilderFieldTreeNode) => node.children ?? [];\n protected readonly hasFieldTreeChildren = (_: number, node: FormBuilderFieldTreeNode) =>\n !!node.children?.length;\n protected readonly trackFieldTreeNode = (_: number, node: FormBuilderFieldTreeNode) => node.id;\n protected readonly fieldTreeDraggablePredicate = (_node: FormBuilderFieldTreeNode) => true;\n protected readonly fieldTreeDropPredicate = (\n source: FormBuilderFieldTreeNode,\n target: FormBuilderFieldTreeNode,\n position: TreeNodeDropPosition\n ) => this.canDropFieldTreeNode(source, target, position);\n\n protected readonly updateSelectedField = (changes: Partial<FormBuilderField>) => {\n this.patchSelectedField(changes);\n };\n protected readonly updateSelectedSection = (changes: Partial<FormBuilderSection>) => {\n const section = this.selectedSection();\n\n if (section) {\n this.updateSection(section, changes);\n }\n };\n\n protected paletteDragStarted(event: DragEvent, definition: FormBuilderFieldDefinition): void {\n this.suppressPaletteClick = true;\n this.nativeDragItem.set({ kind: 'field', definition });\n event.dataTransfer?.setData(PALETTE_DRAG_TYPE, definition.type);\n event.dataTransfer?.setData(PALETTE_DRAG_ITEM, 'field');\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n this.setPaletteDragImage(event);\n }\n }\n\n protected sectionPaletteDragStarted(event: DragEvent): void {\n this.suppressPaletteClick = true;\n this.nativeDragItem.set({ kind: 'section' });\n event.dataTransfer?.setData(PALETTE_DRAG_ITEM, 'section');\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n this.setPaletteDragImage(event);\n }\n }\n\n protected paletteDragEnded(): void {\n this.nativeDragItem.set(null);\n this.setNativeDropTarget(null);\n window.setTimeout(() => {\n this.suppressPaletteClick = false;\n });\n }\n\n protected paletteClicked(definition: FormBuilderFieldDefinition): void {\n if (this.suppressPaletteClick) {\n return;\n }\n\n this.addField(definition);\n }\n\n protected nativeCanvasDragOver(event: DragEvent): void {\n this.nativeDragOver(\n event,\n ROOT_DROP_LIST_ID,\n '.ngs-form-builder-field:not(.ngs-form-builder-native-ghost-field), .ngs-form-builder-section:not(.ngs-form-builder-native-ghost-section)'\n );\n }\n\n protected nativeFieldDragOver(event: DragEvent, containerId: string): void {\n if (this.nativeDragItem()?.kind === 'section') {\n return;\n }\n\n event.stopPropagation();\n this.nativeDragOver(event, containerId, '.ngs-form-builder-field:not(.ngs-form-builder-native-ghost-field)');\n }\n\n protected nativeSectionDragOver(event: DragEvent, section: FormBuilderSection): void {\n if (this.nativeDragItem()?.kind === 'section') {\n return;\n }\n\n event.stopPropagation();\n this.nativeDragOverAtIndex(event, this.sectionDropListId(section), section.fields.length);\n }\n\n protected nativeSectionDrop(event: DragEvent, section: FormBuilderSection): void {\n if (this.nativeDragItem()?.kind === 'section') {\n return;\n }\n\n event.stopPropagation();\n this.nativeFieldDrop(event, this.sectionDropListId(section));\n }\n\n protected nativeContainerFieldDragOver(event: DragEvent, field: FormBuilderField): void {\n if (!this.isContainerField(field)) {\n return;\n }\n\n if (this.nativeDragItem()?.kind === 'section') {\n return;\n }\n\n event.stopPropagation();\n this.nativeDragOverAtIndex(event, this.fieldDropListId(field), field.children?.length ?? 0);\n }\n\n protected nativeContainerFieldDragLeave(event: DragEvent, field: FormBuilderField): void {\n if (!this.isContainerField(field)) {\n return;\n }\n\n this.nativeDragLeave(event, this.fieldDropListId(field));\n }\n\n protected nativeContainerFieldDrop(event: DragEvent, field: FormBuilderField): void {\n if (!this.isContainerField(field)) {\n return;\n }\n\n if (this.nativeDragItem()?.kind === 'section') {\n return;\n }\n\n event.stopPropagation();\n this.nativeFieldDrop(event, this.fieldDropListId(field));\n }\n\n protected nativeDragLeave(event: DragEvent, containerId: string): void {\n const target = event.currentTarget;\n const relatedTarget = event.relatedTarget;\n\n if (\n target instanceof HTMLElement &&\n relatedTarget instanceof Node &&\n target.contains(relatedTarget)\n ) {\n return;\n }\n\n if (this.nativeDropTarget()?.containerId === containerId) {\n this.setNativeDropTarget(null);\n }\n }\n\n protected nativeFieldDrop(event: DragEvent, containerId: string): void {\n const item = this.resolveNativeDragItem(event);\n\n if (!item) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n const target = this.nativeDropTarget();\n const index = target?.containerId === containerId ? target.index : 0;\n\n if (item.kind === 'section') {\n if (containerId !== ROOT_DROP_LIST_ID) {\n return;\n }\n\n this.insertNativeSection(index);\n } else {\n this.insertNativeField(item.definition, containerId, index);\n }\n\n this.nativeDragItem.set(null);\n this.setNativeDropTarget(null);\n }\n\n protected isNativeDropTarget(containerId: string, index: number): boolean {\n const target = this.nativeDropTarget();\n return target?.containerId === containerId && target.index === index;\n }\n\n protected addField(definition: FormBuilderFieldDefinition, sectionId?: string): void {\n const schema = cloneSchema(this.schema());\n const fields = sectionId\n ? schema.sections.find(item => item.id === sectionId)?.fields\n : schema.fields;\n\n if (!fields) {\n return;\n }\n\n const field = this.createField(definition, schema);\n const section = sectionId ? schema.sections.find(item => item.id === sectionId) : undefined;\n fields.push(field);\n if (!sectionId) {\n schema.layout = this.normalizedLayout(schema);\n }\n this.schema.set(schema);\n this.selectField(field, section);\n this.fieldAdded.emit({ field, section });\n }\n\n protected addSection(): void {\n const schema = cloneSchema(this.schema());\n schema.sections.push({\n id: uniqueId('section'),\n title: `Section ${schema.sections.length + 1}`,\n fields: []\n });\n schema.layout = this.normalizedLayout(schema);\n this.schema.set(schema);\n }\n\n protected openPreview(template: TemplateRef<unknown>): void {\n this.dialog.open(template, {\n width: '760px',\n maxWidth: 'calc(100vw - 48px)',\n maxHeight: 'calc(100vh - 48px)',\n ariaLabel: 'Form preview'\n });\n }\n\n protected removeSection(section: FormBuilderSection): void {\n const schema = cloneSchema(this.schema());\n schema.sections = schema.sections.filter(item => item.id !== section.id);\n schema.layout = this.normalizedLayout(schema).filter(item => !(item.kind === 'section' && item.id === section.id));\n\n if (schema.sections.length === 0) {\n const nextSection = {\n id: uniqueId('section'),\n title: 'Section',\n fields: []\n };\n schema.sections.push(nextSection);\n schema.layout = this.normalizedLayout(schema);\n }\n\n if (\n this.selectedFieldId() === section.id ||\n section.fields.some(field => field.id === this.selectedFieldId() || containsField(field, this.selectedFieldId()))\n ) {\n this.selectedFieldId.set(null);\n }\n\n this.schema.set(schema);\n }\n\n protected updateSection(section: FormBuilderSection, changes: Partial<FormBuilderSection>): void {\n const schema = cloneSchema(this.schema());\n const nextSection = schema.sections.find(item => item.id === section.id);\n\n if (!nextSection) {\n return;\n }\n\n Object.assign(nextSection, changes);\n this.schema.set(schema);\n this.restoreFieldTreeExpansion();\n }\n\n protected isSectionCollapsed(section: FormBuilderSection): boolean {\n return section.collapsed === true;\n }\n\n protected selectField(field: FormBuilderField, section?: FormBuilderSection): void {\n this.selectedFieldId.set(field.id);\n this.fieldSelected.emit({ field, section: section ?? undefined });\n }\n\n protected selectSection(section: FormBuilderSection): void {\n this.selectedFieldId.set(section.id);\n }\n\n protected selectCanvasField(field: FormBuilderField, section?: FormBuilderSection): void {\n this.selectField(field, section);\n this.openActualFieldsTreeForField(field.id);\n }\n\n protected selectFieldTreeNode(node: FormBuilderFieldTreeNode): void {\n if (node.section && !node.field) {\n this.selectSection(node.section);\n this.scrollCanvasSectionIntoView(node.section.id);\n return;\n }\n\n if (node.field) {\n if (node.section?.collapsed) {\n this.updateSection(node.section, { collapsed: false });\n }\n\n this.selectField(node.field, node.section);\n this.scrollCanvasFieldIntoView(node.field.id);\n }\n }\n\n protected toggleFieldTreeNode(\n tree: Tree<FormBuilderFieldTreeNode>,\n node: FormBuilderFieldTreeNode,\n event: MouseEvent\n ): void {\n event.stopPropagation();\n\n if (!node.children?.length) {\n return;\n }\n\n if (tree.isExpanded(node)) {\n tree.collapse(node);\n this.expandedFieldTreeNodeIds.update(ids => {\n const next = new Set(ids);\n next.delete(node.id);\n return next;\n });\n return;\n }\n\n tree.expand(node);\n this.expandedFieldTreeNodeIds.update(ids => new Set(ids).add(node.id));\n }\n\n protected isFieldTreeNodeExpanded(tree: Tree<FormBuilderFieldTreeNode>, node: FormBuilderFieldTreeNode): boolean {\n return tree.isExpanded(node) || this.expandedFieldTreeNodeIds().has(node.id);\n }\n\n protected fieldTreePlaceholderIcon(source: FormBuilderFieldTreeNode): string {\n return source.kind === 'section' ? 'fluent:folder-24-regular' : source.icon;\n }\n\n protected fieldTreeNodeDropped(event: TreeNodeDrop<FormBuilderFieldTreeNode>): void {\n if (event.source.kind === 'section') {\n this.dropFieldTreeSection(event);\n return;\n }\n\n if (\n event.source.kind !== 'field' ||\n event.source.id === event.target.id ||\n (event.target.kind === 'field' && event.position === 'inside' && !this.isContainerField(event.target.field!))\n ) {\n this.resetFieldTreeAfterRejectedDrop();\n return;\n }\n\n const schema = cloneSchema(this.schema());\n const sourceLocation = this.findFieldLocation(schema, event.source.id);\n\n if (!sourceLocation) {\n this.resetFieldTreeAfterRejectedDrop();\n return;\n }\n\n if (\n event.target.kind === 'field' &&\n (sourceLocation.field.id === event.target.id || containsField(sourceLocation.field, event.target.id))\n ) {\n this.resetFieldTreeAfterRejectedDrop();\n return;\n }\n\n const movingField = sourceLocation.field;\n this.detachFieldFromLocation(schema, sourceLocation);\n\n if (event.target.kind === 'section') {\n const inserted = event.position === 'inside'\n ? this.insertFieldIntoTreeSection(schema, movingField, event.target.id)\n : this.insertFieldAroundTreeSection(schema, movingField, event.target.id, event.position);\n\n if (inserted) {\n this.schema.set(schema);\n this.restoreFieldTreeExpansion();\n this.selectField(movingField, event.position === 'inside' ? inserted.section : undefined);\n return;\n }\n }\n\n if (event.target.kind === 'field') {\n const target = this.resolveTreeFieldInsertTarget(schema, event.target.id, event.position);\n\n if (target) {\n target.fields.splice(target.index, 0, movingField);\n if (target.fields === (schema.fields ?? [])) {\n this.insertRootFieldIntoLayout(schema, movingField, event.target.id, event.position);\n }\n this.schema.set(schema);\n this.restoreFieldTreeExpansion();\n this.selectField(movingField, target.section);\n return;\n }\n }\n\n this.resetFieldTreeAfterRejectedDrop();\n }\n\n protected confirmRemoveField(field: FormBuilderField): void {\n const confirmRef = this.confirmManager.open({\n title: 'Delete field',\n description: `Delete \"${field.label}\" from this form? This action cannot be undone.`\n });\n\n confirmRef.confirmed.subscribe(() => {\n this.removeField(field);\n });\n }\n\n private removeField(field: FormBuilderField): void {\n const schema = cloneSchema(this.schema());\n const location = this.findFieldLocation(schema, field.id);\n\n if (!location) {\n return;\n }\n\n location.siblings.splice(location.index, 1);\n schema.layout = this.normalizedLayout(schema).filter(item => !(item.kind === 'field' && item.id === field.id));\n this.deletePreviewControls(field);\n\n if (this.selectedFieldId() === field.id || containsField(field, this.selectedFieldId())) {\n this.selectedFieldId.set(null);\n }\n\n this.schema.set(schema);\n this.fieldRemoved.emit({ field, section: location.section });\n }\n\n protected sectionDropListId(section: FormBuilderSection): string {\n return `ngs-form-builder-section-${section.id}`;\n }\n\n protected fieldDropListId(field: FormBuilderField): string {\n return `ngs-form-builder-field-${field.id}`;\n }\n\n protected rootDropListId(): string {\n return ROOT_DROP_LIST_ID;\n }\n\n protected previewControl(field: FormBuilderField): FormControl {\n const existing = this.previewControls.get(field.id);\n\n if (existing) {\n return existing;\n }\n\n const control = new FormControl({\n value: field.defaultValue ?? null,\n disabled: true\n });\n this.previewControls.set(field.id, control);\n return control;\n }\n\n protected patchSelectedField(changes: Partial<FormBuilderField>): void {\n const selectedId = this.selectedFieldId();\n\n if (!selectedId) {\n return;\n }\n\n const schema = cloneSchema(this.schema());\n const location = this.findFieldLocation(schema, selectedId);\n\n if (!location) {\n return;\n }\n\n const nextField = {\n ...location.field,\n ...changes\n };\n\n if (this.isContainerField(nextField) && !nextField.children) {\n nextField.children = [];\n }\n\n location.siblings[location.index] = nextField;\n this.schema.set(schema);\n this.syncPreviewControl(nextField);\n }\n\n protected isContainerField(field: FormBuilderField): boolean {\n const definition = this.definitions().find(item => item.type === field.type);\n\n return definition?.acceptsChildren === true ||\n definition?.kind === 'layout' ||\n field.kind === 'layout' ||\n field.type === 'group' ||\n field.type === 'grid';\n }\n\n protected fieldIcon(field: FormBuilderField): string {\n return this.definitions().find(definition => definition.type === field.type)?.icon || 'fluent:form-24-regular';\n }\n\n protected definitionWidth(definition: FormBuilderFieldDefinition): FormBuilderFieldWidth {\n return definition.defaults?.width ?? this.defaultWidth(definition.type);\n }\n\n private matchesPaletteQuery(definition: FormBuilderFieldDefinition, query: string): boolean {\n return !query ||\n definition.label.toLowerCase().includes(query) ||\n definition.type.toLowerCase().includes(query) ||\n (definition.description?.toLowerCase().includes(query) ?? false);\n }\n\n private nativeDragOver(event: DragEvent, containerId: string, itemSelector: string): void {\n const item = this.nativeDragItem();\n\n if (!item || (item.kind === 'section' && containerId !== ROOT_DROP_LIST_ID)) {\n return;\n }\n\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n\n this.setNativeDropTarget({\n containerId,\n index: this.resolveNativeDropIndex(event, itemSelector)\n });\n }\n\n private nativeDragOverAtIndex(event: DragEvent, containerId: string, index: number): void {\n const item = this.nativeDragItem();\n\n if (!item || item.kind === 'section') {\n return;\n }\n\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n\n this.setNativeDropTarget({ containerId, index });\n }\n\n private setNativeDropTarget(target: { containerId: string; index: number } | null): void {\n const current = this.nativeDropTarget();\n\n if (current?.containerId === target?.containerId && current?.index === target?.index) {\n return;\n }\n\n const previousRects = this.captureCanvasItemRects();\n this.nativeDropTarget.set(target);\n this.afterNextPaint(() => this.animateCanvasItemMoves(previousRects));\n }\n\n private captureCanvasItemRects(): Map<string, DOMRect> {\n const rects = new Map<string, DOMRect>();\n\n for (const element of this.getCanvasAnimatedItems()) {\n const key = this.getCanvasAnimatedItemKey(element);\n\n if (key) {\n rects.set(key, element.getBoundingClientRect());\n }\n }\n\n return rects;\n }\n\n private animateCanvasItemMoves(previousRects: Map<string, DOMRect>): void {\n if (!previousRects.size) {\n return;\n }\n\n for (const element of this.getCanvasAnimatedItems()) {\n const key = this.getCanvasAnimatedItemKey(element);\n const previousRect = key ? previousRects.get(key) : undefined;\n\n if (!previousRect) {\n continue;\n }\n\n const nextRect = element.getBoundingClientRect();\n const deltaX = previousRect.left - nextRect.left;\n const deltaY = previousRect.top - nextRect.top;\n\n if (Math.abs(deltaX) < 0.5 && Math.abs(deltaY) < 0.5) {\n continue;\n }\n\n const animationTimer = this.canvasAnimationTimers.get(element);\n\n if (animationTimer) {\n window.clearTimeout(animationTimer);\n }\n\n element.style.transition = 'none';\n element.style.transform = `translate(${deltaX}px, ${deltaY}px)`;\n element.getBoundingClientRect();\n element.style.transition = 'transform 160ms cubic-bezier(0, 0, 0.2, 1)';\n element.style.transform = '';\n this.canvasAnimationTimers.set(element, window.setTimeout(() => {\n element.style.transition = '';\n element.style.transform = '';\n }, 180));\n }\n }\n\n private getCanvasAnimatedItems(): HTMLElement[] {\n return Array.from(this.elementRef.nativeElement.querySelectorAll<HTMLElement>(\n '.ngs-form-builder-canvas [data-form-builder-field-id], .ngs-form-builder-canvas [data-form-builder-section-id]'\n ));\n }\n\n private getCanvasAnimatedItemKey(element: HTMLElement): string | null {\n const fieldId = element.dataset['formBuilderFieldId'];\n\n if (fieldId) {\n return `field:${fieldId}`;\n }\n\n const sectionId = element.dataset['formBuilderSectionId'];\n return sectionId ? `section:${sectionId}` : null;\n }\n\n private insertNativeField(definition: FormBuilderFieldDefinition, containerId: string, index: number): void {\n const schema = cloneSchema(this.schema());\n const field = this.createField(definition, schema);\n\n if (containerId === ROOT_DROP_LIST_ID) {\n const layout = this.normalizedLayout(schema);\n schema.fields ??= [];\n schema.fields.push(field);\n layout.splice(clampIndex(index, layout.length), 0, { kind: 'field', id: field.id });\n schema.layout = layout;\n this.schema.set(schema);\n this.selectField(field);\n this.fieldAdded.emit({ field });\n return;\n }\n\n const targetContainer = this.findContainerLocation(schema, containerId);\n\n if (!targetContainer) {\n return;\n }\n\n targetContainer.fields.splice(clampIndex(index, targetContainer.fields.length), 0, field);\n this.schema.set(schema);\n this.selectField(field, targetContainer.section);\n this.fieldAdded.emit({ field, section: targetContainer.section });\n }\n\n private insertNativeSection(index: number): void {\n const schema = cloneSchema(this.schema());\n const section = {\n id: uniqueId('section'),\n title: `Section ${schema.sections.length + 1}`,\n fields: []\n };\n const layout = this.normalizedLayout(schema);\n\n schema.sections.push(section);\n layout.splice(clampIndex(index, layout.length), 0, { kind: 'section', id: section.id });\n schema.layout = layout;\n this.schema.set(schema);\n }\n\n private resolveNativeDragItem(event: DragEvent): FormBuilderNativeDragItem | null {\n const currentItem = this.nativeDragItem();\n\n if (currentItem) {\n return currentItem;\n }\n\n if (event.dataTransfer?.getData(PALETTE_DRAG_ITEM) === 'section') {\n return { kind: 'section' };\n }\n\n const type = event.dataTransfer?.getData(PALETTE_DRAG_TYPE);\n const definition = type ? this.definitions().find(item => item.type === type) ?? null : null;\n return definition ? { kind: 'field', definition } : null;\n }\n\n private resolveNativeDropIndex(event: DragEvent, itemSelector: string): number {\n const container = event.currentTarget;\n\n if (!(container instanceof HTMLElement)) {\n return 0;\n }\n\n const items = Array.from(container.children).filter((child): child is HTMLElement => {\n return child instanceof HTMLElement && child.matches(itemSelector);\n });\n\n for (let index = 0; index < items.length; index += 1) {\n const rect = items[index].getBoundingClientRect();\n const centerY = rect.top + rect.height / 2;\n const centerX = rect.left + rect.width / 2;\n const sameRow = event.clientY >= rect.top && event.clientY <= rect.bottom;\n\n if (event.clientY < centerY || (sameRow && event.clientX < centerX)) {\n return index;\n }\n }\n\n return items.length;\n }\n\n private setPaletteDragImage(event: DragEvent): void {\n const source = event.currentTarget;\n\n if (!(source instanceof HTMLElement) || !event.dataTransfer) {\n return;\n }\n\n const clone = source.cloneNode(true);\n\n if (!(clone instanceof HTMLElement)) {\n return;\n }\n\n clone.classList.add('ngs-form-builder-native-drag-image');\n source.parentElement?.appendChild(clone);\n const rect = source.getBoundingClientRect();\n event.dataTransfer.setDragImage(clone, Math.min(event.offsetX, rect.width), Math.min(event.offsetY, rect.height));\n window.setTimeout(() => clone.remove());\n }\n\n private createField(definition: FormBuilderFieldDefinition, schema: FormBuilderSchema): FormBuilderField {\n const baseLabel = definition.defaults?.label || definition.label;\n const name = uniqueFieldName(toFieldName(baseLabel), schema);\n const kind = definition.defaults?.kind ?? definition.kind ?? 'field';\n\n return {\n id: uniqueId('field'),\n name,\n type: definition.type,\n kind,\n label: baseLabel,\n width: definition.defaults?.width ?? this.defaultWidth(definition.type),\n visibility: {\n form: true,\n email: true,\n pdf: true\n },\n ...definition.defaults\n };\n }\n\n private defaultWidth(type: string): FormBuilderFieldWidth {\n return 12;\n }\n\n private resolveCanvasItems(schema: FormBuilderSchema): FormBuilderCanvasItem[] {\n const fieldsById = new Map((schema.fields ?? []).map(field => [field.id, field]));\n const sectionsById = new Map(schema.sections.map(section => [section.id, section]));\n const items: FormBuilderCanvasItem[] = [];\n\n for (const item of this.normalizedLayout(schema)) {\n if (item.kind === 'field') {\n const field = fieldsById.get(item.id);\n\n if (field) {\n items.push({ ...item, field });\n }\n\n continue;\n }\n\n const section = sectionsById.get(item.id);\n\n if (section) {\n items.push({ ...item, section });\n }\n }\n\n return items;\n }\n\n private normalizedLayout(schema: FormBuilderSchema): FormBuilderLayoutItem[] {\n const used = new Set<string>();\n const layout: FormBuilderLayoutItem[] = [];\n const fieldsById = new Map((schema.fields ?? []).map(field => [field.id, field]));\n const sectionsById = new Map(schema.sections.map(section => [section.id, section]));\n\n for (const item of schema.layout ?? []) {\n const key = `${item.kind}:${item.id}`;\n\n if (used.has(key)) {\n continue;\n }\n\n if ((item.kind === 'field' && fieldsById.has(item.id)) || (item.kind === 'section' && sectionsById.has(item.id))) {\n used.add(key);\n layout.push(item);\n }\n }\n\n for (const field of schema.fields ?? []) {\n const key = `field:${field.id}`;\n\n if (!used.has(key)) {\n used.add(key);\n layout.push({ kind: 'field', id: field.id });\n }\n }\n\n for (const section of schema.sections) {\n const key = `section:${section.id}`;\n\n if (!used.has(key)) {\n used.add(key);\n layout.push({ kind: 'section', id: section.id });\n }\n }\n\n return layout;\n }\n\n private detachFieldFromLocation(schema: FormBuilderSchema, location: FormBuilderFieldLocation): void {\n location.siblings.splice(location.index, 1);\n\n if (location.siblings === (schema.fields ?? [])) {\n schema.layout = this.normalizedLayout(schema).filter(item => !(item.kind === 'field' && item.id === location.field.id));\n }\n }\n\n private insertFieldIntoTreeSection(\n schema: FormBuilderSchema,\n field: FormBuilderField,\n sectionId: string\n ): FormBuilderTreeInsertTarget | null {\n const section = schema.sections.find(item => item.id === sectionId);\n\n if (!section) {\n return null;\n }\n\n section.fields.push(field);\n return {\n fields: section.fields,\n index: section.fields.length - 1,\n section\n };\n }\n\n private insertFieldAroundTreeSection(\n schema: FormBuilderSchema,\n field: FormBuilderField,\n sectionId: string,\n position: 'before' | 'after' | 'inside'\n ): FormBuilderTreeInsertTarget | null {\n if (position === 'inside') {\n return this.insertFieldIntoTreeSection(schema, field, sectionId);\n }\n\n const section = schema.sections.find(item => item.id === sectionId);\n\n if (!section) {\n return null;\n }\n\n schema.fields ??= [];\n\n if (!schema.fields.some(item => item.id === field.id)) {\n schema.fields.push(field);\n }\n\n const layout = this.normalizedLayout(schema).filter(item => !(item.kind === 'field' && item.id === field.id));\n const sectionIndex = layout.findIndex(item => item.kind === 'section' && item.id === sectionId);\n layout.splice(sectionIndex === -1 ? layout.length : sectionIndex + (position === 'after' ? 1 : 0), 0, {\n kind: 'field',\n id: field.id\n });\n schema.layout = layout;\n\n return {\n fields: schema.fields,\n index: schema.fields.findIndex(item => item.id === field.id)\n };\n }\n\n private resolveTreeFieldInsertTarget(\n schema: FormBuilderSchema,\n targetFieldId: string,\n position: 'before' | 'inside' | 'after'\n ): FormBuilderTreeInsertTarget | null {\n const targetLocation = this.findFieldLocation(schema, targetFieldId);\n\n if (!targetLocation) {\n return null;\n }\n\n if (position === 'inside' && this.isContainerField(targetLocation.field)) {\n targetLocation.field.children ??= [];\n return {\n fields: targetLocation.field.children,\n index: targetLocation.field.children.length,\n section: targetLocation.section\n };\n }\n\n const insertIndex = position === 'before' ? targetLocation.index : targetLocation.index + 1;\n return {\n fields: targetLocation.siblings,\n index: insertIndex,\n section: targetLocation.section\n };\n }\n\n private insertRootFieldIntoLayout(\n schema: FormBuilderSchema,\n field: FormBuilderField,\n targetFieldId: string,\n position: 'before' | 'inside' | 'after'\n ): void {\n schema.fields ??= [];\n\n if (!schema.fields.some(item => item.id === field.id)) {\n schema.fields.push(field);\n }\n\n const layout = this.normalizedLayout(schema).filter(item => !(item.kind === 'field' && item.id === field.id));\n const targetIndex = layout.findIndex(item => item.kind === 'field' && item.id === targetFieldId);\n layout.splice(targetIndex === -1 ? layout.length : targetIndex + (position === 'before' ? 0 : 1), 0, {\n kind: 'field',\n id: field.id\n });\n schema.layout = layout;\n }\n\n private resetFieldTreeAfterRejectedDrop(): void {\n this.schema.set(cloneSchema(this.schema()));\n this.restoreFieldTreeExpansion();\n }\n\n private canDropFieldTreeNode(\n source: FormBuilderFieldTreeNode,\n target: FormBuilderFieldTreeNode,\n position: TreeNodeDropPosition\n ): boolean {\n if (source.id === target.id) {\n return false;\n }\n\n if (source.kind === 'section') {\n return position !== 'inside' && (target.kind === 'section' || this.isRootFieldTreeNode(target));\n }\n\n if (target.kind === 'field' && position === 'inside') {\n return !!target.field && this.isContainerField(target.field);\n }\n\n return true;\n }\n\n private dropFieldTreeSection(event: TreeNodeDrop<FormBuilderFieldTreeNode>): void {\n if (!this.canDropFieldTreeNode(event.source, event.target, event.position)) {\n this.resetFieldTreeAfterRejectedDrop();\n return;\n }\n\n const schema = cloneSchema(this.schema());\n const layout = this.normalizedLayout(schema);\n const sourceIndex = layout.findIndex(item => item.kind === 'section' && item.id === event.source.id);\n const targetKind = event.target.kind === 'section' ? 'section' : 'field';\n const targetIndex = layout.findIndex(item => item.kind === targetKind && item.id === event.target.id);\n\n if (sourceIndex < 0 || targetIndex < 0) {\n this.resetFieldTreeAfterRejectedDrop();\n return;\n }\n\n const [sectionItem] = layout.splice(sourceIndex, 1);\n const adjustedTargetIndex = sourceIndex < targetIndex ? targetIndex - 1 : targetIndex;\n layout.splice(adjustedTargetIndex + (event.position === 'after' ? 1 : 0), 0, sectionItem);\n schema.layout = layout;\n this.schema.set(schema);\n this.restoreFieldTreeExpansion();\n }\n\n private isRootFieldTreeNode(node: FormBuilderFieldTreeNode): boolean {\n if (node.kind !== 'field') {\n return false;\n }\n\n return this.resolveCanvasItems(this.schema()).some(item => item.kind === 'field' && item.id === node.id);\n }\n\n private restoreFieldTreeExpansion(): void {\n const expandedIds = this.expandedFieldTreeNodeIds();\n\n if (!expandedIds.size) {\n return;\n }\n\n this.afterNextPaint(() => {\n this.afterNextPaint(() => {\n const tree = this.actualFieldsTree();\n\n if (!tree) {\n return;\n }\n\n for (const node of this.flattenFieldTree(this.fieldTree())) {\n if (node.children?.length && expandedIds.has(node.id)) {\n tree.expand(node);\n }\n }\n });\n });\n }\n\n private flattenFieldTree(nodes: FormBuilderFieldTreeNode[]): FormBuilderFieldTreeNode[] {\n return nodes.flatMap(node => [node, ...this.flattenFieldTree(node.children ?? [])]);\n }\n\n private openActualFieldsTreeForField(fieldId: string): void {\n const path = this.findFieldTreeNodePath(this.fieldTree(), fieldId);\n\n this.fieldsTabIndex.set(ACTUAL_FIELDS_TAB_INDEX);\n\n if (!path.length) {\n return;\n }\n\n const expandableIds = path\n .slice(0, -1)\n .filter(node => !!node.children?.length)\n .map(node => node.id);\n\n if (expandableIds.length) {\n this.expandedFieldTreeNodeIds.update(ids => {\n const next = new Set(ids);\n\n for (const id of expandableIds) {\n next.add(id);\n }\n\n return next;\n });\n }\n\n this.afterNextPaint(() => {\n this.afterNextPaint(() => {\n const tree = this.actualFieldsTree();\n\n if (tree) {\n for (const node of path.slice(0, -1)) {\n if (node.children?.length) {\n tree.expand(node);\n }\n }\n }\n\n this.scrollFieldTreeNodeIntoView(fieldId);\n });\n });\n }\n\n private findFieldTreeNodePath(\n nodes: FormBuilderFieldTreeNode[],\n fieldId: string,\n path: FormBuilderFieldTreeNode[] = []\n ): FormBuilderFieldTreeNode[] {\n for (const node of nodes) {\n const nextPath = [...path, node];\n\n if (node.id === fieldId) {\n return nextPath;\n }\n\n const childPath = this.findFieldTreeNodePath(node.children ?? [], fieldId, nextPath);\n\n if (childPath.length) {\n return childPath;\n }\n }\n\n return [];\n }\n\n private scrollFieldTreeNodeIntoView(fieldId: string): void {\n const target = this.findFieldTreeNodeElement(fieldId);\n\n if (!target) {\n return;\n }\n\n const scrollableContent = target\n .closest('ngs-scrollbar-area')\n ?.querySelector<HTMLElement>('.scrollable-content');\n\n if (!scrollableContent) {\n target.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'smooth' });\n return;\n }\n\n this.scrollElementFullyIntoView(target, scrollableContent);\n }\n\n private findFieldTreeNodeElement(fieldId: string): HTMLElement | null {\n const nodes = this.elementRef.nativeElement.querySelectorAll<HTMLElement>(\n '.ngs-form-builder-palette [data-form-builder-tree-node-id]'\n );\n\n return Array.from(nodes).find(node => node.dataset['formBuilderTreeNodeId'] === fieldId) ?? null;\n }\n\n private scrollCanvasFieldIntoView(fieldId: string): void {\n this.scrollCanvasItemIntoView(() => this.findCanvasFieldElement(fieldId));\n }\n\n private scrollCanvasSectionIntoView(sectionId: string): void {\n this.scrollCanvasItemIntoView(() => this.findCanvasSectionElement(sectionId));\n }\n\n private scrollCanvasItemIntoView(resolveTarget: () => HTMLElement | null): void {\n this.afterNextPaint(() => {\n this.afterNextPaint(() => {\n const target = resolveTarget();\n\n if (!target) {\n return;\n }\n\n const scrollableContent = target\n .closest('ngs-scrollbar-area')\n ?.querySelector<HTMLElement>('.scrollable-content');\n\n if (!scrollableContent) {\n target.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'smooth' });\n return;\n }\n\n this.scrollElementFullyIntoView(target, scrollableContent);\n });\n });\n }\n\n private findCanvasFieldElement(fieldId: string): HTMLElement | null {\n const fields = this.elementRef.nativeElement.querySelectorAll<HTMLElement>(\n '.ngs-form-builder-canvas [data-form-builder-field-id]'\n );\n\n return Array.from(fields).find(field => field.dataset['formBuilderFieldId'] === fieldId) ?? null;\n }\n\n private findCanvasSectionElement(sectionId: string): HTMLElement | null {\n const sections = this.elementRef.nativeElement.querySelectorAll<HTMLElement>(\n '.ngs-form-builder-canvas [data-form-builder-section-id]'\n );\n\n return Array.from(sections).find(section => section.dataset['formBuilderSectionId'] === sectionId) ?? null;\n }\n\n private syncPreviewControl(field: FormBuilderField): void {\n const control = this.previewControls.get(field.id);\n\n if (!control) {\n return;\n }\n\n queueMicrotask(() => {\n const value = field.defaultValue ?? null;\n\n if (control.value !== value) {\n control.setValue(value, { emitEvent: false });\n }\n\n if (control.enabled) {\n control.disable({ emitEvent: false });\n }\n });\n }\n\n private scrollElementFullyIntoView(target: HTMLElement, scrollableContent: HTMLElement): void {\n const padding = 16;\n const containerRect = scrollableContent.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n const availableHeight = Math.max(0, containerRect.height - padding * 2);\n const availableWidth = Math.max(0, containerRect.width - padding * 2);\n let top = scrollableContent.scrollTop;\n let left = scrollableContent.scrollLeft;\n\n if (targetRect.height > availableHeight || targetRect.top < containerRect.top + padding) {\n top += targetRect.top - containerRect.top - padding;\n } else if (targetRect.bottom > containerRect.bottom - padding) {\n top += targetRect.bottom - containerRect.bottom + padding;\n }\n\n if (targetRect.width > availableWidth || targetRect.left < containerRect.left + padding) {\n left += targetRect.left - containerRect.left - padding;\n } else if (targetRect.right > containerRect.right - padding) {\n left += targetRect.right - containerRect.right + padding;\n }\n\n scrollableContent.scrollTo({\n top: Math.max(0, top),\n left: Math.max(0, left),\n behavior: 'smooth'\n });\n }\n\n private afterNextPaint(callback: () => void): void {\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(callback);\n return;\n }\n\n window.setTimeout(callback);\n }\n\n private upsertSectionTreeNode(section: FormBuilderSection): FormBuilderFieldTreeNode {\n const node = this.getCachedFieldTreeNode(section.id);\n const children = section.fields.map(field => this.upsertFieldTreeNode(field, section));\n\n node.label = section.title;\n node.name = undefined;\n node.type = 'section';\n node.icon = 'fluent:folder-24-regular';\n node.kind = 'section';\n node.field = undefined;\n node.section = section;\n node.children ??= [];\n replaceArrayContents(node.children, children);\n return node;\n }\n\n private upsertFieldTreeNode(field: FormBuilderField, section?: FormBuilderSection): FormBuilderFieldTreeNode {\n const definition = this.definitions().find(item => item.type === field.type);\n const node = this.getCachedFieldTreeNode(field.id);\n const children = field.children?.map(child => this.upsertFieldTreeNode(child, section));\n\n node.label = field.label;\n node.name = field.name;\n node.type = field.type;\n node.icon = definition?.icon || 'fluent:form-24-regular';\n node.kind = 'field';\n node.field = field;\n node.section = section;\n\n if (children?.length) {\n node.children ??= [];\n replaceArrayContents(node.children, children);\n } else {\n node.children = undefined;\n }\n\n return node;\n }\n\n private getCachedFieldTreeNode(id: string): FormBuilderFieldTreeNode {\n const cached = this.fieldTreeNodeCache.get(id);\n\n if (cached) {\n return cached;\n }\n\n const node: FormBuilderFieldTreeNode = {\n id,\n label: '',\n type: '',\n icon: 'fluent:form-24-regular',\n kind: 'field'\n };\n\n this.fieldTreeNodeCache.set(id, node);\n return node;\n }\n\n private resolveFieldTreeStructureKey(nodes: FormBuilderFieldTreeNode[]): string {\n return nodes\n .map(node => `${node.kind}:${node.id}[${this.resolveFieldTreeStructureKey(node.children ?? [])}]`)\n .join('|');\n }\n\n private findContainerLocation(schema: FormBuilderSchema, containerId: string): FormBuilderContainerLocation | null {\n if (containerId === ROOT_DROP_LIST_ID) {\n return {\n id: containerId,\n fields: schema.fields ?? []\n };\n }\n\n const rootNested = this.findFieldContainerLocation(schema.fields ?? [], undefined, containerId);\n\n if (rootNested) {\n return rootNested;\n }\n\n for (const section of schema.sections) {\n if (this.sectionDropListId(section) === containerId) {\n return {\n id: containerId,\n fields: section.fields,\n section\n };\n }\n\n const nested = this.findFieldContainerLocation(section.fields, section, containerId);\n\n if (nested) {\n return nested;\n }\n }\n\n return null;\n }\n\n private findFieldContainerLocation(\n fields: FormBuilderField[],\n section: FormBuilderSection | undefined,\n containerId: string\n ): FormBuilderContainerLocation | null {\n for (const field of fields) {\n if (this.isContainerField(field) && this.fieldDropListId(field) === containerId) {\n field.children ??= [];\n\n return {\n id: containerId,\n fields: field.children,\n section,\n owner: field\n };\n }\n\n const nested = this.findFieldContainerLocation(field.children ?? [], section, containerId);\n\n if (nested) {\n return nested;\n }\n }\n\n return null;\n }\n\n private findFieldLocation(schema: FormBuilderSchema, fieldId: string): FormBuilderFieldLocation | null {\n const rootLocation = findFieldLocationInFields(schema.fields ?? [], fieldId);\n\n if (rootLocation) {\n return rootLocation;\n }\n\n for (const section of schema.sections) {\n const location = findFieldLocationInFields(section.fields, fieldId, section);\n\n if (location) {\n return location;\n }\n }\n\n return null;\n }\n\n private deletePreviewControls(field: FormBuilderField): void {\n this.previewControls.delete(field.id);\n\n for (const child of field.children ?? []) {\n this.deletePreviewControls(child);\n }\n }\n}\n\nexport function createDefaultFormBuilderSchema(): FormBuilderSchema {\n const sectionId = uniqueId('section');\n\n return {\n title: 'New form',\n fields: [],\n layout: [{ kind: 'section', id: sectionId }],\n sections: [\n {\n id: sectionId,\n title: 'General information',\n fields: []\n }\n ]\n };\n}\n\nfunction uniqueId(prefix: string): string {\n return `${prefix}_${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction cloneSchema(schema: FormBuilderSchema): FormBuilderSchema {\n return {\n ...schema,\n fields: (schema.fields ?? []).map(cloneField),\n layout: schema.layout?.map(item => ({ ...item })),\n sections: schema.sections.map(section => ({\n ...section,\n fields: section.fields.map(cloneField)\n }))\n };\n}\n\nfunction cloneField(field: FormBuilderField): FormBuilderField {\n return {\n ...field,\n options: field.options?.map(option => ({ ...option })),\n validation: field.validation?.map(rule => ({ ...rule })),\n visibility: field.visibility ? { ...field.visibility } : undefined,\n settings: field.settings ? { ...field.settings } : undefined,\n children: field.children?.map(cloneField)\n };\n}\n\nfunction clampIndex(index: number, length: number): number {\n return Math.max(0, Math.min(index, length));\n}\n\nfunction replaceArrayContents<T>(target: T[], source: T[]): void {\n target.splice(0, target.length, ...source);\n}\n\nfunction normalizeFieldDefinition(definition: FormBuilderItemDefinition): FormBuilderFieldDefinition {\n return {\n ...definition,\n kind: definition.kind ?? 'field'\n } as FormBuilderFieldDefinition;\n}\n\nfunction toFieldName(label: string): string {\n return label\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '') || 'field';\n}\n\nfunction uniqueFieldName(baseName: string, schema: FormBuilderSchema): string {\n const usedNames = new Set(\n [\n ...(schema.fields ?? []).flatMap(field => collectFieldNames(field)),\n ...schema.sections.flatMap(section => section.fields.flatMap(field => collectFieldNames(field)))\n ]\n );\n\n if (!usedNames.has(baseName)) {\n return baseName;\n }\n\n let index = 2;\n let nextName = `${baseName}_${index}`;\n\n while (usedNames.has(nextName)) {\n index += 1;\n nextName = `${baseName}_${index}`;\n }\n\n return nextName;\n}\n\nfunction collectFieldNames(field: FormBuilderField): string[] {\n return [field.name, ...(field.children ?? []).flatMap(collectFieldNames)];\n}\n\nfunction findFieldLocationInFields(\n fields: FormBuilderField[],\n fieldId: string,\n section?: FormBuilderSection\n): FormBuilderFieldLocation | null {\n const index = fields.findIndex(field => field.id === fieldId);\n\n if (index !== -1) {\n return {\n field: fields[index],\n section,\n siblings: fields,\n index\n };\n }\n\n for (const field of fields) {\n const location = findFieldLocationInFields(field.children ?? [], fieldId, section);\n\n if (location) {\n return location;\n }\n }\n\n return null;\n}\n\nfunction containsField(field: FormBuilderField, fieldId: string | null): boolean {\n if (!fieldId) {\n return false;\n }\n\n return (field.children ?? []).some(child => child.id === fieldId || containsField(child, fieldId));\n}\n","<ng-template #nativeFieldGhost>\n @if (nativeDragFieldDefinition(); as definition) {\n <div\n class=\"ngs-form-builder-field ngs-form-builder-field-placeholder ngs-form-builder-native-ghost-field\"\n [class.is-width-1]=\"definitionWidth(definition) === 1\"\n [class.is-width-2]=\"definitionWidth(definition) === 2\"\n [class.is-width-3]=\"definitionWidth(definition) === 3\"\n [class.is-width-4]=\"definitionWidth(definition) === 4\"\n [class.is-width-5]=\"definitionWidth(definition) === 5\"\n [class.is-width-6]=\"definitionWidth(definition) === 6\"\n [class.is-width-7]=\"definitionWidth(definition) === 7\"\n [class.is-width-8]=\"definitionWidth(definition) === 8\"\n [class.is-width-9]=\"definitionWidth(definition) === 9\"\n [class.is-width-10]=\"definitionWidth(definition) === 10\"\n [class.is-width-11]=\"definitionWidth(definition) === 11\"\n [class.is-width-12]=\"definitionWidth(definition) === 12\">\n <div class=\"ngs-form-builder-field-header\">\n <div class=\"ngs-form-builder-field-label\">\n <ngs-icon [name]=\"definition.icon || 'fluent:form-24-regular'\"/>\n <span>{{ definition.defaults?.label || definition.label }}</span>\n </div>\n <span class=\"ngs-form-builder-drag-icon\">\n <ngs-icon name=\"fluent:arrow-move-24-regular\"/>\n </span>\n </div>\n <div class=\"ngs-form-builder-ghost-control\"></div>\n </div>\n }\n</ng-template>\n\n<ng-template #nativeSectionGhost>\n <ngs-card class=\"ngs-form-builder-section ngs-form-builder-native-ghost-section\">\n <ngs-card-header>\n <div class=\"ngs-form-builder-section-heading\">\n <span class=\"ngs-form-builder-drag-icon\">\n <ngs-icon name=\"fluent:folder-add-24-regular\"/>\n </span>\n <span class=\"ngs-form-builder-section-title\">Section</span>\n </div>\n </ngs-card-header>\n </ngs-card>\n</ng-template>\n\n<ng-template #fieldList let-fields let-containerId=\"containerId\" let-section=\"section\">\n <div\n class=\"ngs-form-builder-drop-list ngs-form-builder-canvas-drop-list\"\n [id]=\"containerId\"\n (dragover)=\"nativeFieldDragOver($event, containerId)\"\n (dragleave)=\"nativeDragLeave($event, containerId)\"\n (drop)=\"nativeFieldDrop($event, containerId)\">\n @for (field of fields; track field.id; let fieldIndex = $index) {\n @if (isNativeDropTarget(containerId, fieldIndex)) {\n <ng-container [ngTemplateOutlet]=\"nativeFieldGhost\"/>\n }\n @if (isContainerField(field)) {\n <div\n class=\"ngs-form-builder-field is-container\"\n [class.is-width-1]=\"(field.width ?? 12) === 1\"\n [class.is-width-2]=\"field.width === 2\"\n [class.is-width-3]=\"field.width === 3\"\n [class.is-width-4]=\"field.width === 4\"\n [class.is-width-5]=\"field.width === 5\"\n [class.is-width-6]=\"field.width === 6\"\n [class.is-width-7]=\"field.width === 7\"\n [class.is-width-8]=\"field.width === 8\"\n [class.is-width-9]=\"field.width === 9\"\n [class.is-width-10]=\"field.width === 10\"\n [class.is-width-11]=\"field.width === 11\"\n [class.is-width-12]=\"(field.width ?? 12) === 12\"\n [class.is-selected]=\"selectedFieldId() === field.id\"\n [attr.data-form-builder-field-id]=\"field.id\"\n (dragover)=\"nativeContainerFieldDragOver($event, field)\"\n (dragleave)=\"nativeContainerFieldDragLeave($event, field)\"\n (drop)=\"nativeContainerFieldDrop($event, field)\"\n (click)=\"$event.stopPropagation(); selectCanvasField(field, section)\">\n <div class=\"ngs-form-builder-field-header\">\n <div class=\"ngs-form-builder-field-label\">\n <ngs-icon [name]=\"fieldIcon(field)\"/>\n <span>{{ field.label }}</span>\n </div>\n </div>\n\n <div class=\"ngs-form-builder-grid-field\">\n <ng-container\n [ngTemplateOutlet]=\"fieldList\"\n [ngTemplateOutletContext]=\"{\n $implicit: field.children ?? [],\n containerId: fieldDropListId(field),\n section\n }\"/>\n </div>\n </div>\n } @else {\n <div\n class=\"ngs-form-builder-field\"\n [class.is-width-1]=\"(field.width ?? 12) === 1\"\n [class.is-width-2]=\"field.width === 2\"\n [class.is-width-3]=\"field.width === 3\"\n [class.is-width-4]=\"field.width === 4\"\n [class.is-width-5]=\"field.width === 5\"\n [class.is-width-6]=\"field.width === 6\"\n [class.is-width-7]=\"field.width === 7\"\n [class.is-width-8]=\"field.width === 8\"\n [class.is-width-9]=\"field.width === 9\"\n [class.is-width-10]=\"field.width === 10\"\n [class.is-width-11]=\"field.width === 11\"\n [class.is-width-12]=\"(field.width ?? 12) === 12\"\n [class.is-selected]=\"selectedFieldId() === field.id\"\n [attr.data-form-builder-field-id]=\"field.id\"\n (click)=\"$event.stopPropagation(); selectCanvasField(field, section)\">\n <div class=\"ngs-form-builder-field-header\">\n <div class=\"ngs-form-builder-field-label\">\n <ngs-icon [name]=\"fieldIcon(field)\"/>\n <span>{{ field.label }}</span>\n </div>\n </div>\n\n <ngs-form-builder-field-host\n [field]=\"field\"\n [control]=\"previewControl(field)\"\n [definitions]=\"definitions()\"\n [readonly]=\"true\"\n [editableCanvas]=\"true\"/>\n </div>\n }\n }\n\n @if (isNativeDropTarget(containerId, fields.length)) {\n <ng-container [ngTemplateOutlet]=\"nativeFieldGhost\"/>\n }\n </div>\n</ng-template>\n\n<ngs-panel class=\"ngs-form-builder-shell\">\n <ngs-panel-header autoHeight class=\"flex items-center justify-between gap-4 border-b border-b-subtle px-5 py-3\">\n <div class=\"min-w-0\">\n <p class=\"text-sm text-secondary\">Form builder</p>\n <h2 class=\"truncate text-lg font-semibold\">{{ schema().title || 'Untitled form' }}</h2>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button ngsButton=\"outlined\" type=\"button\" (click)=\"openPreview(previewDialog)\">\n <ngs-icon name=\"fluent:eye-24-regular\"/>\n Preview\n </button>\n </div>\n </ngs-panel-header>\n\n <ngs-panel-sidebar class=\"ngs-form-builder-palette w-80 border-e border-e-subtle\">\n <ngs-tab-group\n animationDuration=\"0ms\"\n [selectedIndex]=\"fieldsTabIndex()\"\n (selectedIndexChange)=\"fieldsTabIndex.set($event)\">\n <ngs-tab label=\"Placeholders\" class=\"relative\">\n <ngs-scrollbar-area>\n <div class=\"flex flex-col gap-5 p-4\">\n <section class=\"flex flex-col gap-2\">\n <h4 class=\"text-xs font-semibold uppercase tracking-normal text-secondary\">Layout</h4>\n <button\n type=\"button\"\n class=\"ngs-form-builder-palette-item\"\n draggable=\"true\"\n (dragstart)=\"sectionPaletteDragStarted($event)\"\n (dragend)=\"paletteDragEnded()\">\n <span class=\"ngs-form-builder-palette-item-content\">\n <span class=\"ngs-form-builder-palette-item-label\">\n <ngs-icon name=\"fluent:folder-add-24-regular\"/>\n <span>Section</span>\n </span>\n </span>\n </button>\n\n @for (definition of layoutDefinitions(); track definition.type) {\n <button\n type=\"button\"\n class=\"ngs-form-builder-palette-item\"\n draggable=\"true\"\n (dragstart)=\"paletteDragStarted($event, definition)\"\n (dragend)=\"paletteDragEnded()\"\n (click)=\"paletteClicked(definition)\">\n <span class=\"ngs-form-builder-palette-item-content\">\n <span class=\"ngs-form-builder-palette-item-label\">\n <ngs-icon [name]=\"definition.icon || 'fluent:form-24-regular'\"/>\n <span>{{ definition.label }}</span>\n </span>\n </span>\n </button>\n }\n </section>\n\n @for (group of paletteGroups(); track group.name) {\n <section class=\"flex flex-col gap-2\">\n <h4 class=\"text-xs font-semibold uppercase tracking-normal text-secondary\">{{ group.name }}</h4>\n <div class=\"flex flex-col gap-2\">\n @for (definition of group.fields; track definition.type) {\n <button\n type=\"button\"\n class=\"ngs-form-builder-palette-item\"\n draggable=\"true\"\n (dragstart)=\"paletteDragStarted($event, definition)\"\n (dragend)=\"paletteDragEnded()\"\n (click)=\"paletteClicked(definition)\">\n <span class=\"ngs-form-builder-palette-item-content\">\n <span class=\"ngs-form-builder-palette-item-label\">\n <ngs-icon [name]=\"definition.icon || 'fluent:form-24-regular'\"/>\n <span>{{ definition.label }}</span>\n </span>\n </span>\n </button>\n }\n </div>\n </section>\n }\n </div>\n </ngs-scrollbar-area>\n </ngs-tab>\n <ngs-tab label=\"Actual fields\" class=\"relative\">\n <ngs-scrollbar-area>\n <div class=\"ps-1 pe-4 py-4\">\n <ngs-tree\n #actualFieldsTree=\"ngsTree\"\n [dataSource]=\"fieldTree()\"\n [childrenAccessor]=\"fieldTreeChildrenAccessor\"\n [trackBy]=\"trackFieldTreeNode\"\n [draggablePredicate]=\"fieldTreeDraggablePredicate\"\n [dropPredicate]=\"fieldTreeDropPredicate\"\n [nodePaddingIndent]=\"80\"\n [reorderOnDrop]=\"false\"\n (nodeDrop)=\"fieldTreeNodeDropped($event)\"\n draggable>\n <ng-template ngsTreeDragPlaceholder let-source=\"source\">\n <div class=\"ngs-form-builder-tree-drag-placeholder\">\n <ngs-icon [name]=\"fieldTreePlaceholderIcon(source)\"/>\n <span>{{ source.label }}</span>\n </div>\n </ng-template>\n\n <ngs-tree-node *ngsTreeNodeDef=\"let node\" ngsTreeNodePadding [value]=\"node.id\">\n <button\n ngsButton=\"text\"\n type=\"button\"\n class=\"ngs-form-builder-tree-item\"\n [class.is-selected]=\"selectedFieldId() === node.id\"\n [attr.data-form-builder-tree-node-id]=\"node.id\"\n (click)=\"selectFieldTreeNode(node)\">\n <ngs-icon [name]=\"node.icon\"/>\n {{ node.label }}\n<!-- <span class=\"inline-flex flex-col\">-->\n<!-- -->\n<!-- @if (node.name) {-->\n<!-- <small>{{ node.name }}</small>-->\n<!-- }-->\n<!-- </span>-->\n </button>\n </ngs-tree-node>\n\n <ngs-tree-node *ngsTreeNodeDef=\"let node; when: hasFieldTreeChildren\"\n ngsTreeNodePadding\n [value]=\"node.id\"\n [cdkTreeNodeTypeaheadLabel]=\"node.label\">\n <button\n ngsIconButton\n class=\"ngs-form-builder-tree-toggle\"\n [attr.aria-label]=\"'Toggle ' + node.label\"\n (click)=\"toggleFieldTreeNode(actualFieldsTree, node, $event)\">\n <ngs-icon [name]=\"isFieldTreeNodeExpanded(actualFieldsTree, node) ? 'fluent:chevron-down-24-regular' : 'fluent:chevron-right-24-regular'\" class=\"size-4\"/>\n </button>\n <button\n ngsButton=\"text\"\n type=\"button\"\n class=\"ngs-form-builder-tree-item\"\n [class.is-selected]=\"selectedFieldId() === node.id\"\n [attr.data-form-builder-tree-node-id]=\"node.id\"\n (click)=\"selectFieldTreeNode(node)\">\n <ngs-icon [name]=\"node.icon\"/>\n <span>{{ node.label }}</span>\n <!-- @if (node.name) {-->\n <!-- <small>{{ node.name }}</small>-->\n <!-- }-->\n </button>\n </ngs-tree-node>\n </ngs-tree>\n </div>\n </ngs-scrollbar-area>\n </ngs-tab>\n </ngs-tab-group>\n </ngs-panel-sidebar>\n\n <ngs-panel-content>\n <ngs-scrollbar-area [absolute]=\"true\">\n <div class=\"ngs-form-builder-canvas flex flex-col gap-4 p-5\">\n <div\n class=\"ngs-form-builder-canvas-list\"\n [id]=\"rootDropListId()\"\n (dragover)=\"nativeCanvasDragOver($event)\"\n (dragleave)=\"nativeDragLeave($event, rootDropListId())\"\n (drop)=\"nativeFieldDrop($event, rootDropListId())\">\n @for (item of canvasItems(); track item.kind + ':' + item.id; let itemIndex = $index) {\n @if (isNativeDropTarget(rootDropListId(), itemIndex)) {\n <ng-container [ngTemplateOutlet]=\"nativeDragSection() ? nativeSectionGhost : nativeFieldGhost\"/>\n }\n @if (item.field; as field) {\n @if (isContainerField(field)) {\n <div\n class=\"ngs-form-builder-field is-container\"\n [class.is-width-1]=\"(field.width ?? 12) === 1\"\n [class.is-width-2]=\"field.width === 2\"\n [class.is-width-3]=\"field.width === 3\"\n [class.is-width-4]=\"field.width === 4\"\n [class.is-width-5]=\"field.width === 5\"\n [class.is-width-6]=\"field.width === 6\"\n [class.is-width-7]=\"field.width === 7\"\n [class.is-width-8]=\"field.width === 8\"\n [class.is-width-9]=\"field.width === 9\"\n [class.is-width-10]=\"field.width === 10\"\n [class.is-width-11]=\"field.width === 11\"\n [class.is-width-12]=\"(field.width ?? 12) === 12\"\n [class.is-selected]=\"selectedFieldId() === field.id\"\n [attr.data-form-builder-field-id]=\"field.id\"\n (dragover)=\"nativeContainerFieldDragOver($event, field)\"\n (dragleave)=\"nativeContainerFieldDragLeave($event, field)\"\n (drop)=\"nativeContainerFieldDrop($event, field)\"\n (click)=\"$event.stopPropagation(); selectCanvasField(field)\">\n <div class=\"ngs-form-builder-field-header\">\n <div class=\"ngs-form-builder-field-label\">\n <ngs-icon [name]=\"fieldIcon(field)\"/>\n <span>{{ field.label }}</span>\n </div>\n </div>\n\n <div class=\"ngs-form-builder-grid-field\">\n <ng-container\n [ngTemplateOutlet]=\"fieldList\"\n [ngTemplateOutletContext]=\"{\n $implicit: field.children ?? [],\n containerId: fieldDropListId(field)\n }\"/>\n </div>\n </div>\n } @else {\n <div\n class=\"ngs-form-builder-field\"\n [class.is-width-1]=\"(field.width ?? 12) === 1\"\n [class.is-width-2]=\"field.width === 2\"\n [class.is-width-3]=\"field.width === 3\"\n [class.is-width-4]=\"field.width === 4\"\n [class.is-width-5]=\"field.width === 5\"\n [class.is-width-6]=\"field.width === 6\"\n [class.is-width-7]=\"field.width === 7\"\n [class.is-width-8]=\"field.width === 8\"\n [class.is-width-9]=\"field.width === 9\"\n [class.is-width-10]=\"field.width === 10\"\n [class.is-width-11]=\"field.width === 11\"\n [class.is-width-12]=\"(field.width ?? 12) === 12\"\n [class.is-selected]=\"selectedFieldId() === field.id\"\n [attr.data-form-builder-field-id]=\"field.id\"\n (click)=\"$event.stopPropagation(); selectCanvasField(field)\">\n <div class=\"ngs-form-builder-field-header\">\n <div class=\"ngs-form-builder-field-label\">\n <ngs-icon [name]=\"fieldIcon(field)\"/>\n <span>{{ field.label }}</span>\n </div>\n </div>\n\n <ngs-form-builder-field-host\n [field]=\"field\"\n [control]=\"previewControl(field)\"\n [definitions]=\"definitions()\"\n [readonly]=\"true\"\n [editableCanvas]=\"true\"/>\n </div>\n }\n } @else if (item.section; as section) {\n <ngs-card class=\"ngs-form-builder-section\"\n [attr.data-form-builder-section-id]=\"section.id\"\n (dragover)=\"nativeSectionDragOver($event, section)\"\n (dragleave)=\"nativeDragLeave($event, sectionDropListId(section))\"\n (drop)=\"nativeSectionDrop($event, section)\"\n (click)=\"selectSection(section)\">\n <ngs-card-header>\n <div class=\"ngs-form-builder-section-heading\">\n <input ngsInput\n class=\"ngs-form-builder-section-title\"\n [ngModel]=\"section.title\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"updateSection(section, { title: $event })\"\n aria-label=\"Section title\">\n </div>\n @if (section.description) {\n <p class=\"truncate text-sm text-secondary\">{{ section.description }}</p>\n }\n\n <ngs-card-aside>\n <div class=\"ngs-form-builder-section-actions\">\n <button ngsIconButton type=\"button\" aria-label=\"Collapse section\" (click)=\"updateSection(section, { collapsed: !section.collapsed })\">\n <ngs-icon [name]=\"isSectionCollapsed(section) ? 'fluent:chevron-down-24-regular' : 'fluent:chevron-up-24-regular'\"/>\n </button>\n <button ngsIconButton type=\"button\" aria-label=\"Delete section\" (click)=\"removeSection(section)\">\n <ngs-icon name=\"fluent:delete-24-regular\"/>\n </button>\n </div>\n </ngs-card-aside>\n </ngs-card-header>\n\n @if (!isSectionCollapsed(section)) {\n <ngs-card-content>\n <ng-container\n [ngTemplateOutlet]=\"fieldList\"\n [ngTemplateOutletContext]=\"{\n $implicit: section.fields,\n containerId: sectionDropListId(section),\n section\n }\"/>\n </ngs-card-content>\n } @else if (isNativeDropTarget(sectionDropListId(section), section.fields.length)) {\n <ngs-card-content>\n <div class=\"ngs-form-builder-drop-list ngs-form-builder-canvas-drop-list\">\n <ng-container [ngTemplateOutlet]=\"nativeFieldGhost\"/>\n </div>\n </ngs-card-content>\n }\n </ngs-card>\n }\n }\n\n @if (isNativeDropTarget(rootDropListId(), canvasItems().length)) {\n <ng-container [ngTemplateOutlet]=\"nativeDragSection() ? nativeSectionGhost : nativeFieldGhost\"/>\n }\n\n </div>\n </div>\n </ngs-scrollbar-area>\n </ngs-panel-content>\n\n <ngs-panel-aside class=\"ngs-form-builder-inspector w-88 border-s border-s-subtle\">\n <ngs-scrollbar-area [absolute]=\"true\">\n <div class=\"flex flex-col gap-4 p-5\">\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"min-w-0\">\n <h3 class=\"text-base font-semibold\">{{ inspectorTitle() }}</h3>\n @if (selectedField() || selectedSection()) {\n <p class=\"truncate text-sm text-secondary\">{{ selectedField()?.label || selectedSection()?.title }}</p>\n }\n </div>\n <button ngsIconButton type=\"button\" aria-label=\"Clear selection\" (click)=\"selectedFieldId.set(null)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </div>\n\n @if (selectedField() || selectedSection()) {\n <ngs-form-builder-settings-host\n [field]=\"selectedField()\"\n [section]=\"selectedSection()\"\n [schema]=\"schema()\"\n [definitions]=\"definitions()\"\n [settingsDefinitions]=\"settingsDefinitions()\"\n [update]=\"updateSelectedField\"\n [updateSection]=\"updateSelectedSection\"/>\n\n @if (selectedField(); as field) {\n <button ngsButton=\"text\" type=\"button\" class=\"ngs-form-builder-delete-button\" (click)=\"confirmRemoveField(field)\">\n <ngs-icon name=\"fluent:delete-24-regular\"/>\n Delete field\n </button>\n }\n } @else {\n <div class=\"ngs-form-builder-empty-inspector\">\n Select a field on the canvas or in the fields tree to edit its settings.\n </div>\n }\n </div>\n </ngs-scrollbar-area>\n </ngs-panel-aside>\n</ngs-panel>\n\n<ng-template #previewDialog>\n <h3 ngs-dialog-title>{{ schema().title || 'Form preview' }}</h3>\n <ngs-dialog-content class=\"ngs-form-builder-preview-dialog-content\">\n <ngs-form-builder-renderer\n [schema]=\"schema()\"\n [showSubmit]=\"false\"/>\n </ngs-dialog-content>\n <ngs-dialog-actions align=\"end\">\n <button ngsButton=\"outlined\" type=\"button\" ngs-dialog-close>Close</button>\n </ngs-dialog-actions>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["normalizeFieldDefinition"],"mappings":"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"}
@@ -37,8 +37,9 @@ class ScrollbarArea {
37
37
  scrollRatioY = computed(() => this.hasScrollY() ? this.contentClientHeight() / this.contentScrollHeight() : 1, ...(ngDevMode ? [{ debugName: "scrollRatioY" }] : /* istanbul ignore next */ []));
38
38
  minThumbHeight = 20;
39
39
  thumbHeight = computed(() => {
40
- if (!this.hasScrollY())
40
+ if (!this.hasScrollY()) {
41
41
  return 0;
42
+ }
42
43
  const trackHeight = this.trackClientHeight();
43
44
  const ratio = this.scrollRatioY();
44
45
  const calculated = trackHeight * ratio;