@praxisui/manual-form 9.0.0-beta.85 → 9.0.0-beta.86

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,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-21T15:34:49.320Z",
3
+ "generatedAt": "2026-07-22T03:01:56.888Z",
4
4
  "packageName": "@praxisui/manual-form",
5
- "packageVersion": "9.0.0-beta.85",
5
+ "packageVersion": "9.0.0-beta.86",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 1,
@@ -1,4 +1,4 @@
1
- import { ensureIds, DynamicFormService, ASYNC_CONFIG_STORAGE, RULE_PROPERTY_SCHEMA, deepMerge, resolveControlTypeAlias, FieldControlType, normalizeControlTypeKey, FormHooksRegistry, ComponentKeyService, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, FieldSelectorRegistry, providePraxisI18n, PraxisI18nService, API_URL, ComponentMetadataRegistry } from '@praxisui/core';
1
+ import { ensureIds, DynamicFormService, ASYNC_CONFIG_STORAGE, RULE_PROPERTY_SCHEMA, deepMerge, resolveControlTypeAlias, FieldControlType, normalizeControlTypeKey, PraxisIconButtonComponent, FormHooksRegistry, ComponentKeyService, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, FieldSelectorRegistry, providePraxisI18n, PraxisI18nService, API_URL, ComponentMetadataRegistry } from '@praxisui/core';
2
2
  import * as i0 from '@angular/core';
3
3
  import { inject, Optional, Inject, Injectable, input, output, ChangeDetectionStrategy, Component, Input, InjectionToken, isDevMode, EventEmitter, HostListener, ViewChild, Output, ChangeDetectorRef, DestroyRef, PLATFORM_ID, effect, ContentChildren, signal, computed, Directive, ENVIRONMENT_INITIALIZER } from '@angular/core';
4
4
  import { BehaviorSubject, firstValueFrom, debounceTime, fromEvent, of } from 'rxjs';
@@ -1834,76 +1834,69 @@ class ManualFieldToolbarComponent {
1834
1834
  <button
1835
1835
  #firstAction
1836
1836
  type="button"
1837
+ [praxisIconButton]="'mso:star'"
1838
+ size="dense"
1839
+ [pressed]="isRequired"
1837
1840
  class="toolbar-btn"
1838
- [attr.aria-pressed]="isRequired ? 'true' : 'false'"
1839
1841
  aria-label="Alternar obrigatorio"
1840
1842
  title="Alternar obrigatorio"
1841
1843
  (click)="toggleRequired.emit()"
1842
- >
1843
- <span class="material-symbols-outlined toolbar-icon" [class.toolbar-icon--filled]="isRequired">
1844
- star
1845
- </span>
1846
- </button>
1844
+ ></button>
1847
1845
  <button
1848
1846
  type="button"
1847
+ [praxisIconButton]="isReadOnly ? 'mso:lock' : 'mso:lock_open'"
1848
+ size="dense"
1849
+ [pressed]="isReadOnly"
1849
1850
  class="toolbar-btn"
1850
- [attr.aria-pressed]="isReadOnly ? 'true' : 'false'"
1851
1851
  aria-label="Alternar somente leitura"
1852
1852
  title="Alternar somente leitura"
1853
1853
  (click)="toggleReadonly.emit()"
1854
- >
1855
- <span class="material-symbols-outlined">
1856
- {{ isReadOnly ? 'lock' : 'lock_open' }}
1857
- </span>
1858
- </button>
1854
+ ></button>
1859
1855
  <button
1860
1856
  type="button"
1857
+ [praxisIconButton]="metadata?.hidden ? 'mso:visibility_off' : 'mso:visibility'"
1858
+ size="dense"
1859
+ [pressed]="metadata?.hidden === true"
1861
1860
  class="toolbar-btn"
1862
- [attr.aria-pressed]="metadata?.hidden ? 'true' : 'false'"
1863
1861
  aria-label="Alternar visibilidade"
1864
1862
  title="Alternar visibilidade"
1865
1863
  (click)="toggleHidden.emit()"
1866
- >
1867
- <span class="material-symbols-outlined">
1868
- {{ metadata?.hidden ? 'visibility_off' : 'visibility' }}
1869
- </span>
1870
- </button>
1864
+ ></button>
1871
1865
  <button
1872
1866
  type="button"
1867
+ [praxisIconButton]="metadata?.disabled ? 'mso:toggle_on' : 'mso:toggle_off'"
1868
+ size="dense"
1869
+ [pressed]="metadata?.disabled === true"
1873
1870
  class="toolbar-btn"
1874
- [attr.aria-pressed]="metadata?.disabled ? 'true' : 'false'"
1875
1871
  aria-label="Alternar desabilitado"
1876
1872
  title="Alternar desabilitado"
1877
1873
  (click)="toggleDisabled.emit()"
1878
- >
1879
- <span class="material-symbols-outlined">
1880
- {{ metadata?.disabled ? 'toggle_on' : 'toggle_off' }}
1881
- </span>
1882
- </button>
1874
+ ></button>
1883
1875
  <button
1884
1876
  type="button"
1877
+ [praxisIconButton]="'mso:tune'"
1878
+ size="dense"
1879
+ appearance="filled"
1885
1880
  class="toolbar-btn toolbar-btn--accent"
1886
1881
  aria-label="Configurar campo"
1887
1882
  title="Configurar campo"
1888
1883
  (click)="openEditor.emit()"
1889
- >
1890
- <span class="material-symbols-outlined">tune</span>
1891
- </button>
1884
+ ></button>
1892
1885
  <button
1893
1886
  type="button"
1887
+ [praxisIconButton]="'mso:close'"
1888
+ size="dense"
1894
1889
  class="toolbar-btn toolbar-btn--ghost"
1895
1890
  aria-label="Fechar"
1896
1891
  title="Fechar"
1897
1892
  (click)="requestClose.emit()"
1898
- >
1899
- <span class="material-symbols-outlined">close</span>
1900
- </button>
1893
+ ></button>
1901
1894
  </div>
1902
- `, isInline: true, styles: [":host{display:block;pointer-events:auto;font-family:inherit}.pdx-manual-field-toolbar{display:inline-flex;align-items:center;gap:6px;padding:6px;border-radius:12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);box-shadow:var(--md-sys-elevation-level3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.toolbar-btn{appearance:none;border:0;background:transparent;color:var(--md-sys-color-on-surface);display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:10px;cursor:pointer;transition:background-color .12s ease,transform .12s ease}.toolbar-btn:hover{background:var(--md-sys-color-primary-container)}.toolbar-btn:active{transform:scale(.97)}.toolbar-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toolbar-btn--accent{background:var(--md-sys-color-primary-container)}.toolbar-btn--ghost{opacity:.7}.material-symbols-outlined{font-size:18px;line-height:18px}.toolbar-icon{font-variation-settings:\"FILL\" 0,\"wght\" 400,\"GRAD\" 0,\"opsz\" 20}.toolbar-icon--filled{font-variation-settings:\"FILL\" 1,\"wght\" 600,\"GRAD\" 0,\"opsz\" 20}\n"] });
1895
+ `, isInline: true, styles: [":host{display:block;pointer-events:auto;font-family:inherit}.pdx-manual-field-toolbar{display:inline-flex;align-items:center;gap:6px;padding:6px;border-radius:12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);box-shadow:var(--md-sys-elevation-level3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.toolbar-btn{color:var(--md-sys-color-on-surface)}.toolbar-btn--accent{--praxis-icon-button-filled-background: var(--md-sys-color-primary-container);--praxis-icon-button-filled-foreground: var(--md-sys-color-on-primary-container)}.toolbar-btn--ghost{opacity:.7}\n"], dependencies: [{ kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }] });
1903
1896
  }
1904
1897
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ManualFieldToolbarComponent, decorators: [{
1905
1898
  type: Component,
1906
- args: [{ selector: 'praxis-manual-field-toolbar', standalone: true, imports: [], template: `
1899
+ args: [{ selector: 'praxis-manual-field-toolbar', standalone: true, imports: [PraxisIconButtonComponent], template: `
1907
1900
  <div
1908
1901
  class="pdx-manual-field-toolbar"
1909
1902
  role="toolbar"
@@ -1912,72 +1905,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
1912
1905
  <button
1913
1906
  #firstAction
1914
1907
  type="button"
1908
+ [praxisIconButton]="'mso:star'"
1909
+ size="dense"
1910
+ [pressed]="isRequired"
1915
1911
  class="toolbar-btn"
1916
- [attr.aria-pressed]="isRequired ? 'true' : 'false'"
1917
1912
  aria-label="Alternar obrigatorio"
1918
1913
  title="Alternar obrigatorio"
1919
1914
  (click)="toggleRequired.emit()"
1920
- >
1921
- <span class="material-symbols-outlined toolbar-icon" [class.toolbar-icon--filled]="isRequired">
1922
- star
1923
- </span>
1924
- </button>
1915
+ ></button>
1925
1916
  <button
1926
1917
  type="button"
1918
+ [praxisIconButton]="isReadOnly ? 'mso:lock' : 'mso:lock_open'"
1919
+ size="dense"
1920
+ [pressed]="isReadOnly"
1927
1921
  class="toolbar-btn"
1928
- [attr.aria-pressed]="isReadOnly ? 'true' : 'false'"
1929
1922
  aria-label="Alternar somente leitura"
1930
1923
  title="Alternar somente leitura"
1931
1924
  (click)="toggleReadonly.emit()"
1932
- >
1933
- <span class="material-symbols-outlined">
1934
- {{ isReadOnly ? 'lock' : 'lock_open' }}
1935
- </span>
1936
- </button>
1925
+ ></button>
1937
1926
  <button
1938
1927
  type="button"
1928
+ [praxisIconButton]="metadata?.hidden ? 'mso:visibility_off' : 'mso:visibility'"
1929
+ size="dense"
1930
+ [pressed]="metadata?.hidden === true"
1939
1931
  class="toolbar-btn"
1940
- [attr.aria-pressed]="metadata?.hidden ? 'true' : 'false'"
1941
1932
  aria-label="Alternar visibilidade"
1942
1933
  title="Alternar visibilidade"
1943
1934
  (click)="toggleHidden.emit()"
1944
- >
1945
- <span class="material-symbols-outlined">
1946
- {{ metadata?.hidden ? 'visibility_off' : 'visibility' }}
1947
- </span>
1948
- </button>
1935
+ ></button>
1949
1936
  <button
1950
1937
  type="button"
1938
+ [praxisIconButton]="metadata?.disabled ? 'mso:toggle_on' : 'mso:toggle_off'"
1939
+ size="dense"
1940
+ [pressed]="metadata?.disabled === true"
1951
1941
  class="toolbar-btn"
1952
- [attr.aria-pressed]="metadata?.disabled ? 'true' : 'false'"
1953
1942
  aria-label="Alternar desabilitado"
1954
1943
  title="Alternar desabilitado"
1955
1944
  (click)="toggleDisabled.emit()"
1956
- >
1957
- <span class="material-symbols-outlined">
1958
- {{ metadata?.disabled ? 'toggle_on' : 'toggle_off' }}
1959
- </span>
1960
- </button>
1945
+ ></button>
1961
1946
  <button
1962
1947
  type="button"
1948
+ [praxisIconButton]="'mso:tune'"
1949
+ size="dense"
1950
+ appearance="filled"
1963
1951
  class="toolbar-btn toolbar-btn--accent"
1964
1952
  aria-label="Configurar campo"
1965
1953
  title="Configurar campo"
1966
1954
  (click)="openEditor.emit()"
1967
- >
1968
- <span class="material-symbols-outlined">tune</span>
1969
- </button>
1955
+ ></button>
1970
1956
  <button
1971
1957
  type="button"
1958
+ [praxisIconButton]="'mso:close'"
1959
+ size="dense"
1972
1960
  class="toolbar-btn toolbar-btn--ghost"
1973
1961
  aria-label="Fechar"
1974
1962
  title="Fechar"
1975
1963
  (click)="requestClose.emit()"
1976
- >
1977
- <span class="material-symbols-outlined">close</span>
1978
- </button>
1964
+ ></button>
1979
1965
  </div>
1980
- `, styles: [":host{display:block;pointer-events:auto;font-family:inherit}.pdx-manual-field-toolbar{display:inline-flex;align-items:center;gap:6px;padding:6px;border-radius:12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);box-shadow:var(--md-sys-elevation-level3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.toolbar-btn{appearance:none;border:0;background:transparent;color:var(--md-sys-color-on-surface);display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:10px;cursor:pointer;transition:background-color .12s ease,transform .12s ease}.toolbar-btn:hover{background:var(--md-sys-color-primary-container)}.toolbar-btn:active{transform:scale(.97)}.toolbar-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toolbar-btn--accent{background:var(--md-sys-color-primary-container)}.toolbar-btn--ghost{opacity:.7}.material-symbols-outlined{font-size:18px;line-height:18px}.toolbar-icon{font-variation-settings:\"FILL\" 0,\"wght\" 400,\"GRAD\" 0,\"opsz\" 20}.toolbar-icon--filled{font-variation-settings:\"FILL\" 1,\"wght\" 600,\"GRAD\" 0,\"opsz\" 20}\n"] }]
1966
+ `, styles: [":host{display:block;pointer-events:auto;font-family:inherit}.pdx-manual-field-toolbar{display:inline-flex;align-items:center;gap:6px;padding:6px;border-radius:12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);box-shadow:var(--md-sys-elevation-level3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.toolbar-btn{color:var(--md-sys-color-on-surface)}.toolbar-btn--accent{--praxis-icon-button-filled-background: var(--md-sys-color-primary-container);--praxis-icon-button-filled-foreground: var(--md-sys-color-on-primary-container)}.toolbar-btn--ghost{opacity:.7}\n"] }]
1981
1967
  }], propDecorators: { metadata: [{
1982
1968
  type: Input
1983
1969
  }], toggleRequired: [{
@@ -3373,6 +3359,7 @@ const MANUAL_FORM_EN_US = {
3373
3359
  'praxis.manualForm.editor.actions.customTitle': 'Custom actions',
3374
3360
  'praxis.manualForm.editor.actions.customHelp': 'Create extra buttons with their own event.',
3375
3361
  'praxis.manualForm.editor.actions.addCustom': 'Add action',
3362
+ 'praxis.manualForm.editor.actions.removeCustom': 'Remove action',
3376
3363
  'praxis.manualForm.editor.actions.emptyCustom': 'No custom actions registered.',
3377
3364
  'praxis.manualForm.editor.actions.field.visible': 'Visible',
3378
3365
  'praxis.manualForm.editor.actions.field.label': 'Label',
@@ -3512,6 +3499,7 @@ const MANUAL_FORM_PT_BR = {
3512
3499
  'praxis.manualForm.editor.actions.customTitle': 'Ações customizadas',
3513
3500
  'praxis.manualForm.editor.actions.customHelp': 'Crie botões extras com eventos próprios.',
3514
3501
  'praxis.manualForm.editor.actions.addCustom': 'Adicionar ação',
3502
+ 'praxis.manualForm.editor.actions.removeCustom': 'Remover ação',
3515
3503
  'praxis.manualForm.editor.actions.emptyCustom': 'Nenhuma ação customizada cadastrada.',
3516
3504
  'praxis.manualForm.editor.actions.field.visible': 'Visível',
3517
3505
  'praxis.manualForm.editor.actions.field.label': 'Rótulo (Label)',
@@ -4260,9 +4248,13 @@ class ManualFormConfigEditorComponent {
4260
4248
  <div class="mf-custom-card">
4261
4249
  <div class="mf-custom-card__header">
4262
4250
  <div class="mf-custom-card__title">{{ action.label || action.id }}</div>
4263
- <button mat-icon-button type="button" (click)="removeCustomAction(action)">
4264
- <mat-icon>delete</mat-icon>
4265
- </button>
4251
+ <button
4252
+ praxisIconButton="delete"
4253
+ size="dense"
4254
+ type="button"
4255
+ (click)="removeCustomAction(action)"
4256
+ [attr.aria-label]="tx('editor.actions.removeCustom', 'Remove action') + ': ' + (action.label || action.id)"
4257
+ ></button>
4266
4258
  </div>
4267
4259
  <div class="mf-custom-card__grid">
4268
4260
  <mat-form-field appearance="outline">
@@ -4708,15 +4700,14 @@ class ManualFormConfigEditorComponent {
4708
4700
  [placeholder]="hookPlaceholder()"
4709
4701
  ></textarea>
4710
4702
  <button
4711
- mat-icon-button
4703
+ praxisIconButton="help_outline"
4704
+ size="dense"
4712
4705
  matSuffix
4713
- class="help-icon-button"
4714
4706
  type="button"
4715
4707
  [matTooltip]="hookTooltip(stage)"
4708
+ [attr.aria-label]="hookTooltip(stage)"
4716
4709
  matTooltipPosition="above"
4717
- >
4718
- <mat-icon>help_outline</mat-icon>
4719
- </button>
4710
+ ></button>
4720
4711
  @if (hooksErrors[stage]) {
4721
4712
  <mat-error>{{ hooksErrors[stage] }}</mat-error>
4722
4713
  }
@@ -4752,15 +4743,14 @@ class ManualFormConfigEditorComponent {
4752
4743
  [placeholder]="formRulesPlaceholder()"
4753
4744
  ></textarea>
4754
4745
  <button
4755
- mat-icon-button
4746
+ praxisIconButton="help_outline"
4747
+ size="dense"
4756
4748
  matSuffix
4757
- class="help-icon-button"
4758
4749
  type="button"
4759
4750
  [matTooltip]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
4751
+ [attr.aria-label]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
4760
4752
  matTooltipPosition="above"
4761
- >
4762
- <mat-icon>help_outline</mat-icon>
4763
- </button>
4753
+ ></button>
4764
4754
  @if (formRulesError) {
4765
4755
  <mat-error>{{ formRulesError }}</mat-error>
4766
4756
  }
@@ -4778,15 +4768,14 @@ class ManualFormConfigEditorComponent {
4778
4768
  ></textarea>
4779
4769
  <mat-hint>{{ tx('editor.rules.formRulesStateReadonlyHint', 'Generated by the visual editor for round-trip; edit formRules instead.') }}</mat-hint>
4780
4770
  <button
4781
- mat-icon-button
4771
+ praxisIconButton="help_outline"
4772
+ size="dense"
4782
4773
  matSuffix
4783
- class="help-icon-button"
4784
4774
  type="button"
4785
4775
  [matTooltip]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
4776
+ [attr.aria-label]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
4786
4777
  matTooltipPosition="above"
4787
- >
4788
- <mat-icon>help_outline</mat-icon>
4789
- </button>
4778
+ ></button>
4790
4779
  @if (formRulesStateError) {
4791
4780
  <mat-error>{{ formRulesStateError }}</mat-error>
4792
4781
  }
@@ -4819,7 +4808,7 @@ class ManualFormConfigEditorComponent {
4819
4808
  </mat-tab>
4820
4809
  </mat-tab-group>
4821
4810
  </div>
4822
- `, isInline: true, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.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}.mf-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-action-card,.mf-custom-card,.mf-custom-message-card{display:grid;gap:10px;padding:14px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high)}.mf-action-card__title,.mf-custom-card__title{font-weight:600;color:var(--md-sys-color-on-surface)}.mf-actions-layout{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-toggle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.mf-hooks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.mf-hook-field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85rem}.mf-actions-row{display:inline-flex;gap:8px;align-items:center}.mf-actions-row--end{justify-content:flex-end;width:100%}.mf-custom-actions,.mf-custom-messages{display:grid;gap:12px}.mf-custom-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.mf-custom-card__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-messages-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-empty{margin:0;color:var(--md-sys-color-on-surface-variant)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { 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.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: i5.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: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.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: i7.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: CascadeManagerTabComponent, selector: "praxis-cascade-manager-tab", inputs: ["fields", "connections"], outputs: ["apply", "cancel"] }] });
4811
+ `, isInline: true, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.mf-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-action-card,.mf-custom-card,.mf-custom-message-card{display:grid;gap:10px;padding:14px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high)}.mf-action-card__title,.mf-custom-card__title{font-weight:600;color:var(--md-sys-color-on-surface)}.mf-actions-layout{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-toggle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.mf-hooks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.mf-hook-field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85rem}.mf-actions-row{display:inline-flex;gap:8px;align-items:center}.mf-actions-row--end{justify-content:flex-end;width:100%}.mf-custom-actions,.mf-custom-messages{display:grid;gap:12px}.mf-custom-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.mf-custom-card__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-messages-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-empty{margin:0;color:var(--md-sys-color-on-surface-variant)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { 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.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: i5.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: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.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: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "component", type: CascadeManagerTabComponent, selector: "praxis-cascade-manager-tab", inputs: ["fields", "connections"], outputs: ["apply", "cancel"] }] });
4823
4812
  }
4824
4813
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ManualFormConfigEditorComponent, decorators: [{
4825
4814
  type: Component,
@@ -4833,6 +4822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
4833
4822
  MatButtonModule,
4834
4823
  MatIconModule,
4835
4824
  MatTooltipModule,
4825
+ PraxisIconButtonComponent,
4836
4826
  CascadeManagerTabComponent
4837
4827
  ], providers: [providePraxisManualFormI18n()], template: `
4838
4828
  <div class="mf-editor">
@@ -5057,9 +5047,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5057
5047
  <div class="mf-custom-card">
5058
5048
  <div class="mf-custom-card__header">
5059
5049
  <div class="mf-custom-card__title">{{ action.label || action.id }}</div>
5060
- <button mat-icon-button type="button" (click)="removeCustomAction(action)">
5061
- <mat-icon>delete</mat-icon>
5062
- </button>
5050
+ <button
5051
+ praxisIconButton="delete"
5052
+ size="dense"
5053
+ type="button"
5054
+ (click)="removeCustomAction(action)"
5055
+ [attr.aria-label]="tx('editor.actions.removeCustom', 'Remove action') + ': ' + (action.label || action.id)"
5056
+ ></button>
5063
5057
  </div>
5064
5058
  <div class="mf-custom-card__grid">
5065
5059
  <mat-form-field appearance="outline">
@@ -5505,15 +5499,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5505
5499
  [placeholder]="hookPlaceholder()"
5506
5500
  ></textarea>
5507
5501
  <button
5508
- mat-icon-button
5502
+ praxisIconButton="help_outline"
5503
+ size="dense"
5509
5504
  matSuffix
5510
- class="help-icon-button"
5511
5505
  type="button"
5512
5506
  [matTooltip]="hookTooltip(stage)"
5507
+ [attr.aria-label]="hookTooltip(stage)"
5513
5508
  matTooltipPosition="above"
5514
- >
5515
- <mat-icon>help_outline</mat-icon>
5516
- </button>
5509
+ ></button>
5517
5510
  @if (hooksErrors[stage]) {
5518
5511
  <mat-error>{{ hooksErrors[stage] }}</mat-error>
5519
5512
  }
@@ -5549,15 +5542,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5549
5542
  [placeholder]="formRulesPlaceholder()"
5550
5543
  ></textarea>
5551
5544
  <button
5552
- mat-icon-button
5545
+ praxisIconButton="help_outline"
5546
+ size="dense"
5553
5547
  matSuffix
5554
- class="help-icon-button"
5555
5548
  type="button"
5556
5549
  [matTooltip]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
5550
+ [attr.aria-label]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
5557
5551
  matTooltipPosition="above"
5558
- >
5559
- <mat-icon>help_outline</mat-icon>
5560
- </button>
5552
+ ></button>
5561
5553
  @if (formRulesError) {
5562
5554
  <mat-error>{{ formRulesError }}</mat-error>
5563
5555
  }
@@ -5575,15 +5567,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5575
5567
  ></textarea>
5576
5568
  <mat-hint>{{ tx('editor.rules.formRulesStateReadonlyHint', 'Generated by the visual editor for round-trip; edit formRules instead.') }}</mat-hint>
5577
5569
  <button
5578
- mat-icon-button
5570
+ praxisIconButton="help_outline"
5571
+ size="dense"
5579
5572
  matSuffix
5580
- class="help-icon-button"
5581
5573
  type="button"
5582
5574
  [matTooltip]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
5575
+ [attr.aria-label]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
5583
5576
  matTooltipPosition="above"
5584
- >
5585
- <mat-icon>help_outline</mat-icon>
5586
- </button>
5577
+ ></button>
5587
5578
  @if (formRulesStateError) {
5588
5579
  <mat-error>{{ formRulesStateError }}</mat-error>
5589
5580
  }
@@ -5616,7 +5607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5616
5607
  </mat-tab>
5617
5608
  </mat-tab-group>
5618
5609
  </div>
5619
- `, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.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}.mf-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-action-card,.mf-custom-card,.mf-custom-message-card{display:grid;gap:10px;padding:14px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high)}.mf-action-card__title,.mf-custom-card__title{font-weight:600;color:var(--md-sys-color-on-surface)}.mf-actions-layout{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-toggle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.mf-hooks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.mf-hook-field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85rem}.mf-actions-row{display:inline-flex;gap:8px;align-items:center}.mf-actions-row--end{justify-content:flex-end;width:100%}.mf-custom-actions,.mf-custom-messages{display:grid;gap:12px}.mf-custom-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.mf-custom-card__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-messages-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-empty{margin:0;color:var(--md-sys-color-on-surface-variant)}\n"] }]
5610
+ `, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.mf-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-action-card,.mf-custom-card,.mf-custom-message-card{display:grid;gap:10px;padding:14px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high)}.mf-action-card__title,.mf-custom-card__title{font-weight:600;color:var(--md-sys-color-on-surface)}.mf-actions-layout{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-toggle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.mf-hooks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.mf-hook-field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85rem}.mf-actions-row{display:inline-flex;gap:8px;align-items:center}.mf-actions-row--end{justify-content:flex-end;width:100%}.mf-custom-actions,.mf-custom-messages{display:grid;gap:12px}.mf-custom-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.mf-custom-card__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-messages-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-empty{margin:0;color:var(--md-sys-color-on-surface-variant)}\n"] }]
5620
5611
  }], ctorParameters: () => [{ type: undefined, decorators: [{
5621
5612
  type: Inject,
5622
5613
  args: [SETTINGS_PANEL_DATA]
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@praxisui/manual-form",
3
- "version": "9.0.0-beta.85",
3
+ "version": "9.0.0-beta.86",
4
4
  "description": "Manual form toolkit for Praxis UI: container, instance factory and editor bridge for @praxisui/* fields.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
- "@praxisui/core": "^9.0.0-beta.85",
9
- "@praxisui/dynamic-fields": "^9.0.0-beta.85",
10
- "@praxisui/settings-panel": "^9.0.0-beta.85",
11
- "@praxisui/metadata-editor": "^9.0.0-beta.85",
8
+ "@praxisui/core": "^9.0.0-beta.86",
9
+ "@praxisui/dynamic-fields": "^9.0.0-beta.86",
10
+ "@praxisui/settings-panel": "^9.0.0-beta.86",
11
+ "@praxisui/metadata-editor": "^9.0.0-beta.86",
12
12
  "@angular/cdk": "^21.0.0",
13
13
  "@angular/forms": "^21.0.0",
14
14
  "@angular/material": "^21.0.0",
15
15
  "@angular/router": "^21.0.0",
16
- "@praxisui/ai": "^9.0.0-beta.85",
16
+ "@praxisui/ai": "^9.0.0-beta.86",
17
17
  "rxjs": "~7.8.0"
18
18
  },
19
19
  "dependencies": {