@praxisui/core 9.0.0-beta.22 → 9.0.0-beta.25
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/ai/component-registry.json +2 -2
- package/fesm2022/praxisui-core.mjs +672 -199
- package/package.json +1 -1
- package/types/praxisui-core.d.ts +85 -19
|
@@ -12666,18 +12666,24 @@ class SurfaceOpenMaterializerService {
|
|
|
12666
12666
|
if (data && typeof data === 'object' && !Array.isArray(data)) {
|
|
12667
12667
|
const objectData = data;
|
|
12668
12668
|
if (payload.widget.id === 'praxis-dynamic-form') {
|
|
12669
|
-
const schemaFields = await this.resolveSchemaFields(payload, discoveryOptions);
|
|
12670
12669
|
return {
|
|
12671
12670
|
...payload,
|
|
12672
12671
|
widget: {
|
|
12673
12672
|
...payload.widget,
|
|
12674
12673
|
inputs: {
|
|
12675
12674
|
...this.projectMaterializedFormInputs(payload.widget.inputs || {}),
|
|
12676
|
-
configPersistenceStrategy: 'input-first',
|
|
12677
12675
|
mode: payload.widget.inputs?.['mode'] || 'view',
|
|
12678
12676
|
initialValue: objectData,
|
|
12679
12677
|
resourceId,
|
|
12680
|
-
|
|
12678
|
+
layoutPolicy: payload.widget.inputs?.['layoutPolicy'] || {
|
|
12679
|
+
source: 'schema',
|
|
12680
|
+
intent: 'detail',
|
|
12681
|
+
preset: 'compactPresentation',
|
|
12682
|
+
lifecycle: 'live',
|
|
12683
|
+
persistence: 'transient',
|
|
12684
|
+
schemaOperation: 'detail',
|
|
12685
|
+
schemaType: 'response',
|
|
12686
|
+
},
|
|
12681
12687
|
},
|
|
12682
12688
|
},
|
|
12683
12689
|
context: this.mergeMaterializationContext(payload, {
|
|
@@ -12715,11 +12721,14 @@ class SurfaceOpenMaterializerService {
|
|
|
12715
12721
|
'resourceId',
|
|
12716
12722
|
'apiEndpointKey',
|
|
12717
12723
|
'apiUrlEntry',
|
|
12724
|
+
'schemaUrl',
|
|
12725
|
+
'readUrl',
|
|
12718
12726
|
'submitUrl',
|
|
12719
12727
|
'submitMethod',
|
|
12720
12728
|
'responseSchemaUrl',
|
|
12721
12729
|
'customEndpoints',
|
|
12722
12730
|
'configPersistenceStrategy',
|
|
12731
|
+
'layoutPolicy',
|
|
12723
12732
|
'mode',
|
|
12724
12733
|
'actions',
|
|
12725
12734
|
'enableCustomization',
|
|
@@ -12727,6 +12736,7 @@ class SurfaceOpenMaterializerService {
|
|
|
12727
12736
|
'readonlyModeGlobal',
|
|
12728
12737
|
'disabledModeGlobal',
|
|
12729
12738
|
'presentationModeGlobal',
|
|
12739
|
+
'fieldIconPolicy',
|
|
12730
12740
|
'visibleGlobal',
|
|
12731
12741
|
'layout',
|
|
12732
12742
|
'backConfig',
|
|
@@ -12740,186 +12750,6 @@ class SurfaceOpenMaterializerService {
|
|
|
12740
12750
|
]);
|
|
12741
12751
|
return Object.fromEntries(Object.entries(inputs).filter(([key]) => supported.has(key)));
|
|
12742
12752
|
}
|
|
12743
|
-
buildLocalFormConfig(data, schemaFields = []) {
|
|
12744
|
-
const fields = this.buildMaterializedFormFields(data, schemaFields);
|
|
12745
|
-
const sections = this.buildMaterializedFormSections(fields);
|
|
12746
|
-
return {
|
|
12747
|
-
sections,
|
|
12748
|
-
fieldMetadata: fields,
|
|
12749
|
-
};
|
|
12750
|
-
}
|
|
12751
|
-
buildMaterializedFormFields(data, schemaFields) {
|
|
12752
|
-
const schemaByName = new Map(schemaFields
|
|
12753
|
-
.filter((field) => !!field?.name)
|
|
12754
|
-
.map((field) => [field.name, field]));
|
|
12755
|
-
const orderedNames = schemaFields.length
|
|
12756
|
-
? [
|
|
12757
|
-
...schemaFields
|
|
12758
|
-
.filter((field) => field?.name && Object.prototype.hasOwnProperty.call(data, field.name))
|
|
12759
|
-
.sort((left, right) => (left.order ?? Number.MAX_SAFE_INTEGER) - (right.order ?? Number.MAX_SAFE_INTEGER))
|
|
12760
|
-
.map((field) => field.name),
|
|
12761
|
-
...Object.keys(data).filter((key) => !schemaByName.has(key)),
|
|
12762
|
-
]
|
|
12763
|
-
: Object.keys(data);
|
|
12764
|
-
return orderedNames
|
|
12765
|
-
.filter((key, index, keys) => keys.indexOf(key) === index)
|
|
12766
|
-
.filter((key) => this.shouldRenderMaterializedFormField(key, data[key], schemaByName.get(key), data))
|
|
12767
|
-
.map((key) => {
|
|
12768
|
-
const field = schemaByName.get(key);
|
|
12769
|
-
if (field) {
|
|
12770
|
-
return {
|
|
12771
|
-
...mapFieldDefinitionToMetadata({
|
|
12772
|
-
...field,
|
|
12773
|
-
hidden: false,
|
|
12774
|
-
formHidden: false,
|
|
12775
|
-
readOnly: true,
|
|
12776
|
-
}),
|
|
12777
|
-
readOnly: true,
|
|
12778
|
-
};
|
|
12779
|
-
}
|
|
12780
|
-
return {
|
|
12781
|
-
name: key,
|
|
12782
|
-
label: this.humanizeFieldName(key),
|
|
12783
|
-
controlType: this.inferFormControlType(data[key]),
|
|
12784
|
-
readOnly: true,
|
|
12785
|
-
};
|
|
12786
|
-
});
|
|
12787
|
-
}
|
|
12788
|
-
buildMaterializedFormSections(fields) {
|
|
12789
|
-
const groups = new Map();
|
|
12790
|
-
for (const field of fields) {
|
|
12791
|
-
const group = String(field.group || '').trim() || 'Detalhes';
|
|
12792
|
-
groups.set(group, [...(groups.get(group) || []), field]);
|
|
12793
|
-
}
|
|
12794
|
-
return Array.from(groups.entries()).map(([group, groupFields], sectionIndex) => {
|
|
12795
|
-
const fieldNames = groupFields.map((field) => field.name);
|
|
12796
|
-
const rows = this.chunk(fieldNames, 2).map((names, rowIndex) => ({
|
|
12797
|
-
id: `row-${sectionIndex + 1}-${rowIndex + 1}`,
|
|
12798
|
-
columns: names.map((name) => ({
|
|
12799
|
-
id: `col-${name}`,
|
|
12800
|
-
fields: [name],
|
|
12801
|
-
})),
|
|
12802
|
-
}));
|
|
12803
|
-
return {
|
|
12804
|
-
id: this.stableSectionId(group, sectionIndex),
|
|
12805
|
-
title: group,
|
|
12806
|
-
rows,
|
|
12807
|
-
};
|
|
12808
|
-
});
|
|
12809
|
-
}
|
|
12810
|
-
shouldRenderMaterializedFormField(key, value, field, data) {
|
|
12811
|
-
if (!key || key.startsWith('_'))
|
|
12812
|
-
return false;
|
|
12813
|
-
if (field?.hidden === true)
|
|
12814
|
-
return false;
|
|
12815
|
-
if (this.isTechnicalRelationIdField(key, field, data))
|
|
12816
|
-
return false;
|
|
12817
|
-
if (this.isDuplicateMediaUrlField(key, value, field, data))
|
|
12818
|
-
return false;
|
|
12819
|
-
if (field?.formHidden === true && !this.isResolvedDisplayCompanionField(key, data)) {
|
|
12820
|
-
return false;
|
|
12821
|
-
}
|
|
12822
|
-
if (value == null)
|
|
12823
|
-
return true;
|
|
12824
|
-
return typeof value !== 'object' || value instanceof Date;
|
|
12825
|
-
}
|
|
12826
|
-
isTechnicalRelationIdField(key, field, data) {
|
|
12827
|
-
if (key === 'id' || !/Id$/.test(key))
|
|
12828
|
-
return false;
|
|
12829
|
-
const base = key.slice(0, -2);
|
|
12830
|
-
const hasDisplayCompanion = this.hasDisplayCompanion(base, data);
|
|
12831
|
-
if (!hasDisplayCompanion)
|
|
12832
|
-
return false;
|
|
12833
|
-
const controlType = String(field?.controlType || '').toLowerCase();
|
|
12834
|
-
return Boolean(field?.endpoint
|
|
12835
|
-
|| field?.resourcePath
|
|
12836
|
-
|| field?.optionSource
|
|
12837
|
-
|| controlType.includes('select')
|
|
12838
|
-
|| field?.tableHidden === true);
|
|
12839
|
-
}
|
|
12840
|
-
isResolvedDisplayCompanionField(key, data) {
|
|
12841
|
-
const base = this.resolveDisplayCompanionBase(key);
|
|
12842
|
-
return !!base && Object.prototype.hasOwnProperty.call(data, `${base}Id`);
|
|
12843
|
-
}
|
|
12844
|
-
resolveDisplayCompanionBase(key) {
|
|
12845
|
-
const suffixes = ['Nome', 'Name', 'Label', 'Descricao', 'Description', 'Title', 'Text'];
|
|
12846
|
-
const suffix = suffixes.find((candidate) => key.endsWith(candidate));
|
|
12847
|
-
return suffix ? key.slice(0, -suffix.length) : null;
|
|
12848
|
-
}
|
|
12849
|
-
hasDisplayCompanion(base, data) {
|
|
12850
|
-
const suffixes = ['Nome', 'Name', 'Label', 'Descricao', 'Description', 'Title', 'Text'];
|
|
12851
|
-
return suffixes.some((suffix) => {
|
|
12852
|
-
const value = data[`${base}${suffix}`];
|
|
12853
|
-
return value != null && String(value).trim().length > 0;
|
|
12854
|
-
});
|
|
12855
|
-
}
|
|
12856
|
-
isDuplicateMediaUrlField(key, value, field, data) {
|
|
12857
|
-
if (typeof value !== 'string' || !this.looksLikeMediaUrlField(key, field)) {
|
|
12858
|
-
return false;
|
|
12859
|
-
}
|
|
12860
|
-
return Object.entries(data).some(([candidateKey, candidateValue]) => {
|
|
12861
|
-
if (candidateKey === key || candidateValue !== value) {
|
|
12862
|
-
return false;
|
|
12863
|
-
}
|
|
12864
|
-
return this.looksLikeAvatarFieldName(candidateKey);
|
|
12865
|
-
});
|
|
12866
|
-
}
|
|
12867
|
-
looksLikeMediaUrlField(key, field) {
|
|
12868
|
-
const type = String(field?.type || '').toLowerCase();
|
|
12869
|
-
const controlType = String(field?.controlType || '').toLowerCase();
|
|
12870
|
-
const normalized = key.toLowerCase();
|
|
12871
|
-
return Boolean(type === 'url'
|
|
12872
|
-
|| controlType.includes('url')
|
|
12873
|
-
|| normalized.includes('url')
|
|
12874
|
-
|| normalized.includes('foto')
|
|
12875
|
-
|| normalized.includes('photo')
|
|
12876
|
-
|| normalized.includes('image')
|
|
12877
|
-
|| normalized.includes('imagem'));
|
|
12878
|
-
}
|
|
12879
|
-
looksLikeAvatarFieldName(key) {
|
|
12880
|
-
const normalized = key.toLowerCase();
|
|
12881
|
-
return normalized.includes('avatar') || normalized.includes('portrait');
|
|
12882
|
-
}
|
|
12883
|
-
inferFormControlType(value) {
|
|
12884
|
-
if (typeof value === 'boolean')
|
|
12885
|
-
return 'checkbox';
|
|
12886
|
-
if (typeof value === 'number')
|
|
12887
|
-
return 'numericTextBox';
|
|
12888
|
-
if (typeof value === 'string') {
|
|
12889
|
-
if (/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
12890
|
-
return 'dateInput';
|
|
12891
|
-
if (/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(value))
|
|
12892
|
-
return 'email';
|
|
12893
|
-
}
|
|
12894
|
-
return 'input';
|
|
12895
|
-
}
|
|
12896
|
-
humanizeFieldName(key) {
|
|
12897
|
-
return key
|
|
12898
|
-
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
12899
|
-
.replace(/[_-]+/g, ' ')
|
|
12900
|
-
.replace(/\s+/g, ' ')
|
|
12901
|
-
.trim()
|
|
12902
|
-
.replace(/^./, (char) => char.toUpperCase());
|
|
12903
|
-
}
|
|
12904
|
-
stableSectionId(group, index) {
|
|
12905
|
-
if (group === 'Detalhes') {
|
|
12906
|
-
return 'details';
|
|
12907
|
-
}
|
|
12908
|
-
const normalized = group
|
|
12909
|
-
.normalize('NFD')
|
|
12910
|
-
.replace(/[\u0300-\u036f]/g, '')
|
|
12911
|
-
.toLowerCase()
|
|
12912
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
12913
|
-
.replace(/^-+|-+$/g, '');
|
|
12914
|
-
return normalized || `details-${index + 1}`;
|
|
12915
|
-
}
|
|
12916
|
-
chunk(items, size) {
|
|
12917
|
-
const result = [];
|
|
12918
|
-
for (let index = 0; index < items.length; index += size) {
|
|
12919
|
-
result.push(items.slice(index, index + size));
|
|
12920
|
-
}
|
|
12921
|
-
return result;
|
|
12922
|
-
}
|
|
12923
12753
|
shouldMaterializeItemReadProjection(payload) {
|
|
12924
12754
|
const surface = payload.context?.['surface'];
|
|
12925
12755
|
const kind = String(surface?.['kind'] || '').toUpperCase();
|
|
@@ -13002,6 +12832,8 @@ class SurfaceOpenMaterializerService {
|
|
|
13002
12832
|
bindingOrder: [
|
|
13003
12833
|
'tableId',
|
|
13004
12834
|
'componentInstanceId',
|
|
12835
|
+
'configPersistenceStrategy',
|
|
12836
|
+
'resourcePath',
|
|
13005
12837
|
'title',
|
|
13006
12838
|
'subtitle',
|
|
13007
12839
|
'icon',
|
|
@@ -13009,11 +12841,17 @@ class SurfaceOpenMaterializerService {
|
|
|
13009
12841
|
'config',
|
|
13010
12842
|
'enableCustomization',
|
|
13011
12843
|
],
|
|
12844
|
+
outputs: {
|
|
12845
|
+
rowClick: 'emit',
|
|
12846
|
+
selectionChange: 'emit',
|
|
12847
|
+
widgetEvent: 'emit',
|
|
12848
|
+
},
|
|
13012
12849
|
inputs: {
|
|
13013
12850
|
...tableInputOverrides,
|
|
13014
12851
|
resourcePath: '',
|
|
13015
12852
|
tableId: String(previousInputs['tableId'] || this.stableSurfaceId(payload)),
|
|
13016
12853
|
componentInstanceId: `${this.stableSurfaceId(payload)}.${resourceId}`,
|
|
12854
|
+
configPersistenceStrategy: previousInputs['configPersistenceStrategy'] ?? 'volatile',
|
|
13017
12855
|
title: payload.title,
|
|
13018
12856
|
subtitle: payload.subtitle,
|
|
13019
12857
|
icon: payload.icon,
|
|
@@ -13065,6 +12903,11 @@ class SurfaceOpenMaterializerService {
|
|
|
13065
12903
|
behavior: {
|
|
13066
12904
|
localDataMode: { enabled: true },
|
|
13067
12905
|
pagination: { enabled: true, pageSize: 10 },
|
|
12906
|
+
selection: {
|
|
12907
|
+
enabled: true,
|
|
12908
|
+
type: 'single',
|
|
12909
|
+
mode: 'both',
|
|
12910
|
+
},
|
|
13068
12911
|
},
|
|
13069
12912
|
};
|
|
13070
12913
|
}
|
|
@@ -16247,10 +16090,16 @@ const VISUALIZATION_TONES = new Set([
|
|
|
16247
16090
|
'critical',
|
|
16248
16091
|
]);
|
|
16249
16092
|
const TABLE_SAFE_KINDS = new Set([
|
|
16093
|
+
'line',
|
|
16094
|
+
'area',
|
|
16095
|
+
'column',
|
|
16250
16096
|
'comparison',
|
|
16251
16097
|
'stackedBar',
|
|
16098
|
+
'radial',
|
|
16099
|
+
'harveyBall',
|
|
16252
16100
|
'bullet',
|
|
16253
16101
|
'delta',
|
|
16102
|
+
'processFlow',
|
|
16254
16103
|
]);
|
|
16255
16104
|
function normalizePraxisPresentationVisualization(value) {
|
|
16256
16105
|
if (!value || typeof value !== 'object') {
|
|
@@ -16265,6 +16114,7 @@ function normalizePraxisPresentationVisualization(value) {
|
|
|
16265
16114
|
const size = normalizeEnum$1(value.size, VISUALIZATION_SIZES);
|
|
16266
16115
|
const tone = normalizeEnum$1(value.tone, VISUALIZATION_TONES);
|
|
16267
16116
|
const ariaLabel = normalizeText$1(value.ariaLabel);
|
|
16117
|
+
const valueSuffix = normalizeText$1(value.valueSuffix);
|
|
16268
16118
|
return {
|
|
16269
16119
|
kind,
|
|
16270
16120
|
fallbackText,
|
|
@@ -16272,8 +16122,10 @@ function normalizePraxisPresentationVisualization(value) {
|
|
|
16272
16122
|
...(size ? { size } : {}),
|
|
16273
16123
|
...(tone ? { tone } : {}),
|
|
16274
16124
|
...(ariaLabel ? { ariaLabel } : {}),
|
|
16125
|
+
...(valueSuffix ? { valueSuffix } : {}),
|
|
16275
16126
|
...(Object.prototype.hasOwnProperty.call(value, 'value') ? { value: value.value } : {}),
|
|
16276
16127
|
...(normalizeExpression(value.valueExpr, 'valueExpr') ?? {}),
|
|
16128
|
+
...(normalizeExpression(value.valueSuffixExpr, 'valueSuffixExpr') ?? {}),
|
|
16277
16129
|
...(normalizeNumber(value.total, 'total') ?? {}),
|
|
16278
16130
|
...(normalizeExpression(value.totalExpr, 'totalExpr') ?? {}),
|
|
16279
16131
|
...(normalizeNumber(value.target, 'target') ?? {}),
|
|
@@ -16311,6 +16163,18 @@ function renderPraxisPresentationVisualizationHtml(value, options = {}) {
|
|
|
16311
16163
|
return renderBulletVisualizationHtml(visualization, options);
|
|
16312
16164
|
case 'delta':
|
|
16313
16165
|
return renderDeltaVisualizationHtml(visualization, options);
|
|
16166
|
+
case 'radial':
|
|
16167
|
+
return renderRadialVisualizationHtml(visualization, options);
|
|
16168
|
+
case 'harveyBall':
|
|
16169
|
+
return renderHarveyBallVisualizationHtml(visualization, options);
|
|
16170
|
+
case 'line':
|
|
16171
|
+
return renderLineVisualizationHtml(visualization, options);
|
|
16172
|
+
case 'area':
|
|
16173
|
+
return renderAreaVisualizationHtml(visualization, options);
|
|
16174
|
+
case 'column':
|
|
16175
|
+
return renderColumnVisualizationHtml(visualization, options);
|
|
16176
|
+
case 'processFlow':
|
|
16177
|
+
return renderProcessFlowVisualizationHtml(visualization, options);
|
|
16314
16178
|
default:
|
|
16315
16179
|
return `<span class="pfx-micro-viz__fallback">${escapeHtml$1(visualization.fallbackText)}</span>`;
|
|
16316
16180
|
}
|
|
@@ -16357,26 +16221,61 @@ function renderStackedBarVisualizationHtml(visualization, options) {
|
|
|
16357
16221
|
<span class="pfx-micro-viz__meta">${meta}</span>
|
|
16358
16222
|
</span>`;
|
|
16359
16223
|
}
|
|
16224
|
+
function resolveBulletMax(visualization) {
|
|
16225
|
+
const thresholds = visualization.thresholds ?? [];
|
|
16226
|
+
const values = [
|
|
16227
|
+
toFiniteNumber(visualization.value) ?? 0,
|
|
16228
|
+
visualization.target ?? 0,
|
|
16229
|
+
visualization.total ?? 0,
|
|
16230
|
+
...thresholds.map(t => t.value)
|
|
16231
|
+
].filter(v => Number.isFinite(v) && v > 0);
|
|
16232
|
+
return Math.max(...values, 100);
|
|
16233
|
+
}
|
|
16360
16234
|
function renderBulletVisualizationHtml(visualization, options) {
|
|
16361
16235
|
const currentValue = toFiniteNumber(visualization.value) ?? 0;
|
|
16362
|
-
const
|
|
16236
|
+
const max = resolveBulletMax(visualization);
|
|
16363
16237
|
const target = toFiniteNumber(visualization.target);
|
|
16364
|
-
const targetLeft = target === undefined ? null : percent(target,
|
|
16238
|
+
const targetLeft = target === undefined ? null : percent(target, max);
|
|
16239
|
+
const isTable = visualization.surface === 'table-cell';
|
|
16240
|
+
// thresholds
|
|
16241
|
+
const thresholds = visualization.thresholds ?? [];
|
|
16242
|
+
let previous = 0;
|
|
16243
|
+
const bands = thresholds.map(t => {
|
|
16244
|
+
const current = Math.max(t.value, previous);
|
|
16245
|
+
const left = max > 0 ? percent(previous, max) : '0';
|
|
16246
|
+
const width = max > 0 ? percent(current - previous, max) : '0';
|
|
16247
|
+
previous = current;
|
|
16248
|
+
return { left, width, tone: t.tone ?? 'info' };
|
|
16249
|
+
}).filter(b => parseFloat(b.width) > 0);
|
|
16250
|
+
const bandsHtml = bands.map(b => `<span class="pfx-micro-bullet__range" data-tone="${escapeHtml$1(b.tone)}" style="left: ${b.left}%; width: ${b.width}%;"></span>`).join('');
|
|
16251
|
+
const topHtml = isTable ? '' : `
|
|
16252
|
+
<div class="pfx-micro-bullet__top">
|
|
16253
|
+
<span class="pfx-micro-bullet__label">${escapeHtml$1(visualization.fallbackText)}</span>
|
|
16254
|
+
<span class="pfx-micro-bullet__value">
|
|
16255
|
+
${escapeHtml$1(formatMicroNumber(currentValue, options.locale))}
|
|
16256
|
+
${target === undefined ? '' : `<span class="pfx-micro-bullet__target-val">/ Target: ${escapeHtml$1(formatMicroNumber(target, options.locale))}</span>`}
|
|
16257
|
+
</span>
|
|
16258
|
+
</div>`;
|
|
16259
|
+
const bottomHtml = isTable ? '' : `
|
|
16260
|
+
<div class="pfx-micro-bullet__bottom">
|
|
16261
|
+
<span>${escapeHtml$1(formatMicroNumber(visualization.baseline ?? 0, options.locale))}</span>
|
|
16262
|
+
<span>${escapeHtml$1(formatMicroNumber(max, options.locale))}</span>
|
|
16263
|
+
</div>`;
|
|
16365
16264
|
return `
|
|
16366
16265
|
<span class="pfx-micro-viz pfx-micro-viz__bullet" data-tone="${escapeHtml$1(visualization.tone ?? 'info')}" role="img" aria-label="${escapeHtml$1(visualization.ariaLabel ?? visualization.fallbackText)}">
|
|
16367
|
-
|
|
16368
|
-
|
|
16369
|
-
${
|
|
16370
|
-
|
|
16371
|
-
|
|
16372
|
-
<span>${escapeHtml$1(formatMicroNumber(currentValue, options.locale))}</span>
|
|
16373
|
-
${target === undefined ? '' : `<span>${escapeHtml$1(formatMicroNumber(target, options.locale))}</span>`}
|
|
16266
|
+
${topHtml}
|
|
16267
|
+
<span class="pfx-micro-bullet__track">
|
|
16268
|
+
${bandsHtml}
|
|
16269
|
+
<span class="pfx-micro-bullet__actual" data-tone="${escapeHtml$1(visualization.tone ?? 'info')}" style="width: ${percent(currentValue, max)}%;"></span>
|
|
16270
|
+
${targetLeft === null ? '' : `<span class="pfx-micro-bullet__target" style="left: ${targetLeft}%;"></span>`}
|
|
16374
16271
|
</span>
|
|
16272
|
+
${bottomHtml}
|
|
16375
16273
|
</span>`;
|
|
16376
16274
|
}
|
|
16377
16275
|
function renderDeltaVisualizationHtml(visualization, options) {
|
|
16378
16276
|
const value = toFiniteNumber(visualization.value);
|
|
16379
|
-
const
|
|
16277
|
+
const direction = value === undefined ? 'neutral' : value < 0 ? 'down' : value > 0 ? 'up' : 'neutral';
|
|
16278
|
+
const symbol = direction === 'up' ? '▲' : direction === 'down' ? '▼' : '→';
|
|
16380
16279
|
const tone = visualization.tone ??
|
|
16381
16280
|
(value === undefined
|
|
16382
16281
|
? 'neutral'
|
|
@@ -16385,12 +16284,19 @@ function renderDeltaVisualizationHtml(visualization, options) {
|
|
|
16385
16284
|
: value > 0
|
|
16386
16285
|
? 'success'
|
|
16387
16286
|
: 'neutral');
|
|
16287
|
+
const valueSuffix = visualization.valueSuffix ?? '';
|
|
16388
16288
|
const text = value === undefined
|
|
16389
16289
|
? visualization.fallbackText
|
|
16390
|
-
: formatMicroNumber(value, options.locale)
|
|
16290
|
+
: `${formatMicroNumber(Math.abs(value), options.locale)}${valueSuffix}`;
|
|
16291
|
+
const directionLabel = direction === 'up'
|
|
16292
|
+
? 'up'
|
|
16293
|
+
: direction === 'down'
|
|
16294
|
+
? 'down'
|
|
16295
|
+
: 'stable';
|
|
16296
|
+
const aria = visualization.ariaLabel ?? `${visualization.fallbackText}: ${directionLabel} ${text}`;
|
|
16391
16297
|
return `
|
|
16392
|
-
<span class="pfx-micro-viz pfx-micro-viz__delta" data-tone="${escapeHtml$1(tone)}" role="img" aria-label="${escapeHtml$1(
|
|
16393
|
-
<span class="pfx-micro-viz__delta-symbol">${symbol}</span>
|
|
16298
|
+
<span class="pfx-micro-viz pfx-micro-viz__delta" data-tone="${escapeHtml$1(tone)}" data-direction="${escapeHtml$1(direction)}" role="img" aria-label="${escapeHtml$1(aria)}">
|
|
16299
|
+
<span class="pfx-micro-viz__delta-symbol" aria-hidden="true">${symbol}</span>
|
|
16394
16300
|
<span>${escapeHtml$1(text)}</span>
|
|
16395
16301
|
</span>`;
|
|
16396
16302
|
}
|
|
@@ -16505,6 +16411,268 @@ function normalizeText$1(value) {
|
|
|
16505
16411
|
const trimmed = value.trim();
|
|
16506
16412
|
return trimmed.length ? trimmed : undefined;
|
|
16507
16413
|
}
|
|
16414
|
+
function renderRadialVisualizationHtml(visualization, options) {
|
|
16415
|
+
const value = toFiniteNumber(visualization.value) ?? 0;
|
|
16416
|
+
const total = visualization.total && visualization.total > 0 ? visualization.total : 100;
|
|
16417
|
+
const pct = Math.max(0, Math.min(100, (value / total) * 100));
|
|
16418
|
+
const tone = visualization.tone ?? 'info';
|
|
16419
|
+
const dashArray = `${pct.toFixed(1)}, 100`;
|
|
16420
|
+
const pctText = `${Math.round(pct)}%`;
|
|
16421
|
+
const aria = visualization.ariaLabel ?? `${visualization.fallbackText} (${pctText})`;
|
|
16422
|
+
const isTable = visualization.surface === 'table-cell';
|
|
16423
|
+
const svgText = isTable
|
|
16424
|
+
? ''
|
|
16425
|
+
: `<text x="18" y="21" class="pfx-micro-radial-svg__text">${escapeHtml$1(pctText)}</text>`;
|
|
16426
|
+
const externalText = isTable
|
|
16427
|
+
? `<span class="pfx-micro-radial-value">${escapeHtml$1(pctText)}</span>`
|
|
16428
|
+
: '';
|
|
16429
|
+
return `
|
|
16430
|
+
<span class="pfx-micro-viz pfx-micro-viz__radial" data-tone="${escapeHtml$1(tone)}" role="img" aria-label="${escapeHtml$1(aria)}">
|
|
16431
|
+
<svg class="pfx-micro-radial-svg" viewBox="0 0 36 36">
|
|
16432
|
+
<circle class="pfx-micro-radial-svg__track" cx="18" cy="18" r="15.9155" />
|
|
16433
|
+
<circle class="pfx-micro-radial-svg__bar" cx="18" cy="18" r="15.9155" stroke-dasharray="${dashArray}" transform="rotate(-90 18 18)" />
|
|
16434
|
+
${svgText}
|
|
16435
|
+
</svg>
|
|
16436
|
+
${externalText}
|
|
16437
|
+
</span>`;
|
|
16438
|
+
}
|
|
16439
|
+
function renderHarveyBallVisualizationHtml(visualization, options) {
|
|
16440
|
+
const value = toFiniteNumber(visualization.value) ?? 0;
|
|
16441
|
+
const total = visualization.total && visualization.total > 0 ? visualization.total : 100;
|
|
16442
|
+
const pct = Math.max(0, Math.min(100, (value / total) * 100));
|
|
16443
|
+
const tone = visualization.tone ?? 'info';
|
|
16444
|
+
const strokeLength = pct * 0.50265;
|
|
16445
|
+
const dashArray = `${strokeLength.toFixed(3)} 50.265`;
|
|
16446
|
+
const aria = visualization.ariaLabel ?? `${visualization.fallbackText} (${Math.round(pct)}%)`;
|
|
16447
|
+
return `
|
|
16448
|
+
<span class="pfx-micro-viz pfx-micro-viz__harvey" data-tone="${escapeHtml$1(tone)}" role="img" aria-label="${escapeHtml$1(aria)}">
|
|
16449
|
+
<svg class="pfx-micro-harvey-svg" viewBox="0 0 36 36">
|
|
16450
|
+
<circle class="pfx-micro-harvey-svg__track" cx="18" cy="18" r="16" />
|
|
16451
|
+
<circle class="pfx-micro-harvey-svg__bar" cx="18" cy="18" r="8" stroke-dasharray="${dashArray}" transform="rotate(-90 18 18)" />
|
|
16452
|
+
</svg>
|
|
16453
|
+
<span class="pfx-micro-harvey-fraction">
|
|
16454
|
+
<strong>${escapeHtml$1(formatMicroNumber(value, options.locale))}</strong>
|
|
16455
|
+
<span class="pfx-separator">/</span>
|
|
16456
|
+
<span class="pfx-total">${escapeHtml$1(formatMicroNumber(total, options.locale))}</span>
|
|
16457
|
+
</span>
|
|
16458
|
+
</span>`;
|
|
16459
|
+
}
|
|
16460
|
+
function getPointsCoordinates(points, width, height, padding) {
|
|
16461
|
+
if (points.length < 2)
|
|
16462
|
+
return [];
|
|
16463
|
+
const values = points.map(p => p.value);
|
|
16464
|
+
const minVal = Math.min(...values);
|
|
16465
|
+
const maxVal = Math.max(...values);
|
|
16466
|
+
const valRange = maxVal - minVal === 0 ? 1 : maxVal - minVal;
|
|
16467
|
+
return points.map((p, index) => {
|
|
16468
|
+
const x = padding + (index / (points.length - 1)) * (width - 2 * padding);
|
|
16469
|
+
const y = height - padding - ((p.value - minVal) / valRange) * (height - 2 * padding);
|
|
16470
|
+
return { x, y };
|
|
16471
|
+
});
|
|
16472
|
+
}
|
|
16473
|
+
function renderLineVisualizationHtml(visualization, options) {
|
|
16474
|
+
const points = visualization.points ?? [];
|
|
16475
|
+
const tone = visualization.tone ?? 'info';
|
|
16476
|
+
if (points.length < 2) {
|
|
16477
|
+
return renderFallbackVisualizationHtml(visualization, tone);
|
|
16478
|
+
}
|
|
16479
|
+
const width = 100;
|
|
16480
|
+
const height = 30;
|
|
16481
|
+
const padding = 4;
|
|
16482
|
+
const coords = getPointsCoordinates(points, width, height, padding);
|
|
16483
|
+
const pathD = coords.map((c, i) => `${i === 0 ? 'M' : 'L'} ${c.x.toFixed(1)} ${c.y.toFixed(1)}`).join(' ');
|
|
16484
|
+
// Highlight extreme/boundary values
|
|
16485
|
+
let minIdx = 0;
|
|
16486
|
+
let maxIdx = 0;
|
|
16487
|
+
for (let i = 1; i < points.length; i++) {
|
|
16488
|
+
if (points[i].value < points[minIdx].value)
|
|
16489
|
+
minIdx = i;
|
|
16490
|
+
if (points[i].value > points[maxIdx].value)
|
|
16491
|
+
maxIdx = i;
|
|
16492
|
+
}
|
|
16493
|
+
const markers = [
|
|
16494
|
+
{ x: coords[0].x, y: coords[0].y, tone: points[0].tone ?? tone },
|
|
16495
|
+
{ x: coords[coords.length - 1].x, y: coords[coords.length - 1].y, tone: points[points.length - 1].tone ?? tone }
|
|
16496
|
+
];
|
|
16497
|
+
if (minIdx !== 0 && minIdx !== coords.length - 1) {
|
|
16498
|
+
markers.push({ x: coords[minIdx].x, y: coords[minIdx].y, tone: points[minIdx].tone ?? 'danger' });
|
|
16499
|
+
}
|
|
16500
|
+
if (maxIdx !== 0 && maxIdx !== coords.length - 1) {
|
|
16501
|
+
markers.push({ x: coords[maxIdx].x, y: coords[maxIdx].y, tone: points[maxIdx].tone ?? 'success' });
|
|
16502
|
+
}
|
|
16503
|
+
const circlesHtml = markers.map(c => `<circle cx="${c.x.toFixed(1)}" cy="${c.y.toFixed(1)}" r="2.5" class="pfx-micro-trend__marker" data-tone="${escapeHtml$1(c.tone)}" />`).join('');
|
|
16504
|
+
const isTable = visualization.surface === 'table-cell';
|
|
16505
|
+
const firstPoint = points[0];
|
|
16506
|
+
const lastPoint = points[points.length - 1];
|
|
16507
|
+
const leftHtml = isTable ? '' : `
|
|
16508
|
+
<div class="pfx-micro-trend__label-col pfx-micro-trend__label-col--start">
|
|
16509
|
+
<span class="pfx-micro-trend__value">${escapeHtml$1(formatMicroNumber(firstPoint.value, options.locale))}</span>
|
|
16510
|
+
${firstPoint.label ? `<span class="pfx-micro-trend__label">${escapeHtml$1(firstPoint.label)}</span>` : ''}
|
|
16511
|
+
</div>`;
|
|
16512
|
+
const rightHtml = isTable ? '' : `
|
|
16513
|
+
<div class="pfx-micro-trend__label-col pfx-micro-trend__label-col--end">
|
|
16514
|
+
<span class="pfx-micro-trend__value">${escapeHtml$1(formatMicroNumber(lastPoint.value, options.locale))}</span>
|
|
16515
|
+
${lastPoint.label ? `<span class="pfx-micro-trend__label">${escapeHtml$1(lastPoint.label)}</span>` : ''}
|
|
16516
|
+
</div>`;
|
|
16517
|
+
return `
|
|
16518
|
+
<span class="pfx-micro-viz-container">
|
|
16519
|
+
${leftHtml}
|
|
16520
|
+
<span class="pfx-micro-viz pfx-micro-viz__line" data-tone="${escapeHtml$1(tone)}" role="img" aria-label="${escapeHtml$1(visualization.ariaLabel ?? visualization.fallbackText)}">
|
|
16521
|
+
<svg class="pfx-micro-line__svg" viewBox="0 0 100 30">
|
|
16522
|
+
<path class="pfx-micro-line__path" d="${pathD}" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
|
16523
|
+
${circlesHtml}
|
|
16524
|
+
</svg>
|
|
16525
|
+
</span>
|
|
16526
|
+
${rightHtml}
|
|
16527
|
+
</span>`;
|
|
16528
|
+
}
|
|
16529
|
+
function renderAreaVisualizationHtml(visualization, options) {
|
|
16530
|
+
const points = visualization.points ?? [];
|
|
16531
|
+
const tone = visualization.tone ?? 'info';
|
|
16532
|
+
if (points.length < 2) {
|
|
16533
|
+
return renderFallbackVisualizationHtml(visualization, tone);
|
|
16534
|
+
}
|
|
16535
|
+
const width = 100;
|
|
16536
|
+
const height = 30;
|
|
16537
|
+
const padding = 4;
|
|
16538
|
+
const coords = getPointsCoordinates(points, width, height, padding);
|
|
16539
|
+
const lineD = coords.map((c, i) => `${i === 0 ? 'M' : 'L'} ${c.x.toFixed(1)} ${c.y.toFixed(1)}`).join(' ');
|
|
16540
|
+
const firstX = coords[0].x.toFixed(1);
|
|
16541
|
+
const lastX = coords[coords.length - 1].x.toFixed(1);
|
|
16542
|
+
const areaD = `${lineD} L ${lastX} ${height} L ${firstX} ${height} Z`;
|
|
16543
|
+
// Highlight extreme/boundary values
|
|
16544
|
+
let minIdx = 0;
|
|
16545
|
+
let maxIdx = 0;
|
|
16546
|
+
for (let i = 1; i < points.length; i++) {
|
|
16547
|
+
if (points[i].value < points[minIdx].value)
|
|
16548
|
+
minIdx = i;
|
|
16549
|
+
if (points[i].value > points[maxIdx].value)
|
|
16550
|
+
maxIdx = i;
|
|
16551
|
+
}
|
|
16552
|
+
const markers = [
|
|
16553
|
+
{ x: coords[0].x, y: coords[0].y, tone: points[0].tone ?? tone },
|
|
16554
|
+
{ x: coords[coords.length - 1].x, y: coords[coords.length - 1].y, tone: points[points.length - 1].tone ?? tone }
|
|
16555
|
+
];
|
|
16556
|
+
if (minIdx !== 0 && minIdx !== coords.length - 1) {
|
|
16557
|
+
markers.push({ x: coords[minIdx].x, y: coords[minIdx].y, tone: points[minIdx].tone ?? 'danger' });
|
|
16558
|
+
}
|
|
16559
|
+
if (maxIdx !== 0 && maxIdx !== coords.length - 1) {
|
|
16560
|
+
markers.push({ x: coords[maxIdx].x, y: coords[maxIdx].y, tone: points[maxIdx].tone ?? 'success' });
|
|
16561
|
+
}
|
|
16562
|
+
const circlesHtml = markers.map(c => `<circle cx="${c.x.toFixed(1)}" cy="${c.y.toFixed(1)}" r="2.5" class="pfx-micro-trend__marker" data-tone="${escapeHtml$1(c.tone)}" />`).join('');
|
|
16563
|
+
const isTable = visualization.surface === 'table-cell';
|
|
16564
|
+
const firstPoint = points[0];
|
|
16565
|
+
const lastPoint = points[points.length - 1];
|
|
16566
|
+
const leftHtml = isTable ? '' : `
|
|
16567
|
+
<div class="pfx-micro-trend__label-col pfx-micro-trend__label-col--start">
|
|
16568
|
+
<span class="pfx-micro-trend__value">${escapeHtml$1(formatMicroNumber(firstPoint.value, options.locale))}</span>
|
|
16569
|
+
${firstPoint.label ? `<span class="pfx-micro-trend__label">${escapeHtml$1(firstPoint.label)}</span>` : ''}
|
|
16570
|
+
</div>`;
|
|
16571
|
+
const rightHtml = isTable ? '' : `
|
|
16572
|
+
<div class="pfx-micro-trend__label-col pfx-micro-trend__label-col--end">
|
|
16573
|
+
<span class="pfx-micro-trend__value">${escapeHtml$1(formatMicroNumber(lastPoint.value, options.locale))}</span>
|
|
16574
|
+
${lastPoint.label ? `<span class="pfx-micro-trend__label">${escapeHtml$1(lastPoint.label)}</span>` : ''}
|
|
16575
|
+
</div>`;
|
|
16576
|
+
return `
|
|
16577
|
+
<span class="pfx-micro-viz-container">
|
|
16578
|
+
${leftHtml}
|
|
16579
|
+
<span class="pfx-micro-viz pfx-micro-viz__area" data-tone="${escapeHtml$1(tone)}" role="img" aria-label="${escapeHtml$1(visualization.ariaLabel ?? visualization.fallbackText)}">
|
|
16580
|
+
<svg class="pfx-micro-area__svg" viewBox="0 0 100 30">
|
|
16581
|
+
<path class="pfx-micro-area__fill" d="${areaD}" fill="currentColor" fill-opacity="0.15" />
|
|
16582
|
+
<path class="pfx-micro-area__path" d="${lineD}" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
|
16583
|
+
${circlesHtml}
|
|
16584
|
+
</svg>
|
|
16585
|
+
</span>
|
|
16586
|
+
${rightHtml}
|
|
16587
|
+
</span>`;
|
|
16588
|
+
}
|
|
16589
|
+
function renderColumnVisualizationHtml(visualization, options) {
|
|
16590
|
+
const points = visualization.points ?? [];
|
|
16591
|
+
const tone = visualization.tone ?? 'info';
|
|
16592
|
+
if (points.length === 0) {
|
|
16593
|
+
return renderFallbackVisualizationHtml(visualization, tone);
|
|
16594
|
+
}
|
|
16595
|
+
const width = 100;
|
|
16596
|
+
const height = 30;
|
|
16597
|
+
const padding = 4;
|
|
16598
|
+
const values = points.map(p => p.value);
|
|
16599
|
+
const maxVal = Math.max(...values, 0);
|
|
16600
|
+
const minVal = Math.min(...values, 0);
|
|
16601
|
+
const valRange = maxVal - minVal === 0 ? 1 : maxVal - minVal;
|
|
16602
|
+
const colWidth = Math.max(2, (width - 2 * padding) / points.length - 2);
|
|
16603
|
+
const columnsHtml = points.map((p, i) => {
|
|
16604
|
+
const x = padding + i * ((width - 2 * padding) / points.length) + 1;
|
|
16605
|
+
const rectHeight = Math.max(2, ((p.value - minVal) / valRange) * (height - 2 * padding));
|
|
16606
|
+
const rectY = height - padding - rectHeight;
|
|
16607
|
+
const itemTone = p.tone ?? tone;
|
|
16608
|
+
return `<rect class="pfx-micro-column__bar" x="${x.toFixed(1)}" y="${rectY.toFixed(1)}" width="${colWidth.toFixed(1)}" height="${rectHeight.toFixed(1)}" fill="currentColor" data-tone="${escapeHtml$1(itemTone)}" />`;
|
|
16609
|
+
}).join('');
|
|
16610
|
+
const isTable = visualization.surface === 'table-cell';
|
|
16611
|
+
const firstPoint = points[0];
|
|
16612
|
+
const lastPoint = points[points.length - 1];
|
|
16613
|
+
const leftHtml = isTable ? '' : `
|
|
16614
|
+
<div class="pfx-micro-trend__label-col pfx-micro-trend__label-col--start">
|
|
16615
|
+
<span class="pfx-micro-trend__value">${escapeHtml$1(formatMicroNumber(firstPoint.value, options.locale))}</span>
|
|
16616
|
+
${firstPoint.label ? `<span class="pfx-micro-trend__label">${escapeHtml$1(firstPoint.label)}</span>` : ''}
|
|
16617
|
+
</div>`;
|
|
16618
|
+
const rightHtml = isTable ? '' : `
|
|
16619
|
+
<div class="pfx-micro-trend__label-col pfx-micro-trend__label-col--end">
|
|
16620
|
+
<span class="pfx-micro-trend__value">${escapeHtml$1(formatMicroNumber(lastPoint.value, options.locale))}</span>
|
|
16621
|
+
${lastPoint.label ? `<span class="pfx-micro-trend__label">${escapeHtml$1(lastPoint.label)}</span>` : ''}
|
|
16622
|
+
</div>`;
|
|
16623
|
+
return `
|
|
16624
|
+
<span class="pfx-micro-viz-container">
|
|
16625
|
+
${leftHtml}
|
|
16626
|
+
<span class="pfx-micro-viz pfx-micro-viz__column" data-tone="${escapeHtml$1(tone)}" role="img" aria-label="${escapeHtml$1(visualization.ariaLabel ?? visualization.fallbackText)}">
|
|
16627
|
+
<svg class="pfx-micro-column__svg" viewBox="0 0 100 30">
|
|
16628
|
+
${columnsHtml}
|
|
16629
|
+
</svg>
|
|
16630
|
+
</span>
|
|
16631
|
+
${rightHtml}
|
|
16632
|
+
</span>`;
|
|
16633
|
+
}
|
|
16634
|
+
function renderProcessFlowVisualizationHtml(visualization, options) {
|
|
16635
|
+
const items = visualization.items ?? [];
|
|
16636
|
+
if (items.length === 0) {
|
|
16637
|
+
return renderFallbackVisualizationHtml(visualization, visualization.tone ?? 'neutral');
|
|
16638
|
+
}
|
|
16639
|
+
const isTable = visualization.surface === 'table-cell';
|
|
16640
|
+
const stepLabels = items.map((item, index) => item.label ?? item.id ?? `${index + 1}`);
|
|
16641
|
+
const aria = visualization.ariaLabel ?? `${visualization.fallbackText}: ${stepLabels.join(' > ')}`;
|
|
16642
|
+
const stepsHtml = items.map((item, index) => {
|
|
16643
|
+
const itemTone = item.tone ?? 'neutral';
|
|
16644
|
+
const itemState = item.state ?? '';
|
|
16645
|
+
const isLast = index === items.length - 1;
|
|
16646
|
+
const itemLabel = stepLabels[index];
|
|
16647
|
+
const label = !isTable && item.label ? `<span class="pfx-micro-step__label">${escapeHtml$1(item.label)}</span>` : '';
|
|
16648
|
+
const connector = !isLast ? `<span class="pfx-micro-step__connector" data-tone="${escapeHtml$1(itemTone)}"></span>` : '';
|
|
16649
|
+
const stepCircle = `
|
|
16650
|
+
<span class="pfx-micro-step__node" data-tone="${escapeHtml$1(itemTone)}" aria-hidden="true">
|
|
16651
|
+
${item.icon ? `<span class="material-icons pfx-micro-step__icon" aria-hidden="true">${escapeHtml$1(item.icon)}</span>` : `${index + 1}`}
|
|
16652
|
+
</span>`;
|
|
16653
|
+
return `
|
|
16654
|
+
<div class="pfx-micro-step" data-state="${escapeHtml$1(itemState)}" data-tone="${escapeHtml$1(itemTone)}">
|
|
16655
|
+
<div class="pfx-micro-step__node-wrapper" title="${escapeHtml$1(itemLabel)}">
|
|
16656
|
+
${stepCircle}
|
|
16657
|
+
${label}
|
|
16658
|
+
</div>
|
|
16659
|
+
${connector}
|
|
16660
|
+
</div>`;
|
|
16661
|
+
}).join('');
|
|
16662
|
+
return `
|
|
16663
|
+
<span class="pfx-micro-viz pfx-micro-viz__process" role="img" aria-label="${escapeHtml$1(aria)}">
|
|
16664
|
+
${stepsHtml}
|
|
16665
|
+
</span>`;
|
|
16666
|
+
}
|
|
16667
|
+
function renderFallbackVisualizationHtml(visualization, tone) {
|
|
16668
|
+
return `
|
|
16669
|
+
<span
|
|
16670
|
+
class="pfx-micro-viz pfx-micro-viz__fallback"
|
|
16671
|
+
data-tone="${escapeHtml$1(tone)}"
|
|
16672
|
+
role="img"
|
|
16673
|
+
aria-label="${escapeHtml$1(visualization.ariaLabel ?? visualization.fallbackText)}"
|
|
16674
|
+
>${escapeHtml$1(visualization.fallbackText)}</span>`;
|
|
16675
|
+
}
|
|
16508
16676
|
|
|
16509
16677
|
const TONES = new Set([
|
|
16510
16678
|
'neutral',
|
|
@@ -20207,6 +20375,274 @@ const ValidationPattern = {
|
|
|
20207
20375
|
CUSTOM: '',
|
|
20208
20376
|
};
|
|
20209
20377
|
|
|
20378
|
+
function materializeFormLayoutFromMetadata(fields, options = {}) {
|
|
20379
|
+
const policy = normalizeLayoutPolicy(options.policy);
|
|
20380
|
+
const visibleFields = normalizeFields(fields, options.includeHidden === true);
|
|
20381
|
+
const groupedFields = groupFields(visibleFields);
|
|
20382
|
+
const sections = groupedFields.map(([groupKey, groupFields], sectionIndex) => createSection(groupKey, groupFields, sectionIndex, policy, options));
|
|
20383
|
+
return ensureIds({
|
|
20384
|
+
sections,
|
|
20385
|
+
fieldMetadata: fieldsForPolicy(visibleFields, policy),
|
|
20386
|
+
metadata: {
|
|
20387
|
+
version: '1.0.0',
|
|
20388
|
+
lastUpdated: new Date(),
|
|
20389
|
+
source: 'schema',
|
|
20390
|
+
generatedLayoutPreset: policy.preset,
|
|
20391
|
+
schemaLayoutPolicy: policy,
|
|
20392
|
+
...(policy.preset === 'compactPresentation'
|
|
20393
|
+
? { presentationDensity: 'compact' }
|
|
20394
|
+
: {}),
|
|
20395
|
+
},
|
|
20396
|
+
});
|
|
20397
|
+
}
|
|
20398
|
+
function normalizeLayoutPolicy(policy) {
|
|
20399
|
+
const intent = policy?.intent ?? (policy?.preset === 'groupedCommand' ? 'command' : 'detail');
|
|
20400
|
+
const preset = policy?.preset ?? (intent === 'command' ? 'groupedCommand' : 'compactPresentation');
|
|
20401
|
+
return {
|
|
20402
|
+
source: policy?.source ?? 'authored',
|
|
20403
|
+
preset,
|
|
20404
|
+
intent,
|
|
20405
|
+
lifecycle: policy?.lifecycle ?? 'initial',
|
|
20406
|
+
persistence: policy?.persistence ?? 'authorable',
|
|
20407
|
+
detachBehavior: policy?.detachBehavior ?? 'none',
|
|
20408
|
+
schemaOperation: policy?.schemaOperation,
|
|
20409
|
+
schemaType: policy?.schemaType,
|
|
20410
|
+
};
|
|
20411
|
+
}
|
|
20412
|
+
function normalizeFields(fields, includeHidden) {
|
|
20413
|
+
return (fields || [])
|
|
20414
|
+
.filter((field) => !!field?.name)
|
|
20415
|
+
.filter((field) => includeHidden || !isFormHidden(field))
|
|
20416
|
+
.sort(compareFields);
|
|
20417
|
+
}
|
|
20418
|
+
function isFormHidden(field) {
|
|
20419
|
+
const anyField = field;
|
|
20420
|
+
return anyField.formHidden === true || anyField.hidden === true || anyField.visible === false;
|
|
20421
|
+
}
|
|
20422
|
+
function groupFields(fields) {
|
|
20423
|
+
const groups = new Map();
|
|
20424
|
+
for (const field of fields) {
|
|
20425
|
+
const groupKey = normalizeGroupLabel(field.group);
|
|
20426
|
+
groups.set(groupKey, [...(groups.get(groupKey) || []), field]);
|
|
20427
|
+
}
|
|
20428
|
+
return Array.from(groups.entries()).sort(([, left], [, right]) => compareGroupFields(left, right));
|
|
20429
|
+
}
|
|
20430
|
+
function createSection(groupKey, groupFields, sectionIndex, policy, options) {
|
|
20431
|
+
const title = groupKey === 'default'
|
|
20432
|
+
? options.defaultSectionTitle || 'Informacoes'
|
|
20433
|
+
: groupKey;
|
|
20434
|
+
const sectionId = stableSectionId(groupKey);
|
|
20435
|
+
const presentationRole = resolvePresentationRole(groupKey, groupFields, options.presentationRoleMap);
|
|
20436
|
+
return {
|
|
20437
|
+
id: sectionId,
|
|
20438
|
+
title,
|
|
20439
|
+
...(policy.preset === 'compactPresentation'
|
|
20440
|
+
? {
|
|
20441
|
+
icon: resolvePresentationSectionIcon(presentationRole),
|
|
20442
|
+
sectionHeader: {
|
|
20443
|
+
mode: 'icon',
|
|
20444
|
+
size: 'sm',
|
|
20445
|
+
fallbackIcon: resolvePresentationSectionIcon(presentationRole),
|
|
20446
|
+
},
|
|
20447
|
+
className: [
|
|
20448
|
+
'pdx-presentation-section',
|
|
20449
|
+
`pdx-presentation-section--${presentationRole}`,
|
|
20450
|
+
].join(' '),
|
|
20451
|
+
presentationRole,
|
|
20452
|
+
appearance: 'plain',
|
|
20453
|
+
}
|
|
20454
|
+
: {}),
|
|
20455
|
+
rows: policy.preset === 'groupedCommand'
|
|
20456
|
+
? createCommandRows(groupFields, sectionId)
|
|
20457
|
+
: createPresentationRows(groupFields, sectionId),
|
|
20458
|
+
};
|
|
20459
|
+
}
|
|
20460
|
+
function createPresentationRows(fields, sectionId) {
|
|
20461
|
+
const rows = [];
|
|
20462
|
+
let pending = [];
|
|
20463
|
+
let pendingSpan = 0;
|
|
20464
|
+
let rowIndex = 0;
|
|
20465
|
+
const flush = () => {
|
|
20466
|
+
if (!pending.length)
|
|
20467
|
+
return;
|
|
20468
|
+
rows.push({ id: `${sectionId}-row-${++rowIndex}`, columns: pending });
|
|
20469
|
+
pending = [];
|
|
20470
|
+
pendingSpan = 0;
|
|
20471
|
+
};
|
|
20472
|
+
for (const field of fields) {
|
|
20473
|
+
const span = hasExplicitWidth(field)
|
|
20474
|
+
? resolveCommandSpan(field)
|
|
20475
|
+
: { xs: 12, sm: 12, md: 12, lg: 12, xl: 12 };
|
|
20476
|
+
const mdSpan = span.md ?? 12;
|
|
20477
|
+
const column = {
|
|
20478
|
+
id: `${sectionId}-col-${field.name}`,
|
|
20479
|
+
fields: [field.name],
|
|
20480
|
+
items: [{ id: `${sectionId}-item-${field.name}`, kind: 'field', fieldName: field.name }],
|
|
20481
|
+
span,
|
|
20482
|
+
};
|
|
20483
|
+
if (mdSpan >= 12) {
|
|
20484
|
+
flush();
|
|
20485
|
+
pending = [column];
|
|
20486
|
+
flush();
|
|
20487
|
+
continue;
|
|
20488
|
+
}
|
|
20489
|
+
if (pendingSpan + mdSpan > 12) {
|
|
20490
|
+
flush();
|
|
20491
|
+
}
|
|
20492
|
+
pending.push(column);
|
|
20493
|
+
pendingSpan += mdSpan;
|
|
20494
|
+
}
|
|
20495
|
+
flush();
|
|
20496
|
+
return rows;
|
|
20497
|
+
}
|
|
20498
|
+
function createCommandRows(fields, sectionId) {
|
|
20499
|
+
const rows = [];
|
|
20500
|
+
let pending = [];
|
|
20501
|
+
let pendingSpan = 0;
|
|
20502
|
+
let rowIndex = 0;
|
|
20503
|
+
const flush = () => {
|
|
20504
|
+
if (!pending.length)
|
|
20505
|
+
return;
|
|
20506
|
+
rows.push({ id: `${sectionId}-row-${++rowIndex}`, columns: pending });
|
|
20507
|
+
pending = [];
|
|
20508
|
+
pendingSpan = 0;
|
|
20509
|
+
};
|
|
20510
|
+
for (const field of fields) {
|
|
20511
|
+
const span = resolveCommandSpan(field);
|
|
20512
|
+
const mdSpan = span.md ?? 12;
|
|
20513
|
+
const column = {
|
|
20514
|
+
id: `${sectionId}-col-${field.name}`,
|
|
20515
|
+
fields: [field.name],
|
|
20516
|
+
items: [{ id: `${sectionId}-item-${field.name}`, kind: 'field', fieldName: field.name }],
|
|
20517
|
+
span,
|
|
20518
|
+
};
|
|
20519
|
+
if (mdSpan >= 12) {
|
|
20520
|
+
flush();
|
|
20521
|
+
pending = [column];
|
|
20522
|
+
flush();
|
|
20523
|
+
continue;
|
|
20524
|
+
}
|
|
20525
|
+
if (pendingSpan + mdSpan > 12) {
|
|
20526
|
+
flush();
|
|
20527
|
+
}
|
|
20528
|
+
pending.push(column);
|
|
20529
|
+
pendingSpan += mdSpan;
|
|
20530
|
+
}
|
|
20531
|
+
flush();
|
|
20532
|
+
return rows;
|
|
20533
|
+
}
|
|
20534
|
+
function resolveCommandSpan(field) {
|
|
20535
|
+
const rawWidth = field.width;
|
|
20536
|
+
const numericWidth = typeof rawWidth === 'number'
|
|
20537
|
+
? rawWidth
|
|
20538
|
+
: typeof rawWidth === 'string' && /^\d+$/.test(rawWidth.trim())
|
|
20539
|
+
? Number(rawWidth.trim())
|
|
20540
|
+
: null;
|
|
20541
|
+
if (numericWidth != null && Number.isFinite(numericWidth)) {
|
|
20542
|
+
const span = Math.max(1, Math.min(12, Math.round(numericWidth)));
|
|
20543
|
+
return {
|
|
20544
|
+
xs: 12,
|
|
20545
|
+
sm: span >= 6 ? 12 : 6,
|
|
20546
|
+
md: span,
|
|
20547
|
+
lg: span,
|
|
20548
|
+
xl: span,
|
|
20549
|
+
};
|
|
20550
|
+
}
|
|
20551
|
+
const width = String(rawWidth || '').toLowerCase();
|
|
20552
|
+
const controlType = String(field.controlType || field.type || '').toLowerCase();
|
|
20553
|
+
if (width === 'full' ||
|
|
20554
|
+
width === 'xl' ||
|
|
20555
|
+
controlType.includes('textarea') ||
|
|
20556
|
+
controlType.includes('rich') ||
|
|
20557
|
+
controlType.includes('file') ||
|
|
20558
|
+
controlType.includes('autocomplete') ||
|
|
20559
|
+
controlType.includes('lookup')) {
|
|
20560
|
+
return { xs: 12, sm: 12, md: 12, lg: 12, xl: 12 };
|
|
20561
|
+
}
|
|
20562
|
+
if (width === 'lg')
|
|
20563
|
+
return { xs: 12, sm: 12, md: 8, lg: 8, xl: 8 };
|
|
20564
|
+
if (width === 'md')
|
|
20565
|
+
return { xs: 12, sm: 12, md: 6, lg: 6, xl: 6 };
|
|
20566
|
+
if (width === 'sm')
|
|
20567
|
+
return { xs: 12, sm: 6, md: 4, lg: 4, xl: 4 };
|
|
20568
|
+
if (width === 'xs' || controlType.includes('checkbox') || controlType.includes('toggle')) {
|
|
20569
|
+
return { xs: 12, sm: 6, md: 3, lg: 3, xl: 3 };
|
|
20570
|
+
}
|
|
20571
|
+
return { xs: 12, sm: 12, md: 6, lg: 6, xl: 6 };
|
|
20572
|
+
}
|
|
20573
|
+
function hasExplicitWidth(field) {
|
|
20574
|
+
const rawWidth = field.width;
|
|
20575
|
+
return rawWidth !== undefined && rawWidth !== null && String(rawWidth).trim() !== '';
|
|
20576
|
+
}
|
|
20577
|
+
function fieldsForPolicy(fields, policy) {
|
|
20578
|
+
if (policy.preset !== 'compactPresentation') {
|
|
20579
|
+
return fields;
|
|
20580
|
+
}
|
|
20581
|
+
return fields.map((field) => ({
|
|
20582
|
+
...field,
|
|
20583
|
+
readOnly: true,
|
|
20584
|
+
presentationMode: field.presentationMode ?? true,
|
|
20585
|
+
valuePresentation: {
|
|
20586
|
+
...(field.valuePresentation || {}),
|
|
20587
|
+
density: (field.valuePresentation || {}).density ?? 'compact',
|
|
20588
|
+
},
|
|
20589
|
+
}));
|
|
20590
|
+
}
|
|
20591
|
+
function compareGroupFields(left, right) {
|
|
20592
|
+
return compareFields(left[0], right[0]);
|
|
20593
|
+
}
|
|
20594
|
+
function compareFields(left, right) {
|
|
20595
|
+
const leftOrder = typeof left?.order === 'number' ? left.order : Number.MAX_SAFE_INTEGER;
|
|
20596
|
+
const rightOrder = typeof right?.order === 'number' ? right.order : Number.MAX_SAFE_INTEGER;
|
|
20597
|
+
if (leftOrder !== rightOrder)
|
|
20598
|
+
return leftOrder - rightOrder;
|
|
20599
|
+
return String(left?.name || '').localeCompare(String(right?.name || ''));
|
|
20600
|
+
}
|
|
20601
|
+
function normalizeGroupLabel(group) {
|
|
20602
|
+
const value = String(group || '').trim();
|
|
20603
|
+
return value || 'default';
|
|
20604
|
+
}
|
|
20605
|
+
function resolvePresentationRole(groupName, fields, map) {
|
|
20606
|
+
const direct = map?.[groupName];
|
|
20607
|
+
if (direct)
|
|
20608
|
+
return direct;
|
|
20609
|
+
const normalized = stableToken(groupName);
|
|
20610
|
+
if (normalized.includes('ident'))
|
|
20611
|
+
return 'identity';
|
|
20612
|
+
if (normalized.includes('marc') || normalized.includes('status'))
|
|
20613
|
+
return 'markers';
|
|
20614
|
+
if (normalized.includes('regra') || normalized.includes('rule'))
|
|
20615
|
+
return 'rules';
|
|
20616
|
+
if (fields.some((field) => String(field.controlType || '').toLowerCase().includes('checkbox'))) {
|
|
20617
|
+
return 'markers';
|
|
20618
|
+
}
|
|
20619
|
+
return 'default';
|
|
20620
|
+
}
|
|
20621
|
+
function resolvePresentationSectionIcon(role) {
|
|
20622
|
+
switch (role) {
|
|
20623
|
+
case 'identity':
|
|
20624
|
+
return 'badge';
|
|
20625
|
+
case 'rules':
|
|
20626
|
+
return 'rule';
|
|
20627
|
+
case 'markers':
|
|
20628
|
+
return 'fact_check';
|
|
20629
|
+
default:
|
|
20630
|
+
return 'info';
|
|
20631
|
+
}
|
|
20632
|
+
}
|
|
20633
|
+
function stableSectionId(groupName) {
|
|
20634
|
+
const token = stableToken(groupName) || 'default';
|
|
20635
|
+
return `section-${token}`;
|
|
20636
|
+
}
|
|
20637
|
+
function stableToken(value) {
|
|
20638
|
+
return String(value || '')
|
|
20639
|
+
.normalize('NFD')
|
|
20640
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
20641
|
+
.toLowerCase()
|
|
20642
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
20643
|
+
.replace(/^-+|-+$/g, '');
|
|
20644
|
+
}
|
|
20645
|
+
|
|
20210
20646
|
function resolveSpan(span) {
|
|
20211
20647
|
const xs = clamp(span?.xs ?? 12, 'xs');
|
|
20212
20648
|
const sm = clamp(span?.sm ?? xs, 'sm');
|
|
@@ -25768,7 +26204,19 @@ class DynamicWidgetLoaderDirective {
|
|
|
25768
26204
|
const defaultOrderMap = {
|
|
25769
26205
|
'praxis-table': ['tableId', 'componentInstanceId', 'configPersistenceStrategy', 'resourcePath', 'data', 'config'],
|
|
25770
26206
|
'praxis-crud': ['crudId', 'componentInstanceId', 'metadata'],
|
|
25771
|
-
'praxis-dynamic-form': [
|
|
26207
|
+
'praxis-dynamic-form': [
|
|
26208
|
+
'formId',
|
|
26209
|
+
'componentInstanceId',
|
|
26210
|
+
'resourcePath',
|
|
26211
|
+
'schemaUrl',
|
|
26212
|
+
'submitUrl',
|
|
26213
|
+
'submitMethod',
|
|
26214
|
+
'apiEndpointKey',
|
|
26215
|
+
'apiUrlEntry',
|
|
26216
|
+
'initialValue',
|
|
26217
|
+
'mode',
|
|
26218
|
+
'layoutPolicy',
|
|
26219
|
+
],
|
|
25772
26220
|
'praxis-tabs': ['tabsId', 'componentInstanceId', 'configPersistenceStrategy', 'config'],
|
|
25773
26221
|
'praxis-list': ['listId', 'componentInstanceId', 'enableCustomization', 'config'],
|
|
25774
26222
|
'praxis-expansion': ['expansionId', 'componentInstanceId', 'config'],
|
|
@@ -32072,9 +32520,16 @@ class DynamicWidgetPageComponent {
|
|
|
32072
32520
|
origin: 'dynamic-page.rich-content',
|
|
32073
32521
|
componentId: 'praxis-dynamic-page',
|
|
32074
32522
|
},
|
|
32523
|
+
}).then((result) => {
|
|
32524
|
+
if (!result?.success) {
|
|
32525
|
+
this.emitRichContentCustomAction(widgetKey, actionId, payload);
|
|
32526
|
+
}
|
|
32075
32527
|
});
|
|
32076
32528
|
return;
|
|
32077
32529
|
}
|
|
32530
|
+
this.emitRichContentCustomAction(widgetKey, actionId, payload);
|
|
32531
|
+
}
|
|
32532
|
+
emitRichContentCustomAction(widgetKey, actionId, payload) {
|
|
32078
32533
|
this.onWidgetEvent(widgetKey, {
|
|
32079
32534
|
ownerWidgetKey: widgetKey,
|
|
32080
32535
|
sourceComponentId: 'praxis-rich-content',
|
|
@@ -35038,6 +35493,8 @@ class PraxisSurfaceHostComponent {
|
|
|
35038
35493
|
*/
|
|
35039
35494
|
renderTitleInsideBody = false;
|
|
35040
35495
|
widgetEvent = new EventEmitter();
|
|
35496
|
+
rowClick = new EventEmitter();
|
|
35497
|
+
selectionChange = new EventEmitter();
|
|
35041
35498
|
beforeWidgetLoader;
|
|
35042
35499
|
mainWidgetLoader;
|
|
35043
35500
|
afterWidgetLoader;
|
|
@@ -35151,13 +35608,19 @@ class PraxisSurfaceHostComponent {
|
|
|
35151
35608
|
}
|
|
35152
35609
|
}
|
|
35153
35610
|
onSlotWidgetEvent(ownerWidgetKey, event) {
|
|
35611
|
+
if (event.output === 'rowClick') {
|
|
35612
|
+
this.rowClick.emit(event.payload);
|
|
35613
|
+
}
|
|
35614
|
+
if (event.output === 'selectionChange') {
|
|
35615
|
+
this.selectionChange.emit(event.payload);
|
|
35616
|
+
}
|
|
35154
35617
|
this.widgetEvent.emit({
|
|
35155
35618
|
...event,
|
|
35156
35619
|
ownerWidgetKey: event.ownerWidgetKey || ownerWidgetKey,
|
|
35157
35620
|
});
|
|
35158
35621
|
}
|
|
35159
35622
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisSurfaceHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
35160
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisSurfaceHostComponent, isStandalone: true, selector: "praxis-surface-host", inputs: { title: "title", subtitle: "subtitle", icon: "icon", beforeWidget: "beforeWidget", widget: "widget", afterWidget: "afterWidget", context: "context", strictValidation: "strictValidation", renderTitleInsideBody: "renderTitleInsideBody" }, outputs: { widgetEvent: "widgetEvent" }, viewQueries: [{ propertyName: "beforeWidgetLoader", first: true, predicate: ["beforeWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "mainWidgetLoader", first: true, predicate: ["mainWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "afterWidgetLoader", first: true, predicate: ["afterWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }], usesOnChanges: true, ngImport: i0, template: `
|
|
35623
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisSurfaceHostComponent, isStandalone: true, selector: "praxis-surface-host", inputs: { title: "title", subtitle: "subtitle", icon: "icon", beforeWidget: "beforeWidget", widget: "widget", afterWidget: "afterWidget", context: "context", strictValidation: "strictValidation", renderTitleInsideBody: "renderTitleInsideBody" }, outputs: { widgetEvent: "widgetEvent", rowClick: "rowClick", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "beforeWidgetLoader", first: true, predicate: ["beforeWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "mainWidgetLoader", first: true, predicate: ["mainWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "afterWidgetLoader", first: true, predicate: ["afterWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }], usesOnChanges: true, ngImport: i0, template: `
|
|
35161
35624
|
<div class="pdx-surface-host">
|
|
35162
35625
|
@if (subtitle || (title && renderTitleInsideBody)) {
|
|
35163
35626
|
<header class="pdx-surface-host__header">
|
|
@@ -35184,6 +35647,7 @@ class PraxisSurfaceHostComponent {
|
|
|
35184
35647
|
[ownerWidgetKey]="beforeWidgetKey"
|
|
35185
35648
|
[context]="context"
|
|
35186
35649
|
[strictValidation]="strictValidation"
|
|
35650
|
+
[autoWireOutputs]="true"
|
|
35187
35651
|
(widgetEvent)="onSlotWidgetEvent(beforeWidgetKey, $event)"
|
|
35188
35652
|
></ng-container>
|
|
35189
35653
|
</div>
|
|
@@ -35196,6 +35660,7 @@ class PraxisSurfaceHostComponent {
|
|
|
35196
35660
|
[ownerWidgetKey]="mainWidgetKey"
|
|
35197
35661
|
[context]="context"
|
|
35198
35662
|
[strictValidation]="strictValidation"
|
|
35663
|
+
[autoWireOutputs]="true"
|
|
35199
35664
|
(widgetEvent)="onSlotWidgetEvent(mainWidgetKey, $event)"
|
|
35200
35665
|
></ng-container>
|
|
35201
35666
|
}
|
|
@@ -35208,6 +35673,7 @@ class PraxisSurfaceHostComponent {
|
|
|
35208
35673
|
[ownerWidgetKey]="afterWidgetKey"
|
|
35209
35674
|
[context]="context"
|
|
35210
35675
|
[strictValidation]="strictValidation"
|
|
35676
|
+
[autoWireOutputs]="true"
|
|
35211
35677
|
(widgetEvent)="onSlotWidgetEvent(afterWidgetKey, $event)"
|
|
35212
35678
|
></ng-container>
|
|
35213
35679
|
</div>
|
|
@@ -35245,6 +35711,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
35245
35711
|
[ownerWidgetKey]="beforeWidgetKey"
|
|
35246
35712
|
[context]="context"
|
|
35247
35713
|
[strictValidation]="strictValidation"
|
|
35714
|
+
[autoWireOutputs]="true"
|
|
35248
35715
|
(widgetEvent)="onSlotWidgetEvent(beforeWidgetKey, $event)"
|
|
35249
35716
|
></ng-container>
|
|
35250
35717
|
</div>
|
|
@@ -35257,6 +35724,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
35257
35724
|
[ownerWidgetKey]="mainWidgetKey"
|
|
35258
35725
|
[context]="context"
|
|
35259
35726
|
[strictValidation]="strictValidation"
|
|
35727
|
+
[autoWireOutputs]="true"
|
|
35260
35728
|
(widgetEvent)="onSlotWidgetEvent(mainWidgetKey, $event)"
|
|
35261
35729
|
></ng-container>
|
|
35262
35730
|
}
|
|
@@ -35269,6 +35737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
35269
35737
|
[ownerWidgetKey]="afterWidgetKey"
|
|
35270
35738
|
[context]="context"
|
|
35271
35739
|
[strictValidation]="strictValidation"
|
|
35740
|
+
[autoWireOutputs]="true"
|
|
35272
35741
|
(widgetEvent)="onSlotWidgetEvent(afterWidgetKey, $event)"
|
|
35273
35742
|
></ng-container>
|
|
35274
35743
|
</div>
|
|
@@ -35296,6 +35765,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
35296
35765
|
type: Input
|
|
35297
35766
|
}], widgetEvent: [{
|
|
35298
35767
|
type: Output
|
|
35768
|
+
}], rowClick: [{
|
|
35769
|
+
type: Output
|
|
35770
|
+
}], selectionChange: [{
|
|
35771
|
+
type: Output
|
|
35299
35772
|
}], beforeWidgetLoader: [{
|
|
35300
35773
|
type: ViewChild,
|
|
35301
35774
|
args: ['beforeWidgetLoader', { read: DynamicWidgetLoaderDirective }]
|
|
@@ -36765,4 +37238,4 @@ function provideHookWhitelist(allowed) {
|
|
|
36765
37238
|
* Generated bundle index. Do not edit.
|
|
36766
37239
|
*/
|
|
36767
37240
|
|
|
36768
|
-
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, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, 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, 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, GenericCrudService, GlobalActionService, GlobalConfigService, 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_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, 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_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, 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, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|
|
37241
|
+
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, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, 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, 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, GenericCrudService, GlobalActionService, GlobalConfigService, 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_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, 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_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, 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, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, materializeFormLayoutFromMetadata, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|