@praxisui/table 8.0.0-beta.85 → 8.0.0-beta.87
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/fesm2022/{praxisui-table-praxisui-table-BdJW7m53.mjs → praxisui-table-praxisui-table-DDQAk0TJ.mjs} +552 -54
- package/fesm2022/praxisui-table-table-agentic-authoring-turn-flow-oJhkMALs.mjs +7273 -0
- package/fesm2022/{praxisui-table-table-ai.adapter-jpeX3Nbc.mjs → praxisui-table-table-ai.adapter-yEPQ8xBc.mjs} +253 -4
- package/fesm2022/praxisui-table.mjs +1 -1
- package/package.json +10 -10
- package/src/lib/praxis-table.json-api.md +4 -0
- package/types/praxisui-table.d.ts +36 -6
- package/fesm2022/praxisui-table-table-agentic-authoring-turn-flow-DMglW7f1.mjs +0 -3536
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { firstValueFrom } from 'rxjs';
|
|
2
2
|
import { BaseAiAdapter, createComponentAuthoringContext } from '@praxisui/ai';
|
|
3
3
|
import { PRAXIS_GLOBAL_ACTION_CATALOG, deepMerge } from '@praxisui/core';
|
|
4
|
-
import {
|
|
4
|
+
import { G as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, k as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, W as coerceTableComponentEditPlans, Y as compileTableComponentEditPlans, I as TASK_PRESETS, a1 as getTableComponentEditPlanCapabilities, y as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, w as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, z as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, H as TABLE_COMPONENT_EDIT_PLAN_VERSION, x as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, E as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-DDQAk0TJ.mjs';
|
|
5
5
|
|
|
6
6
|
const TABLE_COMPONENT_CONTEXT_PACK = {
|
|
7
7
|
version: 'v1',
|
|
@@ -1890,6 +1890,10 @@ const TABLE_RECORD_SURFACE_OPEN_ACTION_IDS = new Set(['surface.open', 'dynamicPa
|
|
|
1890
1890
|
const TABLE_EXPORT_SCOPES = ['auto', 'selected', 'filtered', 'currentPage', 'all'];
|
|
1891
1891
|
const TABLE_EXPORT_FORMATS = ['excel', 'pdf', 'csv', 'json', 'print'];
|
|
1892
1892
|
const TABLE_UNSUPPORTED_FILTER_COMBINATOR_KEYS = new Set([
|
|
1893
|
+
'!=',
|
|
1894
|
+
'!==',
|
|
1895
|
+
'==',
|
|
1896
|
+
'===',
|
|
1893
1897
|
'$and',
|
|
1894
1898
|
'$not',
|
|
1895
1899
|
'$or',
|
|
@@ -1900,6 +1904,8 @@ const TABLE_UNSUPPORTED_FILTER_COMBINATOR_KEYS = new Set([
|
|
|
1900
1904
|
'oneOf',
|
|
1901
1905
|
'or',
|
|
1902
1906
|
]);
|
|
1907
|
+
const TABLE_FILTER_EQUALITY_OPERATORS = new Set(['==', '===']);
|
|
1908
|
+
const TABLE_FILTER_CONJUNCTION_OPERATORS = new Set(['and', '$and']);
|
|
1903
1909
|
/**
|
|
1904
1910
|
* Adapter that connects the AI Engine to a specific PraxisTable instance.
|
|
1905
1911
|
* Implements two-step intent flow + heuristics for contextual suggestions.
|
|
@@ -2032,6 +2038,7 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
2032
2038
|
'Do not use table.filter.apply for related-surface requests unless the user explicitly asks to find other records.',
|
|
2033
2039
|
'When runtimeOperations.filterExpression.supported is not true, do not materialize OR, alternative groups, or nested boolean filters; ask which single filter field/value should be applied or explain the limitation.',
|
|
2034
2040
|
'table.filter.apply accepts only simple conjunction criteria over declared fields; do not emit OR/AND groups, anyOf/oneOf/allOf, or nested boolean filter expressions. Ask for clarification or explain the limitation when the user needs alternatives.',
|
|
2041
|
+
'For boolean filters, use the boolean value expected by the declared field, for example { ativo: true } for an active-only filter when the catalog exposes ativo/status as a boolean criterion.',
|
|
2035
2042
|
...(runtimeExportFormats.length
|
|
2036
2043
|
? [
|
|
2037
2044
|
'Use table.export.run only when the user asks to run an export now; choose scope selected for selected records, filtered for filtered results, and ask for clarification when the user does not specify enough context.',
|
|
@@ -2084,6 +2091,7 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
2084
2091
|
'The user asks to change table configuration, visual rules, renderers, columns, behavior, actions, or appearance.',
|
|
2085
2092
|
],
|
|
2086
2093
|
rules: [
|
|
2094
|
+
'Do not use componentEditPlan for requests to apply, run, clear, or execute current filters against table data; those belong to runtime mode and tableRuntimeOperations.',
|
|
2087
2095
|
'Do not use rowAction.add for capability-discovery questions such as which row buttons or actions can be added; those belong to consult mode until the user explicitly asks to add one.',
|
|
2088
2096
|
'Do not use toolbar.action.add or bulkAction.add for capability-discovery questions such as which global actions, toolbar buttons, route buttons, or bulk buttons can be added; those belong to consult mode until the user explicitly asks to add one.',
|
|
2089
2097
|
'When the user asks to add a row button, row option, or action in each row for a declared record surface, use rowAction.add with capabilityPath "actions.row.actions[]".',
|
|
@@ -2103,11 +2111,16 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
2103
2111
|
preferredResponse: TABLE_RUNTIME_OPERATION_BATCH_KIND,
|
|
2104
2112
|
useWhen: [
|
|
2105
2113
|
'The user asks to execute a declared table runtime operation now, such as applying filters, exporting data, or opening a related dynamic-page surface.',
|
|
2114
|
+
'The user asks to filter the current table data by a declared filterFieldCatalog field or value, even when no records are selected.',
|
|
2106
2115
|
'The user selects records and asks to open, show, display, navigate to, or inspect a declared record surface such as a detail, team, timeline, history, payroll, or other related surface.',
|
|
2107
2116
|
'The user selects records and asks to filter or export using declared selectedRecordsContext and runtimeOperations.',
|
|
2108
2117
|
],
|
|
2109
2118
|
rules: [
|
|
2110
2119
|
'Return type "patch" with tableRuntimeOperations when the request can be materialized by a declared runtimeOperations operation.',
|
|
2120
|
+
'For table.filter.apply, emit tableRuntimeOperations.operations[] with operationId "table.filter.apply" and input.criteria using declared filterFieldCatalog field names.',
|
|
2121
|
+
'For boolean filters, use the boolean value expected by the declared field, for example { ativo: true } for an active-only filter when the catalog exposes ativo/status as a boolean criterion.',
|
|
2122
|
+
'For set filters whose declared field ends with "In", use an array value, for example { departamentoIdsIn: [22], cargoIdsIn: [10] }.',
|
|
2123
|
+
'For multiple requested filters, emit one table.filter.apply operation with simple conjunction criteria containing every requested declared filter field.',
|
|
2111
2124
|
'For dynamicPage.surface.open, emit tableRuntimeOperations.operations[] with operationId "dynamicPage.surface.open" and input.surfaceId equal to one declared recordSurfaces.surfaces[].id.',
|
|
2112
2125
|
'For dynamicPage.surface.open, choose a READ_PROJECTION or VIEW recordSurface when the user is asking to see or understand information; choose FORM or PARTIAL_FORM only when the user is asking to edit or update information.',
|
|
2113
2126
|
'Do not answer with a textual confirmation before emitting dynamicPage.surface.open when a single requested record surface is declared and the user asks to open or show it now.',
|
|
@@ -2392,6 +2405,7 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
2392
2405
|
const relatedColumnFields = this.toStringArray(field['relatedColumnFields']);
|
|
2393
2406
|
const relatedColumnLabels = this.toStringArray(field['relatedColumnLabels']);
|
|
2394
2407
|
const criterionSemantics = this.inferFilterCriterionSemantics(field);
|
|
2408
|
+
const valueHints = this.buildFilterFieldValueHints(field, relatedColumnFields);
|
|
2395
2409
|
return {
|
|
2396
2410
|
name: field['name'],
|
|
2397
2411
|
label: field['label'] ?? field['name'],
|
|
@@ -2399,12 +2413,53 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
2399
2413
|
controlType: field['controlType'] ?? null,
|
|
2400
2414
|
...(relatedColumnFields.length ? { relatedColumnFields } : {}),
|
|
2401
2415
|
...(relatedColumnLabels.length ? { relatedColumnLabels } : {}),
|
|
2416
|
+
...(valueHints.length ? { valueHints } : {}),
|
|
2402
2417
|
...(criterionSemantics ? criterionSemantics : {}),
|
|
2403
2418
|
...(aliases.length ? { aliases } : {}),
|
|
2404
2419
|
};
|
|
2405
2420
|
}),
|
|
2406
2421
|
};
|
|
2407
2422
|
}
|
|
2423
|
+
buildFilterFieldValueHints(field, relatedColumnFields) {
|
|
2424
|
+
const values = new Set();
|
|
2425
|
+
const add = (value) => {
|
|
2426
|
+
const text = typeof value === 'string'
|
|
2427
|
+
? value.trim()
|
|
2428
|
+
: typeof value === 'number' || typeof value === 'boolean'
|
|
2429
|
+
? String(value)
|
|
2430
|
+
: '';
|
|
2431
|
+
if (!text || text.length < 2)
|
|
2432
|
+
return;
|
|
2433
|
+
values.add(text);
|
|
2434
|
+
};
|
|
2435
|
+
const options = Array.isArray(field['options']) ? field['options'] : [];
|
|
2436
|
+
const labelKey = typeof field['optionLabelKey'] === 'string' && field['optionLabelKey'].trim()
|
|
2437
|
+
? field['optionLabelKey'].trim()
|
|
2438
|
+
: 'label';
|
|
2439
|
+
const valueKey = typeof field['optionValueKey'] === 'string' && field['optionValueKey'].trim()
|
|
2440
|
+
? field['optionValueKey'].trim()
|
|
2441
|
+
: 'value';
|
|
2442
|
+
for (const option of options) {
|
|
2443
|
+
if (option && typeof option === 'object') {
|
|
2444
|
+
const record = option;
|
|
2445
|
+
add(record[labelKey] ?? record['label'] ?? record['name'] ?? record['description']);
|
|
2446
|
+
add(record[valueKey] ?? record['value'] ?? record['id'] ?? record['key']);
|
|
2447
|
+
}
|
|
2448
|
+
else {
|
|
2449
|
+
add(option);
|
|
2450
|
+
}
|
|
2451
|
+
}
|
|
2452
|
+
const fields = relatedColumnFields.length ? relatedColumnFields : [String(field['name'] || '')].filter(Boolean);
|
|
2453
|
+
const rows = Array.isArray(this.table.dataSource?.data) ? this.table.dataSource.data : [];
|
|
2454
|
+
for (const row of rows.slice(0, 50)) {
|
|
2455
|
+
if (!row || typeof row !== 'object')
|
|
2456
|
+
continue;
|
|
2457
|
+
for (const sourceField of fields) {
|
|
2458
|
+
add(row[sourceField]);
|
|
2459
|
+
}
|
|
2460
|
+
}
|
|
2461
|
+
return [...values].slice(0, 40);
|
|
2462
|
+
}
|
|
2408
2463
|
getFilterSchemaFields() {
|
|
2409
2464
|
const tableWithFilterSchema = this.table;
|
|
2410
2465
|
try {
|
|
@@ -2718,6 +2773,7 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
2718
2773
|
const raw = this.toRecord(source[TABLE_RUNTIME_OPERATION_PATCH_KEY])
|
|
2719
2774
|
?? this.toRecord(source['runtimeOperationBatch'])
|
|
2720
2775
|
?? this.toRecord(source['tableRuntimeOperation'])
|
|
2776
|
+
?? (this.stringValue(source['kind']) === TABLE_RUNTIME_OPERATION_BATCH_KIND ? source : null)
|
|
2721
2777
|
?? nestedComponentEditPlan;
|
|
2722
2778
|
const directOperation = this.toRecord(source['runtimeOperation']);
|
|
2723
2779
|
const directOperations = Array.isArray(source['runtimeOperations']) ? source['runtimeOperations'] : null;
|
|
@@ -2748,7 +2804,9 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
2748
2804
|
coerceTableRuntimeOperationBatchFromText(source) {
|
|
2749
2805
|
for (const key of ['message', 'assistantMessage', 'content', 'explanation']) {
|
|
2750
2806
|
const text = this.stringValue(source[key]);
|
|
2751
|
-
if (!text
|
|
2807
|
+
if (!text
|
|
2808
|
+
|| !text.includes('operationId')
|
|
2809
|
+
|| (!text.includes(TABLE_RUNTIME_OPERATION_PATCH_KEY) && !text.includes(TABLE_RUNTIME_OPERATION_BATCH_KIND))) {
|
|
2752
2810
|
continue;
|
|
2753
2811
|
}
|
|
2754
2812
|
const parsed = this.parseRuntimeOperationJsonFromText(text);
|
|
@@ -2817,7 +2875,7 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
2817
2875
|
const warnings = [];
|
|
2818
2876
|
for (const operation of batch.operations) {
|
|
2819
2877
|
if (operation.operationId === 'table.filter.apply') {
|
|
2820
|
-
const criteria = this.toRecord(operation.input['criteria']);
|
|
2878
|
+
const criteria = this.normalizeRuntimeFilterCriteria(this.toRecord(operation.input['criteria']));
|
|
2821
2879
|
if (!criteria) {
|
|
2822
2880
|
return {
|
|
2823
2881
|
success: false,
|
|
@@ -3069,6 +3127,109 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
3069
3127
|
return Array.isArray(value) || this.toRecord(value) !== null;
|
|
3070
3128
|
});
|
|
3071
3129
|
}
|
|
3130
|
+
normalizeRuntimeFilterCriteria(criteria) {
|
|
3131
|
+
if (!criteria)
|
|
3132
|
+
return null;
|
|
3133
|
+
const jsonLogicCriteria = this.tryNormalizeJsonLogicFilterCriteria(criteria);
|
|
3134
|
+
if (jsonLogicCriteria)
|
|
3135
|
+
return jsonLogicCriteria;
|
|
3136
|
+
const normalized = {};
|
|
3137
|
+
let changed = false;
|
|
3138
|
+
for (const [field, value] of Object.entries(criteria)) {
|
|
3139
|
+
const canonicalField = this.normalizeRuntimeFilterFieldName(field);
|
|
3140
|
+
const fieldCriteria = this.normalizeRuntimeFilterFieldCriterion(canonicalField, value);
|
|
3141
|
+
normalized[canonicalField] = fieldCriteria;
|
|
3142
|
+
changed = changed || canonicalField !== field || fieldCriteria !== value;
|
|
3143
|
+
}
|
|
3144
|
+
return changed ? normalized : criteria;
|
|
3145
|
+
}
|
|
3146
|
+
tryNormalizeJsonLogicFilterCriteria(criteria) {
|
|
3147
|
+
const entries = Object.entries(criteria);
|
|
3148
|
+
if (entries.length !== 1)
|
|
3149
|
+
return null;
|
|
3150
|
+
const [operator, value] = entries[0];
|
|
3151
|
+
if (TABLE_FILTER_EQUALITY_OPERATORS.has(operator)) {
|
|
3152
|
+
return this.normalizeRuntimeFilterEquality(value);
|
|
3153
|
+
}
|
|
3154
|
+
if (TABLE_FILTER_CONJUNCTION_OPERATORS.has(operator) && Array.isArray(value)) {
|
|
3155
|
+
const normalized = {};
|
|
3156
|
+
for (const clause of value) {
|
|
3157
|
+
const clauseRecord = this.toRecord(clause);
|
|
3158
|
+
const clauseCriteria = clauseRecord ? this.tryNormalizeJsonLogicFilterCriteria(clauseRecord) : null;
|
|
3159
|
+
if (!clauseCriteria)
|
|
3160
|
+
return null;
|
|
3161
|
+
for (const [field, criterion] of Object.entries(clauseCriteria)) {
|
|
3162
|
+
normalized[field] = criterion;
|
|
3163
|
+
}
|
|
3164
|
+
}
|
|
3165
|
+
return Object.keys(normalized).length ? normalized : null;
|
|
3166
|
+
}
|
|
3167
|
+
return null;
|
|
3168
|
+
}
|
|
3169
|
+
normalizeRuntimeFilterEquality(value) {
|
|
3170
|
+
if (!Array.isArray(value) || value.length !== 2)
|
|
3171
|
+
return null;
|
|
3172
|
+
const leftField = this.normalizeRuntimeFilterFieldName(this.jsonLogicVarField(value[0]));
|
|
3173
|
+
const rightField = this.normalizeRuntimeFilterFieldName(this.jsonLogicVarField(value[1]));
|
|
3174
|
+
if (leftField && !rightField)
|
|
3175
|
+
return { [leftField]: this.normalizeRuntimeFilterCriterionValue(leftField, value[1]) };
|
|
3176
|
+
if (rightField && !leftField)
|
|
3177
|
+
return { [rightField]: this.normalizeRuntimeFilterCriterionValue(rightField, value[0]) };
|
|
3178
|
+
return null;
|
|
3179
|
+
}
|
|
3180
|
+
normalizeRuntimeFilterFieldName(field) {
|
|
3181
|
+
if (!field)
|
|
3182
|
+
return '';
|
|
3183
|
+
const raw = field.trim();
|
|
3184
|
+
if (!raw)
|
|
3185
|
+
return '';
|
|
3186
|
+
const normalized = this.normalizeAliasValue(raw);
|
|
3187
|
+
if (!normalized)
|
|
3188
|
+
return raw;
|
|
3189
|
+
const matches = this.getFilterSchemaFields()
|
|
3190
|
+
.map((candidate) => {
|
|
3191
|
+
const name = this.stringValue(candidate['name']);
|
|
3192
|
+
if (!name)
|
|
3193
|
+
return null;
|
|
3194
|
+
const aliases = new Set();
|
|
3195
|
+
this.addFilterFieldAlias(aliases, name);
|
|
3196
|
+
this.addFilterFieldAlias(aliases, candidate['label']);
|
|
3197
|
+
this.toStringArray(candidate['aliases']).forEach((alias) => this.addFilterFieldAlias(aliases, alias));
|
|
3198
|
+
this.toStringArray(candidate['relatedColumnFields']).forEach((alias) => this.addFilterFieldAlias(aliases, alias));
|
|
3199
|
+
this.toStringArray(candidate['relatedColumnLabels']).forEach((alias) => this.addFilterFieldAlias(aliases, alias));
|
|
3200
|
+
return aliases.has(normalized) ? name : null;
|
|
3201
|
+
})
|
|
3202
|
+
.filter((name) => !!name);
|
|
3203
|
+
return matches.length === 1 ? matches[0] : raw;
|
|
3204
|
+
}
|
|
3205
|
+
normalizeRuntimeFilterCriterionValue(field, value) {
|
|
3206
|
+
if (/In$/u.test(field) && !Array.isArray(value)) {
|
|
3207
|
+
return [value];
|
|
3208
|
+
}
|
|
3209
|
+
return value;
|
|
3210
|
+
}
|
|
3211
|
+
normalizeRuntimeFilterFieldCriterion(field, value) {
|
|
3212
|
+
const record = this.toRecord(value);
|
|
3213
|
+
if (!record)
|
|
3214
|
+
return this.normalizeRuntimeFilterCriterionValue(field, value);
|
|
3215
|
+
const entries = Object.entries(record);
|
|
3216
|
+
if (entries.length !== 1)
|
|
3217
|
+
return value;
|
|
3218
|
+
const [operator, criterion] = entries[0];
|
|
3219
|
+
if (!TABLE_FILTER_EQUALITY_OPERATORS.has(operator))
|
|
3220
|
+
return value;
|
|
3221
|
+
return this.normalizeRuntimeFilterCriterionValue(field, criterion);
|
|
3222
|
+
}
|
|
3223
|
+
jsonLogicVarField(value) {
|
|
3224
|
+
const record = this.toRecord(value);
|
|
3225
|
+
if (!record)
|
|
3226
|
+
return null;
|
|
3227
|
+
const raw = record['var'];
|
|
3228
|
+
if (typeof raw !== 'string')
|
|
3229
|
+
return null;
|
|
3230
|
+
const field = raw.trim();
|
|
3231
|
+
return field ? field : null;
|
|
3232
|
+
}
|
|
3072
3233
|
stringValue(value) {
|
|
3073
3234
|
return typeof value === 'string' ? value.trim() : '';
|
|
3074
3235
|
}
|
|
@@ -3525,7 +3686,17 @@ Columns Analysis:
|
|
|
3525
3686
|
const patchCols = patch.columns;
|
|
3526
3687
|
const mergedCols = originalCols.map((origCol) => {
|
|
3527
3688
|
const match = patchCols.find((p) => p.field === origCol.field);
|
|
3528
|
-
|
|
3689
|
+
if (!match)
|
|
3690
|
+
return origCol;
|
|
3691
|
+
const normalizedMatch = this.normalizeBooleanValueMappingColumnPatch(origCol, match);
|
|
3692
|
+
const merged = deepMerge(origCol, normalizedMatch);
|
|
3693
|
+
if (Array.isArray(normalizedMatch.conditionalRenderers)) {
|
|
3694
|
+
merged.conditionalRenderers = normalizedMatch.conditionalRenderers;
|
|
3695
|
+
}
|
|
3696
|
+
if (Array.isArray(normalizedMatch.conditionalStyles)) {
|
|
3697
|
+
merged.conditionalStyles = normalizedMatch.conditionalStyles;
|
|
3698
|
+
}
|
|
3699
|
+
return merged;
|
|
3529
3700
|
});
|
|
3530
3701
|
patchCols.forEach((pCol) => {
|
|
3531
3702
|
if (!originalCols.find((o) => o.field === pCol.field)) {
|
|
@@ -3536,6 +3707,84 @@ Columns Analysis:
|
|
|
3536
3707
|
}
|
|
3537
3708
|
return result;
|
|
3538
3709
|
}
|
|
3710
|
+
normalizeBooleanValueMappingColumnPatch(origCol, patchCol) {
|
|
3711
|
+
const mapping = this.toRecord(patchCol.valueMapping);
|
|
3712
|
+
if (!mapping || Array.isArray(patchCol.conditionalRenderers))
|
|
3713
|
+
return patchCol;
|
|
3714
|
+
const trueLabel = this.stringValue(mapping['true'] ?? mapping['TRUE'] ?? mapping['1']);
|
|
3715
|
+
const falseLabel = this.stringValue(mapping['false'] ?? mapping['FALSE'] ?? mapping['0']);
|
|
3716
|
+
if (!trueLabel || !falseLabel || !this.isBooleanPresentationColumn(origCol, patchCol)) {
|
|
3717
|
+
return patchCol;
|
|
3718
|
+
}
|
|
3719
|
+
const normalized = { ...patchCol };
|
|
3720
|
+
delete normalized['valueMapping'];
|
|
3721
|
+
normalized['format'] = `custom|${trueLabel}|${falseLabel}`;
|
|
3722
|
+
const existingRules = Array.isArray(origCol.conditionalRenderers)
|
|
3723
|
+
? origCol.conditionalRenderers
|
|
3724
|
+
: [];
|
|
3725
|
+
const nextRules = existingRules
|
|
3726
|
+
.map((rule) => this.relabelBooleanConditionalRenderer(rule, trueLabel, falseLabel))
|
|
3727
|
+
.filter((rule) => !!rule);
|
|
3728
|
+
if (nextRules.length) {
|
|
3729
|
+
normalized['conditionalRenderers'] = nextRules;
|
|
3730
|
+
}
|
|
3731
|
+
return normalized;
|
|
3732
|
+
}
|
|
3733
|
+
isBooleanPresentationColumn(origCol, patchCol) {
|
|
3734
|
+
const type = this.stringValue(patchCol.type ?? origCol.type ?? origCol.dataType).toLowerCase();
|
|
3735
|
+
if (type === 'boolean' || type === 'bool')
|
|
3736
|
+
return true;
|
|
3737
|
+
const format = this.stringValue(patchCol.format ?? origCol.format);
|
|
3738
|
+
if (this.looksLikeBooleanFormat(format))
|
|
3739
|
+
return true;
|
|
3740
|
+
const rules = Array.isArray(origCol.conditionalRenderers)
|
|
3741
|
+
? origCol.conditionalRenderers
|
|
3742
|
+
: [];
|
|
3743
|
+
return rules.some((rule) => this.booleanConditionValue(rule?.condition) !== null);
|
|
3744
|
+
}
|
|
3745
|
+
relabelBooleanConditionalRenderer(rule, trueLabel, falseLabel) {
|
|
3746
|
+
const value = this.booleanConditionValue(rule?.condition);
|
|
3747
|
+
if (value === null)
|
|
3748
|
+
return rule;
|
|
3749
|
+
const renderer = this.toRecord(rule?.renderer);
|
|
3750
|
+
if (!renderer)
|
|
3751
|
+
return rule;
|
|
3752
|
+
const rendererType = this.stringValue(renderer['type']);
|
|
3753
|
+
const visual = rendererType ? this.toRecord(renderer[rendererType]) : null;
|
|
3754
|
+
if (!rendererType || !visual)
|
|
3755
|
+
return rule;
|
|
3756
|
+
const label = value ? trueLabel : falseLabel;
|
|
3757
|
+
return {
|
|
3758
|
+
...rule,
|
|
3759
|
+
renderer: {
|
|
3760
|
+
...renderer,
|
|
3761
|
+
[rendererType]: {
|
|
3762
|
+
...visual,
|
|
3763
|
+
...(Object.prototype.hasOwnProperty.call(visual, 'label')
|
|
3764
|
+
? { label }
|
|
3765
|
+
: { text: label }),
|
|
3766
|
+
},
|
|
3767
|
+
},
|
|
3768
|
+
};
|
|
3769
|
+
}
|
|
3770
|
+
booleanConditionValue(condition) {
|
|
3771
|
+
const record = this.toRecord(condition);
|
|
3772
|
+
if (!record)
|
|
3773
|
+
return null;
|
|
3774
|
+
const entries = Object.entries(record);
|
|
3775
|
+
if (entries.length !== 1)
|
|
3776
|
+
return null;
|
|
3777
|
+
const [operator, args] = entries[0];
|
|
3778
|
+
if (!['==', '==='].includes(operator) || !Array.isArray(args))
|
|
3779
|
+
return null;
|
|
3780
|
+
for (const arg of args) {
|
|
3781
|
+
if (arg === true)
|
|
3782
|
+
return true;
|
|
3783
|
+
if (arg === false)
|
|
3784
|
+
return false;
|
|
3785
|
+
}
|
|
3786
|
+
return null;
|
|
3787
|
+
}
|
|
3539
3788
|
applyConfig(config) {
|
|
3540
3789
|
const prev = this.table.config;
|
|
3541
3790
|
this.table.config = config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { A as AnalyticsTableConfigAdapterService, a as AnalyticsTableContractService, b as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, c as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, d as ColumnsConfigEditorComponent, D as DATE_PRESETS, e as DataFormatterComponent, f as DataFormattingService, F as FORMULA_TEMPLATES, g as FilterConfigService, h as FilterSettingsComponent, i as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, j as PRAXIS_FILTER_COMPONENT_METADATA, k as PRAXIS_TABLE_AUTHORING_MANIFEST, l as PRAXIS_TABLE_COMPONENT_METADATA, m as
|
|
1
|
+
export { A as AnalyticsTableConfigAdapterService, a as AnalyticsTableContractService, b as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, c as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, d as ColumnsConfigEditorComponent, D as DATE_PRESETS, e as DataFormatterComponent, f as DataFormattingService, F as FORMULA_TEMPLATES, g as FilterConfigService, h as FilterSettingsComponent, i as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, j as PRAXIS_FILTER_COMPONENT_METADATA, k as PRAXIS_TABLE_AUTHORING_MANIFEST, l as PRAXIS_TABLE_COMPONENT_METADATA, m as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, n as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, o as PraxisFilter, p as PraxisFilterWidgetConfigEditor, q as PraxisTable, r as PraxisTableConfigEditor, s as PraxisTableInlineAuthoringEditorComponent, t as PraxisTableToolbar, u as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, v as TABLE_COMPONENT_AI_CAPABILITIES, w as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, x as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, y as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, z as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, E as TABLE_COMPONENT_EDIT_PLAN_KIND, H as TABLE_COMPONENT_EDIT_PLAN_VERSION, I as TASK_PRESETS, K as TableDefaultsProvider, L as TableRulesEditorComponent, O as ToolbarActionsEditorComponent, V as ValueMappingEditorComponent, Q as VisualFormulaBuilderComponent, R as buildTableApplyPlan, U as coerceTableComponentEditPlan, W as coerceTableComponentEditPlans, X as compileTableComponentEditPlan, Y as compileTableComponentEditPlans, Z as createTableAuthoringDocument, _ as getActionId, $ as getEnum, a0 as getTableCapabilities, a1 as getTableComponentEditPlanCapabilities, a2 as isTableRendererSupportedByRichContentP0, a3 as mapTableRendererToRichContentP0, a4 as normalizeTableAuthoringDocument, a5 as parseLegacyOrTableDocument, a6 as providePraxisFilterMetadata, a7 as providePraxisTableMetadata, a8 as providePraxisTableToolbarAppearance, a9 as serializeTableAuthoringDocument, aa as toCanonicalTableConfig, ab as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-DDQAk0TJ.mjs';
|
package/package.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/table",
|
|
3
|
-
"version": "8.0.0-beta.
|
|
3
|
+
"version": "8.0.0-beta.87",
|
|
4
4
|
"description": "Advanced data table for Angular (Praxis UI) with editing, filtering, sorting, virtualization, and settings panel integration.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
|
-
"@praxisui/ai": "^8.0.0-beta.
|
|
9
|
-
"@praxisui/core": "^8.0.0-beta.
|
|
10
|
-
"@praxisui/dynamic-fields": "^8.0.0-beta.
|
|
11
|
-
"@praxisui/dynamic-form": "^8.0.0-beta.
|
|
12
|
-
"@praxisui/metadata-editor": "^8.0.0-beta.
|
|
13
|
-
"@praxisui/rich-content": "^8.0.0-beta.
|
|
14
|
-
"@praxisui/settings-panel": "^8.0.0-beta.
|
|
15
|
-
"@praxisui/table-rule-builder": "^8.0.0-beta.
|
|
8
|
+
"@praxisui/ai": "^8.0.0-beta.87",
|
|
9
|
+
"@praxisui/core": "^8.0.0-beta.87",
|
|
10
|
+
"@praxisui/dynamic-fields": "^8.0.0-beta.87",
|
|
11
|
+
"@praxisui/dynamic-form": "^8.0.0-beta.87",
|
|
12
|
+
"@praxisui/metadata-editor": "^8.0.0-beta.87",
|
|
13
|
+
"@praxisui/rich-content": "^8.0.0-beta.87",
|
|
14
|
+
"@praxisui/settings-panel": "^8.0.0-beta.87",
|
|
15
|
+
"@praxisui/table-rule-builder": "^8.0.0-beta.87",
|
|
16
16
|
"@angular/cdk": "^21.0.0",
|
|
17
17
|
"@angular/forms": "^21.0.0",
|
|
18
18
|
"@angular/material": "^21.0.0",
|
|
19
19
|
"@angular/router": "^21.0.0",
|
|
20
|
-
"@praxisui/dialog": "^8.0.0-beta.
|
|
20
|
+
"@praxisui/dialog": "^8.0.0-beta.87",
|
|
21
21
|
"rxjs": "~7.8.0"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
@@ -316,6 +316,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
316
316
|
| `behavior.expansion.interaction.motion` | object | No | runtime-defaults | preset-driven | Presets controlados (`none`, `subtle-slide`, `accordion`, `fade-scale`) com respeito a `prefers-reduced-motion`; `durationMs` aceita `0` para desabilitar motion temporal. |
|
|
317
317
|
| `appearance.responsive` | object | No | component-defaults | numeric-breakpoint | Breakpoint móvel inválido é normalizado para `768`. |
|
|
318
318
|
| `toolbar.actions[]` | array | No | `[]` | action-contract | Ações de toolbar com roteamento para `toolbarAction`/`bulkAction`. |
|
|
319
|
+
| `toolbar.appearance` | object | No | Material 3 fallback | token-contract | Governa variante, densidade, forma, divisores e tokens públicos da toolbar sem alterar a semântica das ações. |
|
|
319
320
|
| `actions.row.actions[].recordSurface` | object | No | none | `ResourceSurfaceCatalogItem` | Preserva a identidade canônica da superfície relacionada aberta por uma ação de linha, mantendo `actions.row.actions[].id` como identidade do botão. |
|
|
320
321
|
| `actions.row.discovery.enabled` | boolean | No | `true` | row-action-discovery | Controla se row actions podem ser enriquecidas por HATEOAS/capabilities. Configure `false` para manter somente ações declaradas em `actions.row.actions[]`. |
|
|
321
322
|
| `columns[].renderer` | object | No | field-type-driven | renderer-contract | Renderers condicionais, payload expr e ações interativas. |
|
|
@@ -329,6 +330,8 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
329
330
|
|
|
330
331
|
- O bloco `toolbar` continua parte do contrato público principal.
|
|
331
332
|
- Use `toolbar.actions[]` para quick actions e `toolbar.search` para busca quando o host não injeta shell própria.
|
|
333
|
+
- Use `toolbar.appearance` para personalizar o chrome da toolbar por contrato governado. O runtime materializa `variant`, `density`, `shape`, `divider` e `tokens` como classes e CSS custom properties públicas; o host pode trocar aparência sem redefinir intenção, capability ou roteamento.
|
|
334
|
+
- Tokens públicos suportados em `toolbar.appearance.tokens`: `bg`, `fg`, `borderColor`, `borderWidth`, `radius`, `shadow`, `paddingBlock`, `paddingInline`, `minHeight`, `gap`, `actionsGap`, `dividerColor`, `actionSize`, `actionRadius`, `actionBg`, `actionFg`, `actionHoverBg`, `actionActiveBg`, `actionFocusRing`, `aiAccentColor` e `statusFg`.
|
|
332
335
|
- Para localizar paths específicos de toolbar, complemente a leitura com o `Appendix: JSON path index`.
|
|
333
336
|
|
|
334
337
|
### Messages contract
|
|
@@ -1157,6 +1160,7 @@ A superficie usa `horizontalScroll` com classes:
|
|
|
1157
1160
|
| `columns[]` | `TableColumnConfig[]` | Yes | `[]` | Active | Definicao de colunas, renderers e regras de exibicao. |
|
|
1158
1161
|
| `behavior` | `TableBehaviorConfig` | No | defaults do runtime | Partial | Inclui paginacao, filtro, selecao e expansao por blocos. |
|
|
1159
1162
|
| `toolbar.actions[]` | `ToolbarActionConfig[]` | No | `[]` | Partial | Acoes de toolbar com roteamento para `toolbarAction` e `bulkAction`. |
|
|
1163
|
+
| `toolbar.appearance` | `TableToolbarAppearanceConfig` | No | fallback M3 | Active | Chrome visual governado da toolbar; tokens viram `--p-table-toolbar-*` no runtime. |
|
|
1160
1164
|
| `messages` | `TableMessagesConfig` | No | defaults internos | Partial | Overrides de i18n e mensagens operacionais. |
|
|
1161
1165
|
| `data` | `TableDataConfig` | No | modo local/remoto autodetectado | Partial | Integra origem local ou remota conforme `resourcePath`/inputs. |
|
|
1162
1166
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _praxisui_core from '@praxisui/core';
|
|
2
|
-
import { TableConfig, LoggerService, PraxisI18nService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, PraxisExportScope, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
|
|
2
|
+
import { TableToolbarAppearanceConfig, TableConfig, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceDensity, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, PraxisExportScope, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { OnDestroy, EventEmitter, ElementRef, OnInit, OnChanges, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef,
|
|
4
|
+
import { InjectionToken, OnDestroy, EventEmitter, ElementRef, Provider, OnInit, OnChanges, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef, AfterContentInit, Injector } from '@angular/core';
|
|
5
5
|
import { ActivatedRoute } from '@angular/router';
|
|
6
6
|
import { MatTable, MatTableDataSource } from '@angular/material/table';
|
|
7
7
|
import * as _angular_material_paginator from '@angular/material/paginator';
|
|
@@ -36,11 +36,17 @@ interface ActionLike {
|
|
|
36
36
|
}
|
|
37
37
|
declare function getActionId(action: ActionLike): string;
|
|
38
38
|
|
|
39
|
+
declare const PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE: InjectionToken<TableToolbarAppearanceConfig>;
|
|
40
|
+
declare const PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS: InjectionToken<Record<string, TableToolbarAppearanceConfig>>;
|
|
41
|
+
declare function providePraxisTableToolbarAppearance(appearance: TableToolbarAppearanceConfig, presets?: Record<string, TableToolbarAppearanceConfig>): Provider[];
|
|
39
42
|
declare class PraxisTableToolbar implements OnDestroy {
|
|
40
43
|
private hostRef;
|
|
41
44
|
private logger?;
|
|
42
45
|
private i18n?;
|
|
46
|
+
private defaultAppearance?;
|
|
47
|
+
private tokenPresets?;
|
|
43
48
|
config?: TableConfig;
|
|
49
|
+
appearance?: TableToolbarAppearanceConfig | null;
|
|
44
50
|
backgroundColor: string | null;
|
|
45
51
|
placement: 'header' | 'footer';
|
|
46
52
|
showMain: boolean;
|
|
@@ -67,12 +73,25 @@ declare class PraxisTableToolbar implements OnDestroy {
|
|
|
67
73
|
private readonly warnedShortcutConflicts;
|
|
68
74
|
private fallbackLogger?;
|
|
69
75
|
private fallbackLoggerEnvironment;
|
|
70
|
-
constructor(hostRef?: ElementRef<HTMLElement> | null, logger?: LoggerService | undefined, i18n?: PraxisI18nService | undefined);
|
|
76
|
+
constructor(hostRef?: ElementRef<HTMLElement> | null, logger?: LoggerService | undefined, i18n?: PraxisI18nService | undefined, defaultAppearance?: TableToolbarAppearanceConfig | undefined, tokenPresets?: Record<string, TableToolbarAppearanceConfig> | undefined);
|
|
77
|
+
getToolbarAriaLabel(): string;
|
|
78
|
+
getToolbarLeadingLabel(): string;
|
|
79
|
+
getToolbarActionsLabel(): string;
|
|
80
|
+
getToolbarConfigurationLabel(): string;
|
|
71
81
|
getExportDataLabel(): string;
|
|
72
82
|
getMoreActionsLabel(): string;
|
|
73
83
|
emitExportAction(event: Event, format: string): void;
|
|
74
84
|
private tx;
|
|
75
85
|
ngOnDestroy(): void;
|
|
86
|
+
getToolbarVariant(): TableToolbarAppearanceVariant;
|
|
87
|
+
getToolbarDensity(): TableToolbarAppearanceDensity;
|
|
88
|
+
getToolbarShape(): TableToolbarAppearanceShape;
|
|
89
|
+
getToolbarDivider(): TableToolbarAppearanceDivider;
|
|
90
|
+
getToolbarToken(name: TableToolbarTokenName): string | null;
|
|
91
|
+
private resolveToolbarAppearance;
|
|
92
|
+
private resolveToolbarAppearancePreset;
|
|
93
|
+
private mergeToolbarAppearance;
|
|
94
|
+
private normalizeTokenValue;
|
|
76
95
|
private getNestedPropertyValue;
|
|
77
96
|
private cloneForEmit;
|
|
78
97
|
private getLogger;
|
|
@@ -117,8 +136,8 @@ declare class PraxisTableToolbar implements OnDestroy {
|
|
|
117
136
|
private warnShortcutConflict;
|
|
118
137
|
private sortActions;
|
|
119
138
|
getExportIcon(format: string): string;
|
|
120
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableToolbar, [null, { optional: true; }, { optional: true; }]>;
|
|
121
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "exportBusy": { "alias": "exportBusy"; "required": false; }; "evaluationContext": { "alias": "evaluationContext"; "required": false; }; }, { "toolbarAction": "toolbarAction"; "exportAction": "exportAction"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
|
|
139
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableToolbar, [null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
140
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "exportBusy": { "alias": "exportBusy"; "required": false; }; "evaluationContext": { "alias": "evaluationContext"; "required": false; }; }, { "toolbarAction": "toolbarAction"; "exportAction": "exportAction"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
|
|
122
141
|
}
|
|
123
142
|
|
|
124
143
|
type ColumnDataType$1 = 'date' | 'number' | 'currency' | 'percentage' | 'string' | 'boolean' | 'custom';
|
|
@@ -619,6 +638,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
|
|
|
619
638
|
private computeIsMobile;
|
|
620
639
|
ngOnChanges(changes: SimpleChanges): void;
|
|
621
640
|
private areStringArraysEqual;
|
|
641
|
+
private normalizeFieldIdList;
|
|
622
642
|
private areMetadataOverrideMapsEqual;
|
|
623
643
|
/** Force-sync settings coming from parent table config updates. */
|
|
624
644
|
applyExternalSettings(cfg?: Partial<FilterConfig>): void;
|
|
@@ -1311,6 +1331,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
|
|
|
1311
1331
|
onAiAssistantQuickReply(reply: PraxisAssistantShellQuickReply): void;
|
|
1312
1332
|
getAiAssistantRecommendedIntents(): readonly PraxisAssistantRecommendedIntent[];
|
|
1313
1333
|
onAiAssistantRecommendedIntent(intent: PraxisAssistantRecommendedIntent): void;
|
|
1334
|
+
private getAiAssistantRecommendationResponseContract;
|
|
1314
1335
|
onAiAssistantEditMessage(message: PraxisAssistantShellMessage): void;
|
|
1315
1336
|
onAiAssistantResendMessage(message: PraxisAssistantShellMessage): void;
|
|
1316
1337
|
onAiAssistantLayoutChange(layout: PraxisAssistantShellLayout): void;
|
|
@@ -1713,6 +1734,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
|
|
|
1713
1734
|
private ensureRowCapabilitySnapshot;
|
|
1714
1735
|
private ensureRowActionCatalog;
|
|
1715
1736
|
private getCachedRowCapabilitySnapshot;
|
|
1737
|
+
private getAiAssistantRowDiscoveryLinks;
|
|
1738
|
+
private mergeRowCapabilitySnapshots;
|
|
1716
1739
|
private hasResolvedRowActionCatalog;
|
|
1717
1740
|
isRowDiscoveryPending(row: any): boolean;
|
|
1718
1741
|
private getCachedRowActionCatalog;
|
|
@@ -3800,6 +3823,9 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
|
|
|
3800
3823
|
toolbarVisible: boolean;
|
|
3801
3824
|
density: 'compact' | 'comfortable' | 'spacious';
|
|
3802
3825
|
toolbarActionsPosition: 'top' | 'bottom' | 'both';
|
|
3826
|
+
toolbarAppearanceVariant: 'flat' | 'outlined' | 'elevated' | 'integrated';
|
|
3827
|
+
toolbarAppearanceShape: 'square' | 'rounded' | 'pill';
|
|
3828
|
+
toolbarAppearanceDivider: 'none' | 'start' | 'between-groups';
|
|
3803
3829
|
toolbarHeight: number;
|
|
3804
3830
|
toolbarActionsBackgroundColor: string;
|
|
3805
3831
|
paginationEnabled: boolean;
|
|
@@ -3827,6 +3853,9 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
|
|
|
3827
3853
|
setToolbarVisible(value: boolean): void;
|
|
3828
3854
|
setDensity(value: 'compact' | 'comfortable' | 'spacious'): void;
|
|
3829
3855
|
setToolbarActionsPosition(value: 'top' | 'bottom' | 'both'): void;
|
|
3856
|
+
setToolbarAppearanceVariant(value: 'flat' | 'outlined' | 'elevated' | 'integrated'): void;
|
|
3857
|
+
setToolbarAppearanceShape(value: 'square' | 'rounded' | 'pill'): void;
|
|
3858
|
+
setToolbarAppearanceDivider(value: 'none' | 'start' | 'between-groups'): void;
|
|
3830
3859
|
setToolbarHeight(value: number | string): void;
|
|
3831
3860
|
setToolbarActionsBackgroundColor(value: string): void;
|
|
3832
3861
|
setPaginationEnabled(value: boolean): void;
|
|
@@ -3854,6 +3883,7 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
|
|
|
3854
3883
|
tx(key: string, fallback: string): string;
|
|
3855
3884
|
private emitConfig;
|
|
3856
3885
|
private patchToolbar;
|
|
3886
|
+
private patchToolbarAppearance;
|
|
3857
3887
|
private patchBehavior;
|
|
3858
3888
|
private patchPagination;
|
|
3859
3889
|
private patchSorting;
|
|
@@ -4441,5 +4471,5 @@ declare function coerceTableComponentEditPlan(value: unknown): TableComponentEdi
|
|
|
4441
4471
|
declare function compileTableComponentEditPlans(plans: TableComponentEditPlan[], currentConfig: TableConfig): TableComponentEditPlanCompileResult;
|
|
4442
4472
|
declare function compileTableComponentEditPlan(plan: TableComponentEditPlan, currentConfig: TableConfig): TableComponentEditPlanCompileResult;
|
|
4443
4473
|
|
|
4444
|
-
export { AnalyticsTableConfigAdapterService, AnalyticsTableContractService, AnalyticsTableStatsApiService, BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_TABLE_AUTHORING_MANIFEST, PRAXIS_TABLE_COMPONENT_METADATA, PraxisFilter, PraxisFilterWidgetConfigEditor, PraxisTable, PraxisTableConfigEditor, PraxisTableInlineAuthoringEditorComponent, PraxisTableToolbar, PraxisTableWidgetConfigEditor, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, TABLE_COMPONENT_EDIT_PLAN_KIND, TABLE_COMPONENT_EDIT_PLAN_VERSION, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
|
|
4474
|
+
export { AnalyticsTableConfigAdapterService, AnalyticsTableContractService, AnalyticsTableStatsApiService, BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_TABLE_AUTHORING_MANIFEST, PRAXIS_TABLE_COMPONENT_METADATA, PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, PraxisFilter, PraxisFilterWidgetConfigEditor, PraxisTable, PraxisTableConfigEditor, PraxisTableInlineAuthoringEditorComponent, PraxisTableToolbar, PraxisTableWidgetConfigEditor, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, TABLE_COMPONENT_EDIT_PLAN_KIND, TABLE_COMPONENT_EDIT_PLAN_VERSION, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, providePraxisTableToolbarAppearance, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
|
|
4445
4475
|
export type { ActionLike, AnalyticsTableConfigAdapterOptions, AnalyticsTableContractDefinition, AnalyticsTableContractLoadOptions, AnalyticsTableContractLoadResult, AnalyticsTableContractSource, AnalyticsTableRow, AnalyticsTableViewModel, ArithmeticParams, BehaviorConfigChange, BooleanFormatterOptions, BulkAction, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, ColumnChange, ColumnDataType$1 as ColumnDataType, ConcatenationParams, ConditionalMappingParams, CurrencyFormatterOptions, DataFormattingOptions, DataMode, DateFormatterOptions, DefaultValueParams, EditorDiagnostic, EditorDocument, FieldSchema, FilterConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, PraxisFilterWidgetEditorInputs, PraxisFilterWidgetEditorValue, PraxisTableWidgetEditorInputs, PraxisTableWidgetEditorValue, ResourcePathIntent, RowAction, RowExpansionChangeBase, RowExpansionChangeEvent, RowExpansionReasonCode, RowExpansionTrigger, StringFormatterOptions, TableAiContext, TableAiNavigationContextPack, TableAiNavigationDestinationContext, TableApplyPlan, TableAuthoringDocument, TableBindings, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, TableComponentEditChangeKind, TableComponentEditPlan, TableComponentEditPlanCompileResult, ValueKind as TableComponentValueKind, TableHorizontalScroll, TableProjectionContext, TableRichContentP0Node, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };
|