@praxisui/table 9.0.0-beta.33 → 9.0.0-beta.34

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.
@@ -36,7 +36,7 @@ import * as i13 from '@angular/cdk/drag-drop';
36
36
  import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
37
37
  import { Subject, debounceTime, takeUntil, firstValueFrom, of, BehaviorSubject, Subscription, take as take$1 } from 'rxjs';
38
38
  import * as i1 from '@praxisui/core';
39
- import { LoggerService, createCorporateLoggerConfig, ConsoleLoggerSink, PraxisJsonLogicService, PraxisIconDirective, PraxisI18nService, isTableConfigV2, providePraxisI18nConfig, PRAXIS_GLOBAL_ACTION_CATALOG, SURFACE_OPEN_I18N_NAMESPACE, isRequiredGlobalActionPayloadMissing, getGlobalActionUiSchema, getRequiredGlobalActionPayloadKeys, hasMeaningfulGlobalActionPayloadValue, SurfaceOpenActionEditorComponent, SURFACE_OPEN_I18N_CONFIG, ASYNC_CONFIG_STORAGE, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_VALUES, FieldControlType, normalizeControlTypeToken, resolveControlTypeAlias, mapFieldDefinitionsToMetadata, PraxisJsonLogicError, GLOBAL_ACTION_CATALOG, GenericCrudService, validateGlobalActionRefs, getGlobalActionCatalog, TableConfigService, createDefaultTableConfig, fillUndefined, deepMerge, INLINE_FILTER_ALIAS_TOKENS, GlobalConfigService, buildSchemaId, MemoryCacheAdapter, LocalStorageCacheAdapter, SchemaMetadataClient, resolveInlineFilterControlType, fetchWithETag, serializeEntityLookupValueForPayload, ComponentMetadataRegistry, AnalyticsStatsRequestBuilderService, buildApiUrl, normalizePraxisDataQueryContext, API_URL, PraxisRuntimeComponentObservationRegistryService, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PraxisCollectionExportService, ResourceDiscoveryService, ResourceSurfaceOpenAdapterService, ResourceQuickConnectComponent, translateResourceAvailabilityReason, assertPraxisCollectionExportArtifact, PRAXIS_LOADING_CTX, resolveColumnTypeFromFieldDefinition, isPraxisPresentationVisualizationTableSafe, resolveTextMaskFormatFromFieldDefinition, translateResourceDiscoveryText, supportsImplicitValuePresentation, resolveValuePresentation, renderPraxisPresentationVisualizationHtml, translateUnavailableWorkflowMessage, CONNECTION_STORAGE, PRAXIS_LOADING_RENDERER, EmptyStateCardComponent, RESOURCE_DISCOVERY_I18N_CONFIG } from '@praxisui/core';
39
+ import { LoggerService, createCorporateLoggerConfig, ConsoleLoggerSink, PraxisJsonLogicService, PraxisIconDirective, PraxisI18nService, isTableConfigV2, providePraxisI18nConfig, PRAXIS_GLOBAL_ACTION_CATALOG, SURFACE_OPEN_I18N_NAMESPACE, isRequiredGlobalActionPayloadMissing, getGlobalActionUiSchema, getRequiredGlobalActionPayloadKeys, hasMeaningfulGlobalActionPayloadValue, SurfaceOpenActionEditorComponent, SURFACE_OPEN_I18N_CONFIG, ASYNC_CONFIG_STORAGE, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_VALUES, FieldControlType, normalizeControlTypeToken, resolveControlTypeAlias, mapFieldDefinitionsToMetadata, PraxisJsonLogicError, GLOBAL_ACTION_CATALOG, GenericCrudService, validateGlobalActionRefs, getGlobalActionCatalog, TableConfigService, createDefaultTableConfig, fillUndefined, deepMerge, INLINE_FILTER_ALIAS_TOKENS, GlobalConfigService, buildSchemaId, MemoryCacheAdapter, LocalStorageCacheAdapter, SchemaMetadataClient, resolveInlineFilterControlType, fetchWithETag, serializeEntityLookupValueForPayload, ComponentMetadataRegistry, AnalyticsStatsRequestBuilderService, buildApiUrl, normalizePraxisDataQueryContext, API_URL, PraxisRuntimeComponentObservationRegistryService, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PraxisCollectionExportService, SchemaNormalizerService, translateResourceAvailabilityReason, ResourceDiscoveryService, ResourceSurfaceOpenAdapterService, CrudOperationResolutionService, ResourceQuickConnectComponent, assertPraxisCollectionExportArtifact, PRAXIS_LOADING_CTX, resolveColumnTypeFromFieldDefinition, isPraxisPresentationVisualizationTableSafe, resolveTextMaskFormatFromFieldDefinition, translateResourceDiscoveryText, supportsImplicitValuePresentation, resolveValuePresentation, renderPraxisPresentationVisualizationHtml, translateUnavailableWorkflowMessage, CONNECTION_STORAGE, PRAXIS_LOADING_RENDERER, EmptyStateCardComponent, RESOURCE_DISCOVERY_I18N_CONFIG } from '@praxisui/core';
40
40
  import { PraxisRichContent } from '@praxisui/rich-content';
41
41
  import * as i2 from '@angular/material/toolbar';
42
42
  import { MatToolbarModule } from '@angular/material/toolbar';
@@ -106,6 +106,9 @@ const PRAXIS_TABLE_RUNTIME_I18N_CONFIG = {
106
106
  'table.chrome.rowActions.edit': 'Editar',
107
107
  'table.chrome.rowActions.delete': 'Excluir',
108
108
  'table.chrome.rowActions.duplicateDraft': 'Duplicar',
109
+ 'table.chrome.collectionActions.create': 'Novo',
110
+ 'table.chrome.collectionActions.createTooltip': 'Criar novo registro',
111
+ 'table.chrome.collectionActions.createUnavailable': 'Criação indisponível no contexto atual',
109
112
  'table.assistant.context.selectedRecords.label': 'Registros selecionados',
110
113
  'table.assistant.context.selectedRecords.value': '{count} registro(s) selecionado(s){ids}',
111
114
  'table.assistant.context.selectedRecords.value.singular': '{count} registro selecionado{ids}',
@@ -221,6 +224,9 @@ const PRAXIS_TABLE_RUNTIME_I18N_CONFIG = {
221
224
  'table.chrome.rowActions.edit': 'Edit',
222
225
  'table.chrome.rowActions.delete': 'Delete',
223
226
  'table.chrome.rowActions.duplicateDraft': 'Duplicate',
227
+ 'table.chrome.collectionActions.create': 'New',
228
+ 'table.chrome.collectionActions.createTooltip': 'Create a new record',
229
+ 'table.chrome.collectionActions.createUnavailable': 'Create is unavailable in the current context',
224
230
  'table.assistant.context.selectedRecords.label': 'Selected records',
225
231
  'table.assistant.context.selectedRecords.value': '{count} selected record(s){ids}',
226
232
  'table.assistant.context.selectedRecords.value.singular': '{count} selected record{ids}',
@@ -471,18 +477,42 @@ function getActionId(action) {
471
477
 
472
478
  const TOOLBAR_SHORTCUT_HANDLED_FLAG = '__praxisTableToolbarShortcutHandled__';
473
479
  const BLOCKED_PATH_SEGMENTS$1 = new Set(['__proto__', 'prototype', 'constructor']);
480
+ const PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS = {
481
+ 'table-integrated': {
482
+ variant: 'integrated',
483
+ density: 'comfortable',
484
+ shape: 'rounded',
485
+ divider: 'between-groups',
486
+ tokens: {
487
+ bg: 'var(--p-table-bg)',
488
+ borderColor: 'var(--p-table-border-color)',
489
+ borderWidth: '1px',
490
+ radius: '12px 12px 0 0',
491
+ shadow: 'var(--p-table-surface-shadow)',
492
+ paddingBlock: '6px',
493
+ paddingInline: '12px',
494
+ minHeight: '44px',
495
+ },
496
+ },
497
+ };
474
498
  const PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE = new InjectionToken('PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE', {
475
499
  providedIn: 'root',
476
500
  factory: () => ({}),
477
501
  });
478
502
  const PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS = new InjectionToken('PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS', {
479
503
  providedIn: 'root',
480
- factory: () => ({}),
504
+ factory: () => PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS,
481
505
  });
482
506
  function providePraxisTableToolbarAppearance(appearance, presets = {}) {
483
507
  return [
484
508
  { provide: PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, useValue: appearance },
485
- { provide: PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, useValue: presets },
509
+ {
510
+ provide: PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS,
511
+ useValue: {
512
+ ...PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS,
513
+ ...presets,
514
+ },
515
+ },
486
516
  ];
487
517
  }
488
518
  function normalizeCorporateLoggerEnvironment$2(candidate) {
@@ -1813,7 +1843,7 @@ class PraxisTableToolbar {
1813
1843
  }
1814
1844
  </div>
1815
1845
  </mat-toolbar>
1816
- `, isInline: true, styles: [":host{display:block}.praxis-toolbar{--p-table-toolbar-bg-default: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface, #fff) 96%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-low, #f6f8fc) 100%, transparent) );--p-table-toolbar-fg-default: var(--md-sys-color-on-surface, currentColor);--p-table-toolbar-border-color-default: color-mix(in srgb, var(--md-sys-color-outline-variant, #d7dbe5) 78%, transparent);--p-table-toolbar-divider-color-default: color-mix(in srgb, var(--md-sys-color-outline) 42%, transparent);--p-table-toolbar-action-hover-bg-default: color-mix(in srgb, var(--md-sys-color-primary) 10%, transparent);--p-table-toolbar-action-active-bg-default: color-mix(in srgb, var(--md-sys-color-primary) 16%, transparent);--p-table-toolbar-action-focus-ring-default: color-mix(in srgb, var(--md-sys-color-primary) 52%, transparent);--p-table-toolbar-ai-accent-color-default: var(--md-sys-color-primary, #0b72d9);--p-table-toolbar-status-fg-default: var(--md-sys-color-on-surface-variant, currentColor);background:var(--p-table-toolbar-bg, var(--p-table-toolbar-bg-default));color:var(--p-table-toolbar-fg, var(--p-table-toolbar-fg-default));box-shadow:var(--p-table-toolbar-shadow, none);padding:var(--p-table-toolbar-padding-block, var(--pfx-toolbar-pad-y, 6px)) var(--p-table-toolbar-padding-inline, var(--pfx-toolbar-pad-x, 12px));min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));display:flex;flex-direction:row;align-items:center;gap:var(--p-table-toolbar-gap, 6px);flex-wrap:wrap;border:var(--p-table-toolbar-border-width, 1px) solid var(--p-table-toolbar-border-color, var(--p-table-toolbar-border-color-default));border-radius:var(--p-table-toolbar-radius, 10px)}.praxis-toolbar.p-table-toolbar--flat{--p-table-toolbar-border-width: 0;--p-table-toolbar-shadow: none}.praxis-toolbar.p-table-toolbar--elevated{--p-table-toolbar-shadow: 0 12px 28px color-mix(in srgb, var(--md-sys-color-shadow, #000) 12%, transparent)}.praxis-toolbar.p-table-toolbar--integrated{--p-table-toolbar-bg: transparent;--p-table-toolbar-border-width: 0;--p-table-toolbar-radius: 0}.praxis-toolbar.p-table-toolbar--compact{--p-table-toolbar-min-height: 36px;--p-table-toolbar-padding-block: 4px;--p-table-toolbar-padding-inline: 10px;--p-table-toolbar-gap: 4px;--p-table-toolbar-actions-gap: 4px;--p-table-toolbar-action-size: 32px;--p-table-toolbar-action-radius: 7px}.praxis-toolbar.p-table-toolbar--comfortable{--p-table-toolbar-min-height: 44px;--p-table-toolbar-action-size: 36px}.praxis-toolbar.p-table-toolbar--spacious{--p-table-toolbar-min-height: 52px;--p-table-toolbar-padding-block: 8px;--p-table-toolbar-padding-inline: 16px;--p-table-toolbar-gap: 8px;--p-table-toolbar-actions-gap: 8px;--p-table-toolbar-action-size: 40px}.praxis-toolbar.p-table-toolbar--square{--p-table-toolbar-radius: 0;--p-table-toolbar-action-radius: 4px}.praxis-toolbar.p-table-toolbar--pill{--p-table-toolbar-radius: 999px;--p-table-toolbar-action-radius: 999px}:host(.praxis-toolbar-stack-top) .praxis-toolbar{border-bottom-left-radius:0;border-bottom-right-radius:0}:host(.praxis-toolbar-footer) .praxis-toolbar{border-top-left-radius:0;border-top-right-radius:0}:host(.praxis-toolbar-footer.footer-flat) .praxis-toolbar{border-bottom-left-radius:0;border-bottom-right-radius:0}.praxis-toolbar.mat-toolbar-single-row,.praxis-toolbar .mat-toolbar-row{height:auto}.praxis-toolbar.mat-toolbar-multiple-rows{min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px))}.toolbar-main{display:flex;align-items:center;justify-content:flex-start;min-width:0;column-gap:var(--p-table-toolbar-gap, 6px);row-gap:var(--p-table-toolbar-identity-filter-gap, 8px);min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));flex:1 1 360px;flex-wrap:wrap;container-type:inline-size}.toolbar-identity{display:flex;align-items:center;gap:var(--p-table-toolbar-identity-gap, 8px);min-width:0;max-width:100%;min-height:var(--p-table-toolbar-identity-min-height, 30px);flex:1 1 100%;margin-block-end:var(--p-table-toolbar-identity-margin-bottom, 2px);padding-inline:2px;color:var(--p-table-toolbar-title-fg, var(--p-table-toolbar-fg, var(--p-table-toolbar-fg-default)))}.toolbar-identity--center{text-align:center;justify-content:center}.toolbar-identity--end{text-align:end;justify-content:flex-end}.toolbar-identity--center .toolbar-identity__copy{align-items:center}.toolbar-identity--end .toolbar-identity__copy{align-items:flex-end}.toolbar-identity__icon{width:var(--p-table-toolbar-identity-icon-size, 28px);height:var(--p-table-toolbar-identity-icon-size, 28px);border-radius:var(--p-table-toolbar-identity-icon-radius, 8px);display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor));background:color-mix(in srgb,var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor)) 8%,transparent);border:1px solid color-mix(in srgb,var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor)) 18%,transparent)}.toolbar-identity__icon .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.toolbar-identity__copy{display:flex;flex-direction:column;min-width:0;max-width:100%;gap:1px}.toolbar-identity__title,.toolbar-identity__subtitle{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolbar-identity__title{font-size:var(--p-table-toolbar-title-font-size, 14px);font-weight:var(--p-table-toolbar-title-font-weight, 700);line-height:1.2;letter-spacing:0;color:var(--p-table-toolbar-title-fg, currentColor)}.toolbar-identity__subtitle{font-size:var(--p-table-toolbar-subtitle-font-size, 11.5px);line-height:1.25;color:var(--p-table-toolbar-subtitle-fg, var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default)))}.toolbar-main>*{min-width:0}@container (max-width: 720px){.toolbar-identity{flex-basis:100%;max-width:100%}}@container (max-width: 420px){.toolbar-identity{min-width:0;flex-basis:auto}.toolbar-identity__subtitle{display:none}}.toolbar-actions{display:flex;align-items:center;align-self:flex-end;justify-content:flex-end;gap:var(--p-table-toolbar-gap, 6px);min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));flex:0 0 auto;margin-left:auto}.actions-group{display:flex;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px)}.action-btn{height:var(--p-table-toolbar-action-size, 36px);min-width:var(--p-table-toolbar-action-size, 36px);border-radius:var(--p-table-toolbar-action-radius, 8px);font-size:12px;line-height:1.2;color:var(--p-table-toolbar-action-fg, inherit);background:var(--p-table-toolbar-action-bg, transparent)}.action-btn:hover:not(:disabled),.overflow-trigger:hover:not(:disabled),.end-actions ::ng-deep .mat-mdc-icon-button:hover:not(:disabled){background:var(--p-table-toolbar-action-hover-bg, var(--p-table-toolbar-action-hover-bg-default))}.action-btn:focus-visible,.overflow-trigger:focus-visible,.end-actions ::ng-deep .mat-mdc-icon-button:focus-visible{outline:2px solid var(--p-table-toolbar-action-focus-ring, var(--p-table-toolbar-action-focus-ring-default));outline-offset:2px}.action-btn--utility{color:var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default))}.praxis-table-toolbar-action--columns.action-btn{width:var(--p-table-toolbar-action-size, 36px);padding:0}.praxis-table-toolbar-action--columns mat-icon{margin:0}.toolbar-icon-btn{width:var(--p-table-toolbar-action-size, 36px);height:var(--p-table-toolbar-action-size, 36px);border-radius:var(--p-table-toolbar-action-radius, 8px);color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 9%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.toolbar-icon-btn:hover:not(:disabled){color:var(--md-sys-color-on-primary-container);background:color-mix(in srgb,var(--md-sys-color-primary) 16%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-primary) 36%,transparent)}.action-btn--fab{width:42px;height:42px;box-shadow:none}.pfx-tonal{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-tonal:hover{background:var(--md-sys-color-secondary-container)}.mobile-actions{display:none;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px)}.overflow-trigger{height:var(--p-table-toolbar-action-size, 36px)}.action-btn .mat-icon,.action-btn--fab .mat-icon,.overflow-trigger .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.praxis-table-toolbar-action--columns .mat-icon{font-size:24px;width:24px;height:24px;line-height:24px}.praxis-table-column-menu-item.mat-mdc-menu-item{min-height:40px}.praxis-table-column-menu-content{align-items:center;display:flex;gap:10px;min-height:40px;width:100%}.praxis-table-column-menu-check.mat-icon{color:var(--md-sys-color-primary, currentColor);flex:0 0 20px;font-size:20px;height:20px;line-height:20px;margin-inline-end:0;width:20px}.action-btn.mat-mdc-button-base,.action-btn--fab.mat-mdc-button-base,.overflow-trigger.mat-mdc-button-base,.toolbar-icon-btn.mat-mdc-button-base{--mdc-text-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-filled-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-protected-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-outlined-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px)}.action-btn.mat-mdc-unelevated-button:not(:disabled),.action-btn.mat-mdc-outlined-button:not(:disabled),.action-btn.pfx-tonal:not(:disabled){border-color:color-mix(in srgb,var(--md-sys-color-outline-variant, #d7dbe5) 82%,transparent)}.action-btn.mat-mdc-unelevated-button:not(:disabled){box-shadow:none}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled){--mdc-filled-button-container-color: var(--md-sys-color-primary);--mdc-filled-button-label-text-color: var(--md-sys-color-on-primary);--mat-filled-button-state-layer-color: var(--md-sys-color-on-primary);background:var(--md-sys-color-primary)!important;border-color:transparent;color:var(--md-sys-color-on-primary)!important;box-shadow:0 8px 18px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled):hover{background:color-mix(in srgb,var(--md-sys-color-primary) 88%,var(--md-sys-color-on-primary) 12%)!important}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled) .mat-icon{color:var(--md-sys-color-on-primary)!important}.action-btn.mat-mdc-button-base:not(.mat-mdc-icon-button){padding-inline:10px}.end-actions{display:flex;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px);margin-left:4px;padding-left:10px;border-left:1px solid var(--p-table-toolbar-divider-color, var(--p-table-toolbar-divider-color-default))}.end-actions ::ng-deep .mat-mdc-icon-button{width:var(--p-table-toolbar-action-size, 36px);height:var(--p-table-toolbar-action-size, 36px);display:inline-grid;place-items:center;padding:0;line-height:0;--mdc-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px);--mat-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px)}.end-actions ::ng-deep .mat-mdc-icon-button .mat-icon{display:block;flex:0 0 auto;font-size:24px;width:24px;height:24px;line-height:24px;margin:0}.praxis-toolbar.p-table-toolbar--divider-between-groups .actions-group,.praxis-toolbar.p-table-toolbar--divider-start .toolbar-main{padding-right:10px;border-right:1px solid var(--p-table-toolbar-divider-color, var(--p-table-toolbar-divider-color-default))}.end-actions ::ng-deep .praxis-table-toolbar-action--ai,.end-actions ::ng-deep .praxis-table-ai-trigger{color:var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default));background:color-mix(in srgb,var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default)) 10%,transparent);border:1px solid color-mix(in srgb,var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default)) 24%,transparent)}.end-actions ::ng-deep [data-role=table-settings]{color:var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default))}@media(min-width:1024px){.toolbar-actions{justify-content:flex-end}}@media(max-width:1023px){.actions-group{display:none}.mobile-actions{display:flex}.toolbar-actions{justify-content:flex-end}.toolbar-identity{min-width:0;max-width:100%;flex:1 1 100%}}\n"], dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.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: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.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: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.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: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
1846
+ `, isInline: true, styles: [":host{display:block}.praxis-toolbar{--p-table-toolbar-bg-default: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface, #fff) 96%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-low, #f6f8fc) 100%, transparent) );--p-table-toolbar-fg-default: var(--md-sys-color-on-surface, currentColor);--p-table-toolbar-border-color-default: color-mix(in srgb, var(--md-sys-color-outline-variant, #d7dbe5) 78%, transparent);--p-table-toolbar-divider-color-default: color-mix(in srgb, var(--md-sys-color-outline) 42%, transparent);--p-table-toolbar-action-hover-bg-default: color-mix(in srgb, var(--md-sys-color-primary) 10%, transparent);--p-table-toolbar-action-active-bg-default: color-mix(in srgb, var(--md-sys-color-primary) 16%, transparent);--p-table-toolbar-action-focus-ring-default: color-mix(in srgb, var(--md-sys-color-primary) 52%, transparent);--p-table-toolbar-ai-accent-color-default: var(--md-sys-color-primary, #0b72d9);--p-table-toolbar-status-fg-default: var(--md-sys-color-on-surface-variant, currentColor);background:var(--p-table-toolbar-bg, var(--p-table-toolbar-bg-default));color:var(--p-table-toolbar-fg, var(--p-table-toolbar-fg-default));box-shadow:var(--p-table-toolbar-shadow, none);padding:var(--p-table-toolbar-padding-block, var(--pfx-toolbar-pad-y, 6px)) var(--p-table-toolbar-padding-inline, var(--pfx-toolbar-pad-x, 12px));min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));display:flex;flex-direction:row;align-items:center;gap:var(--p-table-toolbar-gap, 6px);flex-wrap:wrap;border:var(--p-table-toolbar-border-width, 1px) solid var(--p-table-toolbar-border-color, var(--p-table-toolbar-border-color-default));border-radius:var(--p-table-toolbar-radius, 10px)}.praxis-toolbar.p-table-toolbar--flat{--p-table-toolbar-border-width: 0;--p-table-toolbar-shadow: none}.praxis-toolbar.p-table-toolbar--elevated{--p-table-toolbar-shadow: 0 12px 28px color-mix(in srgb, var(--md-sys-color-shadow, #000) 12%, transparent)}.praxis-toolbar.p-table-toolbar--integrated{--p-table-toolbar-bg: transparent;--p-table-toolbar-border-width: 0;--p-table-toolbar-radius: 0}.praxis-toolbar.p-table-toolbar--compact{--p-table-toolbar-min-height: 36px;--p-table-toolbar-padding-block: 4px;--p-table-toolbar-padding-inline: 10px;--p-table-toolbar-gap: 4px;--p-table-toolbar-actions-gap: 4px;--p-table-toolbar-action-size: 32px;--p-table-toolbar-action-radius: 7px}.praxis-toolbar.p-table-toolbar--comfortable{--p-table-toolbar-min-height: 44px;--p-table-toolbar-action-size: 36px}.praxis-toolbar.p-table-toolbar--spacious{--p-table-toolbar-min-height: 52px;--p-table-toolbar-padding-block: 8px;--p-table-toolbar-padding-inline: 16px;--p-table-toolbar-gap: 8px;--p-table-toolbar-actions-gap: 8px;--p-table-toolbar-action-size: 40px}.praxis-toolbar.p-table-toolbar--square{--p-table-toolbar-radius: 0;--p-table-toolbar-action-radius: 4px}.praxis-toolbar.p-table-toolbar--pill{--p-table-toolbar-radius: 999px;--p-table-toolbar-action-radius: 999px}:host(.praxis-toolbar-stack-top) .praxis-toolbar{border-bottom-left-radius:0;border-bottom-right-radius:0}:host(.praxis-toolbar-footer) .praxis-toolbar{border-top-left-radius:0;border-top-right-radius:0}:host(.praxis-toolbar-footer.footer-flat) .praxis-toolbar{border-bottom-left-radius:0;border-bottom-right-radius:0}.praxis-toolbar.mat-toolbar-single-row,.praxis-toolbar .mat-toolbar-row{height:auto}.praxis-toolbar.mat-toolbar-multiple-rows{min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px))}.toolbar-main{display:flex;align-items:center;justify-content:flex-start;min-width:0;column-gap:var(--p-table-toolbar-gap, 6px);row-gap:var(--p-table-toolbar-identity-filter-gap, 8px);min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));flex:1 1 360px;flex-wrap:wrap;container-type:inline-size}.toolbar-identity{display:flex;align-items:center;gap:var(--p-table-toolbar-identity-gap, 8px);min-width:0;max-width:100%;min-height:var(--p-table-toolbar-identity-min-height, 30px);flex:1 1 100%;margin-block-end:var(--p-table-toolbar-identity-margin-bottom, 2px);padding-inline:2px;color:var(--p-table-toolbar-title-fg, var(--p-table-toolbar-fg, var(--p-table-toolbar-fg-default)))}.toolbar-identity--center{text-align:center;justify-content:center}.toolbar-identity--end{text-align:end;justify-content:flex-end}.toolbar-identity--center .toolbar-identity__copy{align-items:center}.toolbar-identity--end .toolbar-identity__copy{align-items:flex-end}.toolbar-identity__icon{width:var(--p-table-toolbar-identity-icon-size, 28px);height:var(--p-table-toolbar-identity-icon-size, 28px);border-radius:var(--p-table-toolbar-identity-icon-radius, 8px);display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor));background:color-mix(in srgb,var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor)) 8%,transparent);border:1px solid color-mix(in srgb,var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor)) 18%,transparent)}.toolbar-identity__icon .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.toolbar-identity__copy{display:flex;flex-direction:column;min-width:0;max-width:100%;gap:1px}.toolbar-identity__title,.toolbar-identity__subtitle{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolbar-identity__title{font-size:var(--p-table-toolbar-title-font-size, 14px);font-weight:var(--p-table-toolbar-title-font-weight, 700);line-height:1.2;letter-spacing:0;color:var(--p-table-toolbar-title-fg, currentColor)}.toolbar-identity__subtitle{font-size:var(--p-table-toolbar-subtitle-font-size, 11.5px);line-height:1.25;color:var(--p-table-toolbar-subtitle-fg, var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default)))}.toolbar-main>*{min-width:0}@container (max-width: 720px){.toolbar-identity{flex-basis:100%;max-width:100%}}@container (max-width: 420px){.toolbar-identity{min-width:0;flex-basis:auto}.toolbar-identity__subtitle{display:none}}.toolbar-actions{display:flex;align-items:center;align-self:flex-end;justify-content:flex-end;gap:var(--p-table-toolbar-gap, 6px);min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));flex:0 0 auto;margin-left:auto}.actions-group{display:flex;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px)}.action-btn{height:var(--p-table-toolbar-action-size, 36px);min-width:var(--p-table-toolbar-action-size, 36px);border-radius:var(--p-table-toolbar-action-radius, 8px);font-size:12px;line-height:1.2;color:var(--p-table-toolbar-action-fg, inherit);background:var(--p-table-toolbar-action-bg, transparent)}.action-btn:hover:not(:disabled),.overflow-trigger:hover:not(:disabled),.end-actions ::ng-deep .mat-mdc-icon-button:hover:not(:disabled){background:var(--p-table-toolbar-action-hover-bg, var(--p-table-toolbar-action-hover-bg-default))}.action-btn:focus-visible,.overflow-trigger:focus-visible,.end-actions ::ng-deep .mat-mdc-icon-button:focus-visible{outline:2px solid var(--p-table-toolbar-action-focus-ring, var(--p-table-toolbar-action-focus-ring-default));outline-offset:2px}.action-btn--utility{color:var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default))}.praxis-table-toolbar-action--columns.action-btn{width:var(--p-table-toolbar-action-size, 36px);padding:0}.praxis-table-toolbar-action--columns mat-icon{margin:0}.toolbar-icon-btn{width:var(--p-table-toolbar-action-size, 36px);height:var(--p-table-toolbar-action-size, 36px);border-radius:var(--p-table-toolbar-action-radius, 8px);color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 9%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.toolbar-icon-btn:hover:not(:disabled){color:var(--md-sys-color-on-primary-container);background:color-mix(in srgb,var(--md-sys-color-primary) 16%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-primary) 36%,transparent)}.action-btn--fab{width:42px;height:42px;box-shadow:none}.pfx-tonal{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-tonal:hover{background:var(--md-sys-color-secondary-container)}.mobile-actions{display:none;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px)}.overflow-trigger{height:var(--p-table-toolbar-action-size, 36px)}.action-btn .mat-icon,.action-btn--fab .mat-icon,.overflow-trigger .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.praxis-table-toolbar-action--columns .mat-icon{font-size:24px;width:24px;height:24px;line-height:24px}.praxis-table-column-menu-item.mat-mdc-menu-item{min-height:40px}.praxis-table-column-menu-content{align-items:center;display:flex;gap:10px;min-height:40px;width:100%}.praxis-table-column-menu-check.mat-icon{color:var(--md-sys-color-primary, currentColor);flex:0 0 20px;font-size:20px;height:20px;line-height:20px;margin-inline-end:0;width:20px}.action-btn.mat-mdc-button-base,.action-btn--fab.mat-mdc-button-base,.overflow-trigger.mat-mdc-button-base,.toolbar-icon-btn.mat-mdc-button-base{--mdc-text-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-filled-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-protected-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-outlined-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px)}.action-btn.mat-mdc-unelevated-button:not(:disabled),.action-btn.mat-mdc-outlined-button:not(:disabled),.action-btn.pfx-tonal:not(:disabled){border-color:color-mix(in srgb,var(--md-sys-color-outline-variant, #d7dbe5) 82%,transparent)}.action-btn.mat-mdc-unelevated-button:not(:disabled){box-shadow:none}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled){--mdc-filled-button-container-color: var(--md-sys-color-primary);--mdc-filled-button-label-text-color: var(--md-sys-color-on-primary);--mat-filled-button-state-layer-color: var(--md-sys-color-on-primary);background:var(--md-sys-color-primary)!important;border-color:transparent;color:var(--md-sys-color-on-primary)!important;box-shadow:0 8px 18px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled):hover{background:color-mix(in srgb,var(--md-sys-color-primary) 88%,var(--md-sys-color-on-primary) 12%)!important}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled) .mat-icon{color:var(--md-sys-color-on-primary)!important}.action-btn.mat-mdc-button-base:not(.mat-mdc-icon-button){padding-inline:10px}.end-actions{display:flex;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px);margin-left:4px;padding-left:10px;border-left:1px solid var(--p-table-toolbar-divider-color, var(--p-table-toolbar-divider-color-default))}.end-actions:empty{display:none;gap:0;margin-left:0;padding-left:0;border-left:0}.end-actions ::ng-deep .mat-mdc-icon-button{width:var(--p-table-toolbar-action-size, 36px);height:var(--p-table-toolbar-action-size, 36px);display:inline-grid;place-items:center;padding:0;line-height:0;--mdc-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px);--mat-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px)}.end-actions ::ng-deep .mat-mdc-icon-button .mat-icon{display:block;flex:0 0 auto;font-size:24px;width:24px;height:24px;line-height:24px;margin:0}.praxis-toolbar.p-table-toolbar--divider-between-groups .actions-group,.praxis-toolbar.p-table-toolbar--divider-start .toolbar-main{padding-right:10px;border-right:1px solid var(--p-table-toolbar-divider-color, var(--p-table-toolbar-divider-color-default))}.end-actions ::ng-deep .praxis-table-toolbar-action--ai,.end-actions ::ng-deep .praxis-table-ai-trigger{color:var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default));background:color-mix(in srgb,var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default)) 10%,transparent);border:1px solid color-mix(in srgb,var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default)) 24%,transparent)}.end-actions ::ng-deep [data-role=table-settings]{color:var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default))}@media(min-width:1024px){.toolbar-actions{justify-content:flex-end}}@media(max-width:1023px){.actions-group{display:none}.mobile-actions{display:flex}.toolbar-actions{justify-content:flex-end}.toolbar-identity{min-width:0;max-width:100%;flex:1 1 100%}}\n"], dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.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: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.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: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.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: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
1817
1847
  }
1818
1848
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisTableToolbar, decorators: [{
1819
1849
  type: Component,
@@ -2350,7 +2380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2350
2380
  `, host: {
2351
2381
  '[class.praxis-toolbar-footer]': "placement === 'footer'",
2352
2382
  '(document:keydown)': 'onDocumentKeydown($event)',
2353
- }, styles: [":host{display:block}.praxis-toolbar{--p-table-toolbar-bg-default: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface, #fff) 96%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-low, #f6f8fc) 100%, transparent) );--p-table-toolbar-fg-default: var(--md-sys-color-on-surface, currentColor);--p-table-toolbar-border-color-default: color-mix(in srgb, var(--md-sys-color-outline-variant, #d7dbe5) 78%, transparent);--p-table-toolbar-divider-color-default: color-mix(in srgb, var(--md-sys-color-outline) 42%, transparent);--p-table-toolbar-action-hover-bg-default: color-mix(in srgb, var(--md-sys-color-primary) 10%, transparent);--p-table-toolbar-action-active-bg-default: color-mix(in srgb, var(--md-sys-color-primary) 16%, transparent);--p-table-toolbar-action-focus-ring-default: color-mix(in srgb, var(--md-sys-color-primary) 52%, transparent);--p-table-toolbar-ai-accent-color-default: var(--md-sys-color-primary, #0b72d9);--p-table-toolbar-status-fg-default: var(--md-sys-color-on-surface-variant, currentColor);background:var(--p-table-toolbar-bg, var(--p-table-toolbar-bg-default));color:var(--p-table-toolbar-fg, var(--p-table-toolbar-fg-default));box-shadow:var(--p-table-toolbar-shadow, none);padding:var(--p-table-toolbar-padding-block, var(--pfx-toolbar-pad-y, 6px)) var(--p-table-toolbar-padding-inline, var(--pfx-toolbar-pad-x, 12px));min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));display:flex;flex-direction:row;align-items:center;gap:var(--p-table-toolbar-gap, 6px);flex-wrap:wrap;border:var(--p-table-toolbar-border-width, 1px) solid var(--p-table-toolbar-border-color, var(--p-table-toolbar-border-color-default));border-radius:var(--p-table-toolbar-radius, 10px)}.praxis-toolbar.p-table-toolbar--flat{--p-table-toolbar-border-width: 0;--p-table-toolbar-shadow: none}.praxis-toolbar.p-table-toolbar--elevated{--p-table-toolbar-shadow: 0 12px 28px color-mix(in srgb, var(--md-sys-color-shadow, #000) 12%, transparent)}.praxis-toolbar.p-table-toolbar--integrated{--p-table-toolbar-bg: transparent;--p-table-toolbar-border-width: 0;--p-table-toolbar-radius: 0}.praxis-toolbar.p-table-toolbar--compact{--p-table-toolbar-min-height: 36px;--p-table-toolbar-padding-block: 4px;--p-table-toolbar-padding-inline: 10px;--p-table-toolbar-gap: 4px;--p-table-toolbar-actions-gap: 4px;--p-table-toolbar-action-size: 32px;--p-table-toolbar-action-radius: 7px}.praxis-toolbar.p-table-toolbar--comfortable{--p-table-toolbar-min-height: 44px;--p-table-toolbar-action-size: 36px}.praxis-toolbar.p-table-toolbar--spacious{--p-table-toolbar-min-height: 52px;--p-table-toolbar-padding-block: 8px;--p-table-toolbar-padding-inline: 16px;--p-table-toolbar-gap: 8px;--p-table-toolbar-actions-gap: 8px;--p-table-toolbar-action-size: 40px}.praxis-toolbar.p-table-toolbar--square{--p-table-toolbar-radius: 0;--p-table-toolbar-action-radius: 4px}.praxis-toolbar.p-table-toolbar--pill{--p-table-toolbar-radius: 999px;--p-table-toolbar-action-radius: 999px}:host(.praxis-toolbar-stack-top) .praxis-toolbar{border-bottom-left-radius:0;border-bottom-right-radius:0}:host(.praxis-toolbar-footer) .praxis-toolbar{border-top-left-radius:0;border-top-right-radius:0}:host(.praxis-toolbar-footer.footer-flat) .praxis-toolbar{border-bottom-left-radius:0;border-bottom-right-radius:0}.praxis-toolbar.mat-toolbar-single-row,.praxis-toolbar .mat-toolbar-row{height:auto}.praxis-toolbar.mat-toolbar-multiple-rows{min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px))}.toolbar-main{display:flex;align-items:center;justify-content:flex-start;min-width:0;column-gap:var(--p-table-toolbar-gap, 6px);row-gap:var(--p-table-toolbar-identity-filter-gap, 8px);min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));flex:1 1 360px;flex-wrap:wrap;container-type:inline-size}.toolbar-identity{display:flex;align-items:center;gap:var(--p-table-toolbar-identity-gap, 8px);min-width:0;max-width:100%;min-height:var(--p-table-toolbar-identity-min-height, 30px);flex:1 1 100%;margin-block-end:var(--p-table-toolbar-identity-margin-bottom, 2px);padding-inline:2px;color:var(--p-table-toolbar-title-fg, var(--p-table-toolbar-fg, var(--p-table-toolbar-fg-default)))}.toolbar-identity--center{text-align:center;justify-content:center}.toolbar-identity--end{text-align:end;justify-content:flex-end}.toolbar-identity--center .toolbar-identity__copy{align-items:center}.toolbar-identity--end .toolbar-identity__copy{align-items:flex-end}.toolbar-identity__icon{width:var(--p-table-toolbar-identity-icon-size, 28px);height:var(--p-table-toolbar-identity-icon-size, 28px);border-radius:var(--p-table-toolbar-identity-icon-radius, 8px);display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor));background:color-mix(in srgb,var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor)) 8%,transparent);border:1px solid color-mix(in srgb,var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor)) 18%,transparent)}.toolbar-identity__icon .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.toolbar-identity__copy{display:flex;flex-direction:column;min-width:0;max-width:100%;gap:1px}.toolbar-identity__title,.toolbar-identity__subtitle{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolbar-identity__title{font-size:var(--p-table-toolbar-title-font-size, 14px);font-weight:var(--p-table-toolbar-title-font-weight, 700);line-height:1.2;letter-spacing:0;color:var(--p-table-toolbar-title-fg, currentColor)}.toolbar-identity__subtitle{font-size:var(--p-table-toolbar-subtitle-font-size, 11.5px);line-height:1.25;color:var(--p-table-toolbar-subtitle-fg, var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default)))}.toolbar-main>*{min-width:0}@container (max-width: 720px){.toolbar-identity{flex-basis:100%;max-width:100%}}@container (max-width: 420px){.toolbar-identity{min-width:0;flex-basis:auto}.toolbar-identity__subtitle{display:none}}.toolbar-actions{display:flex;align-items:center;align-self:flex-end;justify-content:flex-end;gap:var(--p-table-toolbar-gap, 6px);min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));flex:0 0 auto;margin-left:auto}.actions-group{display:flex;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px)}.action-btn{height:var(--p-table-toolbar-action-size, 36px);min-width:var(--p-table-toolbar-action-size, 36px);border-radius:var(--p-table-toolbar-action-radius, 8px);font-size:12px;line-height:1.2;color:var(--p-table-toolbar-action-fg, inherit);background:var(--p-table-toolbar-action-bg, transparent)}.action-btn:hover:not(:disabled),.overflow-trigger:hover:not(:disabled),.end-actions ::ng-deep .mat-mdc-icon-button:hover:not(:disabled){background:var(--p-table-toolbar-action-hover-bg, var(--p-table-toolbar-action-hover-bg-default))}.action-btn:focus-visible,.overflow-trigger:focus-visible,.end-actions ::ng-deep .mat-mdc-icon-button:focus-visible{outline:2px solid var(--p-table-toolbar-action-focus-ring, var(--p-table-toolbar-action-focus-ring-default));outline-offset:2px}.action-btn--utility{color:var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default))}.praxis-table-toolbar-action--columns.action-btn{width:var(--p-table-toolbar-action-size, 36px);padding:0}.praxis-table-toolbar-action--columns mat-icon{margin:0}.toolbar-icon-btn{width:var(--p-table-toolbar-action-size, 36px);height:var(--p-table-toolbar-action-size, 36px);border-radius:var(--p-table-toolbar-action-radius, 8px);color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 9%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.toolbar-icon-btn:hover:not(:disabled){color:var(--md-sys-color-on-primary-container);background:color-mix(in srgb,var(--md-sys-color-primary) 16%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-primary) 36%,transparent)}.action-btn--fab{width:42px;height:42px;box-shadow:none}.pfx-tonal{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-tonal:hover{background:var(--md-sys-color-secondary-container)}.mobile-actions{display:none;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px)}.overflow-trigger{height:var(--p-table-toolbar-action-size, 36px)}.action-btn .mat-icon,.action-btn--fab .mat-icon,.overflow-trigger .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.praxis-table-toolbar-action--columns .mat-icon{font-size:24px;width:24px;height:24px;line-height:24px}.praxis-table-column-menu-item.mat-mdc-menu-item{min-height:40px}.praxis-table-column-menu-content{align-items:center;display:flex;gap:10px;min-height:40px;width:100%}.praxis-table-column-menu-check.mat-icon{color:var(--md-sys-color-primary, currentColor);flex:0 0 20px;font-size:20px;height:20px;line-height:20px;margin-inline-end:0;width:20px}.action-btn.mat-mdc-button-base,.action-btn--fab.mat-mdc-button-base,.overflow-trigger.mat-mdc-button-base,.toolbar-icon-btn.mat-mdc-button-base{--mdc-text-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-filled-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-protected-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-outlined-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px)}.action-btn.mat-mdc-unelevated-button:not(:disabled),.action-btn.mat-mdc-outlined-button:not(:disabled),.action-btn.pfx-tonal:not(:disabled){border-color:color-mix(in srgb,var(--md-sys-color-outline-variant, #d7dbe5) 82%,transparent)}.action-btn.mat-mdc-unelevated-button:not(:disabled){box-shadow:none}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled){--mdc-filled-button-container-color: var(--md-sys-color-primary);--mdc-filled-button-label-text-color: var(--md-sys-color-on-primary);--mat-filled-button-state-layer-color: var(--md-sys-color-on-primary);background:var(--md-sys-color-primary)!important;border-color:transparent;color:var(--md-sys-color-on-primary)!important;box-shadow:0 8px 18px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled):hover{background:color-mix(in srgb,var(--md-sys-color-primary) 88%,var(--md-sys-color-on-primary) 12%)!important}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled) .mat-icon{color:var(--md-sys-color-on-primary)!important}.action-btn.mat-mdc-button-base:not(.mat-mdc-icon-button){padding-inline:10px}.end-actions{display:flex;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px);margin-left:4px;padding-left:10px;border-left:1px solid var(--p-table-toolbar-divider-color, var(--p-table-toolbar-divider-color-default))}.end-actions ::ng-deep .mat-mdc-icon-button{width:var(--p-table-toolbar-action-size, 36px);height:var(--p-table-toolbar-action-size, 36px);display:inline-grid;place-items:center;padding:0;line-height:0;--mdc-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px);--mat-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px)}.end-actions ::ng-deep .mat-mdc-icon-button .mat-icon{display:block;flex:0 0 auto;font-size:24px;width:24px;height:24px;line-height:24px;margin:0}.praxis-toolbar.p-table-toolbar--divider-between-groups .actions-group,.praxis-toolbar.p-table-toolbar--divider-start .toolbar-main{padding-right:10px;border-right:1px solid var(--p-table-toolbar-divider-color, var(--p-table-toolbar-divider-color-default))}.end-actions ::ng-deep .praxis-table-toolbar-action--ai,.end-actions ::ng-deep .praxis-table-ai-trigger{color:var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default));background:color-mix(in srgb,var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default)) 10%,transparent);border:1px solid color-mix(in srgb,var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default)) 24%,transparent)}.end-actions ::ng-deep [data-role=table-settings]{color:var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default))}@media(min-width:1024px){.toolbar-actions{justify-content:flex-end}}@media(max-width:1023px){.actions-group{display:none}.mobile-actions{display:flex}.toolbar-actions{justify-content:flex-end}.toolbar-identity{min-width:0;max-width:100%;flex:1 1 100%}}\n"] }]
2383
+ }, styles: [":host{display:block}.praxis-toolbar{--p-table-toolbar-bg-default: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface, #fff) 96%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-low, #f6f8fc) 100%, transparent) );--p-table-toolbar-fg-default: var(--md-sys-color-on-surface, currentColor);--p-table-toolbar-border-color-default: color-mix(in srgb, var(--md-sys-color-outline-variant, #d7dbe5) 78%, transparent);--p-table-toolbar-divider-color-default: color-mix(in srgb, var(--md-sys-color-outline) 42%, transparent);--p-table-toolbar-action-hover-bg-default: color-mix(in srgb, var(--md-sys-color-primary) 10%, transparent);--p-table-toolbar-action-active-bg-default: color-mix(in srgb, var(--md-sys-color-primary) 16%, transparent);--p-table-toolbar-action-focus-ring-default: color-mix(in srgb, var(--md-sys-color-primary) 52%, transparent);--p-table-toolbar-ai-accent-color-default: var(--md-sys-color-primary, #0b72d9);--p-table-toolbar-status-fg-default: var(--md-sys-color-on-surface-variant, currentColor);background:var(--p-table-toolbar-bg, var(--p-table-toolbar-bg-default));color:var(--p-table-toolbar-fg, var(--p-table-toolbar-fg-default));box-shadow:var(--p-table-toolbar-shadow, none);padding:var(--p-table-toolbar-padding-block, var(--pfx-toolbar-pad-y, 6px)) var(--p-table-toolbar-padding-inline, var(--pfx-toolbar-pad-x, 12px));min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));display:flex;flex-direction:row;align-items:center;gap:var(--p-table-toolbar-gap, 6px);flex-wrap:wrap;border:var(--p-table-toolbar-border-width, 1px) solid var(--p-table-toolbar-border-color, var(--p-table-toolbar-border-color-default));border-radius:var(--p-table-toolbar-radius, 10px)}.praxis-toolbar.p-table-toolbar--flat{--p-table-toolbar-border-width: 0;--p-table-toolbar-shadow: none}.praxis-toolbar.p-table-toolbar--elevated{--p-table-toolbar-shadow: 0 12px 28px color-mix(in srgb, var(--md-sys-color-shadow, #000) 12%, transparent)}.praxis-toolbar.p-table-toolbar--integrated{--p-table-toolbar-bg: transparent;--p-table-toolbar-border-width: 0;--p-table-toolbar-radius: 0}.praxis-toolbar.p-table-toolbar--compact{--p-table-toolbar-min-height: 36px;--p-table-toolbar-padding-block: 4px;--p-table-toolbar-padding-inline: 10px;--p-table-toolbar-gap: 4px;--p-table-toolbar-actions-gap: 4px;--p-table-toolbar-action-size: 32px;--p-table-toolbar-action-radius: 7px}.praxis-toolbar.p-table-toolbar--comfortable{--p-table-toolbar-min-height: 44px;--p-table-toolbar-action-size: 36px}.praxis-toolbar.p-table-toolbar--spacious{--p-table-toolbar-min-height: 52px;--p-table-toolbar-padding-block: 8px;--p-table-toolbar-padding-inline: 16px;--p-table-toolbar-gap: 8px;--p-table-toolbar-actions-gap: 8px;--p-table-toolbar-action-size: 40px}.praxis-toolbar.p-table-toolbar--square{--p-table-toolbar-radius: 0;--p-table-toolbar-action-radius: 4px}.praxis-toolbar.p-table-toolbar--pill{--p-table-toolbar-radius: 999px;--p-table-toolbar-action-radius: 999px}:host(.praxis-toolbar-stack-top) .praxis-toolbar{border-bottom-left-radius:0;border-bottom-right-radius:0}:host(.praxis-toolbar-footer) .praxis-toolbar{border-top-left-radius:0;border-top-right-radius:0}:host(.praxis-toolbar-footer.footer-flat) .praxis-toolbar{border-bottom-left-radius:0;border-bottom-right-radius:0}.praxis-toolbar.mat-toolbar-single-row,.praxis-toolbar .mat-toolbar-row{height:auto}.praxis-toolbar.mat-toolbar-multiple-rows{min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px))}.toolbar-main{display:flex;align-items:center;justify-content:flex-start;min-width:0;column-gap:var(--p-table-toolbar-gap, 6px);row-gap:var(--p-table-toolbar-identity-filter-gap, 8px);min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));flex:1 1 360px;flex-wrap:wrap;container-type:inline-size}.toolbar-identity{display:flex;align-items:center;gap:var(--p-table-toolbar-identity-gap, 8px);min-width:0;max-width:100%;min-height:var(--p-table-toolbar-identity-min-height, 30px);flex:1 1 100%;margin-block-end:var(--p-table-toolbar-identity-margin-bottom, 2px);padding-inline:2px;color:var(--p-table-toolbar-title-fg, var(--p-table-toolbar-fg, var(--p-table-toolbar-fg-default)))}.toolbar-identity--center{text-align:center;justify-content:center}.toolbar-identity--end{text-align:end;justify-content:flex-end}.toolbar-identity--center .toolbar-identity__copy{align-items:center}.toolbar-identity--end .toolbar-identity__copy{align-items:flex-end}.toolbar-identity__icon{width:var(--p-table-toolbar-identity-icon-size, 28px);height:var(--p-table-toolbar-identity-icon-size, 28px);border-radius:var(--p-table-toolbar-identity-icon-radius, 8px);display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor));background:color-mix(in srgb,var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor)) 8%,transparent);border:1px solid color-mix(in srgb,var(--p-table-toolbar-icon-fg, var(--md-sys-color-primary, currentColor)) 18%,transparent)}.toolbar-identity__icon .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.toolbar-identity__copy{display:flex;flex-direction:column;min-width:0;max-width:100%;gap:1px}.toolbar-identity__title,.toolbar-identity__subtitle{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolbar-identity__title{font-size:var(--p-table-toolbar-title-font-size, 14px);font-weight:var(--p-table-toolbar-title-font-weight, 700);line-height:1.2;letter-spacing:0;color:var(--p-table-toolbar-title-fg, currentColor)}.toolbar-identity__subtitle{font-size:var(--p-table-toolbar-subtitle-font-size, 11.5px);line-height:1.25;color:var(--p-table-toolbar-subtitle-fg, var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default)))}.toolbar-main>*{min-width:0}@container (max-width: 720px){.toolbar-identity{flex-basis:100%;max-width:100%}}@container (max-width: 420px){.toolbar-identity{min-width:0;flex-basis:auto}.toolbar-identity__subtitle{display:none}}.toolbar-actions{display:flex;align-items:center;align-self:flex-end;justify-content:flex-end;gap:var(--p-table-toolbar-gap, 6px);min-height:var(--p-table-toolbar-min-height, var(--pfx-filter-h, 44px));flex:0 0 auto;margin-left:auto}.actions-group{display:flex;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px)}.action-btn{height:var(--p-table-toolbar-action-size, 36px);min-width:var(--p-table-toolbar-action-size, 36px);border-radius:var(--p-table-toolbar-action-radius, 8px);font-size:12px;line-height:1.2;color:var(--p-table-toolbar-action-fg, inherit);background:var(--p-table-toolbar-action-bg, transparent)}.action-btn:hover:not(:disabled),.overflow-trigger:hover:not(:disabled),.end-actions ::ng-deep .mat-mdc-icon-button:hover:not(:disabled){background:var(--p-table-toolbar-action-hover-bg, var(--p-table-toolbar-action-hover-bg-default))}.action-btn:focus-visible,.overflow-trigger:focus-visible,.end-actions ::ng-deep .mat-mdc-icon-button:focus-visible{outline:2px solid var(--p-table-toolbar-action-focus-ring, var(--p-table-toolbar-action-focus-ring-default));outline-offset:2px}.action-btn--utility{color:var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default))}.praxis-table-toolbar-action--columns.action-btn{width:var(--p-table-toolbar-action-size, 36px);padding:0}.praxis-table-toolbar-action--columns mat-icon{margin:0}.toolbar-icon-btn{width:var(--p-table-toolbar-action-size, 36px);height:var(--p-table-toolbar-action-size, 36px);border-radius:var(--p-table-toolbar-action-radius, 8px);color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 9%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.toolbar-icon-btn:hover:not(:disabled){color:var(--md-sys-color-on-primary-container);background:color-mix(in srgb,var(--md-sys-color-primary) 16%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-primary) 36%,transparent)}.action-btn--fab{width:42px;height:42px;box-shadow:none}.pfx-tonal{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-tonal:hover{background:var(--md-sys-color-secondary-container)}.mobile-actions{display:none;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px)}.overflow-trigger{height:var(--p-table-toolbar-action-size, 36px)}.action-btn .mat-icon,.action-btn--fab .mat-icon,.overflow-trigger .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.praxis-table-toolbar-action--columns .mat-icon{font-size:24px;width:24px;height:24px;line-height:24px}.praxis-table-column-menu-item.mat-mdc-menu-item{min-height:40px}.praxis-table-column-menu-content{align-items:center;display:flex;gap:10px;min-height:40px;width:100%}.praxis-table-column-menu-check.mat-icon{color:var(--md-sys-color-primary, currentColor);flex:0 0 20px;font-size:20px;height:20px;line-height:20px;margin-inline-end:0;width:20px}.action-btn.mat-mdc-button-base,.action-btn--fab.mat-mdc-button-base,.overflow-trigger.mat-mdc-button-base,.toolbar-icon-btn.mat-mdc-button-base{--mdc-text-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-filled-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-protected-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-outlined-button-container-height: var(--p-table-toolbar-action-size, 36px);--mdc-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px)}.action-btn.mat-mdc-unelevated-button:not(:disabled),.action-btn.mat-mdc-outlined-button:not(:disabled),.action-btn.pfx-tonal:not(:disabled){border-color:color-mix(in srgb,var(--md-sys-color-outline-variant, #d7dbe5) 82%,transparent)}.action-btn.mat-mdc-unelevated-button:not(:disabled){box-shadow:none}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled){--mdc-filled-button-container-color: var(--md-sys-color-primary);--mdc-filled-button-label-text-color: var(--md-sys-color-on-primary);--mat-filled-button-state-layer-color: var(--md-sys-color-on-primary);background:var(--md-sys-color-primary)!important;border-color:transparent;color:var(--md-sys-color-on-primary)!important;box-shadow:0 8px 18px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled):hover{background:color-mix(in srgb,var(--md-sys-color-primary) 88%,var(--md-sys-color-on-primary) 12%)!important}.action-btn.mat-mdc-unelevated-button.mat-primary:not(:disabled) .mat-icon{color:var(--md-sys-color-on-primary)!important}.action-btn.mat-mdc-button-base:not(.mat-mdc-icon-button){padding-inline:10px}.end-actions{display:flex;align-items:center;gap:var(--p-table-toolbar-actions-gap, 6px);margin-left:4px;padding-left:10px;border-left:1px solid var(--p-table-toolbar-divider-color, var(--p-table-toolbar-divider-color-default))}.end-actions:empty{display:none;gap:0;margin-left:0;padding-left:0;border-left:0}.end-actions ::ng-deep .mat-mdc-icon-button{width:var(--p-table-toolbar-action-size, 36px);height:var(--p-table-toolbar-action-size, 36px);display:inline-grid;place-items:center;padding:0;line-height:0;--mdc-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px);--mat-icon-button-state-layer-size: var(--p-table-toolbar-action-size, 36px)}.end-actions ::ng-deep .mat-mdc-icon-button .mat-icon{display:block;flex:0 0 auto;font-size:24px;width:24px;height:24px;line-height:24px;margin:0}.praxis-toolbar.p-table-toolbar--divider-between-groups .actions-group,.praxis-toolbar.p-table-toolbar--divider-start .toolbar-main{padding-right:10px;border-right:1px solid var(--p-table-toolbar-divider-color, var(--p-table-toolbar-divider-color-default))}.end-actions ::ng-deep .praxis-table-toolbar-action--ai,.end-actions ::ng-deep .praxis-table-ai-trigger{color:var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default));background:color-mix(in srgb,var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default)) 10%,transparent);border:1px solid color-mix(in srgb,var(--p-table-toolbar-ai-accent-color, var(--p-table-toolbar-ai-accent-color-default)) 24%,transparent)}.end-actions ::ng-deep [data-role=table-settings]{color:var(--p-table-toolbar-status-fg, var(--p-table-toolbar-status-fg-default))}@media(min-width:1024px){.toolbar-actions{justify-content:flex-end}}@media(max-width:1023px){.actions-group{display:none}.mobile-actions{display:flex}.toolbar-actions{justify-content:flex-end}.toolbar-identity{min-width:0;max-width:100%;flex:1 1 100%}}\n"] }]
2354
2384
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.LoggerService, decorators: [{
2355
2385
  type: Optional
2356
2386
  }] }, { type: i1.PraxisI18nService, decorators: [{
@@ -39412,8 +39442,14 @@ class PraxisTable {
39412
39442
  static ROW_DISCOVERY_MAX_CONCURRENT_REQUESTS = 2;
39413
39443
  _resourceDiscovery;
39414
39444
  _resourceSurfaceOpenAdapter;
39445
+ _crudOperationResolver;
39415
39446
  runtimeObservationRegistry = inject(PraxisRuntimeComponentObservationRegistryService, { optional: true });
39416
39447
  detailInlineRenderers = inject(PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, { optional: true }) ?? [];
39448
+ collectionLinks = null;
39449
+ collectionCapabilities = null;
39450
+ collectionCapabilitiesRequestHref = null;
39451
+ collectionCapabilitiesResolvedHref = null;
39452
+ collectionCapabilitiesRequestSeq = 0;
39417
39453
  detailInlineNodeResolvers = inject(PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, { optional: true }) ?? [];
39418
39454
  runtimeObservationRegistration = null;
39419
39455
  paginatorSelectConfig = {
@@ -39566,6 +39602,7 @@ class PraxisTable {
39566
39602
  sanitizer = inject(DomSanitizer);
39567
39603
  collectionExport = inject(PraxisCollectionExportService);
39568
39604
  paginatorIntl = inject(MatPaginatorIntl);
39605
+ schemaNormalizer = inject(SchemaNormalizerService);
39569
39606
  schemaFieldsSnapshot = [];
39570
39607
  filterSchemaFieldsSnapshot = [];
39571
39608
  runtimeSchemaMeta = {};
@@ -41105,6 +41142,306 @@ class PraxisTable {
41105
41142
  return true;
41106
41143
  return (config.toolbar?.actions?.length ?? 0) > 0;
41107
41144
  }
41145
+ resolveCollectionDiscoveryOptions() {
41146
+ const endpointKey = this.crudContext?.endpointKey;
41147
+ return endpointKey ? { endpointKey } : undefined;
41148
+ }
41149
+ updateCollectionLinks(links) {
41150
+ this.collectionLinks = links;
41151
+ const capabilitiesHref = this.resolveCollectionCapabilitiesHref(links);
41152
+ this.materializeCollectionCreateToolbarAction();
41153
+ if (!capabilitiesHref) {
41154
+ this.collectionCapabilitiesRequestSeq += 1;
41155
+ this.collectionCapabilitiesRequestHref = null;
41156
+ this.collectionCapabilitiesResolvedHref = null;
41157
+ if (this.collectionCapabilities) {
41158
+ this.collectionCapabilities = null;
41159
+ this.materializeCollectionCreateToolbarAction();
41160
+ }
41161
+ return;
41162
+ }
41163
+ if (capabilitiesHref === this.collectionCapabilitiesRequestHref ||
41164
+ (capabilitiesHref === this.collectionCapabilitiesResolvedHref && !!this.collectionCapabilities)) {
41165
+ return;
41166
+ }
41167
+ const requestSeq = ++this.collectionCapabilitiesRequestSeq;
41168
+ this.collectionCapabilitiesRequestHref = capabilitiesHref;
41169
+ void firstValueFrom(this.resourceDiscovery.getCapabilities(links || {}, this.resolveCollectionDiscoveryOptions()))
41170
+ .then((snapshot) => {
41171
+ if (requestSeq !== this.collectionCapabilitiesRequestSeq) {
41172
+ return;
41173
+ }
41174
+ this.collectionCapabilitiesRequestHref = null;
41175
+ this.collectionCapabilitiesResolvedHref = capabilitiesHref;
41176
+ this.collectionCapabilities = snapshot;
41177
+ this.materializeCollectionCreateToolbarAction();
41178
+ })
41179
+ .catch(() => {
41180
+ if (requestSeq !== this.collectionCapabilitiesRequestSeq) {
41181
+ return;
41182
+ }
41183
+ const hadCapabilities = !!this.collectionCapabilities;
41184
+ this.collectionCapabilities = null;
41185
+ this.collectionCapabilitiesRequestHref = null;
41186
+ this.collectionCapabilitiesResolvedHref = null;
41187
+ if (hadCapabilities) {
41188
+ this.materializeCollectionCreateToolbarAction();
41189
+ }
41190
+ });
41191
+ }
41192
+ resolveCollectionCapabilitiesHref(links) {
41193
+ try {
41194
+ return this.resourceDiscovery.resolveLinkHref(links || undefined, 'capabilities', this.resolveCollectionDiscoveryOptions());
41195
+ }
41196
+ catch {
41197
+ return null;
41198
+ }
41199
+ }
41200
+ materializeCollectionCreateToolbarAction() {
41201
+ if (!this.config) {
41202
+ return;
41203
+ }
41204
+ const currentToolbar = this.config.toolbar;
41205
+ const actions = currentToolbar?.actions || [];
41206
+ const createIndex = actions.findIndex((action) => this.isCreateToolbarAction(action));
41207
+ const existing = createIndex >= 0 ? actions[createIndex] : null;
41208
+ const materialized = this.buildCollectionCreateToolbarAction(existing);
41209
+ if (!materialized) {
41210
+ if (existing?.__praxisCollectionCreateAction) {
41211
+ actions.splice(createIndex, 1);
41212
+ currentToolbar.actions = actions;
41213
+ this.setShowToolbar(this.shouldExposeToolbar());
41214
+ this.cdr.markForCheck();
41215
+ }
41216
+ else if (existing) {
41217
+ const disabled = this.resolveCollectionCreateDisabled(existing);
41218
+ if (typeof disabled === 'boolean' && existing.disabled !== disabled) {
41219
+ existing.disabled = disabled;
41220
+ this.cdr.markForCheck();
41221
+ }
41222
+ }
41223
+ return;
41224
+ }
41225
+ const toolbar = this.ensureToolbarConfigForRuntime();
41226
+ const nextActions = toolbar.actions || [];
41227
+ const nextCreateIndex = nextActions.findIndex((action) => this.isCreateToolbarAction(action));
41228
+ const nextExisting = nextCreateIndex >= 0
41229
+ ? nextActions[nextCreateIndex]
41230
+ : existing;
41231
+ if (nextExisting && nextCreateIndex >= 0) {
41232
+ nextActions[nextCreateIndex] = {
41233
+ ...materialized,
41234
+ ...nextExisting,
41235
+ id: nextExisting.id || materialized.id,
41236
+ action: nextExisting.action || materialized.action,
41237
+ label: nextExisting.label || materialized.label,
41238
+ icon: nextExisting.icon || materialized.icon,
41239
+ tooltip: nextExisting.tooltip || materialized.tooltip,
41240
+ disabled: materialized.disabled,
41241
+ __praxisCollectionCreateAction: nextExisting.__praxisCollectionCreateAction || materialized.__praxisCollectionCreateAction,
41242
+ __praxisCrudOperation: materialized.__praxisCrudOperation,
41243
+ __praxisDiscoveredSurface: materialized.__praxisDiscoveredSurface,
41244
+ };
41245
+ }
41246
+ else {
41247
+ toolbar.actions = [...nextActions, materialized];
41248
+ }
41249
+ toolbar.visible = true;
41250
+ this.setShowToolbar(true);
41251
+ this.cdr.markForCheck();
41252
+ }
41253
+ ensureToolbarConfigForRuntime() {
41254
+ if (!this.config.toolbar) {
41255
+ this.config.toolbar = { visible: true, position: 'top' };
41256
+ }
41257
+ if (!this.config.toolbar.actions) {
41258
+ this.config.toolbar.actions = [];
41259
+ }
41260
+ return this.config.toolbar;
41261
+ }
41262
+ buildCollectionCreateToolbarAction(existing) {
41263
+ const resolved = this.resolveCollectionCreateRuntime();
41264
+ if (!resolved && !existing) {
41265
+ return null;
41266
+ }
41267
+ if (!resolved && existing && !existing.__praxisCollectionCreateAction) {
41268
+ return null;
41269
+ }
41270
+ const operation = resolved?.operation ?? null;
41271
+ const surface = resolved?.surface ?? null;
41272
+ const disabled = resolved
41273
+ ? resolved.disabled
41274
+ : true;
41275
+ return {
41276
+ id: 'create',
41277
+ action: 'create',
41278
+ label: this.getCollectionCreateActionLabel(surface),
41279
+ icon: 'add',
41280
+ type: 'button',
41281
+ appearance: 'filled',
41282
+ color: disabled ? 'warn' : 'primary',
41283
+ position: 'start',
41284
+ tooltip: disabled
41285
+ ? this.getCollectionCreateUnavailableTooltip(operation, surface)
41286
+ : this.getCollectionCreateActionTooltip(surface),
41287
+ disabled,
41288
+ __praxisCollectionCreateAction: true,
41289
+ __praxisCrudOperation: operation ?? undefined,
41290
+ __praxisDiscoveredSurface: surface ?? undefined,
41291
+ };
41292
+ }
41293
+ resolveCollectionCreateRuntime() {
41294
+ const resourcePath = this.resolveCollectionResourcePath();
41295
+ if (!resourcePath) {
41296
+ return null;
41297
+ }
41298
+ const capability = this.resolveCollectionCreateCapabilityOperation();
41299
+ const surface = this.resolveCollectionCreateSurface(capability);
41300
+ const hasCreateLink = this.hasCollectionCreateLink();
41301
+ if (!surface && !capability && !hasCreateLink) {
41302
+ return null;
41303
+ }
41304
+ if (capability?.supported === false) {
41305
+ return { operation: capability, surface, disabled: true };
41306
+ }
41307
+ const operationAvailability = capability?.availability;
41308
+ const surfaceAvailability = surface?.availability;
41309
+ return {
41310
+ operation: capability,
41311
+ surface,
41312
+ disabled: operationAvailability?.allowed === false ||
41313
+ surfaceAvailability?.allowed === false ||
41314
+ (!surface && !hasCreateLink && !capability),
41315
+ };
41316
+ }
41317
+ resolveCollectionResourcePath() {
41318
+ return String(this.resourcePath ||
41319
+ this.crudContext?.resourcePath ||
41320
+ this.config?.resourcePath ||
41321
+ '').trim();
41322
+ }
41323
+ hasCollectionCreateLink() {
41324
+ try {
41325
+ return !!this.resourceDiscovery.resolveLinkHref(this.collectionLinks || undefined, 'create', this.resolveCollectionDiscoveryOptions());
41326
+ }
41327
+ catch {
41328
+ return false;
41329
+ }
41330
+ }
41331
+ resolveCollectionCreateCapabilityOperation() {
41332
+ const snapshot = this.collectionCapabilities;
41333
+ if (!snapshot) {
41334
+ const digest = this.crudService.getResourceCapabilityDigest?.() ?? null;
41335
+ return digest?.canonicalOperations?.['create'] === true
41336
+ ? this.createSyntheticCollectionCrudOperation('create')
41337
+ : null;
41338
+ }
41339
+ return (snapshot.operations?.create ||
41340
+ (snapshot.canonicalOperations?.['create'] === true
41341
+ ? this.createSyntheticCollectionCrudOperation('create')
41342
+ : null));
41343
+ }
41344
+ createSyntheticCollectionCrudOperation(id) {
41345
+ return {
41346
+ id,
41347
+ supported: true,
41348
+ scope: 'COLLECTION',
41349
+ preferredRel: id,
41350
+ preferredMethod: id === 'create' ? 'POST' : undefined,
41351
+ };
41352
+ }
41353
+ resolveCollectionCreateSurface(operation) {
41354
+ const existingSurface = this.collectionCapabilities?.surfaces
41355
+ ?.filter((surface) => this.isCollectionCreateSurface(surface))
41356
+ .sort((left, right) => (left.order ?? 0) - (right.order ?? 0))[0] ?? null;
41357
+ if (existingSurface) {
41358
+ return existingSurface;
41359
+ }
41360
+ const resourcePath = this.resolveCollectionResourcePath();
41361
+ if (!resourcePath || (!operation && !this.hasCollectionCreateLink())) {
41362
+ return null;
41363
+ }
41364
+ try {
41365
+ const resolved = this.crudOperationResolver.resolve({
41366
+ operation: 'create',
41367
+ resourcePath,
41368
+ resourceId: null,
41369
+ capabilities: this.collectionCapabilities,
41370
+ links: this.collectionLinks,
41371
+ endpointKey: this.crudContext?.endpointKey,
41372
+ apiUrlEntry: null,
41373
+ });
41374
+ const schemaInfo = this.crudService.getLastSchemaInfo?.() ?? {};
41375
+ const title = this.getCollectionCreateActionLabel(null);
41376
+ return {
41377
+ id: 'create',
41378
+ resourceKey: this.collectionCapabilities?.resourceKey || resourcePath,
41379
+ kind: 'FORM',
41380
+ scope: 'COLLECTION',
41381
+ title,
41382
+ description: this.getCollectionCreateActionTooltip(null),
41383
+ intent: 'create',
41384
+ operationId: 'resource.create',
41385
+ path: resolved.submitUrl || resourcePath,
41386
+ method: (resolved.submitMethod || 'post').toUpperCase(),
41387
+ schemaId: schemaInfo.schemaId || `${resourcePath}.create`,
41388
+ schemaUrl: resolved.schemaUrl || `${resourcePath}/schemas/create`,
41389
+ responseCardinality: 'OBJECT',
41390
+ availability: resolved.availability || operation?.availability || { allowed: true },
41391
+ order: 0,
41392
+ tags: ['crud', 'create'],
41393
+ };
41394
+ }
41395
+ catch {
41396
+ return null;
41397
+ }
41398
+ }
41399
+ isWritableCrudSurface(surface) {
41400
+ return surface.kind === 'FORM' || surface.kind === 'PARTIAL_FORM';
41401
+ }
41402
+ isCollectionCreateSurface(surface) {
41403
+ if (surface.scope !== 'COLLECTION' || !this.isWritableCrudSurface(surface)) {
41404
+ return false;
41405
+ }
41406
+ const operationId = String(surface.operationId || '').trim().toLowerCase();
41407
+ const intent = String(surface.intent || '').trim().toLowerCase();
41408
+ const id = String(surface.id || '').trim().toLowerCase();
41409
+ const tags = Array.isArray(surface.tags)
41410
+ ? surface.tags.map((tag) => String(tag || '').trim().toLowerCase())
41411
+ : [];
41412
+ return (intent === 'create' ||
41413
+ operationId === 'create' ||
41414
+ operationId.endsWith('.create') ||
41415
+ id === 'create' ||
41416
+ tags.includes('create'));
41417
+ }
41418
+ getCollectionCreateActionLabel(surface) {
41419
+ return surface?.title || translateTableRuntimeText(this.i18n, 'table.chrome.collectionActions.create', 'Novo');
41420
+ }
41421
+ getCollectionCreateActionTooltip(surface) {
41422
+ return surface?.description || translateTableRuntimeText(this.i18n, 'table.chrome.collectionActions.createTooltip', 'Criar novo registro');
41423
+ }
41424
+ getCollectionCreateUnavailableTooltip(operation, surface) {
41425
+ const reason = operation?.availability?.reason ||
41426
+ surface?.availability?.reason ||
41427
+ null;
41428
+ return reason
41429
+ ? translateResourceAvailabilityReason(this.i18n, reason)
41430
+ : translateTableRuntimeText(this.i18n, 'table.chrome.collectionActions.createUnavailable', 'Criação indisponível no contexto atual');
41431
+ }
41432
+ resolveCollectionCreateDisabled(action) {
41433
+ const runtime = this.resolveCollectionCreateRuntime();
41434
+ if (runtime) {
41435
+ return runtime.disabled;
41436
+ }
41437
+ if (action.__praxisCollectionCreateAction) {
41438
+ return true;
41439
+ }
41440
+ return null;
41441
+ }
41442
+ isCreateToolbarAction(action) {
41443
+ return String(action?.action || action?.id || '').trim().toLowerCase() === 'create';
41444
+ }
41108
41445
  constructor(cdr, settingsPanel, crudService, tableDefaultsProvider, filterConfig, formattingService, pxDialog, snackBar, asyncConfigStorage, connectionStorage, hostRef, global, injector, componentKeys, loadingOrchestrator, globalActions, loadingRenderer, route, logger, analyticsStatsApi) {
41109
41446
  this.cdr = cdr;
41110
41447
  this.settingsPanel = settingsPanel;
@@ -41160,6 +41497,9 @@ class PraxisTable {
41160
41497
  get resourceSurfaceOpenAdapter() {
41161
41498
  return this._resourceSurfaceOpenAdapter ??= this.injector.get(ResourceSurfaceOpenAdapterService);
41162
41499
  }
41500
+ get crudOperationResolver() {
41501
+ return this._crudOperationResolver ??= this.injector.get(CrudOperationResolutionService);
41502
+ }
41163
41503
  ensureAiAdapterLoaded(openAfterLoad = false) {
41164
41504
  if (openAfterLoad && !this.aiAdapter) {
41165
41505
  this.aiAssistantOpenAfterAdapterLoad = true;
@@ -41167,7 +41507,7 @@ class PraxisTable {
41167
41507
  if (this.aiAdapter || this.aiAdapterLoadStarted)
41168
41508
  return;
41169
41509
  this.aiAdapterLoadStarted = true;
41170
- import('./praxisui-table-table-ai.adapter-Bh0faxuI.mjs')
41510
+ import('./praxisui-table-table-ai.adapter-CXzxP88Y.mjs')
41171
41511
  .then(({ TableAiAdapter }) => {
41172
41512
  if (!this.isAiAssistantEnabled()) {
41173
41513
  this.aiAssistantOpenAfterAdapterLoad = false;
@@ -46516,6 +46856,9 @@ class PraxisTable {
46516
46856
  const action = String(event?.action || '').trim();
46517
46857
  if (!action)
46518
46858
  return;
46859
+ if (await this.tryHandleCollectionCreateToolbarAction(action, event.actionConfig)) {
46860
+ return;
46861
+ }
46519
46862
  const bulk = this.config.actions?.bulk?.actions.find((a) => this.getActionId(a) === action);
46520
46863
  if (bulk) {
46521
46864
  const rows = this.selection.selected.slice();
@@ -46687,6 +47030,76 @@ class PraxisTable {
46687
47030
  label: toolbarActionConfig?.label || action,
46688
47031
  });
46689
47032
  }
47033
+ async tryHandleCollectionCreateToolbarAction(action, actionConfig) {
47034
+ if (String(action || '').trim().toLowerCase() !== 'create') {
47035
+ return false;
47036
+ }
47037
+ const configuredAction = actionConfig ||
47038
+ (this.config?.toolbar?.actions || []).find((candidate) => this.isCreateToolbarAction(candidate));
47039
+ if (!configuredAction?.__praxisCollectionCreateAction) {
47040
+ return false;
47041
+ }
47042
+ const surface = configuredAction.__praxisDiscoveredSurface ||
47043
+ this.resolveCollectionCreateSurface(configuredAction.__praxisCrudOperation ?? null);
47044
+ const payload = {
47045
+ action,
47046
+ actionConfig: this.cloneForEmit({
47047
+ ...configuredAction,
47048
+ __praxisCollectionCreateAction: true,
47049
+ }),
47050
+ };
47051
+ if (!surface || configuredAction.disabled) {
47052
+ this.emitEventWithActionFeedback(this.toolbarAction, payload, {
47053
+ actionId: action,
47054
+ label: configuredAction.label || action,
47055
+ });
47056
+ return true;
47057
+ }
47058
+ try {
47059
+ const surfacePayload = this.resourceSurfaceOpenAdapter.toPayload(surface, {
47060
+ resourcePath: this.resolveCollectionResourcePath(),
47061
+ endpointKey: this.crudContext?.endpointKey,
47062
+ title: surface.title || configuredAction.label,
47063
+ subtitle: surface.description || configuredAction.tooltip || undefined,
47064
+ presentation: 'drawer',
47065
+ queryContext: this.queryContext ?? undefined,
47066
+ });
47067
+ const result = await this.globalActions.execute('surface.open', surfacePayload, {
47068
+ sourceId: this.tableId || this.componentInstanceId || 'praxis-table',
47069
+ output: 'toolbarAction',
47070
+ payload,
47071
+ runtime: {
47072
+ widgetContext: {
47073
+ collection: {
47074
+ links: this.collectionLinks,
47075
+ capabilities: this.collectionCapabilities,
47076
+ resourcePath: this.resolveCollectionResourcePath(),
47077
+ },
47078
+ },
47079
+ },
47080
+ meta: {
47081
+ actionId: 'create',
47082
+ actionConfig: configuredAction,
47083
+ surfaceId: surface.id,
47084
+ },
47085
+ });
47086
+ if (result.success) {
47087
+ return true;
47088
+ }
47089
+ this.warnLog('[PraxisTable] Falha ao abrir create de coleção via surface.open', { surfaceId: surface.id, error: result.error }, { actionId: 'create' });
47090
+ }
47091
+ catch (error) {
47092
+ this.warnLog('[PraxisTable] Falha ao preparar create de coleção via surface.open', { surfaceId: surface.id, error }, { actionId: 'create' });
47093
+ }
47094
+ this.emitEventWithActionFeedback(this.toolbarAction, {
47095
+ ...payload,
47096
+ surface,
47097
+ }, {
47098
+ actionId: action,
47099
+ label: configuredAction.label || action,
47100
+ });
47101
+ return true;
47102
+ }
46690
47103
  resolveBulkExportFormat(action, actionConfig) {
46691
47104
  if (this.config?.export?.enabled !== true) {
46692
47105
  return null;
@@ -49164,8 +49577,19 @@ class PraxisTable {
49164
49577
  this.emitSchemaStatus({ outdated: false, serverHash: this.runtimeSchemaMeta.serverHash, lastVerifiedAt: this.runtimeSchemaMeta.lastVerifiedAt, resourcePath: this.resourcePath }, 'verification-304');
49165
49578
  return;
49166
49579
  }
49167
- // status === 200: server hash changed or first verification without hash. Do not apply columns here.
49580
+ // status === 200: server hash changed or first verification without hash. Do not
49581
+ // replace the column list, but keep existing columns enriched with safe schema
49582
+ // presentation metadata such as semantic renderers, masks, and value mappings.
49168
49583
  const newHash = res.schemaHash;
49584
+ try {
49585
+ const fields = this.schemaNormalizer.normalizeSchema(res.schema);
49586
+ this.setSchemaFieldsSnapshot(fields);
49587
+ this.applySchemaFieldPresentationsToExistingColumns(fields);
49588
+ this.loadFilterSchemaSnapshot();
49589
+ this.setupColumns();
49590
+ this.configChange.emit(this.config);
49591
+ }
49592
+ catch { }
49169
49593
  this.runtimeSchemaMeta = {
49170
49594
  ...this.runtimeSchemaMeta,
49171
49595
  serverHash: newHash,
@@ -49239,6 +49663,9 @@ class PraxisTable {
49239
49663
  .filter((f) => !f.tableHidden && !f.hidden)
49240
49664
  .map((f) => this.convertFieldToColumn(f));
49241
49665
  }
49666
+ else {
49667
+ this.applySchemaFieldPresentationsToExistingColumns(fields);
49668
+ }
49242
49669
  this.emitWidgetInputPatch({
49243
49670
  config: this.config,
49244
49671
  resourcePath: this.resourcePath,
@@ -49332,6 +49759,26 @@ class PraxisTable {
49332
49759
  catch { }
49333
49760
  return col;
49334
49761
  }
49762
+ applySchemaFieldPresentationsToExistingColumns(fields) {
49763
+ if (!Array.isArray(fields) || !fields.length)
49764
+ return;
49765
+ const columns = this.config?.columns;
49766
+ if (!Array.isArray(columns) || !columns.length)
49767
+ return;
49768
+ const fieldsByName = new Map();
49769
+ for (const field of fields) {
49770
+ const name = typeof field?.name === 'string' ? field.name.trim() : '';
49771
+ if (name)
49772
+ fieldsByName.set(name, field);
49773
+ }
49774
+ for (const column of columns) {
49775
+ const fieldName = typeof column?.field === 'string' ? column.field.trim() : '';
49776
+ const field = fieldsByName.get(fieldName);
49777
+ if (!field)
49778
+ continue;
49779
+ this.applySchemaFieldPresentation(field, column);
49780
+ }
49781
+ }
49335
49782
  applySchemaFieldPresentation(field, col) {
49336
49783
  if (!field || !col)
49337
49784
  return;
@@ -49344,9 +49791,6 @@ class PraxisTable {
49344
49791
  col.valueMapping = valueMapping;
49345
49792
  }
49346
49793
  const presentation = field.presentation;
49347
- if (presentation && typeof presentation === 'object') {
49348
- this.applySchemaFieldSemanticPresentation(field, col, presentation);
49349
- }
49350
49794
  if (presentation?.presenter === 'microVisualization' &&
49351
49795
  isPraxisPresentationVisualizationTableSafe(presentation?.visualization)) {
49352
49796
  col.renderer = {
@@ -49357,6 +49801,7 @@ class PraxisTable {
49357
49801
  },
49358
49802
  };
49359
49803
  }
49804
+ this.applySchemaSemanticCellPresentation(field, col, presentation);
49360
49805
  if (numericFormat === 'currency' || controlType === 'currency' || col.type === 'currency') {
49361
49806
  col.type = 'currency';
49362
49807
  col.format = this.resolveSchemaCurrencyFormat(field);
@@ -49391,20 +49836,29 @@ class PraxisTable {
49391
49836
  col.format = textMaskFormat;
49392
49837
  }
49393
49838
  }
49394
- applySchemaFieldSemanticPresentation(field, col, presentation) {
49839
+ applySchemaSemanticCellPresentation(field, col, presentation) {
49840
+ if (!presentation || typeof presentation !== 'object')
49841
+ return;
49395
49842
  if (col.renderer?.type)
49396
49843
  return;
49397
- const presenter = presentation.presenter ?? presentation.variant;
49844
+ const presenter = this.normalizePresentationToken(presentation.presenter ?? presentation.variant);
49845
+ const textField = field.name;
49846
+ const color = this.resolveSemanticPresentationColor(presentation.tone);
49847
+ const variant = this.resolveSemanticPresentationVariant(presentation.appearance);
49848
+ const icon = this.firstNonEmptyString(presentation.icon);
49849
+ const tooltipText = this.firstNonEmptyString(presentation.tooltip);
49850
+ const tooltip = tooltipText ? { text: tooltipText } : undefined;
49851
+ const fixedText = this.firstNonEmptyString(presentation.label);
49398
49852
  if (presenter === 'chip') {
49399
49853
  col.renderer = {
49400
49854
  type: 'chip',
49401
49855
  chip: {
49402
- text: this.normalizeSchemaRendererText(presentation.label),
49403
- textField: presentation.label ? undefined : field.name,
49404
- color: this.mapFieldPresentationTone(presentation.tone),
49405
- icon: this.normalizeSchemaRendererText(presentation.icon),
49406
- variant: this.mapFieldPresentationAppearance(presentation.appearance),
49407
- tooltip: this.mapFieldPresentationTooltip(presentation.tooltip),
49856
+ text: fixedText,
49857
+ textField: fixedText ? undefined : textField,
49858
+ color,
49859
+ icon,
49860
+ variant,
49861
+ tooltip,
49408
49862
  },
49409
49863
  };
49410
49864
  return;
@@ -49413,35 +49867,48 @@ class PraxisTable {
49413
49867
  col.renderer = {
49414
49868
  type: 'badge',
49415
49869
  badge: {
49416
- text: this.normalizeSchemaRendererText(presentation.label),
49417
- textField: presentation.label ? undefined : field.name,
49418
- color: this.mapFieldPresentationTone(presentation.tone),
49419
- icon: this.normalizeSchemaRendererText(presentation.icon),
49420
- variant: this.mapFieldPresentationAppearance(presentation.appearance),
49421
- tooltip: this.mapFieldPresentationTooltip(presentation.tooltip),
49870
+ text: fixedText,
49871
+ textField: fixedText ? undefined : textField,
49872
+ color,
49873
+ icon,
49874
+ variant,
49875
+ tooltip,
49422
49876
  },
49423
49877
  };
49424
49878
  return;
49425
49879
  }
49426
- if (presenter === 'iconValue') {
49427
- const icon = this.normalizeSchemaRendererText(presentation.icon);
49880
+ if (presenter === 'iconvalue') {
49881
+ const rendererIcon = icon || this.firstNonEmptyString(field.icon);
49882
+ if (!rendererIcon)
49883
+ return;
49884
+ const affixes = this.resolveSemanticPresentationAffixes(presentation);
49885
+ if (affixes.prefix || affixes.suffix || tooltipText) {
49886
+ col.renderer = {
49887
+ type: 'icon',
49888
+ icon: {
49889
+ name: rendererIcon,
49890
+ textField,
49891
+ ...(tooltipText ? { ariaLabel: tooltipText } : {}),
49892
+ ...affixes,
49893
+ },
49894
+ };
49895
+ return;
49896
+ }
49428
49897
  col.renderer = {
49429
49898
  type: 'compose',
49430
49899
  compose: {
49431
49900
  items: [
49432
- ...(icon
49433
- ? [{
49434
- type: 'icon',
49435
- icon: {
49436
- name: icon,
49437
- color: this.mapFieldPresentationTone(presentation.tone),
49438
- ariaLabel: this.normalizeSchemaRendererText(presentation.label) || col.header,
49439
- },
49440
- }]
49441
- : []),
49901
+ {
49902
+ type: 'icon',
49903
+ icon: {
49904
+ name: rendererIcon,
49905
+ ...(color ? { color } : {}),
49906
+ ...(field.label ? { ariaLabel: field.label } : {}),
49907
+ },
49908
+ },
49442
49909
  {
49443
49910
  type: 'value',
49444
- field: field.name,
49911
+ field: textField,
49445
49912
  },
49446
49913
  ],
49447
49914
  layout: {
@@ -49453,31 +49920,32 @@ class PraxisTable {
49453
49920
  };
49454
49921
  }
49455
49922
  }
49456
- mapFieldPresentationAppearance(appearance) {
49457
- return appearance === 'filled' || appearance === 'outlined' || appearance === 'soft' || appearance === 'plain'
49458
- ? appearance
49459
- : undefined;
49923
+ resolveSemanticPresentationColor(tone) {
49924
+ const normalized = this.normalizePresentationToken(tone);
49925
+ if (normalized === 'neutral')
49926
+ return 'basic';
49927
+ if (!normalized)
49928
+ return undefined;
49929
+ if (normalized === 'danger')
49930
+ return 'warn';
49931
+ if (normalized === 'warning')
49932
+ return 'warn';
49933
+ return normalized;
49460
49934
  }
49461
- mapFieldPresentationTone(tone) {
49462
- switch (tone) {
49463
- case 'neutral':
49464
- return 'basic';
49465
- case 'warning':
49466
- return 'warn';
49467
- case 'danger':
49468
- case 'info':
49469
- case 'success':
49470
- return tone;
49471
- default:
49472
- return undefined;
49935
+ resolveSemanticPresentationVariant(appearance) {
49936
+ const normalized = this.normalizePresentationToken(appearance);
49937
+ if (normalized === 'filled' || normalized === 'outlined' || normalized === 'soft' || normalized === 'plain') {
49938
+ return normalized;
49473
49939
  }
49940
+ return undefined;
49474
49941
  }
49475
- mapFieldPresentationTooltip(tooltip) {
49476
- const text = this.normalizeSchemaRendererText(tooltip);
49477
- return text ? { text } : undefined;
49478
- }
49479
- normalizeSchemaRendererText(value) {
49480
- return typeof value === 'string' && value.trim() ? value.trim() : undefined;
49942
+ resolveSemanticPresentationAffixes(presentation) {
49943
+ const prefix = this.firstNonEmptyString(presentation.prefix);
49944
+ const suffix = this.firstNonEmptyString(presentation.suffix);
49945
+ return {
49946
+ ...(prefix ? { prefix } : {}),
49947
+ ...(suffix ? { suffix } : {}),
49948
+ };
49481
49949
  }
49482
49950
  resolveSchemaCurrencyFormat(field) {
49483
49951
  const currency = this.firstNonEmptyString(field.currency, field.extraProperties?.currency) || 'BRL';
@@ -50346,6 +50814,7 @@ class PraxisTable {
50346
50814
  if (!this.isRemoteMode()) {
50347
50815
  this.clearRowDiscoveryRuntime();
50348
50816
  this.lastRowDiscoveryScopeKey = null;
50817
+ this.updateCollectionLinks(null);
50349
50818
  this.collectionLinksChange.emit(null);
50350
50819
  return;
50351
50820
  }
@@ -50409,8 +50878,10 @@ class PraxisTable {
50409
50878
  const page = (response?.data || {});
50410
50879
  const content = Array.isArray(page.content) ? page.content : [];
50411
50880
  const total = page.totalElements ?? content.length ?? 0;
50881
+ const links = response?._links ?? null;
50412
50882
  this.dataError = false;
50413
- this.collectionLinksChange.emit(response?._links ?? null);
50883
+ this.updateCollectionLinks(links);
50884
+ this.collectionLinksChange.emit(links);
50414
50885
  // Keep dataRefresh collapse in the fetch pipeline to avoid duplicate policy events.
50415
50886
  this.applyExpansionCollapsePolicy('dataRefresh');
50416
50887
  this.dataSubject.next(content);
@@ -50444,6 +50915,7 @@ class PraxisTable {
50444
50915
  }
50445
50916
  this.errorLog('[PraxisTable] Data load error', err);
50446
50917
  this.dataError = true;
50918
+ this.updateCollectionLinks(null);
50447
50919
  this.collectionLinksChange.emit(null);
50448
50920
  this.errorMessage =
50449
50921
  'Não foi possível carregar os dados. Revise a fonte de dados e tente novamente.';
@@ -52119,7 +52591,12 @@ class PraxisTable {
52119
52591
  const text = Object.prototype.hasOwnProperty.call(cfg, 'text')
52120
52592
  ? cfg.text
52121
52593
  : cfg.textField ? this.getRendererTextFieldValue(row, column, cfg.textField) : null;
52122
- return text != null ? String(text) : null;
52594
+ if (text == null)
52595
+ return null;
52596
+ const normalizedText = String(text);
52597
+ const prefix = this.firstNonEmptyString(cfg.prefix);
52598
+ const suffix = this.firstNonEmptyString(cfg.suffix);
52599
+ return `${prefix || ''}${normalizedText}${suffix || ''}`;
52123
52600
  }
52124
52601
  getIconRichContentNodes(row, column) {
52125
52602
  const icon = this.getIconName(row, column);
@@ -56914,6 +57391,10 @@ const rendererSchema = {
56914
57391
  properties: {
56915
57392
  name: { type: 'string' },
56916
57393
  nameField: { type: 'string' },
57394
+ text: { type: 'string' },
57395
+ textField: { type: 'string' },
57396
+ prefix: { type: 'string' },
57397
+ suffix: { type: 'string' },
56917
57398
  color: { type: 'string' },
56918
57399
  size: { type: 'number' },
56919
57400
  ariaLabel: { type: 'string' }
@@ -61105,9 +61586,13 @@ const TABLE_AI_CAPABILITIES = {
61105
61586
  { path: 'columns[].renderer.link.hrefField', category: 'renderer', valueKind: 'string', description: 'Campo para href do link.', dependsOn: 'columns[].renderer.link' },
61106
61587
  { path: 'columns[].renderer.link.target', category: 'renderer', valueKind: 'enum', allowedValues: ENUMS.rendererLinkTarget, description: 'Target do link.', dependsOn: 'columns[].renderer.link' },
61107
61588
  { path: 'columns[].renderer.link.rel', category: 'renderer', valueKind: 'string', description: 'Atributo rel do link.', dependsOn: 'columns[].renderer.link' },
61108
- { path: 'columns[].renderer.icon', category: 'renderer', valueKind: 'object', description: 'Icone material/SVG com cor e tamanho (use renderer.icon.name para o nome do icone).', dependsOn: 'columns[].renderer.type', example: '{ name: "check_circle", color: "success", size: 18 }', intentExamples: ['mostrar ícone de status', 'icone verde para ativo'] },
61589
+ { path: 'columns[].renderer.icon', category: 'renderer', valueKind: 'object', description: 'Icone material/SVG com cor, tamanho e texto opcional ao lado do valor.', dependsOn: 'columns[].renderer.type', example: '{ name: "tag", textField: "codigo", prefix: "#", color: "success", size: 18 }', intentExamples: ['mostrar ícone de status', 'icone verde para ativo', 'mostrar codigo com # e icone'] },
61109
61590
  { path: 'columns[].renderer.icon.name', category: 'renderer', valueKind: 'string', description: 'Nome fixo do icone.', dependsOn: 'columns[].renderer.icon' },
61110
61591
  { path: 'columns[].renderer.icon.nameField', category: 'renderer', valueKind: 'string', description: 'Campo com nome do icone.', dependsOn: 'columns[].renderer.icon' },
61592
+ { path: 'columns[].renderer.icon.text', category: 'renderer', valueKind: 'string', description: 'Texto fixo renderizado junto ao icone.', dependsOn: 'columns[].renderer.icon' },
61593
+ { path: 'columns[].renderer.icon.textField', category: 'renderer', valueKind: 'string', description: 'Campo de linha usado como texto renderizado junto ao icone.', dependsOn: 'columns[].renderer.icon' },
61594
+ { path: 'columns[].renderer.icon.prefix', category: 'renderer', valueKind: 'string', description: 'Prefixo visual aplicado somente ao texto exibido pelo renderer de icone.', dependsOn: 'columns[].renderer.icon' },
61595
+ { path: 'columns[].renderer.icon.suffix', category: 'renderer', valueKind: 'string', description: 'Sufixo visual aplicado somente ao texto exibido pelo renderer de icone.', dependsOn: 'columns[].renderer.icon' },
61111
61596
  { path: 'columns[].renderer.icon.color', category: 'renderer', valueKind: 'string', description: 'Cor do icone.', dependsOn: 'columns[].renderer.icon' },
61112
61597
  { path: 'columns[].renderer.icon.size', category: 'renderer', valueKind: 'number', description: 'Tamanho em px.', dependsOn: 'columns[].renderer.icon' },
61113
61598
  { path: 'columns[].renderer.icon.ariaLabel', category: 'renderer', valueKind: 'string', description: 'Label acessivel do icone.', dependsOn: 'columns[].renderer.icon' },
@@ -61220,6 +61705,10 @@ const TABLE_AI_CAPABILITIES = {
61220
61705
  { path: 'columns[].conditionalRenderers[].renderer.icon', category: 'conditional', valueKind: 'object', description: 'Configuracao de icone condicional.', dependsOn: 'columns[].conditionalRenderers[].renderer.type' },
61221
61706
  { path: 'columns[].conditionalRenderers[].renderer.icon.name', category: 'conditional', valueKind: 'string', description: 'Nome fixo do icone.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
61222
61707
  { path: 'columns[].conditionalRenderers[].renderer.icon.nameField', category: 'conditional', valueKind: 'string', description: 'Campo com nome do icone.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
61708
+ { path: 'columns[].conditionalRenderers[].renderer.icon.text', category: 'conditional', valueKind: 'string', description: 'Texto fixo renderizado junto ao icone condicional.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
61709
+ { path: 'columns[].conditionalRenderers[].renderer.icon.textField', category: 'conditional', valueKind: 'string', description: 'Campo de linha usado como texto renderizado junto ao icone condicional.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
61710
+ { path: 'columns[].conditionalRenderers[].renderer.icon.prefix', category: 'conditional', valueKind: 'string', description: 'Prefixo visual aplicado somente ao texto exibido pelo renderer de icone condicional.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
61711
+ { path: 'columns[].conditionalRenderers[].renderer.icon.suffix', category: 'conditional', valueKind: 'string', description: 'Sufixo visual aplicado somente ao texto exibido pelo renderer de icone condicional.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
61223
61712
  { path: 'columns[].conditionalRenderers[].renderer.icon.color', category: 'conditional', valueKind: 'string', description: 'Cor do icone.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
61224
61713
  { path: 'columns[].conditionalRenderers[].renderer.icon.size', category: 'conditional', valueKind: 'number', description: 'Tamanho em px.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
61225
61714
  { path: 'columns[].conditionalRenderers[].renderer.icon.ariaLabel', category: 'conditional', valueKind: 'string', description: 'Label acessivel do icone.', dependsOn: 'columns[].conditionalRenderers[].renderer.icon' },
@@ -61507,6 +61996,7 @@ const TABLE_AI_CAPABILITIES = {
61507
61996
  { path: 'toolbar.position', category: 'toolbar', valueKind: 'enum', allowedValues: ENUMS.toolbarPosition, description: 'Posiciona a toolbar.', example: '"top"' },
61508
61997
  { path: 'toolbar.actionsPosition', category: 'toolbar', valueKind: 'enum', allowedValues: ENUMS.toolbarPosition, description: 'Posiciona a barra de ações (top/bottom/both).', intentExamples: ['ações no topo', 'barra de ações embaixo', 'ações em ambas'], example: '"bottom"' },
61509
61998
  { path: 'toolbar.actionsBackgroundColor', category: 'toolbar', valueKind: 'string', description: 'Cor de fundo da barra de ações (token/hex).', intentExamples: ['fundo das ações igual ao header', 'cor da barra de ações do tema', 'background das ações com surface'], example: '"var(--md-sys-color-surface-container)"' },
61999
+ { path: 'toolbar.appearance.preset', category: 'toolbar', valueKind: 'string', description: 'Preset visual publico registrado para a toolbar. Use "table-integrated" para compor toolbar e tabela como um unico bloco operacional, sem CSS de host mirando classes internas.', intentExamples: ['toolbar integrada à tabela', 'colar barra de filtros na tabela', 'um bloco visual para toolbar e grid'], example: '"table-integrated"', safetyNotes: 'Preset governa somente aparência; ações CRUD continuam materializadas por HATEOAS/capabilities e surface.open.' },
61510
62000
  { path: 'toolbar.appearance.variant', category: 'toolbar', valueKind: 'enum', allowedValues: ENUMS.toolbarAppearanceVariant, description: 'Variante visual canônica da toolbar.', intentExamples: ['toolbar elevada', 'toolbar integrada', 'barra sem borda'], example: '"outlined"' },
61511
62001
  { path: 'toolbar.appearance.density', category: 'toolbar', valueKind: 'enum', allowedValues: ENUMS.toolbarAppearanceDensity, description: 'Densidade visual da toolbar e de seus botões.', intentExamples: ['toolbar compacta', 'ações mais espaçosas'], example: '"compact"' },
61512
62002
  { path: 'toolbar.appearance.shape', category: 'toolbar', valueKind: 'enum', allowedValues: ENUMS.toolbarAppearanceShape, description: 'Forma canônica do container e dos botões da toolbar.', intentExamples: ['barra em pílula', 'botões menos arredondados'], example: '"rounded"' },
@@ -64066,4 +64556,4 @@ function isSupportedJsonLogicComputedOperator(operator) {
64066
64556
  * Generated bundle index. Do not edit.
64067
64557
  */
64068
64558
 
64069
- export { getEnum as $, AnalyticsTableConfigAdapterService as A, BOOLEAN_PRESETS as B, CURRENCY_PRESETS as C, DATE_PRESETS as D, TABLE_COMPONENT_EDIT_PLAN_KIND as E, FORMULA_TEMPLATES as F, TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS as G, TABLE_COMPONENT_EDIT_PLAN_VERSION as H, TASK_PRESETS as I, JsonConfigEditorComponent as J, TableDefaultsProvider as K, TableRulesEditorComponent as L, MessagesLocalizationEditorComponent as M, NUMBER_PRESETS as N, ToolbarActionsEditorComponent as O, PERCENTAGE_PRESETS as P, VisualFormulaBuilderComponent as Q, buildTableApplyPlan as R, STRING_PRESETS as S, TABLE_AI_CAPABILITIES as T, coerceTableComponentEditPlan as U, ValueMappingEditorComponent as V, coerceTableComponentEditPlans as W, compileTableComponentEditPlan as X, compileTableComponentEditPlans as Y, createTableAuthoringDocument as Z, getActionId as _, AnalyticsTableContractService as a, getTableCapabilities as a0, getTableComponentEditPlanCapabilities as a1, isTableRendererSupportedByRichContentP0 as a2, mapTableRendererToRichContentP0 as a3, normalizeTableAuthoringDocument as a4, parseLegacyOrTableDocument as a5, providePraxisFilterMetadata as a6, providePraxisTableMetadata as a7, providePraxisTableToolbarAppearance as a8, serializeTableAuthoringDocument as a9, toCanonicalTableConfig as aa, validateTableAuthoringDocument as ab, AnalyticsTableStatsApiService as b, BehaviorConfigEditorComponent as c, ColumnsConfigEditorComponent as d, DataFormatterComponent as e, DataFormattingService as f, FilterConfigService as g, FilterSettingsComponent as h, FormulaGeneratorService as i, PRAXIS_FILTER_COMPONENT_METADATA as j, PRAXIS_TABLE_AUTHORING_MANIFEST as k, PRAXIS_TABLE_COMPONENT_METADATA as l, PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE as m, PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS as n, PraxisFilter as o, PraxisFilterWidgetConfigEditor as p, PraxisTable as q, PraxisTableConfigEditor as r, PraxisTableInlineAuthoringEditorComponent as s, PraxisTableToolbar as t, PraxisTableWidgetConfigEditor as u, TABLE_COMPONENT_AI_CAPABILITIES as v, TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS as w, TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND as x, TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS as y, TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA as z };
64559
+ export { getActionId as $, AnalyticsTableConfigAdapterService as A, BOOLEAN_PRESETS as B, CURRENCY_PRESETS as C, DATE_PRESETS as D, TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA as E, FORMULA_TEMPLATES as F, TABLE_COMPONENT_EDIT_PLAN_KIND as G, TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS as H, TABLE_COMPONENT_EDIT_PLAN_VERSION as I, JsonConfigEditorComponent as J, TASK_PRESETS as K, TableDefaultsProvider as L, MessagesLocalizationEditorComponent as M, NUMBER_PRESETS as N, TableRulesEditorComponent as O, PERCENTAGE_PRESETS as P, ToolbarActionsEditorComponent as Q, VisualFormulaBuilderComponent as R, STRING_PRESETS as S, TABLE_AI_CAPABILITIES as T, buildTableApplyPlan as U, ValueMappingEditorComponent as V, coerceTableComponentEditPlan as W, coerceTableComponentEditPlans as X, compileTableComponentEditPlan as Y, compileTableComponentEditPlans as Z, createTableAuthoringDocument as _, AnalyticsTableContractService as a, getEnum as a0, getTableCapabilities as a1, getTableComponentEditPlanCapabilities as a2, isTableRendererSupportedByRichContentP0 as a3, mapTableRendererToRichContentP0 as a4, normalizeTableAuthoringDocument as a5, parseLegacyOrTableDocument as a6, providePraxisFilterMetadata as a7, providePraxisTableMetadata as a8, providePraxisTableToolbarAppearance as a9, serializeTableAuthoringDocument as aa, toCanonicalTableConfig as ab, validateTableAuthoringDocument as ac, AnalyticsTableStatsApiService as b, BehaviorConfigEditorComponent as c, ColumnsConfigEditorComponent as d, DataFormatterComponent as e, DataFormattingService as f, FilterConfigService as g, FilterSettingsComponent as h, FormulaGeneratorService as i, PRAXIS_FILTER_COMPONENT_METADATA as j, PRAXIS_TABLE_AUTHORING_MANIFEST as k, PRAXIS_TABLE_COMPONENT_METADATA as l, PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS as m, PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE as n, PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS as o, PraxisFilter as p, PraxisFilterWidgetConfigEditor as q, PraxisTable as r, PraxisTableConfigEditor as s, PraxisTableInlineAuthoringEditorComponent as t, PraxisTableToolbar as u, PraxisTableWidgetConfigEditor as v, TABLE_COMPONENT_AI_CAPABILITIES as w, TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS as x, TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND as y, TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS as z };