@praxisui/expansion 1.0.0-beta.40 → 1.0.0-beta.42

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.
@@ -543,8 +543,8 @@ class PraxisExpansion {
543
543
  this.warnedMissingId = true;
544
544
  console.warn('[PraxisExpansion] expansionId is required for config persistence.');
545
545
  }
546
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: PraxisExpansion, deps: [], target: i0.ɵɵFactoryTarget.Component });
547
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: PraxisExpansion, isStandalone: true, selector: "praxis-expansion", inputs: { config: "config", expansionId: "expansionId", componentInstanceId: "componentInstanceId", context: "context", strictValidation: "strictValidation", editModeEnabled: "editModeEnabled", defaultOptions: "defaultOptions" }, outputs: { opened: "opened", closed: "closed", expandedChange: "expandedChange", afterExpand: "afterExpand", afterCollapse: "afterCollapse", destroyed: "destroyed", widgetEvent: "widgetEvent" }, viewQueries: [{ propertyName: "accordionRef", first: true, predicate: ["accordion"], descendants: true }, { propertyName: "panels", predicate: ["panel"], descendants: true, read: MatExpansionPanel }], usesOnChanges: true, ngImport: i0, template: `
546
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisExpansion, deps: [], target: i0.ɵɵFactoryTarget.Component });
547
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: PraxisExpansion, isStandalone: true, selector: "praxis-expansion", inputs: { config: "config", expansionId: "expansionId", componentInstanceId: "componentInstanceId", context: "context", strictValidation: "strictValidation", editModeEnabled: "editModeEnabled", defaultOptions: "defaultOptions" }, outputs: { opened: "opened", closed: "closed", expandedChange: "expandedChange", afterExpand: "afterExpand", afterCollapse: "afterCollapse", destroyed: "destroyed", widgetEvent: "widgetEvent" }, viewQueries: [{ propertyName: "accordionRef", first: true, predicate: ["accordion"], descendants: true }, { propertyName: "panels", predicate: ["panel"], descendants: true, read: MatExpansionPanel }], usesOnChanges: true, ngImport: i0, template: `
548
548
  <div
549
549
  class="praxis-expansion-root"
550
550
  [class.density-compact]="config?.appearance?.density === 'compact'"
@@ -705,7 +705,7 @@ class PraxisExpansion {
705
705
  </button>
706
706
  `, isInline: true, styles: [":host{display:block;position:relative;color:var(--md-sys-color-on-surface)}.praxis-expansion-root{display:block;--p-exp-surface: var(--md-sys-color-surface);--p-exp-surface-container: var(--md-sys-color-surface-container);--p-exp-border: var(--md-sys-color-outline-variant);--p-exp-text: var(--md-sys-color-on-surface);--p-exp-text-muted: var(--md-sys-color-on-surface-variant);--p-exp-focus: var(--md-sys-color-primary);--p-exp-radius: 12px}.mat-expansion-panel{background:var(--p-exp-surface);border:1px solid var(--p-exp-border);border-radius:var(--p-exp-radius);overflow:hidden}.mat-expansion-panel:not(:last-child){margin-bottom:var(--p-exp-panel-gap, 12px)}.mat-expansion-panel-header{background:var(--p-exp-surface-container);color:var(--p-exp-text)}.mat-expansion-panel-header:focus-visible{outline:2px solid var(--p-exp-focus);outline-offset:-2px}.mat-expansion-panel-header-title{font-weight:600}.mat-expansion-panel-header-description{color:var(--p-exp-text-muted)}.mat-expansion-panel-body{padding:12px 16px 16px}.mat-action-row{border-top:1px solid var(--p-exp-border)}.density-compact .mat-expansion-panel-body{padding:8px 12px 12px}.density-compact .mat-expansion-panel-header{min-height:40px;padding:0 12px}.density-comfortable .mat-expansion-panel-body{padding:12px 16px 16px}.density-comfortable .mat-expansion-panel-header{min-height:48px;padding:0 16px}.density-spacious .mat-expansion-panel-body{padding:16px 20px 20px}.density-spacious .mat-expansion-panel-header{min-height:56px;padding:0 20px}.praxis-expansion-empty{display:flex;gap:8px;align-items:center;padding:8px 12px;color:var(--p-exp-text-muted)}.edit-fab{position:absolute;right:12px;bottom:12px;z-index:2}.expansion-ai-assistant{position:absolute;right:12px;bottom:72px;z-index:3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i2.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "directive", type: i2.MatExpansionPanelActionRow, selector: "mat-action-row" }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i2.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "directive", type: i2.MatExpansionPanelContent, selector: "ng-template[matExpansionPanelContent]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick"] }, { kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent"], exportAs: ["dynamicWidgetLoader"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PraxisAiAssistantComponent, selector: "praxis-ai-assistant", inputs: ["adapter", "riskPolicy", "allowManualPatchEdit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
707
707
  }
708
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: PraxisExpansion, decorators: [{
708
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisExpansion, decorators: [{
709
709
  type: Component,
710
710
  args: [{ selector: 'praxis-expansion', standalone: true, imports: [
711
711
  CommonModule,
@@ -1082,8 +1082,8 @@ class PraxisExpansionConfigEditor {
1082
1082
  const current = JSON.stringify(this.config || {});
1083
1083
  this.isDirty$.next(current !== this.initialJson);
1084
1084
  }
1085
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: PraxisExpansionConfigEditor, deps: [{ token: SETTINGS_PANEL_DATA }], target: i0.ɵɵFactoryTarget.Component });
1086
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: PraxisExpansionConfigEditor, isStandalone: true, selector: "praxis-expansion-config-editor", inputs: { config: "config", expansionId: "expansionId" }, usesOnChanges: true, ngImport: i0, template: `
1085
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisExpansionConfigEditor, deps: [{ token: SETTINGS_PANEL_DATA }], target: i0.ɵɵFactoryTarget.Component });
1086
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: PraxisExpansionConfigEditor, isStandalone: true, selector: "praxis-expansion-config-editor", inputs: { config: "config", expansionId: "expansionId" }, usesOnChanges: true, ngImport: i0, template: `
1087
1087
  <div class="pdx-expansion-editor">
1088
1088
  <section class="sec">
1089
1089
  <h4>Aparência</h4>
@@ -1322,7 +1322,7 @@ class PraxisExpansionConfigEditor {
1322
1322
  </div>
1323
1323
  `, isInline: true, styles: [":host{display:block;color:var(--md-sys-color-on-surface)}.pdx-expansion-editor{display:grid;gap:16px}.sec{border:1px solid var(--md-sys-color-outline-variant);padding:12px;border-radius:10px;background:var(--md-sys-color-surface-container-lowest);display:grid;gap:12px}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.row.wrap{flex-wrap:wrap}.panel-row{display:flex;gap:8px;align-items:center;width:100%}.grow{flex:1 1 auto}.grid{display:grid;gap:10px;align-items:center}.grid.two{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.full{width:100%}.error{color:var(--md-sys-color-error);font-size:12px}.pdx-expansion-editor .mat-mdc-form-field{width:100%;--mdc-outlined-text-field-container-height: 48px;--mdc-outlined-text-field-outline-color: var(--md-sys-color-outline-variant);--mdc-outlined-text-field-hover-outline-color: var(--md-sys-color-outline);--mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);--mdc-outlined-text-field-error-outline-color: var(--md-sys-color-error);--mdc-outlined-text-field-error-focus-outline-color: var(--md-sys-color-error);--mdc-outlined-text-field-error-hover-outline-color: var(--md-sys-color-error);--mdc-outlined-text-field-label-text-color: var(--md-sys-color-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);--mdc-outlined-text-field-supporting-text-color: var(--md-sys-color-on-surface-variant)}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;margin-right:-4px}.help-icon-button mat-icon{font-size:18px;width:18px;height:18px}.mat-mdc-form-field-icon-suffix{align-self:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1324
1324
  }
1325
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: PraxisExpansionConfigEditor, decorators: [{
1325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisExpansionConfigEditor, decorators: [{
1326
1326
  type: Component,
1327
1327
  args: [{ selector: 'praxis-expansion-config-editor', standalone: true, imports: [
1328
1328
  CommonModule,
@@ -1 +1 @@
1
- {"version":3,"file":"praxisui-expansion.mjs","sources":["../../../projects/praxis-expansion/src/lib/ai/expansion-ai-capabilities.ts","../../../projects/praxis-expansion/src/lib/ai/expansion-ai.adapter.ts","../../../projects/praxis-expansion/src/lib/praxis-expansion.ts","../../../projects/praxis-expansion/src/lib/praxis-expansion.metadata.ts","../../../projects/praxis-expansion/src/public-api.ts","../../../projects/praxis-expansion/src/praxisui-expansion.ts"],"sourcesContent":["/**\n * Capabilities catalog for Praxis Expansion (ExpansionMetadata).\n * Paths follow ExpansionMetadata shape (patch merged at config root).\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n accordion: true;\n panels: true;\n actions: true;\n meta: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nconst ENUMS: Record<string, Array<string | number>> = {\n density: ['compact', 'comfortable', 'spacious'],\n displayMode: ['default', 'flat'],\n togglePosition: ['before', 'after'],\n widgetId: ['praxis-dynamic-form', 'praxis-list', 'pdx-material-searchable-select', 'praxis-files-upload'],\n expansionTokenKey: ['header-background-color'],\n};\n\nconst TOKEN_CAPS: Capability[] = ENUMS.expansionTokenKey.map((t): Capability => ({\n path: `appearance.tokens.${t}`,\n category: 'appearance',\n valueKind: 'string',\n description: `Token ${t} (CSS color or var).`,\n safetyNotes: 'Aceita apenas hex color ou var(--token).',\n}));\n\nconst CAPS: Capability[] = [\n { path: 'appearance', category: 'appearance', valueKind: 'object', description: 'Appearance settings.' },\n { path: 'appearance.density', category: 'appearance', valueKind: 'enum', allowedValues: ENUMS.density, description: 'Density preset.' },\n { path: 'appearance.themeClass', category: 'appearance', valueKind: 'string', description: 'Theme CSS class for root.' },\n { path: 'appearance.customCss', category: 'appearance', valueKind: 'string', description: 'Custom CSS injected into component.', safetyNotes: 'CSS is injected as raw string.' },\n { path: 'appearance.tokens', category: 'appearance', valueKind: 'object', description: 'Token map for theme overrides.' },\n { path: 'appearance.tokens.[token]', category: 'appearance', valueKind: 'string', allowedValues: ENUMS.expansionTokenKey, description: 'Token value (CSS or var).', safetyNotes: 'Only keys supported by styleCss().' },\n ...TOKEN_CAPS,\n\n { path: 'accordion', category: 'accordion', valueKind: 'object', description: 'Accordion behavior settings.' },\n { path: 'accordion.multi', category: 'accordion', valueKind: 'boolean', description: 'Allow multiple panels open.' },\n { path: 'accordion.displayMode', category: 'accordion', valueKind: 'enum', allowedValues: ENUMS.displayMode, description: 'Accordion display mode.' },\n { path: 'accordion.togglePosition', category: 'accordion', valueKind: 'enum', allowedValues: ENUMS.togglePosition, description: 'Toggle icon position.' },\n { path: 'accordion.hideToggle', category: 'accordion', valueKind: 'boolean', description: 'Hide toggle icon.' },\n { path: 'accordion.id', category: 'accordion', valueKind: 'string', description: 'Accordion id.' },\n\n { path: 'panels', category: 'panels', valueKind: 'array', description: 'Panel list.' },\n { path: 'panels[]', category: 'panels', valueKind: 'object', description: 'Panel definition.' },\n { path: 'panels[].id', category: 'panels', valueKind: 'string', description: 'Panel id.' },\n { path: 'panels[].title', category: 'panels', valueKind: 'string', description: 'Panel title.' },\n { path: 'panels[].description', category: 'panels', valueKind: 'string', description: 'Panel description.' },\n { path: 'panels[].disabled', category: 'panels', valueKind: 'boolean', description: 'Disable panel.' },\n { path: 'panels[].expanded', category: 'panels', valueKind: 'boolean', description: 'Expanded state.' },\n { path: 'panels[].hideToggle', category: 'panels', valueKind: 'boolean', description: 'Hide toggle icon for panel.' },\n { path: 'panels[].collapsedHeight', category: 'panels', valueKind: 'string', description: 'Collapsed header height (e.g., 48px).' },\n { path: 'panels[].expandedHeight', category: 'panels', valueKind: 'string', description: 'Expanded header height (e.g., 64px).' },\n { path: 'panels[].content', category: 'panels', valueKind: 'array', description: 'Dynamic field metadata list (legacy).' },\n { path: 'panels[].content[]', category: 'panels', valueKind: 'object', description: 'Dynamic field metadata item.', safetyNotes: 'Use FieldMetadata base when no controlType catalog exists.' },\n { path: 'panels[].widgets', category: 'panels', valueKind: 'array', description: 'WidgetDefinition list for content.' },\n { path: 'panels[].widgets[]', category: 'panels', valueKind: 'object', description: 'WidgetDefinition item.' },\n { path: 'panels[].widgets[].id', category: 'panels', valueKind: 'enum', allowedValues: ENUMS.widgetId, description: 'Component registry id for widget.' },\n { path: 'panels[].widgets[].inputs', category: 'panels', valueKind: 'object', description: 'Inputs bound into the widget instance.' },\n { path: 'panels[].widgets[].outputs', category: 'panels', valueKind: 'object', description: 'Outputs mapped to actions.' },\n { path: 'panels[].widgets[].outputs.[outputName]', category: 'panels', valueKind: 'object', description: 'Output action mapping (ActionDefinition or \"emit\").' },\n { path: 'panels[].widgets[].bindingOrder', category: 'panels', valueKind: 'array', description: 'Explicit input binding order.' },\n { path: 'panels[].widgets[].bindingOrder[]', category: 'panels', valueKind: 'string', description: 'Input name applied first.' },\n { path: 'panels[].actionButtons', category: 'actions', valueKind: 'array', description: 'Action buttons at panel footer.' },\n { path: 'panels[].actionButtons[]', category: 'actions', valueKind: 'object', description: 'Action button definition.' },\n { path: 'panels[].actionButtons[].icon', category: 'actions', valueKind: 'string', description: 'Action icon.' },\n { path: 'panels[].actionButtons[].label', category: 'actions', valueKind: 'string', description: 'Action label.' },\n { path: 'panels[].actionButtons[].action', category: 'actions', valueKind: 'string', description: 'Action identifier payload.' },\n];\n\nexport const EXPANSION_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.1',\n enums: ENUMS,\n targets: [\n 'praxis-expansion',\n 'mat-accordion',\n 'expansion-panel',\n 'praxis-expansion-config-editor',\n ],\n notes: [\n 'panels[] should be merged by id or title to avoid replacing all panels.',\n 'appearance.customCss is injected into a <style> tag; avoid unsafe CSS from untrusted sources.',\n 'appearance.tokens supports limited keys used by styleCss().',\n 'panels[].widgets[].id must be a ComponentMetadataRegistry id.',\n 'If a field controlType lacks a dedicated catalog, treat it as FieldMetadata base.',\n ],\n capabilities: CAPS,\n};\n","import { BaseAiAdapter, Capability, PatchResult } from '@praxisui/ai';\nimport { deepMerge } from '@praxisui/core';\nimport { ExpansionMetadata, PraxisExpansion } from '../praxis-expansion';\nimport { EXPANSION_AI_CAPABILITIES } from './expansion-ai-capabilities';\n\nexport class ExpansionAiAdapter extends BaseAiAdapter<ExpansionMetadata> {\n componentName = 'Praxis Expansion';\n\n constructor(private expansion: PraxisExpansion) {\n super();\n }\n\n getCurrentConfig(): ExpansionMetadata {\n const current = this.expansion.config || {};\n return this.cloneConfig(current);\n }\n\n getCapabilities(): Capability[] {\n return EXPANSION_AI_CAPABILITIES.capabilities as unknown as Capability[];\n }\n\n override getRuntimeState(): Record<string, any> {\n const panels = this.expansion.config?.panels || [];\n return {\n panelsCount: panels.length,\n expandedCount: panels.filter((p) => p.expanded).length,\n multi: this.expansion.config?.accordion?.multi ?? false,\n };\n }\n\n createSnapshot(): ExpansionMetadata {\n return this.getCurrentConfig();\n }\n\n async restoreSnapshot(snapshot: ExpansionMetadata): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(this.cloneConfig(snapshot));\n }\n\n async applyPatch(patch: Partial<ExpansionMetadata>): Promise<PatchResult> {\n try {\n const current = this.getCurrentConfig();\n const next = this.smartMergeExpansionConfig(current, patch);\n this.applyConfig(next);\n return { success: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error applying patch';\n return { success: false, error: message };\n }\n }\n\n private applyConfig(config: ExpansionMetadata): void {\n const apply = (this.expansion as any).applyConfigFromAdapter;\n if (typeof apply === 'function') {\n apply.call(this.expansion, config);\n return;\n }\n this.expansion.config = config;\n }\n\n private smartMergeExpansionConfig(\n base: ExpansionMetadata,\n patch: Partial<ExpansionMetadata>,\n ): ExpansionMetadata {\n const result = deepMerge(base, patch);\n\n if (patch.panels && Array.isArray(patch.panels)) {\n const merged = this.mergeByKey(\n base.panels || [],\n patch.panels,\n (p) => p.id || p.title || '',\n );\n result.panels = merged;\n }\n\n return result;\n }\n\n private mergeByKey<T extends Record<string, any>>(\n baseArr: T[],\n patchArr: T[],\n keyFn: (item: T) => string,\n ): T[] {\n const merged = baseArr.map((orig) => {\n const key = keyFn(orig);\n const match = key ? patchArr.find((p) => keyFn(p) === key) : undefined;\n return match ? deepMerge(orig as any, match as any) : orig;\n });\n\n patchArr.forEach((item) => {\n const key = keyFn(item);\n if (!key || !baseArr.find((o) => keyFn(o) === key)) {\n merged.push(item);\n }\n });\n\n return merged;\n }\n\n private cloneConfig(config: ExpansionMetadata): ExpansionMetadata {\n try {\n return structuredClone(config);\n } catch {\n return JSON.parse(JSON.stringify(config));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ChangeDetectionStrategy, ViewChild, ViewChildren, QueryList, inject, DestroyRef, ChangeDetectorRef, Inject, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormGroup } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatAccordion, MatAccordionDisplayMode, MatAccordionTogglePosition, MatExpansionModule, MatExpansionPanel, MatExpansionPanelDefaultOptions, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DynamicFieldLoaderDirective } from '@praxisui/dynamic-fields';\nimport { ASYNC_CONFIG_STORAGE, AsyncConfigStorage, DynamicFormService, DynamicWidgetLoaderDirective, FieldMetadata, PraxisIconDirective, WidgetDefinition, ComponentKeyService } from '@praxisui/core';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\nimport { BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\nimport { ExpansionAiAdapter } from './ai/expansion-ai.adapter';\nimport { SETTINGS_PANEL_DATA, SettingsValueProvider } from '@praxisui/settings-panel';\n\nexport interface ExpansionMetadata {\n appearance?: {\n density?: 'compact' | 'comfortable' | 'spacious';\n themeClass?: string;\n customCss?: string;\n tokens?: { [key: string]: string };\n container?: ExpansionAppearanceContainer;\n header?: ExpansionAppearanceHeader;\n states?: ExpansionAppearanceStates;\n };\n accordion?: {\n multi?: boolean;\n displayMode?: MatAccordionDisplayMode;\n togglePosition?: MatAccordionTogglePosition;\n hideToggle?: boolean;\n id?: string;\n };\n panels?: PanelMetadata[];\n}\n\nexport interface ExpansionAppearanceContainer {\n background?: string;\n borderColor?: string;\n borderWidth?: string;\n borderStyle?: 'solid' | 'dashed' | 'dotted' | 'none';\n borderRadius?: string;\n shadow?: string;\n padding?: string;\n panelGap?: string;\n}\n\nexport interface ExpansionAppearanceHeader {\n background?: string;\n textColor?: string;\n titleColor?: string;\n descriptionColor?: string;\n height?: string;\n padding?: string;\n gap?: string;\n fontFamily?: string;\n titleSize?: string;\n titleWeight?: string;\n descriptionSize?: string;\n descriptionWeight?: string;\n toggleIconColor?: string;\n toggleIconSize?: string;\n}\n\nexport interface ExpansionAppearanceStates {\n hover?: {\n headerBackground?: string;\n textColor?: string;\n };\n expanded?: {\n headerBackground?: string;\n textColor?: string;\n accentBarColor?: string;\n };\n disabled?: {\n headerBackground?: string;\n textColor?: string;\n };\n}\n\nexport interface PanelMetadata {\n id?: string;\n title: string;\n description?: string;\n disabled?: boolean;\n expanded?: boolean;\n hideToggle?: boolean;\n collapsedHeight?: string;\n expandedHeight?: string;\n content?: FieldMetadata[];\n widgets?: WidgetDefinition[];\n actionButtons?: Array<{ label: string; icon?: string; action?: string }>;\n}\n\n@Component({\n selector: 'praxis-expansion',\n standalone: true,\n imports: [\n CommonModule,\n MatExpansionModule,\n MatIconModule,\n MatButtonModule,\n DynamicFieldLoaderDirective,\n DynamicWidgetLoaderDirective,\n PraxisIconDirective,\n PraxisAiAssistantComponent,\n ],\n template: `\n <div\n class=\"praxis-expansion-root\"\n [class.density-compact]=\"config?.appearance?.density === 'compact'\"\n [class.density-comfortable]=\"config?.appearance?.density === 'comfortable'\"\n [class.density-spacious]=\"config?.appearance?.density === 'spacious'\"\n [ngClass]=\"config?.appearance?.themeClass || ''\"\n [attr.data-expansion-id]=\"expansionId || 'default'\"\n >\n <style *ngIf=\"config?.appearance?.customCss\" [innerHTML]=\"config?.appearance?.customCss\"></style>\n <style *ngIf=\"styleCss() as s\" [innerHTML]=\"s\"></style>\n\n @if (editModeEnabled) {\n <div class=\"expansion-ai-assistant\">\n <praxis-ai-assistant [adapter]=\"aiAdapter\"></praxis-ai-assistant>\n </div>\n }\n\n @if (hasMultiple()) {\n <mat-accordion\n #accordion\n [id]=\"config?.accordion?.id || ''\"\n [multi]=\"config?.accordion?.multi || false\"\n [displayMode]=\"config?.accordion?.displayMode || 'default'\"\n [togglePosition]=\"config?.accordion?.togglePosition || 'after'\"\n [hideToggle]=\"config?.accordion?.hideToggle || false\"\n >\n @for (p of (config?.panels || []); let i = $index; track p.id ?? i) {\n @let id = panelDomId(p, i);\n <mat-expansion-panel\n #panel\n [id]=\"id\"\n [disabled]=\"p.disabled || false\"\n [expanded]=\"p.expanded || false\"\n [hideToggle]=\"p.hideToggle ?? config?.accordion?.hideToggle ?? false\"\n (opened)=\"emitOpened(p, i)\"\n (closed)=\"emitClosed(p, i)\"\n (expandedChange)=\"emitExpandedChange(p, i, $event)\"\n (afterExpand)=\"emitAfterExpand(p, i)\"\n (afterCollapse)=\"emitAfterCollapse(p, i)\"\n (destroyed)=\"emitDestroyed(p, i)\"\n >\n <mat-expansion-panel-header\n [collapsedHeight]=\"p.collapsedHeight || (defaultOptions?.collapsedHeight || injectedDefaults?.collapsedHeight) || ''\"\n [expandedHeight]=\"p.expandedHeight || (defaultOptions?.expandedHeight || injectedDefaults?.expandedHeight) || ''\"\n >\n <mat-panel-title>{{ p.title }}</mat-panel-title>\n <mat-panel-description *ngIf=\"p.description\">{{ p.description }}</mat-panel-description>\n </mat-expansion-panel-header>\n\n <ng-template matExpansionPanelContent>\n @if (p.content?.length) {\n <ng-container\n dynamicFieldLoader\n [fields]=\"p.content ?? []\"\n [formGroup]=\"panelFormFor(p, i)\"\n ></ng-container>\n }\n\n @if (p.widgets?.length) {\n @for (w of p.widgets; let wi = $index; track wi) {\n <ng-container\n [dynamicWidgetLoader]=\"w\"\n [context]=\"context\"\n [strictValidation]=\"strictValidation\"\n (widgetEvent)=\"onWidgetEvent({ panelId: p.id, panelIndex: i }, $event)\"\n ></ng-container>\n }\n }\n\n @if (p.actionButtons?.length) {\n <mat-action-row>\n @for (a of p.actionButtons; track a.label) {\n <button mat-stroked-button (click)=\"emitAction(p, i, a.action)\">\n <mat-icon *ngIf=\"a.icon\" [praxisIcon]=\"a.icon\"></mat-icon>\n {{ a.label }}\n </button>\n }\n </mat-action-row>\n }\n </ng-template>\n </mat-expansion-panel>\n }\n </mat-accordion>\n } @else {\n @if (single(); as p) {\n <mat-expansion-panel\n #panel\n [id]=\"panelDomId(p, 0)\"\n [disabled]=\"p.disabled || false\"\n [expanded]=\"p.expanded || false\"\n [hideToggle]=\"p.hideToggle ?? config?.accordion?.hideToggle ?? false\"\n (opened)=\"emitOpened(p, 0)\"\n (closed)=\"emitClosed(p, 0)\"\n (expandedChange)=\"emitExpandedChange(p, 0, $event)\"\n (afterExpand)=\"emitAfterExpand(p, 0)\"\n (afterCollapse)=\"emitAfterCollapse(p, 0)\"\n (destroyed)=\"emitDestroyed(p, 0)\"\n >\n <mat-expansion-panel-header\n [collapsedHeight]=\"p.collapsedHeight || (defaultOptions?.collapsedHeight || injectedDefaults?.collapsedHeight) || ''\"\n [expandedHeight]=\"p.expandedHeight || (defaultOptions?.expandedHeight || injectedDefaults?.expandedHeight) || ''\"\n >\n <mat-panel-title>{{ p.title }}</mat-panel-title>\n <mat-panel-description *ngIf=\"p.description\">{{ p.description }}</mat-panel-description>\n </mat-expansion-panel-header>\n\n <ng-template matExpansionPanelContent>\n @if (p.content?.length) {\n <ng-container\n dynamicFieldLoader\n [fields]=\"p.content ?? []\"\n [formGroup]=\"panelFormFor(p, 0)\"\n ></ng-container>\n }\n\n @if (p.widgets?.length) {\n @for (w of p.widgets; let wi = $index; track wi) {\n <ng-container\n [dynamicWidgetLoader]=\"w\"\n [context]=\"context\"\n [strictValidation]=\"strictValidation\"\n (widgetEvent)=\"onWidgetEvent({ panelId: p.id, panelIndex: 0 }, $event)\"\n ></ng-container>\n }\n }\n\n @if (p.actionButtons?.length) {\n <mat-action-row>\n @for (a of p.actionButtons; track a.label) {\n <button mat-stroked-button (click)=\"emitAction(p, 0, a.action)\">\n <mat-icon *ngIf=\"a.icon\" [praxisIcon]=\"a.icon\"></mat-icon>\n {{ a.label }}\n </button>\n }\n </mat-action-row>\n }\n </ng-template>\n </mat-expansion-panel>\n } @else {\n <div class=\"praxis-expansion-empty\">\n <span>Nenhum painel configurado</span>\n <button mat-stroked-button color=\"primary\" *ngIf=\"editModeEnabled\" (click)=\"openEditor()\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon> Configurar\n </button>\n </div>\n }\n }\n </div>\n <!-- Edit button -->\n <button\n *ngIf=\"editModeEnabled\"\n mat-fab\n class=\"edit-fab\"\n aria-label=\"Editar painéis\"\n (click)=\"openEditor()\"\n >\n <mat-icon fontIcon=\"edit\"></mat-icon>\n </button>\n `,\n styles: [\n `\n :host { display: block; position: relative; color: var(--md-sys-color-on-surface); }\n .praxis-expansion-root {\n display: block;\n --p-exp-surface: var(--md-sys-color-surface);\n --p-exp-surface-container: var(--md-sys-color-surface-container);\n --p-exp-border: var(--md-sys-color-outline-variant);\n --p-exp-text: var(--md-sys-color-on-surface);\n --p-exp-text-muted: var(--md-sys-color-on-surface-variant);\n --p-exp-focus: var(--md-sys-color-primary);\n --p-exp-radius: 12px;\n }\n .mat-expansion-panel {\n background: var(--p-exp-surface);\n border: 1px solid var(--p-exp-border);\n border-radius: var(--p-exp-radius);\n overflow: hidden;\n }\n .mat-expansion-panel:not(:last-child) { margin-bottom: var(--p-exp-panel-gap, 12px); }\n .mat-expansion-panel-header {\n background: var(--p-exp-surface-container);\n color: var(--p-exp-text);\n }\n .mat-expansion-panel-header:focus-visible {\n outline: 2px solid var(--p-exp-focus);\n outline-offset: -2px;\n }\n .mat-expansion-panel-header-title { font-weight: 600; }\n .mat-expansion-panel-header-description { color: var(--p-exp-text-muted); }\n .mat-expansion-panel-body { padding: 12px 16px 16px; }\n .mat-action-row { border-top: 1px solid var(--p-exp-border); }\n .density-compact .mat-expansion-panel-body { padding: 8px 12px 12px; }\n .density-compact .mat-expansion-panel-header { min-height: 40px; padding: 0 12px; }\n .density-comfortable .mat-expansion-panel-body { padding: 12px 16px 16px; }\n .density-comfortable .mat-expansion-panel-header { min-height: 48px; padding: 0 16px; }\n .density-spacious .mat-expansion-panel-body { padding: 16px 20px 20px; }\n .density-spacious .mat-expansion-panel-header { min-height: 56px; padding: 0 20px; }\n .praxis-expansion-empty {\n display: flex;\n gap: 8px;\n align-items: center;\n padding: 8px 12px;\n color: var(--p-exp-text-muted);\n }\n .edit-fab { position: absolute; right: 12px; bottom: 12px; z-index: 2; }\n .expansion-ai-assistant { position: absolute; right: 12px; bottom: 72px; z-index: 3; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisExpansion implements OnChanges, OnInit {\n @Input() config?: ExpansionMetadata | null;\n @Input({ required: true }) expansionId!: string;\n @Input() componentInstanceId?: string;\n @Input() context: Record<string, any> = {};\n @Input() strictValidation = true;\n @Input() editModeEnabled = false;\n @Input() defaultOptions?: MatExpansionPanelDefaultOptions;\n\n @Output() opened = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() closed = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() expandedChange = new EventEmitter<{ panelId?: string; panelIndex: number; expanded: boolean }>();\n @Output() afterExpand = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() afterCollapse = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() destroyed = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() widgetEvent = new EventEmitter<{ panelId?: string; panelIndex?: number; sourceId: string; output?: string; payload?: any }>();\n\n private readonly settings = inject(SettingsPanelService);\n private readonly storage = inject<AsyncConfigStorage>(ASYNC_CONFIG_STORAGE);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly dynamicForm = inject(DynamicFormService);\n private readonly componentKeys = inject(ComponentKeyService);\n private readonly route = (() => { try { return inject(ActivatedRoute); } catch { return undefined as ActivatedRoute | undefined; } })();\n private warnedMissingId = false;\n private readonly panelForms = new Map<string, FormGroup<Record<string, any>>>();\n public aiAdapter = new ExpansionAiAdapter(this);\n @ViewChild('accordion') accordionRef?: MatAccordion;\n @ViewChildren('panel', { read: MatExpansionPanel }) panels?: QueryList<MatExpansionPanel>;\n injectedDefaults = inject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, { optional: true }) as MatExpansionPanelDefaultOptions | null;\n\n hasMultiple = () => (this.config?.panels?.length || 0) > 1;\n single = () => (this.config?.panels && this.config.panels[0]) || null;\n\n ngOnInit(): void {\n const key = this.storageKey();\n if (!key) return;\n this.storage.loadConfig<ExpansionMetadata>(key).pipe(take(1)).subscribe((stored) => {\n if (!stored) return;\n this.config = stored;\n this.buildPanelForms();\n this.cdr.markForCheck();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('config' in changes) {\n this.buildPanelForms();\n this.persistConfig(this.config);\n }\n }\n\n styleCss(): string | null {\n const t = this.config?.appearance?.tokens;\n const appearance = this.config?.appearance;\n if (!t && !appearance?.container && !appearance?.header && !appearance?.states) return null;\n const scope = `.praxis-expansion-root[data-expansion-id=\"${(this.expansionId || 'default').replace(/\"/g, '')}\"]`;\n const rules: string[] = [];\n const push = (selector: string, decls: string[]) => {\n rules.push(`${scope} ${selector}{${decls.join('')}}`);\n };\n const isSafeColor = (value: string) =>\n /^#[0-9a-fA-F]{3,8}$/.test(value)\n || /^var\\(--[\\w-]+\\)$/.test(value)\n || /^(rgb|rgba|hsl|hsla)\\(/.test(value)\n || /^color-mix\\(/.test(value);\n\n if (t) {\n const panelBg = t['panel-background-color'];\n if (panelBg && isSafeColor(panelBg)) {\n push(' .mat-expansion-panel', [`background:${panelBg}!important;`]);\n }\n const panelBorder = t['panel-border-color'];\n if (panelBorder && isSafeColor(panelBorder)) {\n push(' .mat-expansion-panel', [`border-color:${panelBorder}!important;`]);\n }\n const headerBg = t['header-background-color'];\n if (headerBg && isSafeColor(headerBg)) {\n push(' .mat-expansion-panel-header', [`background-color:${headerBg}!important;`]);\n }\n const headerText = t['header-text-color'];\n if (headerText && isSafeColor(headerText)) {\n push(' .mat-expansion-panel-header', [`color:${headerText}!important;`]);\n }\n const descText = t['description-text-color'];\n if (descText && isSafeColor(descText)) {\n push(' .mat-expansion-panel-header-description', [`color:${descText}!important;`]);\n }\n const bodyText = t['body-text-color'];\n if (bodyText && isSafeColor(bodyText)) {\n push(' .mat-expansion-panel-body', [`color:${bodyText}!important;`]);\n }\n const actionBorder = t['action-row-border-color'];\n if (actionBorder && isSafeColor(actionBorder)) {\n push(' .mat-action-row', [`border-top-color:${actionBorder}!important;`]);\n }\n }\n if (appearance?.container) {\n const container = appearance.container;\n const decls: string[] = [];\n if (container.background) decls.push(`background:${container.background};`);\n if (container.borderColor) decls.push(`border-color:${container.borderColor};`);\n if (container.borderWidth) decls.push(`border-width:${container.borderWidth};`);\n if (container.borderStyle) decls.push(`border-style:${container.borderStyle};`);\n if (container.borderRadius) decls.push(`border-radius:${container.borderRadius};`);\n if (container.shadow) decls.push(`box-shadow:${container.shadow};`);\n if (container.padding) decls.push(`padding:${container.padding};`);\n if (decls.length) {\n push('', decls);\n }\n if (container.panelGap) {\n push(' .mat-expansion-panel:not(:last-child)', [`margin-bottom:${container.panelGap};`]);\n }\n }\n if (appearance?.header) {\n const header = appearance.header;\n const headerDecls: string[] = [];\n if (header.background) headerDecls.push(`background:${header.background}!important;`);\n if (header.textColor) headerDecls.push(`color:${header.textColor}!important;`);\n if (header.height) headerDecls.push(`min-height:${header.height};`);\n if (header.padding) headerDecls.push(`padding:${header.padding};`);\n if (header.gap) headerDecls.push(`column-gap:${header.gap};`);\n if (headerDecls.length) push(' .mat-expansion-panel-header', headerDecls);\n\n if (header.fontFamily) {\n push(' .mat-expansion-panel-header-title', [`font-family:${header.fontFamily};`]);\n push(' .mat-expansion-panel-header-description', [`font-family:${header.fontFamily};`]);\n }\n const titleDecls: string[] = [];\n if (header.titleColor) titleDecls.push(`color:${header.titleColor}!important;`);\n if (header.titleSize) titleDecls.push(`font-size:${header.titleSize};`);\n if (header.titleWeight) titleDecls.push(`font-weight:${header.titleWeight};`);\n if (titleDecls.length) push(' .mat-expansion-panel-header-title', titleDecls);\n\n const descDecls: string[] = [];\n if (header.descriptionColor) descDecls.push(`color:${header.descriptionColor}!important;`);\n if (header.descriptionSize) descDecls.push(`font-size:${header.descriptionSize};`);\n if (header.descriptionWeight) descDecls.push(`font-weight:${header.descriptionWeight};`);\n if (descDecls.length) push(' .mat-expansion-panel-header-description', descDecls);\n\n const iconDecls: string[] = [];\n if (header.toggleIconColor) iconDecls.push(`border-color:${header.toggleIconColor}!important;`);\n if (iconDecls.length) push(' .mat-expansion-indicator::after', iconDecls);\n if (header.toggleIconSize) {\n push(' .mat-expansion-indicator::after', [\n `width:${header.toggleIconSize};`,\n `height:${header.toggleIconSize};`,\n ]);\n }\n }\n if (appearance?.states) {\n const states = appearance.states;\n if (states.hover) {\n const decls: string[] = [];\n if (states.hover.headerBackground) decls.push(`background:${states.hover.headerBackground}!important;`);\n if (states.hover.textColor) decls.push(`color:${states.hover.textColor}!important;`);\n if (decls.length) push(' .mat-expansion-panel-header:hover', decls);\n }\n if (states.expanded) {\n const decls: string[] = [];\n if (states.expanded.headerBackground) decls.push(`background:${states.expanded.headerBackground}!important;`);\n if (states.expanded.textColor) decls.push(`color:${states.expanded.textColor}!important;`);\n if (decls.length) push(' .mat-expansion-panel.mat-expanded > .mat-expansion-panel-header', decls);\n if (states.expanded.accentBarColor) {\n push(' .mat-expansion-panel.mat-expanded > .mat-expansion-panel-header', [\n 'position:relative;',\n ]);\n push(' .mat-expansion-panel.mat-expanded > .mat-expansion-panel-header::before', [\n 'content:\"\";',\n 'position:absolute;',\n 'left:0;',\n 'top:0;',\n 'bottom:0;',\n 'width:4px;',\n `background:${states.expanded.accentBarColor};`,\n ]);\n }\n }\n if (states.disabled) {\n const decls: string[] = [];\n if (states.disabled.headerBackground) decls.push(`background:${states.disabled.headerBackground}!important;`);\n if (states.disabled.textColor) decls.push(`color:${states.disabled.textColor}!important;`);\n if (decls.length) push(' .mat-expansion-panel.mat-expansion-panel-disabled .mat-expansion-panel-header', decls);\n }\n }\n if (rules.length === 0) return null;\n return rules.join('\\n');\n }\n\n emitOpened(p: PanelMetadata, index: number): void {\n this.opened.emit({ panelId: p.id, panelIndex: index });\n }\n emitClosed(p: PanelMetadata, index: number): void {\n this.closed.emit({ panelId: p.id, panelIndex: index });\n }\n emitExpandedChange(p: PanelMetadata, index: number, expanded: boolean): void {\n this.expandedChange.emit({ panelId: p.id, panelIndex: index, expanded });\n }\n emitAfterExpand(p: PanelMetadata, index: number): void {\n this.afterExpand.emit({ panelId: p.id, panelIndex: index });\n }\n emitAfterCollapse(p: PanelMetadata, index: number): void {\n this.afterCollapse.emit({ panelId: p.id, panelIndex: index });\n }\n emitDestroyed(p: PanelMetadata, index: number): void {\n this.destroyed.emit({ panelId: p.id, panelIndex: index });\n }\n\n onWidgetEvent(loc: { panelId?: string; panelIndex?: number }, ev: { sourceId: string; output?: string; payload?: any }): void {\n this.widgetEvent.emit({ ...loc, ...ev });\n }\n\n // Public API to control panels\n open(indexOrId: number | string): void {\n const panel = this.findPanel(indexOrId);\n panel?.open();\n }\n close(indexOrId: number | string): void {\n const panel = this.findPanel(indexOrId);\n panel?.close();\n }\n toggle(indexOrId: number | string): void {\n const panel = this.findPanel(indexOrId);\n panel?.toggle();\n }\n openAll(): void { this.accordionRef?.openAll(); }\n closeAll(): void { this.accordionRef?.closeAll(); }\n\n private findPanel(indexOrId: number | string): MatExpansionPanel | undefined {\n if (!this.panels) return undefined;\n if (typeof indexOrId === 'number') return this.panels.get(indexOrId);\n const idx = (this.config?.panels || []).findIndex((p) => (p.id || this.panelDomId(p, 0)) === indexOrId);\n return idx >= 0 ? this.panels.get(idx) : undefined;\n }\n\n panelDomId(p: PanelMetadata | null, index: number): string {\n const base = p?.id || `${this.expansionId || 'exp'}-panel-${index + 1}`;\n return base.replace(/[^a-zA-Z0-9_-]/g, '-');\n }\n\n panelFormFor(panel: PanelMetadata, index: number): FormGroup<Record<string, any>> {\n const key = this.panelKey(panel, index);\n const existing = this.panelForms.get(key);\n if (existing) return existing;\n const fields = panel.content ?? [];\n const form = this.dynamicForm.createFormGroupFromMetadata(fields) as FormGroup<Record<string, any>>;\n this.panelForms.set(key, form);\n return form;\n }\n\n public applyConfigFromAdapter(next: ExpansionMetadata): void {\n this.config = next;\n this.buildPanelForms();\n const key = this.storageKey();\n if (key) {\n this.storage.saveConfig(key, this.config).pipe(take(1)).subscribe({ error: () => {} });\n }\n this.cdr.markForCheck();\n }\n\n openEditor(): void {\n const key = this.storageKey() || this.expansionId || 'default';\n const ref = this.settings.open({\n id: `praxis-expansion-editor:${key}`,\n title: 'Configurar Painéis',\n content: { component: PraxisExpansionConfigEditor, inputs: { config: this.config, expansionId: this.expansionId } },\n });\n const apply = (value: any) => {\n const nextCfg: ExpansionMetadata = value?.config || value;\n if (nextCfg) {\n this.config = { ...nextCfg };\n this.buildPanelForms();\n const storageKey = this.storageKey();\n if (storageKey) {\n this.storage.saveConfig(storageKey, this.config).pipe(take(1)).subscribe({ error: () => {} });\n }\n this.cdr.markForCheck();\n }\n };\n ref.applied$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(apply);\n ref.saved$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(apply);\n }\n\n private storageKey(): string | null {\n const id = this.componentKeyId();\n return id ? `expansion:${id}` : null;\n }\n\n private persistConfig(config?: ExpansionMetadata | null): void {\n if (!config) return;\n const key = this.storageKey();\n if (!key) return;\n this.storage.saveConfig(key, config).pipe(take(1)).subscribe({ error: () => {} });\n }\n\n emitAction(p: PanelMetadata, index: number, action?: string | undefined): void {\n this.widgetEvent.emit({ panelId: p.id, panelIndex: index, sourceId: 'praxis-expansion', output: 'action', payload: { action } });\n }\n\n private panelKey(panel: PanelMetadata, index: number): string {\n return panel.id ?? `panel-${index}`;\n }\n\n private buildPanelForms(): void {\n const previous = new Map(this.panelForms);\n this.panelForms.clear();\n const panels = this.config?.panels ?? [];\n panels.forEach((panel, index) => {\n const fields = panel.content ?? [];\n if (!fields.length) return;\n const key = this.panelKey(panel, index);\n const form = this.dynamicForm.createFormGroupFromMetadata(fields) as FormGroup<Record<string, any>>;\n const previousValues = previous.get(key)?.getRawValue?.() ?? {};\n form.patchValue(previousValues);\n this.panelForms.set(key, form);\n });\n }\n\n private componentKeyId(): string | null {\n const key = this.componentKeys.buildComponentId({\n componentType: 'praxis-expansion',\n componentId: this.expansionId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n if (!key) this.warnMissingId();\n return key;\n }\n\n private warnMissingId(): void {\n if (this.warnedMissingId) return;\n this.warnedMissingId = true;\n console.warn('[PraxisExpansion] expansionId is required for config persistence.');\n }\n}\n\n// Minimal editor component (standalone)\n@Component({\n selector: 'praxis-expansion-config-editor',\n standalone: true,\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatSlideToggleModule,\n MatTooltipModule,\n PraxisIconDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"pdx-expansion-editor\">\n <section class=\"sec\">\n <h4>Aparência</h4>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Classe de tema</mat-label>\n <input matInput [value]=\"config?.appearance?.themeClass || ''\" (input)=\"setAppearance('themeClass', $any($event.target).value)\" placeholder=\"ex.: expansion-accent\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Densidade</mat-label>\n <select matNativeControl [value]=\"config?.appearance?.density || ''\" (change)=\"setAppearance('density', $any($event.target).value || undefined)\">\n <option value=\"\">Padrão</option>\n <option value=\"compact\">Compacta</option>\n <option value=\"comfortable\">Confortável</option>\n <option value=\"spacious\">Espaçosa</option>\n </select>\n </mat-form-field>\n </div>\n\n <h5>Container</h5>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Background</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.background || ''\" (input)=\"setContainer('background', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Padding</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.padding || ''\" (input)=\"setContainer('padding', $any($event.target).value)\" placeholder=\"0\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor da borda</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.borderColor || ''\" (input)=\"setContainer('borderColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-outline-variant)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Espessura da borda</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.borderWidth || ''\" (input)=\"setContainer('borderWidth', $any($event.target).value)\" placeholder=\"1px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo da borda</mat-label>\n <select matNativeControl [value]=\"config?.appearance?.container?.borderStyle || ''\" (change)=\"setContainer('borderStyle', $any($event.target).value || undefined)\">\n <option value=\"\">Padrão</option>\n <option value=\"solid\">Solid</option>\n <option value=\"dashed\">Dashed</option>\n <option value=\"dotted\">Dotted</option>\n <option value=\"none\">None</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Raio da borda</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.borderRadius || ''\" (input)=\"setContainer('borderRadius', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Sombra</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.shadow || ''\" (input)=\"setContainer('shadow', $any($event.target).value)\" placeholder=\"var(--md-sys-color-shadow)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Espaço entre painéis</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.panelGap || ''\" (input)=\"setContainer('panelGap', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n </div>\n\n <h5>Cabeçalho</h5>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Background</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.background || ''\" (input)=\"setHeader('background', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface-container)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do texto</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.textColor || ''\" (input)=\"setHeader('textColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do título</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.titleColor || ''\" (input)=\"setHeader('titleColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor da descrição</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.descriptionColor || ''\" (input)=\"setHeader('descriptionColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface-variant)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Altura</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.height || ''\" (input)=\"setHeader('height', $any($event.target).value)\" placeholder=\"48px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Padding</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.padding || ''\" (input)=\"setHeader('padding', $any($event.target).value)\" placeholder=\"0 16px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Gap</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.gap || ''\" (input)=\"setHeader('gap', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Font family</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.fontFamily || ''\" (input)=\"setHeader('fontFamily', $any($event.target).value)\" placeholder=\"inherit\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do título</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.titleSize || ''\" (input)=\"setHeader('titleSize', $any($event.target).value)\" placeholder=\"14px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Peso do título</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.titleWeight || ''\" (input)=\"setHeader('titleWeight', $any($event.target).value)\" placeholder=\"600\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho da descrição</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.descriptionSize || ''\" (input)=\"setHeader('descriptionSize', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Peso da descrição</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.descriptionWeight || ''\" (input)=\"setHeader('descriptionWeight', $any($event.target).value)\" placeholder=\"400\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do ícone toggle</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.toggleIconColor || ''\" (input)=\"setHeader('toggleIconColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface-variant)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do ícone toggle</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.toggleIconSize || ''\" (input)=\"setHeader('toggleIconSize', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n </div>\n\n <h5>Estados</h5>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Hover - background</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.hover?.headerBackground || ''\" (input)=\"setState('hover', 'headerBackground', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface-container-high)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Hover - texto</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.hover?.textColor || ''\" (input)=\"setState('hover', 'textColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expandido - background</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.expanded?.headerBackground || ''\" (input)=\"setState('expanded', 'headerBackground', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface-container)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expandido - texto</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.expanded?.textColor || ''\" (input)=\"setState('expanded', 'textColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expandido - accent bar</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.expanded?.accentBarColor || ''\" (input)=\"setState('expanded', 'accentBarColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-primary)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Desabilitado - background</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.disabled?.headerBackground || ''\" (input)=\"setState('disabled', 'headerBackground', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface-container)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Desabilitado - texto</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.disabled?.textColor || ''\" (input)=\"setState('disabled', 'textColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface-variant)\" />\n </mat-form-field>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>CSS personalizado</mat-label>\n <textarea matInput rows=\"4\" [value]=\"config?.appearance?.customCss || ''\" (input)=\"setAppearance('customCss', $any($event.target).value)\" placeholder=\".praxis-expansion-root .mat-expansion-panel { }\"></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Tokens (JSON)</mat-label>\n <textarea matInput rows=\"4\" [value]=\"stringifyTokens(config?.appearance?.tokens)\" (input)=\"setTokens($any($event.target).value)\" placeholder='{\"header-background-color\":\"var(--md-sys-color-surface-container)\"}'></textarea>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Use tokens M3, por exemplo: var(--md-sys-color-primary)'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <div class=\"error\" *ngIf=\"tokensError\">{{ tokensError }}</div>\n </section>\n\n <section class=\"sec\">\n <h4>Configuração do acordeão</h4>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>ID</mat-label>\n <input matInput [value]=\"config?.accordion?.id || ''\" (input)=\"setAccordion('id', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Modo de exibição</mat-label>\n <select matNativeControl [value]=\"config?.accordion?.displayMode || 'default'\" (change)=\"setAccordion('displayMode', $any($event.target).value)\">\n <option value=\"default\">Padrão</option>\n <option value=\"flat\">Flat</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição do toggle</mat-label>\n <select matNativeControl [value]=\"config?.accordion?.togglePosition || 'after'\" (change)=\"setAccordion('togglePosition', $any($event.target).value)\">\n <option value=\"after\">Depois</option>\n <option value=\"before\">Antes</option>\n </select>\n </mat-form-field>\n <div class=\"row wrap\">\n <mat-slide-toggle [checked]=\"config?.accordion?.multi || false\" (change)=\"setAccordion('multi', $event.checked)\">Múltiplos abertos</mat-slide-toggle>\n <mat-slide-toggle [checked]=\"config?.accordion?.hideToggle || false\" (change)=\"setAccordion('hideToggle', $event.checked)\">Ocultar toggle</mat-slide-toggle>\n </div>\n </div>\n <div class=\"row\">\n <button mat-stroked-button color=\"primary\" (click)=\"addPanel()\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon>Adicionar painel</button>\n </div>\n </section>\n\n <section class=\"sec\" *ngFor=\"let p of (config?.panels || []); let i = index\">\n <div class=\"panel-row\">\n <strong>{{ p.title || ('Painel ' + (i + 1)) }}</strong>\n <span class=\"grow\"></span>\n <button mat-button (click)=\"move(i, -1)\" [disabled]=\"i===0\"><mat-icon [praxisIcon]=\"'arrow_upward'\"></mat-icon>Subir</button>\n <button mat-button (click)=\"move(i, 1)\" [disabled]=\"i>=(config!.panels!.length-1)\"><mat-icon [praxisIcon]=\"'arrow_downward'\"></mat-icon>Descer</button>\n <button mat-button color=\"warn\" (click)=\"removePanel(i)\"><mat-icon [praxisIcon]=\"'delete'\"></mat-icon>Remover</button>\n </div>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\"><mat-label>ID</mat-label>\n <input matInput [value]=\"p.id || ''\" (input)=\"setPanel(i, 'id', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Título</mat-label>\n <input matInput [value]=\"p.title || ''\" (input)=\"setPanel(i, 'title', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Descrição</mat-label>\n <input matInput [value]=\"p.description || ''\" (input)=\"setPanel(i, 'description', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Altura recolhida</mat-label>\n <input matInput placeholder=\"48px\" [value]=\"p.collapsedHeight || ''\" (input)=\"setPanel(i, 'collapsedHeight', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Altura expandida</mat-label>\n <input matInput placeholder=\"64px\" [value]=\"p.expandedHeight || ''\" (input)=\"setPanel(i, 'expandedHeight', $any($event.target).value)\" />\n </mat-form-field>\n <div class=\"row wrap\">\n <mat-slide-toggle [checked]=\"p.disabled || false\" (change)=\"setPanel(i, 'disabled', $event.checked)\">Desativado</mat-slide-toggle>\n <mat-slide-toggle [checked]=\"p.expanded || false\" (change)=\"setPanel(i, 'expanded', $event.checked)\">Expandido</mat-slide-toggle>\n <mat-slide-toggle [checked]=\"p.hideToggle || false\" (change)=\"setPanel(i, 'hideToggle', $event.checked)\">Ocultar toggle</mat-slide-toggle>\n </div>\n </div>\n </section>\n </div>\n `,\n styles: [\n `\n :host { display: block; color: var(--md-sys-color-on-surface); }\n .pdx-expansion-editor { display: grid; gap: 16px; }\n .sec { border: 1px solid var(--md-sys-color-outline-variant); padding: 12px; border-radius: 10px; background: var(--md-sys-color-surface-container-lowest); display: grid; gap: 12px; }\n .row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }\n .row.wrap { flex-wrap: wrap; }\n .panel-row { display: flex; gap: 8px; align-items: center; width: 100%; }\n .grow { flex: 1 1 auto; }\n .grid { display: grid; gap: 10px; align-items: center; }\n .grid.two { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }\n .full { width: 100%; }\n .error { color: var(--md-sys-color-error); font-size: 12px; }\n .pdx-expansion-editor .mat-mdc-form-field {\n width: 100%;\n --mdc-outlined-text-field-container-height: 48px;\n --mdc-outlined-text-field-outline-color: var(--md-sys-color-outline-variant);\n --mdc-outlined-text-field-hover-outline-color: var(--md-sys-color-outline);\n --mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);\n --mdc-outlined-text-field-error-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-focus-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-hover-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-label-text-color: var(--md-sys-color-on-surface-variant);\n --mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);\n --mdc-outlined-text-field-supporting-text-color: var(--md-sys-color-on-surface-variant);\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: -4px;\n }\n .help-icon-button mat-icon { font-size: 18px; width: 18px; height: 18px; }\n .mat-mdc-form-field-icon-suffix { align-self: center; }\n `,\n ],\n})\nexport class PraxisExpansionConfigEditor implements SettingsValueProvider, OnChanges {\n @Input() config: ExpansionMetadata | null | undefined;\n @Input() expansionId?: string | null;\n tokensError = '';\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n private initialJson = '';\n private hasInitializedSnapshot = false;\n\n constructor(@Inject(SETTINGS_PANEL_DATA) injected?: any) {\n const injectedConfig = injected?.config as ExpansionMetadata | undefined;\n if (injectedConfig) {\n this.config = injectedConfig;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config'] && this.config && !this.hasInitializedSnapshot) {\n this.captureInitialSnapshot(this.config);\n }\n }\n\n getSettingsValue(): any {\n return this.config;\n }\n\n reset(): void {\n if (!this.initialJson) return;\n try {\n this.config = JSON.parse(this.initialJson) as ExpansionMetadata;\n this.tokensError = '';\n this.isValid$.next(true);\n this.isDirty$.next(false);\n } catch {}\n }\n\n stringifyTokens(tokens?: Record<string, string>): string {\n if (!tokens || Object.keys(tokens).length === 0) return '';\n try {\n return JSON.stringify(tokens, null, 2);\n } catch {\n return '';\n }\n }\n\n setAppearance<K extends keyof NonNullable<ExpansionMetadata['appearance']>>(key: K, value: any): void {\n const ap = { ...(this.config?.appearance || {}) } as any;\n if (value === '' || value === null || typeof value === 'undefined') {\n delete ap[key];\n } else {\n ap[key] = value;\n }\n this.setConfig({ ...(this.config || {}), appearance: ap } as ExpansionMetadata);\n }\n\n setTokens(text: string): void {\n const raw = (text || '').trim();\n if (!raw) {\n this.tokensError = '';\n this.setAppearance('tokens', undefined);\n this.isValid$.next(true);\n return;\n }\n try {\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n this.tokensError = 'Formato inválido: use um objeto JSON.';\n this.isValid$.next(false);\n return;\n }\n this.tokensError = '';\n this.isValid$.next(true);\n this.setAppearance('tokens', parsed);\n } catch (err: any) {\n this.tokensError = err?.message || 'JSON inválido.';\n this.isValid$.next(false);\n }\n }\n\n setContainer<K extends keyof ExpansionAppearanceContainer>(key: K, value: any): void {\n const container = { ...(this.config?.appearance?.container || {}) } as any;\n if (value === '' || value === null || typeof value === 'undefined') {\n delete container[key];\n } else {\n container[key] = value;\n }\n const next = Object.keys(container).length ? container : undefined;\n this.setAppearance('container', next);\n }\n\n setHeader<K extends keyof ExpansionAppearanceHeader>(key: K, value: any): void {\n const header = { ...(this.config?.appearance?.header || {}) } as any;\n if (value === '' || value === null || typeof value === 'undefined') {\n delete header[key];\n } else {\n header[key] = value;\n }\n const next = Object.keys(header).length ? header : undefined;\n this.setAppearance('header', next);\n }\n\n setState<\n S extends keyof ExpansionAppearanceStates,\n K extends keyof NonNullable<ExpansionAppearanceStates[S]>\n >(state: S, key: K, value: any): void {\n const current = { ...(this.config?.appearance?.states || {}) } as any;\n const stateObj = { ...(current[state] || {}) } as any;\n if (value === '' || value === null || typeof value === 'undefined') {\n delete stateObj[key];\n } else {\n stateObj[key] = value;\n }\n if (Object.keys(stateObj).length) {\n current[state] = stateObj;\n } else {\n delete current[state];\n }\n const next = Object.keys(current).length ? current : undefined;\n this.setAppearance('states', next);\n }\n\n addPanel(): void {\n const next = { ...(this.config || {}), panels: [...(this.config?.panels || []), { title: 'Novo painel' } as PanelMetadata] };\n this.setConfig(next);\n }\n\n removePanel(index: number): void {\n if (!this.config?.panels) return;\n const next = { ...this.config, panels: this.config.panels.filter((_, i) => i !== index) };\n this.setConfig(next);\n }\n\n move(index: number, delta: number): void {\n if (!this.config?.panels) return;\n const arr = [...this.config.panels];\n const to = index + delta;\n if (to < 0 || to >= arr.length) return;\n const [m] = arr.splice(index, 1);\n arr.splice(to, 0, m);\n this.setConfig({ ...(this.config || {}), panels: arr });\n }\n\n setAccordion<K extends keyof NonNullable<ExpansionMetadata['accordion']>>(key: K, value: any): void {\n const acc = { ...(this.config?.accordion || {}) } as any;\n acc[key] = value;\n this.setConfig({ ...(this.config || {}), accordion: acc } as ExpansionMetadata);\n }\n\n setPanel(index: number, key: keyof PanelMetadata, value: any): void {\n if (!this.config?.panels) return;\n const arr = this.config.panels.map((p, i) => i === index ? ({ ...p, [key]: value } as PanelMetadata) : p);\n this.setConfig({ ...(this.config || {}), panels: arr });\n }\n\n private setConfig(next: ExpansionMetadata): void {\n this.config = next;\n if (!this.hasInitializedSnapshot) {\n this.captureInitialSnapshot(next);\n return;\n }\n this.updateDirtyState();\n }\n\n private captureInitialSnapshot(cfg: ExpansionMetadata): void {\n this.initialJson = JSON.stringify(cfg || {});\n this.hasInitializedSnapshot = true;\n this.isDirty$.next(false);\n }\n\n private updateDirtyState(): void {\n if (!this.hasInitializedSnapshot) return;\n const current = JSON.stringify(this.config || {});\n this.isDirty$.next(current !== this.initialJson);\n }\n}\n","import { ComponentDocMeta, ComponentMetadataRegistry } from '@praxisui/core';\nimport { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\nimport { MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatExpansionPanelDefaultOptions } from '@angular/material/expansion';\nimport { PraxisExpansion } from './praxis-expansion';\n\nexport const PRAXIS_EXPANSION_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-expansion',\n selector: 'praxis-expansion',\n component: PraxisExpansion,\n friendlyName: 'Praxis Expansion Panel',\n description: 'Acordeão/Painéis de expansão configuráveis por metadata, com aparência e tokens M3.',\n icon: 'unfold_more',\n inputs: [\n { name: 'config', type: 'ExpansionMetadata', label: 'Configuração', description: 'Configuração JSON (acordeão, aparência e painéis)' },\n { name: 'expansionId', type: 'string', label: 'ID', description: 'Identificador para persistência (obrigatório)' },\n { name: 'componentInstanceId', type: 'string', label: 'ID da instância', description: 'Identificador opcional para múltiplas instâncias na mesma rota' },\n { name: 'editModeEnabled', type: 'boolean', default: false, label: 'Modo de edição' },\n { name: 'context', type: 'Record<string, any>', label: 'Contexto' },\n { name: 'strictValidation', type: 'boolean', default: true },\n { name: 'defaultOptions', type: 'MatExpansionPanelDefaultOptions', label: 'Opções padrão do painel' },\n ],\n outputs: [\n { name: 'opened', type: '{ panelId?: string; panelIndex: number }', label: 'Painel aberto' },\n { name: 'closed', type: '{ panelId?: string; panelIndex: number }', label: 'Painel fechado' },\n { name: 'expandedChange', type: '{ panelId?: string; panelIndex: number; expanded: boolean }', label: 'Alterou expansão' },\n { name: 'afterExpand', type: '{ panelId?: string; panelIndex: number }', label: 'Após expandir' },\n { name: 'afterCollapse', type: '{ panelId?: string; panelIndex: number }', label: 'Após colapsar' },\n { name: 'destroyed', type: '{ panelId?: string; panelIndex: number }', label: 'Destruído' },\n { name: 'widgetEvent', type: '{ panelId?: string; panelIndex?: number; sourceId: string; output?: string; payload?: any }', label: 'Evento interno' },\n ],\n actions: [\n {\n id: 'panel-opened',\n label: 'Painel aberto',\n icon: 'unfold_more',\n description: 'Emite evento ao abrir um painel',\n emit: 'opened',\n payloadSchema: {\n type: 'object',\n properties: {\n panelId: { type: 'string', description: 'ID do painel' },\n panelIndex: { type: 'number', description: 'Índice do painel' },\n },\n required: ['panelIndex'],\n example: { panelIndex: 0 },\n },\n scope: 'context',\n },\n {\n id: 'panel-closed',\n label: 'Painel fechado',\n icon: 'unfold_less',\n description: 'Emite evento ao fechar um painel',\n emit: 'closed',\n payloadSchema: {\n type: 'object',\n properties: {\n panelId: { type: 'string', description: 'ID do painel' },\n panelIndex: { type: 'number', description: 'Índice do painel' },\n },\n required: ['panelIndex'],\n example: { panelIndex: 0 },\n },\n scope: 'context',\n },\n {\n id: 'panel-toggle',\n label: 'Alternar painel',\n icon: 'open_in_full',\n description: 'Emite evento ao alternar expansão do painel',\n emit: 'expandedChange',\n payloadSchema: {\n type: 'object',\n properties: {\n panelId: { type: 'string', description: 'ID do painel' },\n panelIndex: { type: 'number', description: 'Índice do painel' },\n expanded: { type: 'boolean', description: 'Estado expandido' },\n },\n required: ['panelIndex', 'expanded'],\n example: { panelIndex: 0, expanded: true },\n },\n scope: 'context',\n },\n ],\n tags: ['widget', 'expansion', 'accordion', 'configurable'],\n lib: '@praxisui/expansion',\n};\n\nexport function providePraxisExpansionMetadata(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (registry: ComponentMetadataRegistry) => () => {\n registry.register(PRAXIS_EXPANSION_COMPONENT_METADATA);\n },\n deps: [ComponentMetadataRegistry],\n } as Provider;\n}\n\nexport function providePraxisExpansionDefaults(opts: MatExpansionPanelDefaultOptions): Provider {\n return { provide: MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, useValue: opts } as Provider;\n}\n","/*\n * Public API Surface of praxis-expansion\n */\n\nexport * from './lib/praxis-expansion';\nexport * from './lib/praxis-expansion.metadata';\n// Editor é exportado pelo mesmo arquivo de componente (praxis-expansion.ts)\nexport * from './lib/ai/expansion-ai-capabilities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"praxisui-expansion.mjs","sources":["../../../projects/praxis-expansion/src/lib/ai/expansion-ai-capabilities.ts","../../../projects/praxis-expansion/src/lib/ai/expansion-ai.adapter.ts","../../../projects/praxis-expansion/src/lib/praxis-expansion.ts","../../../projects/praxis-expansion/src/lib/praxis-expansion.metadata.ts","../../../projects/praxis-expansion/src/public-api.ts","../../../projects/praxis-expansion/src/praxisui-expansion.ts"],"sourcesContent":["/**\n * Capabilities catalog for Praxis Expansion (ExpansionMetadata).\n * Paths follow ExpansionMetadata shape (patch merged at config root).\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n accordion: true;\n panels: true;\n actions: true;\n meta: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nconst ENUMS: Record<string, Array<string | number>> = {\n density: ['compact', 'comfortable', 'spacious'],\n displayMode: ['default', 'flat'],\n togglePosition: ['before', 'after'],\n widgetId: ['praxis-dynamic-form', 'praxis-list', 'pdx-material-searchable-select', 'praxis-files-upload'],\n expansionTokenKey: ['header-background-color'],\n};\n\nconst TOKEN_CAPS: Capability[] = ENUMS.expansionTokenKey.map((t): Capability => ({\n path: `appearance.tokens.${t}`,\n category: 'appearance',\n valueKind: 'string',\n description: `Token ${t} (CSS color or var).`,\n safetyNotes: 'Aceita apenas hex color ou var(--token).',\n}));\n\nconst CAPS: Capability[] = [\n { path: 'appearance', category: 'appearance', valueKind: 'object', description: 'Appearance settings.' },\n { path: 'appearance.density', category: 'appearance', valueKind: 'enum', allowedValues: ENUMS.density, description: 'Density preset.' },\n { path: 'appearance.themeClass', category: 'appearance', valueKind: 'string', description: 'Theme CSS class for root.' },\n { path: 'appearance.customCss', category: 'appearance', valueKind: 'string', description: 'Custom CSS injected into component.', safetyNotes: 'CSS is injected as raw string.' },\n { path: 'appearance.tokens', category: 'appearance', valueKind: 'object', description: 'Token map for theme overrides.' },\n { path: 'appearance.tokens.[token]', category: 'appearance', valueKind: 'string', allowedValues: ENUMS.expansionTokenKey, description: 'Token value (CSS or var).', safetyNotes: 'Only keys supported by styleCss().' },\n ...TOKEN_CAPS,\n\n { path: 'accordion', category: 'accordion', valueKind: 'object', description: 'Accordion behavior settings.' },\n { path: 'accordion.multi', category: 'accordion', valueKind: 'boolean', description: 'Allow multiple panels open.' },\n { path: 'accordion.displayMode', category: 'accordion', valueKind: 'enum', allowedValues: ENUMS.displayMode, description: 'Accordion display mode.' },\n { path: 'accordion.togglePosition', category: 'accordion', valueKind: 'enum', allowedValues: ENUMS.togglePosition, description: 'Toggle icon position.' },\n { path: 'accordion.hideToggle', category: 'accordion', valueKind: 'boolean', description: 'Hide toggle icon.' },\n { path: 'accordion.id', category: 'accordion', valueKind: 'string', description: 'Accordion id.' },\n\n { path: 'panels', category: 'panels', valueKind: 'array', description: 'Panel list.' },\n { path: 'panels[]', category: 'panels', valueKind: 'object', description: 'Panel definition.' },\n { path: 'panels[].id', category: 'panels', valueKind: 'string', description: 'Panel id.' },\n { path: 'panels[].title', category: 'panels', valueKind: 'string', description: 'Panel title.' },\n { path: 'panels[].description', category: 'panels', valueKind: 'string', description: 'Panel description.' },\n { path: 'panels[].disabled', category: 'panels', valueKind: 'boolean', description: 'Disable panel.' },\n { path: 'panels[].expanded', category: 'panels', valueKind: 'boolean', description: 'Expanded state.' },\n { path: 'panels[].hideToggle', category: 'panels', valueKind: 'boolean', description: 'Hide toggle icon for panel.' },\n { path: 'panels[].collapsedHeight', category: 'panels', valueKind: 'string', description: 'Collapsed header height (e.g., 48px).' },\n { path: 'panels[].expandedHeight', category: 'panels', valueKind: 'string', description: 'Expanded header height (e.g., 64px).' },\n { path: 'panels[].content', category: 'panels', valueKind: 'array', description: 'Dynamic field metadata list (legacy).' },\n { path: 'panels[].content[]', category: 'panels', valueKind: 'object', description: 'Dynamic field metadata item.', safetyNotes: 'Use FieldMetadata base when no controlType catalog exists.' },\n { path: 'panels[].widgets', category: 'panels', valueKind: 'array', description: 'WidgetDefinition list for content.' },\n { path: 'panels[].widgets[]', category: 'panels', valueKind: 'object', description: 'WidgetDefinition item.' },\n { path: 'panels[].widgets[].id', category: 'panels', valueKind: 'enum', allowedValues: ENUMS.widgetId, description: 'Component registry id for widget.' },\n { path: 'panels[].widgets[].inputs', category: 'panels', valueKind: 'object', description: 'Inputs bound into the widget instance.' },\n { path: 'panels[].widgets[].outputs', category: 'panels', valueKind: 'object', description: 'Outputs mapped to actions.' },\n { path: 'panels[].widgets[].outputs.[outputName]', category: 'panels', valueKind: 'object', description: 'Output action mapping (ActionDefinition or \"emit\").' },\n { path: 'panels[].widgets[].bindingOrder', category: 'panels', valueKind: 'array', description: 'Explicit input binding order.' },\n { path: 'panels[].widgets[].bindingOrder[]', category: 'panels', valueKind: 'string', description: 'Input name applied first.' },\n { path: 'panels[].actionButtons', category: 'actions', valueKind: 'array', description: 'Action buttons at panel footer.' },\n { path: 'panels[].actionButtons[]', category: 'actions', valueKind: 'object', description: 'Action button definition.' },\n { path: 'panels[].actionButtons[].icon', category: 'actions', valueKind: 'string', description: 'Action icon.' },\n { path: 'panels[].actionButtons[].label', category: 'actions', valueKind: 'string', description: 'Action label.' },\n { path: 'panels[].actionButtons[].action', category: 'actions', valueKind: 'string', description: 'Action identifier payload.' },\n];\n\nexport const EXPANSION_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.1',\n enums: ENUMS,\n targets: [\n 'praxis-expansion',\n 'mat-accordion',\n 'expansion-panel',\n 'praxis-expansion-config-editor',\n ],\n notes: [\n 'panels[] should be merged by id or title to avoid replacing all panels.',\n 'appearance.customCss is injected into a <style> tag; avoid unsafe CSS from untrusted sources.',\n 'appearance.tokens supports limited keys used by styleCss().',\n 'panels[].widgets[].id must be a ComponentMetadataRegistry id.',\n 'If a field controlType lacks a dedicated catalog, treat it as FieldMetadata base.',\n ],\n capabilities: CAPS,\n};\n","import { BaseAiAdapter, Capability, PatchResult } from '@praxisui/ai';\nimport { deepMerge } from '@praxisui/core';\nimport { ExpansionMetadata, PraxisExpansion } from '../praxis-expansion';\nimport { EXPANSION_AI_CAPABILITIES } from './expansion-ai-capabilities';\n\nexport class ExpansionAiAdapter extends BaseAiAdapter<ExpansionMetadata> {\n componentName = 'Praxis Expansion';\n\n constructor(private expansion: PraxisExpansion) {\n super();\n }\n\n getCurrentConfig(): ExpansionMetadata {\n const current = this.expansion.config || {};\n return this.cloneConfig(current);\n }\n\n getCapabilities(): Capability[] {\n return EXPANSION_AI_CAPABILITIES.capabilities as unknown as Capability[];\n }\n\n override getRuntimeState(): Record<string, any> {\n const panels = this.expansion.config?.panels || [];\n return {\n panelsCount: panels.length,\n expandedCount: panels.filter((p) => p.expanded).length,\n multi: this.expansion.config?.accordion?.multi ?? false,\n };\n }\n\n createSnapshot(): ExpansionMetadata {\n return this.getCurrentConfig();\n }\n\n async restoreSnapshot(snapshot: ExpansionMetadata): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(this.cloneConfig(snapshot));\n }\n\n async applyPatch(patch: Partial<ExpansionMetadata>): Promise<PatchResult> {\n try {\n const current = this.getCurrentConfig();\n const next = this.smartMergeExpansionConfig(current, patch);\n this.applyConfig(next);\n return { success: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error applying patch';\n return { success: false, error: message };\n }\n }\n\n private applyConfig(config: ExpansionMetadata): void {\n const apply = (this.expansion as any).applyConfigFromAdapter;\n if (typeof apply === 'function') {\n apply.call(this.expansion, config);\n return;\n }\n this.expansion.config = config;\n }\n\n private smartMergeExpansionConfig(\n base: ExpansionMetadata,\n patch: Partial<ExpansionMetadata>,\n ): ExpansionMetadata {\n const result = deepMerge(base, patch);\n\n if (patch.panels && Array.isArray(patch.panels)) {\n const merged = this.mergeByKey(\n base.panels || [],\n patch.panels,\n (p) => p.id || p.title || '',\n );\n result.panels = merged;\n }\n\n return result;\n }\n\n private mergeByKey<T extends Record<string, any>>(\n baseArr: T[],\n patchArr: T[],\n keyFn: (item: T) => string,\n ): T[] {\n const merged = baseArr.map((orig) => {\n const key = keyFn(orig);\n const match = key ? patchArr.find((p) => keyFn(p) === key) : undefined;\n return match ? deepMerge(orig as any, match as any) : orig;\n });\n\n patchArr.forEach((item) => {\n const key = keyFn(item);\n if (!key || !baseArr.find((o) => keyFn(o) === key)) {\n merged.push(item);\n }\n });\n\n return merged;\n }\n\n private cloneConfig(config: ExpansionMetadata): ExpansionMetadata {\n try {\n return structuredClone(config);\n } catch {\n return JSON.parse(JSON.stringify(config));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ChangeDetectionStrategy, ViewChild, ViewChildren, QueryList, inject, DestroyRef, ChangeDetectorRef, Inject, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormGroup } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatAccordion, MatAccordionDisplayMode, MatAccordionTogglePosition, MatExpansionModule, MatExpansionPanel, MatExpansionPanelDefaultOptions, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DynamicFieldLoaderDirective } from '@praxisui/dynamic-fields';\nimport { ASYNC_CONFIG_STORAGE, AsyncConfigStorage, DynamicFormService, DynamicWidgetLoaderDirective, FieldMetadata, PraxisIconDirective, WidgetDefinition, ComponentKeyService } from '@praxisui/core';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\nimport { BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\nimport { ExpansionAiAdapter } from './ai/expansion-ai.adapter';\nimport { SETTINGS_PANEL_DATA, SettingsValueProvider } from '@praxisui/settings-panel';\n\nexport interface ExpansionMetadata {\n appearance?: {\n density?: 'compact' | 'comfortable' | 'spacious';\n themeClass?: string;\n customCss?: string;\n tokens?: { [key: string]: string };\n container?: ExpansionAppearanceContainer;\n header?: ExpansionAppearanceHeader;\n states?: ExpansionAppearanceStates;\n };\n accordion?: {\n multi?: boolean;\n displayMode?: MatAccordionDisplayMode;\n togglePosition?: MatAccordionTogglePosition;\n hideToggle?: boolean;\n id?: string;\n };\n panels?: PanelMetadata[];\n}\n\nexport interface ExpansionAppearanceContainer {\n background?: string;\n borderColor?: string;\n borderWidth?: string;\n borderStyle?: 'solid' | 'dashed' | 'dotted' | 'none';\n borderRadius?: string;\n shadow?: string;\n padding?: string;\n panelGap?: string;\n}\n\nexport interface ExpansionAppearanceHeader {\n background?: string;\n textColor?: string;\n titleColor?: string;\n descriptionColor?: string;\n height?: string;\n padding?: string;\n gap?: string;\n fontFamily?: string;\n titleSize?: string;\n titleWeight?: string;\n descriptionSize?: string;\n descriptionWeight?: string;\n toggleIconColor?: string;\n toggleIconSize?: string;\n}\n\nexport interface ExpansionAppearanceStates {\n hover?: {\n headerBackground?: string;\n textColor?: string;\n };\n expanded?: {\n headerBackground?: string;\n textColor?: string;\n accentBarColor?: string;\n };\n disabled?: {\n headerBackground?: string;\n textColor?: string;\n };\n}\n\nexport interface PanelMetadata {\n id?: string;\n title: string;\n description?: string;\n disabled?: boolean;\n expanded?: boolean;\n hideToggle?: boolean;\n collapsedHeight?: string;\n expandedHeight?: string;\n content?: FieldMetadata[];\n widgets?: WidgetDefinition[];\n actionButtons?: Array<{ label: string; icon?: string; action?: string }>;\n}\n\n@Component({\n selector: 'praxis-expansion',\n standalone: true,\n imports: [\n CommonModule,\n MatExpansionModule,\n MatIconModule,\n MatButtonModule,\n DynamicFieldLoaderDirective,\n DynamicWidgetLoaderDirective,\n PraxisIconDirective,\n PraxisAiAssistantComponent,\n ],\n template: `\n <div\n class=\"praxis-expansion-root\"\n [class.density-compact]=\"config?.appearance?.density === 'compact'\"\n [class.density-comfortable]=\"config?.appearance?.density === 'comfortable'\"\n [class.density-spacious]=\"config?.appearance?.density === 'spacious'\"\n [ngClass]=\"config?.appearance?.themeClass || ''\"\n [attr.data-expansion-id]=\"expansionId || 'default'\"\n >\n <style *ngIf=\"config?.appearance?.customCss\" [innerHTML]=\"config?.appearance?.customCss\"></style>\n <style *ngIf=\"styleCss() as s\" [innerHTML]=\"s\"></style>\n\n @if (editModeEnabled) {\n <div class=\"expansion-ai-assistant\">\n <praxis-ai-assistant [adapter]=\"aiAdapter\"></praxis-ai-assistant>\n </div>\n }\n\n @if (hasMultiple()) {\n <mat-accordion\n #accordion\n [id]=\"config?.accordion?.id || ''\"\n [multi]=\"config?.accordion?.multi || false\"\n [displayMode]=\"config?.accordion?.displayMode || 'default'\"\n [togglePosition]=\"config?.accordion?.togglePosition || 'after'\"\n [hideToggle]=\"config?.accordion?.hideToggle || false\"\n >\n @for (p of (config?.panels || []); let i = $index; track p.id ?? i) {\n @let id = panelDomId(p, i);\n <mat-expansion-panel\n #panel\n [id]=\"id\"\n [disabled]=\"p.disabled || false\"\n [expanded]=\"p.expanded || false\"\n [hideToggle]=\"p.hideToggle ?? config?.accordion?.hideToggle ?? false\"\n (opened)=\"emitOpened(p, i)\"\n (closed)=\"emitClosed(p, i)\"\n (expandedChange)=\"emitExpandedChange(p, i, $event)\"\n (afterExpand)=\"emitAfterExpand(p, i)\"\n (afterCollapse)=\"emitAfterCollapse(p, i)\"\n (destroyed)=\"emitDestroyed(p, i)\"\n >\n <mat-expansion-panel-header\n [collapsedHeight]=\"p.collapsedHeight || (defaultOptions?.collapsedHeight || injectedDefaults?.collapsedHeight) || ''\"\n [expandedHeight]=\"p.expandedHeight || (defaultOptions?.expandedHeight || injectedDefaults?.expandedHeight) || ''\"\n >\n <mat-panel-title>{{ p.title }}</mat-panel-title>\n <mat-panel-description *ngIf=\"p.description\">{{ p.description }}</mat-panel-description>\n </mat-expansion-panel-header>\n\n <ng-template matExpansionPanelContent>\n @if (p.content?.length) {\n <ng-container\n dynamicFieldLoader\n [fields]=\"p.content ?? []\"\n [formGroup]=\"panelFormFor(p, i)\"\n ></ng-container>\n }\n\n @if (p.widgets?.length) {\n @for (w of p.widgets; let wi = $index; track wi) {\n <ng-container\n [dynamicWidgetLoader]=\"w\"\n [context]=\"context\"\n [strictValidation]=\"strictValidation\"\n (widgetEvent)=\"onWidgetEvent({ panelId: p.id, panelIndex: i }, $event)\"\n ></ng-container>\n }\n }\n\n @if (p.actionButtons?.length) {\n <mat-action-row>\n @for (a of p.actionButtons; track a.label) {\n <button mat-stroked-button (click)=\"emitAction(p, i, a.action)\">\n <mat-icon *ngIf=\"a.icon\" [praxisIcon]=\"a.icon\"></mat-icon>\n {{ a.label }}\n </button>\n }\n </mat-action-row>\n }\n </ng-template>\n </mat-expansion-panel>\n }\n </mat-accordion>\n } @else {\n @if (single(); as p) {\n <mat-expansion-panel\n #panel\n [id]=\"panelDomId(p, 0)\"\n [disabled]=\"p.disabled || false\"\n [expanded]=\"p.expanded || false\"\n [hideToggle]=\"p.hideToggle ?? config?.accordion?.hideToggle ?? false\"\n (opened)=\"emitOpened(p, 0)\"\n (closed)=\"emitClosed(p, 0)\"\n (expandedChange)=\"emitExpandedChange(p, 0, $event)\"\n (afterExpand)=\"emitAfterExpand(p, 0)\"\n (afterCollapse)=\"emitAfterCollapse(p, 0)\"\n (destroyed)=\"emitDestroyed(p, 0)\"\n >\n <mat-expansion-panel-header\n [collapsedHeight]=\"p.collapsedHeight || (defaultOptions?.collapsedHeight || injectedDefaults?.collapsedHeight) || ''\"\n [expandedHeight]=\"p.expandedHeight || (defaultOptions?.expandedHeight || injectedDefaults?.expandedHeight) || ''\"\n >\n <mat-panel-title>{{ p.title }}</mat-panel-title>\n <mat-panel-description *ngIf=\"p.description\">{{ p.description }}</mat-panel-description>\n </mat-expansion-panel-header>\n\n <ng-template matExpansionPanelContent>\n @if (p.content?.length) {\n <ng-container\n dynamicFieldLoader\n [fields]=\"p.content ?? []\"\n [formGroup]=\"panelFormFor(p, 0)\"\n ></ng-container>\n }\n\n @if (p.widgets?.length) {\n @for (w of p.widgets; let wi = $index; track wi) {\n <ng-container\n [dynamicWidgetLoader]=\"w\"\n [context]=\"context\"\n [strictValidation]=\"strictValidation\"\n (widgetEvent)=\"onWidgetEvent({ panelId: p.id, panelIndex: 0 }, $event)\"\n ></ng-container>\n }\n }\n\n @if (p.actionButtons?.length) {\n <mat-action-row>\n @for (a of p.actionButtons; track a.label) {\n <button mat-stroked-button (click)=\"emitAction(p, 0, a.action)\">\n <mat-icon *ngIf=\"a.icon\" [praxisIcon]=\"a.icon\"></mat-icon>\n {{ a.label }}\n </button>\n }\n </mat-action-row>\n }\n </ng-template>\n </mat-expansion-panel>\n } @else {\n <div class=\"praxis-expansion-empty\">\n <span>Nenhum painel configurado</span>\n <button mat-stroked-button color=\"primary\" *ngIf=\"editModeEnabled\" (click)=\"openEditor()\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon> Configurar\n </button>\n </div>\n }\n }\n </div>\n <!-- Edit button -->\n <button\n *ngIf=\"editModeEnabled\"\n mat-fab\n class=\"edit-fab\"\n aria-label=\"Editar painéis\"\n (click)=\"openEditor()\"\n >\n <mat-icon fontIcon=\"edit\"></mat-icon>\n </button>\n `,\n styles: [\n `\n :host { display: block; position: relative; color: var(--md-sys-color-on-surface); }\n .praxis-expansion-root {\n display: block;\n --p-exp-surface: var(--md-sys-color-surface);\n --p-exp-surface-container: var(--md-sys-color-surface-container);\n --p-exp-border: var(--md-sys-color-outline-variant);\n --p-exp-text: var(--md-sys-color-on-surface);\n --p-exp-text-muted: var(--md-sys-color-on-surface-variant);\n --p-exp-focus: var(--md-sys-color-primary);\n --p-exp-radius: 12px;\n }\n .mat-expansion-panel {\n background: var(--p-exp-surface);\n border: 1px solid var(--p-exp-border);\n border-radius: var(--p-exp-radius);\n overflow: hidden;\n }\n .mat-expansion-panel:not(:last-child) { margin-bottom: var(--p-exp-panel-gap, 12px); }\n .mat-expansion-panel-header {\n background: var(--p-exp-surface-container);\n color: var(--p-exp-text);\n }\n .mat-expansion-panel-header:focus-visible {\n outline: 2px solid var(--p-exp-focus);\n outline-offset: -2px;\n }\n .mat-expansion-panel-header-title { font-weight: 600; }\n .mat-expansion-panel-header-description { color: var(--p-exp-text-muted); }\n .mat-expansion-panel-body { padding: 12px 16px 16px; }\n .mat-action-row { border-top: 1px solid var(--p-exp-border); }\n .density-compact .mat-expansion-panel-body { padding: 8px 12px 12px; }\n .density-compact .mat-expansion-panel-header { min-height: 40px; padding: 0 12px; }\n .density-comfortable .mat-expansion-panel-body { padding: 12px 16px 16px; }\n .density-comfortable .mat-expansion-panel-header { min-height: 48px; padding: 0 16px; }\n .density-spacious .mat-expansion-panel-body { padding: 16px 20px 20px; }\n .density-spacious .mat-expansion-panel-header { min-height: 56px; padding: 0 20px; }\n .praxis-expansion-empty {\n display: flex;\n gap: 8px;\n align-items: center;\n padding: 8px 12px;\n color: var(--p-exp-text-muted);\n }\n .edit-fab { position: absolute; right: 12px; bottom: 12px; z-index: 2; }\n .expansion-ai-assistant { position: absolute; right: 12px; bottom: 72px; z-index: 3; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisExpansion implements OnChanges, OnInit {\n @Input() config?: ExpansionMetadata | null;\n @Input({ required: true }) expansionId!: string;\n @Input() componentInstanceId?: string;\n @Input() context: Record<string, any> = {};\n @Input() strictValidation = true;\n @Input() editModeEnabled = false;\n @Input() defaultOptions?: MatExpansionPanelDefaultOptions;\n\n @Output() opened = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() closed = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() expandedChange = new EventEmitter<{ panelId?: string; panelIndex: number; expanded: boolean }>();\n @Output() afterExpand = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() afterCollapse = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() destroyed = new EventEmitter<{ panelId?: string; panelIndex: number }>();\n @Output() widgetEvent = new EventEmitter<{ panelId?: string; panelIndex?: number; sourceId: string; output?: string; payload?: any }>();\n\n private readonly settings = inject(SettingsPanelService);\n private readonly storage = inject<AsyncConfigStorage>(ASYNC_CONFIG_STORAGE);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly dynamicForm = inject(DynamicFormService);\n private readonly componentKeys = inject(ComponentKeyService);\n private readonly route = (() => { try { return inject(ActivatedRoute); } catch { return undefined as ActivatedRoute | undefined; } })();\n private warnedMissingId = false;\n private readonly panelForms = new Map<string, FormGroup<Record<string, any>>>();\n public aiAdapter = new ExpansionAiAdapter(this);\n @ViewChild('accordion') accordionRef?: MatAccordion;\n @ViewChildren('panel', { read: MatExpansionPanel }) panels?: QueryList<MatExpansionPanel>;\n injectedDefaults = inject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, { optional: true }) as MatExpansionPanelDefaultOptions | null;\n\n hasMultiple = () => (this.config?.panels?.length || 0) > 1;\n single = () => (this.config?.panels && this.config.panels[0]) || null;\n\n ngOnInit(): void {\n const key = this.storageKey();\n if (!key) return;\n this.storage.loadConfig<ExpansionMetadata>(key).pipe(take(1)).subscribe((stored) => {\n if (!stored) return;\n this.config = stored;\n this.buildPanelForms();\n this.cdr.markForCheck();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('config' in changes) {\n this.buildPanelForms();\n this.persistConfig(this.config);\n }\n }\n\n styleCss(): string | null {\n const t = this.config?.appearance?.tokens;\n const appearance = this.config?.appearance;\n if (!t && !appearance?.container && !appearance?.header && !appearance?.states) return null;\n const scope = `.praxis-expansion-root[data-expansion-id=\"${(this.expansionId || 'default').replace(/\"/g, '')}\"]`;\n const rules: string[] = [];\n const push = (selector: string, decls: string[]) => {\n rules.push(`${scope} ${selector}{${decls.join('')}}`);\n };\n const isSafeColor = (value: string) =>\n /^#[0-9a-fA-F]{3,8}$/.test(value)\n || /^var\\(--[\\w-]+\\)$/.test(value)\n || /^(rgb|rgba|hsl|hsla)\\(/.test(value)\n || /^color-mix\\(/.test(value);\n\n if (t) {\n const panelBg = t['panel-background-color'];\n if (panelBg && isSafeColor(panelBg)) {\n push(' .mat-expansion-panel', [`background:${panelBg}!important;`]);\n }\n const panelBorder = t['panel-border-color'];\n if (panelBorder && isSafeColor(panelBorder)) {\n push(' .mat-expansion-panel', [`border-color:${panelBorder}!important;`]);\n }\n const headerBg = t['header-background-color'];\n if (headerBg && isSafeColor(headerBg)) {\n push(' .mat-expansion-panel-header', [`background-color:${headerBg}!important;`]);\n }\n const headerText = t['header-text-color'];\n if (headerText && isSafeColor(headerText)) {\n push(' .mat-expansion-panel-header', [`color:${headerText}!important;`]);\n }\n const descText = t['description-text-color'];\n if (descText && isSafeColor(descText)) {\n push(' .mat-expansion-panel-header-description', [`color:${descText}!important;`]);\n }\n const bodyText = t['body-text-color'];\n if (bodyText && isSafeColor(bodyText)) {\n push(' .mat-expansion-panel-body', [`color:${bodyText}!important;`]);\n }\n const actionBorder = t['action-row-border-color'];\n if (actionBorder && isSafeColor(actionBorder)) {\n push(' .mat-action-row', [`border-top-color:${actionBorder}!important;`]);\n }\n }\n if (appearance?.container) {\n const container = appearance.container;\n const decls: string[] = [];\n if (container.background) decls.push(`background:${container.background};`);\n if (container.borderColor) decls.push(`border-color:${container.borderColor};`);\n if (container.borderWidth) decls.push(`border-width:${container.borderWidth};`);\n if (container.borderStyle) decls.push(`border-style:${container.borderStyle};`);\n if (container.borderRadius) decls.push(`border-radius:${container.borderRadius};`);\n if (container.shadow) decls.push(`box-shadow:${container.shadow};`);\n if (container.padding) decls.push(`padding:${container.padding};`);\n if (decls.length) {\n push('', decls);\n }\n if (container.panelGap) {\n push(' .mat-expansion-panel:not(:last-child)', [`margin-bottom:${container.panelGap};`]);\n }\n }\n if (appearance?.header) {\n const header = appearance.header;\n const headerDecls: string[] = [];\n if (header.background) headerDecls.push(`background:${header.background}!important;`);\n if (header.textColor) headerDecls.push(`color:${header.textColor}!important;`);\n if (header.height) headerDecls.push(`min-height:${header.height};`);\n if (header.padding) headerDecls.push(`padding:${header.padding};`);\n if (header.gap) headerDecls.push(`column-gap:${header.gap};`);\n if (headerDecls.length) push(' .mat-expansion-panel-header', headerDecls);\n\n if (header.fontFamily) {\n push(' .mat-expansion-panel-header-title', [`font-family:${header.fontFamily};`]);\n push(' .mat-expansion-panel-header-description', [`font-family:${header.fontFamily};`]);\n }\n const titleDecls: string[] = [];\n if (header.titleColor) titleDecls.push(`color:${header.titleColor}!important;`);\n if (header.titleSize) titleDecls.push(`font-size:${header.titleSize};`);\n if (header.titleWeight) titleDecls.push(`font-weight:${header.titleWeight};`);\n if (titleDecls.length) push(' .mat-expansion-panel-header-title', titleDecls);\n\n const descDecls: string[] = [];\n if (header.descriptionColor) descDecls.push(`color:${header.descriptionColor}!important;`);\n if (header.descriptionSize) descDecls.push(`font-size:${header.descriptionSize};`);\n if (header.descriptionWeight) descDecls.push(`font-weight:${header.descriptionWeight};`);\n if (descDecls.length) push(' .mat-expansion-panel-header-description', descDecls);\n\n const iconDecls: string[] = [];\n if (header.toggleIconColor) iconDecls.push(`border-color:${header.toggleIconColor}!important;`);\n if (iconDecls.length) push(' .mat-expansion-indicator::after', iconDecls);\n if (header.toggleIconSize) {\n push(' .mat-expansion-indicator::after', [\n `width:${header.toggleIconSize};`,\n `height:${header.toggleIconSize};`,\n ]);\n }\n }\n if (appearance?.states) {\n const states = appearance.states;\n if (states.hover) {\n const decls: string[] = [];\n if (states.hover.headerBackground) decls.push(`background:${states.hover.headerBackground}!important;`);\n if (states.hover.textColor) decls.push(`color:${states.hover.textColor}!important;`);\n if (decls.length) push(' .mat-expansion-panel-header:hover', decls);\n }\n if (states.expanded) {\n const decls: string[] = [];\n if (states.expanded.headerBackground) decls.push(`background:${states.expanded.headerBackground}!important;`);\n if (states.expanded.textColor) decls.push(`color:${states.expanded.textColor}!important;`);\n if (decls.length) push(' .mat-expansion-panel.mat-expanded > .mat-expansion-panel-header', decls);\n if (states.expanded.accentBarColor) {\n push(' .mat-expansion-panel.mat-expanded > .mat-expansion-panel-header', [\n 'position:relative;',\n ]);\n push(' .mat-expansion-panel.mat-expanded > .mat-expansion-panel-header::before', [\n 'content:\"\";',\n 'position:absolute;',\n 'left:0;',\n 'top:0;',\n 'bottom:0;',\n 'width:4px;',\n `background:${states.expanded.accentBarColor};`,\n ]);\n }\n }\n if (states.disabled) {\n const decls: string[] = [];\n if (states.disabled.headerBackground) decls.push(`background:${states.disabled.headerBackground}!important;`);\n if (states.disabled.textColor) decls.push(`color:${states.disabled.textColor}!important;`);\n if (decls.length) push(' .mat-expansion-panel.mat-expansion-panel-disabled .mat-expansion-panel-header', decls);\n }\n }\n if (rules.length === 0) return null;\n return rules.join('\\n');\n }\n\n emitOpened(p: PanelMetadata, index: number): void {\n this.opened.emit({ panelId: p.id, panelIndex: index });\n }\n emitClosed(p: PanelMetadata, index: number): void {\n this.closed.emit({ panelId: p.id, panelIndex: index });\n }\n emitExpandedChange(p: PanelMetadata, index: number, expanded: boolean): void {\n this.expandedChange.emit({ panelId: p.id, panelIndex: index, expanded });\n }\n emitAfterExpand(p: PanelMetadata, index: number): void {\n this.afterExpand.emit({ panelId: p.id, panelIndex: index });\n }\n emitAfterCollapse(p: PanelMetadata, index: number): void {\n this.afterCollapse.emit({ panelId: p.id, panelIndex: index });\n }\n emitDestroyed(p: PanelMetadata, index: number): void {\n this.destroyed.emit({ panelId: p.id, panelIndex: index });\n }\n\n onWidgetEvent(loc: { panelId?: string; panelIndex?: number }, ev: { sourceId: string; output?: string; payload?: any }): void {\n this.widgetEvent.emit({ ...loc, ...ev });\n }\n\n // Public API to control panels\n open(indexOrId: number | string): void {\n const panel = this.findPanel(indexOrId);\n panel?.open();\n }\n close(indexOrId: number | string): void {\n const panel = this.findPanel(indexOrId);\n panel?.close();\n }\n toggle(indexOrId: number | string): void {\n const panel = this.findPanel(indexOrId);\n panel?.toggle();\n }\n openAll(): void { this.accordionRef?.openAll(); }\n closeAll(): void { this.accordionRef?.closeAll(); }\n\n private findPanel(indexOrId: number | string): MatExpansionPanel | undefined {\n if (!this.panels) return undefined;\n if (typeof indexOrId === 'number') return this.panels.get(indexOrId);\n const idx = (this.config?.panels || []).findIndex((p) => (p.id || this.panelDomId(p, 0)) === indexOrId);\n return idx >= 0 ? this.panels.get(idx) : undefined;\n }\n\n panelDomId(p: PanelMetadata | null, index: number): string {\n const base = p?.id || `${this.expansionId || 'exp'}-panel-${index + 1}`;\n return base.replace(/[^a-zA-Z0-9_-]/g, '-');\n }\n\n panelFormFor(panel: PanelMetadata, index: number): FormGroup<Record<string, any>> {\n const key = this.panelKey(panel, index);\n const existing = this.panelForms.get(key);\n if (existing) return existing;\n const fields = panel.content ?? [];\n const form = this.dynamicForm.createFormGroupFromMetadata(fields) as FormGroup<Record<string, any>>;\n this.panelForms.set(key, form);\n return form;\n }\n\n public applyConfigFromAdapter(next: ExpansionMetadata): void {\n this.config = next;\n this.buildPanelForms();\n const key = this.storageKey();\n if (key) {\n this.storage.saveConfig(key, this.config).pipe(take(1)).subscribe({ error: () => {} });\n }\n this.cdr.markForCheck();\n }\n\n openEditor(): void {\n const key = this.storageKey() || this.expansionId || 'default';\n const ref = this.settings.open({\n id: `praxis-expansion-editor:${key}`,\n title: 'Configurar Painéis',\n content: { component: PraxisExpansionConfigEditor, inputs: { config: this.config, expansionId: this.expansionId } },\n });\n const apply = (value: any) => {\n const nextCfg: ExpansionMetadata = value?.config || value;\n if (nextCfg) {\n this.config = { ...nextCfg };\n this.buildPanelForms();\n const storageKey = this.storageKey();\n if (storageKey) {\n this.storage.saveConfig(storageKey, this.config).pipe(take(1)).subscribe({ error: () => {} });\n }\n this.cdr.markForCheck();\n }\n };\n ref.applied$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(apply);\n ref.saved$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(apply);\n }\n\n private storageKey(): string | null {\n const id = this.componentKeyId();\n return id ? `expansion:${id}` : null;\n }\n\n private persistConfig(config?: ExpansionMetadata | null): void {\n if (!config) return;\n const key = this.storageKey();\n if (!key) return;\n this.storage.saveConfig(key, config).pipe(take(1)).subscribe({ error: () => {} });\n }\n\n emitAction(p: PanelMetadata, index: number, action?: string | undefined): void {\n this.widgetEvent.emit({ panelId: p.id, panelIndex: index, sourceId: 'praxis-expansion', output: 'action', payload: { action } });\n }\n\n private panelKey(panel: PanelMetadata, index: number): string {\n return panel.id ?? `panel-${index}`;\n }\n\n private buildPanelForms(): void {\n const previous = new Map(this.panelForms);\n this.panelForms.clear();\n const panels = this.config?.panels ?? [];\n panels.forEach((panel, index) => {\n const fields = panel.content ?? [];\n if (!fields.length) return;\n const key = this.panelKey(panel, index);\n const form = this.dynamicForm.createFormGroupFromMetadata(fields) as FormGroup<Record<string, any>>;\n const previousValues = previous.get(key)?.getRawValue?.() ?? {};\n form.patchValue(previousValues);\n this.panelForms.set(key, form);\n });\n }\n\n private componentKeyId(): string | null {\n const key = this.componentKeys.buildComponentId({\n componentType: 'praxis-expansion',\n componentId: this.expansionId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n if (!key) this.warnMissingId();\n return key;\n }\n\n private warnMissingId(): void {\n if (this.warnedMissingId) return;\n this.warnedMissingId = true;\n console.warn('[PraxisExpansion] expansionId is required for config persistence.');\n }\n}\n\n// Minimal editor component (standalone)\n@Component({\n selector: 'praxis-expansion-config-editor',\n standalone: true,\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatSlideToggleModule,\n MatTooltipModule,\n PraxisIconDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"pdx-expansion-editor\">\n <section class=\"sec\">\n <h4>Aparência</h4>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Classe de tema</mat-label>\n <input matInput [value]=\"config?.appearance?.themeClass || ''\" (input)=\"setAppearance('themeClass', $any($event.target).value)\" placeholder=\"ex.: expansion-accent\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Densidade</mat-label>\n <select matNativeControl [value]=\"config?.appearance?.density || ''\" (change)=\"setAppearance('density', $any($event.target).value || undefined)\">\n <option value=\"\">Padrão</option>\n <option value=\"compact\">Compacta</option>\n <option value=\"comfortable\">Confortável</option>\n <option value=\"spacious\">Espaçosa</option>\n </select>\n </mat-form-field>\n </div>\n\n <h5>Container</h5>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Background</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.background || ''\" (input)=\"setContainer('background', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Padding</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.padding || ''\" (input)=\"setContainer('padding', $any($event.target).value)\" placeholder=\"0\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor da borda</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.borderColor || ''\" (input)=\"setContainer('borderColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-outline-variant)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Espessura da borda</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.borderWidth || ''\" (input)=\"setContainer('borderWidth', $any($event.target).value)\" placeholder=\"1px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo da borda</mat-label>\n <select matNativeControl [value]=\"config?.appearance?.container?.borderStyle || ''\" (change)=\"setContainer('borderStyle', $any($event.target).value || undefined)\">\n <option value=\"\">Padrão</option>\n <option value=\"solid\">Solid</option>\n <option value=\"dashed\">Dashed</option>\n <option value=\"dotted\">Dotted</option>\n <option value=\"none\">None</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Raio da borda</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.borderRadius || ''\" (input)=\"setContainer('borderRadius', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Sombra</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.shadow || ''\" (input)=\"setContainer('shadow', $any($event.target).value)\" placeholder=\"var(--md-sys-color-shadow)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Espaço entre painéis</mat-label>\n <input matInput [value]=\"config?.appearance?.container?.panelGap || ''\" (input)=\"setContainer('panelGap', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n </div>\n\n <h5>Cabeçalho</h5>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Background</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.background || ''\" (input)=\"setHeader('background', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface-container)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do texto</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.textColor || ''\" (input)=\"setHeader('textColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do título</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.titleColor || ''\" (input)=\"setHeader('titleColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor da descrição</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.descriptionColor || ''\" (input)=\"setHeader('descriptionColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface-variant)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Altura</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.height || ''\" (input)=\"setHeader('height', $any($event.target).value)\" placeholder=\"48px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Padding</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.padding || ''\" (input)=\"setHeader('padding', $any($event.target).value)\" placeholder=\"0 16px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Gap</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.gap || ''\" (input)=\"setHeader('gap', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Font family</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.fontFamily || ''\" (input)=\"setHeader('fontFamily', $any($event.target).value)\" placeholder=\"inherit\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do título</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.titleSize || ''\" (input)=\"setHeader('titleSize', $any($event.target).value)\" placeholder=\"14px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Peso do título</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.titleWeight || ''\" (input)=\"setHeader('titleWeight', $any($event.target).value)\" placeholder=\"600\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho da descrição</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.descriptionSize || ''\" (input)=\"setHeader('descriptionSize', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Peso da descrição</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.descriptionWeight || ''\" (input)=\"setHeader('descriptionWeight', $any($event.target).value)\" placeholder=\"400\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do ícone toggle</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.toggleIconColor || ''\" (input)=\"setHeader('toggleIconColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface-variant)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do ícone toggle</mat-label>\n <input matInput [value]=\"config?.appearance?.header?.toggleIconSize || ''\" (input)=\"setHeader('toggleIconSize', $any($event.target).value)\" placeholder=\"12px\" />\n </mat-form-field>\n </div>\n\n <h5>Estados</h5>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Hover - background</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.hover?.headerBackground || ''\" (input)=\"setState('hover', 'headerBackground', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface-container-high)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Hover - texto</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.hover?.textColor || ''\" (input)=\"setState('hover', 'textColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expandido - background</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.expanded?.headerBackground || ''\" (input)=\"setState('expanded', 'headerBackground', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface-container)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expandido - texto</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.expanded?.textColor || ''\" (input)=\"setState('expanded', 'textColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expandido - accent bar</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.expanded?.accentBarColor || ''\" (input)=\"setState('expanded', 'accentBarColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-primary)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Desabilitado - background</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.disabled?.headerBackground || ''\" (input)=\"setState('disabled', 'headerBackground', $any($event.target).value)\" placeholder=\"var(--md-sys-color-surface-container)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Desabilitado - texto</mat-label>\n <input matInput [value]=\"config?.appearance?.states?.disabled?.textColor || ''\" (input)=\"setState('disabled', 'textColor', $any($event.target).value)\" placeholder=\"var(--md-sys-color-on-surface-variant)\" />\n </mat-form-field>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>CSS personalizado</mat-label>\n <textarea matInput rows=\"4\" [value]=\"config?.appearance?.customCss || ''\" (input)=\"setAppearance('customCss', $any($event.target).value)\" placeholder=\".praxis-expansion-root .mat-expansion-panel { }\"></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Tokens (JSON)</mat-label>\n <textarea matInput rows=\"4\" [value]=\"stringifyTokens(config?.appearance?.tokens)\" (input)=\"setTokens($any($event.target).value)\" placeholder='{\"header-background-color\":\"var(--md-sys-color-surface-container)\"}'></textarea>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Use tokens M3, por exemplo: var(--md-sys-color-primary)'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <div class=\"error\" *ngIf=\"tokensError\">{{ tokensError }}</div>\n </section>\n\n <section class=\"sec\">\n <h4>Configuração do acordeão</h4>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\">\n <mat-label>ID</mat-label>\n <input matInput [value]=\"config?.accordion?.id || ''\" (input)=\"setAccordion('id', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Modo de exibição</mat-label>\n <select matNativeControl [value]=\"config?.accordion?.displayMode || 'default'\" (change)=\"setAccordion('displayMode', $any($event.target).value)\">\n <option value=\"default\">Padrão</option>\n <option value=\"flat\">Flat</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição do toggle</mat-label>\n <select matNativeControl [value]=\"config?.accordion?.togglePosition || 'after'\" (change)=\"setAccordion('togglePosition', $any($event.target).value)\">\n <option value=\"after\">Depois</option>\n <option value=\"before\">Antes</option>\n </select>\n </mat-form-field>\n <div class=\"row wrap\">\n <mat-slide-toggle [checked]=\"config?.accordion?.multi || false\" (change)=\"setAccordion('multi', $event.checked)\">Múltiplos abertos</mat-slide-toggle>\n <mat-slide-toggle [checked]=\"config?.accordion?.hideToggle || false\" (change)=\"setAccordion('hideToggle', $event.checked)\">Ocultar toggle</mat-slide-toggle>\n </div>\n </div>\n <div class=\"row\">\n <button mat-stroked-button color=\"primary\" (click)=\"addPanel()\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon>Adicionar painel</button>\n </div>\n </section>\n\n <section class=\"sec\" *ngFor=\"let p of (config?.panels || []); let i = index\">\n <div class=\"panel-row\">\n <strong>{{ p.title || ('Painel ' + (i + 1)) }}</strong>\n <span class=\"grow\"></span>\n <button mat-button (click)=\"move(i, -1)\" [disabled]=\"i===0\"><mat-icon [praxisIcon]=\"'arrow_upward'\"></mat-icon>Subir</button>\n <button mat-button (click)=\"move(i, 1)\" [disabled]=\"i>=(config!.panels!.length-1)\"><mat-icon [praxisIcon]=\"'arrow_downward'\"></mat-icon>Descer</button>\n <button mat-button color=\"warn\" (click)=\"removePanel(i)\"><mat-icon [praxisIcon]=\"'delete'\"></mat-icon>Remover</button>\n </div>\n <div class=\"grid two\">\n <mat-form-field appearance=\"outline\"><mat-label>ID</mat-label>\n <input matInput [value]=\"p.id || ''\" (input)=\"setPanel(i, 'id', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Título</mat-label>\n <input matInput [value]=\"p.title || ''\" (input)=\"setPanel(i, 'title', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Descrição</mat-label>\n <input matInput [value]=\"p.description || ''\" (input)=\"setPanel(i, 'description', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Altura recolhida</mat-label>\n <input matInput placeholder=\"48px\" [value]=\"p.collapsedHeight || ''\" (input)=\"setPanel(i, 'collapsedHeight', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Altura expandida</mat-label>\n <input matInput placeholder=\"64px\" [value]=\"p.expandedHeight || ''\" (input)=\"setPanel(i, 'expandedHeight', $any($event.target).value)\" />\n </mat-form-field>\n <div class=\"row wrap\">\n <mat-slide-toggle [checked]=\"p.disabled || false\" (change)=\"setPanel(i, 'disabled', $event.checked)\">Desativado</mat-slide-toggle>\n <mat-slide-toggle [checked]=\"p.expanded || false\" (change)=\"setPanel(i, 'expanded', $event.checked)\">Expandido</mat-slide-toggle>\n <mat-slide-toggle [checked]=\"p.hideToggle || false\" (change)=\"setPanel(i, 'hideToggle', $event.checked)\">Ocultar toggle</mat-slide-toggle>\n </div>\n </div>\n </section>\n </div>\n `,\n styles: [\n `\n :host { display: block; color: var(--md-sys-color-on-surface); }\n .pdx-expansion-editor { display: grid; gap: 16px; }\n .sec { border: 1px solid var(--md-sys-color-outline-variant); padding: 12px; border-radius: 10px; background: var(--md-sys-color-surface-container-lowest); display: grid; gap: 12px; }\n .row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }\n .row.wrap { flex-wrap: wrap; }\n .panel-row { display: flex; gap: 8px; align-items: center; width: 100%; }\n .grow { flex: 1 1 auto; }\n .grid { display: grid; gap: 10px; align-items: center; }\n .grid.two { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }\n .full { width: 100%; }\n .error { color: var(--md-sys-color-error); font-size: 12px; }\n .pdx-expansion-editor .mat-mdc-form-field {\n width: 100%;\n --mdc-outlined-text-field-container-height: 48px;\n --mdc-outlined-text-field-outline-color: var(--md-sys-color-outline-variant);\n --mdc-outlined-text-field-hover-outline-color: var(--md-sys-color-outline);\n --mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);\n --mdc-outlined-text-field-error-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-focus-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-hover-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-label-text-color: var(--md-sys-color-on-surface-variant);\n --mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);\n --mdc-outlined-text-field-supporting-text-color: var(--md-sys-color-on-surface-variant);\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: -4px;\n }\n .help-icon-button mat-icon { font-size: 18px; width: 18px; height: 18px; }\n .mat-mdc-form-field-icon-suffix { align-self: center; }\n `,\n ],\n})\nexport class PraxisExpansionConfigEditor implements SettingsValueProvider, OnChanges {\n @Input() config: ExpansionMetadata | null | undefined;\n @Input() expansionId?: string | null;\n tokensError = '';\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n private initialJson = '';\n private hasInitializedSnapshot = false;\n\n constructor(@Inject(SETTINGS_PANEL_DATA) injected?: any) {\n const injectedConfig = injected?.config as ExpansionMetadata | undefined;\n if (injectedConfig) {\n this.config = injectedConfig;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config'] && this.config && !this.hasInitializedSnapshot) {\n this.captureInitialSnapshot(this.config);\n }\n }\n\n getSettingsValue(): any {\n return this.config;\n }\n\n reset(): void {\n if (!this.initialJson) return;\n try {\n this.config = JSON.parse(this.initialJson) as ExpansionMetadata;\n this.tokensError = '';\n this.isValid$.next(true);\n this.isDirty$.next(false);\n } catch {}\n }\n\n stringifyTokens(tokens?: Record<string, string>): string {\n if (!tokens || Object.keys(tokens).length === 0) return '';\n try {\n return JSON.stringify(tokens, null, 2);\n } catch {\n return '';\n }\n }\n\n setAppearance<K extends keyof NonNullable<ExpansionMetadata['appearance']>>(key: K, value: any): void {\n const ap = { ...(this.config?.appearance || {}) } as any;\n if (value === '' || value === null || typeof value === 'undefined') {\n delete ap[key];\n } else {\n ap[key] = value;\n }\n this.setConfig({ ...(this.config || {}), appearance: ap } as ExpansionMetadata);\n }\n\n setTokens(text: string): void {\n const raw = (text || '').trim();\n if (!raw) {\n this.tokensError = '';\n this.setAppearance('tokens', undefined);\n this.isValid$.next(true);\n return;\n }\n try {\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n this.tokensError = 'Formato inválido: use um objeto JSON.';\n this.isValid$.next(false);\n return;\n }\n this.tokensError = '';\n this.isValid$.next(true);\n this.setAppearance('tokens', parsed);\n } catch (err: any) {\n this.tokensError = err?.message || 'JSON inválido.';\n this.isValid$.next(false);\n }\n }\n\n setContainer<K extends keyof ExpansionAppearanceContainer>(key: K, value: any): void {\n const container = { ...(this.config?.appearance?.container || {}) } as any;\n if (value === '' || value === null || typeof value === 'undefined') {\n delete container[key];\n } else {\n container[key] = value;\n }\n const next = Object.keys(container).length ? container : undefined;\n this.setAppearance('container', next);\n }\n\n setHeader<K extends keyof ExpansionAppearanceHeader>(key: K, value: any): void {\n const header = { ...(this.config?.appearance?.header || {}) } as any;\n if (value === '' || value === null || typeof value === 'undefined') {\n delete header[key];\n } else {\n header[key] = value;\n }\n const next = Object.keys(header).length ? header : undefined;\n this.setAppearance('header', next);\n }\n\n setState<\n S extends keyof ExpansionAppearanceStates,\n K extends keyof NonNullable<ExpansionAppearanceStates[S]>\n >(state: S, key: K, value: any): void {\n const current = { ...(this.config?.appearance?.states || {}) } as any;\n const stateObj = { ...(current[state] || {}) } as any;\n if (value === '' || value === null || typeof value === 'undefined') {\n delete stateObj[key];\n } else {\n stateObj[key] = value;\n }\n if (Object.keys(stateObj).length) {\n current[state] = stateObj;\n } else {\n delete current[state];\n }\n const next = Object.keys(current).length ? current : undefined;\n this.setAppearance('states', next);\n }\n\n addPanel(): void {\n const next = { ...(this.config || {}), panels: [...(this.config?.panels || []), { title: 'Novo painel' } as PanelMetadata] };\n this.setConfig(next);\n }\n\n removePanel(index: number): void {\n if (!this.config?.panels) return;\n const next = { ...this.config, panels: this.config.panels.filter((_, i) => i !== index) };\n this.setConfig(next);\n }\n\n move(index: number, delta: number): void {\n if (!this.config?.panels) return;\n const arr = [...this.config.panels];\n const to = index + delta;\n if (to < 0 || to >= arr.length) return;\n const [m] = arr.splice(index, 1);\n arr.splice(to, 0, m);\n this.setConfig({ ...(this.config || {}), panels: arr });\n }\n\n setAccordion<K extends keyof NonNullable<ExpansionMetadata['accordion']>>(key: K, value: any): void {\n const acc = { ...(this.config?.accordion || {}) } as any;\n acc[key] = value;\n this.setConfig({ ...(this.config || {}), accordion: acc } as ExpansionMetadata);\n }\n\n setPanel(index: number, key: keyof PanelMetadata, value: any): void {\n if (!this.config?.panels) return;\n const arr = this.config.panels.map((p, i) => i === index ? ({ ...p, [key]: value } as PanelMetadata) : p);\n this.setConfig({ ...(this.config || {}), panels: arr });\n }\n\n private setConfig(next: ExpansionMetadata): void {\n this.config = next;\n if (!this.hasInitializedSnapshot) {\n this.captureInitialSnapshot(next);\n return;\n }\n this.updateDirtyState();\n }\n\n private captureInitialSnapshot(cfg: ExpansionMetadata): void {\n this.initialJson = JSON.stringify(cfg || {});\n this.hasInitializedSnapshot = true;\n this.isDirty$.next(false);\n }\n\n private updateDirtyState(): void {\n if (!this.hasInitializedSnapshot) return;\n const current = JSON.stringify(this.config || {});\n this.isDirty$.next(current !== this.initialJson);\n }\n}\n","import { ComponentDocMeta, ComponentMetadataRegistry } from '@praxisui/core';\nimport { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\nimport { MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatExpansionPanelDefaultOptions } from '@angular/material/expansion';\nimport { PraxisExpansion } from './praxis-expansion';\n\nexport const PRAXIS_EXPANSION_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-expansion',\n selector: 'praxis-expansion',\n component: PraxisExpansion,\n friendlyName: 'Praxis Expansion Panel',\n description: 'Acordeão/Painéis de expansão configuráveis por metadata, com aparência e tokens M3.',\n icon: 'unfold_more',\n inputs: [\n { name: 'config', type: 'ExpansionMetadata', label: 'Configuração', description: 'Configuração JSON (acordeão, aparência e painéis)' },\n { name: 'expansionId', type: 'string', label: 'ID', description: 'Identificador para persistência (obrigatório)' },\n { name: 'componentInstanceId', type: 'string', label: 'ID da instância', description: 'Identificador opcional para múltiplas instâncias na mesma rota' },\n { name: 'editModeEnabled', type: 'boolean', default: false, label: 'Modo de edição' },\n { name: 'context', type: 'Record<string, any>', label: 'Contexto' },\n { name: 'strictValidation', type: 'boolean', default: true },\n { name: 'defaultOptions', type: 'MatExpansionPanelDefaultOptions', label: 'Opções padrão do painel' },\n ],\n outputs: [\n { name: 'opened', type: '{ panelId?: string; panelIndex: number }', label: 'Painel aberto' },\n { name: 'closed', type: '{ panelId?: string; panelIndex: number }', label: 'Painel fechado' },\n { name: 'expandedChange', type: '{ panelId?: string; panelIndex: number; expanded: boolean }', label: 'Alterou expansão' },\n { name: 'afterExpand', type: '{ panelId?: string; panelIndex: number }', label: 'Após expandir' },\n { name: 'afterCollapse', type: '{ panelId?: string; panelIndex: number }', label: 'Após colapsar' },\n { name: 'destroyed', type: '{ panelId?: string; panelIndex: number }', label: 'Destruído' },\n { name: 'widgetEvent', type: '{ panelId?: string; panelIndex?: number; sourceId: string; output?: string; payload?: any }', label: 'Evento interno' },\n ],\n actions: [\n {\n id: 'panel-opened',\n label: 'Painel aberto',\n icon: 'unfold_more',\n description: 'Emite evento ao abrir um painel',\n emit: 'opened',\n payloadSchema: {\n type: 'object',\n properties: {\n panelId: { type: 'string', description: 'ID do painel' },\n panelIndex: { type: 'number', description: 'Índice do painel' },\n },\n required: ['panelIndex'],\n example: { panelIndex: 0 },\n },\n scope: 'context',\n },\n {\n id: 'panel-closed',\n label: 'Painel fechado',\n icon: 'unfold_less',\n description: 'Emite evento ao fechar um painel',\n emit: 'closed',\n payloadSchema: {\n type: 'object',\n properties: {\n panelId: { type: 'string', description: 'ID do painel' },\n panelIndex: { type: 'number', description: 'Índice do painel' },\n },\n required: ['panelIndex'],\n example: { panelIndex: 0 },\n },\n scope: 'context',\n },\n {\n id: 'panel-toggle',\n label: 'Alternar painel',\n icon: 'open_in_full',\n description: 'Emite evento ao alternar expansão do painel',\n emit: 'expandedChange',\n payloadSchema: {\n type: 'object',\n properties: {\n panelId: { type: 'string', description: 'ID do painel' },\n panelIndex: { type: 'number', description: 'Índice do painel' },\n expanded: { type: 'boolean', description: 'Estado expandido' },\n },\n required: ['panelIndex', 'expanded'],\n example: { panelIndex: 0, expanded: true },\n },\n scope: 'context',\n },\n ],\n tags: ['widget', 'expansion', 'accordion', 'configurable'],\n lib: '@praxisui/expansion',\n};\n\nexport function providePraxisExpansionMetadata(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (registry: ComponentMetadataRegistry) => () => {\n registry.register(PRAXIS_EXPANSION_COMPONENT_METADATA);\n },\n deps: [ComponentMetadataRegistry],\n } as Provider;\n}\n\nexport function providePraxisExpansionDefaults(opts: MatExpansionPanelDefaultOptions): Provider {\n return { provide: MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, useValue: opts } as Provider;\n}\n","/*\n * Public API Surface of praxis-expansion\n */\n\nexport * from './lib/praxis-expansion';\nexport * from './lib/praxis-expansion.metadata';\n// Editor é exportado pelo mesmo arquivo de componente (praxis-expansion.ts)\nexport * from './lib/ai/expansion-ai-capabilities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@praxisui/expansion",
3
- "version": "1.0.0-beta.40",
3
+ "version": "1.0.0-beta.42",
4
4
  "description": "Expansion panel (accordion) components for Praxis UI with metadata configuration and editor integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
8
  "@angular/material": "^20.0.0",
9
9
  "@angular/cdk": "^20.0.0",
10
- "@praxisui/core": "^1.0.0-beta.40",
11
- "@praxisui/dynamic-fields": "^1.0.0-beta.40",
12
- "@praxisui/settings-panel": "^1.0.0-beta.40"
10
+ "@praxisui/core": "^1.0.0-beta.42",
11
+ "@praxisui/dynamic-fields": "^1.0.0-beta.42",
12
+ "@praxisui/settings-panel": "^1.0.0-beta.42"
13
13
  },
14
14
  "dependencies": {
15
15
  "tslib": "^2.3.0"