@praxisui/core 9.0.68-rc.0 → 9.0.68-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -1
- package/ai/component-registry.json +4 -4
- package/fesm2022/praxisui-core.mjs +585 -49
- package/package.json +1 -1
- package/types/praxisui-core.d.ts +43 -2
|
@@ -7542,6 +7542,70 @@ const COMPONENT_METADATA_REGISTRY_I18N_CONFIG = {
|
|
|
7542
7542
|
},
|
|
7543
7543
|
};
|
|
7544
7544
|
|
|
7545
|
+
/** Builtin fallback only; consumer dictionaries and translators retain precedence. */
|
|
7546
|
+
const WIDGET_SHELL_PRESET_DICTIONARIES = {
|
|
7547
|
+
'pt-BR': {
|
|
7548
|
+
'praxis.widgetShell.presets.dark-glass.label': "Vidro escuro",
|
|
7549
|
+
'praxis.widgetShell.presets.dark-glass.description': "Vidro fosco translúcido; usa fundo opaco quando a transparência é reduzida ou em tela cheia.",
|
|
7550
|
+
'praxis.widgetShell.presets.light-neutral.label': "Neutro adaptativo",
|
|
7551
|
+
'praxis.widgetShell.presets.light-neutral.description': "Superfície neutra sem sombra, que acompanha o tema claro ou escuro.",
|
|
7552
|
+
'praxis.widgetShell.presets.graphite.label': "Grafite",
|
|
7553
|
+
'praxis.widgetShell.presets.graphite.description': "Acabamento carvão opaco com cabeçalho cinza e texto claro, nos dois temas.",
|
|
7554
|
+
'praxis.widgetShell.presets.data-panel.label': "Painel de dados",
|
|
7555
|
+
'praxis.widgetShell.presets.data-panel.description': "Moldura compacta, cantos discretos e cabeçalho definido; não altera a densidade da tabela.",
|
|
7556
|
+
'praxis.widgetShell.presets.chart-panel.label': "Painel de gráfico",
|
|
7557
|
+
'praxis.widgetShell.presets.chart-panel.description': "Moldura leve com mais espaço para o gráfico; eixos, séries e legenda usam o preset do gráfico.",
|
|
7558
|
+
'praxis.widgetShell.presets.metric-panel.label': "Painel de indicadores",
|
|
7559
|
+
'praxis.widgetShell.presets.metric-panel.description': "Superfície tonal com cabeçalho discreto; o componente interno define o valor e a comparação.",
|
|
7560
|
+
'praxis.widgetShell.presets.executive-card.label': "Card executivo",
|
|
7561
|
+
'praxis.widgetShell.presets.executive-card.description': "Cabeçalho na cor de destaque, título maior e corpo espaçoso para síntese e decisão.",
|
|
7562
|
+
'praxis.widgetShell.presets.filter-bar.label': "Barra de filtros",
|
|
7563
|
+
'praxis.widgetShell.presets.filter-bar.description': "Cápsula para resumos ou filtros compactos; não é indicada para painéis altos.",
|
|
7564
|
+
'praxis.widgetShell.presets.integratedCard.label': 'Card integrado',
|
|
7565
|
+
'praxis.widgetShell.presets.integratedCard.description': 'Uma superfície contínua para cabeçalho, ações e corpo do widget.',
|
|
7566
|
+
'praxis.widgetShell.presets.outlinedCard.label': 'Card contornado',
|
|
7567
|
+
'praxis.widgetShell.presets.outlinedCard.description': 'Superfície contínua e discreta, com contorno externo e sem sombra.',
|
|
7568
|
+
'praxis.widgetShell.presets.elevatedCard.label': 'Card elevado',
|
|
7569
|
+
'praxis.widgetShell.presets.elevatedCard.description': 'Superfície contínua separada da página por uma sombra suave.',
|
|
7570
|
+
'praxis.widgetShell.presets.tonalCard.label': 'Card tonal',
|
|
7571
|
+
'praxis.widgetShell.presets.tonalCard.description': 'Superfície contínua levemente tonalizada e com elevação mínima.',
|
|
7572
|
+
'praxis.widgetShell.presets.sectionedCard.label': 'Card seccionado',
|
|
7573
|
+
'praxis.widgetShell.presets.sectionedCard.description': 'Cabeçalho destacado para conteúdos operacionais densos.',
|
|
7574
|
+
'praxis.widgetShell.presets.frameless.label': 'Sem moldura',
|
|
7575
|
+
'praxis.widgetShell.presets.frameless.description': 'Sem superfície externa, contorno ou sombra; mantém o recuo de leitura do conteúdo.',
|
|
7576
|
+
},
|
|
7577
|
+
'en-US': {
|
|
7578
|
+
'praxis.widgetShell.presets.dark-glass.label': "Dark glass",
|
|
7579
|
+
'praxis.widgetShell.presets.dark-glass.description': "Translucent frosted glass; uses an opaque surface with reduced transparency or fullscreen.",
|
|
7580
|
+
'praxis.widgetShell.presets.light-neutral.label': "Adaptive neutral",
|
|
7581
|
+
'praxis.widgetShell.presets.light-neutral.description': "A neutral shadow-free surface that follows the light or dark theme.",
|
|
7582
|
+
'praxis.widgetShell.presets.graphite.label': "Graphite",
|
|
7583
|
+
'praxis.widgetShell.presets.graphite.description': "Opaque charcoal finish with a gray header and light text in both themes.",
|
|
7584
|
+
'praxis.widgetShell.presets.data-panel.label': "Data panel",
|
|
7585
|
+
'praxis.widgetShell.presets.data-panel.description': "Compact framing, small corners and a defined header; does not change table density.",
|
|
7586
|
+
'praxis.widgetShell.presets.chart-panel.label': "Chart panel",
|
|
7587
|
+
'praxis.widgetShell.presets.chart-panel.description': "Light framing with more chart space; axes, series and legend use the chart preset.",
|
|
7588
|
+
'praxis.widgetShell.presets.metric-panel.label': "Metric panel",
|
|
7589
|
+
'praxis.widgetShell.presets.metric-panel.description': "A tonal surface with a quiet header; the inner component defines the value and comparison.",
|
|
7590
|
+
'praxis.widgetShell.presets.executive-card.label': "Executive card",
|
|
7591
|
+
'praxis.widgetShell.presets.executive-card.description': "An accent-colored header, larger title and spacious body for summaries and decisions.",
|
|
7592
|
+
'praxis.widgetShell.presets.filter-bar.label': "Filter bar",
|
|
7593
|
+
'praxis.widgetShell.presets.filter-bar.description': "A capsule for summaries or compact filters; not intended for tall panels.",
|
|
7594
|
+
'praxis.widgetShell.presets.integratedCard.label': 'Integrated card',
|
|
7595
|
+
'praxis.widgetShell.presets.integratedCard.description': 'One continuous surface for the header, actions and widget body.',
|
|
7596
|
+
'praxis.widgetShell.presets.outlinedCard.label': 'Outlined card',
|
|
7597
|
+
'praxis.widgetShell.presets.outlinedCard.description': 'A quiet continuous surface with a clear outer outline and no shadow.',
|
|
7598
|
+
'praxis.widgetShell.presets.elevatedCard.label': 'Elevated card',
|
|
7599
|
+
'praxis.widgetShell.presets.elevatedCard.description': 'A continuous surface separated from the page by a soft shadow.',
|
|
7600
|
+
'praxis.widgetShell.presets.tonalCard.label': 'Tonal card',
|
|
7601
|
+
'praxis.widgetShell.presets.tonalCard.description': 'A softly tinted continuous surface with minimal elevation.',
|
|
7602
|
+
'praxis.widgetShell.presets.sectionedCard.label': 'Sectioned card',
|
|
7603
|
+
'praxis.widgetShell.presets.sectionedCard.description': 'A distinct header layer for dense operational content.',
|
|
7604
|
+
'praxis.widgetShell.presets.frameless.label': 'Frameless',
|
|
7605
|
+
'praxis.widgetShell.presets.frameless.description': 'No outer surface, outline or shadow; keeps the content reading inset.',
|
|
7606
|
+
},
|
|
7607
|
+
};
|
|
7608
|
+
|
|
7545
7609
|
function interpolatePraxisTranslation(template, params) {
|
|
7546
7610
|
if (!template || !params)
|
|
7547
7611
|
return template;
|
|
@@ -7622,7 +7686,9 @@ class PraxisI18nService {
|
|
|
7622
7686
|
tForLocale(locale, key, params, fallback, namespace) {
|
|
7623
7687
|
const message = this.translateExternally(key, params, fallback)
|
|
7624
7688
|
?? this.lookupInHierarchy(key, locale, namespace)
|
|
7689
|
+
?? this.lookupBuiltinShellPreset(key, locale)
|
|
7625
7690
|
?? this.lookupInHierarchy(key, this.getFallbackLocale(), namespace)
|
|
7691
|
+
?? this.lookupBuiltinShellPreset(key, this.getFallbackLocale())
|
|
7626
7692
|
?? fallback
|
|
7627
7693
|
?? key;
|
|
7628
7694
|
return interpolatePraxisTranslation(message, params);
|
|
@@ -7741,6 +7807,10 @@ class PraxisI18nService {
|
|
|
7741
7807
|
}
|
|
7742
7808
|
return undefined;
|
|
7743
7809
|
}
|
|
7810
|
+
lookupBuiltinShellPreset(key, locale) {
|
|
7811
|
+
const value = WIDGET_SHELL_PRESET_DICTIONARIES[locale]?.[key];
|
|
7812
|
+
return typeof value === 'string' ? value : undefined;
|
|
7813
|
+
}
|
|
7744
7814
|
lookupInHierarchy(key, locale, namespace) {
|
|
7745
7815
|
const local = this.lookup(key, locale, namespace);
|
|
7746
7816
|
if (local)
|
|
@@ -12286,6 +12356,8 @@ class DynamicFormService {
|
|
|
12286
12356
|
isMultipleField(meta) {
|
|
12287
12357
|
return (meta.controlType === FieldControlType.MULTI_SELECT ||
|
|
12288
12358
|
meta.multiple === true ||
|
|
12359
|
+
meta.dataType === 'array' ||
|
|
12360
|
+
meta.type === 'array' ||
|
|
12289
12361
|
(meta.controlType === FieldControlType.CHECKBOX &&
|
|
12290
12362
|
this.hasCheckboxOptions(meta)));
|
|
12291
12363
|
}
|
|
@@ -12366,8 +12438,6 @@ class DynamicFormService {
|
|
|
12366
12438
|
}
|
|
12367
12439
|
isArrayMetadata(meta) {
|
|
12368
12440
|
return (meta.controlType === FieldControlType.ARRAY_INPUT ||
|
|
12369
|
-
meta.dataType === 'array' ||
|
|
12370
|
-
meta.type === 'array' ||
|
|
12371
12441
|
!!meta.array);
|
|
12372
12442
|
}
|
|
12373
12443
|
getArrayConfig(meta) {
|
|
@@ -12557,15 +12627,13 @@ class DynamicFormService {
|
|
|
12557
12627
|
* - Valor inicial: [] para campos múltiplos quando ausente; caso contrário defaultValue.
|
|
12558
12628
|
*/
|
|
12559
12629
|
createControlFromField(field) {
|
|
12560
|
-
if (field
|
|
12561
|
-
field.type === 'array' ||
|
|
12562
|
-
!!field.array) {
|
|
12630
|
+
if (this.isArrayMetadata(mapFieldDefinitionToMetadata(field))) {
|
|
12563
12631
|
return this.createArrayControlFromMetadata(mapFieldDefinitionToMetadata(field));
|
|
12564
12632
|
}
|
|
12565
12633
|
const { validators, asyncValidators } = this.buildFromFieldDefinition(field);
|
|
12566
12634
|
const updateOn = this.getUpdateOnFromField(field);
|
|
12567
12635
|
const initialValue = field.defaultValue ?? null;
|
|
12568
|
-
const value = field
|
|
12636
|
+
const value = this.isMultipleField(mapFieldDefinitionToMetadata(field)) && initialValue == null ? [] : initialValue;
|
|
12569
12637
|
const ctrl = new FormControl({ value, disabled: !!field.disabled }, {
|
|
12570
12638
|
validators,
|
|
12571
12639
|
asyncValidators,
|
|
@@ -12613,9 +12681,7 @@ class DynamicFormService {
|
|
|
12613
12681
|
this.addControlFromField(form, field, opts);
|
|
12614
12682
|
return;
|
|
12615
12683
|
}
|
|
12616
|
-
if (field
|
|
12617
|
-
field.type === 'array' ||
|
|
12618
|
-
!!field.array) {
|
|
12684
|
+
if (this.isArrayMetadata(mapFieldDefinitionToMetadata(field))) {
|
|
12619
12685
|
const metadata = mapFieldDefinitionToMetadata(field);
|
|
12620
12686
|
control.setValidators(this.buildArrayValidators(metadata));
|
|
12621
12687
|
if (field.disabled)
|
|
@@ -16678,6 +16744,16 @@ class ResourceActionOpenAdapterService {
|
|
|
16678
16744
|
schemaType: 'request',
|
|
16679
16745
|
groupedCommand: {
|
|
16680
16746
|
partialRowStrategy: 'fill-compatible',
|
|
16747
|
+
// These fields are supplied by the governed selection, not edited as
|
|
16748
|
+
// command fields. Keep them in the form/payload through contextFields.
|
|
16749
|
+
...(action.scope === 'COLLECTION' && action.execution?.selection?.idsField
|
|
16750
|
+
? { contextFields: [
|
|
16751
|
+
action.execution.selection.idsField,
|
|
16752
|
+
...(action.execution.preconditions.resourceVersionTransport === 'SELECTION_MAP'
|
|
16753
|
+
&& action.execution.selection.versionsField
|
|
16754
|
+
? [action.execution.selection.versionsField] : []),
|
|
16755
|
+
] }
|
|
16756
|
+
: {}),
|
|
16681
16757
|
},
|
|
16682
16758
|
},
|
|
16683
16759
|
schemaUrl: resolvedRequestSchemaUrl,
|
|
@@ -16740,8 +16816,9 @@ class ResourceActionOpenAdapterService {
|
|
|
16740
16816
|
if (requiresFormConfirmation && !confirmationMessage) {
|
|
16741
16817
|
throw new Error(`ResourceActionOpenAdapterService requires description or title for confirmed FORM action "${action.id}".`);
|
|
16742
16818
|
}
|
|
16743
|
-
const
|
|
16744
|
-
|
|
16819
|
+
const perItem = action.execution?.outcome.mode === 'PER_ITEM';
|
|
16820
|
+
const successMessage = perItem ? '' : String(action.successMessage ?? '').trim();
|
|
16821
|
+
if (!confirmationMessage && !successMessage && !perItem) {
|
|
16745
16822
|
return;
|
|
16746
16823
|
}
|
|
16747
16824
|
const inputs = payload.widget.inputs;
|
|
@@ -16753,6 +16830,16 @@ class ResourceActionOpenAdapterService {
|
|
|
16753
16830
|
submit: confirmationMessage,
|
|
16754
16831
|
};
|
|
16755
16832
|
}
|
|
16833
|
+
if (perItem) {
|
|
16834
|
+
// HTTP success means the batch was processed, not that every item succeeded.
|
|
16835
|
+
// The opening consumer presents the canonical per-item surface outcome.
|
|
16836
|
+
currentMessages['createRegistrySuccess'] = '';
|
|
16837
|
+
currentMessages['updateRegistrySuccess'] = '';
|
|
16838
|
+
currentMessages['customActions'] = {
|
|
16839
|
+
...(currentMessages['customActions'] ?? {}),
|
|
16840
|
+
submit: { success: '' },
|
|
16841
|
+
};
|
|
16842
|
+
}
|
|
16756
16843
|
if (successMessage) {
|
|
16757
16844
|
const customActions = {
|
|
16758
16845
|
...(currentMessages['customActions'] ?? {}),
|
|
@@ -25771,7 +25858,10 @@ const ValidationPattern = {
|
|
|
25771
25858
|
|
|
25772
25859
|
function materializeFormLayoutFromMetadata(fields, options = {}) {
|
|
25773
25860
|
const policy = normalizeLayoutPolicy(options.policy);
|
|
25774
|
-
const
|
|
25861
|
+
const contextFields = policy.preset === 'groupedCommand'
|
|
25862
|
+
? groupedCommandContextFields(policy) : new Set();
|
|
25863
|
+
const visibleFields = normalizeFields(resolveRelationPresentationFields(fields, policy), true).filter(field => options.includeHidden === true || !isFormHidden(field)
|
|
25864
|
+
|| contextFields.has(field.name));
|
|
25775
25865
|
const layoutFields = fieldsForLayoutPolicy(visibleFields, policy);
|
|
25776
25866
|
const groupedFields = groupFields(layoutFields);
|
|
25777
25867
|
const sections = groupedFields.map(([groupKey, groupFields], sectionIndex) => createSection(groupKey, groupFields, sectionIndex, policy, options));
|
|
@@ -32974,10 +33064,7 @@ function getWidgetShellActionIdError(id, siblingIds = []) {
|
|
|
32974
33064
|
return null;
|
|
32975
33065
|
}
|
|
32976
33066
|
|
|
32977
|
-
|
|
32978
|
-
const outlinedSurface = 'var(--md-sys-color-surface)';
|
|
32979
|
-
const elevatedSurface = 'var(--md-sys-color-surface-container-lowest)';
|
|
32980
|
-
const tonalSurface = 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 84%, var(--md-sys-color-primary-container) 16%)';
|
|
33067
|
+
/** Canonical shell finishes; content behavior belongs to the projected component. */
|
|
32981
33068
|
const BUILTIN_WIDGET_SHELL_PRESETS = [
|
|
32982
33069
|
{
|
|
32983
33070
|
id: 'integrated-card',
|
|
@@ -32992,13 +33079,13 @@ const BUILTIN_WIDGET_SHELL_PRESETS = [
|
|
|
32992
33079
|
category: 'single-surface',
|
|
32993
33080
|
appearance: {
|
|
32994
33081
|
card: {
|
|
32995
|
-
background:
|
|
33082
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 94%, var(--md-sys-color-primary-container) 6%)',
|
|
32996
33083
|
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 76%, transparent)',
|
|
32997
33084
|
borderRadius: '12px',
|
|
32998
33085
|
shadow: '0 6px 18px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
32999
33086
|
},
|
|
33000
33087
|
header: {
|
|
33001
|
-
background:
|
|
33088
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 94%, var(--md-sys-color-primary-container) 6%)',
|
|
33002
33089
|
borderColor: 'transparent',
|
|
33003
33090
|
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33004
33091
|
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
@@ -33024,13 +33111,13 @@ const BUILTIN_WIDGET_SHELL_PRESETS = [
|
|
|
33024
33111
|
category: 'single-surface',
|
|
33025
33112
|
appearance: {
|
|
33026
33113
|
card: {
|
|
33027
|
-
background:
|
|
33028
|
-
borderColor: '
|
|
33114
|
+
background: 'var(--md-sys-color-surface)',
|
|
33115
|
+
borderColor: 'var(--md-sys-color-outline)',
|
|
33029
33116
|
borderRadius: '12px',
|
|
33030
33117
|
shadow: 'none',
|
|
33031
33118
|
},
|
|
33032
33119
|
header: {
|
|
33033
|
-
background:
|
|
33120
|
+
background: 'var(--md-sys-color-surface)',
|
|
33034
33121
|
borderColor: 'transparent',
|
|
33035
33122
|
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33036
33123
|
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
@@ -33056,13 +33143,13 @@ const BUILTIN_WIDGET_SHELL_PRESETS = [
|
|
|
33056
33143
|
category: 'single-surface',
|
|
33057
33144
|
appearance: {
|
|
33058
33145
|
card: {
|
|
33059
|
-
background:
|
|
33146
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 88%, var(--md-sys-color-surface) 12%)',
|
|
33060
33147
|
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 46%, transparent)',
|
|
33061
33148
|
borderRadius: '14px',
|
|
33062
|
-
shadow: '0
|
|
33149
|
+
shadow: '0 2px 4px color-mix(in srgb, var(--md-sys-color-shadow, #000) 10%, transparent), 0 14px 32px color-mix(in srgb, var(--md-sys-color-shadow, #000) 16%, transparent)',
|
|
33063
33150
|
},
|
|
33064
33151
|
header: {
|
|
33065
|
-
background:
|
|
33152
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 88%, var(--md-sys-color-surface) 12%)',
|
|
33066
33153
|
borderColor: 'transparent',
|
|
33067
33154
|
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33068
33155
|
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
@@ -33088,13 +33175,13 @@ const BUILTIN_WIDGET_SHELL_PRESETS = [
|
|
|
33088
33175
|
category: 'single-surface',
|
|
33089
33176
|
appearance: {
|
|
33090
33177
|
card: {
|
|
33091
|
-
background:
|
|
33178
|
+
background: 'color-mix(in srgb, var(--md-sys-color-primary-container) 66%, var(--md-sys-color-surface) 34%)',
|
|
33092
33179
|
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 18%, transparent)',
|
|
33093
33180
|
borderRadius: '12px',
|
|
33094
33181
|
shadow: 'none',
|
|
33095
33182
|
},
|
|
33096
33183
|
header: {
|
|
33097
|
-
background:
|
|
33184
|
+
background: 'color-mix(in srgb, var(--md-sys-color-primary-container) 66%, var(--md-sys-color-surface) 34%)',
|
|
33098
33185
|
borderColor: 'transparent',
|
|
33099
33186
|
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33100
33187
|
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
@@ -33126,7 +33213,7 @@ const BUILTIN_WIDGET_SHELL_PRESETS = [
|
|
|
33126
33213
|
shadow: '0 5px 16px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
33127
33214
|
},
|
|
33128
33215
|
header: {
|
|
33129
|
-
background: '
|
|
33216
|
+
background: 'var(--md-sys-color-surface-container-high)',
|
|
33130
33217
|
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 62%, transparent)',
|
|
33131
33218
|
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33132
33219
|
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
@@ -33170,7 +33257,285 @@ const BUILTIN_WIDGET_SHELL_PRESETS = [
|
|
|
33170
33257
|
},
|
|
33171
33258
|
},
|
|
33172
33259
|
},
|
|
33260
|
+
{
|
|
33261
|
+
id: 'dark-glass',
|
|
33262
|
+
label: {
|
|
33263
|
+
key: 'praxis.widgetShell.presets.dark-glass.label',
|
|
33264
|
+
text: 'Dark glass',
|
|
33265
|
+
},
|
|
33266
|
+
description: {
|
|
33267
|
+
key: 'praxis.widgetShell.presets.dark-glass.description',
|
|
33268
|
+
text: 'Translucent frosted glass; uses an opaque surface with reduced transparency or fullscreen.',
|
|
33269
|
+
},
|
|
33270
|
+
category: 'sectioned',
|
|
33271
|
+
appearance: {
|
|
33272
|
+
card: {
|
|
33273
|
+
background: 'linear-gradient(135deg, rgba(11,18,32,0.82), rgba(11,18,32,0.68))',
|
|
33274
|
+
borderColor: 'rgba(255,255,255,0.28)',
|
|
33275
|
+
borderRadius: '16px',
|
|
33276
|
+
shadow: 'inset 0 1px 0 rgba(255,255,255,0.14), 0 12px 26px rgba(0,0,0,0.24)',
|
|
33277
|
+
backdropFilter: 'blur(16px) saturate(125%)',
|
|
33278
|
+
fallbackBackground: '#0b1220',
|
|
33279
|
+
},
|
|
33280
|
+
header: {
|
|
33281
|
+
background: 'transparent',
|
|
33282
|
+
borderColor: 'rgba(255,255,255,0.12)',
|
|
33283
|
+
titleColor: '#e6edf3',
|
|
33284
|
+
subtitleColor: '#d3deed',
|
|
33285
|
+
iconColor: '#8ab4ff',
|
|
33286
|
+
},
|
|
33287
|
+
body: {
|
|
33288
|
+
background: 'transparent',
|
|
33289
|
+
textColor: '#e6edf3',
|
|
33290
|
+
},
|
|
33291
|
+
typography: {
|
|
33292
|
+
titleSize: '14px',
|
|
33293
|
+
titleWeight: '600',
|
|
33294
|
+
subtitleSize: '12px',
|
|
33295
|
+
},
|
|
33296
|
+
},
|
|
33297
|
+
},
|
|
33298
|
+
{
|
|
33299
|
+
id: 'light-neutral',
|
|
33300
|
+
label: {
|
|
33301
|
+
key: 'praxis.widgetShell.presets.light-neutral.label',
|
|
33302
|
+
text: 'Adaptive neutral',
|
|
33303
|
+
},
|
|
33304
|
+
description: {
|
|
33305
|
+
key: 'praxis.widgetShell.presets.light-neutral.description',
|
|
33306
|
+
text: 'A neutral shadow-free surface that follows the light or dark theme.',
|
|
33307
|
+
},
|
|
33308
|
+
category: 'sectioned',
|
|
33309
|
+
appearance: {
|
|
33310
|
+
card: {
|
|
33311
|
+
background: 'var(--md-sys-color-surface)',
|
|
33312
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 82%, transparent)',
|
|
33313
|
+
borderRadius: '12px',
|
|
33314
|
+
shadow: 'none',
|
|
33315
|
+
},
|
|
33316
|
+
header: {
|
|
33317
|
+
background: 'transparent',
|
|
33318
|
+
borderColor: 'transparent',
|
|
33319
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33320
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
33321
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
33322
|
+
},
|
|
33323
|
+
body: {
|
|
33324
|
+
background: 'var(--md-sys-color-surface)',
|
|
33325
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
33326
|
+
},
|
|
33327
|
+
},
|
|
33328
|
+
},
|
|
33329
|
+
{
|
|
33330
|
+
id: 'graphite',
|
|
33331
|
+
label: {
|
|
33332
|
+
key: 'praxis.widgetShell.presets.graphite.label',
|
|
33333
|
+
text: 'Graphite',
|
|
33334
|
+
},
|
|
33335
|
+
description: {
|
|
33336
|
+
key: 'praxis.widgetShell.presets.graphite.description',
|
|
33337
|
+
text: 'Opaque charcoal finish with a gray header and light text in both themes.',
|
|
33338
|
+
},
|
|
33339
|
+
category: 'sectioned',
|
|
33340
|
+
appearance: {
|
|
33341
|
+
card: {
|
|
33342
|
+
background: '#272b30',
|
|
33343
|
+
borderColor: '#565d66',
|
|
33344
|
+
borderRadius: '8px',
|
|
33345
|
+
shadow: 'none',
|
|
33346
|
+
},
|
|
33347
|
+
header: {
|
|
33348
|
+
background: '#33383f',
|
|
33349
|
+
borderColor: '#565d66',
|
|
33350
|
+
titleColor: '#f2f4f7',
|
|
33351
|
+
subtitleColor: '#c4cad2',
|
|
33352
|
+
iconColor: '#d5dae2',
|
|
33353
|
+
},
|
|
33354
|
+
body: {
|
|
33355
|
+
background: 'transparent',
|
|
33356
|
+
textColor: '#f2f4f7',
|
|
33357
|
+
padding: '12px',
|
|
33358
|
+
},
|
|
33359
|
+
},
|
|
33360
|
+
},
|
|
33361
|
+
{
|
|
33362
|
+
id: 'data-panel',
|
|
33363
|
+
label: {
|
|
33364
|
+
key: 'praxis.widgetShell.presets.data-panel.label',
|
|
33365
|
+
text: 'Data panel',
|
|
33366
|
+
},
|
|
33367
|
+
description: {
|
|
33368
|
+
key: 'praxis.widgetShell.presets.data-panel.description',
|
|
33369
|
+
text: 'Compact framing, small corners and a defined header; does not change table density.',
|
|
33370
|
+
},
|
|
33371
|
+
category: 'sectioned',
|
|
33372
|
+
appearance: {
|
|
33373
|
+
card: {
|
|
33374
|
+
background: 'var(--md-sys-color-surface)',
|
|
33375
|
+
borderColor: 'var(--md-sys-color-outline)',
|
|
33376
|
+
borderRadius: '4px',
|
|
33377
|
+
shadow: 'none',
|
|
33378
|
+
},
|
|
33379
|
+
header: {
|
|
33380
|
+
background: 'var(--md-sys-color-surface-container-highest)',
|
|
33381
|
+
borderColor: 'var(--md-sys-color-outline)',
|
|
33382
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33383
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
33384
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
33385
|
+
},
|
|
33386
|
+
body: {
|
|
33387
|
+
background: 'var(--md-sys-color-surface)',
|
|
33388
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
33389
|
+
padding: '8px',
|
|
33390
|
+
},
|
|
33391
|
+
typography: {
|
|
33392
|
+
titleSize: '12px',
|
|
33393
|
+
titleWeight: '700',
|
|
33394
|
+
subtitleSize: '11px',
|
|
33395
|
+
},
|
|
33396
|
+
},
|
|
33397
|
+
},
|
|
33398
|
+
{
|
|
33399
|
+
id: 'chart-panel',
|
|
33400
|
+
label: {
|
|
33401
|
+
key: 'praxis.widgetShell.presets.chart-panel.label',
|
|
33402
|
+
text: 'Chart panel',
|
|
33403
|
+
},
|
|
33404
|
+
description: {
|
|
33405
|
+
key: 'praxis.widgetShell.presets.chart-panel.description',
|
|
33406
|
+
text: 'Light framing with more chart space; axes, series and legend use the chart preset.',
|
|
33407
|
+
},
|
|
33408
|
+
category: 'sectioned',
|
|
33409
|
+
appearance: {
|
|
33410
|
+
card: {
|
|
33411
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%)',
|
|
33412
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 22%, var(--md-sys-color-outline-variant) 62%)',
|
|
33413
|
+
borderRadius: '12px',
|
|
33414
|
+
shadow: 'none',
|
|
33415
|
+
},
|
|
33416
|
+
header: {
|
|
33417
|
+
background: 'transparent',
|
|
33418
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 20%, transparent)',
|
|
33419
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33420
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
33421
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
33422
|
+
},
|
|
33423
|
+
body: {
|
|
33424
|
+
background: 'transparent',
|
|
33425
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
33426
|
+
padding: '16px',
|
|
33427
|
+
},
|
|
33428
|
+
},
|
|
33429
|
+
},
|
|
33430
|
+
{
|
|
33431
|
+
id: 'metric-panel',
|
|
33432
|
+
label: {
|
|
33433
|
+
key: 'praxis.widgetShell.presets.metric-panel.label',
|
|
33434
|
+
text: 'Metric panel',
|
|
33435
|
+
},
|
|
33436
|
+
description: {
|
|
33437
|
+
key: 'praxis.widgetShell.presets.metric-panel.description',
|
|
33438
|
+
text: 'A tonal surface with a quiet header; the inner component defines the value and comparison.',
|
|
33439
|
+
},
|
|
33440
|
+
category: 'sectioned',
|
|
33441
|
+
appearance: {
|
|
33442
|
+
card: {
|
|
33443
|
+
background: 'color-mix(in srgb, var(--md-sys-color-primary-container) 44%, var(--md-sys-color-surface) 56%)',
|
|
33444
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 24%, transparent)',
|
|
33445
|
+
borderRadius: '10px',
|
|
33446
|
+
shadow: '0 8px 18px color-mix(in srgb, var(--md-sys-color-shadow, #000) 8%, transparent)',
|
|
33447
|
+
},
|
|
33448
|
+
header: {
|
|
33449
|
+
background: 'transparent',
|
|
33450
|
+
borderColor: 'transparent',
|
|
33451
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33452
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
33453
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
33454
|
+
},
|
|
33455
|
+
body: {
|
|
33456
|
+
background: 'transparent',
|
|
33457
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
33458
|
+
padding: '16px',
|
|
33459
|
+
},
|
|
33460
|
+
typography: {
|
|
33461
|
+
titleSize: '12px',
|
|
33462
|
+
titleWeight: '600',
|
|
33463
|
+
subtitleSize: '11px',
|
|
33464
|
+
},
|
|
33465
|
+
},
|
|
33466
|
+
},
|
|
33467
|
+
{
|
|
33468
|
+
id: 'executive-card',
|
|
33469
|
+
label: {
|
|
33470
|
+
key: 'praxis.widgetShell.presets.executive-card.label',
|
|
33471
|
+
text: 'Executive card',
|
|
33472
|
+
},
|
|
33473
|
+
description: {
|
|
33474
|
+
key: 'praxis.widgetShell.presets.executive-card.description',
|
|
33475
|
+
text: 'An accent-colored header, larger title and spacious body for summaries and decisions.',
|
|
33476
|
+
},
|
|
33477
|
+
category: 'sectioned',
|
|
33478
|
+
appearance: {
|
|
33479
|
+
card: {
|
|
33480
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 88%, var(--md-sys-color-surface-container-high) 12%)',
|
|
33481
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 28%, var(--md-sys-color-outline-variant) 50%)',
|
|
33482
|
+
borderRadius: '16px',
|
|
33483
|
+
shadow: '0 12px 28px color-mix(in srgb, var(--md-sys-color-shadow, #000) 13%, transparent)',
|
|
33484
|
+
},
|
|
33485
|
+
header: {
|
|
33486
|
+
background: 'var(--md-sys-color-primary)',
|
|
33487
|
+
borderColor: 'transparent',
|
|
33488
|
+
titleColor: 'var(--md-sys-color-on-primary)',
|
|
33489
|
+
subtitleColor: 'var(--md-sys-color-on-primary)',
|
|
33490
|
+
iconColor: 'var(--md-sys-color-on-primary)',
|
|
33491
|
+
},
|
|
33492
|
+
body: {
|
|
33493
|
+
background: 'transparent',
|
|
33494
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
33495
|
+
padding: '20px',
|
|
33496
|
+
},
|
|
33497
|
+
typography: {
|
|
33498
|
+
titleSize: '16px',
|
|
33499
|
+
titleWeight: '600',
|
|
33500
|
+
subtitleSize: '12px',
|
|
33501
|
+
},
|
|
33502
|
+
},
|
|
33503
|
+
},
|
|
33504
|
+
{
|
|
33505
|
+
id: 'filter-bar',
|
|
33506
|
+
label: {
|
|
33507
|
+
key: 'praxis.widgetShell.presets.filter-bar.label',
|
|
33508
|
+
text: 'Filter bar',
|
|
33509
|
+
},
|
|
33510
|
+
description: {
|
|
33511
|
+
key: 'praxis.widgetShell.presets.filter-bar.description',
|
|
33512
|
+
text: 'A capsule for summaries or compact filters; not intended for tall panels.',
|
|
33513
|
+
},
|
|
33514
|
+
category: 'sectioned',
|
|
33515
|
+
appearance: {
|
|
33516
|
+
card: {
|
|
33517
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 74%, var(--md-sys-color-secondary-container) 26%)',
|
|
33518
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-secondary) 24%, transparent)',
|
|
33519
|
+
borderRadius: '999px',
|
|
33520
|
+
shadow: '0 6px 18px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
33521
|
+
},
|
|
33522
|
+
header: {
|
|
33523
|
+
background: 'transparent',
|
|
33524
|
+
borderColor: 'transparent',
|
|
33525
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
33526
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
33527
|
+
iconColor: 'var(--md-sys-color-secondary)',
|
|
33528
|
+
},
|
|
33529
|
+
body: {
|
|
33530
|
+
background: 'transparent',
|
|
33531
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
33532
|
+
padding: '10px 14px',
|
|
33533
|
+
},
|
|
33534
|
+
},
|
|
33535
|
+
},
|
|
33173
33536
|
];
|
|
33537
|
+
/** Public ID lookup derived from the canonical catalog; no separate preset definitions. */
|
|
33538
|
+
const BUILTIN_SHELL_PRESETS = Object.fromEntries(BUILTIN_WIDGET_SHELL_PRESETS.map(({ id, appearance }) => [id, appearance]));
|
|
33174
33539
|
function findBuiltinWidgetShellPreset(id) {
|
|
33175
33540
|
const normalizedId = id?.trim();
|
|
33176
33541
|
if (!normalizedId)
|
|
@@ -34950,9 +35315,16 @@ class WidgetShellComponent {
|
|
|
34950
35315
|
[class.pdx-shell--scroll-recovery]="scrollRecovery() && !collapsed && !expanded && !fullscreen"
|
|
34951
35316
|
[style.--pdx-shell-card-bg]="appearance?.card?.background || null"
|
|
34952
35317
|
[style.--pdx-shell-card-border]="appearance?.card?.borderColor || null"
|
|
35318
|
+
[style.--pdx-shell-card-border-width]="appearance?.card?.borderWidth || null"
|
|
35319
|
+
[style.--pdx-shell-card-border-style]="appearance?.card?.borderStyle || null"
|
|
34953
35320
|
[style.--pdx-shell-card-radius]="appearance?.card?.borderRadius || null"
|
|
34954
35321
|
[style.--pdx-shell-card-shadow]="appearance?.card?.shadow || null"
|
|
35322
|
+
[class.pdx-shell--backdrop]="!!appearance?.card?.backdropFilter && appearance?.card?.backdropFilter !== 'none'"
|
|
35323
|
+
[style.--pdx-shell-card-filter]="appearance?.card?.backdropFilter || null"
|
|
35324
|
+
[style.--pdx-shell-card-fallback-bg]="appearance?.card?.fallbackBackground || null"
|
|
34955
35325
|
[style.--pdx-shell-header-bg]="appearance?.header?.background || null"
|
|
35326
|
+
[style.--pdx-shell-header-border-width]="appearance?.header?.borderWidth || null"
|
|
35327
|
+
[style.--pdx-shell-header-border-style]="appearance?.header?.borderStyle || null"
|
|
34956
35328
|
[style.--pdx-shell-header-border]="
|
|
34957
35329
|
appearance?.header?.borderColor || null
|
|
34958
35330
|
"
|
|
@@ -35146,7 +35518,7 @@ class WidgetShellComponent {
|
|
|
35146
35518
|
@if (expanded || fullscreen) {
|
|
35147
35519
|
<div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
|
|
35148
35520
|
}
|
|
35149
|
-
`, isInline: true, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{box-sizing:border-box;position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var( --pdx-shell-card-bg, var( --pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low) ) );border:1px solid
|
|
35521
|
+
`, isInline: true, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{--pdx-shell-card-border-width: initial;--pdx-shell-card-border-style: initial;--pdx-shell-header-border-width: initial;--pdx-shell-header-border-style: initial;--pdx-shell-card-filter: initial;--pdx-shell-card-fallback-bg: initial;box-sizing:border-box;position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var( --pdx-shell-card-bg, var( --pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low) ) );border-width:var(--pdx-shell-card-border-width, 1px);border-style:var(--pdx-shell-card-border-style, solid);border-color:var( --pdx-shell-card-border, var( --pdx-dashboard-card-border, var(--md-sys-color-outline-variant) ) );border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var( --pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06) );overflow:hidden}.pdx-shell.dashboard{-webkit-backdrop-filter:var(--pdx-shell-card-filter, none);backdrop-filter:var(--pdx-shell-card-filter, none)}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){.pdx-shell.dashboard.pdx-shell--backdrop{background:var(--pdx-shell-card-fallback-bg, var(--md-sys-color-surface))}}@media(prefers-reduced-transparency:reduce){.pdx-shell.dashboard.pdx-shell--backdrop{background:var(--pdx-shell-card-fallback-bg, var(--md-sys-color-surface));-webkit-backdrop-filter:none;backdrop-filter:none}}.pdx-shell.dashboard.pdx-shell--backdrop.expanded,.pdx-shell.dashboard.pdx-shell--backdrop.fullscreen{background:var(--pdx-shell-card-fallback-bg, var(--md-sys-color-surface));-webkit-backdrop-filter:none;backdrop-filter:none}.pdx-shell-header{flex-shrink:0;display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px;border-bottom:var(--pdx-shell-header-border-width, 1px) var(--pdx-shell-header-border-style, solid) var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var( --pdx-shell-header-bg, var(--md-sys-color-surface-container) )}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-authoring-drag{flex:0 0 auto;align-self:flex-start;margin:4px 6px 0;z-index:2;cursor:grab;touch-action:none}.pdx-shell-authoring-drag:active{cursor:grabbing}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1 min(14rem,50%);max-width:100%;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{flex:0 0 auto;color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0;flex:1}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);color:var( --pdx-shell-subtitle-color, var(--md-sys-color-on-surface-variant, currentColor) );white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;flex-wrap:wrap;align-items:center;gap:4px;max-width:100%}.pdx-shell-actions{margin-left:auto;min-width:0}.pdx-shell-actions button.praxis-icon-button:not(:disabled):not(.praxis-icon-button--pressed){color:var(--pdx-shell-icon-color, var(--md-sys-color-on-surface-variant))}.pdx-shell-actions>button{max-width:100%}.pdx-shell-window-actions{margin-left:auto}.pdx-shell-text{display:grid;gap:2px}.pdx-shell-title-text,.pdx-shell-subtitle{display:-webkit-box;white-space:normal;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-shell-action--pressed:not(.praxis-icon-button){color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent)}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell.dashboard.pdx-shell--sticky-header{overflow:clip}.pdx-shell--sticky-header>.pdx-shell-header{position:sticky;top:var(--pdx-shell-sticky-header-offset, 0px);z-index:2;isolation:isolate;background:var(--md-sys-color-surface-container)}.pdx-shell--backdrop.pdx-shell--sticky-header>.pdx-shell-header{background:var(--pdx-shell-card-fallback-bg, var(--md-sys-color-surface-container))}.pdx-shell--sticky-header>.pdx-shell-header:before{content:\"\";position:absolute;inset:0;z-index:-1;pointer-events:none;background:var(--pdx-shell-header-bg, transparent)}.pdx-shell--sticky-header>.pdx-shell-body{isolation:isolate}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 12px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell>.pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed{height:auto}.pdx-shell.collapsed>.pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill>.pdx-shell-body,.pdx-shell.body-scroll>.pdx-shell-body,.pdx-shell.expanded>.pdx-shell-body,.pdx-shell.fullscreen>.pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.collapsed>.pdx-shell-body{display:none}.pdx-shell.body-fill>.pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll>.pdx-shell-body{overflow:auto}.pdx-shell.body-scroll.pdx-shell--scroll-recovery{overflow:auto}.pdx-shell.body-scroll.pdx-shell--scroll-recovery>.pdx-shell-body{flex:0 0 auto;overflow:visible}.pdx-shell.body-fill>.pdx-shell-body>*,.pdx-shell.body-scroll>.pdx-shell-body>*,.pdx-shell.expanded>.pdx-shell-body>*,.pdx-shell.fullscreen>.pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded,.pdx-shell-overlay-surface.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen,.pdx-shell-overlay-surface.fullscreen{position:fixed;inset:0;width:auto;height:auto;transform:none;border-radius:0;z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-overlay-surface{background:var(--md-sys-color-surface);border-radius:var(--pdx-dashboard-card-radius, 16px);pointer-events:none}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"], dependencies: [{ kind: "component", type: WidgetShellAvatarComponent, selector: "praxis-widget-shell-avatar", inputs: ["avatar"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4.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: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.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: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
35150
35522
|
}
|
|
35151
35523
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetShellComponent, decorators: [{
|
|
35152
35524
|
type: Component,
|
|
@@ -35188,9 +35560,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
35188
35560
|
[class.pdx-shell--scroll-recovery]="scrollRecovery() && !collapsed && !expanded && !fullscreen"
|
|
35189
35561
|
[style.--pdx-shell-card-bg]="appearance?.card?.background || null"
|
|
35190
35562
|
[style.--pdx-shell-card-border]="appearance?.card?.borderColor || null"
|
|
35563
|
+
[style.--pdx-shell-card-border-width]="appearance?.card?.borderWidth || null"
|
|
35564
|
+
[style.--pdx-shell-card-border-style]="appearance?.card?.borderStyle || null"
|
|
35191
35565
|
[style.--pdx-shell-card-radius]="appearance?.card?.borderRadius || null"
|
|
35192
35566
|
[style.--pdx-shell-card-shadow]="appearance?.card?.shadow || null"
|
|
35567
|
+
[class.pdx-shell--backdrop]="!!appearance?.card?.backdropFilter && appearance?.card?.backdropFilter !== 'none'"
|
|
35568
|
+
[style.--pdx-shell-card-filter]="appearance?.card?.backdropFilter || null"
|
|
35569
|
+
[style.--pdx-shell-card-fallback-bg]="appearance?.card?.fallbackBackground || null"
|
|
35193
35570
|
[style.--pdx-shell-header-bg]="appearance?.header?.background || null"
|
|
35571
|
+
[style.--pdx-shell-header-border-width]="appearance?.header?.borderWidth || null"
|
|
35572
|
+
[style.--pdx-shell-header-border-style]="appearance?.header?.borderStyle || null"
|
|
35194
35573
|
[style.--pdx-shell-header-border]="
|
|
35195
35574
|
appearance?.header?.borderColor || null
|
|
35196
35575
|
"
|
|
@@ -35384,7 +35763,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
35384
35763
|
@if (expanded || fullscreen) {
|
|
35385
35764
|
<div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
|
|
35386
35765
|
}
|
|
35387
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{box-sizing:border-box;position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var( --pdx-shell-card-bg, var( --pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low) ) );border:1px solid
|
|
35766
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{--pdx-shell-card-border-width: initial;--pdx-shell-card-border-style: initial;--pdx-shell-header-border-width: initial;--pdx-shell-header-border-style: initial;--pdx-shell-card-filter: initial;--pdx-shell-card-fallback-bg: initial;box-sizing:border-box;position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var( --pdx-shell-card-bg, var( --pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low) ) );border-width:var(--pdx-shell-card-border-width, 1px);border-style:var(--pdx-shell-card-border-style, solid);border-color:var( --pdx-shell-card-border, var( --pdx-dashboard-card-border, var(--md-sys-color-outline-variant) ) );border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var( --pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06) );overflow:hidden}.pdx-shell.dashboard{-webkit-backdrop-filter:var(--pdx-shell-card-filter, none);backdrop-filter:var(--pdx-shell-card-filter, none)}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){.pdx-shell.dashboard.pdx-shell--backdrop{background:var(--pdx-shell-card-fallback-bg, var(--md-sys-color-surface))}}@media(prefers-reduced-transparency:reduce){.pdx-shell.dashboard.pdx-shell--backdrop{background:var(--pdx-shell-card-fallback-bg, var(--md-sys-color-surface));-webkit-backdrop-filter:none;backdrop-filter:none}}.pdx-shell.dashboard.pdx-shell--backdrop.expanded,.pdx-shell.dashboard.pdx-shell--backdrop.fullscreen{background:var(--pdx-shell-card-fallback-bg, var(--md-sys-color-surface));-webkit-backdrop-filter:none;backdrop-filter:none}.pdx-shell-header{flex-shrink:0;display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px;border-bottom:var(--pdx-shell-header-border-width, 1px) var(--pdx-shell-header-border-style, solid) var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var( --pdx-shell-header-bg, var(--md-sys-color-surface-container) )}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-authoring-drag{flex:0 0 auto;align-self:flex-start;margin:4px 6px 0;z-index:2;cursor:grab;touch-action:none}.pdx-shell-authoring-drag:active{cursor:grabbing}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1 min(14rem,50%);max-width:100%;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{flex:0 0 auto;color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0;flex:1}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);color:var( --pdx-shell-subtitle-color, var(--md-sys-color-on-surface-variant, currentColor) );white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;flex-wrap:wrap;align-items:center;gap:4px;max-width:100%}.pdx-shell-actions{margin-left:auto;min-width:0}.pdx-shell-actions button.praxis-icon-button:not(:disabled):not(.praxis-icon-button--pressed){color:var(--pdx-shell-icon-color, var(--md-sys-color-on-surface-variant))}.pdx-shell-actions>button{max-width:100%}.pdx-shell-window-actions{margin-left:auto}.pdx-shell-text{display:grid;gap:2px}.pdx-shell-title-text,.pdx-shell-subtitle{display:-webkit-box;white-space:normal;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-shell-action--pressed:not(.praxis-icon-button){color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent)}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell.dashboard.pdx-shell--sticky-header{overflow:clip}.pdx-shell--sticky-header>.pdx-shell-header{position:sticky;top:var(--pdx-shell-sticky-header-offset, 0px);z-index:2;isolation:isolate;background:var(--md-sys-color-surface-container)}.pdx-shell--backdrop.pdx-shell--sticky-header>.pdx-shell-header{background:var(--pdx-shell-card-fallback-bg, var(--md-sys-color-surface-container))}.pdx-shell--sticky-header>.pdx-shell-header:before{content:\"\";position:absolute;inset:0;z-index:-1;pointer-events:none;background:var(--pdx-shell-header-bg, transparent)}.pdx-shell--sticky-header>.pdx-shell-body{isolation:isolate}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 12px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell>.pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed{height:auto}.pdx-shell.collapsed>.pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill>.pdx-shell-body,.pdx-shell.body-scroll>.pdx-shell-body,.pdx-shell.expanded>.pdx-shell-body,.pdx-shell.fullscreen>.pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.collapsed>.pdx-shell-body{display:none}.pdx-shell.body-fill>.pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll>.pdx-shell-body{overflow:auto}.pdx-shell.body-scroll.pdx-shell--scroll-recovery{overflow:auto}.pdx-shell.body-scroll.pdx-shell--scroll-recovery>.pdx-shell-body{flex:0 0 auto;overflow:visible}.pdx-shell.body-fill>.pdx-shell-body>*,.pdx-shell.body-scroll>.pdx-shell-body>*,.pdx-shell.expanded>.pdx-shell-body>*,.pdx-shell.fullscreen>.pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded,.pdx-shell-overlay-surface.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen,.pdx-shell-overlay-surface.fullscreen{position:fixed;inset:0;width:auto;height:auto;transform:none;border-radius:0;z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-overlay-surface{background:var(--md-sys-color-surface);border-radius:var(--pdx-dashboard-card-radius, 16px);pointer-events:none}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"] }]
|
|
35388
35767
|
}], ctorParameters: () => [], propDecorators: { hostCollapsed: [{
|
|
35389
35768
|
type: HostBinding,
|
|
35390
35769
|
args: ['class.pdx-widget-shell-collapsed']
|
|
@@ -35747,6 +36126,161 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
35747
36126
|
},
|
|
35748
36127
|
},
|
|
35749
36128
|
};
|
|
36129
|
+
/** Shared runtime/authoring resolution: a recognized explicit layout wins over presetFamily. */
|
|
36130
|
+
function resolveWidgetPageLayoutPreset(page) {
|
|
36131
|
+
const layoutPresetId = page.layoutPreset?.trim();
|
|
36132
|
+
if (layoutPresetId && BUILTIN_PAGE_LAYOUT_PRESETS[layoutPresetId]) {
|
|
36133
|
+
return BUILTIN_PAGE_LAYOUT_PRESETS[layoutPresetId];
|
|
36134
|
+
}
|
|
36135
|
+
const presetFamily = typeof page.layoutPresetOptions?.['presetFamily'] === 'string'
|
|
36136
|
+
? page.layoutPresetOptions['presetFamily'].trim()
|
|
36137
|
+
: '';
|
|
36138
|
+
return presetFamily ? BUILTIN_PAGE_LAYOUT_PRESETS[presetFamily] : undefined;
|
|
36139
|
+
}
|
|
36140
|
+
|
|
36141
|
+
const geometry = ['col', 'row', 'colSpan', 'rowSpan'];
|
|
36142
|
+
const overlaps$2 = (a, b) => a.col < b.col + b.colSpan && b.col < a.col + a.colSpan
|
|
36143
|
+
&& a.row < b.row + b.rowSpan && b.row < a.row + a.rowSpan;
|
|
36144
|
+
/** Prepare an explicit base-canvas arrangement. Widths are authored grid spans,
|
|
36145
|
+
* not semantic roles. The caller reviews the result before replacing the canvas.
|
|
36146
|
+
* No partial result is returned on failure. Device documents remain untouched.
|
|
36147
|
+
*/
|
|
36148
|
+
function prepareCanvasArrangement(page, widths) {
|
|
36149
|
+
const fail = (reason, blockedKeys = []) => ({ canvas: null, changedKeys: [], blockedKeys, reason });
|
|
36150
|
+
const canvas = page.canvas;
|
|
36151
|
+
if (!canvas || !Number.isSafeInteger(canvas.columns) || canvas.columns < 1
|
|
36152
|
+
|| !widths.length || widths.some(value => !Number.isSafeInteger(value) || value < 1)
|
|
36153
|
+
|| widths.reduce((sum, value) => sum + value, 0) !== canvas.columns)
|
|
36154
|
+
return fail('geometry');
|
|
36155
|
+
const entries = Object.entries(canvas.items).sort(([ak, a], [bk, b]) => a.row - b.row || a.col - b.col || (ak < bk ? -1 : ak > bk ? 1 : 0));
|
|
36156
|
+
const keys = new Set(page.widgets.map(widget => widget.key));
|
|
36157
|
+
if (keys.size !== page.widgets.length || entries.length !== keys.size
|
|
36158
|
+
|| entries.some(([key]) => !keys.has(key)))
|
|
36159
|
+
return fail('geometry');
|
|
36160
|
+
for (const [key, item] of entries) {
|
|
36161
|
+
if (!geometry.every(field => Number.isSafeInteger(item[field]) && item[field] > 0)
|
|
36162
|
+
|| !Number.isSafeInteger(item.row + item.rowSpan)
|
|
36163
|
+
|| item.col + item.colSpan > canvas.columns + 1)
|
|
36164
|
+
return fail('geometry', [key]);
|
|
36165
|
+
const c = item.constraints;
|
|
36166
|
+
if (Object.entries(c || {}).some(([name, value]) => !name.startsWith('lock')
|
|
36167
|
+
&& (!Number.isSafeInteger(value) || Number(value) < 1))
|
|
36168
|
+
|| item.colSpan < (c?.minColSpan ?? 1) || item.colSpan > (c?.maxColSpan ?? canvas.columns)
|
|
36169
|
+
|| item.rowSpan < (c?.minRowSpan ?? 1) || item.rowSpan > (c?.maxRowSpan ?? Number.MAX_SAFE_INTEGER))
|
|
36170
|
+
return fail('limits', [key]);
|
|
36171
|
+
}
|
|
36172
|
+
// Locked positions are anchors. Never repair intentional overlaps implicitly.
|
|
36173
|
+
for (let index = 0; index < entries.length; index++) {
|
|
36174
|
+
const [key, item] = entries[index];
|
|
36175
|
+
const collision = entries.slice(index + 1).find(([, other]) => overlaps$2(item, other));
|
|
36176
|
+
if (collision)
|
|
36177
|
+
return fail('geometry', [key, collision[0]]);
|
|
36178
|
+
}
|
|
36179
|
+
const items = { ...canvas.items };
|
|
36180
|
+
const placed = entries.filter(([, item]) => item.constraints?.lockPosition).map(([, item]) => item);
|
|
36181
|
+
const lanes = widths.map((width, index) => ({ width, col: 1 + widths.slice(0, index).reduce((sum, value) => sum + value, 0), row: 1 }));
|
|
36182
|
+
let index = 0;
|
|
36183
|
+
for (const [key, item] of entries) {
|
|
36184
|
+
if (item.constraints?.lockPosition)
|
|
36185
|
+
continue;
|
|
36186
|
+
const lane = lanes[index++ % lanes.length];
|
|
36187
|
+
const colSpan = item.constraints?.lockSize ? item.colSpan : lane.width;
|
|
36188
|
+
if (colSpan > lane.width || colSpan < (item.constraints?.minColSpan ?? 1)
|
|
36189
|
+
|| colSpan > (item.constraints?.maxColSpan ?? canvas.columns))
|
|
36190
|
+
return fail('limits', [key]);
|
|
36191
|
+
const next = { ...item, col: lane.col, row: lane.row, colSpan };
|
|
36192
|
+
let collisions = placed.filter(other => overlaps$2(next, other));
|
|
36193
|
+
while (collisions.length) {
|
|
36194
|
+
next.row = Math.max(...collisions.map(other => other.row + other.rowSpan));
|
|
36195
|
+
if (!Number.isSafeInteger(next.row + next.rowSpan))
|
|
36196
|
+
return fail('geometry', [key]);
|
|
36197
|
+
collisions = placed.filter(other => overlaps$2(next, other));
|
|
36198
|
+
}
|
|
36199
|
+
items[key] = next;
|
|
36200
|
+
placed.push(next);
|
|
36201
|
+
lane.row = next.row + next.rowSpan;
|
|
36202
|
+
}
|
|
36203
|
+
const changedKeys = entries.filter(([key, item]) => geometry.some(field => item[field] !== items[key][field])).map(([key]) => key);
|
|
36204
|
+
const candidate = { ...canvas, items };
|
|
36205
|
+
const issue = validateCanvasArrangement({ ...page, canvas: candidate }, page);
|
|
36206
|
+
if (issue)
|
|
36207
|
+
return fail(issue.reason, issue.blockedKeys);
|
|
36208
|
+
return { canvas: { ...canvas, items }, changedKeys, blockedKeys: [], reason: null };
|
|
36209
|
+
}
|
|
36210
|
+
/** Admit a final arrangement without calculating another placement. The source is
|
|
36211
|
+
* the reviewed transaction baseline; the candidate may include other draft edits.
|
|
36212
|
+
* Device inheritance and locks are checked again at submission, not only preview.
|
|
36213
|
+
*/
|
|
36214
|
+
function validateCanvasArrangement(page, source) {
|
|
36215
|
+
const fail = (reason, ...blockedKeys) => ({ reason, blockedKeys });
|
|
36216
|
+
const canvas = page.canvas;
|
|
36217
|
+
if (!canvas || !Number.isSafeInteger(canvas.columns) || canvas.columns < 1)
|
|
36218
|
+
return fail('geometry');
|
|
36219
|
+
const entries = Object.entries(canvas.items);
|
|
36220
|
+
const keys = new Set(page.widgets.map(widget => widget.key));
|
|
36221
|
+
if (keys.size !== page.widgets.length || entries.length !== keys.size || entries.some(([key]) => !keys.has(key)))
|
|
36222
|
+
return fail('geometry');
|
|
36223
|
+
const withinLimits = (item, columns) => {
|
|
36224
|
+
const c = item.constraints;
|
|
36225
|
+
const minCol = c?.minColSpan ?? 1, maxCol = c?.maxColSpan ?? columns;
|
|
36226
|
+
const minRow = c?.minRowSpan ?? 1, maxRow = c?.maxRowSpan ?? Number.MAX_SAFE_INTEGER;
|
|
36227
|
+
return [minCol, maxCol, minRow, maxRow].every(value => Number.isSafeInteger(value) && value > 0)
|
|
36228
|
+
&& minCol <= columns && minCol <= maxCol && minRow <= maxRow
|
|
36229
|
+
&& item.colSpan >= minCol && item.colSpan <= maxCol
|
|
36230
|
+
&& item.rowSpan >= minRow && item.rowSpan <= maxRow;
|
|
36231
|
+
};
|
|
36232
|
+
for (let index = 0; index < entries.length; index++) {
|
|
36233
|
+
const [key, item] = entries[index];
|
|
36234
|
+
if (!geometry.every(field => Number.isSafeInteger(item[field]) && item[field] > 0)
|
|
36235
|
+
|| !Number.isSafeInteger(item.row + item.rowSpan) || item.col + item.colSpan > canvas.columns + 1)
|
|
36236
|
+
return fail('geometry', key);
|
|
36237
|
+
if (!withinLimits(item, canvas.columns))
|
|
36238
|
+
return fail('limits', key);
|
|
36239
|
+
const before = source.canvas?.items[key];
|
|
36240
|
+
const positionLocked = before?.constraints?.lockPosition || item.constraints?.lockPosition;
|
|
36241
|
+
const sizeLocked = before?.constraints?.lockSize || item.constraints?.lockSize;
|
|
36242
|
+
if (before && ((positionLocked && (before.col !== item.col || before.row !== item.row))
|
|
36243
|
+
|| (sizeLocked && (before.colSpan !== item.colSpan || before.rowSpan !== item.rowSpan))))
|
|
36244
|
+
return fail('limits', key);
|
|
36245
|
+
const collision = entries.slice(index + 1).find(([, other]) => overlaps$2(item, other));
|
|
36246
|
+
if (collision)
|
|
36247
|
+
return fail('geometry', key, collision[0]);
|
|
36248
|
+
}
|
|
36249
|
+
for (const device of ['desktop', 'tablet', 'mobile']) {
|
|
36250
|
+
const variant = page.deviceLayouts?.[device];
|
|
36251
|
+
if (!variant)
|
|
36252
|
+
continue;
|
|
36253
|
+
const overrides = variant.canvas?.items || {};
|
|
36254
|
+
const columns = variant.canvas?.columns ?? canvas.columns;
|
|
36255
|
+
if (!Number.isSafeInteger(columns) || columns < 1)
|
|
36256
|
+
return fail('geometry');
|
|
36257
|
+
for (const [key, item] of entries) {
|
|
36258
|
+
const override = overrides[key];
|
|
36259
|
+
if (override?.hidden || variant.widgetOverrides?.[key]?.hidden)
|
|
36260
|
+
continue;
|
|
36261
|
+
const constraints = { ...item.constraints, ...override?.constraints };
|
|
36262
|
+
// A narrower device grid clips inherited widths in Core's responsive
|
|
36263
|
+
// materialization. Explicit widths still have to honor authored bounds.
|
|
36264
|
+
const effective = { ...item, ...override, constraints,
|
|
36265
|
+
colSpan: columns < canvas.columns ? Math.min(override?.colSpan ?? item.colSpan, columns) : override?.colSpan ?? item.colSpan };
|
|
36266
|
+
if (!withinLimits(effective, columns))
|
|
36267
|
+
return fail('limits', key);
|
|
36268
|
+
const before = source.canvas?.items[key];
|
|
36269
|
+
if (!before)
|
|
36270
|
+
continue;
|
|
36271
|
+
const priorOverride = source.deviceLayouts?.[device]?.canvas?.items?.[key];
|
|
36272
|
+
const priorConstraints = { ...before.constraints, ...priorOverride?.constraints };
|
|
36273
|
+
const inheritedChange = (fields) => fields.some(field => override?.[field] === undefined && item[field] !== before[field]);
|
|
36274
|
+
if (((constraints.lockPosition || priorConstraints.lockPosition) && inheritedChange(['col', 'row']))
|
|
36275
|
+
|| ((constraints.lockSize || priorConstraints.lockSize) && inheritedChange(['colSpan', 'rowSpan'])))
|
|
36276
|
+
return fail('limits', key);
|
|
36277
|
+
if (Object.values(overrides).some(value => geometry.some(field => value[field] !== undefined))
|
|
36278
|
+
&& inheritedChange(geometry))
|
|
36279
|
+
return fail('device-overrides', key);
|
|
36280
|
+
}
|
|
36281
|
+
}
|
|
36282
|
+
return null;
|
|
36283
|
+
}
|
|
35750
36284
|
|
|
35751
36285
|
class WidgetPageCompositionFactory {
|
|
35752
36286
|
create(page) {
|
|
@@ -40099,7 +40633,7 @@ const DYNAMIC_WIDGET_PAGE_I18N_CONFIG = {
|
|
|
40099
40633
|
'size.presetLabelSingle': '{{fraction}} da grade: 1 coluna',
|
|
40100
40634
|
'size.presetHelp': 'Fração da grade · número de colunas',
|
|
40101
40635
|
'size.undo': 'Desfazer último redimensionamento',
|
|
40102
|
-
'size.undoHelp': 'Restaura o widget e os vizinhos alterados no último ajuste desta sessão.',
|
|
40636
|
+
'size.undoHelp': 'Restaura o widget e os vizinhos alterados no último ajuste desta sessão. No painel de configurações, confirme a prévia com Aplicar.',
|
|
40103
40637
|
'size.undoBlocked': 'O layout ou seus limites mudaram depois. O ajuste anterior não pode ser restaurado com segurança.',
|
|
40104
40638
|
'size.undoDone': 'Último redimensionamento desfeito, incluindo os vizinhos afetados.',
|
|
40105
40639
|
'size.width': 'Largura',
|
|
@@ -40261,7 +40795,7 @@ const DYNAMIC_WIDGET_PAGE_I18N_CONFIG = {
|
|
|
40261
40795
|
'size.presetLabelSingle': '{{fraction}} of the grid: 1 column',
|
|
40262
40796
|
'size.presetHelp': 'Grid fraction · number of columns',
|
|
40263
40797
|
'size.undo': 'Undo last resize',
|
|
40264
|
-
'size.undoHelp': 'Restores the widget and neighbors changed by the last resize in this session.',
|
|
40798
|
+
'size.undoHelp': 'Restores the widget and neighbors changed by the last resize in this session. In the settings panel, confirm the preview with Apply.',
|
|
40265
40799
|
'size.undoBlocked': 'The layout or its limits changed afterwards. The previous size cannot be safely restored.',
|
|
40266
40800
|
'size.undoDone': 'Last resize undone, including affected neighbors.',
|
|
40267
40801
|
'size.width': 'Width',
|
|
@@ -43942,7 +44476,7 @@ class DynamicWidgetPageComponent {
|
|
|
43942
44476
|
content: { component: WidgetSettingsEditorComponent, inputs: () => {
|
|
43943
44477
|
const page = this.ensurePageDefinition();
|
|
43944
44478
|
const widget = page.widgets.find(item => item.key === key);
|
|
43945
|
-
const uiShell =
|
|
44479
|
+
const uiShell = this.mergedContext['ui']?.shell || {};
|
|
43946
44480
|
this.closeSizeEditor(false);
|
|
43947
44481
|
this.prepareSizeEditor(key);
|
|
43948
44482
|
this.widgetSettingsKey = key;
|
|
@@ -44481,9 +45015,11 @@ class DynamicWidgetPageComponent {
|
|
|
44481
45015
|
return;
|
|
44482
45016
|
// Layout authoring must not capture runtime inputs such as loaded table rows.
|
|
44483
45017
|
const page = this.clonePageDefinition(this.authoredPageDefinition ?? this.ensurePageDefinition());
|
|
44484
|
-
const uiShell =
|
|
45018
|
+
const uiShell = this.mergedContext['ui']?.shell || {};
|
|
44485
45019
|
const session = this.createSettingsSession();
|
|
44486
45020
|
const owner = session.get(DestroyRef);
|
|
45021
|
+
const appliedValues = new Subject();
|
|
45022
|
+
owner.onDestroy(() => appliedValues.complete());
|
|
44487
45023
|
const ref = this.settingsPanel.open({
|
|
44488
45024
|
owner,
|
|
44489
45025
|
id: 'dynamic-page-settings',
|
|
@@ -44492,6 +45028,7 @@ class DynamicWidgetPageComponent {
|
|
|
44492
45028
|
component: editor,
|
|
44493
45029
|
inputs: {
|
|
44494
45030
|
page,
|
|
45031
|
+
appliedValues$: appliedValues.asObservable(),
|
|
44495
45032
|
layout: page.layout || null,
|
|
44496
45033
|
presets: uiShell?.presets || null,
|
|
44497
45034
|
pagePreset: uiShell?.preset || null,
|
|
@@ -44501,7 +45038,16 @@ class DynamicWidgetPageComponent {
|
|
|
44501
45038
|
},
|
|
44502
45039
|
},
|
|
44503
45040
|
});
|
|
44504
|
-
ref.applied$.pipe(takeUntilDestroyed(owner)).subscribe((result) =>
|
|
45041
|
+
ref.applied$.pipe(takeUntilDestroyed(owner)).subscribe((result) => {
|
|
45042
|
+
if (!result)
|
|
45043
|
+
return;
|
|
45044
|
+
// Runtime bootstrap may enrich the object while applying it. Acknowledge
|
|
45045
|
+
// the authored value submitted by the provider, not that materialization.
|
|
45046
|
+
const accepted = result && typeof result === 'object' && 'widgets' in result
|
|
45047
|
+
? this.clonePageDefinition(result) : result;
|
|
45048
|
+
this.applyPageLayout(result, false);
|
|
45049
|
+
appliedValues.next(accepted);
|
|
45050
|
+
});
|
|
44505
45051
|
ref.saved$.pipe(takeUntilDestroyed(owner)).subscribe((result) => this.applyPageLayout(result, true));
|
|
44506
45052
|
ref.closed$?.pipe(take(1), takeUntilDestroyed(owner)).subscribe(() => this.releaseSettingsSession(session));
|
|
44507
45053
|
}
|
|
@@ -44721,7 +45267,7 @@ class DynamicWidgetPageComponent {
|
|
|
44721
45267
|
? BUILTIN_PAGE_THEME_PRESETS[themePresetId]
|
|
44722
45268
|
: undefined;
|
|
44723
45269
|
const layoutPreset = pageDefinition
|
|
44724
|
-
?
|
|
45270
|
+
? resolveWidgetPageLayoutPreset(pageDefinition)
|
|
44725
45271
|
: undefined;
|
|
44726
45272
|
const merged = {
|
|
44727
45273
|
...baseContext,
|
|
@@ -44955,7 +45501,7 @@ class DynamicWidgetPageComponent {
|
|
|
44955
45501
|
return input;
|
|
44956
45502
|
}
|
|
44957
45503
|
resolvePagePresets(page) {
|
|
44958
|
-
const preset =
|
|
45504
|
+
const preset = resolveWidgetPageLayoutPreset(page);
|
|
44959
45505
|
const themePresetId = page.themePreset || preset?.defaultThemePreset;
|
|
44960
45506
|
const mergedLayout = this.mergeLayout(preset?.defaultLayout, page.layout);
|
|
44961
45507
|
const grouping = (page.grouping && page.grouping.length
|
|
@@ -44968,16 +45514,6 @@ class DynamicWidgetPageComponent {
|
|
|
44968
45514
|
themePreset: themePresetId,
|
|
44969
45515
|
};
|
|
44970
45516
|
}
|
|
44971
|
-
resolveLayoutPresetDefinition(page) {
|
|
44972
|
-
const layoutPresetId = page.layoutPreset?.trim();
|
|
44973
|
-
if (layoutPresetId && BUILTIN_PAGE_LAYOUT_PRESETS[layoutPresetId]) {
|
|
44974
|
-
return BUILTIN_PAGE_LAYOUT_PRESETS[layoutPresetId];
|
|
44975
|
-
}
|
|
44976
|
-
const presetFamily = typeof page.layoutPresetOptions?.['presetFamily'] === 'string'
|
|
44977
|
-
? page.layoutPresetOptions['presetFamily'].trim()
|
|
44978
|
-
: '';
|
|
44979
|
-
return presetFamily ? BUILTIN_PAGE_LAYOUT_PRESETS[presetFamily] : undefined;
|
|
44980
|
-
}
|
|
44981
45517
|
mergeLayout(presetLayout, pageLayout) {
|
|
44982
45518
|
if (!presetLayout && !pageLayout)
|
|
44983
45519
|
return undefined;
|
|
@@ -47063,7 +47599,7 @@ class DynamicWidgetPageComponent {
|
|
|
47063
47599
|
}
|
|
47064
47600
|
groupGridColumn(group) {
|
|
47065
47601
|
if (group.kind === 'rail' && this.pageColumnCount > 1) {
|
|
47066
|
-
return `${this.pageColumnCount} / span 1`;
|
|
47602
|
+
return `${group.side === 'left' ? 1 : this.pageColumnCount} / span 1`;
|
|
47067
47603
|
}
|
|
47068
47604
|
return '1 / -1';
|
|
47069
47605
|
}
|
|
@@ -47247,7 +47783,7 @@ class DynamicWidgetPageComponent {
|
|
|
47247
47783
|
*/
|
|
47248
47784
|
stripDerivedPresetDefaults(page) {
|
|
47249
47785
|
const canonical = this.clonePageDefinition(page);
|
|
47250
|
-
const preset =
|
|
47786
|
+
const preset = resolveWidgetPageLayoutPreset(canonical);
|
|
47251
47787
|
if (!preset)
|
|
47252
47788
|
return canonical;
|
|
47253
47789
|
const layoutDelta = this.jsonObjectDelta(canonical.layout, preset.defaultLayout);
|
|
@@ -52342,4 +52878,4 @@ function provideHookWhitelist(allowed) {
|
|
|
52342
52878
|
* Generated bundle index. Do not edit.
|
|
52343
52879
|
*/
|
|
52344
52880
|
|
|
52345
|
-
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_WIDGET_SHELL_PRESETS, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentAuthoringManifestProjectionError, ComponentKeyService, ComponentMetadataRegistry, ComponentRuntimeProfileService, CompositionRuntimeFacade, CompositionValidatorService, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_SCHEMA_REQUEST_TIMEOUT_MS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, EnterpriseRuntimeContextService, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GOVERNED_COLOR_PALETTE_OPTIONS, GenericCrudService, GlobalActionService, GlobalConfigService, GovernedColorPaletteService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_ACTION_CONTROL_DEFAULTS, PRAXIS_ACTION_CONTROL_VARS, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_COLLECTION_SEARCH_DEFAULTS, PRAXIS_COLLECTION_SEARCH_VARS, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_READY, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RELATED_RESOURCE_OUTLET_AUTHORING_MANIFEST, PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA, PRAXIS_RELATED_RESOURCE_OUTLET_PORTS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_THEME_SURFACE_DEFAULTS, PRAXIS_THEME_SURFACE_VARS, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisRelatedResourceOutletConfigEditorComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, ResourceSurfaceOpenAdapterService, SCHEMA_METADATA_CLIENT_OPTIONS, SCHEMA_VIEWER_CONTEXT, SETTINGS_EDITOR_SECTIONS_HOSTED, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_DRAWER_CONTENT_DATA, SURFACE_DRAWER_REF, SURFACE_NAVIGATION_I18N_CONFIG, SURFACE_NAVIGATION_I18N_NAMESPACE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SettingsSectionTabsComponent, SurfaceBindingRuntimeService, SurfaceNavigationError, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageCompositionFactory, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisActionControlCss, buildPraxisCollectionSearchCss, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, canonicalJsonSha256, canonicalJsonStringify, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, findBuiltinWidgetShellPreset, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionProviderEvidence, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, getWidgetShellActionIdError, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isDomainRuleSnapshotProblemResponse, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionProviderOperational, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisI18nMessageDescriptor, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isSurfaceNavigationError, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, markGlobalActionProviderOperational, matchFieldValidator, materializeFormLayoutFromMetadata, materializeGovernedPaletteColors, materializeGovernedPaletteEntries, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, nestedPortPathIdentity, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeReactiveDeterminations, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeSurfaceOperationContext, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, projectComponentAuthoringManifest, projectGroupedCommandPartialRows, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRelatedResourceOutletMetadata, providePraxisRichTextBlockMetadata, providePraxisTelemetry, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveBuiltinWidgetShellAppearance, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveGroupedCommandPartialRowSpans, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolvePraxisI18nDocument, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsConfigDocuments, supportsImplicitValuePresentation, syncWithServerMetadata, textSha256, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateSurfaceNavigationRejected, translateSurfaceOpenFailed, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };
|
|
52881
|
+
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, BUILTIN_WIDGET_SHELL_PRESETS, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentAuthoringManifestProjectionError, ComponentKeyService, ComponentMetadataRegistry, ComponentRuntimeProfileService, CompositionRuntimeFacade, CompositionValidatorService, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_SCHEMA_REQUEST_TIMEOUT_MS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, EnterpriseRuntimeContextService, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GOVERNED_COLOR_PALETTE_OPTIONS, GenericCrudService, GlobalActionService, GlobalConfigService, GovernedColorPaletteService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_ACTION_CONTROL_DEFAULTS, PRAXIS_ACTION_CONTROL_VARS, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_COLLECTION_SEARCH_DEFAULTS, PRAXIS_COLLECTION_SEARCH_VARS, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_READY, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RELATED_RESOURCE_OUTLET_AUTHORING_MANIFEST, PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA, PRAXIS_RELATED_RESOURCE_OUTLET_PORTS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_THEME_SURFACE_DEFAULTS, PRAXIS_THEME_SURFACE_VARS, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisRelatedResourceOutletConfigEditorComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, ResourceSurfaceOpenAdapterService, SCHEMA_METADATA_CLIENT_OPTIONS, SCHEMA_VIEWER_CONTEXT, SETTINGS_EDITOR_SECTIONS_HOSTED, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_DRAWER_CONTENT_DATA, SURFACE_DRAWER_REF, SURFACE_NAVIGATION_I18N_CONFIG, SURFACE_NAVIGATION_I18N_NAMESPACE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SettingsSectionTabsComponent, SurfaceBindingRuntimeService, SurfaceNavigationError, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageCompositionFactory, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisActionControlCss, buildPraxisCollectionSearchCss, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, canonicalJsonSha256, canonicalJsonStringify, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, findBuiltinWidgetShellPreset, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionProviderEvidence, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, getWidgetShellActionIdError, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isDomainRuleSnapshotProblemResponse, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionProviderOperational, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisI18nMessageDescriptor, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isSurfaceNavigationError, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, markGlobalActionProviderOperational, matchFieldValidator, materializeFormLayoutFromMetadata, materializeGovernedPaletteColors, materializeGovernedPaletteEntries, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, nestedPortPathIdentity, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeReactiveDeterminations, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeSurfaceOperationContext, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, prepareCanvasArrangement, projectComponentAuthoringManifest, projectGroupedCommandPartialRows, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRelatedResourceOutletMetadata, providePraxisRichTextBlockMetadata, providePraxisTelemetry, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveBuiltinWidgetShellAppearance, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveGroupedCommandPartialRowSpans, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolvePraxisI18nDocument, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, resolveWidgetPageLayoutPreset, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsConfigDocuments, supportsImplicitValuePresentation, syncWithServerMetadata, textSha256, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateSurfaceNavigationRejected, translateSurfaceOpenFailed, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateCanvasArrangement, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };
|