@praxisui/manual-form 1.0.0-beta.3 → 1.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Manual Form Toolkit
|
|
2
2
|
|
|
3
|
+
## 🔰 Exemplos / Quickstart
|
|
4
|
+
|
|
5
|
+
Para ver esta biblioteca em funcionamento em uma aplicação completa, utilize o projeto de exemplo (Quickstart):
|
|
6
|
+
|
|
7
|
+
- Repositório: https://github.com/codexrodrigues/praxis-ui-quickstart
|
|
8
|
+
- O Quickstart demonstra a integração das bibliotecas `@praxisui/*` em um app Angular, incluindo instalação, configuração e uso em telas reais.
|
|
9
|
+
|
|
3
10
|
## Instalação
|
|
4
11
|
|
|
5
12
|
```bash
|
|
@@ -192,6 +199,14 @@ export class MinhaPagina {
|
|
|
192
199
|
</praxis-manual-form>
|
|
193
200
|
```
|
|
194
201
|
|
|
202
|
+
Observações importantes:
|
|
203
|
+
- Aplique `[formGroup]` diretamente no seletor `<praxis-manual-form>` (no host).
|
|
204
|
+
- Evite envolver o componente com um `<form [formGroup]>` externo; não há necessidade e pode causar forms aninhados.
|
|
205
|
+
|
|
206
|
+
Modo dinâmico (sem host tipado):
|
|
207
|
+
- Quando nenhum `[formGroup]` é informado no host, o container renderiza internamente um `<form [formGroup]="formGroup">` para atender o Angular Forms e evitar o erro NG01050.
|
|
208
|
+
- Isso dispensa qualquer “shim” externo para os exemplos dinâmicos.
|
|
209
|
+
|
|
195
210
|
## API do ManualFormComponent (resumo)
|
|
196
211
|
|
|
197
212
|
- Inputs (sinais):
|
|
@@ -2,9 +2,9 @@ import { ensureIds, DynamicFormService, CONFIG_STORAGE, FieldControlType } from
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { inject, Optional, Inject, Injectable, input, output, ChangeDetectionStrategy, Component, Input, InjectionToken, isDevMode, ChangeDetectorRef, DestroyRef, ContentChildren, Directive, HostListener } from '@angular/core';
|
|
4
4
|
import { BehaviorSubject, debounceTime } from 'rxjs';
|
|
5
|
-
import * as i1 from '@angular/common';
|
|
5
|
+
import * as i1$1 from '@angular/common';
|
|
6
6
|
import { CommonModule } from '@angular/common';
|
|
7
|
-
import * as
|
|
7
|
+
import * as i1 from '@angular/forms';
|
|
8
8
|
import { FormGroupDirective, FormGroup, FormControl, Validators, ReactiveFormsModule, FormControlName, ControlContainer, FormsModule } from '@angular/forms';
|
|
9
9
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
10
|
import * as i3 from '@praxisui/settings-panel';
|
|
@@ -862,6 +862,10 @@ class ManualFormComponent {
|
|
|
862
862
|
this.saved.emit(this.instance);
|
|
863
863
|
this.metadataChange.emit(this.instance.currentConfig);
|
|
864
864
|
}
|
|
865
|
+
/** True when host applied [formGroup] directly on <praxis-manual-form>. */
|
|
866
|
+
isHostTyped() {
|
|
867
|
+
return !!this.hostFormGroupDirective?.form;
|
|
868
|
+
}
|
|
865
869
|
handleReset() {
|
|
866
870
|
if (!this.instance) {
|
|
867
871
|
return;
|
|
@@ -1212,7 +1216,7 @@ class ManualFormComponent {
|
|
|
1212
1216
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: ManualFormComponent, isStandalone: true, selector: "praxis-manual-form", inputs: { formId: { classPropertyName: "formId", publicName: "formId", isSignal: true, isRequired: true, transformFunction: null }, formTitle: { classPropertyName: "formTitle", publicName: "formTitle", isSignal: true, isRequired: false, transformFunction: null }, formDescription: { classPropertyName: "formDescription", publicName: "formDescription", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, enableAutoSave: { classPropertyName: "enableAutoSave", publicName: "enableAutoSave", isSignal: true, isRequired: false, transformFunction: null }, editModeEnabled: { classPropertyName: "editModeEnabled", publicName: "editModeEnabled", isSignal: true, isRequired: false, transformFunction: null }, persistenceOptions: { classPropertyName: "persistenceOptions", publicName: "persistenceOptions", isSignal: true, isRequired: false, transformFunction: null }, usePathNames: { classPropertyName: "usePathNames", publicName: "usePathNames", isSignal: true, isRequired: false, transformFunction: null }, autoSaveDebounceMs: { classPropertyName: "autoSaveDebounceMs", publicName: "autoSaveDebounceMs", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { submitted: "submitted", saved: "saved", resetEvent: "reset", metadataChange: "metadataChange" }, providers: [
|
|
1213
1217
|
// Provide a ControlContainer at the host boundary so projected formControlName can resolve it
|
|
1214
1218
|
{ provide: ControlContainer, useExisting: ManualFormComponent },
|
|
1215
|
-
], queries: [{ propertyName: "formControls", predicate: FormControlName, descendants: true }], ngImport: i0, template: "<div class=\"pdx-manual-form\">\n @if (showHeader()) {\n <praxis-manual-form-header\n [instance]=\"instance\"\n [title]=\"formTitle()\"\n [description]=\"formDescription()\"\n [editModeEnabled]=\"editModeEnabled()\"\n (editForm)=\"openFormEditor()\"\n (save)=\"handleSave()\"\n (reset)=\"handleReset()\"\n ></praxis-manual-form-header>\n }\n\n <
|
|
1219
|
+
], queries: [{ propertyName: "formControls", predicate: FormControlName, descendants: true }], ngImport: i0, template: "<div class=\"pdx-manual-form\">\n @if (showHeader()) {\n <praxis-manual-form-header\n [instance]=\"instance\"\n [title]=\"formTitle()\"\n [description]=\"formDescription()\"\n [editModeEnabled]=\"editModeEnabled()\"\n (editForm)=\"openFormEditor()\"\n (save)=\"handleSave()\"\n (reset)=\"handleReset()\"\n ></praxis-manual-form-header>\n }\n\n @if (isHostTyped()) {\n <div class=\"pdx-manual-form__form\" (submit)=\"handleSubmit(); $event.preventDefault()\">\n <ng-content></ng-content>\n </div>\n } @else {\n <form class=\"pdx-manual-form__form\" [formGroup]=\"formGroup\" (submit)=\"handleSubmit(); $event.preventDefault()\">\n <ng-content></ng-content>\n </form>\n }\n\n @if (showActions() && resolvedActions) {\n <praxis-manual-form-actions\n [actions]=\"resolvedActions\"\n (actionClick)=\"handleAction($event)\"\n ></praxis-manual-form-actions>\n }\n</div>\n", styles: [".pdx-manual-form{display:flex;flex-direction:column;gap:1.5rem}.pdx-manual-form__form{display:grid;gap:1rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: ManualFormHeaderComponent, selector: "praxis-manual-form-header", inputs: ["instance", "title", "description", "saveLabel", "resetLabel", "editModeEnabled", "editFormLabel"], outputs: ["save", "reset", "editForm"] }, { kind: "component", type: ManualFormActionsComponent, selector: "praxis-manual-form-actions", inputs: ["actions", "trackByFn"], outputs: ["actionClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1216
1220
|
}
|
|
1217
1221
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ManualFormComponent, decorators: [{
|
|
1218
1222
|
type: Component,
|
|
@@ -1224,7 +1228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
|
|
|
1224
1228
|
], providers: [
|
|
1225
1229
|
// Provide a ControlContainer at the host boundary so projected formControlName can resolve it
|
|
1226
1230
|
{ provide: ControlContainer, useExisting: ManualFormComponent },
|
|
1227
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"pdx-manual-form\">\n @if (showHeader()) {\n <praxis-manual-form-header\n [instance]=\"instance\"\n [title]=\"formTitle()\"\n [description]=\"formDescription()\"\n [editModeEnabled]=\"editModeEnabled()\"\n (editForm)=\"openFormEditor()\"\n (save)=\"handleSave()\"\n (reset)=\"handleReset()\"\n ></praxis-manual-form-header>\n }\n\n <
|
|
1231
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"pdx-manual-form\">\n @if (showHeader()) {\n <praxis-manual-form-header\n [instance]=\"instance\"\n [title]=\"formTitle()\"\n [description]=\"formDescription()\"\n [editModeEnabled]=\"editModeEnabled()\"\n (editForm)=\"openFormEditor()\"\n (save)=\"handleSave()\"\n (reset)=\"handleReset()\"\n ></praxis-manual-form-header>\n }\n\n @if (isHostTyped()) {\n <div class=\"pdx-manual-form__form\" (submit)=\"handleSubmit(); $event.preventDefault()\">\n <ng-content></ng-content>\n </div>\n } @else {\n <form class=\"pdx-manual-form__form\" [formGroup]=\"formGroup\" (submit)=\"handleSubmit(); $event.preventDefault()\">\n <ng-content></ng-content>\n </form>\n }\n\n @if (showActions() && resolvedActions) {\n <praxis-manual-form-actions\n [actions]=\"resolvedActions\"\n (actionClick)=\"handleAction($event)\"\n ></praxis-manual-form-actions>\n }\n</div>\n", styles: [".pdx-manual-form{display:flex;flex-direction:column;gap:1.5rem}.pdx-manual-form__form{display:grid;gap:1rem}\n"] }]
|
|
1228
1232
|
}], ctorParameters: () => [], propDecorators: { formControls: [{
|
|
1229
1233
|
type: ContentChildren,
|
|
1230
1234
|
args: [FormControlName, { descendants: true }]
|
|
@@ -1436,7 +1440,7 @@ class ManualFormConfigEditorComponent {
|
|
|
1436
1440
|
</div>
|
|
1437
1441
|
</div>
|
|
1438
1442
|
</div>
|
|
1439
|
-
`, isInline: true, styles: [".mf-editor{display:grid;gap:12px;padding:12px}.mf-editor__toolbar{display:flex;align-items:center;gap:8px}.mf-editor__toolbar .spacer{flex:1}.mf-editor__list{display:grid;gap:6px}.mf-editor__row{display:grid;grid-template-columns:2fr 2fr 1fr 1fr 1fr 1fr 1fr;align-items:center;gap:8px;padding:8px 10px;border:1px solid rgba(0,0,0,.08);border-radius:6px}.mf-editor__row--head{font-weight:600;background:#0000000a}.col code{background:#0000000d;padding:2px 6px;border-radius:4px}button{padding:6px 10px;border:1px solid rgba(0,0,0,.12);background:#fff;border-radius:4px;cursor:pointer}.toggle{display:inline-flex;align-items:center;gap:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type:
|
|
1443
|
+
`, isInline: true, styles: [".mf-editor{display:grid;gap:12px;padding:12px}.mf-editor__toolbar{display:flex;align-items:center;gap:8px}.mf-editor__toolbar .spacer{flex:1}.mf-editor__list{display:grid;gap:6px}.mf-editor__row{display:grid;grid-template-columns:2fr 2fr 1fr 1fr 1fr 1fr 1fr;align-items:center;gap:8px;padding:8px 10px;border:1px solid rgba(0,0,0,.08);border-radius:6px}.mf-editor__row--head{font-weight:600;background:#0000000a}.col code{background:#0000000d;padding:2px 6px;border-radius:4px}button{padding:6px 10px;border:1px solid rgba(0,0,0,.12);background:#fff;border-radius:4px;cursor:pointer}.toggle{display:inline-flex;align-items:center;gap:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
1440
1444
|
}
|
|
1441
1445
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ManualFormConfigEditorComponent, decorators: [{
|
|
1442
1446
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"praxisui-manual-form.mjs","sources":["../../../projects/praxis-manual-form/src/lib/utils/clone.util.ts","../../../projects/praxis-manual-form/src/lib/seeds/manual-form.seed.ts","../../../projects/praxis-manual-form/src/lib/stores/manual-form-instance.ts","../../../projects/praxis-manual-form/src/lib/components/manual-form-header/manual-form-header.component.ts","../../../projects/praxis-manual-form/src/lib/components/manual-form-actions/manual-form-actions.component.ts","../../../projects/praxis-manual-form/src/lib/tokens/manual-form.tokens.ts","../../../projects/praxis-manual-form/src/lib/services/manual-field-metadata-bridge.service.ts","../../../projects/praxis-manual-form/src/lib/components/manual-form/manual-form.component.ts","../../../projects/praxis-manual-form/src/lib/components/manual-form/manual-form.component.html","../../../projects/praxis-manual-form/src/lib/components/manual-form-config-editor/manual-form-config-editor.component.ts","../../../projects/praxis-manual-form/src/lib/directives/manual-field.directive.ts","../../../projects/praxis-manual-form/src/lib/directives/manual-field-editor-on-dblclick.directive.ts","../../../projects/praxis-manual-form/src/public-api.ts","../../../projects/praxis-manual-form/src/praxisui-manual-form.ts"],"sourcesContent":["export function deepClone<T>(value: T): T {\n if (typeof (globalThis as any)?.structuredClone === 'function') {\n return (globalThis as any).structuredClone(value);\n }\n\n try {\n return JSON.parse(JSON.stringify(value)) as T;\n } catch {\n if (Array.isArray(value)) {\n return value.slice() as unknown as T;\n }\n if (value && typeof value === 'object') {\n return { ...(value as Record<string, unknown>) } as T;\n }\n return value;\n }\n}\n\n","import { ensureIds, FormConfig, FieldMetadata } from '@praxisui/core';\n\nimport { deepClone } from '../utils/clone.util';\nimport {\n ManualFieldMetadataMap,\n ManualFormId,\n ManualFormSeed,\n} from '../models/manual-form.types';\n\nexport interface ManualFormSeedOptions {\n source?: ManualFormSeed['source'];\n version?: string;\n context?: Record<string, any>;\n}\n\nexport function createManualFormSeed(\n formId: ManualFormId,\n config: FormConfig,\n options: ManualFormSeedOptions = {},\n): ManualFormSeed {\n const cloned = deepClone(config);\n const normalized = ensureIds(cloned);\n normalized.fieldMetadata = (normalized.fieldMetadata || []).map((fm) => ({ ...fm }));\n\n return {\n formId,\n config: normalized,\n source: options.source ?? 'local',\n version: options.version ?? normalized.metadata?.version,\n context: options.context,\n };\n}\n\nexport function toFieldMetadataMap(\n fieldMetadata: FieldMetadata[] | undefined,\n): ManualFieldMetadataMap {\n const map: ManualFieldMetadataMap = new Map();\n for (const meta of fieldMetadata || []) {\n if (!meta?.name) continue;\n map.set(meta.name, { ...meta });\n }\n return map;\n}\n","import { inject, Injectable, Optional, Inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport {\n CONFIG_STORAGE,\n ConfigStorage,\n DynamicFormService,\n FieldMetadata,\n FormConfig,\n} from '@praxisui/core';\n\nimport { deepClone } from '../utils/clone.util';\nimport {\n ManualFieldMetadataMap,\n ManualFormId,\n ManualFormPersistenceOptions,\n ManualFormSeed,\n ManualFormSnapshot,\n ManualFormState,\n} from '../models/manual-form.types';\nimport { toFieldMetadataMap } from '../seeds/manual-form.seed';\n\ninterface PersistPayload extends ManualFormSnapshot {\n version?: string;\n}\n\n/**\n * Runtime instance that keeps manual form configuration, metadata and\n * FormGroup in sync. The instance is created through the factory below so the\n * host applications do not need to manage storage or dynamic form services.\n */\nexport class ManualFormInstance {\n private readonly formConfig$: BehaviorSubject<FormConfig>;\n private readonly fieldMetadata$: BehaviorSubject<ManualFieldMetadataMap>;\n private readonly state$: BehaviorSubject<ManualFormState>;\n private readonly formGroup: FormGroup;\n private readonly boundComponents = new Map<string, unknown>();\n\n constructor(\n private readonly formId: ManualFormId,\n private readonly seed: ManualFormSeed,\n initialConfig: FormConfig,\n private readonly dynamicFormService: DynamicFormService,\n private readonly storage?: ConfigStorage,\n private readonly persistenceOptions?: ManualFormPersistenceOptions,\n externalForm?: FormGroup,\n ) {\n const configClone = deepClone(initialConfig);\n const metadataMap = toFieldMetadataMap(configClone.fieldMetadata);\n\n this.formConfig$ = new BehaviorSubject<FormConfig>(configClone);\n this.fieldMetadata$ = new BehaviorSubject<ManualFieldMetadataMap>(metadataMap);\n if (externalForm) {\n this.formGroup = externalForm;\n // Ensure controls exist and match metadata on the provided form\n this.cloneFieldMetadata(metadataMap).forEach((meta) => {\n try {\n this.dynamicFormService.updateControlFromMetadata(this.formGroup, meta, {\n emitEvent: false,\n });\n } catch {\n /* ignore */\n }\n });\n } else {\n this.formGroup = this.dynamicFormService.createFormGroupFromMetadata(\n this.cloneFieldMetadata(metadataMap),\n );\n }\n this.state$ = new BehaviorSubject<ManualFormState>({\n formId: this.formId,\n config: deepClone(configClone),\n fields: this.cloneFieldMetadata(metadataMap),\n });\n }\n\n /** Observable stream for consumers interested in config mutations. */\n get stateChanges$(): Observable<ManualFormState> {\n return this.state$.asObservable();\n }\n\n get formConfigChanges$(): Observable<FormConfig> {\n return this.formConfig$.asObservable();\n }\n\n get fieldMetadataChanges$(): Observable<ManualFieldMetadataMap> {\n return this.fieldMetadata$.asObservable();\n }\n\n get currentConfig(): FormConfig {\n return this.formConfig$.value;\n }\n\n get currentFieldMetadata(): ManualFieldMetadataMap {\n return this.fieldMetadata$.value;\n }\n\n get form(): FormGroup {\n return this.formGroup;\n }\n\n /** Retrieve metadata for a specific field (cloned to avoid mutations). */\n getFieldMetadata(fieldName: string): FieldMetadata | undefined {\n const meta = this.fieldMetadata$.value.get(fieldName);\n return meta ? { ...meta } : undefined;\n }\n\n /**\n * Registers a component instance to receive metadata updates for the\n * specified field. Helpful for manual templates that wish to keep hot-update\n * behaviour without wiring everything manually.\n */\n bindComponent(fieldName: string, componentInstance: unknown): void {\n if (!fieldName || !componentInstance) {\n return;\n }\n this.boundComponents.set(fieldName, componentInstance);\n this.refreshBoundComponent(fieldName);\n }\n\n unbindComponent(fieldName: string): void {\n this.boundComponents.delete(fieldName);\n }\n\n /**\n * Applies a partial metadata patch to a field and propagates the changes to\n * the FormConfig, runtime FormGroup and state streams.\n */\n patchFieldMetadata(fieldName: string, patch: Partial<FieldMetadata>): void {\n const current = this.fieldMetadata$.value.get(fieldName);\n if (!current) {\n return;\n }\n\n const next = this.deepMerge(current as any, patch as any) as FieldMetadata;\n this.fieldMetadata$.value.set(fieldName, next);\n this.fieldMetadata$.next(new Map(this.fieldMetadata$.value));\n\n const configClone = deepClone(this.formConfig$.value);\n configClone.fieldMetadata = (configClone.fieldMetadata || []).map((fm) =>\n fm.name === fieldName ? { ...next } : fm,\n );\n this.publishConfig(configClone);\n\n try {\n this.dynamicFormService.updateControlFromMetadata(this.formGroup, next, {\n emitEvent: false,\n });\n } catch {\n /* Defensive: control might not exist if form is customised manually. */\n }\n\n this.refreshBoundComponent(fieldName);\n }\n\n /** Replaces the entire FormConfig, typically used after reconciling with backend seeds. */\n replaceConfig(config: FormConfig): void {\n const cloned = deepClone(config);\n this.fieldMetadata$.next(toFieldMetadataMap(cloned.fieldMetadata));\n this.publishConfig(cloned);\n\n const metadataList = this.getFieldMetadataArray();\n // Rebuild controls to ensure validators align with the new metadata.\n metadataList.forEach((meta) => {\n try {\n this.dynamicFormService.updateControlFromMetadata(this.formGroup, meta, {\n emitEvent: false,\n });\n } catch {\n /* ignore */\n }\n });\n\n // Refresh all bound components with the new metadata references.\n for (const fieldName of this.boundComponents.keys()) {\n this.refreshBoundComponent(fieldName);\n }\n }\n\n /** Restores configuration back to the original seed definition. */\n resetToSeed(): void {\n this.replaceConfig(this.seed.config);\n }\n\n /**\n * Persists the current configuration and, optionally, the provided form value\n * using ConfigStorage. By default, stores the FormGroup raw value.\n */\n saveDraft(value: Record<string, any> | null = null): void {\n if (!this.storage) {\n return;\n }\n\n const key = buildStorageKey(this.formId, this.persistenceOptions);\n const payload: PersistPayload = {\n config: deepClone(this.formConfig$.value),\n value: value ?? this.formGroup.getRawValue(),\n metadata: {\n savedAt: new Date().toISOString(),\n savedBy: this.persistenceOptions?.profileId,\n host: this.persistenceOptions?.namespace,\n },\n version: this.seed.version,\n };\n\n this.storage.saveConfig(key, payload);\n }\n\n private publishConfig(config: FormConfig): void {\n this.formConfig$.next(config);\n this.state$.next({\n formId: this.formId,\n config: deepClone(config),\n fields: this.getFieldMetadataArray(),\n });\n }\n\n private getFieldMetadataArray(): FieldMetadata[] {\n return this.cloneFieldMetadata();\n }\n\n private cloneFieldMetadata(map: ManualFieldMetadataMap = this.fieldMetadata$.value): FieldMetadata[] {\n return Array.from(map.values()).map((fm) => ({ ...fm }));\n }\n\n private refreshBoundComponent(fieldName: string): void {\n const component = this.boundComponents.get(fieldName);\n if (!component) {\n return;\n }\n const metadata = this.fieldMetadata$.value.get(fieldName);\n if (!metadata) {\n return;\n }\n\n try {\n if (typeof (component as any)?.setInputMetadata === 'function') {\n (component as any).setInputMetadata({ ...metadata });\n // fallthrough to also apply visibility state on host\n }\n const metaProp = (component as any)?.metadata;\n if (metaProp && typeof metaProp === 'object') {\n if (typeof metaProp.set === 'function') {\n metaProp.set({ ...metadata });\n // fallthrough to also apply visibility state on host\n }\n }\n if (!metaProp || typeof metaProp.set !== 'function') {\n (component as any).metadata = { ...metadata };\n }\n // Apply visibility to component and host element for manual templates\n const isHidden = !!(metadata as any).hidden || !!(metadata as any).formHidden;\n if ('visible' in (component as any)) {\n try { (component as any).visible = !isHidden; } catch {}\n }\n const hostEl: HTMLElement | undefined = (component as any)?.elementRef?.nativeElement;\n if (hostEl) {\n hostEl.style.display = isHidden ? 'none' : '';\n hostEl.setAttribute('aria-hidden', String(isHidden));\n }\n } catch {\n /* ignore */\n }\n }\n\n /** Deep-merge helper to preserve nested objects (e.g., clearButton.icon + enabled). */\n private deepMerge<T>(target: T, source: Partial<T>): T {\n if (source == null || typeof source !== 'object') return { ...(target as any) } as T;\n const out: any = Array.isArray(target) ? [...(target as any)] : { ...(target as any) };\n for (const [k, v] of Object.entries(source as any)) {\n if (v && typeof v === 'object' && !Array.isArray(v)) {\n out[k] = this.deepMerge(out[k] ?? {}, v as any);\n } else {\n out[k] = v;\n }\n }\n return out as T;\n }\n}\n\n/**\n * Factory service used to create ManualFormInstance objects with the required\n * dependencies injected from Angular's DI container.\n */\n@Injectable({ providedIn: 'root' })\nexport class ManualFormInstanceFactory {\n private readonly dynamicFormService = inject(DynamicFormService);\n\n constructor(\n @Optional() @Inject(CONFIG_STORAGE) private readonly storage?: ConfigStorage,\n ) {}\n\n create(\n seed: ManualFormSeed,\n options: ManualFormPersistenceOptions = {},\n externalForm?: FormGroup,\n ): ManualFormInstance {\n const persisted = this.loadPersistedSnapshot(seed.formId, options);\n const baseConfig = persisted?.config ?? deepClone(seed.config);\n\n const instance = new ManualFormInstance(\n seed.formId,\n seed,\n baseConfig,\n this.dynamicFormService,\n this.storage,\n options,\n externalForm,\n );\n\n // Apply persisted value if present.\n if (persisted?.value) {\n instance.form.patchValue(persisted.value, { emitEvent: false });\n }\n\n return instance;\n }\n\n private loadPersistedSnapshot(\n formId: ManualFormId,\n options: ManualFormPersistenceOptions,\n ): ManualFormSnapshot | undefined {\n if (!this.storage) {\n return undefined;\n }\n const key = buildStorageKey(formId, options);\n return this.storage.loadConfig<PersistPayload>(key) ?? undefined;\n }\n}\n\nfunction buildStorageKey(\n formId: ManualFormId,\n options: ManualFormPersistenceOptions = {},\n): string {\n const parts = ['manual-form', options.namespace, options.tenantId, options.profileId, formId]\n .filter(Boolean)\n .map((segment) => String(segment));\n return parts.join(':');\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ManualFormInstance } from '../../stores/manual-form-instance';\n\n@Component({\n selector: 'praxis-manual-form-header',\n standalone: true,\n imports: [CommonModule],\n template: `\n <header class=\"pdx-manual-form__header\">\n <div class=\"pdx-manual-form__title\">\n <h2>{{ displayTitle }}</h2>\n @if (displayDescription) {\n <p class=\"pdx-manual-form__subtitle\">\n {{ displayDescription }}\n </p>\n }\n </div>\n <div class=\"pdx-manual-form__header-actions\">\n @if (editModeEnabled()) {\n <button type=\"button\" (click)=\"editForm.emit()\" [attr.aria-label]=\"editFormLabel()\">{{ editFormLabel() }}</button>\n }\n <button type=\"button\" (click)=\"reset.emit()\" [attr.aria-label]=\"resetLabel()\">{{ resetLabel() }}</button>\n <button type=\"button\" (click)=\"save.emit()\" [attr.aria-label]=\"saveLabel()\">{{ saveLabel() }}</button>\n </div>\n </header>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .pdx-manual-form__header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1rem;\n margin-bottom: 1.5rem;\n }\n .pdx-manual-form__title h2 {\n margin: 0;\n font-size: 1.5rem;\n }\n .pdx-manual-form__subtitle {\n margin: 0.25rem 0 0;\n color: rgba(0, 0, 0, 0.6);\n }\n .pdx-manual-form__header-actions {\n display: flex;\n gap: 0.5rem;\n }\n button[type='button'] {\n padding: 0.5rem 1rem;\n border-radius: 4px;\n border: 1px solid rgba(15, 23, 42, 0.1);\n background: white;\n cursor: pointer;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ManualFormHeaderComponent {\n readonly instance = input<ManualFormInstance | null | undefined>();\n readonly title = input<string | undefined>();\n readonly description = input<string | undefined>();\n readonly saveLabel = input('Salvar customizações');\n readonly resetLabel = input('Restaurar padrão');\n readonly editModeEnabled = input(false);\n readonly editFormLabel = input('Editar formulário');\n\n readonly save = output<void>();\n readonly reset = output<void>();\n readonly editForm = output<void>();\n\n readonly fallbackTitle = 'Formulário manual';\n\n private get metadata(): { title?: string; description?: string } | undefined {\n return this.instance()?.currentConfig?.metadata as\n | { title?: string; description?: string }\n | undefined;\n }\n\n private get firstSection(): { title?: string; description?: string } | undefined {\n return this.instance()?.currentConfig?.sections?.[0];\n }\n\n get displayTitle(): string {\n return (\n this.title() ||\n this.metadata?.title ||\n this.firstSection?.title ||\n this.fallbackTitle\n );\n }\n\n get displayDescription(): string | undefined {\n return (\n this.description() ||\n this.metadata?.description ||\n this.firstSection?.description ||\n undefined\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormActionsLayout, FormActionButton } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-manual-form-actions',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (actions(); as layout) {\n <footer class=\"pdx-manual-form__actions\">\n <div class=\"pdx-manual-form__actions-secondary\">\n @if (layout.cancel; as cancel) {\n @if (isVisible(cancel)) {\n <button type=\"button\" [disabled]=\"cancel.disabled\" (click)=\"emit('cancel', cancel)\">\n {{ cancel.label || 'Cancelar' }}\n </button>\n }\n }\n @if (layout.reset; as resetBtn) {\n @if (isVisible(resetBtn)) {\n <button type=\"button\" [disabled]=\"resetBtn.disabled\" (click)=\"emit('reset', resetBtn)\">\n {{ resetBtn.label || 'Resetar' }}\n </button>\n }\n }\n @for (action of layout.custom || []; track trackByFn ? trackByFn($index, action) : (action?.id || $index)) {\n @if (isVisible(action)) {\n <button type=\"button\" [disabled]=\"action.disabled\" (click)=\"emit(action.id || 'custom', action)\">\n {{ action.label || action.id || 'Ação' }}\n </button>\n }\n }\n </div>\n <div class=\"pdx-manual-form__actions-primary\">\n @if (layout.submit; as submitBtn) {\n @if (isVisible(submitBtn)) {\n <button type=\"submit\" [disabled]=\"submitBtn.disabled\" (click)=\"emit('submit', submitBtn)\">\n {{ submitBtn.label || 'Salvar' }}\n </button>\n }\n }\n </div>\n </footer>\n }\n `,\n styles: [\n `\n :host { display: block; }\n .pdx-manual-form__actions {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1rem;\n margin-top: 2rem;\n }\n .pdx-manual-form__actions-secondary,\n .pdx-manual-form__actions-primary {\n display: flex;\n gap: 0.5rem;\n }\n button {\n padding: 0.5rem 1rem;\n border-radius: 4px;\n border: 1px solid rgba(15, 23, 42, 0.1);\n background: white;\n cursor: pointer;\n }\n .pdx-manual-form__actions-primary button {\n background: #1d4ed8;\n color: #fff;\n border-color: #1d4ed8;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ManualFormActionsComponent {\n readonly actions = input<FormActionsLayout | null | undefined>();\n @Input() trackByFn: ((idx: number, item: FormActionButton) => unknown) | null = null;\n readonly actionClick = output<string>();\n\n isVisible(action?: FormActionButton | null): boolean {\n return action ? action.visible !== false : false;\n }\n\n emit(kind: string, action?: FormActionButton | null): void {\n if (action?.action) {\n this.actionClick.emit(action.action);\n } else {\n this.actionClick.emit(kind);\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { FieldControlType } from '@praxisui/core';\n\nexport const MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE = new InjectionToken<Record<string, FieldControlType>>(\n 'MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE',\n);\n\nexport const MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE = new InjectionToken<Record<string, FieldControlType>>(\n 'MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE',\n);\n\n","import { Injectable, isDevMode, inject } from '@angular/core';\n\nimport { FieldMetadata } from '@praxisui/core';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\n\nimport { ManualFormInstance } from '../stores/manual-form-instance';\n\ninterface PatchSignature {\n sig: string;\n at: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ManualFieldMetadataBridgeService {\n private readonly patchSignatures = new WeakMap<ManualFormInstance, Map<string, PatchSignature>>();\n private readonly settingsPanel = inject(SettingsPanelService);\n\n buildEditorSeed(instance: ManualFormInstance, fieldName: string): FieldMetadata | undefined {\n return instance.getFieldMetadata(fieldName);\n }\n\n applyPatch(\n instance: ManualFormInstance,\n fieldName: string,\n patch: Partial<FieldMetadata>,\n ): void {\n instance.patchFieldMetadata(fieldName, patch);\n }\n\n async openEditor(instance: ManualFormInstance, fieldName: string): Promise<void> {\n if (!instance || !fieldName) {\n return;\n }\n\n const seed = this.buildEditorSeed(instance, fieldName);\n if (!seed) {\n if (isDevMode()) {\n try { console.warn('[ManualFieldMetadataBridge] metadata not found for field', fieldName); } catch {}\n }\n return;\n }\n\n let FieldMetadataEditorComponent: any;\n try {\n const module = await import('@praxisui/metadata-editor');\n FieldMetadataEditorComponent = (module as any)?.FieldMetadataEditorComponent;\n if (!FieldMetadataEditorComponent) {\n throw new Error('FieldMetadataEditorComponent export missing');\n }\n } catch (err) {\n if (isDevMode()) {\n try { console.error('[ManualFieldMetadataBridge] failed to load @praxisui/metadata-editor', err); } catch {}\n }\n return;\n }\n\n const controlType = (seed as FieldMetadata | undefined)?.controlType;\n const title = this.buildPanelTitle(fieldName, seed);\n const panelId = this.buildPanelId(instance, fieldName);\n\n let ref;\n try {\n ref = this.settingsPanel.open({\n id: panelId,\n title,\n titleIcon: this.resolveIcon(controlType),\n content: {\n component: FieldMetadataEditorComponent,\n inputs: {\n controlType,\n seed,\n hostBridge: {\n applyPatch: (patch: Partial<FieldMetadata>) => this.handlePatch(instance, fieldName, patch),\n },\n },\n },\n });\n } catch (err) {\n if (isDevMode()) {\n try { console.error('[ManualFieldMetadataBridge] failed to open settings panel', err); } catch {}\n }\n return;\n }\n\n ref.applied$.subscribe((patch: Partial<FieldMetadata>) => this.handlePatch(instance, fieldName, patch));\n ref.saved$.subscribe((patch: Partial<FieldMetadata>) => this.handlePatch(instance, fieldName, patch));\n }\n\n private handlePatch(\n instance: ManualFormInstance,\n fieldName: string,\n patch: Partial<FieldMetadata> | null | undefined,\n ): void {\n if (!patch || typeof patch !== 'object') {\n return;\n }\n\n if (!this.shouldApplyPatch(instance, fieldName, patch)) {\n return;\n }\n\n this.applyPatch(instance, fieldName, patch);\n\n try {\n instance.saveDraft();\n } catch (err) {\n if (isDevMode()) {\n try { console.error('[ManualFieldMetadataBridge] failed to persist draft after patch', err); } catch {}\n }\n }\n }\n\n private shouldApplyPatch(\n instance: ManualFormInstance,\n fieldName: string,\n patch: Partial<FieldMetadata>,\n ): boolean {\n let fieldsMap = this.patchSignatures.get(instance);\n if (!fieldsMap) {\n fieldsMap = new Map<string, PatchSignature>();\n this.patchSignatures.set(instance, fieldsMap);\n }\n\n const now = Date.now();\n let signature = '';\n try {\n signature = JSON.stringify(patch);\n } catch {\n signature = `${now}`;\n }\n\n const existing = fieldsMap.get(fieldName);\n if (existing && existing.sig === signature && now - existing.at < 1200) {\n if (isDevMode()) {\n try { console.debug('[ManualFieldMetadataBridge] duplicate patch ignored', { fieldName }); } catch {}\n }\n return false;\n }\n\n fieldsMap.set(fieldName, { sig: signature, at: now });\n return true;\n }\n\n private buildPanelTitle(fieldName: string, seed: FieldMetadata): string {\n const label = seed?.label || seed?.placeholder || fieldName;\n const type = this.formatControlType(seed?.controlType);\n return type ? `${type} — ${label}` : label;\n }\n\n private buildPanelId(instance: ManualFormInstance, fieldName: string): string {\n const formId = this.extractFormId(instance);\n return formId ? `manual-field.${formId}.${fieldName}` : `manual-field.${fieldName}`;\n }\n\n private extractFormId(instance: ManualFormInstance): string | undefined {\n try {\n return (instance as unknown as { formId?: string })?.formId || (instance as any)?.seed?.formId;\n } catch {\n return undefined;\n }\n }\n\n private formatControlType(controlType: FieldMetadata['controlType'] | undefined): string {\n if (!controlType) {\n return '';\n }\n return String(controlType)\n .split(/[-_]/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase())\n .join(' ');\n }\n\n private resolveIcon(controlType: FieldMetadata['controlType'] | undefined): string | undefined {\n if (!controlType) {\n return 'tune';\n }\n const map: Record<string, string> = {\n INPUT: 'text_fields',\n TEXTAREA: 'notes',\n NUMERIC_TEXT_BOX: 'pin',\n CURRENCY_INPUT: 'attach_money',\n EMAIL_INPUT: 'mail',\n PASSWORD: 'vpn_key',\n SELECT: 'list',\n MULTI_SELECT: 'checklist',\n AUTO_COMPLETE: 'search',\n RADIO: 'radio_button_checked',\n CHECKBOX: 'check_box',\n TOGGLE: 'toggle_on',\n SLIDER: 'tune',\n DATE_INPUT: 'event',\n DATE_RANGE: 'event_repeat',\n TIME_INPUT: 'schedule',\n TIME_PICKER: 'schedule',\n RATING: 'grade',\n TREE_SELECT: 'account_tree',\n FILE_UPLOAD: 'upload_file',\n TRANSFER_LIST: 'compare_arrows',\n CHIP_INPUT: 'sell',\n CPF_CNPJ_INPUT: 'fingerprint',\n };\n const key = String(controlType).toUpperCase();\n return map[key] || 'tune';\n }\n\n bindComponent(\n instance: ManualFormInstance,\n fieldName: string,\n componentInstance: unknown,\n ): void {\n instance.bindComponent(fieldName, componentInstance);\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n inject,\n OnDestroy,\n QueryList,\n isDevMode,\n input,\n output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormActionButton,\n FormActionsLayout,\n FieldControlType,\n FieldMetadata,\n FormConfig,\n} from '@praxisui/core';\nimport {\n FormControl,\n FormControlName,\n FormGroup,\n FormGroupDirective,\n ReactiveFormsModule,\n ValidatorFn,\n Validators,\n AbstractControl,\n ControlContainer,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime } from 'rxjs';\n\nimport {\n ManualFormInstance,\n ManualFormInstanceFactory,\n} from '../../stores/manual-form-instance';\nimport { ManualFormHeaderComponent } from '../manual-form-header/manual-form-header.component';\nimport { ManualFormActionsComponent } from '../manual-form-actions/manual-form-actions.component';\nimport {\n ManualFormId,\n ManualFormPersistenceOptions,\n} from '../../models/manual-form.types';\nimport { createManualFormSeed } from '../../seeds/manual-form.seed';\nimport { deepClone } from '../../utils/clone.util';\nimport {\n MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE,\n MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE,\n} from '../../tokens/manual-form.tokens';\nimport { ManualFieldMetadataBridgeService } from '../../services/manual-field-metadata-bridge.service';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\n\ninterface DetectedField {\n name: string;\n control: AbstractControl | null;\n component: any;\n selector?: string;\n}\n\n@Component({\n selector: 'praxis-manual-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n ManualFormHeaderComponent,\n ManualFormActionsComponent,\n ],\n providers: [\n // Provide a ControlContainer at the host boundary so projected formControlName can resolve it\n { provide: ControlContainer, useExisting: ManualFormComponent as any },\n ],\n templateUrl: './manual-form.component.html',\n styles: [\n `\n .pdx-manual-form {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n }\n\n .pdx-manual-form__form {\n display: grid;\n gap: 1rem;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ManualFormComponent implements AfterContentInit, OnDestroy {\n private readonly instanceFactory = inject(ManualFormInstanceFactory);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly metadataBridge = inject(ManualFieldMetadataBridgeService);\n private readonly settingsPanel = inject(SettingsPanelService);\n private readonly selectorToControlType =\n inject(MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE, { optional: true }) ?? DEFAULT_SELECTOR_TO_CONTROL_TYPE;\n private readonly constructorToControlType =\n inject(MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE, { optional: true }) ?? DEFAULT_CONSTRUCTOR_TO_CONTROL_TYPE;\n\n readonly formId = input.required<ManualFormId>();\n readonly formTitle = input<string | undefined>();\n readonly formDescription = input<string | undefined>();\n readonly actions = input<FormActionsLayout | null | undefined>();\n readonly showHeader = input(true);\n readonly showActions = input(true);\n readonly enableAutoSave = input(true);\n // Allows editor affordances (e.g., opening metadata editor on interactions)\n readonly editModeEnabled = input(false);\n readonly persistenceOptions = input<ManualFormPersistenceOptions | undefined>();\n // When true, uses FormControlName.path (joined by '.') as FieldMetadata.name.\n // Requires nested path support (already present in DynamicFormService).\n readonly usePathNames = input(false);\n // Debounce interval for autosave (ms). Only used when enableAutoSave is true.\n readonly autoSaveDebounceMs = input(800);\n\n readonly submitted = output<{ value: any; instance: ManualFormInstance }>();\n readonly saved = output<ManualFormInstance>();\n readonly resetEvent = output<ManualFormInstance>({ alias: 'reset' });\n readonly metadataChange = output<FormConfig>();\n\n @ContentChildren(FormControlName, { descendants: true })\n private formControls!: QueryList<FormControlName>;\n\n // FormGroupDirective is applied on the component host via hostDirectives\n private readonly hostFormGroupDirective = inject(FormGroupDirective, { self: true, optional: true });\n\n instance?: ManualFormInstance;\n resolvedActions?: FormActionsLayout;\n\n formGroup: FormGroup = new FormGroup({});\n private readonly registeredDirectives: FormControlName[] = [];\n\n constructor() {\n // Host-typed mode: if a FormGroupDirective is present, adopt its FormGroup without monkey patches.\n if (this.hostFormGroupDirective) {\n if (isDevMode()) console.debug('[ManualForm] Host FormGroupDirective attached early');\n if (this.hostFormGroupDirective.form) {\n this.formGroup = this.hostFormGroupDirective.form as FormGroup;\n if (isDevMode()) console.debug('[ManualForm] Using host-provided FormGroup instance');\n } else {\n // Keep placeholder until Angular binds [formGroup]; our addControl creates missing controls if needed.\n if (isDevMode()) console.debug('[ManualForm] No host FormGroup yet; awaiting binding without interception');\n }\n } else {\n if (isDevMode()) console.debug('[ManualForm] No host FormGroupDirective detected at construction (dynamic mode)');\n }\n }\n\n ngAfterContentInit(): void {\n if (this.formControls) {\n this.formControls.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.initialize(true));\n }\n\n queueMicrotask(() => this.initialize(false));\n }\n\n ngOnDestroy(): void {\n // Output signals do not need manual completion\n }\n\n // =============================\n // ControlContainer interface\n // =============================\n // Make this component act as the ControlContainer for projected children.\n // FormControlName will call `parent.formDirective.addControl(this)` on us.\n get formDirective(): any {\n return this;\n }\n get control(): FormGroup {\n return this.formGroup;\n }\n get path(): any[] {\n return [];\n }\n addControl(dir: FormControlName): any {\n const name = typeof dir.name === 'string' ? dir.name : String(dir.name);\n const pathSegs = Array.isArray((dir as any).path) && (dir as any).path.length\n ? ((dir as any).path as string[])\n : (name ? [name] : []);\n const pathStr = this.usePathNames() ? pathSegs.join('.') : name;\n\n // Ensure control exists locally when host is not ready\n if (pathStr && !this.getControlByPath(pathSegs)) {\n this.ensureControlPath(pathSegs);\n if (isDevMode()) console.debug('[ManualForm] addControl created missing control', pathStr);\n }\n\n // Delegate wiring to host FormGroupDirective when available (ensures CVA pipelines are set)\n if (this.hostFormGroupDirective && this.hostFormGroupDirective.form) {\n if (isDevMode()) console.debug('[ManualForm] Delegating addControl to host FormGroupDirective for', pathStr);\n const ctrl = this.hostFormGroupDirective.addControl(dir);\n this.registeredDirectives.push(dir);\n return ctrl;\n }\n // Fallback minimal wiring if no host directive\n const ctrl = this.formGroup.get((dir as any).path);\n try {\n const va: any = (dir as any).valueAccessor;\n va?.writeValue?.(ctrl?.value);\n va?.setDisabledState?.(ctrl?.disabled ?? false);\n va?.registerOnChange?.((value: any) => {\n ctrl?.setValue(value);\n });\n va?.registerOnTouched?.(() => {\n ctrl?.markAsTouched();\n });\n } catch {}\n (dir as any).control = ctrl;\n return ctrl;\n }\n removeControl(dir: FormControlName): void {\n this.hostFormGroupDirective?.removeControl(dir);\n const idx = this.registeredDirectives.indexOf(dir);\n if (idx >= 0) this.registeredDirectives.splice(idx, 1);\n }\n getControl(dir: FormControlName): AbstractControl | null {\n return this.formGroup.get(dir.path);\n }\n updateModel(dir: FormControlName, value: any): void {\n if (this.hostFormGroupDirective) {\n this.hostFormGroupDirective.updateModel(dir as any, value);\n } else {\n const ctrl = this.formGroup.get(dir.path);\n ctrl?.setValue(value);\n }\n }\n\n handleAction(actionId: string): void {\n if (actionId === 'submit') {\n this.handleSubmit();\n } else if (actionId === 'save') {\n this.handleSave();\n } else if (actionId === 'reset') {\n this.handleReset();\n } else if (this.instance) {\n this.metadataChange.emit(this.instance.currentConfig);\n }\n }\n\n handleSubmit(): void {\n if (!this.instance) {\n return;\n }\n const value = this.formGroup.getRawValue();\n if (this.enableAutoSave()) {\n this.instance.saveDraft(value);\n }\n this.submitted.emit({ value, instance: this.instance });\n }\n\n handleSave(): void {\n if (!this.instance) {\n return;\n }\n if (this.enableAutoSave()) {\n this.instance.saveDraft();\n }\n this.saved.emit(this.instance);\n this.metadataChange.emit(this.instance.currentConfig);\n }\n\n handleReset(): void {\n if (!this.instance) {\n return;\n }\n this.instance.resetToSeed();\n this.hostFormGroupDirective?.resetForm(this.instance.form.getRawValue());\n this.resetEvent.emit(this.instance);\n }\n\n /**\n * Attempts to open the field metadata editor respecting the component's\n * editModeEnabled input. No-ops when disabled or without an instance.\n */\n tryOpenFieldEditor(fieldName: string): void {\n if (!this.editModeEnabled()) {\n return;\n }\n const instance = this.instance;\n if (!instance || !fieldName) {\n return;\n }\n try {\n void this.metadataBridge.openEditor(instance, fieldName);\n } catch {}\n }\n\n /** Opens a simple form-level editor listing the fields and their visibility. */\n async openFormEditor(): Promise<void> {\n if (!this.editModeEnabled() || !this.instance) return;\n\n let ManualFormConfigEditorComponent: any;\n try {\n const module = await import('../manual-form-config-editor/manual-form-config-editor.component');\n ManualFormConfigEditorComponent = (module as any)?.ManualFormConfigEditorComponent;\n } catch {\n return;\n }\n const formId = this.formId();\n this.settingsPanel.open({\n id: formId ? `manual-form-editor.${formId}` : 'manual-form-editor',\n title: this.formTitle() || 'Editor do Formulário',\n titleIcon: 'tune',\n content: {\n component: ManualFormConfigEditorComponent,\n inputs: { instance: this.instance },\n },\n });\n }\n\n private initialize(fromChanges: boolean): void {\n if (!this.formId()) {\n return;\n }\n const fields = this.collectFields();\n if (isDevMode()) console.debug('[ManualForm] initialize: detected fields', fields.map(f => f.name));\n if (fields.length === 0) {\n return;\n }\n\n const seed = this.createSeedFromFields(fields);\n // Create runtime instance and let it populate our existing FormGroup\n this.instance = this.instanceFactory.create(seed, this.persistenceOptions() ?? {}, this.formGroup);\n if (isDevMode()) console.debug('[ManualForm] instance created with seed; current controls', Object.keys((this.formGroup as any).controls || {}));\n\n this.applyInstanceToTemplate(fields);\n\n // Auto-save value changes with debounce\n if (this.enableAutoSave() && this.instance) {\n this.instance.form.valueChanges\n .pipe(debounceTime(this.autoSaveDebounceMs()), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n try { this.instance?.saveDraft(); } catch {}\n });\n }\n this.cdr.markForCheck();\n }\n\n private collectFields(): DetectedField[] {\n if (!this.formControls) {\n return [];\n }\n const result: DetectedField[] = [];\n for (const dir of this.formControls) {\n const name = this.usePathNames()\n ? (Array.isArray((dir as any).path) && (dir as any).path.length ? ((dir as any).path as string[]).join('.') : (typeof dir.name === 'string' ? dir.name : null))\n : (typeof dir.name === 'string' ? dir.name : null);\n if (!name) {\n continue;\n }\n const component = this.resolveValueAccessor(dir);\n if (!component) {\n continue;\n }\n result.push({\n name,\n control: dir.control,\n component,\n selector: this.resolveSelector(component, dir),\n });\n }\n return result;\n }\n\n private resolveValueAccessor(dir: FormControlName): unknown {\n const accessor = dir.valueAccessor as unknown;\n if (!accessor) {\n return undefined;\n }\n if (Array.isArray(accessor)) {\n return accessor[0];\n }\n return accessor;\n }\n\n private resolveSelector(component: any, dir: FormControlName): string | undefined {\n const cmpDef = component?.constructor?.ɵcmp;\n if (cmpDef?.selectors?.length) {\n const first = cmpDef.selectors[0];\n if (Array.isArray(first) && first.length && typeof first[0] === 'string') {\n return first[0];\n }\n }\n const element: HTMLElement | undefined = (component as any)?.elementRef?.nativeElement\n ?? (dir as any)?._elementRef?.nativeElement;\n return element?.tagName?.toLowerCase();\n }\n\n private createSeedFromFields(fields: DetectedField[]) {\n const metadataList = fields.map((field) => this.buildMetadataForField(field));\n const actions = this.normalizeActions(this.actions() ?? null);\n\n const currentMeta = this.instance?.currentConfig.metadata\n ? deepClone(this.instance.currentConfig.metadata)\n : undefined;\n\n const config: FormConfig = {\n sections: [\n {\n id: 'auto-section',\n title: this.formTitle(),\n description: this.formDescription(),\n rows: [\n {\n id: 'auto-row',\n columns: [\n {\n id: 'auto-column',\n fields: metadataList.map((meta) => meta.name),\n },\n ],\n },\n ],\n },\n ],\n fieldMetadata: metadataList,\n metadata: currentMeta,\n actions,\n };\n\n this.resolvedActions = actions;\n\n return createManualFormSeed(this.formId(), config, {\n source: 'generated',\n version: '1.0.0',\n });\n }\n\n private applyInstanceToTemplate(fields: DetectedField[]): void {\n if (!this.instance) {\n return;\n }\n\n for (const field of fields) {\n this.instance.bindComponent(field.name, field.component);\n // Only apply metadata manually if the component doesn't expose a standard API\n const hasStdApi =\n typeof (field.component as any)?.setInputMetadata === 'function' ||\n !!((field.component as any)?.metadata && typeof (field.component as any).metadata.set === 'function');\n if (!hasStdApi) {\n const metadata = this.instance.getFieldMetadata(field.name);\n if (metadata) {\n this.applyMetadataToComponent(field.component, metadata);\n }\n }\n }\n }\n\n private buildMetadataForField(field: DetectedField): FieldMetadata {\n const existing = this.extractExistingMetadata(field.component);\n const label = existing?.label ?? this.inferLabel(field, existing);\n const controlType = existing?.controlType ?? this.inferControlType(field);\n const validators = this.inferValidators(field.control, existing);\n\n return {\n ...(existing ?? {}),\n name: field.name,\n label,\n controlType,\n validators: { ...existing?.validators, ...validators },\n } as FieldMetadata;\n }\n\n private getControlByPath(path: string[]): AbstractControl | null {\n if (!Array.isArray(path) || path.length === 0) return null;\n return this.formGroup.get(path as any);\n }\n\n private ensureControlPath(path: string[]): void {\n if (!Array.isArray(path) || path.length === 0) return;\n const leaf = path[path.length - 1]!;\n let group: FormGroup = this.formGroup;\n for (let i = 0; i < path.length - 1; i++) {\n const seg = path[i]!;\n const existing = group.get(seg);\n if (existing instanceof FormGroup) {\n group = existing;\n } else {\n const next = new FormGroup({});\n group.addControl(seg, next);\n group = next;\n }\n }\n if (!group.get(leaf)) {\n group.addControl(leaf, new FormControl());\n }\n }\n\n private extractExistingMetadata(component: any): FieldMetadata | undefined {\n try {\n const metaSignal = component?.metadata;\n if (typeof metaSignal === 'function') {\n const value = metaSignal();\n if (value) {\n return deepClone(value) as FieldMetadata;\n }\n }\n if (typeof component?.getMetadata === 'function') {\n const value = component.getMetadata();\n if (value) {\n return deepClone(value) as FieldMetadata;\n }\n }\n } catch {}\n return undefined;\n }\n\n private inferLabel(field: DetectedField, existing?: FieldMetadata): string {\n if (existing?.label) {\n return existing.label;\n }\n const componentLabel = (field.component as any)?.label;\n if (typeof componentLabel === 'string' && componentLabel.trim().length > 0) {\n return componentLabel;\n }\n return field.name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[-_]/g, ' ')\n .replace(/\\s+/g, ' ')\n .replace(/^\\w/, (c) => c.toUpperCase());\n }\n\n private inferControlType(field: DetectedField): FieldControlType {\n const selector = field.selector?.toLowerCase();\n if (selector && this.selectorToControlType[selector]) {\n return this.selectorToControlType[selector];\n }\n const ctorName = field.component?.constructor?.name ?? '';\n for (const [key, value] of Object.entries(this.constructorToControlType)) {\n if (ctorName.includes(key)) {\n return value;\n }\n }\n return FieldControlType.INPUT;\n }\n\n private inferValidators(control: AbstractControl | null, existing?: FieldMetadata): Record<string, any> {\n const validators: Record<string, any> = existing?.validators ? { ...existing.validators } : {};\n if (!control) {\n return validators;\n }\n const hasValidator = (fn: ValidatorFn) => {\n const anyControl = control as FormControl & { hasValidator?: (fn: ValidatorFn) => boolean };\n if (typeof anyControl.hasValidator === 'function') {\n return anyControl.hasValidator(fn);\n }\n try {\n return !!control.validator && !!control.validator({} as AbstractControl);\n } catch {\n return false;\n }\n };\n\n if (hasValidator(Validators.required)) {\n validators.required = true;\n }\n return validators;\n }\n\n private applyMetadataToComponent(component: any, metadata: FieldMetadata): void {\n try {\n if (typeof component?.setInputMetadata === 'function') {\n component.setInputMetadata(metadata);\n }\n const metaSignal = component?.metadata;\n if (metaSignal && typeof metaSignal.set === 'function') {\n metaSignal.set(metadata);\n }\n if ('label' in component && !component.label) {\n component.label = metadata.label;\n }\n // Visibilidade: esconder/mostrar com base em hidden/formHidden, mesmo em templates manuais\n const isHidden = !!(metadata as any)?.hidden || !!(metadata as any)?.formHidden;\n if ('visible' in component) {\n try { component.visible = !isHidden; } catch {}\n }\n const hostEl: HTMLElement | undefined = (component as any)?.elementRef?.nativeElement;\n if (hostEl) {\n hostEl.style.display = isHidden ? 'none' : '';\n hostEl.setAttribute('aria-hidden', String(isHidden));\n }\n } catch {}\n }\n\n private buildCurrentConfigSnapshot(): FormConfig {\n const metadata = this.instance?.currentConfig.fieldMetadata ?? [];\n return {\n fieldMetadata: deepClone(metadata),\n sections: this.instance?.currentConfig.sections\n ? deepClone(this.instance.currentConfig.sections)\n : [],\n } as FormConfig;\n }\n\n private normalizeActions(source?: FormActionsLayout | null): FormActionsLayout {\n const base = deepClone(DEFAULT_ACTIONS);\n if (!source) {\n return base;\n }\n\n return {\n submit: mergeAction(base.submit, source.submit),\n cancel: mergeAction(base.cancel, source.cancel),\n reset: mergeAction(base.reset, source.reset),\n custom: source.custom ? source.custom.map(makeAction) : base.custom,\n position: source.position ?? base.position,\n orientation: source.orientation ?? base.orientation,\n spacing: source.spacing ?? base.spacing,\n sticky: source.sticky ?? base.sticky,\n placement: source.placement ?? base.placement,\n mobile: source.mobile ?? base.mobile,\n containerClassName: source.containerClassName ?? base.containerClassName,\n containerStyles: source.containerStyles ?? base.containerStyles,\n showSaveButton: source.showSaveButton ?? base.showSaveButton,\n submitButtonLabel: source.submitButtonLabel ?? base.submitButtonLabel,\n showCancelButton: source.showCancelButton ?? base.showCancelButton,\n cancelButtonLabel: source.cancelButtonLabel ?? base.cancelButtonLabel,\n showResetButton: source.showResetButton ?? base.showResetButton,\n resetButtonLabel: source.resetButtonLabel ?? base.resetButtonLabel,\n };\n }\n}\n\nconst DEFAULT_ACTIONS: FormActionsLayout = {\n submit: makeAction({ id: 'submit', label: 'Salvar', visible: true, type: 'submit', color: 'primary' }),\n cancel: makeAction({ id: 'cancel', label: 'Cancelar', visible: false, type: 'button' }),\n reset: makeAction({ id: 'reset', label: 'Restaurar', visible: true, type: 'reset' }),\n custom: [],\n position: 'right',\n orientation: 'horizontal',\n spacing: 'normal',\n};\n\nfunction makeAction(action: Partial<FormActionButton>): FormActionButton {\n return {\n id: action.id ?? 'action',\n label: action.label ?? 'Ação',\n visible: action.visible !== false,\n type: action.type ?? 'button',\n color: action.color,\n disabled: action.disabled,\n icon: action.icon,\n action: action.action,\n tooltip: action.tooltip,\n variant: action.variant,\n size: action.size,\n loading: action.loading,\n shortcut: action.shortcut,\n };\n}\n\nfunction mergeAction(base: FormActionButton, override?: FormActionButton): FormActionButton {\n if (!override) {\n return base;\n }\n return {\n ...base,\n ...override,\n visible: override.visible !== undefined ? override.visible : base.visible,\n };\n}\n\nconst DEFAULT_SELECTOR_TO_CONTROL_TYPE: Record<string, FieldControlType> = {\n 'pdx-text-input': FieldControlType.INPUT,\n 'pdx-material-textarea': FieldControlType.TEXTAREA,\n 'pdx-number-input': FieldControlType.NUMERIC_TEXT_BOX,\n 'pdx-material-currency': FieldControlType.CURRENCY_INPUT,\n 'pdx-material-datepicker': FieldControlType.DATE_PICKER,\n 'pdx-material-date-range': FieldControlType.DATE_RANGE,\n 'pdx-material-timepicker': FieldControlType.TIME_PICKER,\n 'pdx-material-colorpicker': FieldControlType.COLOR_PICKER,\n 'pdx-material-select': FieldControlType.SELECT,\n 'pdx-material-autocomplete': FieldControlType.AUTO_COMPLETE,\n 'pdx-material-checkbox-group': FieldControlType.CHECKBOX,\n 'pdx-material-radio-group': FieldControlType.RADIO,\n 'pdx-material-slide-toggle': FieldControlType.TOGGLE,\n 'pdx-material-slider': FieldControlType.SLIDER,\n 'pdx-material-range-slider': FieldControlType.RANGE_SLIDER,\n 'pdx-material-file-upload': FieldControlType.FILE_UPLOAD,\n};\n\nconst DEFAULT_CONSTRUCTOR_TO_CONTROL_TYPE: Record<string, FieldControlType> = {\n TextInput: FieldControlType.INPUT,\n Textarea: FieldControlType.TEXTAREA,\n NumberInput: FieldControlType.NUMERIC_TEXT_BOX,\n Currency: FieldControlType.CURRENCY_INPUT,\n DatePicker: FieldControlType.DATE_PICKER,\n DateRange: FieldControlType.DATE_RANGE,\n TimePicker: FieldControlType.TIME_PICKER,\n ColorPicker: FieldControlType.COLOR_PICKER,\n SelectComponent: FieldControlType.SELECT,\n Autocomplete: FieldControlType.AUTO_COMPLETE,\n CheckboxGroup: FieldControlType.CHECKBOX,\n RadioGroup: FieldControlType.RADIO,\n SlideToggle: FieldControlType.TOGGLE,\n SliderComponent: FieldControlType.SLIDER,\n RangeSlider: FieldControlType.RANGE_SLIDER,\n FileUpload: FieldControlType.FILE_UPLOAD,\n};\n","<div class=\"pdx-manual-form\">\n @if (showHeader()) {\n <praxis-manual-form-header\n [instance]=\"instance\"\n [title]=\"formTitle()\"\n [description]=\"formDescription()\"\n [editModeEnabled]=\"editModeEnabled()\"\n (editForm)=\"openFormEditor()\"\n (save)=\"handleSave()\"\n (reset)=\"handleReset()\"\n ></praxis-manual-form-header>\n }\n\n <form class=\"pdx-manual-form__form\" (submit)=\"handleSubmit(); $event.preventDefault()\">\n <ng-content></ng-content>\n </form>\n\n @if (showActions() && resolvedActions) {\n <praxis-manual-form-actions\n [actions]=\"resolvedActions\"\n (actionClick)=\"handleAction($event)\"\n ></praxis-manual-form-actions>\n }\n</div>\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { SETTINGS_PANEL_DATA, SETTINGS_PANEL_REF, SettingsPanelRef } from '@praxisui/settings-panel';\nimport { ManualFormInstance } from '../../stores/manual-form-instance';\nimport { FieldMetadata } from '@praxisui/core';\nimport { BehaviorSubject } from 'rxjs';\n\ninterface PanelInputs {\n instance: ManualFormInstance;\n}\n\n@Component({\n selector: 'praxis-manual-form-config-editor',\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n <div class=\"mf-editor\">\n <div class=\"mf-editor__toolbar\">\n <label><input type=\"checkbox\" [(ngModel)]=\"onlyHidden\" (change)=\"applyFilter()\" /> Mostrar apenas ocultos</label>\n <div class=\"spacer\"></div>\n <button type=\"button\" (click)=\"close()\">Fechar</button>\n </div>\n\n <div class=\"mf-editor__list\">\n <div class=\"mf-editor__row mf-editor__row--head\">\n <div class=\"col col--name\">Campo</div>\n <div class=\"col col--label\">Rótulo</div>\n <div class=\"col col--type\">Tipo</div>\n <div class=\"col col--vis\">Visível</div>\n <div class=\"col col--req\">Obrigatório</div>\n <div class=\"col col--ro\">Som. leitura</div>\n <div class=\"col col--dis\">Desabilitado</div>\n </div>\n\n <div class=\"mf-editor__row\" *ngFor=\"let f of filtered\">\n <div class=\"col col--name\"><code>{{ f.name }}</code></div>\n <div class=\"col col--label\">{{ f.label || f.name }}</div>\n <div class=\"col col--type\">{{ f.controlType }}</div>\n <div class=\"col col--vis\">\n <label class=\"toggle\">\n <input type=\"checkbox\" [checked]=\"!f.hidden\" (change)=\"toggleVisibility(f, $any($event.target).checked)\" />\n <span>{{ f.hidden ? 'Oculto' : 'Visível' }}</span>\n </label>\n </div>\n <div class=\"col col--req\">\n <label class=\"toggle\">\n <input type=\"checkbox\" [checked]=\"!!f.required\" (change)=\"toggleRequired(f, $any($event.target).checked)\" />\n <span>{{ f.required ? 'Sim' : 'Não' }}</span>\n </label>\n </div>\n <div class=\"col col--ro\">\n <label class=\"toggle\">\n <input type=\"checkbox\" [checked]=\"!!f.readOnly\" (change)=\"toggleReadOnly(f, $any($event.target).checked)\" />\n <span>{{ f.readOnly ? 'Sim' : 'Não' }}</span>\n </label>\n </div>\n <div class=\"col col--dis\">\n <label class=\"toggle\">\n <input type=\"checkbox\" [checked]=\"!!f.disabled\" (change)=\"toggleDisabled(f, $any($event.target).checked)\" />\n <span>{{ f.disabled ? 'Sim' : 'Não' }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n .mf-editor { display: grid; gap: 12px; padding: 12px; }\n .mf-editor__toolbar { display: flex; align-items: center; gap: 8px; }\n .mf-editor__toolbar .spacer { flex: 1; }\n .mf-editor__list { display: grid; gap: 6px; }\n .mf-editor__row { display: grid; grid-template-columns: 2fr 2fr 1fr 1fr 1fr 1fr 1fr; align-items: center; gap: 8px; padding: 8px 10px; border: 1px solid rgba(0,0,0,0.08); border-radius: 6px; }\n .mf-editor__row--head { font-weight: 600; background: rgba(0,0,0,0.04); }\n .col code { background: rgba(0,0,0,0.05); padding: 2px 6px; border-radius: 4px; }\n button { padding: 6px 10px; border: 1px solid rgba(0,0,0,0.12); background: white; border-radius: 4px; cursor: pointer; }\n .toggle { display: inline-flex; align-items: center; gap: 6px; }\n `,\n ],\n})\nexport class ManualFormConfigEditorComponent implements OnInit {\n readonly instance: ManualFormInstance;\n all: FieldMetadata[] = [];\n filtered: FieldMetadata[] = [];\n onlyHidden = false;\n // SettingsValueProvider observables\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n\n constructor(\n @Inject(SETTINGS_PANEL_DATA) inputs: PanelInputs,\n @Inject(SETTINGS_PANEL_REF) private ref: SettingsPanelRef,\n ) {\n this.instance = inputs.instance;\n }\n\n ngOnInit(): void {\n this.refresh();\n }\n\n close(): void { this.ref.close('cancel'); }\n\n applyFilter(): void {\n this.filtered = this.onlyHidden ? this.all.filter(f => !!f.hidden) : [...this.all];\n }\n\n toggleVisibility(field: FieldMetadata, checked?: boolean): void {\n const visible = !!checked; // checked === visible\n const toPatch = { hidden: !visible } as Partial<FieldMetadata>;\n try {\n this.instance.patchFieldMetadata(field.name, toPatch);\n this.instance.saveDraft();\n this.refresh();\n this.isDirty$.next(true);\n } catch {}\n }\n\n toggleRequired(field: FieldMetadata, checked?: boolean): void {\n const toPatch = { required: !!checked } as Partial<FieldMetadata>;\n try {\n this.instance.patchFieldMetadata(field.name, toPatch);\n this.instance.saveDraft();\n this.refresh();\n this.isDirty$.next(true);\n } catch {}\n }\n\n toggleReadOnly(field: FieldMetadata, checked?: boolean): void {\n const toPatch = { readOnly: !!checked } as Partial<FieldMetadata>;\n try {\n this.instance.patchFieldMetadata(field.name, toPatch);\n this.instance.saveDraft();\n this.refresh();\n this.isDirty$.next(true);\n } catch {}\n }\n\n toggleDisabled(field: FieldMetadata, checked?: boolean): void {\n const toPatch = { disabled: !!checked } as Partial<FieldMetadata>;\n try {\n this.instance.patchFieldMetadata(field.name, toPatch);\n this.instance.saveDraft();\n this.refresh();\n this.isDirty$.next(true);\n } catch {}\n }\n\n getSettingsValue(): any {\n return {\n fieldStates: (this.instance.currentConfig.fieldMetadata || []).map((f) => ({\n name: f.name,\n hidden: !!f.hidden,\n required: !!f.required,\n readOnly: !!f.readOnly,\n disabled: !!f.disabled,\n })),\n };\n }\n\n onSave(): any {\n const value = this.getSettingsValue();\n // Consider changes persisted via saveDraft; mark clean so buttons desativem se reabrir\n this.isDirty$.next(false);\n return value;\n }\n\n private refresh(): void {\n this.all = (this.instance.currentConfig.fieldMetadata || []).map(f => ({ ...f }));\n this.applyFilter();\n }\n}\n","import { Directive, Input, OnChanges, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport { ManualFormInstance } from '../stores/manual-form-instance';\nimport { FieldMetadata } from '@praxisui/core';\n\ninterface ManualFieldContext {\n $implicit: FieldMetadata | undefined;\n metadata: FieldMetadata | undefined;\n fieldName: string;\n}\n\n@Directive({\n selector: '[praxisManualField]',\n standalone: true,\n})\nexport class ManualFieldDirective implements OnChanges {\n @Input('praxisManualField') fieldName!: string;\n @Input('praxisManualFieldInstance') instance!: ManualFormInstance;\n\n constructor(\n private readonly templateRef: TemplateRef<ManualFieldContext>,\n private readonly viewContainer: ViewContainerRef,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('fieldName' in changes || 'instance' in changes) {\n this.render();\n }\n }\n\n private render(): void {\n this.viewContainer.clear();\n if (!this.instance || !this.fieldName) {\n return;\n }\n\n const metadata = this.instance.getFieldMetadata(this.fieldName);\n const context: ManualFieldContext = {\n $implicit: metadata,\n metadata,\n fieldName: this.fieldName,\n };\n this.viewContainer.createEmbeddedView(this.templateRef, context);\n }\n}\n\n","import { Directive, HostListener, Input, inject } from '@angular/core';\n\nimport { ManualFormComponent } from '../components/manual-form/manual-form.component';\n\n/**\n * Attach to any field inside <praxis-manual-form> to open the metadata editor\n * on double click, respecting the form's editModeEnabled state.\n *\n * Usage:\n * <pdx-text-input pdxManualEdit=\"nome\" ...></pdx-text-input>\n */\n@Directive({\n selector: '[pdxManualEdit]',\n standalone: true,\n})\nexport class ManualFieldEditorOnDblclickDirective {\n @Input('pdxManualEdit') fieldName!: string;\n\n private readonly manualForm = inject(ManualFormComponent, { optional: true });\n\n @HostListener('dblclick')\n onDblClick(): void {\n if (!this.fieldName) return;\n this.manualForm?.tryOpenFieldEditor(this.fieldName);\n }\n}\n\n","/*\n * Public API Surface of praxis-manual-form\n */\n\nexport * from './lib/models/manual-form.types';\nexport * from './lib/seeds/manual-form.seed';\nexport * from './lib/stores/manual-form-instance';\nexport * from './lib/components/manual-form-header/manual-form-header.component';\nexport * from './lib/components/manual-form-actions/manual-form-actions.component';\nexport * from './lib/components/manual-form/manual-form.component';\nexport * from './lib/components/manual-form-config-editor/manual-form-config-editor.component';\nexport * from './lib/directives/manual-field.directive';\nexport * from './lib/directives/manual-field-editor-on-dblclick.directive';\nexport * from './lib/services/manual-field-metadata-bridge.service';\nexport * from './lib/tokens/manual-form.tokens';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"praxisui-manual-form.mjs","sources":["../../../projects/praxis-manual-form/src/lib/utils/clone.util.ts","../../../projects/praxis-manual-form/src/lib/seeds/manual-form.seed.ts","../../../projects/praxis-manual-form/src/lib/stores/manual-form-instance.ts","../../../projects/praxis-manual-form/src/lib/components/manual-form-header/manual-form-header.component.ts","../../../projects/praxis-manual-form/src/lib/components/manual-form-actions/manual-form-actions.component.ts","../../../projects/praxis-manual-form/src/lib/tokens/manual-form.tokens.ts","../../../projects/praxis-manual-form/src/lib/services/manual-field-metadata-bridge.service.ts","../../../projects/praxis-manual-form/src/lib/components/manual-form/manual-form.component.ts","../../../projects/praxis-manual-form/src/lib/components/manual-form/manual-form.component.html","../../../projects/praxis-manual-form/src/lib/components/manual-form-config-editor/manual-form-config-editor.component.ts","../../../projects/praxis-manual-form/src/lib/directives/manual-field.directive.ts","../../../projects/praxis-manual-form/src/lib/directives/manual-field-editor-on-dblclick.directive.ts","../../../projects/praxis-manual-form/src/public-api.ts","../../../projects/praxis-manual-form/src/praxisui-manual-form.ts"],"sourcesContent":["export function deepClone<T>(value: T): T {\n if (typeof (globalThis as any)?.structuredClone === 'function') {\n return (globalThis as any).structuredClone(value);\n }\n\n try {\n return JSON.parse(JSON.stringify(value)) as T;\n } catch {\n if (Array.isArray(value)) {\n return value.slice() as unknown as T;\n }\n if (value && typeof value === 'object') {\n return { ...(value as Record<string, unknown>) } as T;\n }\n return value;\n }\n}\n\n","import { ensureIds, FormConfig, FieldMetadata } from '@praxisui/core';\n\nimport { deepClone } from '../utils/clone.util';\nimport {\n ManualFieldMetadataMap,\n ManualFormId,\n ManualFormSeed,\n} from '../models/manual-form.types';\n\nexport interface ManualFormSeedOptions {\n source?: ManualFormSeed['source'];\n version?: string;\n context?: Record<string, any>;\n}\n\nexport function createManualFormSeed(\n formId: ManualFormId,\n config: FormConfig,\n options: ManualFormSeedOptions = {},\n): ManualFormSeed {\n const cloned = deepClone(config);\n const normalized = ensureIds(cloned);\n normalized.fieldMetadata = (normalized.fieldMetadata || []).map((fm) => ({ ...fm }));\n\n return {\n formId,\n config: normalized,\n source: options.source ?? 'local',\n version: options.version ?? normalized.metadata?.version,\n context: options.context,\n };\n}\n\nexport function toFieldMetadataMap(\n fieldMetadata: FieldMetadata[] | undefined,\n): ManualFieldMetadataMap {\n const map: ManualFieldMetadataMap = new Map();\n for (const meta of fieldMetadata || []) {\n if (!meta?.name) continue;\n map.set(meta.name, { ...meta });\n }\n return map;\n}\n","import { inject, Injectable, Optional, Inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport {\n CONFIG_STORAGE,\n ConfigStorage,\n DynamicFormService,\n FieldMetadata,\n FormConfig,\n} from '@praxisui/core';\n\nimport { deepClone } from '../utils/clone.util';\nimport {\n ManualFieldMetadataMap,\n ManualFormId,\n ManualFormPersistenceOptions,\n ManualFormSeed,\n ManualFormSnapshot,\n ManualFormState,\n} from '../models/manual-form.types';\nimport { toFieldMetadataMap } from '../seeds/manual-form.seed';\n\ninterface PersistPayload extends ManualFormSnapshot {\n version?: string;\n}\n\n/**\n * Runtime instance that keeps manual form configuration, metadata and\n * FormGroup in sync. The instance is created through the factory below so the\n * host applications do not need to manage storage or dynamic form services.\n */\nexport class ManualFormInstance {\n private readonly formConfig$: BehaviorSubject<FormConfig>;\n private readonly fieldMetadata$: BehaviorSubject<ManualFieldMetadataMap>;\n private readonly state$: BehaviorSubject<ManualFormState>;\n private readonly formGroup: FormGroup;\n private readonly boundComponents = new Map<string, unknown>();\n\n constructor(\n private readonly formId: ManualFormId,\n private readonly seed: ManualFormSeed,\n initialConfig: FormConfig,\n private readonly dynamicFormService: DynamicFormService,\n private readonly storage?: ConfigStorage,\n private readonly persistenceOptions?: ManualFormPersistenceOptions,\n externalForm?: FormGroup,\n ) {\n const configClone = deepClone(initialConfig);\n const metadataMap = toFieldMetadataMap(configClone.fieldMetadata);\n\n this.formConfig$ = new BehaviorSubject<FormConfig>(configClone);\n this.fieldMetadata$ = new BehaviorSubject<ManualFieldMetadataMap>(metadataMap);\n if (externalForm) {\n this.formGroup = externalForm;\n // Ensure controls exist and match metadata on the provided form\n this.cloneFieldMetadata(metadataMap).forEach((meta) => {\n try {\n this.dynamicFormService.updateControlFromMetadata(this.formGroup, meta, {\n emitEvent: false,\n });\n } catch {\n /* ignore */\n }\n });\n } else {\n this.formGroup = this.dynamicFormService.createFormGroupFromMetadata(\n this.cloneFieldMetadata(metadataMap),\n );\n }\n this.state$ = new BehaviorSubject<ManualFormState>({\n formId: this.formId,\n config: deepClone(configClone),\n fields: this.cloneFieldMetadata(metadataMap),\n });\n }\n\n /** Observable stream for consumers interested in config mutations. */\n get stateChanges$(): Observable<ManualFormState> {\n return this.state$.asObservable();\n }\n\n get formConfigChanges$(): Observable<FormConfig> {\n return this.formConfig$.asObservable();\n }\n\n get fieldMetadataChanges$(): Observable<ManualFieldMetadataMap> {\n return this.fieldMetadata$.asObservable();\n }\n\n get currentConfig(): FormConfig {\n return this.formConfig$.value;\n }\n\n get currentFieldMetadata(): ManualFieldMetadataMap {\n return this.fieldMetadata$.value;\n }\n\n get form(): FormGroup {\n return this.formGroup;\n }\n\n /** Retrieve metadata for a specific field (cloned to avoid mutations). */\n getFieldMetadata(fieldName: string): FieldMetadata | undefined {\n const meta = this.fieldMetadata$.value.get(fieldName);\n return meta ? { ...meta } : undefined;\n }\n\n /**\n * Registers a component instance to receive metadata updates for the\n * specified field. Helpful for manual templates that wish to keep hot-update\n * behaviour without wiring everything manually.\n */\n bindComponent(fieldName: string, componentInstance: unknown): void {\n if (!fieldName || !componentInstance) {\n return;\n }\n this.boundComponents.set(fieldName, componentInstance);\n this.refreshBoundComponent(fieldName);\n }\n\n unbindComponent(fieldName: string): void {\n this.boundComponents.delete(fieldName);\n }\n\n /**\n * Applies a partial metadata patch to a field and propagates the changes to\n * the FormConfig, runtime FormGroup and state streams.\n */\n patchFieldMetadata(fieldName: string, patch: Partial<FieldMetadata>): void {\n const current = this.fieldMetadata$.value.get(fieldName);\n if (!current) {\n return;\n }\n\n const next = this.deepMerge(current as any, patch as any) as FieldMetadata;\n this.fieldMetadata$.value.set(fieldName, next);\n this.fieldMetadata$.next(new Map(this.fieldMetadata$.value));\n\n const configClone = deepClone(this.formConfig$.value);\n configClone.fieldMetadata = (configClone.fieldMetadata || []).map((fm) =>\n fm.name === fieldName ? { ...next } : fm,\n );\n this.publishConfig(configClone);\n\n try {\n this.dynamicFormService.updateControlFromMetadata(this.formGroup, next, {\n emitEvent: false,\n });\n } catch {\n /* Defensive: control might not exist if form is customised manually. */\n }\n\n this.refreshBoundComponent(fieldName);\n }\n\n /** Replaces the entire FormConfig, typically used after reconciling with backend seeds. */\n replaceConfig(config: FormConfig): void {\n const cloned = deepClone(config);\n this.fieldMetadata$.next(toFieldMetadataMap(cloned.fieldMetadata));\n this.publishConfig(cloned);\n\n const metadataList = this.getFieldMetadataArray();\n // Rebuild controls to ensure validators align with the new metadata.\n metadataList.forEach((meta) => {\n try {\n this.dynamicFormService.updateControlFromMetadata(this.formGroup, meta, {\n emitEvent: false,\n });\n } catch {\n /* ignore */\n }\n });\n\n // Refresh all bound components with the new metadata references.\n for (const fieldName of this.boundComponents.keys()) {\n this.refreshBoundComponent(fieldName);\n }\n }\n\n /** Restores configuration back to the original seed definition. */\n resetToSeed(): void {\n this.replaceConfig(this.seed.config);\n }\n\n /**\n * Persists the current configuration and, optionally, the provided form value\n * using ConfigStorage. By default, stores the FormGroup raw value.\n */\n saveDraft(value: Record<string, any> | null = null): void {\n if (!this.storage) {\n return;\n }\n\n const key = buildStorageKey(this.formId, this.persistenceOptions);\n const payload: PersistPayload = {\n config: deepClone(this.formConfig$.value),\n value: value ?? this.formGroup.getRawValue(),\n metadata: {\n savedAt: new Date().toISOString(),\n savedBy: this.persistenceOptions?.profileId,\n host: this.persistenceOptions?.namespace,\n },\n version: this.seed.version,\n };\n\n this.storage.saveConfig(key, payload);\n }\n\n private publishConfig(config: FormConfig): void {\n this.formConfig$.next(config);\n this.state$.next({\n formId: this.formId,\n config: deepClone(config),\n fields: this.getFieldMetadataArray(),\n });\n }\n\n private getFieldMetadataArray(): FieldMetadata[] {\n return this.cloneFieldMetadata();\n }\n\n private cloneFieldMetadata(map: ManualFieldMetadataMap = this.fieldMetadata$.value): FieldMetadata[] {\n return Array.from(map.values()).map((fm) => ({ ...fm }));\n }\n\n private refreshBoundComponent(fieldName: string): void {\n const component = this.boundComponents.get(fieldName);\n if (!component) {\n return;\n }\n const metadata = this.fieldMetadata$.value.get(fieldName);\n if (!metadata) {\n return;\n }\n\n try {\n if (typeof (component as any)?.setInputMetadata === 'function') {\n (component as any).setInputMetadata({ ...metadata });\n // fallthrough to also apply visibility state on host\n }\n const metaProp = (component as any)?.metadata;\n if (metaProp && typeof metaProp === 'object') {\n if (typeof metaProp.set === 'function') {\n metaProp.set({ ...metadata });\n // fallthrough to also apply visibility state on host\n }\n }\n if (!metaProp || typeof metaProp.set !== 'function') {\n (component as any).metadata = { ...metadata };\n }\n // Apply visibility to component and host element for manual templates\n const isHidden = !!(metadata as any).hidden || !!(metadata as any).formHidden;\n if ('visible' in (component as any)) {\n try { (component as any).visible = !isHidden; } catch {}\n }\n const hostEl: HTMLElement | undefined = (component as any)?.elementRef?.nativeElement;\n if (hostEl) {\n hostEl.style.display = isHidden ? 'none' : '';\n hostEl.setAttribute('aria-hidden', String(isHidden));\n }\n } catch {\n /* ignore */\n }\n }\n\n /** Deep-merge helper to preserve nested objects (e.g., clearButton.icon + enabled). */\n private deepMerge<T>(target: T, source: Partial<T>): T {\n if (source == null || typeof source !== 'object') return { ...(target as any) } as T;\n const out: any = Array.isArray(target) ? [...(target as any)] : { ...(target as any) };\n for (const [k, v] of Object.entries(source as any)) {\n if (v && typeof v === 'object' && !Array.isArray(v)) {\n out[k] = this.deepMerge(out[k] ?? {}, v as any);\n } else {\n out[k] = v;\n }\n }\n return out as T;\n }\n}\n\n/**\n * Factory service used to create ManualFormInstance objects with the required\n * dependencies injected from Angular's DI container.\n */\n@Injectable({ providedIn: 'root' })\nexport class ManualFormInstanceFactory {\n private readonly dynamicFormService = inject(DynamicFormService);\n\n constructor(\n @Optional() @Inject(CONFIG_STORAGE) private readonly storage?: ConfigStorage,\n ) {}\n\n create(\n seed: ManualFormSeed,\n options: ManualFormPersistenceOptions = {},\n externalForm?: FormGroup,\n ): ManualFormInstance {\n const persisted = this.loadPersistedSnapshot(seed.formId, options);\n const baseConfig = persisted?.config ?? deepClone(seed.config);\n\n const instance = new ManualFormInstance(\n seed.formId,\n seed,\n baseConfig,\n this.dynamicFormService,\n this.storage,\n options,\n externalForm,\n );\n\n // Apply persisted value if present.\n if (persisted?.value) {\n instance.form.patchValue(persisted.value, { emitEvent: false });\n }\n\n return instance;\n }\n\n private loadPersistedSnapshot(\n formId: ManualFormId,\n options: ManualFormPersistenceOptions,\n ): ManualFormSnapshot | undefined {\n if (!this.storage) {\n return undefined;\n }\n const key = buildStorageKey(formId, options);\n return this.storage.loadConfig<PersistPayload>(key) ?? undefined;\n }\n}\n\nfunction buildStorageKey(\n formId: ManualFormId,\n options: ManualFormPersistenceOptions = {},\n): string {\n const parts = ['manual-form', options.namespace, options.tenantId, options.profileId, formId]\n .filter(Boolean)\n .map((segment) => String(segment));\n return parts.join(':');\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ManualFormInstance } from '../../stores/manual-form-instance';\n\n@Component({\n selector: 'praxis-manual-form-header',\n standalone: true,\n imports: [CommonModule],\n template: `\n <header class=\"pdx-manual-form__header\">\n <div class=\"pdx-manual-form__title\">\n <h2>{{ displayTitle }}</h2>\n @if (displayDescription) {\n <p class=\"pdx-manual-form__subtitle\">\n {{ displayDescription }}\n </p>\n }\n </div>\n <div class=\"pdx-manual-form__header-actions\">\n @if (editModeEnabled()) {\n <button type=\"button\" (click)=\"editForm.emit()\" [attr.aria-label]=\"editFormLabel()\">{{ editFormLabel() }}</button>\n }\n <button type=\"button\" (click)=\"reset.emit()\" [attr.aria-label]=\"resetLabel()\">{{ resetLabel() }}</button>\n <button type=\"button\" (click)=\"save.emit()\" [attr.aria-label]=\"saveLabel()\">{{ saveLabel() }}</button>\n </div>\n </header>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .pdx-manual-form__header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1rem;\n margin-bottom: 1.5rem;\n }\n .pdx-manual-form__title h2 {\n margin: 0;\n font-size: 1.5rem;\n }\n .pdx-manual-form__subtitle {\n margin: 0.25rem 0 0;\n color: rgba(0, 0, 0, 0.6);\n }\n .pdx-manual-form__header-actions {\n display: flex;\n gap: 0.5rem;\n }\n button[type='button'] {\n padding: 0.5rem 1rem;\n border-radius: 4px;\n border: 1px solid rgba(15, 23, 42, 0.1);\n background: white;\n cursor: pointer;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ManualFormHeaderComponent {\n readonly instance = input<ManualFormInstance | null | undefined>();\n readonly title = input<string | undefined>();\n readonly description = input<string | undefined>();\n readonly saveLabel = input('Salvar customizações');\n readonly resetLabel = input('Restaurar padrão');\n readonly editModeEnabled = input(false);\n readonly editFormLabel = input('Editar formulário');\n\n readonly save = output<void>();\n readonly reset = output<void>();\n readonly editForm = output<void>();\n\n readonly fallbackTitle = 'Formulário manual';\n\n private get metadata(): { title?: string; description?: string } | undefined {\n return this.instance()?.currentConfig?.metadata as\n | { title?: string; description?: string }\n | undefined;\n }\n\n private get firstSection(): { title?: string; description?: string } | undefined {\n return this.instance()?.currentConfig?.sections?.[0];\n }\n\n get displayTitle(): string {\n return (\n this.title() ||\n this.metadata?.title ||\n this.firstSection?.title ||\n this.fallbackTitle\n );\n }\n\n get displayDescription(): string | undefined {\n return (\n this.description() ||\n this.metadata?.description ||\n this.firstSection?.description ||\n undefined\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormActionsLayout, FormActionButton } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-manual-form-actions',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (actions(); as layout) {\n <footer class=\"pdx-manual-form__actions\">\n <div class=\"pdx-manual-form__actions-secondary\">\n @if (layout.cancel; as cancel) {\n @if (isVisible(cancel)) {\n <button type=\"button\" [disabled]=\"cancel.disabled\" (click)=\"emit('cancel', cancel)\">\n {{ cancel.label || 'Cancelar' }}\n </button>\n }\n }\n @if (layout.reset; as resetBtn) {\n @if (isVisible(resetBtn)) {\n <button type=\"button\" [disabled]=\"resetBtn.disabled\" (click)=\"emit('reset', resetBtn)\">\n {{ resetBtn.label || 'Resetar' }}\n </button>\n }\n }\n @for (action of layout.custom || []; track trackByFn ? trackByFn($index, action) : (action?.id || $index)) {\n @if (isVisible(action)) {\n <button type=\"button\" [disabled]=\"action.disabled\" (click)=\"emit(action.id || 'custom', action)\">\n {{ action.label || action.id || 'Ação' }}\n </button>\n }\n }\n </div>\n <div class=\"pdx-manual-form__actions-primary\">\n @if (layout.submit; as submitBtn) {\n @if (isVisible(submitBtn)) {\n <button type=\"submit\" [disabled]=\"submitBtn.disabled\" (click)=\"emit('submit', submitBtn)\">\n {{ submitBtn.label || 'Salvar' }}\n </button>\n }\n }\n </div>\n </footer>\n }\n `,\n styles: [\n `\n :host { display: block; }\n .pdx-manual-form__actions {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1rem;\n margin-top: 2rem;\n }\n .pdx-manual-form__actions-secondary,\n .pdx-manual-form__actions-primary {\n display: flex;\n gap: 0.5rem;\n }\n button {\n padding: 0.5rem 1rem;\n border-radius: 4px;\n border: 1px solid rgba(15, 23, 42, 0.1);\n background: white;\n cursor: pointer;\n }\n .pdx-manual-form__actions-primary button {\n background: #1d4ed8;\n color: #fff;\n border-color: #1d4ed8;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ManualFormActionsComponent {\n readonly actions = input<FormActionsLayout | null | undefined>();\n @Input() trackByFn: ((idx: number, item: FormActionButton) => unknown) | null = null;\n readonly actionClick = output<string>();\n\n isVisible(action?: FormActionButton | null): boolean {\n return action ? action.visible !== false : false;\n }\n\n emit(kind: string, action?: FormActionButton | null): void {\n if (action?.action) {\n this.actionClick.emit(action.action);\n } else {\n this.actionClick.emit(kind);\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { FieldControlType } from '@praxisui/core';\n\nexport const MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE = new InjectionToken<Record<string, FieldControlType>>(\n 'MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE',\n);\n\nexport const MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE = new InjectionToken<Record<string, FieldControlType>>(\n 'MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE',\n);\n\n","import { Injectable, isDevMode, inject } from '@angular/core';\n\nimport { FieldMetadata } from '@praxisui/core';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\n\nimport { ManualFormInstance } from '../stores/manual-form-instance';\n\ninterface PatchSignature {\n sig: string;\n at: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ManualFieldMetadataBridgeService {\n private readonly patchSignatures = new WeakMap<ManualFormInstance, Map<string, PatchSignature>>();\n private readonly settingsPanel = inject(SettingsPanelService);\n\n buildEditorSeed(instance: ManualFormInstance, fieldName: string): FieldMetadata | undefined {\n return instance.getFieldMetadata(fieldName);\n }\n\n applyPatch(\n instance: ManualFormInstance,\n fieldName: string,\n patch: Partial<FieldMetadata>,\n ): void {\n instance.patchFieldMetadata(fieldName, patch);\n }\n\n async openEditor(instance: ManualFormInstance, fieldName: string): Promise<void> {\n if (!instance || !fieldName) {\n return;\n }\n\n const seed = this.buildEditorSeed(instance, fieldName);\n if (!seed) {\n if (isDevMode()) {\n try { console.warn('[ManualFieldMetadataBridge] metadata not found for field', fieldName); } catch {}\n }\n return;\n }\n\n let FieldMetadataEditorComponent: any;\n try {\n const module = await import('@praxisui/metadata-editor');\n FieldMetadataEditorComponent = (module as any)?.FieldMetadataEditorComponent;\n if (!FieldMetadataEditorComponent) {\n throw new Error('FieldMetadataEditorComponent export missing');\n }\n } catch (err) {\n if (isDevMode()) {\n try { console.error('[ManualFieldMetadataBridge] failed to load @praxisui/metadata-editor', err); } catch {}\n }\n return;\n }\n\n const controlType = (seed as FieldMetadata | undefined)?.controlType;\n const title = this.buildPanelTitle(fieldName, seed);\n const panelId = this.buildPanelId(instance, fieldName);\n\n let ref;\n try {\n ref = this.settingsPanel.open({\n id: panelId,\n title,\n titleIcon: this.resolveIcon(controlType),\n content: {\n component: FieldMetadataEditorComponent,\n inputs: {\n controlType,\n seed,\n hostBridge: {\n applyPatch: (patch: Partial<FieldMetadata>) => this.handlePatch(instance, fieldName, patch),\n },\n },\n },\n });\n } catch (err) {\n if (isDevMode()) {\n try { console.error('[ManualFieldMetadataBridge] failed to open settings panel', err); } catch {}\n }\n return;\n }\n\n ref.applied$.subscribe((patch: Partial<FieldMetadata>) => this.handlePatch(instance, fieldName, patch));\n ref.saved$.subscribe((patch: Partial<FieldMetadata>) => this.handlePatch(instance, fieldName, patch));\n }\n\n private handlePatch(\n instance: ManualFormInstance,\n fieldName: string,\n patch: Partial<FieldMetadata> | null | undefined,\n ): void {\n if (!patch || typeof patch !== 'object') {\n return;\n }\n\n if (!this.shouldApplyPatch(instance, fieldName, patch)) {\n return;\n }\n\n this.applyPatch(instance, fieldName, patch);\n\n try {\n instance.saveDraft();\n } catch (err) {\n if (isDevMode()) {\n try { console.error('[ManualFieldMetadataBridge] failed to persist draft after patch', err); } catch {}\n }\n }\n }\n\n private shouldApplyPatch(\n instance: ManualFormInstance,\n fieldName: string,\n patch: Partial<FieldMetadata>,\n ): boolean {\n let fieldsMap = this.patchSignatures.get(instance);\n if (!fieldsMap) {\n fieldsMap = new Map<string, PatchSignature>();\n this.patchSignatures.set(instance, fieldsMap);\n }\n\n const now = Date.now();\n let signature = '';\n try {\n signature = JSON.stringify(patch);\n } catch {\n signature = `${now}`;\n }\n\n const existing = fieldsMap.get(fieldName);\n if (existing && existing.sig === signature && now - existing.at < 1200) {\n if (isDevMode()) {\n try { console.debug('[ManualFieldMetadataBridge] duplicate patch ignored', { fieldName }); } catch {}\n }\n return false;\n }\n\n fieldsMap.set(fieldName, { sig: signature, at: now });\n return true;\n }\n\n private buildPanelTitle(fieldName: string, seed: FieldMetadata): string {\n const label = seed?.label || seed?.placeholder || fieldName;\n const type = this.formatControlType(seed?.controlType);\n return type ? `${type} — ${label}` : label;\n }\n\n private buildPanelId(instance: ManualFormInstance, fieldName: string): string {\n const formId = this.extractFormId(instance);\n return formId ? `manual-field.${formId}.${fieldName}` : `manual-field.${fieldName}`;\n }\n\n private extractFormId(instance: ManualFormInstance): string | undefined {\n try {\n return (instance as unknown as { formId?: string })?.formId || (instance as any)?.seed?.formId;\n } catch {\n return undefined;\n }\n }\n\n private formatControlType(controlType: FieldMetadata['controlType'] | undefined): string {\n if (!controlType) {\n return '';\n }\n return String(controlType)\n .split(/[-_]/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase())\n .join(' ');\n }\n\n private resolveIcon(controlType: FieldMetadata['controlType'] | undefined): string | undefined {\n if (!controlType) {\n return 'tune';\n }\n const map: Record<string, string> = {\n INPUT: 'text_fields',\n TEXTAREA: 'notes',\n NUMERIC_TEXT_BOX: 'pin',\n CURRENCY_INPUT: 'attach_money',\n EMAIL_INPUT: 'mail',\n PASSWORD: 'vpn_key',\n SELECT: 'list',\n MULTI_SELECT: 'checklist',\n AUTO_COMPLETE: 'search',\n RADIO: 'radio_button_checked',\n CHECKBOX: 'check_box',\n TOGGLE: 'toggle_on',\n SLIDER: 'tune',\n DATE_INPUT: 'event',\n DATE_RANGE: 'event_repeat',\n TIME_INPUT: 'schedule',\n TIME_PICKER: 'schedule',\n RATING: 'grade',\n TREE_SELECT: 'account_tree',\n FILE_UPLOAD: 'upload_file',\n TRANSFER_LIST: 'compare_arrows',\n CHIP_INPUT: 'sell',\n CPF_CNPJ_INPUT: 'fingerprint',\n };\n const key = String(controlType).toUpperCase();\n return map[key] || 'tune';\n }\n\n bindComponent(\n instance: ManualFormInstance,\n fieldName: string,\n componentInstance: unknown,\n ): void {\n instance.bindComponent(fieldName, componentInstance);\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n inject,\n OnDestroy,\n QueryList,\n isDevMode,\n input,\n output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormActionButton,\n FormActionsLayout,\n FieldControlType,\n FieldMetadata,\n FormConfig,\n} from '@praxisui/core';\nimport {\n FormControl,\n FormControlName,\n FormGroup,\n FormGroupDirective,\n ReactiveFormsModule,\n ValidatorFn,\n Validators,\n AbstractControl,\n ControlContainer,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime } from 'rxjs';\n\nimport {\n ManualFormInstance,\n ManualFormInstanceFactory,\n} from '../../stores/manual-form-instance';\nimport { ManualFormHeaderComponent } from '../manual-form-header/manual-form-header.component';\nimport { ManualFormActionsComponent } from '../manual-form-actions/manual-form-actions.component';\nimport {\n ManualFormId,\n ManualFormPersistenceOptions,\n} from '../../models/manual-form.types';\nimport { createManualFormSeed } from '../../seeds/manual-form.seed';\nimport { deepClone } from '../../utils/clone.util';\nimport {\n MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE,\n MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE,\n} from '../../tokens/manual-form.tokens';\nimport { ManualFieldMetadataBridgeService } from '../../services/manual-field-metadata-bridge.service';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\n\ninterface DetectedField {\n name: string;\n control: AbstractControl | null;\n component: any;\n selector?: string;\n}\n\n@Component({\n selector: 'praxis-manual-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n ManualFormHeaderComponent,\n ManualFormActionsComponent,\n ],\n providers: [\n // Provide a ControlContainer at the host boundary so projected formControlName can resolve it\n { provide: ControlContainer, useExisting: ManualFormComponent as any },\n ],\n templateUrl: './manual-form.component.html',\n styles: [\n `\n .pdx-manual-form {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n }\n\n .pdx-manual-form__form {\n display: grid;\n gap: 1rem;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ManualFormComponent implements AfterContentInit, OnDestroy {\n private readonly instanceFactory = inject(ManualFormInstanceFactory);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly metadataBridge = inject(ManualFieldMetadataBridgeService);\n private readonly settingsPanel = inject(SettingsPanelService);\n private readonly selectorToControlType =\n inject(MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE, { optional: true }) ?? DEFAULT_SELECTOR_TO_CONTROL_TYPE;\n private readonly constructorToControlType =\n inject(MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE, { optional: true }) ?? DEFAULT_CONSTRUCTOR_TO_CONTROL_TYPE;\n\n readonly formId = input.required<ManualFormId>();\n readonly formTitle = input<string | undefined>();\n readonly formDescription = input<string | undefined>();\n readonly actions = input<FormActionsLayout | null | undefined>();\n readonly showHeader = input(true);\n readonly showActions = input(true);\n readonly enableAutoSave = input(true);\n // Allows editor affordances (e.g., opening metadata editor on interactions)\n readonly editModeEnabled = input(false);\n readonly persistenceOptions = input<ManualFormPersistenceOptions | undefined>();\n // When true, uses FormControlName.path (joined by '.') as FieldMetadata.name.\n // Requires nested path support (already present in DynamicFormService).\n readonly usePathNames = input(false);\n // Debounce interval for autosave (ms). Only used when enableAutoSave is true.\n readonly autoSaveDebounceMs = input(800);\n\n readonly submitted = output<{ value: any; instance: ManualFormInstance }>();\n readonly saved = output<ManualFormInstance>();\n readonly resetEvent = output<ManualFormInstance>({ alias: 'reset' });\n readonly metadataChange = output<FormConfig>();\n\n @ContentChildren(FormControlName, { descendants: true })\n private formControls!: QueryList<FormControlName>;\n\n // FormGroupDirective is applied on the component host via hostDirectives\n private readonly hostFormGroupDirective = inject(FormGroupDirective, { self: true, optional: true });\n\n instance?: ManualFormInstance;\n resolvedActions?: FormActionsLayout;\n\n formGroup: FormGroup = new FormGroup({});\n private readonly registeredDirectives: FormControlName[] = [];\n\n constructor() {\n // Host-typed mode: if a FormGroupDirective is present, adopt its FormGroup without monkey patches.\n if (this.hostFormGroupDirective) {\n if (isDevMode()) console.debug('[ManualForm] Host FormGroupDirective attached early');\n if (this.hostFormGroupDirective.form) {\n this.formGroup = this.hostFormGroupDirective.form as FormGroup;\n if (isDevMode()) console.debug('[ManualForm] Using host-provided FormGroup instance');\n } else {\n // Keep placeholder until Angular binds [formGroup]; our addControl creates missing controls if needed.\n if (isDevMode()) console.debug('[ManualForm] No host FormGroup yet; awaiting binding without interception');\n }\n } else {\n if (isDevMode()) console.debug('[ManualForm] No host FormGroupDirective detected at construction (dynamic mode)');\n }\n }\n\n ngAfterContentInit(): void {\n if (this.formControls) {\n this.formControls.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.initialize(true));\n }\n\n queueMicrotask(() => this.initialize(false));\n }\n\n ngOnDestroy(): void {\n // Output signals do not need manual completion\n }\n\n // =============================\n // ControlContainer interface\n // =============================\n // Make this component act as the ControlContainer for projected children.\n // FormControlName will call `parent.formDirective.addControl(this)` on us.\n get formDirective(): any {\n return this;\n }\n get control(): FormGroup {\n return this.formGroup;\n }\n get path(): any[] {\n return [];\n }\n addControl(dir: FormControlName): any {\n const name = typeof dir.name === 'string' ? dir.name : String(dir.name);\n const pathSegs = Array.isArray((dir as any).path) && (dir as any).path.length\n ? ((dir as any).path as string[])\n : (name ? [name] : []);\n const pathStr = this.usePathNames() ? pathSegs.join('.') : name;\n\n // Ensure control exists locally when host is not ready\n if (pathStr && !this.getControlByPath(pathSegs)) {\n this.ensureControlPath(pathSegs);\n if (isDevMode()) console.debug('[ManualForm] addControl created missing control', pathStr);\n }\n\n // Delegate wiring to host FormGroupDirective when available (ensures CVA pipelines are set)\n if (this.hostFormGroupDirective && this.hostFormGroupDirective.form) {\n if (isDevMode()) console.debug('[ManualForm] Delegating addControl to host FormGroupDirective for', pathStr);\n const ctrl = this.hostFormGroupDirective.addControl(dir);\n this.registeredDirectives.push(dir);\n return ctrl;\n }\n // Fallback minimal wiring if no host directive\n const ctrl = this.formGroup.get((dir as any).path);\n try {\n const va: any = (dir as any).valueAccessor;\n va?.writeValue?.(ctrl?.value);\n va?.setDisabledState?.(ctrl?.disabled ?? false);\n va?.registerOnChange?.((value: any) => {\n ctrl?.setValue(value);\n });\n va?.registerOnTouched?.(() => {\n ctrl?.markAsTouched();\n });\n } catch {}\n (dir as any).control = ctrl;\n return ctrl;\n }\n removeControl(dir: FormControlName): void {\n this.hostFormGroupDirective?.removeControl(dir);\n const idx = this.registeredDirectives.indexOf(dir);\n if (idx >= 0) this.registeredDirectives.splice(idx, 1);\n }\n getControl(dir: FormControlName): AbstractControl | null {\n return this.formGroup.get(dir.path);\n }\n updateModel(dir: FormControlName, value: any): void {\n if (this.hostFormGroupDirective) {\n this.hostFormGroupDirective.updateModel(dir as any, value);\n } else {\n const ctrl = this.formGroup.get(dir.path);\n ctrl?.setValue(value);\n }\n }\n\n handleAction(actionId: string): void {\n if (actionId === 'submit') {\n this.handleSubmit();\n } else if (actionId === 'save') {\n this.handleSave();\n } else if (actionId === 'reset') {\n this.handleReset();\n } else if (this.instance) {\n this.metadataChange.emit(this.instance.currentConfig);\n }\n }\n\n handleSubmit(): void {\n if (!this.instance) {\n return;\n }\n const value = this.formGroup.getRawValue();\n if (this.enableAutoSave()) {\n this.instance.saveDraft(value);\n }\n this.submitted.emit({ value, instance: this.instance });\n }\n\n handleSave(): void {\n if (!this.instance) {\n return;\n }\n if (this.enableAutoSave()) {\n this.instance.saveDraft();\n }\n this.saved.emit(this.instance);\n this.metadataChange.emit(this.instance.currentConfig);\n }\n\n /** True when host applied [formGroup] directly on <praxis-manual-form>. */\n isHostTyped(): boolean {\n return !!this.hostFormGroupDirective?.form;\n }\n\n handleReset(): void {\n if (!this.instance) {\n return;\n }\n this.instance.resetToSeed();\n this.hostFormGroupDirective?.resetForm(this.instance.form.getRawValue());\n this.resetEvent.emit(this.instance);\n }\n\n /**\n * Attempts to open the field metadata editor respecting the component's\n * editModeEnabled input. No-ops when disabled or without an instance.\n */\n tryOpenFieldEditor(fieldName: string): void {\n if (!this.editModeEnabled()) {\n return;\n }\n const instance = this.instance;\n if (!instance || !fieldName) {\n return;\n }\n try {\n void this.metadataBridge.openEditor(instance, fieldName);\n } catch {}\n }\n\n /** Opens a simple form-level editor listing the fields and their visibility. */\n async openFormEditor(): Promise<void> {\n if (!this.editModeEnabled() || !this.instance) return;\n\n let ManualFormConfigEditorComponent: any;\n try {\n const module = await import('../manual-form-config-editor/manual-form-config-editor.component');\n ManualFormConfigEditorComponent = (module as any)?.ManualFormConfigEditorComponent;\n } catch {\n return;\n }\n const formId = this.formId();\n this.settingsPanel.open({\n id: formId ? `manual-form-editor.${formId}` : 'manual-form-editor',\n title: this.formTitle() || 'Editor do Formulário',\n titleIcon: 'tune',\n content: {\n component: ManualFormConfigEditorComponent,\n inputs: { instance: this.instance },\n },\n });\n }\n\n private initialize(fromChanges: boolean): void {\n if (!this.formId()) {\n return;\n }\n const fields = this.collectFields();\n if (isDevMode()) console.debug('[ManualForm] initialize: detected fields', fields.map(f => f.name));\n if (fields.length === 0) {\n return;\n }\n\n const seed = this.createSeedFromFields(fields);\n // Create runtime instance and let it populate our existing FormGroup\n this.instance = this.instanceFactory.create(seed, this.persistenceOptions() ?? {}, this.formGroup);\n if (isDevMode()) console.debug('[ManualForm] instance created with seed; current controls', Object.keys((this.formGroup as any).controls || {}));\n\n this.applyInstanceToTemplate(fields);\n\n // Auto-save value changes with debounce\n if (this.enableAutoSave() && this.instance) {\n this.instance.form.valueChanges\n .pipe(debounceTime(this.autoSaveDebounceMs()), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n try { this.instance?.saveDraft(); } catch {}\n });\n }\n this.cdr.markForCheck();\n }\n\n private collectFields(): DetectedField[] {\n if (!this.formControls) {\n return [];\n }\n const result: DetectedField[] = [];\n for (const dir of this.formControls) {\n const name = this.usePathNames()\n ? (Array.isArray((dir as any).path) && (dir as any).path.length ? ((dir as any).path as string[]).join('.') : (typeof dir.name === 'string' ? dir.name : null))\n : (typeof dir.name === 'string' ? dir.name : null);\n if (!name) {\n continue;\n }\n const component = this.resolveValueAccessor(dir);\n if (!component) {\n continue;\n }\n result.push({\n name,\n control: dir.control,\n component,\n selector: this.resolveSelector(component, dir),\n });\n }\n return result;\n }\n\n private resolveValueAccessor(dir: FormControlName): unknown {\n const accessor = dir.valueAccessor as unknown;\n if (!accessor) {\n return undefined;\n }\n if (Array.isArray(accessor)) {\n return accessor[0];\n }\n return accessor;\n }\n\n private resolveSelector(component: any, dir: FormControlName): string | undefined {\n const cmpDef = component?.constructor?.ɵcmp;\n if (cmpDef?.selectors?.length) {\n const first = cmpDef.selectors[0];\n if (Array.isArray(first) && first.length && typeof first[0] === 'string') {\n return first[0];\n }\n }\n const element: HTMLElement | undefined = (component as any)?.elementRef?.nativeElement\n ?? (dir as any)?._elementRef?.nativeElement;\n return element?.tagName?.toLowerCase();\n }\n\n private createSeedFromFields(fields: DetectedField[]) {\n const metadataList = fields.map((field) => this.buildMetadataForField(field));\n const actions = this.normalizeActions(this.actions() ?? null);\n\n const currentMeta = this.instance?.currentConfig.metadata\n ? deepClone(this.instance.currentConfig.metadata)\n : undefined;\n\n const config: FormConfig = {\n sections: [\n {\n id: 'auto-section',\n title: this.formTitle(),\n description: this.formDescription(),\n rows: [\n {\n id: 'auto-row',\n columns: [\n {\n id: 'auto-column',\n fields: metadataList.map((meta) => meta.name),\n },\n ],\n },\n ],\n },\n ],\n fieldMetadata: metadataList,\n metadata: currentMeta,\n actions,\n };\n\n this.resolvedActions = actions;\n\n return createManualFormSeed(this.formId(), config, {\n source: 'generated',\n version: '1.0.0',\n });\n }\n\n private applyInstanceToTemplate(fields: DetectedField[]): void {\n if (!this.instance) {\n return;\n }\n\n for (const field of fields) {\n this.instance.bindComponent(field.name, field.component);\n // Only apply metadata manually if the component doesn't expose a standard API\n const hasStdApi =\n typeof (field.component as any)?.setInputMetadata === 'function' ||\n !!((field.component as any)?.metadata && typeof (field.component as any).metadata.set === 'function');\n if (!hasStdApi) {\n const metadata = this.instance.getFieldMetadata(field.name);\n if (metadata) {\n this.applyMetadataToComponent(field.component, metadata);\n }\n }\n }\n }\n\n private buildMetadataForField(field: DetectedField): FieldMetadata {\n const existing = this.extractExistingMetadata(field.component);\n const label = existing?.label ?? this.inferLabel(field, existing);\n const controlType = existing?.controlType ?? this.inferControlType(field);\n const validators = this.inferValidators(field.control, existing);\n\n return {\n ...(existing ?? {}),\n name: field.name,\n label,\n controlType,\n validators: { ...existing?.validators, ...validators },\n } as FieldMetadata;\n }\n\n private getControlByPath(path: string[]): AbstractControl | null {\n if (!Array.isArray(path) || path.length === 0) return null;\n return this.formGroup.get(path as any);\n }\n\n private ensureControlPath(path: string[]): void {\n if (!Array.isArray(path) || path.length === 0) return;\n const leaf = path[path.length - 1]!;\n let group: FormGroup = this.formGroup;\n for (let i = 0; i < path.length - 1; i++) {\n const seg = path[i]!;\n const existing = group.get(seg);\n if (existing instanceof FormGroup) {\n group = existing;\n } else {\n const next = new FormGroup({});\n group.addControl(seg, next);\n group = next;\n }\n }\n if (!group.get(leaf)) {\n group.addControl(leaf, new FormControl());\n }\n }\n\n private extractExistingMetadata(component: any): FieldMetadata | undefined {\n try {\n const metaSignal = component?.metadata;\n if (typeof metaSignal === 'function') {\n const value = metaSignal();\n if (value) {\n return deepClone(value) as FieldMetadata;\n }\n }\n if (typeof component?.getMetadata === 'function') {\n const value = component.getMetadata();\n if (value) {\n return deepClone(value) as FieldMetadata;\n }\n }\n } catch {}\n return undefined;\n }\n\n private inferLabel(field: DetectedField, existing?: FieldMetadata): string {\n if (existing?.label) {\n return existing.label;\n }\n const componentLabel = (field.component as any)?.label;\n if (typeof componentLabel === 'string' && componentLabel.trim().length > 0) {\n return componentLabel;\n }\n return field.name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[-_]/g, ' ')\n .replace(/\\s+/g, ' ')\n .replace(/^\\w/, (c) => c.toUpperCase());\n }\n\n private inferControlType(field: DetectedField): FieldControlType {\n const selector = field.selector?.toLowerCase();\n if (selector && this.selectorToControlType[selector]) {\n return this.selectorToControlType[selector];\n }\n const ctorName = field.component?.constructor?.name ?? '';\n for (const [key, value] of Object.entries(this.constructorToControlType)) {\n if (ctorName.includes(key)) {\n return value;\n }\n }\n return FieldControlType.INPUT;\n }\n\n private inferValidators(control: AbstractControl | null, existing?: FieldMetadata): Record<string, any> {\n const validators: Record<string, any> = existing?.validators ? { ...existing.validators } : {};\n if (!control) {\n return validators;\n }\n const hasValidator = (fn: ValidatorFn) => {\n const anyControl = control as FormControl & { hasValidator?: (fn: ValidatorFn) => boolean };\n if (typeof anyControl.hasValidator === 'function') {\n return anyControl.hasValidator(fn);\n }\n try {\n return !!control.validator && !!control.validator({} as AbstractControl);\n } catch {\n return false;\n }\n };\n\n if (hasValidator(Validators.required)) {\n validators.required = true;\n }\n return validators;\n }\n\n private applyMetadataToComponent(component: any, metadata: FieldMetadata): void {\n try {\n if (typeof component?.setInputMetadata === 'function') {\n component.setInputMetadata(metadata);\n }\n const metaSignal = component?.metadata;\n if (metaSignal && typeof metaSignal.set === 'function') {\n metaSignal.set(metadata);\n }\n if ('label' in component && !component.label) {\n component.label = metadata.label;\n }\n // Visibilidade: esconder/mostrar com base em hidden/formHidden, mesmo em templates manuais\n const isHidden = !!(metadata as any)?.hidden || !!(metadata as any)?.formHidden;\n if ('visible' in component) {\n try { component.visible = !isHidden; } catch {}\n }\n const hostEl: HTMLElement | undefined = (component as any)?.elementRef?.nativeElement;\n if (hostEl) {\n hostEl.style.display = isHidden ? 'none' : '';\n hostEl.setAttribute('aria-hidden', String(isHidden));\n }\n } catch {}\n }\n\n private buildCurrentConfigSnapshot(): FormConfig {\n const metadata = this.instance?.currentConfig.fieldMetadata ?? [];\n return {\n fieldMetadata: deepClone(metadata),\n sections: this.instance?.currentConfig.sections\n ? deepClone(this.instance.currentConfig.sections)\n : [],\n } as FormConfig;\n }\n\n private normalizeActions(source?: FormActionsLayout | null): FormActionsLayout {\n const base = deepClone(DEFAULT_ACTIONS);\n if (!source) {\n return base;\n }\n\n return {\n submit: mergeAction(base.submit, source.submit),\n cancel: mergeAction(base.cancel, source.cancel),\n reset: mergeAction(base.reset, source.reset),\n custom: source.custom ? source.custom.map(makeAction) : base.custom,\n position: source.position ?? base.position,\n orientation: source.orientation ?? base.orientation,\n spacing: source.spacing ?? base.spacing,\n sticky: source.sticky ?? base.sticky,\n placement: source.placement ?? base.placement,\n mobile: source.mobile ?? base.mobile,\n containerClassName: source.containerClassName ?? base.containerClassName,\n containerStyles: source.containerStyles ?? base.containerStyles,\n showSaveButton: source.showSaveButton ?? base.showSaveButton,\n submitButtonLabel: source.submitButtonLabel ?? base.submitButtonLabel,\n showCancelButton: source.showCancelButton ?? base.showCancelButton,\n cancelButtonLabel: source.cancelButtonLabel ?? base.cancelButtonLabel,\n showResetButton: source.showResetButton ?? base.showResetButton,\n resetButtonLabel: source.resetButtonLabel ?? base.resetButtonLabel,\n };\n }\n}\n\nconst DEFAULT_ACTIONS: FormActionsLayout = {\n submit: makeAction({ id: 'submit', label: 'Salvar', visible: true, type: 'submit', color: 'primary' }),\n cancel: makeAction({ id: 'cancel', label: 'Cancelar', visible: false, type: 'button' }),\n reset: makeAction({ id: 'reset', label: 'Restaurar', visible: true, type: 'reset' }),\n custom: [],\n position: 'right',\n orientation: 'horizontal',\n spacing: 'normal',\n};\n\nfunction makeAction(action: Partial<FormActionButton>): FormActionButton {\n return {\n id: action.id ?? 'action',\n label: action.label ?? 'Ação',\n visible: action.visible !== false,\n type: action.type ?? 'button',\n color: action.color,\n disabled: action.disabled,\n icon: action.icon,\n action: action.action,\n tooltip: action.tooltip,\n variant: action.variant,\n size: action.size,\n loading: action.loading,\n shortcut: action.shortcut,\n };\n}\n\nfunction mergeAction(base: FormActionButton, override?: FormActionButton): FormActionButton {\n if (!override) {\n return base;\n }\n return {\n ...base,\n ...override,\n visible: override.visible !== undefined ? override.visible : base.visible,\n };\n}\n\nconst DEFAULT_SELECTOR_TO_CONTROL_TYPE: Record<string, FieldControlType> = {\n 'pdx-text-input': FieldControlType.INPUT,\n 'pdx-material-textarea': FieldControlType.TEXTAREA,\n 'pdx-number-input': FieldControlType.NUMERIC_TEXT_BOX,\n 'pdx-material-currency': FieldControlType.CURRENCY_INPUT,\n 'pdx-material-datepicker': FieldControlType.DATE_PICKER,\n 'pdx-material-date-range': FieldControlType.DATE_RANGE,\n 'pdx-material-timepicker': FieldControlType.TIME_PICKER,\n 'pdx-material-colorpicker': FieldControlType.COLOR_PICKER,\n 'pdx-material-select': FieldControlType.SELECT,\n 'pdx-material-autocomplete': FieldControlType.AUTO_COMPLETE,\n 'pdx-material-checkbox-group': FieldControlType.CHECKBOX,\n 'pdx-material-radio-group': FieldControlType.RADIO,\n 'pdx-material-slide-toggle': FieldControlType.TOGGLE,\n 'pdx-material-slider': FieldControlType.SLIDER,\n 'pdx-material-range-slider': FieldControlType.RANGE_SLIDER,\n 'pdx-material-file-upload': FieldControlType.FILE_UPLOAD,\n};\n\nconst DEFAULT_CONSTRUCTOR_TO_CONTROL_TYPE: Record<string, FieldControlType> = {\n TextInput: FieldControlType.INPUT,\n Textarea: FieldControlType.TEXTAREA,\n NumberInput: FieldControlType.NUMERIC_TEXT_BOX,\n Currency: FieldControlType.CURRENCY_INPUT,\n DatePicker: FieldControlType.DATE_PICKER,\n DateRange: FieldControlType.DATE_RANGE,\n TimePicker: FieldControlType.TIME_PICKER,\n ColorPicker: FieldControlType.COLOR_PICKER,\n SelectComponent: FieldControlType.SELECT,\n Autocomplete: FieldControlType.AUTO_COMPLETE,\n CheckboxGroup: FieldControlType.CHECKBOX,\n RadioGroup: FieldControlType.RADIO,\n SlideToggle: FieldControlType.TOGGLE,\n SliderComponent: FieldControlType.SLIDER,\n RangeSlider: FieldControlType.RANGE_SLIDER,\n FileUpload: FieldControlType.FILE_UPLOAD,\n};\n","<div class=\"pdx-manual-form\">\n @if (showHeader()) {\n <praxis-manual-form-header\n [instance]=\"instance\"\n [title]=\"formTitle()\"\n [description]=\"formDescription()\"\n [editModeEnabled]=\"editModeEnabled()\"\n (editForm)=\"openFormEditor()\"\n (save)=\"handleSave()\"\n (reset)=\"handleReset()\"\n ></praxis-manual-form-header>\n }\n\n @if (isHostTyped()) {\n <div class=\"pdx-manual-form__form\" (submit)=\"handleSubmit(); $event.preventDefault()\">\n <ng-content></ng-content>\n </div>\n } @else {\n <form class=\"pdx-manual-form__form\" [formGroup]=\"formGroup\" (submit)=\"handleSubmit(); $event.preventDefault()\">\n <ng-content></ng-content>\n </form>\n }\n\n @if (showActions() && resolvedActions) {\n <praxis-manual-form-actions\n [actions]=\"resolvedActions\"\n (actionClick)=\"handleAction($event)\"\n ></praxis-manual-form-actions>\n }\n</div>\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { SETTINGS_PANEL_DATA, SETTINGS_PANEL_REF, SettingsPanelRef } from '@praxisui/settings-panel';\nimport { ManualFormInstance } from '../../stores/manual-form-instance';\nimport { FieldMetadata } from '@praxisui/core';\nimport { BehaviorSubject } from 'rxjs';\n\ninterface PanelInputs {\n instance: ManualFormInstance;\n}\n\n@Component({\n selector: 'praxis-manual-form-config-editor',\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n <div class=\"mf-editor\">\n <div class=\"mf-editor__toolbar\">\n <label><input type=\"checkbox\" [(ngModel)]=\"onlyHidden\" (change)=\"applyFilter()\" /> Mostrar apenas ocultos</label>\n <div class=\"spacer\"></div>\n <button type=\"button\" (click)=\"close()\">Fechar</button>\n </div>\n\n <div class=\"mf-editor__list\">\n <div class=\"mf-editor__row mf-editor__row--head\">\n <div class=\"col col--name\">Campo</div>\n <div class=\"col col--label\">Rótulo</div>\n <div class=\"col col--type\">Tipo</div>\n <div class=\"col col--vis\">Visível</div>\n <div class=\"col col--req\">Obrigatório</div>\n <div class=\"col col--ro\">Som. leitura</div>\n <div class=\"col col--dis\">Desabilitado</div>\n </div>\n\n <div class=\"mf-editor__row\" *ngFor=\"let f of filtered\">\n <div class=\"col col--name\"><code>{{ f.name }}</code></div>\n <div class=\"col col--label\">{{ f.label || f.name }}</div>\n <div class=\"col col--type\">{{ f.controlType }}</div>\n <div class=\"col col--vis\">\n <label class=\"toggle\">\n <input type=\"checkbox\" [checked]=\"!f.hidden\" (change)=\"toggleVisibility(f, $any($event.target).checked)\" />\n <span>{{ f.hidden ? 'Oculto' : 'Visível' }}</span>\n </label>\n </div>\n <div class=\"col col--req\">\n <label class=\"toggle\">\n <input type=\"checkbox\" [checked]=\"!!f.required\" (change)=\"toggleRequired(f, $any($event.target).checked)\" />\n <span>{{ f.required ? 'Sim' : 'Não' }}</span>\n </label>\n </div>\n <div class=\"col col--ro\">\n <label class=\"toggle\">\n <input type=\"checkbox\" [checked]=\"!!f.readOnly\" (change)=\"toggleReadOnly(f, $any($event.target).checked)\" />\n <span>{{ f.readOnly ? 'Sim' : 'Não' }}</span>\n </label>\n </div>\n <div class=\"col col--dis\">\n <label class=\"toggle\">\n <input type=\"checkbox\" [checked]=\"!!f.disabled\" (change)=\"toggleDisabled(f, $any($event.target).checked)\" />\n <span>{{ f.disabled ? 'Sim' : 'Não' }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n .mf-editor { display: grid; gap: 12px; padding: 12px; }\n .mf-editor__toolbar { display: flex; align-items: center; gap: 8px; }\n .mf-editor__toolbar .spacer { flex: 1; }\n .mf-editor__list { display: grid; gap: 6px; }\n .mf-editor__row { display: grid; grid-template-columns: 2fr 2fr 1fr 1fr 1fr 1fr 1fr; align-items: center; gap: 8px; padding: 8px 10px; border: 1px solid rgba(0,0,0,0.08); border-radius: 6px; }\n .mf-editor__row--head { font-weight: 600; background: rgba(0,0,0,0.04); }\n .col code { background: rgba(0,0,0,0.05); padding: 2px 6px; border-radius: 4px; }\n button { padding: 6px 10px; border: 1px solid rgba(0,0,0,0.12); background: white; border-radius: 4px; cursor: pointer; }\n .toggle { display: inline-flex; align-items: center; gap: 6px; }\n `,\n ],\n})\nexport class ManualFormConfigEditorComponent implements OnInit {\n readonly instance: ManualFormInstance;\n all: FieldMetadata[] = [];\n filtered: FieldMetadata[] = [];\n onlyHidden = false;\n // SettingsValueProvider observables\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n\n constructor(\n @Inject(SETTINGS_PANEL_DATA) inputs: PanelInputs,\n @Inject(SETTINGS_PANEL_REF) private ref: SettingsPanelRef,\n ) {\n this.instance = inputs.instance;\n }\n\n ngOnInit(): void {\n this.refresh();\n }\n\n close(): void { this.ref.close('cancel'); }\n\n applyFilter(): void {\n this.filtered = this.onlyHidden ? this.all.filter(f => !!f.hidden) : [...this.all];\n }\n\n toggleVisibility(field: FieldMetadata, checked?: boolean): void {\n const visible = !!checked; // checked === visible\n const toPatch = { hidden: !visible } as Partial<FieldMetadata>;\n try {\n this.instance.patchFieldMetadata(field.name, toPatch);\n this.instance.saveDraft();\n this.refresh();\n this.isDirty$.next(true);\n } catch {}\n }\n\n toggleRequired(field: FieldMetadata, checked?: boolean): void {\n const toPatch = { required: !!checked } as Partial<FieldMetadata>;\n try {\n this.instance.patchFieldMetadata(field.name, toPatch);\n this.instance.saveDraft();\n this.refresh();\n this.isDirty$.next(true);\n } catch {}\n }\n\n toggleReadOnly(field: FieldMetadata, checked?: boolean): void {\n const toPatch = { readOnly: !!checked } as Partial<FieldMetadata>;\n try {\n this.instance.patchFieldMetadata(field.name, toPatch);\n this.instance.saveDraft();\n this.refresh();\n this.isDirty$.next(true);\n } catch {}\n }\n\n toggleDisabled(field: FieldMetadata, checked?: boolean): void {\n const toPatch = { disabled: !!checked } as Partial<FieldMetadata>;\n try {\n this.instance.patchFieldMetadata(field.name, toPatch);\n this.instance.saveDraft();\n this.refresh();\n this.isDirty$.next(true);\n } catch {}\n }\n\n getSettingsValue(): any {\n return {\n fieldStates: (this.instance.currentConfig.fieldMetadata || []).map((f) => ({\n name: f.name,\n hidden: !!f.hidden,\n required: !!f.required,\n readOnly: !!f.readOnly,\n disabled: !!f.disabled,\n })),\n };\n }\n\n onSave(): any {\n const value = this.getSettingsValue();\n // Consider changes persisted via saveDraft; mark clean so buttons desativem se reabrir\n this.isDirty$.next(false);\n return value;\n }\n\n private refresh(): void {\n this.all = (this.instance.currentConfig.fieldMetadata || []).map(f => ({ ...f }));\n this.applyFilter();\n }\n}\n","import { Directive, Input, OnChanges, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport { ManualFormInstance } from '../stores/manual-form-instance';\nimport { FieldMetadata } from '@praxisui/core';\n\ninterface ManualFieldContext {\n $implicit: FieldMetadata | undefined;\n metadata: FieldMetadata | undefined;\n fieldName: string;\n}\n\n@Directive({\n selector: '[praxisManualField]',\n standalone: true,\n})\nexport class ManualFieldDirective implements OnChanges {\n @Input('praxisManualField') fieldName!: string;\n @Input('praxisManualFieldInstance') instance!: ManualFormInstance;\n\n constructor(\n private readonly templateRef: TemplateRef<ManualFieldContext>,\n private readonly viewContainer: ViewContainerRef,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('fieldName' in changes || 'instance' in changes) {\n this.render();\n }\n }\n\n private render(): void {\n this.viewContainer.clear();\n if (!this.instance || !this.fieldName) {\n return;\n }\n\n const metadata = this.instance.getFieldMetadata(this.fieldName);\n const context: ManualFieldContext = {\n $implicit: metadata,\n metadata,\n fieldName: this.fieldName,\n };\n this.viewContainer.createEmbeddedView(this.templateRef, context);\n }\n}\n\n","import { Directive, HostListener, Input, inject } from '@angular/core';\n\nimport { ManualFormComponent } from '../components/manual-form/manual-form.component';\n\n/**\n * Attach to any field inside <praxis-manual-form> to open the metadata editor\n * on double click, respecting the form's editModeEnabled state.\n *\n * Usage:\n * <pdx-text-input pdxManualEdit=\"nome\" ...></pdx-text-input>\n */\n@Directive({\n selector: '[pdxManualEdit]',\n standalone: true,\n})\nexport class ManualFieldEditorOnDblclickDirective {\n @Input('pdxManualEdit') fieldName!: string;\n\n private readonly manualForm = inject(ManualFormComponent, { optional: true });\n\n @HostListener('dblclick')\n onDblClick(): void {\n if (!this.fieldName) return;\n this.manualForm?.tryOpenFieldEditor(this.fieldName);\n }\n}\n\n","/*\n * Public API Surface of praxis-manual-form\n */\n\nexport * from './lib/models/manual-form.types';\nexport * from './lib/seeds/manual-form.seed';\nexport * from './lib/stores/manual-form-instance';\nexport * from './lib/components/manual-form-header/manual-form-header.component';\nexport * from './lib/components/manual-form-actions/manual-form-actions.component';\nexport * from './lib/components/manual-form/manual-form.component';\nexport * from './lib/components/manual-form-config-editor/manual-form-config-editor.component';\nexport * from './lib/directives/manual-field.directive';\nexport * from './lib/directives/manual-field-editor-on-dblclick.directive';\nexport * from './lib/services/manual-field-metadata-bridge.service';\nexport * from './lib/tokens/manual-form.tokens';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -186,6 +186,8 @@ declare class ManualFormComponent implements AfterContentInit, OnDestroy {
|
|
|
186
186
|
handleAction(actionId: string): void;
|
|
187
187
|
handleSubmit(): void;
|
|
188
188
|
handleSave(): void;
|
|
189
|
+
/** True when host applied [formGroup] directly on <praxis-manual-form>. */
|
|
190
|
+
isHostTyped(): boolean;
|
|
189
191
|
handleReset(): void;
|
|
190
192
|
/**
|
|
191
193
|
* Attempts to open the field metadata editor respecting the component's
|
|
@@ -211,7 +213,7 @@ declare class ManualFormComponent implements AfterContentInit, OnDestroy {
|
|
|
211
213
|
private buildCurrentConfigSnapshot;
|
|
212
214
|
private normalizeActions;
|
|
213
215
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManualFormComponent, never>;
|
|
214
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManualFormComponent, "praxis-manual-form", never, { "formId": { "alias": "formId"; "required": true; "isSignal": true; }; "formTitle": { "alias": "formTitle"; "required": false; "isSignal": true; }; "formDescription": { "alias": "formDescription"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "enableAutoSave": { "alias": "enableAutoSave"; "required": false; "isSignal": true; }; "editModeEnabled": { "alias": "editModeEnabled"; "required": false; "isSignal": true; }; "persistenceOptions": { "alias": "persistenceOptions"; "required": false; "isSignal": true; }; "usePathNames": { "alias": "usePathNames"; "required": false; "isSignal": true; }; "autoSaveDebounceMs": { "alias": "autoSaveDebounceMs"; "required": false; "isSignal": true; }; }, { "submitted": "submitted"; "saved": "saved"; "resetEvent": "reset"; "metadataChange": "metadataChange"; }, ["formControls"], ["*"], true, never>;
|
|
216
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManualFormComponent, "praxis-manual-form", never, { "formId": { "alias": "formId"; "required": true; "isSignal": true; }; "formTitle": { "alias": "formTitle"; "required": false; "isSignal": true; }; "formDescription": { "alias": "formDescription"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "enableAutoSave": { "alias": "enableAutoSave"; "required": false; "isSignal": true; }; "editModeEnabled": { "alias": "editModeEnabled"; "required": false; "isSignal": true; }; "persistenceOptions": { "alias": "persistenceOptions"; "required": false; "isSignal": true; }; "usePathNames": { "alias": "usePathNames"; "required": false; "isSignal": true; }; "autoSaveDebounceMs": { "alias": "autoSaveDebounceMs"; "required": false; "isSignal": true; }; }, { "submitted": "submitted"; "saved": "saved"; "resetEvent": "reset"; "metadataChange": "metadataChange"; }, ["formControls"], ["*", "*"], true, never>;
|
|
215
217
|
}
|
|
216
218
|
|
|
217
219
|
interface PanelInputs {
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/manual-form",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.30",
|
|
4
4
|
"description": "Manual form toolkit for Praxis UI: container, instance factory and editor bridge for @praxisui/* fields.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^20.1.0",
|
|
7
7
|
"@angular/core": "^20.1.0",
|
|
8
|
-
"@praxisui/core": "^1.0.0-beta.
|
|
9
|
-
"@praxisui/dynamic-fields": "^1.0.0-beta.
|
|
10
|
-
"@praxisui/settings-panel": "^1.0.0-beta.
|
|
11
|
-
"@praxisui/metadata-editor": "^1.0.0-beta.
|
|
8
|
+
"@praxisui/core": "^1.0.0-beta.30",
|
|
9
|
+
"@praxisui/dynamic-fields": "^1.0.0-beta.30",
|
|
10
|
+
"@praxisui/settings-panel": "^1.0.0-beta.30",
|
|
11
|
+
"@praxisui/metadata-editor": "^1.0.0-beta.30"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"tslib": "^2.3.0"
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|
|
21
21
|
"type": "git",
|
|
22
|
-
"url": "https://github.com/codexrodrigues/praxis"
|
|
22
|
+
"url": "https://github.com/codexrodrigues/praxis-ui-angular"
|
|
23
23
|
},
|
|
24
|
-
"homepage": "https://github.com/codexrodrigues/praxis#readme",
|
|
24
|
+
"homepage": "https://github.com/codexrodrigues/praxis-ui-angular#readme",
|
|
25
25
|
"bugs": {
|
|
26
|
-
"url": "https://github.com/codexrodrigues/praxis/issues"
|
|
26
|
+
"url": "https://github.com/codexrodrigues/praxis-ui-angular/issues"
|
|
27
27
|
},
|
|
28
28
|
"keywords": [
|
|
29
29
|
"angular",
|