@praxisui/table 10.0.0-rc.29 → 10.0.0-rc.30
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-table-authoring.mjs +10 -8
- package/fesm2022/{praxisui-table-praxisui-table-By0aZFU7.mjs → praxisui-table-praxisui-table-Dg1mPimH.mjs} +132 -25
- package/fesm2022/{praxisui-table-table-agentic-authoring-turn-flow-BbqceuRl.mjs → praxisui-table-table-agentic-authoring-turn-flow-B2nHomHJ.mjs} +1 -1
- package/fesm2022/{praxisui-table-table-ai.adapter-DIf5nJOG.mjs → praxisui-table-table-ai.adapter-D0gEqzlb.mjs} +1 -1
- package/fesm2022/praxisui-table.mjs +1 -1
- package/package.json +10 -10
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-16T15:16:17.774Z",
|
|
4
4
|
"packageName": "@praxisui/table",
|
|
5
|
-
"packageVersion": "10.0.0-rc.
|
|
5
|
+
"packageVersion": "10.0.0-rc.30",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 3,
|
|
@@ -466,7 +466,7 @@ function hasOffContractRichChildren(nodes) {
|
|
|
466
466
|
continue;
|
|
467
467
|
if (record['type'] === 'cardGrid' && Array.isArray(record['cards'])) {
|
|
468
468
|
for (const card of record['cards']) {
|
|
469
|
-
const content = card?.['content'];
|
|
469
|
+
const content = Array.isArray(card?.['content']) ? card?.['content'] : card?.['items'];
|
|
470
470
|
if (Array.isArray(content) && content.some((item) => !isTableDetailCardGridContentNode(item))) {
|
|
471
471
|
result.cardGrid = true;
|
|
472
472
|
}
|
|
@@ -511,8 +511,9 @@ function normalizeTableDetailRichChildren(schema) {
|
|
|
511
511
|
if (!node || typeof node !== 'object' || Array.isArray(node) || node['type'] === 'richContent')
|
|
512
512
|
continue;
|
|
513
513
|
if (node['type'] === 'cardGrid' && Array.isArray(node['cards'])) {
|
|
514
|
-
for (const card of node['cards'])
|
|
515
|
-
rewrite(card?.['content'], toTableDetailCardGridContentNode, isTableDetailCardGridContentNode);
|
|
514
|
+
for (const card of node['cards']) {
|
|
515
|
+
rewrite(Array.isArray(card?.['content']) ? card?.['content'] : card?.['items'], toTableDetailCardGridContentNode, isTableDetailCardGridContentNode);
|
|
516
|
+
}
|
|
516
517
|
}
|
|
517
518
|
if (node['type'] === 'compose')
|
|
518
519
|
rewrite(node['items'], toTableDetailComposeItemNode, isTableDetailComposeItemNode);
|
|
@@ -584,13 +585,13 @@ class TableDetailTreeDraft {
|
|
|
584
585
|
add(node, nested = false) {
|
|
585
586
|
const selectedEntry = this.selected();
|
|
586
587
|
const selected = selectedEntry?.node;
|
|
587
|
-
const isCardLike = selected?.type === 'card' || (!selected?.type && Array.isArray(selected?.content));
|
|
588
|
+
const isCardLike = selected?.type === 'card' || (!selected?.type && (Array.isArray(selected?.content) || Array.isArray(selected?.items)));
|
|
588
589
|
// Cards stored in `cardGrid.cards` follow TableDetailCardGridCardNode: rich presenters/compose only.
|
|
589
590
|
const isCardGridCard = !!selectedEntry && isCardLike && this.entries().some((entry) => entry.node['type'] === 'cardGrid' && entry.node['cards'] === selectedEntry.siblings);
|
|
590
591
|
const childKey = selected?.type === 'cardGrid'
|
|
591
592
|
? 'cards'
|
|
592
593
|
: (isCardLike || selected?.type === 'tab')
|
|
593
|
-
? 'content'
|
|
594
|
+
? (!Array.isArray(selected?.content) && Array.isArray(selected?.items) ? 'items' : 'content')
|
|
594
595
|
: 'items';
|
|
595
596
|
const parent = nested && selected ? selected : this.schema;
|
|
596
597
|
const key = nested && selected ? childKey : 'items';
|
|
@@ -602,7 +603,8 @@ class TableDetailTreeDraft {
|
|
|
602
603
|
node = structuredClone(node.cards[0]);
|
|
603
604
|
}
|
|
604
605
|
else if (node.type === 'card') {
|
|
605
|
-
const
|
|
606
|
+
const rawCardChildren = Array.isArray(node.content) ? node.content : Array.isArray(node.items) ? node.items : [];
|
|
607
|
+
const content = rawCardChildren
|
|
606
608
|
.map((child) => toTableDetailCardGridContentNode(child))
|
|
607
609
|
.filter((child) => !!child);
|
|
608
610
|
node = {
|
|
@@ -612,7 +614,7 @@ class TableDetailTreeDraft {
|
|
|
612
614
|
content: content.length ? content : [{ type: 'text', text: node.title || 'Detalhe' }],
|
|
613
615
|
};
|
|
614
616
|
}
|
|
615
|
-
else if (!Array.isArray(node.content)) {
|
|
617
|
+
else if (!Array.isArray(node.content) && !Array.isArray(node.items)) {
|
|
616
618
|
const content = toTableDetailCardGridContentNode(node);
|
|
617
619
|
if (!content)
|
|
618
620
|
return null;
|
|
@@ -636,7 +638,7 @@ class TableDetailTreeDraft {
|
|
|
636
638
|
node = item;
|
|
637
639
|
}
|
|
638
640
|
else if (nested && isCardLike && node.type === 'cardGrid' && Array.isArray(node.cards)) {
|
|
639
|
-
const firstCardContent = node.cards[0]?.content;
|
|
641
|
+
const firstCardContent = node.cards[0]?.content ?? node.cards[0]?.items;
|
|
640
642
|
if (Array.isArray(firstCardContent) && firstCardContent.length > 0) {
|
|
641
643
|
node = structuredClone(firstCardContent[0]);
|
|
642
644
|
}
|
|
@@ -20024,7 +20024,7 @@ function hasOffContractRichChildren(nodes) {
|
|
|
20024
20024
|
continue;
|
|
20025
20025
|
if (record['type'] === 'cardGrid' && Array.isArray(record['cards'])) {
|
|
20026
20026
|
for (const card of record['cards']) {
|
|
20027
|
-
const content = card?.['content'];
|
|
20027
|
+
const content = Array.isArray(card?.['content']) ? card?.['content'] : card?.['items'];
|
|
20028
20028
|
if (Array.isArray(content) && content.some((item) => !isTableDetailCardGridContentNode(item))) {
|
|
20029
20029
|
result.cardGrid = true;
|
|
20030
20030
|
}
|
|
@@ -20069,8 +20069,9 @@ function normalizeTableDetailRichChildren(schema) {
|
|
|
20069
20069
|
if (!node || typeof node !== 'object' || Array.isArray(node) || node['type'] === 'richContent')
|
|
20070
20070
|
continue;
|
|
20071
20071
|
if (node['type'] === 'cardGrid' && Array.isArray(node['cards'])) {
|
|
20072
|
-
for (const card of node['cards'])
|
|
20073
|
-
rewrite(card?.['content'], toTableDetailCardGridContentNode, isTableDetailCardGridContentNode);
|
|
20072
|
+
for (const card of node['cards']) {
|
|
20073
|
+
rewrite(Array.isArray(card?.['content']) ? card?.['content'] : card?.['items'], toTableDetailCardGridContentNode, isTableDetailCardGridContentNode);
|
|
20074
|
+
}
|
|
20074
20075
|
}
|
|
20075
20076
|
if (node['type'] === 'compose')
|
|
20076
20077
|
rewrite(node['items'], toTableDetailComposeItemNode, isTableDetailComposeItemNode);
|
|
@@ -20142,13 +20143,13 @@ class TableDetailTreeDraft {
|
|
|
20142
20143
|
add(node, nested = false) {
|
|
20143
20144
|
const selectedEntry = this.selected();
|
|
20144
20145
|
const selected = selectedEntry?.node;
|
|
20145
|
-
const isCardLike = selected?.type === 'card' || (!selected?.type && Array.isArray(selected?.content));
|
|
20146
|
+
const isCardLike = selected?.type === 'card' || (!selected?.type && (Array.isArray(selected?.content) || Array.isArray(selected?.items)));
|
|
20146
20147
|
// Cards stored in `cardGrid.cards` follow TableDetailCardGridCardNode: rich presenters/compose only.
|
|
20147
20148
|
const isCardGridCard = !!selectedEntry && isCardLike && this.entries().some((entry) => entry.node['type'] === 'cardGrid' && entry.node['cards'] === selectedEntry.siblings);
|
|
20148
20149
|
const childKey = selected?.type === 'cardGrid'
|
|
20149
20150
|
? 'cards'
|
|
20150
20151
|
: (isCardLike || selected?.type === 'tab')
|
|
20151
|
-
? 'content'
|
|
20152
|
+
? (!Array.isArray(selected?.content) && Array.isArray(selected?.items) ? 'items' : 'content')
|
|
20152
20153
|
: 'items';
|
|
20153
20154
|
const parent = nested && selected ? selected : this.schema;
|
|
20154
20155
|
const key = nested && selected ? childKey : 'items';
|
|
@@ -20160,7 +20161,8 @@ class TableDetailTreeDraft {
|
|
|
20160
20161
|
node = structuredClone(node.cards[0]);
|
|
20161
20162
|
}
|
|
20162
20163
|
else if (node.type === 'card') {
|
|
20163
|
-
const
|
|
20164
|
+
const rawCardChildren = Array.isArray(node.content) ? node.content : Array.isArray(node.items) ? node.items : [];
|
|
20165
|
+
const content = rawCardChildren
|
|
20164
20166
|
.map((child) => toTableDetailCardGridContentNode(child))
|
|
20165
20167
|
.filter((child) => !!child);
|
|
20166
20168
|
node = {
|
|
@@ -20170,7 +20172,7 @@ class TableDetailTreeDraft {
|
|
|
20170
20172
|
content: content.length ? content : [{ type: 'text', text: node.title || 'Detalhe' }],
|
|
20171
20173
|
};
|
|
20172
20174
|
}
|
|
20173
|
-
else if (!Array.isArray(node.content)) {
|
|
20175
|
+
else if (!Array.isArray(node.content) && !Array.isArray(node.items)) {
|
|
20174
20176
|
const content = toTableDetailCardGridContentNode(node);
|
|
20175
20177
|
if (!content)
|
|
20176
20178
|
return null;
|
|
@@ -20194,7 +20196,7 @@ class TableDetailTreeDraft {
|
|
|
20194
20196
|
node = item;
|
|
20195
20197
|
}
|
|
20196
20198
|
else if (nested && isCardLike && node.type === 'cardGrid' && Array.isArray(node.cards)) {
|
|
20197
|
-
const firstCardContent = node.cards[0]?.content;
|
|
20199
|
+
const firstCardContent = node.cards[0]?.content ?? node.cards[0]?.items;
|
|
20198
20200
|
if (Array.isArray(firstCardContent) && firstCardContent.length > 0) {
|
|
20199
20201
|
node = structuredClone(firstCardContent[0]);
|
|
20200
20202
|
}
|
|
@@ -23957,7 +23959,7 @@ class PraxisTable {
|
|
|
23957
23959
|
if (this.aiAdapter || this.aiAdapterLoadStarted)
|
|
23958
23960
|
return;
|
|
23959
23961
|
this.aiAdapterLoadStarted = true;
|
|
23960
|
-
import('./praxisui-table-table-ai.adapter-
|
|
23962
|
+
import('./praxisui-table-table-ai.adapter-D0gEqzlb.mjs')
|
|
23961
23963
|
.then(({ TableAiAdapter }) => {
|
|
23962
23964
|
if (!this.isAiAssistantEnabled()) {
|
|
23963
23965
|
this.aiAssistantOpenAfterAdapterLoad = false;
|
|
@@ -24729,7 +24731,7 @@ class PraxisTable {
|
|
|
24729
24731
|
initializeAiAssistantController() {
|
|
24730
24732
|
if (!this.aiAdapter || this.aiAssistantController)
|
|
24731
24733
|
return;
|
|
24732
|
-
import('./praxisui-table-table-agentic-authoring-turn-flow-
|
|
24734
|
+
import('./praxisui-table-table-agentic-authoring-turn-flow-B2nHomHJ.mjs')
|
|
24733
24735
|
.then(({ TableAgenticAuthoringTurnFlow }) => {
|
|
24734
24736
|
if (this.aiAssistantController || !this.aiAdapter)
|
|
24735
24737
|
return;
|
|
@@ -26860,7 +26862,8 @@ class PraxisTable {
|
|
|
26860
26862
|
}
|
|
26861
26863
|
getExpansionDetailCardGridCardNodes(card) {
|
|
26862
26864
|
// Canonical contract: cardGrid card content is RichPresenterNode | RichComposeNode only.
|
|
26863
|
-
const
|
|
26865
|
+
const rawContent = Array.isArray(card?.content) ? card.content : card?.items;
|
|
26866
|
+
const content = this.normalizeExpansionDetailCardGridCardContent(rawContent);
|
|
26864
26867
|
const visibleWhen = this.normalizeExpansionDetailVisibleWhen(card?.visibleWhen);
|
|
26865
26868
|
return [
|
|
26866
26869
|
{
|
|
@@ -29151,7 +29154,12 @@ class PraxisTable {
|
|
|
29151
29154
|
}
|
|
29152
29155
|
return { ok: false, cards: [], message: `card inválido em ${path}[${i}].` };
|
|
29153
29156
|
}
|
|
29154
|
-
const
|
|
29157
|
+
const rawCardContent = Array.isArray(candidate.content)
|
|
29158
|
+
? candidate.content
|
|
29159
|
+
: Array.isArray(candidate.items)
|
|
29160
|
+
? candidate.items
|
|
29161
|
+
: [];
|
|
29162
|
+
const sanitizedContent = this.sanitizeExpansionDetailNodes(rawCardContent, allowedNodes, fallbackNodePolicy, `${path}[${i}].content`, this.getExpansionDetailCardGridContentTypes());
|
|
29155
29163
|
if (!sanitizedContent.ok) {
|
|
29156
29164
|
return {
|
|
29157
29165
|
ok: false,
|
|
@@ -70883,19 +70891,25 @@ class TableDetailEditorComponent {
|
|
|
70883
70891
|
if (typeof item['label'] === 'string' && item['label'].trim()) {
|
|
70884
70892
|
return {
|
|
70885
70893
|
type: 'metric',
|
|
70894
|
+
...(typeof item['id'] === 'string' && item['id'].trim() ? { id: item['id'].trim() } : {}),
|
|
70886
70895
|
label: item['label'],
|
|
70887
70896
|
valueExpr,
|
|
70888
70897
|
...(item['tone'] ? { tone: item['tone'] } : {}),
|
|
70889
70898
|
...(item['icon'] ? { icon: item['icon'] } : {}),
|
|
70890
70899
|
...(item['style'] ? { style: structuredClone(item['style']) } : {}),
|
|
70891
|
-
...(item['visibleWhen']
|
|
70900
|
+
...(item['visibleWhen'] !== undefined && item['visibleWhen'] !== null
|
|
70901
|
+
? { visibleWhen: structuredClone(item['visibleWhen']) }
|
|
70902
|
+
: {}),
|
|
70892
70903
|
};
|
|
70893
70904
|
}
|
|
70894
70905
|
return {
|
|
70895
70906
|
type: 'text',
|
|
70907
|
+
...(typeof item['id'] === 'string' && item['id'].trim() ? { id: item['id'].trim() } : {}),
|
|
70896
70908
|
textExpr: valueExpr,
|
|
70897
70909
|
...(item['style'] ? { style: structuredClone(item['style']) } : {}),
|
|
70898
|
-
...(item['visibleWhen']
|
|
70910
|
+
...(item['visibleWhen'] !== undefined && item['visibleWhen'] !== null
|
|
70911
|
+
? { visibleWhen: structuredClone(item['visibleWhen']) }
|
|
70912
|
+
: {}),
|
|
70899
70913
|
};
|
|
70900
70914
|
}
|
|
70901
70915
|
if (presenterTypes.has(item['type'])) {
|
|
@@ -70916,19 +70930,91 @@ class TableDetailEditorComponent {
|
|
|
70916
70930
|
return [];
|
|
70917
70931
|
const type = this.effectiveNodeType(curr);
|
|
70918
70932
|
if (type === 'stack' || type === 'tabs') {
|
|
70919
|
-
const children = Array.isArray(curr['items'])
|
|
70933
|
+
const children = Array.isArray(curr['items'])
|
|
70934
|
+
? curr['items']
|
|
70935
|
+
: Array.isArray(curr['content'])
|
|
70936
|
+
? curr['content']
|
|
70937
|
+
: [];
|
|
70920
70938
|
return children.flatMap((child) => projectNode(child));
|
|
70921
70939
|
}
|
|
70922
70940
|
if (type === 'tab') {
|
|
70923
|
-
const children = Array.isArray(curr['content'])
|
|
70941
|
+
const children = Array.isArray(curr['content'])
|
|
70942
|
+
? curr['content']
|
|
70943
|
+
: Array.isArray(curr['items'])
|
|
70944
|
+
? curr['items']
|
|
70945
|
+
: [];
|
|
70924
70946
|
return children.flatMap((child) => projectNode(child));
|
|
70925
70947
|
}
|
|
70926
70948
|
if (type === 'cardGrid') {
|
|
70927
|
-
const
|
|
70928
|
-
|
|
70949
|
+
const rawCards = Array.isArray(curr['cards']) ? curr['cards'] : [];
|
|
70950
|
+
const projectedCards = rawCards.flatMap((card) => projectNode(card));
|
|
70951
|
+
const gridTitle = typeof curr['title'] === 'string' ? curr['title'].trim() : '';
|
|
70952
|
+
const gridSubtitle = typeof curr['subtitle'] === 'string' ? curr['subtitle'].trim() : '';
|
|
70953
|
+
const gridId = typeof curr['id'] === 'string' && curr['id'].trim() ? curr['id'].trim() : undefined;
|
|
70954
|
+
const gridVisibleWhen = curr['visibleWhen'] !== undefined && curr['visibleWhen'] !== null
|
|
70955
|
+
? structuredClone(curr['visibleWhen'])
|
|
70956
|
+
: undefined;
|
|
70957
|
+
if (!projectedCards.length && !gridTitle && !gridSubtitle) {
|
|
70958
|
+
return [];
|
|
70959
|
+
}
|
|
70960
|
+
const out = [];
|
|
70961
|
+
if (gridTitle || gridSubtitle) {
|
|
70962
|
+
const headerItems = [];
|
|
70963
|
+
if (gridTitle) {
|
|
70964
|
+
headerItems.push({
|
|
70965
|
+
type: 'text',
|
|
70966
|
+
text: gridTitle,
|
|
70967
|
+
className: 'pfx-expansion-node-card-grid__title-text',
|
|
70968
|
+
});
|
|
70969
|
+
}
|
|
70970
|
+
if (gridSubtitle) {
|
|
70971
|
+
headerItems.push({
|
|
70972
|
+
type: 'text',
|
|
70973
|
+
text: gridSubtitle,
|
|
70974
|
+
className: 'pfx-expansion-node-card-grid__subtitle-text',
|
|
70975
|
+
});
|
|
70976
|
+
}
|
|
70977
|
+
out.push({
|
|
70978
|
+
type: 'compose',
|
|
70979
|
+
...(gridId ? { id: `${gridId}-header` } : {}),
|
|
70980
|
+
direction: 'column',
|
|
70981
|
+
gap: 'xs',
|
|
70982
|
+
items: headerItems,
|
|
70983
|
+
...(gridVisibleWhen !== undefined ? { visibleWhen: structuredClone(gridVisibleWhen) } : {}),
|
|
70984
|
+
});
|
|
70985
|
+
}
|
|
70986
|
+
if (projectedCards.length) {
|
|
70987
|
+
const rawCols = curr['columns'];
|
|
70988
|
+
const numCols = Number(rawCols);
|
|
70989
|
+
const columns = rawCols === 'auto' || !Number.isFinite(numCols)
|
|
70990
|
+
? 'auto-fit'
|
|
70991
|
+
: Math.max(1, Math.min(4, Math.round(numCols)));
|
|
70992
|
+
const rawMinW = Number(curr['minCardWidth']);
|
|
70993
|
+
const minColumnWidth = Number.isFinite(rawMinW) && rawMinW >= 140
|
|
70994
|
+
? `${Math.round(rawMinW)}px`
|
|
70995
|
+
: curr['minCardWidth'] !== undefined || columns === 'auto-fit'
|
|
70996
|
+
? '220px'
|
|
70997
|
+
: undefined;
|
|
70998
|
+
out.push({
|
|
70999
|
+
type: 'compose',
|
|
71000
|
+
...(gridId ? { id: gridId } : {}),
|
|
71001
|
+
layout: 'grid',
|
|
71002
|
+
columns,
|
|
71003
|
+
...(minColumnWidth ? { minColumnWidth } : {}),
|
|
71004
|
+
gap: 'md',
|
|
71005
|
+
alignItems: 'stretch',
|
|
71006
|
+
items: projectedCards,
|
|
71007
|
+
...(gridVisibleWhen !== undefined ? { visibleWhen: structuredClone(gridVisibleWhen) } : {}),
|
|
71008
|
+
});
|
|
71009
|
+
}
|
|
71010
|
+
return out;
|
|
70929
71011
|
}
|
|
70930
71012
|
if (type === 'card') {
|
|
70931
|
-
const children = Array.isArray(curr['content'])
|
|
71013
|
+
const children = Array.isArray(curr['content'])
|
|
71014
|
+
? curr['content']
|
|
71015
|
+
: Array.isArray(curr['items'])
|
|
71016
|
+
? curr['items']
|
|
71017
|
+
: [];
|
|
70932
71018
|
const content = children.flatMap((child) => projectNode(child));
|
|
70933
71019
|
if (!content.length &&
|
|
70934
71020
|
!curr['title'] &&
|
|
@@ -70939,8 +71025,10 @@ class TableDetailEditorComponent {
|
|
|
70939
71025
|
}
|
|
70940
71026
|
const titleExpr = normalizeExpr(curr['titleExpr']);
|
|
70941
71027
|
const subtitleExpr = normalizeExpr(curr['subtitleExpr']);
|
|
71028
|
+
const cardId = typeof curr['id'] === 'string' && curr['id'].trim() ? curr['id'].trim() : undefined;
|
|
70942
71029
|
return [{
|
|
70943
71030
|
type: 'card',
|
|
71031
|
+
...(cardId ? { id: cardId } : {}),
|
|
70944
71032
|
...(curr['title'] ? { title: String(curr['title']) } : {}),
|
|
70945
71033
|
...(titleExpr ? { titleExpr } : {}),
|
|
70946
71034
|
...(curr['subtitle'] ? { subtitle: String(curr['subtitle']) } : {}),
|
|
@@ -70955,7 +71043,9 @@ class TableDetailEditorComponent {
|
|
|
70955
71043
|
...(curr['style'] ? { style: structuredClone(curr['style']) } : {}),
|
|
70956
71044
|
...(curr['className'] ? { className: String(curr['className']) } : {}),
|
|
70957
71045
|
content,
|
|
70958
|
-
...(curr['visibleWhen']
|
|
71046
|
+
...(curr['visibleWhen'] !== undefined && curr['visibleWhen'] !== null
|
|
71047
|
+
? { visibleWhen: structuredClone(curr['visibleWhen']) }
|
|
71048
|
+
: {}),
|
|
70959
71049
|
}];
|
|
70960
71050
|
}
|
|
70961
71051
|
if (type === 'compose') {
|
|
@@ -70965,8 +71055,10 @@ class TableDetailEditorComponent {
|
|
|
70965
71055
|
.filter((item) => !!item);
|
|
70966
71056
|
if (!items.length)
|
|
70967
71057
|
return [];
|
|
71058
|
+
const composeId = typeof curr['id'] === 'string' && curr['id'].trim() ? curr['id'].trim() : undefined;
|
|
70968
71059
|
return [{
|
|
70969
71060
|
type: 'compose',
|
|
71061
|
+
...(composeId ? { id: composeId } : {}),
|
|
70970
71062
|
...(curr['layout'] ? { layout: curr['layout'] } : {}),
|
|
70971
71063
|
direction: curr['direction'] === 'column' ? 'column' : 'row',
|
|
70972
71064
|
gap: curr['gap'] ?? 'sm',
|
|
@@ -70978,7 +71070,9 @@ class TableDetailEditorComponent {
|
|
|
70978
71070
|
...(curr['style'] ? { style: structuredClone(curr['style']) } : {}),
|
|
70979
71071
|
...(curr['className'] ? { className: String(curr['className']) } : {}),
|
|
70980
71072
|
items,
|
|
70981
|
-
...(curr['visibleWhen']
|
|
71073
|
+
...(curr['visibleWhen'] !== undefined && curr['visibleWhen'] !== null
|
|
71074
|
+
? { visibleWhen: structuredClone(curr['visibleWhen']) }
|
|
71075
|
+
: {}),
|
|
70982
71076
|
}];
|
|
70983
71077
|
}
|
|
70984
71078
|
const presenter = projectPresenter(curr);
|
|
@@ -71007,14 +71101,15 @@ class TableDetailEditorComponent {
|
|
|
71007
71101
|
continue;
|
|
71008
71102
|
const type = this.effectiveNodeType(item);
|
|
71009
71103
|
if (type === 'cardGrid') {
|
|
71010
|
-
const
|
|
71104
|
+
const rawCards = Array.isArray(item['cards']) ? item['cards'] : [];
|
|
71105
|
+
const cards = rawCards.flatMap((card) => this.projectDetailNodeToRichBlockNodes(card, context, true));
|
|
71011
71106
|
if (!cards.length)
|
|
71012
71107
|
continue;
|
|
71013
71108
|
const minW = Number(item['minCardWidth']);
|
|
71014
71109
|
const safeMinW = Number.isFinite(minW) && minW >= 140 ? Math.round(minW) : 220;
|
|
71015
71110
|
const cols = item['columns'];
|
|
71016
71111
|
const gridTemplateColumns = cols === 'auto' || !Number.isFinite(Number(cols))
|
|
71017
|
-
? `repeat(auto-fit, minmax(${safeMinW}px, 1fr))`
|
|
71112
|
+
? `repeat(auto-fit, minmax(min(${safeMinW}px, 100%), 1fr))`
|
|
71018
71113
|
: `repeat(${Math.max(1, Math.min(4, Math.round(Number(cols))))}, minmax(0, 1fr))`;
|
|
71019
71114
|
groups.push({
|
|
71020
71115
|
isCardGrid: true,
|
|
@@ -71103,7 +71198,7 @@ class TableDetailEditorComponent {
|
|
|
71103
71198
|
return '';
|
|
71104
71199
|
if (typeof node['type'] === 'string' && node['type'].trim())
|
|
71105
71200
|
return node['type'].trim();
|
|
71106
|
-
if (Array.isArray(node['content']))
|
|
71201
|
+
if (Array.isArray(node['content']) || Array.isArray(node['items']))
|
|
71107
71202
|
return 'card';
|
|
71108
71203
|
return '';
|
|
71109
71204
|
}
|
|
@@ -71811,15 +71906,27 @@ class TableDetailEditorComponent {
|
|
|
71811
71906
|
const projectedNodes = this.projectDetailNodeToRichBlockNodes(targetEntry.node, this.previewContext, false);
|
|
71812
71907
|
if (!projectedNodes.length)
|
|
71813
71908
|
return;
|
|
71909
|
+
const targetId = typeof targetEntry.node['id'] === 'string' && targetEntry.node['id'].trim()
|
|
71910
|
+
? targetEntry.node['id'].trim()
|
|
71911
|
+
: undefined;
|
|
71912
|
+
const targetTitle = typeof targetEntry.node['title'] === 'string' && targetEntry.node['title'].trim()
|
|
71913
|
+
? targetEntry.node['title'].trim()
|
|
71914
|
+
: undefined;
|
|
71915
|
+
const targetSubtitle = typeof targetEntry.node['subtitle'] === 'string' && targetEntry.node['subtitle'].trim()
|
|
71916
|
+
? targetEntry.node['subtitle'].trim()
|
|
71917
|
+
: undefined;
|
|
71814
71918
|
const richContentNode = {
|
|
71815
71919
|
type: 'richContent',
|
|
71920
|
+
...(targetId ? { id: targetId } : {}),
|
|
71921
|
+
...(targetTitle ? { title: targetTitle } : {}),
|
|
71922
|
+
...(targetSubtitle ? { subtitle: targetSubtitle } : {}),
|
|
71816
71923
|
layout: 'block',
|
|
71817
71924
|
document: {
|
|
71818
71925
|
kind: 'praxis.rich-content',
|
|
71819
71926
|
version: '1.0.0',
|
|
71820
71927
|
nodes: projectedNodes,
|
|
71821
71928
|
},
|
|
71822
|
-
...(targetEntry.node['visibleWhen']
|
|
71929
|
+
...(targetEntry.node['visibleWhen'] !== undefined && targetEntry.node['visibleWhen'] !== null
|
|
71823
71930
|
? { visibleWhen: structuredClone(targetEntry.node['visibleWhen']) }
|
|
71824
71931
|
: {}),
|
|
71825
71932
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Observable, firstValueFrom } from 'rxjs';
|
|
2
2
|
import { withAuthoringScopePolicy } from '@praxisui/ai';
|
|
3
|
-
import { ar as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-
|
|
3
|
+
import { ar as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-Dg1mPimH.mjs';
|
|
4
4
|
|
|
5
5
|
class TableAgenticAuthoringTurnFlow {
|
|
6
6
|
adapter;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { firstValueFrom } from 'rxjs';
|
|
2
2
|
import { BaseAiAdapter, sanitizePraxisAssistantText, createComponentAuthoringContext } from '@praxisui/ai';
|
|
3
3
|
import { PRAXIS_GLOBAL_ACTION_CATALOG, deepMerge } from '@praxisui/core';
|
|
4
|
-
import { W as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, p as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, a6 as coerceTableComponentEditPlans, a8 as compileTableComponentEditPlans, Y as TASK_PRESETS, ae as getTableComponentEditPlanCapabilities, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, V as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-
|
|
4
|
+
import { W as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, p as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, a6 as coerceTableComponentEditPlans, a8 as compileTableComponentEditPlans, Y as TASK_PRESETS, ae as getTableComponentEditPlanCapabilities, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, V as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-Dg1mPimH.mjs';
|
|
5
5
|
|
|
6
6
|
const TABLE_ROW_EXPRESSION_CONTEXT_OPTION = {
|
|
7
7
|
mode: 'expression',
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticalDrawerRegistryService, b as AnalyticsTableConfigAdapterService, c as AnalyticsTableContractService, d as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, e as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, f as ColumnsConfigEditorComponent, D as DATE_PRESETS, g as DataFormatterComponent, h as DataFormattingService, F as FORMULA_TEMPLATES, i as FilterConfigService, j as FilterSettingsComponent, k as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, l as PRAXIS_ANALYTICAL_DRAWER_SCHEMAS, m as PRAXIS_FILTER_AUTHORING_MANIFEST, n as PRAXIS_FILTER_COMPONENT_METADATA, o as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, p as PRAXIS_TABLE_AUTHORING_MANIFEST, q as PRAXIS_TABLE_COMPONENT_METADATA, r as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, s as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, t as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, u as PraxisAnalyticalDrawerComponent, v as PraxisFilter, w as PraxisFilterOutletComponent, x as PraxisFilterOutletDirective, y as PraxisFilterWidgetConfigEditor, z as PraxisScopeBarComponent, E as PraxisTable, G as PraxisTableConfigEditor, H as PraxisTableInlineAuthoringEditorComponent, I as PraxisTableToolbar, K as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, L as TABLE_COMPONENT_AI_CAPABILITIES, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, V as TABLE_COMPONENT_EDIT_PLAN_KIND, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Y as TASK_PRESETS, Z as TableDefaultsProvider, _ as TableRulesEditorComponent, $ as ToolbarActionsEditorComponent, a0 as ValueMappingEditorComponent, a1 as VisualFormulaBuilderComponent, a2 as analyticsComparisonMetricField, a3 as applyComputedFieldsToRows, a4 as buildTableApplyPlan, a5 as coerceTableComponentEditPlan, a6 as coerceTableComponentEditPlans, a7 as compileTableComponentEditPlan, a8 as compileTableComponentEditPlans, a9 as createTableAuthoringDocument, aa as formatComputedFieldValue, ab as getActionId, ac as getEnum, ad as getTableCapabilities, ae as getTableComponentEditPlanCapabilities, af as interpolateRelationEndpoint, ag as isAnalyticalDrawerSchema, ah as isTableRendererSupportedByRichContentP0, ai as mapTableRendererToRichContentP0, aj as normalizeComputedFieldDefinition, ak as normalizeTableAuthoringDocument, al as parseLegacyOrTableDocument, am as providePraxisAnalyticalDrawerSchemas, an as providePraxisFilterMetadata, ao as providePraxisTableMetadata, ap as providePraxisTableToolbarAppearance, aq as serializeTableAuthoringDocument, as as toCanonicalTableConfig, at as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-
|
|
1
|
+
export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticalDrawerRegistryService, b as AnalyticsTableConfigAdapterService, c as AnalyticsTableContractService, d as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, e as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, f as ColumnsConfigEditorComponent, D as DATE_PRESETS, g as DataFormatterComponent, h as DataFormattingService, F as FORMULA_TEMPLATES, i as FilterConfigService, j as FilterSettingsComponent, k as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, l as PRAXIS_ANALYTICAL_DRAWER_SCHEMAS, m as PRAXIS_FILTER_AUTHORING_MANIFEST, n as PRAXIS_FILTER_COMPONENT_METADATA, o as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, p as PRAXIS_TABLE_AUTHORING_MANIFEST, q as PRAXIS_TABLE_COMPONENT_METADATA, r as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, s as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, t as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, u as PraxisAnalyticalDrawerComponent, v as PraxisFilter, w as PraxisFilterOutletComponent, x as PraxisFilterOutletDirective, y as PraxisFilterWidgetConfigEditor, z as PraxisScopeBarComponent, E as PraxisTable, G as PraxisTableConfigEditor, H as PraxisTableInlineAuthoringEditorComponent, I as PraxisTableToolbar, K as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, L as TABLE_COMPONENT_AI_CAPABILITIES, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, V as TABLE_COMPONENT_EDIT_PLAN_KIND, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Y as TASK_PRESETS, Z as TableDefaultsProvider, _ as TableRulesEditorComponent, $ as ToolbarActionsEditorComponent, a0 as ValueMappingEditorComponent, a1 as VisualFormulaBuilderComponent, a2 as analyticsComparisonMetricField, a3 as applyComputedFieldsToRows, a4 as buildTableApplyPlan, a5 as coerceTableComponentEditPlan, a6 as coerceTableComponentEditPlans, a7 as compileTableComponentEditPlan, a8 as compileTableComponentEditPlans, a9 as createTableAuthoringDocument, aa as formatComputedFieldValue, ab as getActionId, ac as getEnum, ad as getTableCapabilities, ae as getTableComponentEditPlanCapabilities, af as interpolateRelationEndpoint, ag as isAnalyticalDrawerSchema, ah as isTableRendererSupportedByRichContentP0, ai as mapTableRendererToRichContentP0, aj as normalizeComputedFieldDefinition, ak as normalizeTableAuthoringDocument, al as parseLegacyOrTableDocument, am as providePraxisAnalyticalDrawerSchemas, an as providePraxisFilterMetadata, ao as providePraxisTableMetadata, ap as providePraxisTableToolbarAppearance, aq as serializeTableAuthoringDocument, as as toCanonicalTableConfig, at as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-Dg1mPimH.mjs';
|
|
2
2
|
export { createDynamicRecord, extractRecordId, isDynamicDataRecord, resolveDataField } from '@praxisui/core';
|
package/package.json
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/table",
|
|
3
|
-
"version": "10.0.0-rc.
|
|
3
|
+
"version": "10.0.0-rc.30",
|
|
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
8
|
"@angular/platform-browser": "^21.0.0",
|
|
9
|
-
"@praxisui/ai": "^10.0.0-rc.
|
|
10
|
-
"@praxisui/core": "^10.0.0-rc.
|
|
11
|
-
"@praxisui/dynamic-fields": "^10.0.0-rc.
|
|
12
|
-
"@praxisui/dynamic-form": "^10.0.0-rc.
|
|
13
|
-
"@praxisui/metadata-editor": "^10.0.0-rc.
|
|
14
|
-
"@praxisui/rich-content": "^10.0.0-rc.
|
|
15
|
-
"@praxisui/settings-panel": "^10.0.0-rc.
|
|
16
|
-
"@praxisui/table-rule-builder": "^10.0.0-rc.
|
|
9
|
+
"@praxisui/ai": "^10.0.0-rc.30",
|
|
10
|
+
"@praxisui/core": "^10.0.0-rc.30",
|
|
11
|
+
"@praxisui/dynamic-fields": "^10.0.0-rc.30",
|
|
12
|
+
"@praxisui/dynamic-form": "^10.0.0-rc.30",
|
|
13
|
+
"@praxisui/metadata-editor": "^10.0.0-rc.30",
|
|
14
|
+
"@praxisui/rich-content": "^10.0.0-rc.30",
|
|
15
|
+
"@praxisui/settings-panel": "^10.0.0-rc.30",
|
|
16
|
+
"@praxisui/table-rule-builder": "^10.0.0-rc.30",
|
|
17
17
|
"@angular/cdk": "^21.0.0",
|
|
18
18
|
"@angular/forms": "^21.0.0",
|
|
19
19
|
"@angular/material": "^21.0.0",
|
|
20
20
|
"@angular/router": "^21.0.0",
|
|
21
|
-
"@praxisui/dialog": "^10.0.0-rc.
|
|
21
|
+
"@praxisui/dialog": "^10.0.0-rc.30",
|
|
22
22
|
"rxjs": "~7.8.0"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|