@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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-16T14:27:38.517Z",
3
+ "generatedAt": "2026-10-16T15:16:17.774Z",
4
4
  "packageName": "@praxisui/table",
5
- "packageVersion": "10.0.0-rc.29",
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 content = (Array.isArray(node.content) ? node.content : [])
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 content = (Array.isArray(node.content) ? node.content : [])
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-DIf5nJOG.mjs')
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-BbqceuRl.mjs')
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 content = this.normalizeExpansionDetailCardGridCardContent(card?.content);
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 sanitizedContent = this.sanitizeExpansionDetailNodes(Array.isArray(candidate.content) ? candidate.content : [], allowedNodes, fallbackNodePolicy, `${path}[${i}].content`, this.getExpansionDetailCardGridContentTypes());
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'] ? { visibleWhen: structuredClone(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'] ? { visibleWhen: structuredClone(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']) ? 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']) ? 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 cards = Array.isArray(curr['cards']) ? curr['cards'] : [];
70928
- return cards.flatMap((card) => projectNode(card));
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']) ? 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'] ? { visibleWhen: structuredClone(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'] ? { visibleWhen: structuredClone(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 cards = this.projectDetailNodeToRichBlockNodes(item, context, true);
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-By0aZFU7.mjs';
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-By0aZFU7.mjs';
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-By0aZFU7.mjs';
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.29",
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.29",
10
- "@praxisui/core": "^10.0.0-rc.29",
11
- "@praxisui/dynamic-fields": "^10.0.0-rc.29",
12
- "@praxisui/dynamic-form": "^10.0.0-rc.29",
13
- "@praxisui/metadata-editor": "^10.0.0-rc.29",
14
- "@praxisui/rich-content": "^10.0.0-rc.29",
15
- "@praxisui/settings-panel": "^10.0.0-rc.29",
16
- "@praxisui/table-rule-builder": "^10.0.0-rc.29",
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.29",
21
+ "@praxisui/dialog": "^10.0.0-rc.30",
22
22
  "rxjs": "~7.8.0"
23
23
  },
24
24
  "dependencies": {