@praxisui/table 8.0.0-beta.81 → 8.0.0-beta.82

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.
@@ -39578,7 +39578,7 @@ class PraxisTable {
39578
39578
  if (this.aiAdapter || this.aiAdapterLoadStarted)
39579
39579
  return;
39580
39580
  this.aiAdapterLoadStarted = true;
39581
- import('./praxisui-table-table-ai.adapter-D8fQSvC3.mjs')
39581
+ import('./praxisui-table-table-ai.adapter-OIjGp0kj.mjs')
39582
39582
  .then(({ TableAiAdapter }) => {
39583
39583
  this.aiAdapter = new TableAiAdapter(this);
39584
39584
  this.initializeAiAssistantController();
@@ -39760,7 +39760,7 @@ class PraxisTable {
39760
39760
  initializeAiAssistantController() {
39761
39761
  if (!this.aiAdapter || this.aiAssistantController)
39762
39762
  return;
39763
- import('./praxisui-table-table-agentic-authoring-turn-flow-CyJJHpMr.mjs')
39763
+ import('./praxisui-table-table-agentic-authoring-turn-flow-Bdi7IIY2.mjs')
39764
39764
  .then(({ TableAgenticAuthoringTurnFlow }) => {
39765
39765
  if (this.aiAssistantController || !this.aiAdapter)
39766
39766
  return;
@@ -584,6 +584,10 @@ class TableAgenticAuthoringTurnFlow {
584
584
  warnings: compiledExecutable.warnings,
585
585
  };
586
586
  }
587
+ const continuedSurfaceRowActionFromInfo = this.selectedRecordSurfaceRowActionPlanForInfo(response, request);
588
+ if (continuedSurfaceRowActionFromInfo) {
589
+ return this.compileAdapterResponse(continuedSurfaceRowActionFromInfo, request);
590
+ }
587
591
  const continuedSurfaceRuntimeOperation = this.selectedRecordSurfaceRuntimeOperationForInfo(response, request);
588
592
  if (continuedSurfaceRuntimeOperation) {
589
593
  return continuedSurfaceRuntimeOperation;
@@ -611,7 +615,9 @@ class TableAgenticAuthoringTurnFlow {
611
615
  if (compiled.type === 'error') {
612
616
  const continuedInvalidExecutable = this.selectedRecordSurfaceRuntimeOperationForInvalidExecutable(response, request, compiled.warnings);
613
617
  if (continuedInvalidExecutable) {
614
- return continuedInvalidExecutable;
618
+ return continuedInvalidExecutable.componentEditPlan
619
+ ? this.compileAdapterResponse(continuedInvalidExecutable, request)
620
+ : continuedInvalidExecutable;
615
621
  }
616
622
  return {
617
623
  type: 'error',
@@ -950,52 +956,57 @@ class TableAgenticAuthoringTurnFlow {
950
956
  if (!ranked.length || (ranked.length > 1 && ranked[0].score === ranked[1].score)) {
951
957
  return null;
952
958
  }
953
- const surface = ranked[0].surface;
954
- const resourceSurface = this.toRecord(surface['resourceSurface']);
955
- if (!this.isResourceSurfaceCatalogDigest(resourceSurface)) {
959
+ const rowActionResponse = this.buildSelectedRecordSurfaceRowActionResponse(ranked[0].surface, 'selected-record-surface-row-action-continued-from-clarification', clarificationKind === 'technical'
960
+ ? 'selected-record-surface-row-action-continued-from-technical-clarification'
961
+ : 'selected-record-surface-row-action-continued-from-generic-clarification', clarificationKind === 'technical'
962
+ ? 'Residual continuity guard acted only after LLM asked for technical row-action details while declared recordSurfaces and conversation history already grounded the target surface.'
963
+ : 'Residual continuity guard acted only after LLM asked a generic dataset/listing clarification while declared recordSurfaces and a row-action request already grounded the target surface.');
964
+ if (!rowActionResponse)
956
965
  return null;
957
- }
958
- const surfaceId = this.stringValue(surface['id']) || this.stringValue(resourceSurface['id']);
959
- if (!surfaceId)
960
- return null;
961
- const surfaceLabel = this.stringValue(surface['label'])
962
- || this.stringValue(resourceSurface['title'])
963
- || this.humanizeField(surfaceId);
964
- const actionId = `open-${this.slugifyActionId(surfaceId)}`;
965
- const rowAction = {
966
- id: actionId,
967
- label: surfaceLabel,
968
- action: 'surface.open',
969
- icon: 'open_in_new',
970
- recordSurface: this.toAiJsonObject(resourceSurface),
971
- };
972
966
  // Residual continuity guard: this runs only after the LLM returned a
973
967
  // clarification/info response for a row-button request. The target surface
974
968
  // is ranked from declared canonical recordSurfaces and recent conversation
975
969
  // context, so the guard repairs materialization without becoming primary
976
970
  // intent routing by local command text.
977
- return {
978
- type: 'patch',
979
- componentEditPlan: {
980
- kind: 'praxis.table.component-edit-plan',
981
- version: '1.0',
982
- componentId: 'praxis-table',
983
- operationId: 'rowAction.add',
984
- changeKind: 'add_row_action',
985
- capabilityPath: 'actions.row.actions[]',
986
- input: rowAction,
987
- value: rowAction,
988
- },
989
- explanation: `Vou criar um botão em cada linha para abrir ${surfaceLabel}.`,
990
- warnings: [
991
- clarificationKind === 'technical'
992
- ? 'selected-record-surface-row-action-continued-from-technical-clarification'
993
- : 'selected-record-surface-row-action-continued-from-generic-clarification',
994
- clarificationKind === 'technical'
995
- ? 'Residual continuity guard acted only after LLM asked for technical row-action details while declared recordSurfaces and conversation history already grounded the target surface.'
996
- : 'Residual continuity guard acted only after LLM asked a generic dataset/listing clarification while declared recordSurfaces and a row-action request already grounded the target surface.',
997
- ],
998
- };
971
+ return rowActionResponse;
972
+ }
973
+ selectedRecordSurfaceRowActionPlanForInfo(response, request) {
974
+ if (response.type !== 'info' || !request)
975
+ return null;
976
+ const normalizedPrompt = this.normalizeLabel(request.prompt ?? '');
977
+ const normalizedConversation = this.normalizeLabel([
978
+ ...(request.messages ?? []).slice(-8).map((message) => message?.text ?? ''),
979
+ request.prompt ?? '',
980
+ ].join(' '));
981
+ if (!this.textMentionsRowActionRequest(normalizedPrompt || normalizedConversation)) {
982
+ return null;
983
+ }
984
+ const responseText = this.normalizeLabel([
985
+ response.message ?? '',
986
+ response.explanation ?? '',
987
+ ].join(' '));
988
+ if (!this.textMentionsSurfaceOpenCommitment(responseText) && !this.textMentionsRowActionRequest(responseText)) {
989
+ return null;
990
+ }
991
+ const contextHints = this.contextHintsFor(request);
992
+ const surfaces = this.selectedRecordSurfaces(contextHints);
993
+ if (!surfaces.length)
994
+ return null;
995
+ const ranked = surfaces
996
+ .map((surface) => ({
997
+ surface,
998
+ score: this.selectedRecordSurfacePromptScore(`${normalizedConversation || normalizedPrompt} ${responseText}`, surface),
999
+ }))
1000
+ .filter((entry) => entry.score >= 2)
1001
+ .sort((left, right) => right.score - left.score);
1002
+ if (!ranked.length || (ranked.length > 1 && ranked[0].score === ranked[1].score)) {
1003
+ return null;
1004
+ }
1005
+ // Residual continuity guard: this runs only after the LLM has already
1006
+ // answered an info turn for a row-button request but failed to emit the
1007
+ // manifest-backed rowAction.add envelope. The target is ranked from the
1008
+ // governed recordSurfaces catalog plus LLM-authored evidence.
1009
+ return this.buildSelectedRecordSurfaceRowActionResponse(ranked[0].surface, 'selected-record-surface-row-action-info-continuity-guard', 'selected-record-surface-row-action-continued-from-info', 'Residual continuity guard acted only after LLM resolved a declared recordSurface in an info answer for a row-action request without emitting rowAction.add.');
999
1010
  }
1000
1011
  selectedRecordSurfaceRuntimeOperationForInfo(response, request) {
1001
1012
  if (response.type !== 'info' || !request)
@@ -1087,6 +1098,11 @@ class TableAgenticAuthoringTurnFlow {
1087
1098
  if (!ranked.length || (ranked.length > 1 && ranked[0].score === ranked[1].score)) {
1088
1099
  return null;
1089
1100
  }
1101
+ if (this.textMentionsRowActionRequest(normalizedPrompt)) {
1102
+ const rowActionResponse = this.buildSelectedRecordSurfaceRowActionResponse(ranked[0].surface, 'selected-record-surface-row-action-invalid-executable-continuity-guard', 'selected-record-surface-row-action-continued-from-invalid-executable', 'Residual continuity guard acted only after LLM emitted an executable envelope that failed table component capability validation for a row-action request while a declared recordSurface uniquely matched the selected-record request.');
1103
+ if (rowActionResponse)
1104
+ return rowActionResponse;
1105
+ }
1090
1106
  const surface = ranked[0].surface;
1091
1107
  const surfaceId = this.stringValue(surface['id']);
1092
1108
  if (!surfaceId)
@@ -1121,6 +1137,42 @@ class TableAgenticAuthoringTurnFlow {
1121
1137
  ],
1122
1138
  };
1123
1139
  }
1140
+ buildSelectedRecordSurfaceRowActionResponse(surface, source, warning, warningDetail) {
1141
+ const resourceSurface = this.toRecord(surface['resourceSurface']);
1142
+ if (!this.isResourceSurfaceCatalogDigest(resourceSurface)) {
1143
+ return null;
1144
+ }
1145
+ const surfaceId = this.stringValue(surface['id']) || this.stringValue(resourceSurface['id']);
1146
+ if (!surfaceId)
1147
+ return null;
1148
+ const surfaceLabel = this.stringValue(surface['label'])
1149
+ || this.stringValue(resourceSurface['title'])
1150
+ || this.humanizeField(surfaceId);
1151
+ const actionId = `open-${this.slugifyActionId(surfaceId)}`;
1152
+ const rowAction = {
1153
+ id: actionId,
1154
+ label: surfaceLabel,
1155
+ action: 'surface.open',
1156
+ icon: 'open_in_new',
1157
+ recordSurface: this.toAiJsonObject(resourceSurface),
1158
+ };
1159
+ return {
1160
+ type: 'patch',
1161
+ componentEditPlan: {
1162
+ kind: 'praxis.table.component-edit-plan',
1163
+ version: '1.0',
1164
+ componentId: 'praxis-table',
1165
+ operationId: 'rowAction.add',
1166
+ changeKind: 'add_row_action',
1167
+ capabilityPath: 'actions.row.actions[]',
1168
+ input: rowAction,
1169
+ value: rowAction,
1170
+ source,
1171
+ },
1172
+ explanation: `Vou criar um botão em cada linha para abrir ${surfaceLabel}.`,
1173
+ warnings: [warning, warningDetail],
1174
+ };
1175
+ }
1124
1176
  selectedRecordSurfaceRowActionClarificationKind(response) {
1125
1177
  const text = this.normalizeLabel([
1126
1178
  response.message ?? '',
@@ -1,7 +1,7 @@
1
1
  import { firstValueFrom } from 'rxjs';
2
2
  import { BaseAiAdapter, createComponentAuthoringContext } from '@praxisui/ai';
3
3
  import { deepMerge } from '@praxisui/core';
4
- import { z as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, k as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, R as coerceTableComponentEditPlans, W as compileTableComponentEditPlans, G as TASK_PRESETS, $ as getTableComponentEditPlanCapabilities, w as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, u as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, x as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, E as TABLE_COMPONENT_EDIT_PLAN_VERSION, v as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, y as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-BigLNasG.mjs';
4
+ import { z as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, k as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, R as coerceTableComponentEditPlans, W as compileTableComponentEditPlans, G as TASK_PRESETS, $ as getTableComponentEditPlanCapabilities, w as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, u as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, x as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, E as TABLE_COMPONENT_EDIT_PLAN_VERSION, v as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, y as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-28INRbt6.mjs';
5
5
 
6
6
  const TABLE_COMPONENT_CONTEXT_PACK = {
7
7
  version: 'v1',
@@ -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 PraxisFilter, n as PraxisFilterWidgetConfigEditor, o as PraxisTable, p as PraxisTableConfigEditor, q as PraxisTableInlineAuthoringEditorComponent, r as PraxisTableToolbar, s as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, t as TABLE_COMPONENT_AI_CAPABILITIES, u as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, v as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, w as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, x as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, y as TABLE_COMPONENT_EDIT_PLAN_KIND, E as TABLE_COMPONENT_EDIT_PLAN_VERSION, G as TASK_PRESETS, H as TableDefaultsProvider, I as TableRulesEditorComponent, K as ToolbarActionsEditorComponent, V as ValueMappingEditorComponent, L as VisualFormulaBuilderComponent, O as buildTableApplyPlan, Q as coerceTableComponentEditPlan, R as coerceTableComponentEditPlans, U as compileTableComponentEditPlan, W as compileTableComponentEditPlans, X as createTableAuthoringDocument, Y as getActionId, Z as getEnum, _ as getTableCapabilities, $ as getTableComponentEditPlanCapabilities, a0 as isTableRendererSupportedByRichContentP0, a1 as mapTableRendererToRichContentP0, a2 as normalizeTableAuthoringDocument, a3 as parseLegacyOrTableDocument, a4 as providePraxisFilterMetadata, a5 as providePraxisTableMetadata, a6 as serializeTableAuthoringDocument, a7 as toCanonicalTableConfig, a8 as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-BigLNasG.mjs';
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 PraxisFilter, n as PraxisFilterWidgetConfigEditor, o as PraxisTable, p as PraxisTableConfigEditor, q as PraxisTableInlineAuthoringEditorComponent, r as PraxisTableToolbar, s as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, t as TABLE_COMPONENT_AI_CAPABILITIES, u as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, v as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, w as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, x as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, y as TABLE_COMPONENT_EDIT_PLAN_KIND, E as TABLE_COMPONENT_EDIT_PLAN_VERSION, G as TASK_PRESETS, H as TableDefaultsProvider, I as TableRulesEditorComponent, K as ToolbarActionsEditorComponent, V as ValueMappingEditorComponent, L as VisualFormulaBuilderComponent, O as buildTableApplyPlan, Q as coerceTableComponentEditPlan, R as coerceTableComponentEditPlans, U as compileTableComponentEditPlan, W as compileTableComponentEditPlans, X as createTableAuthoringDocument, Y as getActionId, Z as getEnum, _ as getTableCapabilities, $ as getTableComponentEditPlanCapabilities, a0 as isTableRendererSupportedByRichContentP0, a1 as mapTableRendererToRichContentP0, a2 as normalizeTableAuthoringDocument, a3 as parseLegacyOrTableDocument, a4 as providePraxisFilterMetadata, a5 as providePraxisTableMetadata, a6 as serializeTableAuthoringDocument, a7 as toCanonicalTableConfig, a8 as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-28INRbt6.mjs';
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "8.0.0-beta.81",
3
+ "version": "8.0.0-beta.82",
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.81",
9
- "@praxisui/core": "^8.0.0-beta.81",
10
- "@praxisui/dynamic-fields": "^8.0.0-beta.81",
11
- "@praxisui/dynamic-form": "^8.0.0-beta.81",
12
- "@praxisui/metadata-editor": "^8.0.0-beta.81",
13
- "@praxisui/rich-content": "^8.0.0-beta.81",
14
- "@praxisui/settings-panel": "^8.0.0-beta.81",
15
- "@praxisui/table-rule-builder": "^8.0.0-beta.81",
8
+ "@praxisui/ai": "^8.0.0-beta.82",
9
+ "@praxisui/core": "^8.0.0-beta.82",
10
+ "@praxisui/dynamic-fields": "^8.0.0-beta.82",
11
+ "@praxisui/dynamic-form": "^8.0.0-beta.82",
12
+ "@praxisui/metadata-editor": "^8.0.0-beta.82",
13
+ "@praxisui/rich-content": "^8.0.0-beta.82",
14
+ "@praxisui/settings-panel": "^8.0.0-beta.82",
15
+ "@praxisui/table-rule-builder": "^8.0.0-beta.82",
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.81",
20
+ "@praxisui/dialog": "^8.0.0-beta.82",
21
21
  "rxjs": "~7.8.0"
22
22
  },
23
23
  "dependencies": {