@praxisui/metadata-editor 9.0.65 → 9.0.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,21 +1,21 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, inject, Component, forwardRef, ElementRef, Input, Optional, ViewEncapsulation, EventEmitter, DestroyRef, Output, input, computed, ChangeDetectionStrategy, signal, ENVIRONMENT_INITIALIZER } from '@angular/core';
2
+ import { Injectable, inject, Component, forwardRef, ElementRef, Input, input, signal, effect, ChangeDetectionStrategy, Optional, ViewEncapsulation, EventEmitter, DestroyRef, Output, computed, ENVIRONMENT_INITIALIZER } from '@angular/core';
3
3
  import * as i1 from '@angular/forms';
4
4
  import { FormControl, FormGroup, FormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS, ReactiveFormsModule, FormArray, FormBuilder } from '@angular/forms';
5
- import * as i3$1 from '@angular/common';
5
+ import * as i3$2 from '@angular/common';
6
6
  import { CommonModule } from '@angular/common';
7
7
  import { isValidCssColor, DynamicFieldLoaderDirective, normalizeCssColorToRgb, providePraxisDynamicFieldsI18n } from '@praxisui/dynamic-fields';
8
8
  import * as i2$2 from '@praxisui/core';
9
9
  import { providePraxisI18n, PraxisI18nService, PraxisIconDirective, FieldControlType, INLINE_FILTER_CONTROL_TYPES, resolveInlineFilterControlType, normalizeControlTypeToken, normalizeReactiveDeterminations, ComponentMetadataRegistry } from '@praxisui/core';
10
10
  import * as i5$1 from '@angular/material/expansion';
11
11
  import { MatExpansionModule } from '@angular/material/expansion';
12
- import * as i4 from '@angular/material/icon';
12
+ import * as i2$1 from '@angular/material/icon';
13
13
  import { MatIconModule } from '@angular/material/icon';
14
- import * as i2$1 from '@angular/material/button';
14
+ import * as i1$2 from '@angular/material/button';
15
15
  import { MatButtonModule } from '@angular/material/button';
16
16
  import * as i1$1 from '@angular/material/dialog';
17
17
  import { MatDialogRef, MatDialogModule } from '@angular/material/dialog';
18
- import * as i7 from '@angular/material/tooltip';
18
+ import * as i3$1 from '@angular/material/tooltip';
19
19
  import { MatTooltipModule } from '@angular/material/tooltip';
20
20
  import * as i2 from '@angular/material/list';
21
21
  import { MatListModule } from '@angular/material/list';
@@ -407,6 +407,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
407
407
  }] });
408
408
 
409
409
  const METADATA_EDITOR_EN_US = {
410
+ 'praxis.metadataEditor.colorPicker.adaptiveMode.label': 'Dialog on narrow screens',
411
+ 'praxis.metadataEditor.colorPicker.adaptiveMode.hint': 'Opens the picker in a dialog below 600 px. Wider screens keep the popover. Presentation is selected when opening.',
412
+ 'praxis.metadataEditor.inlineColorLabel.colorKey.label': 'Option color field',
413
+ 'praxis.metadataEditor.inlineColorLabel.colorKey.hint': 'Payload field containing a CSS color or, with a governed palette, the exact tokenId. Missing or unauthorized tokens have no color; option order does not change the mapping.',
410
414
  'praxis.metadataEditor.arrayFields.section': 'Collection subfields',
411
415
  'praxis.metadataEditor.arrayFields.title': 'Subfields',
412
416
  'praxis.metadataEditor.arrayFields.add': 'Add subfield',
@@ -642,9 +646,22 @@ const METADATA_EDITOR_EN_US = {
642
646
  'praxis.metadataEditor.reactiveDeterminations.reason.unknown': 'Unclassified diagnostic.',
643
647
  'praxis.metadataEditor.reactiveDeterminations.governanceTitle': 'Governance boundary',
644
648
  'praxis.metadataEditor.reactiveDeterminations.governanceDescription': 'This surface explains and diagnoses the projection. Decision changes must be handed off to governed Praxis Config authoring; the final submit remains under backend authority.',
649
+ 'praxis.metadataEditor.colorPalette.label': 'Palette colors',
650
+ 'praxis.metadataEditor.colorPalette.hint': 'Build an ordered palette with CSS colors or governed token references.',
651
+ 'praxis.metadataEditor.colorPalette.add': 'Add color',
652
+ 'praxis.metadataEditor.colorPalette.empty': 'No custom colors. The selected preset or governed palette will be used.',
653
+ 'praxis.metadataEditor.colorPalette.value': 'Color',
654
+ 'praxis.metadataEditor.colorPalette.moveUp': 'Move up',
655
+ 'praxis.metadataEditor.colorPalette.moveDown': 'Move down',
656
+ 'praxis.metadataEditor.colorPalette.remove': 'Remove',
657
+ 'praxis.metadataEditor.colorPalette.invalid': 'Enter a valid CSS color or var(--token).',
645
658
  };
646
659
 
647
660
  const METADATA_EDITOR_PT_BR = {
661
+ 'praxis.metadataEditor.colorPicker.adaptiveMode.label': 'Diálogo em tela estreita',
662
+ 'praxis.metadataEditor.colorPicker.adaptiveMode.hint': 'Abre o seletor em diálogo abaixo de 600 px. Em telas maiores, mantém o popover. A apresentação é escolhida ao abrir.',
663
+ 'praxis.metadataEditor.inlineColorLabel.colorKey.label': 'Campo de cor da opção',
664
+ 'praxis.metadataEditor.inlineColorLabel.colorKey.hint': 'Campo do payload que contém a cor CSS ou, com paleta governada, o tokenId exato. Tokens ausentes ou não autorizados ficam sem cor; a ordem das opções não altera a associação.',
648
665
  'praxis.metadataEditor.arrayFields.section': 'Subcampos da cole\u00e7\u00e3o',
649
666
  'praxis.metadataEditor.arrayFields.title': 'Subcampos',
650
667
  'praxis.metadataEditor.arrayFields.add': 'Adicionar subcampo',
@@ -880,6 +897,15 @@ const METADATA_EDITOR_PT_BR = {
880
897
  'praxis.metadataEditor.reactiveDeterminations.reason.unknown': 'Diagn\u00f3stico n\u00e3o classificado.',
881
898
  'praxis.metadataEditor.reactiveDeterminations.governanceTitle': 'Fronteira de governan\u00e7a',
882
899
  'praxis.metadataEditor.reactiveDeterminations.governanceDescription': 'Esta tela explica e diagnostica a proje\u00e7\u00e3o. Altera\u00e7\u00f5es da decis\u00e3o devem ser encaminhadas ao fluxo governado do Praxis Config; o submit final continua sob autoridade do backend.',
900
+ 'praxis.metadataEditor.colorPalette.label': 'Cores da paleta',
901
+ 'praxis.metadataEditor.colorPalette.hint': 'Monte uma paleta ordenada com cores CSS ou referências a tokens governados.',
902
+ 'praxis.metadataEditor.colorPalette.add': 'Adicionar cor',
903
+ 'praxis.metadataEditor.colorPalette.empty': 'Sem cores locais. O preset ou a paleta governada será usado.',
904
+ 'praxis.metadataEditor.colorPalette.value': 'Cor',
905
+ 'praxis.metadataEditor.colorPalette.moveUp': 'Mover para cima',
906
+ 'praxis.metadataEditor.colorPalette.moveDown': 'Mover para baixo',
907
+ 'praxis.metadataEditor.colorPalette.remove': 'Remover',
908
+ 'praxis.metadataEditor.colorPalette.invalid': 'Informe uma cor CSS válida ou var(--token).',
883
909
  };
884
910
 
885
911
  function createPraxisMetadataEditorI18nConfig(options = {}) {
@@ -1513,7 +1539,7 @@ class PresentationRulesBuilderComponent {
1513
1539
  }
1514
1540
  </div>
1515
1541
  </section>
1516
- `, isInline: true, styles: [":host{display:block;width:100%}.pme-rules{display:grid;gap:12px;width:100%}.pme-rules.is-disabled{opacity:.72}.pme-rules__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.pme-rules__header h3{margin:0;color:var(--md-sys-color-on-surface);font-size:.95rem;font-weight:650;line-height:1.3}.pme-rules__header p{margin:3px 0 0;color:var(--md-sys-color-on-surface-variant);font-size:.82rem;line-height:1.35}.pme-rules__empty{border:1px dashed var(--md-sys-color-outline-variant);border-radius:8px;color:var(--md-sys-color-on-surface-variant);padding:12px;font-size:.86rem;line-height:1.4}.pme-rules__list{display:grid;gap:10px}.pme-rule{border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low);padding:10px}.pme-rule__toolbar{display:flex;align-items:center;gap:6px;min-height:32px}.pme-rule__toolbar strong{color:var(--md-sys-color-on-surface);font-size:.88rem;font-weight:650}.pme-rule__summary{color:var(--md-sys-color-on-surface-variant);font-size:.8rem;line-height:1.3}.pme-rule__spacer{flex:1 1 auto}.pme-rule__mode{display:inline-flex;gap:2px;margin:8px 0 10px;padding:2px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container)}.pme-rule__mode button{min-height:30px;line-height:30px}.pme-rule__mode button.is-active{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pme-rule__grid{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:10px}.pme-rule__grid--effects{grid-template-columns:repeat(3,minmax(150px,1fr))}.pme-rule__advanced{width:100%}@media(max-width:720px){.pme-rules__header{display:grid}.pme-rules__header button{justify-self:start}.pme-rule__toolbar{flex-wrap:wrap}.pme-rule__summary{flex:1 1 100%}.pme-rule__grid,.pme-rule__grid--effects{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.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: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.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: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }] });
1542
+ `, isInline: true, styles: [":host{display:block;width:100%}.pme-rules{display:grid;gap:12px;width:100%}.pme-rules.is-disabled{opacity:.72}.pme-rules__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.pme-rules__header h3{margin:0;color:var(--md-sys-color-on-surface);font-size:.95rem;font-weight:650;line-height:1.3}.pme-rules__header p{margin:3px 0 0;color:var(--md-sys-color-on-surface-variant);font-size:.82rem;line-height:1.35}.pme-rules__empty{border:1px dashed var(--md-sys-color-outline-variant);border-radius:8px;color:var(--md-sys-color-on-surface-variant);padding:12px;font-size:.86rem;line-height:1.4}.pme-rules__list{display:grid;gap:10px}.pme-rule{border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low);padding:10px}.pme-rule__toolbar{display:flex;align-items:center;gap:6px;min-height:32px}.pme-rule__toolbar strong{color:var(--md-sys-color-on-surface);font-size:.88rem;font-weight:650}.pme-rule__summary{color:var(--md-sys-color-on-surface-variant);font-size:.8rem;line-height:1.3}.pme-rule__spacer{flex:1 1 auto}.pme-rule__mode{display:inline-flex;gap:2px;margin:8px 0 10px;padding:2px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container)}.pme-rule__mode button{min-height:30px;line-height:30px}.pme-rule__mode button.is-active{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pme-rule__grid{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:10px}.pme-rule__grid--effects{grid-template-columns:repeat(3,minmax(150px,1fr))}.pme-rule__advanced{width:100%}@media(max-width:720px){.pme-rules__header{display:grid}.pme-rules__header button{justify-self:start}.pme-rule__toolbar{flex-wrap:wrap}.pme-rule__summary{flex:1 1 100%}.pme-rule__grid,.pme-rule__grid--effects{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.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: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.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: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }] });
1517
1543
  }
1518
1544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PresentationRulesBuilderComponent, decorators: [{
1519
1545
  type: Component,
@@ -1956,7 +1982,7 @@ class PresentationChoiceControlComponent {
1956
1982
  </button>
1957
1983
  }
1958
1984
  </section>
1959
- `, isInline: true, styles: [":host{display:block;min-width:0;width:100%}.pme-choice{display:grid;gap:8px}.pme-choice.is-disabled{opacity:.7}.pme-choice__header{display:flex;align-items:center;gap:4px;min-height:28px}.pme-choice__label{color:var(--md-sys-color-on-surface);font-size:.88rem;font-weight:650;line-height:1.25}.pme-choice__help{width:28px;height:28px;min-width:28px;padding:0;color:var(--md-sys-color-primary)}.pme-choice__options{display:flex;flex-wrap:wrap;gap:6px}.pme-choice__option{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:0 10px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);cursor:pointer;font:inherit;line-height:1.2}.pme-choice__option:hover:not(:disabled){border-color:var(--md-sys-color-primary);color:var(--md-sys-color-on-surface)}.pme-choice__option:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pme-choice__option.is-selected{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pme-choice__option mat-icon{font-size:18px;width:18px;height:18px}.pme-choice__option.is-tone{padding-left:8px}.pme-choice__swatch{width:14px;height:14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-highest)}.pme-choice__option[data-tone=info] .pme-choice__swatch{background:var(--md-sys-color-primary-container);border-color:var(--md-sys-color-primary)}.pme-choice__option[data-tone=success] .pme-choice__swatch{background:var(--md-sys-color-tertiary-container);border-color:var(--md-sys-color-tertiary)}.pme-choice__option[data-tone=warning] .pme-choice__swatch{background:var(--md-sys-color-secondary-container);border-color:var(--md-sys-color-secondary)}.pme-choice__option[data-tone=danger] .pme-choice__swatch{background:var(--md-sys-color-error-container);border-color:var(--md-sys-color-error)}.pme-choice__clear{justify-self:start;min-height:30px;padding:0 8px;color:var(--md-sys-color-on-surface-variant)}.pme-choice__clear mat-icon{font-size:16px;width:16px;height:16px;margin-right:4px}@media(max-width:520px){.pme-choice__options{display:grid;grid-template-columns:1fr}.pme-choice__option{justify-content:flex-start;width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.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: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }] });
1985
+ `, isInline: true, styles: [":host{display:block;min-width:0;width:100%}.pme-choice{display:grid;gap:8px}.pme-choice.is-disabled{opacity:.7}.pme-choice__header{display:flex;align-items:center;gap:4px;min-height:28px}.pme-choice__label{color:var(--md-sys-color-on-surface);font-size:.88rem;font-weight:650;line-height:1.25}.pme-choice__help{width:28px;height:28px;min-width:28px;padding:0;color:var(--md-sys-color-primary)}.pme-choice__options{display:flex;flex-wrap:wrap;gap:6px}.pme-choice__option{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:0 10px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);cursor:pointer;font:inherit;line-height:1.2}.pme-choice__option:hover:not(:disabled){border-color:var(--md-sys-color-primary);color:var(--md-sys-color-on-surface)}.pme-choice__option:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pme-choice__option.is-selected{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pme-choice__option mat-icon{font-size:18px;width:18px;height:18px}.pme-choice__option.is-tone{padding-left:8px}.pme-choice__swatch{width:14px;height:14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-highest)}.pme-choice__option[data-tone=info] .pme-choice__swatch{background:var(--md-sys-color-primary-container);border-color:var(--md-sys-color-primary)}.pme-choice__option[data-tone=success] .pme-choice__swatch{background:var(--md-sys-color-tertiary-container);border-color:var(--md-sys-color-tertiary)}.pme-choice__option[data-tone=warning] .pme-choice__swatch{background:var(--md-sys-color-secondary-container);border-color:var(--md-sys-color-secondary)}.pme-choice__option[data-tone=danger] .pme-choice__swatch{background:var(--md-sys-color-error-container);border-color:var(--md-sys-color-error)}.pme-choice__clear{justify-self:start;min-height:30px;padding:0 8px;color:var(--md-sys-color-on-surface-variant)}.pme-choice__clear mat-icon{font-size:16px;width:16px;height:16px;margin-right:4px}@media(max-width:520px){.pme-choice__options{display:grid;grid-template-columns:1fr}.pme-choice__option{justify-content:flex-start;width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.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: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }] });
1960
1986
  }
1961
1987
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PresentationChoiceControlComponent, decorators: [{
1962
1988
  type: Component,
@@ -2039,6 +2065,272 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2039
2065
  type: Input
2040
2066
  }] } });
2041
2067
 
2068
+ class ColorPaletteEditorComponent {
2069
+ formControl = input.required(...(ngDevMode ? [{ debugName: "formControl" }] : /* istanbul ignore next */ []));
2070
+ colors = signal([], ...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
2071
+ i18n = inject(PraxisI18nService, { optional: true });
2072
+ constructor() {
2073
+ effect((onCleanup) => {
2074
+ const control = this.formControl();
2075
+ this.colors.set(this.normalize(control.value));
2076
+ const subscription = control.valueChanges.subscribe((value) => this.colors.set(this.normalize(value)));
2077
+ onCleanup(() => subscription.unsubscribe());
2078
+ });
2079
+ }
2080
+ text(key, fallback) {
2081
+ return this.i18n
2082
+ ? resolvePraxisMetadataEditorText(this.i18n, key, fallback)
2083
+ : fallback;
2084
+ }
2085
+ isValid(color) {
2086
+ return color.trim().length > 0 && isValidCssColor(color);
2087
+ }
2088
+ kind(color) {
2089
+ return /^var\(/i.test(color.trim()) ? 'token' : 'css';
2090
+ }
2091
+ addColor() {
2092
+ this.commit([...this.colors(), '#6750a4']);
2093
+ }
2094
+ remove(index) {
2095
+ this.commit(this.colors().filter((_, current) => current !== index));
2096
+ }
2097
+ move(index, delta) {
2098
+ const target = index + delta;
2099
+ if (target < 0 || target >= this.colors().length)
2100
+ return;
2101
+ const next = [...this.colors()];
2102
+ [next[index], next[target]] = [next[target], next[index]];
2103
+ this.commit(next);
2104
+ }
2105
+ updateColor(index, event) {
2106
+ const next = [...this.colors()];
2107
+ next[index] = event.target.value;
2108
+ this.commit(next);
2109
+ }
2110
+ commit(colors) {
2111
+ this.colors.set(colors);
2112
+ const control = this.formControl();
2113
+ control.setValue(colors);
2114
+ control.markAsDirty();
2115
+ control.markAsTouched();
2116
+ }
2117
+ normalize(value) {
2118
+ return Array.isArray(value)
2119
+ ? value.map((entry) => String(entry ?? ''))
2120
+ : [];
2121
+ }
2122
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ColorPaletteEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2123
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: ColorPaletteEditorComponent, isStandalone: true, selector: "praxis-color-palette-editor", inputs: { formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
2124
+ <section
2125
+ class="palette-editor"
2126
+ [attr.aria-label]="text('colorPalette.label', 'Palette colors')"
2127
+ >
2128
+ <div class="palette-editor__header">
2129
+ <div>
2130
+ <strong>{{ text('colorPalette.label', 'Palette colors') }}</strong>
2131
+ <p>
2132
+ {{
2133
+ text(
2134
+ 'colorPalette.hint',
2135
+ 'Build an ordered palette with CSS colors or governed token references.'
2136
+ )
2137
+ }}
2138
+ </p>
2139
+ </div>
2140
+ <button mat-stroked-button type="button" (click)="addColor()">
2141
+ <mat-icon [praxisIcon]="'mi:add'" />
2142
+ {{ text('colorPalette.add', 'Add color') }}
2143
+ </button>
2144
+ </div>
2145
+
2146
+ @if (colors().length === 0) {
2147
+ <div class="palette-editor__empty">
2148
+ {{
2149
+ text(
2150
+ 'colorPalette.empty',
2151
+ 'No custom colors. The selected preset or governed palette will be used.'
2152
+ )
2153
+ }}
2154
+ </div>
2155
+ } @else {
2156
+ <ol class="palette-editor__list">
2157
+ @for (color of colors(); track $index; let index = $index) {
2158
+ <li class="palette-editor__row" [class.invalid]="!isValid(color)">
2159
+ <span
2160
+ class="palette-editor__swatch"
2161
+ [style.background]="isValid(color) ? color : 'transparent'"
2162
+ aria-hidden="true"
2163
+ ></span>
2164
+ <label>
2165
+ <span class="sr-only"
2166
+ >{{ text('colorPalette.value', 'Color') }}
2167
+ {{ index + 1 }}</span
2168
+ >
2169
+ <input
2170
+ [value]="color"
2171
+ (input)="updateColor(index, $event)"
2172
+ [attr.aria-invalid]="!isValid(color)"
2173
+ />
2174
+ </label>
2175
+ <span class="palette-editor__kind">{{ kind(color) }}</span>
2176
+ <div class="palette-editor__actions">
2177
+ <button
2178
+ mat-icon-button
2179
+ type="button"
2180
+ (click)="move(index, -1)"
2181
+ [disabled]="index === 0"
2182
+ [matTooltip]="text('colorPalette.moveUp', 'Move up')"
2183
+ [attr.aria-label]="text('colorPalette.moveUp', 'Move up')"
2184
+ >
2185
+ <mat-icon [praxisIcon]="'mi:arrow_upward'" />
2186
+ </button>
2187
+ <button
2188
+ mat-icon-button
2189
+ type="button"
2190
+ (click)="move(index, 1)"
2191
+ [disabled]="index === colors().length - 1"
2192
+ [matTooltip]="text('colorPalette.moveDown', 'Move down')"
2193
+ [attr.aria-label]="text('colorPalette.moveDown', 'Move down')"
2194
+ >
2195
+ <mat-icon [praxisIcon]="'mi:arrow_downward'" />
2196
+ </button>
2197
+ <button
2198
+ mat-icon-button
2199
+ type="button"
2200
+ (click)="remove(index)"
2201
+ [matTooltip]="text('colorPalette.remove', 'Remove')"
2202
+ [attr.aria-label]="text('colorPalette.remove', 'Remove')"
2203
+ >
2204
+ <mat-icon [praxisIcon]="'mi:delete'" />
2205
+ </button>
2206
+ </div>
2207
+ @if (!isValid(color)) {
2208
+ <span class="palette-editor__error">
2209
+ {{
2210
+ text(
2211
+ 'colorPalette.invalid',
2212
+ 'Enter a valid CSS color or var(--token).'
2213
+ )
2214
+ }}
2215
+ </span>
2216
+ }
2217
+ </li>
2218
+ }
2219
+ </ol>
2220
+ }
2221
+ </section>
2222
+ `, isInline: true, styles: [":host{display:block;width:100%}.palette-editor{display:grid;gap:12px;width:100%;padding:12px;box-sizing:border-box;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface)}.palette-editor__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.palette-editor__header p{margin:4px 0 0;color:var(--md-sys-color-on-surface-variant);font-size:12px;line-height:1.4}.palette-editor__empty{padding:16px;border:1px dashed var(--md-sys-color-outline);border-radius:8px;color:var(--md-sys-color-on-surface-variant);text-align:center;font-size:12px}.palette-editor__list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.palette-editor__row{display:grid;grid-template-columns:28px minmax(120px,1fr) auto auto;align-items:center;gap:8px;min-height:44px;padding:6px 8px;border:1px solid var(--md-sys-color-outline-variant);border-radius:9px;background:var(--md-sys-color-surface-container-low)}.palette-editor__row.invalid{border-color:var(--md-sys-color-error)}.palette-editor__swatch{width:26px;height:26px;border:1px solid var(--md-sys-color-outline-variant);border-radius:7px;background-image:linear-gradient(45deg,var(--md-sys-color-surface-container-high) 25%,transparent 25%),linear-gradient(-45deg,var(--md-sys-color-surface-container-high) 25%,transparent 25%)}.palette-editor input{width:100%;min-height:34px;box-sizing:border-box;border:1px solid var(--md-sys-color-outline-variant);border-radius:7px;padding:0 9px;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface);font:inherit}.palette-editor input:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:1px}.palette-editor__kind{padding:3px 7px;border-radius:999px;background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container);font-size:10px;font-weight:700;text-transform:uppercase}.palette-editor__actions{display:flex}.palette-editor__actions button{width:34px;height:34px;padding:5px}.palette-editor__error{grid-column:2 / -1;color:var(--md-sys-color-error);font-size:11px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:560px){.palette-editor__header{flex-direction:column}.palette-editor__row{grid-template-columns:28px minmax(0,1fr) auto}.palette-editor__kind{grid-column:2;justify-self:start}.palette-editor__actions{grid-column:3;grid-row:1 / span 2;flex-direction:column}.palette-editor__error{grid-column:1 / -1}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.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: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.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 });
2223
+ }
2224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ColorPaletteEditorComponent, decorators: [{
2225
+ type: Component,
2226
+ args: [{ selector: 'praxis-color-palette-editor', imports: [
2227
+ ReactiveFormsModule,
2228
+ MatButtonModule,
2229
+ MatIconModule,
2230
+ MatTooltipModule,
2231
+ PraxisIconDirective,
2232
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: `
2233
+ <section
2234
+ class="palette-editor"
2235
+ [attr.aria-label]="text('colorPalette.label', 'Palette colors')"
2236
+ >
2237
+ <div class="palette-editor__header">
2238
+ <div>
2239
+ <strong>{{ text('colorPalette.label', 'Palette colors') }}</strong>
2240
+ <p>
2241
+ {{
2242
+ text(
2243
+ 'colorPalette.hint',
2244
+ 'Build an ordered palette with CSS colors or governed token references.'
2245
+ )
2246
+ }}
2247
+ </p>
2248
+ </div>
2249
+ <button mat-stroked-button type="button" (click)="addColor()">
2250
+ <mat-icon [praxisIcon]="'mi:add'" />
2251
+ {{ text('colorPalette.add', 'Add color') }}
2252
+ </button>
2253
+ </div>
2254
+
2255
+ @if (colors().length === 0) {
2256
+ <div class="palette-editor__empty">
2257
+ {{
2258
+ text(
2259
+ 'colorPalette.empty',
2260
+ 'No custom colors. The selected preset or governed palette will be used.'
2261
+ )
2262
+ }}
2263
+ </div>
2264
+ } @else {
2265
+ <ol class="palette-editor__list">
2266
+ @for (color of colors(); track $index; let index = $index) {
2267
+ <li class="palette-editor__row" [class.invalid]="!isValid(color)">
2268
+ <span
2269
+ class="palette-editor__swatch"
2270
+ [style.background]="isValid(color) ? color : 'transparent'"
2271
+ aria-hidden="true"
2272
+ ></span>
2273
+ <label>
2274
+ <span class="sr-only"
2275
+ >{{ text('colorPalette.value', 'Color') }}
2276
+ {{ index + 1 }}</span
2277
+ >
2278
+ <input
2279
+ [value]="color"
2280
+ (input)="updateColor(index, $event)"
2281
+ [attr.aria-invalid]="!isValid(color)"
2282
+ />
2283
+ </label>
2284
+ <span class="palette-editor__kind">{{ kind(color) }}</span>
2285
+ <div class="palette-editor__actions">
2286
+ <button
2287
+ mat-icon-button
2288
+ type="button"
2289
+ (click)="move(index, -1)"
2290
+ [disabled]="index === 0"
2291
+ [matTooltip]="text('colorPalette.moveUp', 'Move up')"
2292
+ [attr.aria-label]="text('colorPalette.moveUp', 'Move up')"
2293
+ >
2294
+ <mat-icon [praxisIcon]="'mi:arrow_upward'" />
2295
+ </button>
2296
+ <button
2297
+ mat-icon-button
2298
+ type="button"
2299
+ (click)="move(index, 1)"
2300
+ [disabled]="index === colors().length - 1"
2301
+ [matTooltip]="text('colorPalette.moveDown', 'Move down')"
2302
+ [attr.aria-label]="text('colorPalette.moveDown', 'Move down')"
2303
+ >
2304
+ <mat-icon [praxisIcon]="'mi:arrow_downward'" />
2305
+ </button>
2306
+ <button
2307
+ mat-icon-button
2308
+ type="button"
2309
+ (click)="remove(index)"
2310
+ [matTooltip]="text('colorPalette.remove', 'Remove')"
2311
+ [attr.aria-label]="text('colorPalette.remove', 'Remove')"
2312
+ >
2313
+ <mat-icon [praxisIcon]="'mi:delete'" />
2314
+ </button>
2315
+ </div>
2316
+ @if (!isValid(color)) {
2317
+ <span class="palette-editor__error">
2318
+ {{
2319
+ text(
2320
+ 'colorPalette.invalid',
2321
+ 'Enter a valid CSS color or var(--token).'
2322
+ )
2323
+ }}
2324
+ </span>
2325
+ }
2326
+ </li>
2327
+ }
2328
+ </ol>
2329
+ }
2330
+ </section>
2331
+ `, styles: [":host{display:block;width:100%}.palette-editor{display:grid;gap:12px;width:100%;padding:12px;box-sizing:border-box;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface)}.palette-editor__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.palette-editor__header p{margin:4px 0 0;color:var(--md-sys-color-on-surface-variant);font-size:12px;line-height:1.4}.palette-editor__empty{padding:16px;border:1px dashed var(--md-sys-color-outline);border-radius:8px;color:var(--md-sys-color-on-surface-variant);text-align:center;font-size:12px}.palette-editor__list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.palette-editor__row{display:grid;grid-template-columns:28px minmax(120px,1fr) auto auto;align-items:center;gap:8px;min-height:44px;padding:6px 8px;border:1px solid var(--md-sys-color-outline-variant);border-radius:9px;background:var(--md-sys-color-surface-container-low)}.palette-editor__row.invalid{border-color:var(--md-sys-color-error)}.palette-editor__swatch{width:26px;height:26px;border:1px solid var(--md-sys-color-outline-variant);border-radius:7px;background-image:linear-gradient(45deg,var(--md-sys-color-surface-container-high) 25%,transparent 25%),linear-gradient(-45deg,var(--md-sys-color-surface-container-high) 25%,transparent 25%)}.palette-editor input{width:100%;min-height:34px;box-sizing:border-box;border:1px solid var(--md-sys-color-outline-variant);border-radius:7px;padding:0 9px;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface);font:inherit}.palette-editor input:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:1px}.palette-editor__kind{padding:3px 7px;border-radius:999px;background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container);font-size:10px;font-weight:700;text-transform:uppercase}.palette-editor__actions{display:flex}.palette-editor__actions button{width:34px;height:34px;padding:5px}.palette-editor__error{grid-column:2 / -1;color:var(--md-sys-color-error);font-size:11px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:560px){.palette-editor__header{flex-direction:column}.palette-editor__row{grid-template-columns:28px minmax(0,1fr) auto}.palette-editor__kind{grid-column:2;justify-self:start}.palette-editor__actions{grid-column:3;grid-row:1 / span 2;flex-direction:column}.palette-editor__error{grid-column:1 / -1}}\n"] }]
2332
+ }], ctorParameters: () => [], propDecorators: { formControl: [{ type: i0.Input, args: [{ isSignal: true, alias: "formControl", required: true }] }] } });
2333
+
2042
2334
  class DynamicEditorRendererComponent {
2043
2335
  dialog;
2044
2336
  iconPicker;
@@ -2190,6 +2482,8 @@ class DynamicEditorRendererComponent {
2190
2482
  rowClass(row) {
2191
2483
  if (this.isPresentationRulesRow(row))
2192
2484
  return 'row-presentation-rules';
2485
+ if (this.isColorPaletteRow(row))
2486
+ return 'row-color-palette';
2193
2487
  if (this.isPresentationChoiceRow(row))
2194
2488
  return 'row-presentation-choice';
2195
2489
  if (this.isGradientStopsRow(row))
@@ -2213,6 +2507,13 @@ class DynamicEditorRendererComponent {
2213
2507
  return (row.length > 0 &&
2214
2508
  row.every((field) => field._editorType === 'presentation-choice'));
2215
2509
  }
2510
+ isColorPaletteRow(row) {
2511
+ return (row.length > 0 &&
2512
+ row.every((field) => field._editorType === 'color-palette'));
2513
+ }
2514
+ canRenderColorPaletteRow(row) {
2515
+ return (this.ready && this.isColorPaletteRow(row) && this.hasControlsForRow(row));
2516
+ }
2216
2517
  isGradientStopsRow(row) {
2217
2518
  return (row.length === 3 &&
2218
2519
  row.every((field) => field._editorType === 'gradient-stop'));
@@ -2223,7 +2524,8 @@ class DynamicEditorRendererComponent {
2223
2524
  }
2224
2525
  gradientPreviewTitle(row = []) {
2225
2526
  const prefix = this.gradientPreviewI18nPrefix(row);
2226
- return (this.resolveEditorText(`${prefix}.preview.title`, 'Prévia ao vivo') ?? 'Prévia ao vivo');
2527
+ return (this.resolveEditorText(`${prefix}.preview.title`, 'Prévia ao vivo') ??
2528
+ 'Prévia ao vivo');
2227
2529
  }
2228
2530
  gradientPreviewDescription(row = []) {
2229
2531
  const prefix = this.gradientPreviewI18nPrefix(row);
@@ -2501,6 +2803,13 @@ class DynamicEditorRendererComponent {
2501
2803
  >
2502
2804
  </praxis-presentation-rules-builder>
2503
2805
  }
2806
+ } @else if (canRenderColorPaletteRow(row)) {
2807
+ @for (field of row; track field.name) {
2808
+ <praxis-color-palette-editor
2809
+ class="color-palette-field"
2810
+ [formControl]="controlFor(field.name)"
2811
+ />
2812
+ }
2504
2813
  } @else if (canRenderPresentationChoiceRow(row)) {
2505
2814
  @for (field of row; track field.name) {
2506
2815
  <praxis-presentation-choice-control
@@ -2524,7 +2833,9 @@ class DynamicEditorRendererComponent {
2524
2833
  <span
2525
2834
  class="gradient-stops-preview__radial"
2526
2835
  aria-hidden="true"
2527
- [style.background-image]="gradientPreviewBackground(row)"
2836
+ [style.background-image]="
2837
+ gradientPreviewBackground(row)
2838
+ "
2528
2839
  >
2529
2840
  <span></span>
2530
2841
  </span>
@@ -2532,7 +2843,9 @@ class DynamicEditorRendererComponent {
2532
2843
  <span
2533
2844
  class="gradient-stops-preview__stars"
2534
2845
  aria-hidden="true"
2535
- [style.background-image]="gradientPreviewBackground(row)"
2846
+ [style.background-image]="
2847
+ gradientPreviewBackground(row)
2848
+ "
2536
2849
  >★★★★★</span
2537
2850
  >
2538
2851
  }
@@ -2561,7 +2874,7 @@ class DynamicEditorRendererComponent {
2561
2874
  }
2562
2875
  </mat-accordion>
2563
2876
  </div>
2564
- `, isInline: true, styles: [":host{display:block}.editor-surface{padding:8px 0 2px;border-radius:12px;background:transparent}.section-accordion{display:block}.section-card{margin:6px 0 8px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);overflow:hidden}.section-card.mat-expanded{border-color:var(--md-sys-color-primary);box-shadow:0 2px 10px #0000000d}.section-card .mat-expansion-panel-body{background:var(--md-sys-color-surface-container-low)}.section-header{background:var(--md-sys-color-surface-container-low);border-bottom:1px solid var(--md-sys-color-outline-variant, var(--sicoob-stroke-medium));padding:2px 8px;min-height:32px;display:flex;align-items:center;color:var(--md-sys-color-on-surface)}.section-header .mat-expansion-panel-header-title,.section-header .mat-expansion-panel-header-description{display:flex;align-items:center;color:var(--md-sys-color-on-surface)}.section-title{display:inline-flex;align-items:center;gap:6px;font-weight:600;letter-spacing:.2px;color:var(--md-sys-color-on-surface);font-size:.9rem;line-height:1.2}.section-icon{color:var( --md-sys-color-primary, var(--md-sys-color-primary, #3f51b5) );opacity:.9}.editor-row{display:flex;gap:12px;align-items:flex-start;flex-wrap:wrap;margin-bottom:8px}.editor-row>praxis-field-shell{flex:1 1 100%;min-width:280px}.editor-row praxis-field-shell .mat-mdc-form-field{width:100%;margin-bottom:8px}.editor-row.row-inline>praxis-field-shell{flex:0 0 auto}.editor-row.row-2>praxis-field-shell{flex:1 1 calc(50% - 12px);min-width:260px}.editor-row.row-3>praxis-field-shell{flex:1 1 calc(33.333% - 12px);min-width:220px}.editor-row.row-gradient-stops>praxis-field-shell{flex:1 1 100%;min-width:0;width:100%}.editor-row.row-gradient-stops .editor-item>pdx-color-input{flex:1 1 auto;min-width:0}.gradient-stops-preview{display:flex;flex:1 1 100%;align-items:center;justify-content:space-between;gap:16px;min-width:0;padding:14px 16px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}.gradient-stops-preview__copy{display:grid;gap:3px;min-width:0}.gradient-stops-preview__copy strong{font:var(--md-sys-typescale-label-large-font, inherit);font-weight:650}.gradient-stops-preview__copy span{color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typescale-body-small-font, inherit);line-height:1.35}.gradient-stops-preview__stars{flex:0 0 auto;color:transparent;background-clip:text;-webkit-background-clip:text;font-size:30px;line-height:1;letter-spacing:2px}.gradient-stops-preview__radial{position:relative;flex:0 0 auto;width:76px;height:76px;border-radius:50%;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent)}.gradient-stops-preview__radial:before,.gradient-stops-preview__radial:after,.gradient-stops-preview__radial>span{content:\"\";position:absolute;inset:12px;border:1px dashed color-mix(in srgb,var(--md-sys-color-on-surface) 35%,transparent);border-radius:50%}.gradient-stops-preview__radial:after{inset:25px}.gradient-stops-preview__radial>span{inset:35px;border:0;background:var(--md-sys-color-on-surface)}@media(forced-colors:active){.gradient-stops-preview{border-color:CanvasText}.gradient-stops-preview__stars,.gradient-stops-preview__radial{color:CanvasText;background:none}}.editor-row>praxis-field-shell[data-field-name=controlType],.editor-row>praxis-field-shell[data-field-name=label],.editor-row>praxis-field-shell[data-field-name=placeholder]{flex:1 1 calc(50% - 12px);min-width:300px}.editor-row>praxis-presentation-rules-builder.presentation-rules-field{flex:1 1 100%;min-width:0}.editor-row>praxis-presentation-choice-control.presentation-choice-field{flex:1 1 100%;min-width:0}praxis-field-shell[data-field-name=label] .mdc-floating-label,praxis-field-shell[data-field-name=placeholder] .mdc-floating-label{font-weight:600}.editor-row>praxis-field-shell[data-field-name=prefix],.editor-row>praxis-field-shell[data-field-name=suffix]{flex:0 0 200px;min-width:160px}.editor-row>praxis-field-shell[data-field-name=prefixIcon],.editor-row>praxis-field-shell[data-field-name=suffixIcon],.editor-row>praxis-field-shell[data-field-name=prefixIconColor],.editor-row>praxis-field-shell[data-field-name=suffixIconColor]{flex:1 1 auto;min-width:160px}.editor-item{display:flex;align-items:flex-start;gap:4px;min-width:0;width:100%}.editor-item>ng-container,.editor-item>praxis-field-shell{flex:1;min-width:0}.actions-container{display:flex;align-items:center;gap:0;margin-top:12px;flex-shrink:0}.decorator-btn{position:static;color:var(--md-sys-color-primary, #3f51b5);opacity:.6;transform:scale(.8);width:32px;height:32px;line-height:32px;padding:0}.decorator-btn:hover{opacity:1}.icon-picker-btn,.hint-btn,.hint-btn.has-icon-picker{right:auto}.editor-row .mat-mdc-form-field-subscript-wrapper mat-hint{display:none!important}.editor-row .mat-mdc-form-field-subscript-wrapper mat-error{display:block!important}praxis-field-shell[data-field-name=showCharCount] .mdc-switch{transform:scale(1.05)}praxis-field-shell[data-field-name=showCharCount] .mat-mdc-slide-toggle{font-weight:600}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-hint{display:flex;align-items:center;gap:8px;background:var(--md-sys-color-tertiary-container);border:1px solid var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary-container);padding:8px 10px;border-radius:6px;line-height:1.3;white-space:normal}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-hint:before{content:\"\\26a0\\fe0f\";display:inline-block}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-subscript-wrapper{margin-top:6px;margin-bottom:10px;min-height:auto}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field{margin-bottom:16px}@media(max-width:520px){.editor-row,.editor-row.row-inline{gap:8px}.editor-item{flex-direction:column;gap:2px}.editor-row.row-inline>praxis-field-shell,.editor-row.row-2>praxis-field-shell,.editor-row.row-3>praxis-field-shell{flex:1 1 100%;min-width:0}.gradient-stops-preview{align-items:flex-start;flex-direction:column}.gradient-stops-preview__stars{font-size:27px}.actions-container{width:100%;justify-content:flex-end;margin-top:0}.editor-row.row-gradient-stops .editor-item{align-items:flex-start;flex-direction:row;gap:4px}.editor-row.row-gradient-stops .actions-container{width:auto;margin-top:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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", "canvasFocus"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i5$1.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i5$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i5$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PresentationRulesBuilderComponent, selector: "praxis-presentation-rules-builder" }, { kind: "component", type: PresentationChoiceControlComponent, selector: "praxis-presentation-choice-control", inputs: ["field"] }], encapsulation: i0.ViewEncapsulation.None });
2877
+ `, isInline: true, styles: [":host{display:block}.editor-surface{padding:8px 0 2px;border-radius:12px;background:transparent}.section-accordion{display:block}.section-card{margin:6px 0 8px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);overflow:hidden}.section-card.mat-expanded{border-color:var(--md-sys-color-primary);box-shadow:0 2px 10px #0000000d}.section-card .mat-expansion-panel-body{background:var(--md-sys-color-surface-container-low)}.section-header{background:var(--md-sys-color-surface-container-low);border-bottom:1px solid var(--md-sys-color-outline-variant, var(--sicoob-stroke-medium));padding:2px 8px;min-height:32px;display:flex;align-items:center;color:var(--md-sys-color-on-surface)}.section-header .mat-expansion-panel-header-title,.section-header .mat-expansion-panel-header-description{display:flex;align-items:center;color:var(--md-sys-color-on-surface)}.section-title{display:inline-flex;align-items:center;gap:6px;font-weight:600;letter-spacing:.2px;color:var(--md-sys-color-on-surface);font-size:.9rem;line-height:1.2}.section-icon{color:var( --md-sys-color-primary, var(--md-sys-color-primary, #3f51b5) );opacity:.9}.editor-row{display:flex;gap:12px;align-items:flex-start;flex-wrap:wrap;margin-bottom:8px}.editor-row>praxis-field-shell{flex:1 1 100%;min-width:280px}.editor-row praxis-field-shell .mat-mdc-form-field{width:100%;margin-bottom:8px}.editor-row.row-inline>praxis-field-shell{flex:0 0 auto}.editor-row.row-2>praxis-field-shell{flex:1 1 calc(50% - 12px);min-width:260px}.editor-row.row-3>praxis-field-shell{flex:1 1 calc(33.333% - 12px);min-width:220px}.editor-row.row-gradient-stops>praxis-field-shell{flex:1 1 100%;min-width:0;width:100%}.editor-row.row-gradient-stops .editor-item>pdx-color-input{flex:1 1 auto;min-width:0}.gradient-stops-preview{display:flex;flex:1 1 100%;align-items:center;justify-content:space-between;gap:16px;min-width:0;padding:14px 16px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}.gradient-stops-preview__copy{display:grid;gap:3px;min-width:0}.gradient-stops-preview__copy strong{font:var(--md-sys-typescale-label-large-font, inherit);font-weight:650}.gradient-stops-preview__copy span{color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typescale-body-small-font, inherit);line-height:1.35}.gradient-stops-preview__stars{flex:0 0 auto;color:transparent;background-clip:text;-webkit-background-clip:text;font-size:30px;line-height:1;letter-spacing:2px}.gradient-stops-preview__radial{position:relative;flex:0 0 auto;width:76px;height:76px;border-radius:50%;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent)}.gradient-stops-preview__radial:before,.gradient-stops-preview__radial:after,.gradient-stops-preview__radial>span{content:\"\";position:absolute;inset:12px;border:1px dashed color-mix(in srgb,var(--md-sys-color-on-surface) 35%,transparent);border-radius:50%}.gradient-stops-preview__radial:after{inset:25px}.gradient-stops-preview__radial>span{inset:35px;border:0;background:var(--md-sys-color-on-surface)}@media(forced-colors:active){.gradient-stops-preview{border-color:CanvasText}.gradient-stops-preview__stars,.gradient-stops-preview__radial{color:CanvasText;background:none}}.editor-row>praxis-field-shell[data-field-name=controlType],.editor-row>praxis-field-shell[data-field-name=label],.editor-row>praxis-field-shell[data-field-name=placeholder]{flex:1 1 calc(50% - 12px);min-width:300px}.editor-row>praxis-presentation-rules-builder.presentation-rules-field{flex:1 1 100%;min-width:0}.editor-row>praxis-color-palette-editor.color-palette-field{flex:1 1 100%;min-width:0}.editor-row>praxis-presentation-choice-control.presentation-choice-field{flex:1 1 100%;min-width:0}praxis-field-shell[data-field-name=label] .mdc-floating-label,praxis-field-shell[data-field-name=placeholder] .mdc-floating-label{font-weight:600}.editor-row>praxis-field-shell[data-field-name=prefix],.editor-row>praxis-field-shell[data-field-name=suffix]{flex:0 0 200px;min-width:160px}.editor-row>praxis-field-shell[data-field-name=prefixIcon],.editor-row>praxis-field-shell[data-field-name=suffixIcon],.editor-row>praxis-field-shell[data-field-name=prefixIconColor],.editor-row>praxis-field-shell[data-field-name=suffixIconColor]{flex:1 1 auto;min-width:160px}.editor-item{display:flex;align-items:flex-start;gap:4px;min-width:0;width:100%}.editor-item>ng-container,.editor-item>praxis-field-shell{flex:1;min-width:0}.actions-container{display:flex;align-items:center;gap:0;margin-top:12px;flex-shrink:0}.decorator-btn{position:static;color:var(--md-sys-color-primary, #3f51b5);opacity:.6;transform:scale(.8);width:32px;height:32px;line-height:32px;padding:0}.decorator-btn:hover{opacity:1}.icon-picker-btn,.hint-btn,.hint-btn.has-icon-picker{right:auto}.editor-row .mat-mdc-form-field-subscript-wrapper mat-hint{display:none!important}.editor-row .mat-mdc-form-field-subscript-wrapper mat-error{display:block!important}praxis-field-shell[data-field-name=showCharCount] .mdc-switch{transform:scale(1.05)}praxis-field-shell[data-field-name=showCharCount] .mat-mdc-slide-toggle{font-weight:600}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-hint{display:flex;align-items:center;gap:8px;background:var(--md-sys-color-tertiary-container);border:1px solid var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary-container);padding:8px 10px;border-radius:6px;line-height:1.3;white-space:normal}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-hint:before{content:\"\\26a0\\fe0f\";display:inline-block}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-subscript-wrapper{margin-top:6px;margin-bottom:10px;min-height:auto}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field{margin-bottom:16px}@media(max-width:520px){.editor-row,.editor-row.row-inline{gap:8px}.editor-item{flex-direction:column;gap:2px}.editor-row.row-inline>praxis-field-shell,.editor-row.row-2>praxis-field-shell,.editor-row.row-3>praxis-field-shell{flex:1 1 100%;min-width:0}.gradient-stops-preview{align-items:flex-start;flex-direction:column}.gradient-stops-preview__stars{font-size:27px}.actions-container{width:100%;justify-content:flex-end;margin-top:0}.editor-row.row-gradient-stops .editor-item{align-items:flex-start;flex-direction:row;gap:4px}.editor-row.row-gradient-stops .actions-container{width:auto;margin-top:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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", "canvasFocus"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i5$1.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i5$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i5$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PresentationRulesBuilderComponent, selector: "praxis-presentation-rules-builder" }, { kind: "component", type: PresentationChoiceControlComponent, selector: "praxis-presentation-choice-control", inputs: ["field"] }, { kind: "component", type: ColorPaletteEditorComponent, selector: "praxis-color-palette-editor", inputs: ["formControl"] }], encapsulation: i0.ViewEncapsulation.None });
2565
2878
  }
2566
2879
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DynamicEditorRendererComponent, decorators: [{
2567
2880
  type: Component,
@@ -2577,6 +2890,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2577
2890
  PraxisIconDirective,
2578
2891
  PresentationRulesBuilderComponent,
2579
2892
  PresentationChoiceControlComponent,
2893
+ ColorPaletteEditorComponent,
2580
2894
  ], encapsulation: ViewEncapsulation.None, template: `
2581
2895
  <ng-template
2582
2896
  #item
@@ -2656,6 +2970,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2656
2970
  >
2657
2971
  </praxis-presentation-rules-builder>
2658
2972
  }
2973
+ } @else if (canRenderColorPaletteRow(row)) {
2974
+ @for (field of row; track field.name) {
2975
+ <praxis-color-palette-editor
2976
+ class="color-palette-field"
2977
+ [formControl]="controlFor(field.name)"
2978
+ />
2979
+ }
2659
2980
  } @else if (canRenderPresentationChoiceRow(row)) {
2660
2981
  @for (field of row; track field.name) {
2661
2982
  <praxis-presentation-choice-control
@@ -2679,7 +3000,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2679
3000
  <span
2680
3001
  class="gradient-stops-preview__radial"
2681
3002
  aria-hidden="true"
2682
- [style.background-image]="gradientPreviewBackground(row)"
3003
+ [style.background-image]="
3004
+ gradientPreviewBackground(row)
3005
+ "
2683
3006
  >
2684
3007
  <span></span>
2685
3008
  </span>
@@ -2687,7 +3010,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2687
3010
  <span
2688
3011
  class="gradient-stops-preview__stars"
2689
3012
  aria-hidden="true"
2690
- [style.background-image]="gradientPreviewBackground(row)"
3013
+ [style.background-image]="
3014
+ gradientPreviewBackground(row)
3015
+ "
2691
3016
  >★★★★★</span
2692
3017
  >
2693
3018
  }
@@ -2716,7 +3041,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2716
3041
  }
2717
3042
  </mat-accordion>
2718
3043
  </div>
2719
- `, styles: [":host{display:block}.editor-surface{padding:8px 0 2px;border-radius:12px;background:transparent}.section-accordion{display:block}.section-card{margin:6px 0 8px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);overflow:hidden}.section-card.mat-expanded{border-color:var(--md-sys-color-primary);box-shadow:0 2px 10px #0000000d}.section-card .mat-expansion-panel-body{background:var(--md-sys-color-surface-container-low)}.section-header{background:var(--md-sys-color-surface-container-low);border-bottom:1px solid var(--md-sys-color-outline-variant, var(--sicoob-stroke-medium));padding:2px 8px;min-height:32px;display:flex;align-items:center;color:var(--md-sys-color-on-surface)}.section-header .mat-expansion-panel-header-title,.section-header .mat-expansion-panel-header-description{display:flex;align-items:center;color:var(--md-sys-color-on-surface)}.section-title{display:inline-flex;align-items:center;gap:6px;font-weight:600;letter-spacing:.2px;color:var(--md-sys-color-on-surface);font-size:.9rem;line-height:1.2}.section-icon{color:var( --md-sys-color-primary, var(--md-sys-color-primary, #3f51b5) );opacity:.9}.editor-row{display:flex;gap:12px;align-items:flex-start;flex-wrap:wrap;margin-bottom:8px}.editor-row>praxis-field-shell{flex:1 1 100%;min-width:280px}.editor-row praxis-field-shell .mat-mdc-form-field{width:100%;margin-bottom:8px}.editor-row.row-inline>praxis-field-shell{flex:0 0 auto}.editor-row.row-2>praxis-field-shell{flex:1 1 calc(50% - 12px);min-width:260px}.editor-row.row-3>praxis-field-shell{flex:1 1 calc(33.333% - 12px);min-width:220px}.editor-row.row-gradient-stops>praxis-field-shell{flex:1 1 100%;min-width:0;width:100%}.editor-row.row-gradient-stops .editor-item>pdx-color-input{flex:1 1 auto;min-width:0}.gradient-stops-preview{display:flex;flex:1 1 100%;align-items:center;justify-content:space-between;gap:16px;min-width:0;padding:14px 16px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}.gradient-stops-preview__copy{display:grid;gap:3px;min-width:0}.gradient-stops-preview__copy strong{font:var(--md-sys-typescale-label-large-font, inherit);font-weight:650}.gradient-stops-preview__copy span{color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typescale-body-small-font, inherit);line-height:1.35}.gradient-stops-preview__stars{flex:0 0 auto;color:transparent;background-clip:text;-webkit-background-clip:text;font-size:30px;line-height:1;letter-spacing:2px}.gradient-stops-preview__radial{position:relative;flex:0 0 auto;width:76px;height:76px;border-radius:50%;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent)}.gradient-stops-preview__radial:before,.gradient-stops-preview__radial:after,.gradient-stops-preview__radial>span{content:\"\";position:absolute;inset:12px;border:1px dashed color-mix(in srgb,var(--md-sys-color-on-surface) 35%,transparent);border-radius:50%}.gradient-stops-preview__radial:after{inset:25px}.gradient-stops-preview__radial>span{inset:35px;border:0;background:var(--md-sys-color-on-surface)}@media(forced-colors:active){.gradient-stops-preview{border-color:CanvasText}.gradient-stops-preview__stars,.gradient-stops-preview__radial{color:CanvasText;background:none}}.editor-row>praxis-field-shell[data-field-name=controlType],.editor-row>praxis-field-shell[data-field-name=label],.editor-row>praxis-field-shell[data-field-name=placeholder]{flex:1 1 calc(50% - 12px);min-width:300px}.editor-row>praxis-presentation-rules-builder.presentation-rules-field{flex:1 1 100%;min-width:0}.editor-row>praxis-presentation-choice-control.presentation-choice-field{flex:1 1 100%;min-width:0}praxis-field-shell[data-field-name=label] .mdc-floating-label,praxis-field-shell[data-field-name=placeholder] .mdc-floating-label{font-weight:600}.editor-row>praxis-field-shell[data-field-name=prefix],.editor-row>praxis-field-shell[data-field-name=suffix]{flex:0 0 200px;min-width:160px}.editor-row>praxis-field-shell[data-field-name=prefixIcon],.editor-row>praxis-field-shell[data-field-name=suffixIcon],.editor-row>praxis-field-shell[data-field-name=prefixIconColor],.editor-row>praxis-field-shell[data-field-name=suffixIconColor]{flex:1 1 auto;min-width:160px}.editor-item{display:flex;align-items:flex-start;gap:4px;min-width:0;width:100%}.editor-item>ng-container,.editor-item>praxis-field-shell{flex:1;min-width:0}.actions-container{display:flex;align-items:center;gap:0;margin-top:12px;flex-shrink:0}.decorator-btn{position:static;color:var(--md-sys-color-primary, #3f51b5);opacity:.6;transform:scale(.8);width:32px;height:32px;line-height:32px;padding:0}.decorator-btn:hover{opacity:1}.icon-picker-btn,.hint-btn,.hint-btn.has-icon-picker{right:auto}.editor-row .mat-mdc-form-field-subscript-wrapper mat-hint{display:none!important}.editor-row .mat-mdc-form-field-subscript-wrapper mat-error{display:block!important}praxis-field-shell[data-field-name=showCharCount] .mdc-switch{transform:scale(1.05)}praxis-field-shell[data-field-name=showCharCount] .mat-mdc-slide-toggle{font-weight:600}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-hint{display:flex;align-items:center;gap:8px;background:var(--md-sys-color-tertiary-container);border:1px solid var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary-container);padding:8px 10px;border-radius:6px;line-height:1.3;white-space:normal}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-hint:before{content:\"\\26a0\\fe0f\";display:inline-block}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-subscript-wrapper{margin-top:6px;margin-bottom:10px;min-height:auto}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field{margin-bottom:16px}@media(max-width:520px){.editor-row,.editor-row.row-inline{gap:8px}.editor-item{flex-direction:column;gap:2px}.editor-row.row-inline>praxis-field-shell,.editor-row.row-2>praxis-field-shell,.editor-row.row-3>praxis-field-shell{flex:1 1 100%;min-width:0}.gradient-stops-preview{align-items:flex-start;flex-direction:column}.gradient-stops-preview__stars{font-size:27px}.actions-container{width:100%;justify-content:flex-end;margin-top:0}.editor-row.row-gradient-stops .editor-item{align-items:flex-start;flex-direction:row;gap:4px}.editor-row.row-gradient-stops .actions-container{width:auto;margin-top:12px}}\n"] }]
3044
+ `, styles: [":host{display:block}.editor-surface{padding:8px 0 2px;border-radius:12px;background:transparent}.section-accordion{display:block}.section-card{margin:6px 0 8px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);overflow:hidden}.section-card.mat-expanded{border-color:var(--md-sys-color-primary);box-shadow:0 2px 10px #0000000d}.section-card .mat-expansion-panel-body{background:var(--md-sys-color-surface-container-low)}.section-header{background:var(--md-sys-color-surface-container-low);border-bottom:1px solid var(--md-sys-color-outline-variant, var(--sicoob-stroke-medium));padding:2px 8px;min-height:32px;display:flex;align-items:center;color:var(--md-sys-color-on-surface)}.section-header .mat-expansion-panel-header-title,.section-header .mat-expansion-panel-header-description{display:flex;align-items:center;color:var(--md-sys-color-on-surface)}.section-title{display:inline-flex;align-items:center;gap:6px;font-weight:600;letter-spacing:.2px;color:var(--md-sys-color-on-surface);font-size:.9rem;line-height:1.2}.section-icon{color:var( --md-sys-color-primary, var(--md-sys-color-primary, #3f51b5) );opacity:.9}.editor-row{display:flex;gap:12px;align-items:flex-start;flex-wrap:wrap;margin-bottom:8px}.editor-row>praxis-field-shell{flex:1 1 100%;min-width:280px}.editor-row praxis-field-shell .mat-mdc-form-field{width:100%;margin-bottom:8px}.editor-row.row-inline>praxis-field-shell{flex:0 0 auto}.editor-row.row-2>praxis-field-shell{flex:1 1 calc(50% - 12px);min-width:260px}.editor-row.row-3>praxis-field-shell{flex:1 1 calc(33.333% - 12px);min-width:220px}.editor-row.row-gradient-stops>praxis-field-shell{flex:1 1 100%;min-width:0;width:100%}.editor-row.row-gradient-stops .editor-item>pdx-color-input{flex:1 1 auto;min-width:0}.gradient-stops-preview{display:flex;flex:1 1 100%;align-items:center;justify-content:space-between;gap:16px;min-width:0;padding:14px 16px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}.gradient-stops-preview__copy{display:grid;gap:3px;min-width:0}.gradient-stops-preview__copy strong{font:var(--md-sys-typescale-label-large-font, inherit);font-weight:650}.gradient-stops-preview__copy span{color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typescale-body-small-font, inherit);line-height:1.35}.gradient-stops-preview__stars{flex:0 0 auto;color:transparent;background-clip:text;-webkit-background-clip:text;font-size:30px;line-height:1;letter-spacing:2px}.gradient-stops-preview__radial{position:relative;flex:0 0 auto;width:76px;height:76px;border-radius:50%;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent)}.gradient-stops-preview__radial:before,.gradient-stops-preview__radial:after,.gradient-stops-preview__radial>span{content:\"\";position:absolute;inset:12px;border:1px dashed color-mix(in srgb,var(--md-sys-color-on-surface) 35%,transparent);border-radius:50%}.gradient-stops-preview__radial:after{inset:25px}.gradient-stops-preview__radial>span{inset:35px;border:0;background:var(--md-sys-color-on-surface)}@media(forced-colors:active){.gradient-stops-preview{border-color:CanvasText}.gradient-stops-preview__stars,.gradient-stops-preview__radial{color:CanvasText;background:none}}.editor-row>praxis-field-shell[data-field-name=controlType],.editor-row>praxis-field-shell[data-field-name=label],.editor-row>praxis-field-shell[data-field-name=placeholder]{flex:1 1 calc(50% - 12px);min-width:300px}.editor-row>praxis-presentation-rules-builder.presentation-rules-field{flex:1 1 100%;min-width:0}.editor-row>praxis-color-palette-editor.color-palette-field{flex:1 1 100%;min-width:0}.editor-row>praxis-presentation-choice-control.presentation-choice-field{flex:1 1 100%;min-width:0}praxis-field-shell[data-field-name=label] .mdc-floating-label,praxis-field-shell[data-field-name=placeholder] .mdc-floating-label{font-weight:600}.editor-row>praxis-field-shell[data-field-name=prefix],.editor-row>praxis-field-shell[data-field-name=suffix]{flex:0 0 200px;min-width:160px}.editor-row>praxis-field-shell[data-field-name=prefixIcon],.editor-row>praxis-field-shell[data-field-name=suffixIcon],.editor-row>praxis-field-shell[data-field-name=prefixIconColor],.editor-row>praxis-field-shell[data-field-name=suffixIconColor]{flex:1 1 auto;min-width:160px}.editor-item{display:flex;align-items:flex-start;gap:4px;min-width:0;width:100%}.editor-item>ng-container,.editor-item>praxis-field-shell{flex:1;min-width:0}.actions-container{display:flex;align-items:center;gap:0;margin-top:12px;flex-shrink:0}.decorator-btn{position:static;color:var(--md-sys-color-primary, #3f51b5);opacity:.6;transform:scale(.8);width:32px;height:32px;line-height:32px;padding:0}.decorator-btn:hover{opacity:1}.icon-picker-btn,.hint-btn,.hint-btn.has-icon-picker{right:auto}.editor-row .mat-mdc-form-field-subscript-wrapper mat-hint{display:none!important}.editor-row .mat-mdc-form-field-subscript-wrapper mat-error{display:block!important}praxis-field-shell[data-field-name=showCharCount] .mdc-switch{transform:scale(1.05)}praxis-field-shell[data-field-name=showCharCount] .mat-mdc-slide-toggle{font-weight:600}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-hint{display:flex;align-items:center;gap:8px;background:var(--md-sys-color-tertiary-container);border:1px solid var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary-container);padding:8px 10px;border-radius:6px;line-height:1.3;white-space:normal}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-hint:before{content:\"\\26a0\\fe0f\";display:inline-block}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field-subscript-wrapper{margin-top:6px;margin-bottom:10px;min-height:auto}praxis-field-shell[data-field-name=controlType] .mat-mdc-form-field{margin-bottom:16px}@media(max-width:520px){.editor-row,.editor-row.row-inline{gap:8px}.editor-item{flex-direction:column;gap:2px}.editor-row.row-inline>praxis-field-shell,.editor-row.row-2>praxis-field-shell,.editor-row.row-3>praxis-field-shell{flex:1 1 100%;min-width:0}.gradient-stops-preview{align-items:flex-start;flex-direction:column}.gradient-stops-preview__stars{font-size:27px}.actions-container{width:100%;justify-content:flex-end;margin-top:0}.editor-row.row-gradient-stops .editor-item{align-items:flex-start;flex-direction:row;gap:4px}.editor-row.row-gradient-stops .actions-container{width:auto;margin-top:12px}}\n"] }]
2720
3045
  }], ctorParameters: () => [{ type: i1$1.MatDialog }, { type: i2$2.IconPickerService }, { type: i2$2.PraxisI18nService, decorators: [{
2721
3046
  type: Optional
2722
3047
  }] }], propDecorators: { properties: [{
@@ -6475,83 +6800,376 @@ const phoneInputProperties = [
6475
6800
  { name: 'clearButton.showOnlyWhenFilled', label: 'Clear: só quando preenchido', editorType: 'checkbox', group: 'Ações', hint: 'Exibe o botão apenas quando houver valor.' },
6476
6801
  ];
6477
6802
 
6803
+ const colorPaletteValidator = (control) => {
6804
+ const values = Array.isArray(control.value) ? control.value : [];
6805
+ const invalidIndexes = values
6806
+ .map((value, index) => ({ value, index }))
6807
+ .filter(({ value }) => !isValidCssColor(value))
6808
+ .map(({ index }) => index);
6809
+ return invalidIndexes.length ? { colorPalette: { invalidIndexes } } : null;
6810
+ };
6811
+ const PURPOSE_OPTIONS = [
6812
+ { value: 'text', text: 'Texto' },
6813
+ { value: 'fill', text: 'Preenchimento' },
6814
+ { value: 'chart', text: 'Gráfico' },
6815
+ { value: 'state', text: 'Estado' },
6816
+ { value: 'surface', text: 'Superfície' },
6817
+ { value: 'border', text: 'Borda' },
6818
+ { value: 'focus', text: 'Foco' },
6819
+ ];
6820
+ /** Common persisted reference; the palette body remains owned by praxis-config-starter. */
6821
+ function governedColorPaletteProperties() {
6822
+ return [
6823
+ {
6824
+ name: 'governedPaletteRef.paletteKey',
6825
+ label: 'Paleta governada',
6826
+ editorType: 'text',
6827
+ group: 'Governança',
6828
+ hint: 'Chave canônica da projeção publicada no Praxis Config.',
6829
+ },
6830
+ {
6831
+ name: 'governedPaletteRef.version',
6832
+ label: 'Versão fixada',
6833
+ editorType: 'number',
6834
+ group: 'Governança',
6835
+ hint: 'Opcional. Sem versão, o runtime acompanha a última publicação.',
6836
+ },
6837
+ {
6838
+ name: 'governedPaletteRef.etag',
6839
+ label: 'ETag esperado',
6840
+ editorType: 'text',
6841
+ group: 'Governança',
6842
+ hint: 'Opcional. Impede materialização quando a identidade publicada divergir.',
6843
+ },
6844
+ {
6845
+ name: 'governedPaletteRef.purposes',
6846
+ label: 'Finalidades autorizadas',
6847
+ editorType: 'multi-select',
6848
+ group: 'Governança',
6849
+ options: PURPOSE_OPTIONS,
6850
+ hint: 'Filtra tokens por uso sem copiar a paleta para o metadata do componente.',
6851
+ },
6852
+ ];
6853
+ }
6854
+
6478
6855
  const colorInputProperties = [
6479
6856
  // Geral
6480
6857
  { name: 'label', label: 'Label', editorType: 'text', group: 'Geral' },
6481
- { name: 'defaultValue', label: 'Valor padrão', editorType: 'text', group: 'Geral', hint: 'Ex.: #rrggbb, rgb()/rgba().' },
6482
- { name: 'placeholder', label: 'Placeholder', editorType: 'text', group: 'Geral' },
6483
- { name: 'hint', label: 'Hint', editorType: 'text', group: 'Geral', hint: 'Texto de ajuda exibido abaixo do campo.' },
6484
- { name: 'prefix', label: 'Texto (prefixo)', editorType: 'text', group: 'Geral' },
6485
- { name: 'suffix', label: 'Texto (sufixo)', editorType: 'text', group: 'Geral' },
6858
+ {
6859
+ name: 'defaultValue',
6860
+ label: 'Valor padrão',
6861
+ editorType: 'text',
6862
+ group: 'Geral',
6863
+ hint: 'Ex.: #rrggbb, rgb()/rgba().',
6864
+ },
6865
+ {
6866
+ name: 'placeholder',
6867
+ label: 'Placeholder',
6868
+ editorType: 'text',
6869
+ group: 'Geral',
6870
+ },
6871
+ {
6872
+ name: 'hint',
6873
+ label: 'Hint',
6874
+ editorType: 'text',
6875
+ group: 'Geral',
6876
+ hint: 'Texto de ajuda exibido abaixo do campo.',
6877
+ },
6878
+ {
6879
+ name: 'prefix',
6880
+ label: 'Texto (prefixo)',
6881
+ editorType: 'text',
6882
+ group: 'Geral',
6883
+ },
6884
+ {
6885
+ name: 'suffix',
6886
+ label: 'Texto (sufixo)',
6887
+ editorType: 'text',
6888
+ group: 'Geral',
6889
+ },
6486
6890
  // Ícones
6487
- { name: 'prefixIcon', label: 'Ícone (prefixo)', editorType: 'text', group: 'Ícones', hint: "Material Symbols (ex.: mi:palette). Use o seletor ao lado para buscar." },
6488
- { name: 'prefixIconColor', label: 'Cor do ícone (prefixo)', editorType: 'color', group: 'Ícones', hint: 'Tema (primary/accent/warn) ou cor CSS (#496ddb, rgb(73,109,219), red).' },
6489
- { name: 'suffixIcon', label: 'Ícone (sufixo)', editorType: 'text', group: 'Ícones', hint: "Material Symbols (ex.: mi:info). Use o seletor ao lado para buscar." },
6490
- { name: 'suffixIconColor', label: 'Cor do ícone (sufixo)', editorType: 'color', group: 'Ícones', hint: 'Tema (primary/accent/warn) ou cor CSS (#496ddb, rgb(73,109,219), red).' },
6891
+ {
6892
+ name: 'prefixIcon',
6893
+ label: 'Ícone (prefixo)',
6894
+ editorType: 'text',
6895
+ group: 'Ícones',
6896
+ hint: 'Material Symbols (ex.: mi:palette). Use o seletor ao lado para buscar.',
6897
+ },
6898
+ {
6899
+ name: 'prefixIconColor',
6900
+ label: 'Cor do ícone (prefixo)',
6901
+ editorType: 'color',
6902
+ group: 'Ícones',
6903
+ hint: 'Tema (primary/accent/warn) ou cor CSS (#496ddb, rgb(73,109,219), red).',
6904
+ },
6905
+ {
6906
+ name: 'suffixIcon',
6907
+ label: 'Ícone (sufixo)',
6908
+ editorType: 'text',
6909
+ group: 'Ícones',
6910
+ hint: 'Material Symbols (ex.: mi:info). Use o seletor ao lado para buscar.',
6911
+ },
6912
+ {
6913
+ name: 'suffixIconColor',
6914
+ label: 'Cor do ícone (sufixo)',
6915
+ editorType: 'color',
6916
+ group: 'Ícones',
6917
+ hint: 'Tema (primary/accent/warn) ou cor CSS (#496ddb, rgb(73,109,219), red).',
6918
+ },
6491
6919
  // Dados/Opções
6492
- { name: 'palettePreset', label: 'Paleta (preset)', editorType: 'select', group: 'Dados/Opções', options: [
6920
+ {
6921
+ name: 'palettePreset',
6922
+ label: 'Paleta (preset)',
6923
+ editorType: 'select',
6924
+ group: 'Dados/Opções',
6925
+ options: [
6493
6926
  { value: 'material', text: 'Material' },
6494
6927
  { value: 'office', text: 'Office' },
6495
6928
  { value: 'basic', text: 'Básico' },
6496
- ] },
6497
- { name: 'paletteColors', label: 'Paleta: cores (JSON ou linhas)', editorType: 'textarea', group: 'Dados/Opções', hint: "JSON array ou uma cor por linha (#hex ou rgba/hsl)." },
6498
- { name: 'columns', label: 'Paleta: colunas', editorType: 'number', group: 'Dados/Opções', defaultValue: 8, hint: 'Quantidade de colunas exibidas.' },
6929
+ ],
6930
+ },
6931
+ {
6932
+ name: 'paletteColors',
6933
+ label: 'Cores da paleta',
6934
+ editorType: 'color-palette',
6935
+ group: 'Dados/Opções',
6936
+ hint: 'Monte uma paleta ordenada com cores CSS ou referências var(--token).',
6937
+ validators: [colorPaletteValidator],
6938
+ },
6939
+ {
6940
+ name: 'columns',
6941
+ label: 'Paleta: colunas',
6942
+ editorType: 'number',
6943
+ group: 'Dados/Opções',
6944
+ defaultValue: 8,
6945
+ hint: 'Quantidade de colunas exibidas.',
6946
+ },
6947
+ ...governedColorPaletteProperties(),
6499
6948
  // Formato/Comportamento
6500
- { name: 'popupWidth', label: 'Popup width (px ou CSS)', editorType: 'text', group: 'Formato/Comportamento', defaultValue: '320', hint: 'Ex.: 320 ou 20rem.' },
6501
- { name: 'preview', label: 'Mostrar preview', editorType: 'checkbox', group: 'Formato/Comportamento', hint: 'Exibe cor selecionada.' },
6502
- { name: 'showRecent', label: 'Mostrar recentes', editorType: 'checkbox', group: 'Formato/Comportamento', hint: 'Exibe cores usadas recentemente.' },
6503
- { name: 'maxRecent', label: 'Qtd. de recentes', editorType: 'number', group: 'Formato/Comportamento', defaultValue: 12, hint: 'Limite de cores recentes.' },
6504
- { name: 'showNativeOption', label: 'Mostrar seletor nativo', editorType: 'checkbox', group: 'Formato/Comportamento', hint: 'Adiciona input color nativo como opção.' },
6505
- { name: 'readonly', label: 'Somente leitura', editorType: 'checkbox', group: 'Formato/Comportamento' },
6506
- { name: 'disabled', label: 'Desabilitado', editorType: 'checkbox', group: 'Formato/Comportamento' },
6507
- { name: 'autoFocus', label: 'Focar automaticamente', editorType: 'checkbox', group: 'Formato/Comportamento' },
6949
+ {
6950
+ name: 'popupWidth',
6951
+ label: 'Popup width (px ou CSS)',
6952
+ editorType: 'text',
6953
+ group: 'Formato/Comportamento',
6954
+ defaultValue: '320',
6955
+ hint: 'Ex.: 320 ou 20rem.',
6956
+ },
6957
+ {
6958
+ name: 'preview',
6959
+ label: 'Mostrar preview',
6960
+ editorType: 'checkbox',
6961
+ group: 'Formato/Comportamento',
6962
+ hint: 'Exibe cor selecionada.',
6963
+ },
6964
+ {
6965
+ name: 'showRecent',
6966
+ label: 'Mostrar recentes',
6967
+ editorType: 'checkbox',
6968
+ group: 'Formato/Comportamento',
6969
+ hint: 'Exibe cores usadas recentemente.',
6970
+ },
6971
+ {
6972
+ name: 'maxRecent',
6973
+ label: 'Qtd. de recentes',
6974
+ editorType: 'number',
6975
+ group: 'Formato/Comportamento',
6976
+ defaultValue: 12,
6977
+ hint: 'Limite de cores recentes.',
6978
+ },
6979
+ {
6980
+ name: 'showNativeOption',
6981
+ label: 'Mostrar seletor nativo',
6982
+ editorType: 'checkbox',
6983
+ group: 'Formato/Comportamento',
6984
+ hint: 'Adiciona input color nativo como opção.',
6985
+ },
6986
+ {
6987
+ name: 'readonly',
6988
+ label: 'Somente leitura',
6989
+ editorType: 'checkbox',
6990
+ group: 'Formato/Comportamento',
6991
+ },
6992
+ {
6993
+ name: 'disabled',
6994
+ label: 'Desabilitado',
6995
+ editorType: 'checkbox',
6996
+ group: 'Formato/Comportamento',
6997
+ },
6998
+ {
6999
+ name: 'autoFocus',
7000
+ label: 'Focar automaticamente',
7001
+ editorType: 'checkbox',
7002
+ group: 'Formato/Comportamento',
7003
+ },
6508
7004
  // Validação
6509
- { name: 'required', label: 'Obrigatório', editorType: 'checkbox', group: 'Validação' },
6510
- { name: 'validators.requiredMessage', label: 'Mensagem: obrigatório', editorType: 'text', group: 'Validação' },
7005
+ {
7006
+ name: 'required',
7007
+ label: 'Obrigatório',
7008
+ editorType: 'checkbox',
7009
+ group: 'Validação',
7010
+ },
7011
+ {
7012
+ name: 'validators.requiredMessage',
7013
+ label: 'Mensagem: obrigatório',
7014
+ editorType: 'text',
7015
+ group: 'Validação',
7016
+ },
6511
7017
  // Ações
6512
7018
  // (sem ações adicionais)
6513
7019
  // Aparência/Material
6514
- { name: 'materialDesign.appearance', label: 'Aparência', editorType: 'select', group: 'Aparência/Material', options: [
7020
+ {
7021
+ name: 'materialDesign.appearance',
7022
+ label: 'Aparência',
7023
+ editorType: 'select',
7024
+ group: 'Aparência/Material',
7025
+ options: [
6515
7026
  { value: 'fill', text: 'Fill' },
6516
7027
  { value: 'outline', text: 'Outline' },
6517
- ] },
6518
- { name: 'materialDesign.color', label: 'Cor do tema', editorType: 'select', group: 'Aparência/Material', options: [
7028
+ ],
7029
+ },
7030
+ {
7031
+ name: 'materialDesign.color',
7032
+ label: 'Cor do tema',
7033
+ editorType: 'select',
7034
+ group: 'Aparência/Material',
7035
+ options: [
6519
7036
  { value: 'primary', text: 'Primária' },
6520
7037
  { value: 'accent', text: 'Acento' },
6521
7038
  { value: 'warn', text: 'Alerta' },
6522
- ] },
6523
- { name: 'materialDesign.floatLabel', label: 'Comportamento do label', editorType: 'select', group: 'Aparência/Material', options: [
7039
+ ],
7040
+ },
7041
+ {
7042
+ name: 'materialDesign.floatLabel',
7043
+ label: 'Comportamento do label',
7044
+ editorType: 'select',
7045
+ group: 'Aparência/Material',
7046
+ options: [
6524
7047
  { value: 'auto', text: 'Auto' },
6525
7048
  { value: 'always', text: 'Sempre' },
6526
- ] },
6527
- { name: 'materialDesign.subscriptSizing', label: 'Subscript sizing', editorType: 'select', group: 'Aparência/Material', options: [
7049
+ ],
7050
+ },
7051
+ {
7052
+ name: 'materialDesign.subscriptSizing',
7053
+ label: 'Subscript sizing',
7054
+ editorType: 'select',
7055
+ group: 'Aparência/Material',
7056
+ options: [
6528
7057
  { value: 'fixed', text: 'Fixo' },
6529
7058
  { value: 'dynamic', text: 'Dinâmico' },
6530
- ] },
6531
- { name: 'materialDesign.hideRequiredMarker', label: 'Ocultar * obrigatório', editorType: 'checkbox', group: 'Aparência/Material' },
7059
+ ],
7060
+ },
7061
+ {
7062
+ name: 'materialDesign.hideRequiredMarker',
7063
+ label: 'Ocultar * obrigatório',
7064
+ editorType: 'checkbox',
7065
+ group: 'Aparência/Material',
7066
+ },
6532
7067
  // Acessibilidade
6533
- { name: 'ariaLabel', label: 'ARIA label', editorType: 'text', group: 'Acessibilidade', hint: 'Use quando não houver label visível.' },
6534
- { name: 'ariaDescribedby', label: 'ARIA describedby', editorType: 'text', group: 'Acessibilidade', hint: 'IDs de ajuda/erro.' },
6535
- { name: 'ariaLabelledby', label: 'ARIA labelledby', editorType: 'text', group: 'Acessibilidade', hint: 'ID de elemento que atua como label.' },
7068
+ {
7069
+ name: 'ariaLabel',
7070
+ label: 'ARIA label',
7071
+ editorType: 'text',
7072
+ group: 'Acessibilidade',
7073
+ hint: 'Use quando não houver label visível.',
7074
+ },
7075
+ {
7076
+ name: 'ariaDescribedby',
7077
+ label: 'ARIA describedby',
7078
+ editorType: 'text',
7079
+ group: 'Acessibilidade',
7080
+ hint: 'IDs de ajuda/erro.',
7081
+ },
7082
+ {
7083
+ name: 'ariaLabelledby',
7084
+ label: 'ARIA labelledby',
7085
+ editorType: 'text',
7086
+ group: 'Acessibilidade',
7087
+ hint: 'ID de elemento que atua como label.',
7088
+ },
6536
7089
  // Ações
6537
- { name: 'clearButton.enabled', label: 'Clear: habilitar', editorType: 'checkbox', group: 'Ações', hint: 'Mostra botão para limpar valor.' },
6538
- { name: 'clearButton.icon', label: 'Clear: ícone', editorType: 'text', group: 'Ações', hint: "Material Symbols (ex.: mi:clear). Use o seletor ao lado para buscar." },
6539
- { name: 'clearButton.iconColor', label: 'Clear: cor do ícone', editorType: 'color', group: 'Ações', hint: 'primary/accent/warn ou cor CSS (ex.: #496ddb, rgb(73,109,219), red)' },
6540
- { name: 'clearButton.tooltip', label: 'Clear: tooltip', editorType: 'text', group: 'Ações' },
6541
- { name: 'clearButton.ariaLabel', label: 'Clear: aria-label', editorType: 'text', group: 'Ações', hint: 'Obrigatório quando não houver texto visível.' },
6542
- { name: 'clearButton.showOnlyWhenFilled', label: 'Clear: só quando preenchido', editorType: 'checkbox', group: 'Ações', hint: 'Exibe o botão apenas quando houver valor.' },
7090
+ {
7091
+ name: 'clearButton.enabled',
7092
+ label: 'Clear: habilitar',
7093
+ editorType: 'checkbox',
7094
+ group: 'Ações',
7095
+ hint: 'Mostra botão para limpar valor.',
7096
+ },
7097
+ {
7098
+ name: 'clearButton.icon',
7099
+ label: 'Clear: ícone',
7100
+ editorType: 'text',
7101
+ group: 'Ações',
7102
+ hint: 'Material Symbols (ex.: mi:clear). Use o seletor ao lado para buscar.',
7103
+ },
7104
+ {
7105
+ name: 'clearButton.iconColor',
7106
+ label: 'Clear: cor do ícone',
7107
+ editorType: 'color',
7108
+ group: 'Ações',
7109
+ hint: 'primary/accent/warn ou cor CSS (ex.: #496ddb, rgb(73,109,219), red)',
7110
+ },
7111
+ {
7112
+ name: 'clearButton.tooltip',
7113
+ label: 'Clear: tooltip',
7114
+ editorType: 'text',
7115
+ group: 'Ações',
7116
+ },
7117
+ {
7118
+ name: 'clearButton.ariaLabel',
7119
+ label: 'Clear: aria-label',
7120
+ editorType: 'text',
7121
+ group: 'Ações',
7122
+ hint: 'Obrigatório quando não houver texto visível.',
7123
+ },
7124
+ {
7125
+ name: 'clearButton.showOnlyWhenFilled',
7126
+ label: 'Clear: só quando preenchido',
7127
+ editorType: 'checkbox',
7128
+ group: 'Ações',
7129
+ hint: 'Exibe o botão apenas quando houver valor.',
7130
+ },
6543
7131
  ];
6544
7132
 
6545
7133
  // ColorPicker v2 property editor (pdx-color-picker)
6546
7134
  const colorPickerProperties = [
6547
7135
  // Geral
6548
7136
  { name: 'label', label: 'Label', editorType: 'text', group: 'Geral' },
6549
- { name: 'defaultValue', label: 'Valor padrão', editorType: 'text', group: 'Geral', hint: 'Ex.: #rrggbb, rgba(255,0,0,0.5) ou hsl().' },
6550
- { name: 'hint', label: 'Hint', editorType: 'text', group: 'Geral', hint: 'Texto de ajuda exibido abaixo do campo.' },
7137
+ {
7138
+ name: 'defaultValue',
7139
+ label: 'Valor padrão',
7140
+ editorType: 'text',
7141
+ group: 'Geral',
7142
+ hint: 'Ex.: #rrggbb, rgba(255,0,0,0.5) ou hsl().',
7143
+ },
7144
+ {
7145
+ name: 'hint',
7146
+ label: 'Hint',
7147
+ editorType: 'text',
7148
+ group: 'Geral',
7149
+ hint: 'Texto de ajuda exibido abaixo do campo.',
7150
+ },
6551
7151
  // Ícones
6552
- { name: 'icon', label: 'Ícone', editorType: 'text', group: 'Ícones', hint: "Material Symbols (ex.: mi:palette). Use o seletor ao lado para buscar." },
6553
- { name: 'svgIcon', label: 'SVG icon', editorType: 'text', group: 'Ícones', hint: 'Nome do ícone SVG registrado.' },
6554
- { name: 'iconClass', label: 'Icon class (JSON/string)', editorType: 'textarea', group: 'Ícones', hint: 'string | string[] | Record<string, boolean>.' },
7152
+ {
7153
+ name: 'icon',
7154
+ label: 'Ícone',
7155
+ editorType: 'text',
7156
+ group: 'Ícones',
7157
+ hint: 'Material Symbols (ex.: mi:palette). Use o seletor ao lado para buscar.',
7158
+ },
7159
+ {
7160
+ name: 'svgIcon',
7161
+ label: 'SVG icon',
7162
+ editorType: 'text',
7163
+ group: 'Ícones',
7164
+ hint: 'Nome do ícone SVG registrado.',
7165
+ },
7166
+ {
7167
+ name: 'iconClass',
7168
+ label: 'Icon class (JSON/string)',
7169
+ editorType: 'textarea',
7170
+ group: 'Ícones',
7171
+ hint: 'string | string[] | Record<string, boolean>.',
7172
+ },
6555
7173
  // Dados/Opções
6556
7174
  {
6557
7175
  name: 'paletteSettings.preset',
@@ -6567,13 +7185,31 @@ const colorPickerProperties = [
6567
7185
  },
6568
7186
  {
6569
7187
  name: 'paletteSettings.colors',
6570
- label: 'Palette: cores (JSON ou linhas)',
6571
- editorType: 'textarea',
7188
+ label: 'Cores da paleta',
7189
+ editorType: 'color-palette',
7190
+ group: 'Dados/Opções',
7191
+ hint: 'Monte uma paleta ordenada com cores CSS ou referências var(--token).',
7192
+ validators: [colorPaletteValidator],
7193
+ },
7194
+ {
7195
+ name: 'paletteSettings.columns',
7196
+ label: 'Palette: colunas',
7197
+ editorType: 'number',
6572
7198
  group: 'Dados/Opções',
6573
- hint: "JSON array ou uma cor por linha (#hex, rgb(), rgba(), hsl()).",
7199
+ defaultValue: 8,
7200
+ hint: 'Quantidade de colunas exibidas na paleta.',
6574
7201
  },
6575
- { name: 'paletteSettings.columns', label: 'Palette: colunas', editorType: 'number', group: 'Dados/Opções', defaultValue: 8, hint: 'Quantidade de colunas exibidas na paleta.' },
7202
+ ...governedColorPaletteProperties(),
6576
7203
  // Formato/Comportamento
7204
+ {
7205
+ name: 'adaptiveMode',
7206
+ label: '',
7207
+ labelKey: 'colorPicker.adaptiveMode.label',
7208
+ hintKey: 'colorPicker.adaptiveMode.hint',
7209
+ editorType: 'checkbox',
7210
+ group: 'Formato/Comportamento',
7211
+ defaultValue: false,
7212
+ },
6577
7213
  {
6578
7214
  name: 'format',
6579
7215
  label: 'Formato de saída',
@@ -6587,62 +7223,81 @@ const colorPickerProperties = [
6587
7223
  { value: 'hsl', text: 'HSL' },
6588
7224
  ],
6589
7225
  },
6590
- { name: 'adaptiveMode', label: 'Adaptive (BottomSheet/Drawer)', editorType: 'checkbox', group: 'Formato/Comportamento', hint: 'Abre em modo adaptive em telas menores.' },
6591
- { name: 'adaptiveTitle', label: 'Adaptive title', editorType: 'text', group: 'Formato/Comportamento' },
6592
- { name: 'adaptiveSubtitle', label: 'Adaptive subtitle', editorType: 'text', group: 'Formato/Comportamento' },
6593
- { name: 'popupSettings.width', label: 'Popup width (px ou CSS)', editorType: 'text', group: 'Formato/Comportamento', defaultValue: '340', hint: 'Ex.: 340 ou 20rem.' },
6594
- { name: 'readonly', label: 'Somente leitura', editorType: 'checkbox', group: 'Formato/Comportamento' },
6595
- { name: 'disabled', label: 'Desabilitado', editorType: 'checkbox', group: 'Formato/Comportamento' },
7226
+ {
7227
+ name: 'popupSettings.width',
7228
+ label: 'Popup width (px ou CSS)',
7229
+ editorType: 'text',
7230
+ group: 'Formato/Comportamento',
7231
+ defaultValue: '340',
7232
+ hint: 'Ex.: 340 ou 20rem.',
7233
+ },
7234
+ {
7235
+ name: 'readonly',
7236
+ label: 'Somente leitura',
7237
+ editorType: 'checkbox',
7238
+ group: 'Formato/Comportamento',
7239
+ },
7240
+ {
7241
+ name: 'disabled',
7242
+ label: 'Desabilitado',
7243
+ editorType: 'checkbox',
7244
+ group: 'Formato/Comportamento',
7245
+ },
6596
7246
  // Validação
6597
- { name: 'required', label: 'Obrigatório', editorType: 'checkbox', group: 'Validação' },
7247
+ {
7248
+ name: 'required',
7249
+ label: 'Obrigatório',
7250
+ editorType: 'checkbox',
7251
+ group: 'Validação',
7252
+ },
6598
7253
  // Ações (Clear)
6599
- { name: 'clearButton.enabled', label: 'Clear: habilitar', editorType: 'checkbox', group: 'Ações', hint: 'Exibe botão para limpar a cor selecionada.' },
6600
- { name: 'clearButton.icon', label: 'Clear: ícone', editorType: 'text', group: 'Ações', hint: "Material Symbols (ex.: mi:clear). Use o seletor ao lado para buscar." },
6601
- { name: 'clearButton.iconColor', label: 'Clear: cor do ícone', editorType: 'color', group: 'Ações', hint: 'Tema (primary/accent/warn) ou cor CSS (ex.: #496ddb, rgb(73,109,219)).' },
6602
- { name: 'clearButton.tooltip', label: 'Clear: tooltip', editorType: 'text', group: 'Ações' },
6603
- { name: 'clearButton.ariaLabel', label: 'Clear: aria-label', editorType: 'text', group: 'Ações', hint: 'Preencha quando o botão não tiver label visível.' },
6604
- { name: 'clearButton.showOnlyWhenFilled', label: 'Clear: só quando preenchido', editorType: 'checkbox', group: 'Ações' },
6605
- // Aparência/Material
6606
7254
  {
6607
- name: 'fillMode',
6608
- label: 'Fill mode',
6609
- editorType: 'select',
6610
- group: 'Aparência/Material',
6611
- defaultValue: 'solid',
6612
- options: [
6613
- { value: 'solid', text: 'Solid' },
6614
- { value: 'flat', text: 'Flat' },
6615
- { value: 'outline', text: 'Outline' },
6616
- ],
7255
+ name: 'clearButton.enabled',
7256
+ label: 'Clear: habilitar',
7257
+ editorType: 'checkbox',
7258
+ group: 'Ações',
7259
+ hint: 'Exibe botão para limpar a cor selecionada.',
6617
7260
  },
6618
7261
  {
6619
- name: 'rounded',
6620
- label: 'Rounded',
6621
- editorType: 'select',
6622
- group: 'Aparência/Material',
6623
- defaultValue: 'medium',
6624
- options: [
6625
- { value: 'none', text: 'None' },
6626
- { value: 'small', text: 'Small' },
6627
- { value: 'medium', text: 'Medium' },
6628
- { value: 'large', text: 'Large' },
6629
- { value: 'full', text: 'Full' },
6630
- ],
7262
+ name: 'clearButton.icon',
7263
+ label: 'Clear: ícone',
7264
+ editorType: 'text',
7265
+ group: 'Ações',
7266
+ hint: 'Material Symbols (ex.: mi:clear). Use o seletor ao lado para buscar.',
6631
7267
  },
6632
7268
  {
6633
- name: 'size',
6634
- label: 'Size',
6635
- editorType: 'select',
6636
- group: 'Aparência/Material',
6637
- defaultValue: 'medium',
6638
- options: [
6639
- { value: 'small', text: 'Small' },
6640
- { value: 'medium', text: 'Medium' },
6641
- { value: 'large', text: 'Large' },
6642
- ],
7269
+ name: 'clearButton.iconColor',
7270
+ label: 'Clear: cor do ícone',
7271
+ editorType: 'color',
7272
+ group: 'Ações',
7273
+ hint: 'Tema (primary/accent/warn) ou cor CSS (ex.: #496ddb, rgb(73,109,219)).',
7274
+ },
7275
+ {
7276
+ name: 'clearButton.tooltip',
7277
+ label: 'Clear: tooltip',
7278
+ editorType: 'text',
7279
+ group: 'Ações',
7280
+ },
7281
+ {
7282
+ name: 'clearButton.ariaLabel',
7283
+ label: 'Clear: aria-label',
7284
+ editorType: 'text',
7285
+ group: 'Ações',
7286
+ hint: 'Preencha quando o botão não tiver label visível.',
7287
+ },
7288
+ {
7289
+ name: 'clearButton.showOnlyWhenFilled',
7290
+ label: 'Clear: só quando preenchido',
7291
+ editorType: 'checkbox',
7292
+ group: 'Ações',
6643
7293
  },
6644
7294
  // Acessibilidade
6645
- { name: 'tabindex', label: 'TabIndex', editorType: 'number', group: 'Acessibilidade' },
7295
+ {
7296
+ name: 'tabindex',
7297
+ label: 'TabIndex',
7298
+ editorType: 'number',
7299
+ group: 'Acessibilidade',
7300
+ },
6646
7301
  // Atalhos/Preview
6647
7302
  {
6648
7303
  name: 'views',
@@ -6662,10 +7317,35 @@ const colorPickerProperties = [
6662
7317
  { value: 'palette', text: 'Palette' },
6663
7318
  ],
6664
7319
  },
6665
- { name: 'preview', label: 'Mostrar preview (pane)', editorType: 'checkbox', group: 'Atalhos/Preview', hint: 'Exibe área de preview da cor atual.' },
6666
- { name: 'showRecent', label: 'Mostrar recentes', editorType: 'checkbox', group: 'Atalhos/Preview', hint: 'Exibe cores usadas recentemente.' },
6667
- { name: 'maxRecent', label: 'Qtd. de recentes', editorType: 'number', group: 'Atalhos/Preview', defaultValue: 12, hint: 'Quantidade máxima de cores recentes.' },
6668
- { name: 'showNativeOption', label: 'Mostrar seletor nativo', editorType: 'checkbox', group: 'Atalhos/Preview', hint: 'Exibe input color nativo como opção.' },
7320
+ {
7321
+ name: 'preview',
7322
+ label: 'Mostrar preview (pane)',
7323
+ editorType: 'checkbox',
7324
+ group: 'Atalhos/Preview',
7325
+ hint: 'Exibe área de preview da cor atual.',
7326
+ },
7327
+ {
7328
+ name: 'showRecent',
7329
+ label: 'Mostrar recentes',
7330
+ editorType: 'checkbox',
7331
+ group: 'Atalhos/Preview',
7332
+ hint: 'Exibe cores usadas recentemente.',
7333
+ },
7334
+ {
7335
+ name: 'maxRecent',
7336
+ label: 'Qtd. de recentes',
7337
+ editorType: 'number',
7338
+ group: 'Atalhos/Preview',
7339
+ defaultValue: 12,
7340
+ hint: 'Quantidade máxima de cores recentes.',
7341
+ },
7342
+ {
7343
+ name: 'showNativeOption',
7344
+ label: 'Mostrar seletor nativo',
7345
+ editorType: 'checkbox',
7346
+ group: 'Atalhos/Preview',
7347
+ hint: 'Exibe input color nativo como opção.',
7348
+ },
6669
7349
  {
6670
7350
  name: 'actionsLayout',
6671
7351
  label: 'Ações (layout)',
@@ -6678,17 +7358,12 @@ const colorPickerProperties = [
6678
7358
  ],
6679
7359
  },
6680
7360
  // Gradient
6681
- { name: 'gradientSettings.showOpacity', label: 'Gradiente: transparência (alpha)', editorType: 'checkbox', group: 'Atalhos/Preview', hint: 'Exibe controle de alpha no gradient.' },
6682
7361
  {
6683
- name: 'gradientSettings.channel',
6684
- label: 'Gradiente: canal',
6685
- editorType: 'select',
7362
+ name: 'gradientSettings.showOpacity',
7363
+ label: 'Gradiente: transparência (alpha)',
7364
+ editorType: 'checkbox',
6686
7365
  group: 'Atalhos/Preview',
6687
- defaultValue: 'hsv',
6688
- options: [
6689
- { value: 'hsv', text: 'HSV' },
6690
- { value: 'hsl', text: 'HSL' },
6691
- ],
7366
+ hint: 'Exibe controle de alpha no gradient.',
6692
7367
  },
6693
7368
  ];
6694
7369
 
@@ -8967,15 +9642,17 @@ const inlineColorLabelProperties = [
8967
9642
  name: 'colorLabelOptions',
8968
9643
  label: 'Opcoes de cor (JSON)',
8969
9644
  editorType: 'textarea',
8970
- group: 'Dados/Opcoes',
9645
+ group: 'Dados/Opções',
8971
9646
  hint: 'Array JSON. Ex.: [{"label":"Azul","value":"blue","color":"#0ea5e9"}]',
8972
9647
  },
8973
9648
  {
8974
9649
  name: 'colorLabelPalette',
8975
- label: 'Paleta fallback (CSV/JSON)',
8976
- editorType: 'textarea',
8977
- group: 'Aparencia',
9650
+ label: 'Paleta fallback',
9651
+ editorType: 'color-palette',
9652
+ group: 'Aparência',
9653
+ validators: [colorPaletteValidator],
8978
9654
  },
9655
+ ...governedColorPaletteProperties(),
8979
9656
  {
8980
9657
  name: 'colorLabelMultiple',
8981
9658
  label: 'Permitir multipla selecao',
@@ -9013,8 +9690,18 @@ const inlineColorLabelProperties = [
9013
9690
  ],
9014
9691
  hint: 'Define se o painel inline comita automaticamente ou mantém rascunho até Aplicar.',
9015
9692
  },
9016
- { name: 'inlineOverlay.actions.apply.label', label: 'Aplicar: label', editorType: 'text', group: 'Ações' },
9017
- { name: 'inlineOverlay.actions.apply.ariaLabel', label: 'Aplicar: aria-label', editorType: 'text', group: 'Ações' },
9693
+ {
9694
+ name: 'inlineOverlay.actions.apply.label',
9695
+ label: 'Aplicar: label',
9696
+ editorType: 'text',
9697
+ group: 'Ações',
9698
+ },
9699
+ {
9700
+ name: 'inlineOverlay.actions.apply.ariaLabel',
9701
+ label: 'Aplicar: aria-label',
9702
+ editorType: 'text',
9703
+ group: 'Ações',
9704
+ },
9018
9705
  {
9019
9706
  name: 'inlineOverlay.actions.apply.appearance',
9020
9707
  label: 'Aplicar: aparência',
@@ -9039,8 +9726,18 @@ const inlineColorLabelProperties = [
9039
9726
  { value: 'danger', text: 'Perigo' },
9040
9727
  ],
9041
9728
  },
9042
- { name: 'inlineOverlay.actions.cancel.label', label: 'Cancelar: label', editorType: 'text', group: 'Ações' },
9043
- { name: 'inlineOverlay.actions.cancel.ariaLabel', label: 'Cancelar: aria-label', editorType: 'text', group: 'Ações' },
9729
+ {
9730
+ name: 'inlineOverlay.actions.cancel.label',
9731
+ label: 'Cancelar: label',
9732
+ editorType: 'text',
9733
+ group: 'Ações',
9734
+ },
9735
+ {
9736
+ name: 'inlineOverlay.actions.cancel.ariaLabel',
9737
+ label: 'Cancelar: aria-label',
9738
+ editorType: 'text',
9739
+ group: 'Ações',
9740
+ },
9044
9741
  {
9045
9742
  name: 'inlineOverlay.actions.cancel.appearance',
9046
9743
  label: 'Cancelar: aparência',
@@ -9065,8 +9762,18 @@ const inlineColorLabelProperties = [
9065
9762
  { value: 'danger', text: 'Perigo' },
9066
9763
  ],
9067
9764
  },
9068
- { name: 'inlineOverlay.actions.clear.label', label: 'Limpar: label', editorType: 'text', group: 'Ações' },
9069
- { name: 'inlineOverlay.actions.clear.ariaLabel', label: 'Limpar: aria-label', editorType: 'text', group: 'Ações' },
9765
+ {
9766
+ name: 'inlineOverlay.actions.clear.label',
9767
+ label: 'Limpar: label',
9768
+ editorType: 'text',
9769
+ group: 'Ações',
9770
+ },
9771
+ {
9772
+ name: 'inlineOverlay.actions.clear.ariaLabel',
9773
+ label: 'Limpar: aria-label',
9774
+ editorType: 'text',
9775
+ group: 'Ações',
9776
+ },
9070
9777
  {
9071
9778
  name: 'inlineOverlay.actions.clear.appearance',
9072
9779
  label: 'Limpar: aparência',
@@ -9101,27 +9808,29 @@ const inlineColorLabelProperties = [
9101
9808
  name: 'colorLabelIcon',
9102
9809
  label: 'Icone do trigger',
9103
9810
  editorType: 'text',
9104
- group: 'Icones',
9811
+ group: 'Ícones',
9105
9812
  },
9106
9813
  {
9107
9814
  name: 'colorLabelBadgeRemoveIcon',
9108
9815
  label: 'Icone remover badge',
9109
9816
  editorType: 'text',
9110
- group: 'Icones',
9817
+ group: 'Ícones',
9111
9818
  hint: 'Icone usado para remover item selecionado nos badges (fallback: close).',
9112
9819
  },
9113
9820
  {
9114
9821
  name: 'colorLabelBadgeRemoveIconColor',
9115
9822
  label: 'Cor remover badge',
9116
9823
  editorType: 'color',
9117
- group: 'Icones',
9824
+ group: 'Ícones',
9118
9825
  hint: 'primary/accent/warn ou cor CSS.',
9119
9826
  },
9120
9827
  {
9121
9828
  name: 'colorLabelColorKey',
9122
9829
  label: 'Chave color da opcao',
9830
+ labelKey: 'inlineColorLabel.colorKey.label',
9831
+ hintKey: 'inlineColorLabel.colorKey.hint',
9123
9832
  editorType: 'text',
9124
- group: 'Dados/Opcoes',
9833
+ group: 'Dados/Opções',
9125
9834
  },
9126
9835
  {
9127
9836
  name: 'colorLabelOptionsAriaLabel',
@@ -9159,7 +9868,7 @@ const inlineColorLabelProperties = [
9159
9868
  name: 'inlineAutoSize.panelMinWidth',
9160
9869
  label: 'Painel minimo (desktop)',
9161
9870
  editorType: 'number',
9162
- group: 'Aparencia',
9871
+ group: 'Aparência',
9163
9872
  row: 'inline-size.panel.desktop',
9164
9873
  inline: true,
9165
9874
  },
@@ -9167,7 +9876,7 @@ const inlineColorLabelProperties = [
9167
9876
  name: 'inlineAutoSize.panelMaxWidth',
9168
9877
  label: 'Painel maximo (desktop)',
9169
9878
  editorType: 'number',
9170
- group: 'Aparencia',
9879
+ group: 'Aparência',
9171
9880
  row: 'inline-size.panel.desktop',
9172
9881
  inline: true,
9173
9882
  },
@@ -9175,7 +9884,7 @@ const inlineColorLabelProperties = [
9175
9884
  name: 'inlineAutoSize.panelMinWidthMobile',
9176
9885
  label: 'Painel minimo (mobile)',
9177
9886
  editorType: 'number',
9178
- group: 'Aparencia',
9887
+ group: 'Aparência',
9179
9888
  row: 'inline-size.panel.mobile',
9180
9889
  inline: true,
9181
9890
  },
@@ -9183,7 +9892,7 @@ const inlineColorLabelProperties = [
9183
9892
  name: 'inlineAutoSize.panelMaxWidthMobile',
9184
9893
  label: 'Painel maximo (mobile)',
9185
9894
  editorType: 'number',
9186
- group: 'Aparencia',
9895
+ group: 'Aparência',
9187
9896
  row: 'inline-size.panel.mobile',
9188
9897
  inline: true,
9189
9898
  },
@@ -12148,7 +12857,7 @@ class CascadeManagerTabComponent {
12148
12857
  </div>
12149
12858
  }
12150
12859
  </div>
12151
- `, isInline: true, styles: [":host{display:block}.cm-root{display:grid;grid-template-columns:320px 1fr;gap:16px;min-height:420px}.cm-left{border-right:1px solid var(--md-sys-color-outline-variant);padding-right:8px}.cm-search{width:100%;margin-bottom:8px}.cm-right{padding-left:8px}.field-item{display:flex;align-items:center;justify-content:space-between;padding:8px 6px;cursor:pointer;border-radius:10px;transition:background .12s ease,border .12s ease;border:1px solid transparent}.field-item:hover{background:var(--md-sys-color-surface-container-high)}.field-item.selected{background:var(--md-sys-color-surface-container-highest);border-color:var(--md-sys-color-outline-variant)}.rule-badges{display:inline-flex;gap:6px}.rule-badge{font-size:11px;padding:2px 8px;border-radius:999px;font-weight:600}.b-active{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.b-manual{background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.b-immediate{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.b-conflict{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.cm-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.rules-empty{opacity:.8;font-style:italic;padding:8px 0;color:var(--md-sys-color-on-surface-variant)}.rule-row{display:grid;grid-template-columns:1fr auto;align-items:center;padding:10px 0;border-bottom:1px dashed var(--md-sys-color-outline-variant)}.rule-actions button{margin-left:4px}.banner{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container);padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;margin-bottom:10px;display:flex;gap:8px;align-items:center}.import-panel{background:var(--md-sys-color-surface-container-high);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;padding:10px;margin-bottom:10px}.full{width:100%}.form-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.form-grid{display:grid;gap:12px;padding:8px 0}.map-table{width:100%;border-collapse:collapse}.map-table th,.map-table td{padding:8px;border-bottom:1px dashed var(--md-sys-color-outline-variant)}.kbd{font-family:monospace;background:var(--md-sys-color-surface-container-highest);padding:0 6px;border-radius:4px;color:var(--md-sys-color-on-surface-variant)}.panel-surface{background:var(--md-sys-color-surface-container-high);border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;box-shadow:var(--md-sys-elevation-level1, none);margin-bottom:12px}.panel-stack{display:grid;gap:12px;margin:12px 0}.stack-panel{background:var(--md-sys-color-surface-container-high);border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;box-shadow:var(--md-sys-elevation-level1, none)}.stack-panel .mat-expansion-panel-content{padding:0 16px 12px}.panel-header{display:flex;align-items:center;gap:8px}.preview-box{background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;padding:8px;color:var(--md-sys-color-on-surface)}.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: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.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: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.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: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i5$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i5$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i13.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i13.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i13.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }] });
12860
+ `, isInline: true, styles: [":host{display:block}.cm-root{display:grid;grid-template-columns:320px 1fr;gap:16px;min-height:420px}.cm-left{border-right:1px solid var(--md-sys-color-outline-variant);padding-right:8px}.cm-search{width:100%;margin-bottom:8px}.cm-right{padding-left:8px}.field-item{display:flex;align-items:center;justify-content:space-between;padding:8px 6px;cursor:pointer;border-radius:10px;transition:background .12s ease,border .12s ease;border:1px solid transparent}.field-item:hover{background:var(--md-sys-color-surface-container-high)}.field-item.selected{background:var(--md-sys-color-surface-container-highest);border-color:var(--md-sys-color-outline-variant)}.rule-badges{display:inline-flex;gap:6px}.rule-badge{font-size:11px;padding:2px 8px;border-radius:999px;font-weight:600}.b-active{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.b-manual{background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.b-immediate{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.b-conflict{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.cm-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.rules-empty{opacity:.8;font-style:italic;padding:8px 0;color:var(--md-sys-color-on-surface-variant)}.rule-row{display:grid;grid-template-columns:1fr auto;align-items:center;padding:10px 0;border-bottom:1px dashed var(--md-sys-color-outline-variant)}.rule-actions button{margin-left:4px}.banner{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container);padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;margin-bottom:10px;display:flex;gap:8px;align-items:center}.import-panel{background:var(--md-sys-color-surface-container-high);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;padding:10px;margin-bottom:10px}.full{width:100%}.form-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.form-grid{display:grid;gap:12px;padding:8px 0}.map-table{width:100%;border-collapse:collapse}.map-table th,.map-table td{padding:8px;border-bottom:1px dashed var(--md-sys-color-outline-variant)}.kbd{font-family:monospace;background:var(--md-sys-color-surface-container-highest);padding:0 6px;border-radius:4px;color:var(--md-sys-color-on-surface-variant)}.panel-surface{background:var(--md-sys-color-surface-container-high);border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;box-shadow:var(--md-sys-elevation-level1, none);margin-bottom:12px}.panel-stack{display:grid;gap:12px;margin:12px 0}.stack-panel{background:var(--md-sys-color-surface-container-high);border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;box-shadow:var(--md-sys-elevation-level1, none)}.stack-panel .mat-expansion-panel-content{padding:0 16px 12px}.panel-header{display:flex;align-items:center;gap:8px}.preview-box{background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;padding:8px;color:var(--md-sys-color-on-surface)}.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: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.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: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.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: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i5$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i5$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i13.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i13.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i13.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }] });
12152
12861
  }
12153
12862
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: CascadeManagerTabComponent, decorators: [{
12154
12863
  type: Component,