@praxisui/table 8.0.0-beta.95 → 8.0.0-beta.97

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.
@@ -39947,7 +39947,7 @@ class PraxisTable {
39947
39947
  if (this.aiAdapter || this.aiAdapterLoadStarted)
39948
39948
  return;
39949
39949
  this.aiAdapterLoadStarted = true;
39950
- import('./praxisui-table-table-ai.adapter-t9FU2DZc.mjs')
39950
+ import('./praxisui-table-table-ai.adapter-Bt7LXFTm.mjs')
39951
39951
  .then(({ TableAiAdapter }) => {
39952
39952
  this.aiAdapter = new TableAiAdapter(this);
39953
39953
  this.initializeAiAssistantController();
@@ -40566,7 +40566,7 @@ class PraxisTable {
40566
40566
  initializeAiAssistantController() {
40567
40567
  if (!this.aiAdapter || this.aiAssistantController)
40568
40568
  return;
40569
- import('./praxisui-table-table-agentic-authoring-turn-flow-CWeXfMs8.mjs')
40569
+ import('./praxisui-table-table-agentic-authoring-turn-flow-CugH8lrQ.mjs')
40570
40570
  .then(({ TableAgenticAuthoringTurnFlow }) => {
40571
40571
  if (this.aiAssistantController || !this.aiAdapter)
40572
40572
  return;
@@ -393,6 +393,17 @@ class TableAgenticAuthoringTurnFlow {
393
393
  message: 'Selecione um ou mais registros para eu sugerir filtros, exportações ou ações compatíveis com essa seleção.',
394
394
  };
395
395
  }
396
+ if (this.selectedRecordReadOnlyAnalysisRequested(request)) {
397
+ return {
398
+ type: 'info',
399
+ sessionId: request.sessionId,
400
+ message: this.selectedRecordsAnalyticalSummary(contextHints),
401
+ warnings: [
402
+ 'recommended-intent-local-selected-records-analysis',
403
+ 'Resposta informativa gerada a partir do recommendedIntent canonico table.selection.analyze e selectedRecordsContext.sampleRows; nao houve roteamento textual primario.',
404
+ ],
405
+ };
406
+ }
396
407
  const candidates = this.selectedRecordFilterCandidates(contextHints);
397
408
  const fields = candidates
398
409
  .map((candidate) => this.stringValue(candidate['field']))
@@ -480,6 +491,8 @@ class TableAgenticAuthoringTurnFlow {
480
491
  return null;
481
492
  if (!this.runtimeOperationAllowed(contextHints, 'table.filter.apply'))
482
493
  return null;
494
+ if (this.selectedRecordReadOnlyAnalysisRequested(request))
495
+ return null;
483
496
  const normalizedPrompt = this.normalizeLabel(request.prompt ?? '');
484
497
  if (!normalizedPrompt || !this.promptRequestsRuntimeFilter(normalizedPrompt))
485
498
  return null;
@@ -2236,7 +2249,9 @@ class TableAgenticAuthoringTurnFlow {
2236
2249
  observationId: response.observationId ?? request.observationId ?? null,
2237
2250
  assistantMessage: message,
2238
2251
  statusText: message,
2239
- quickReplies: this.toQuickReplies(response, request),
2252
+ quickReplies: this.shouldSuppressInfoQuickReplies(response, request)
2253
+ ? []
2254
+ : this.toQuickReplies(response, request),
2240
2255
  canApply: false,
2241
2256
  };
2242
2257
  }
@@ -2291,6 +2306,11 @@ class TableAgenticAuthoringTurnFlow {
2291
2306
  const record = this.toRecord(patch);
2292
2307
  return !!record && Object.keys(record).length > 0;
2293
2308
  }
2309
+ shouldSuppressInfoQuickReplies(response, request) {
2310
+ return this.selectedRecordReadOnlyAnalysisRequested(request)
2311
+ || (response.warnings ?? []).some((warning) => this.normalizeLabel(warning).includes('selected records analysis')
2312
+ || this.normalizeLabel(warning).includes('selected record readonly'));
2313
+ }
2294
2314
  isTurnInProgressResponse(response) {
2295
2315
  return this.normalizeLabel(response.code ?? '') === 'turn in progress';
2296
2316
  }
@@ -2301,6 +2321,10 @@ class TableAgenticAuthoringTurnFlow {
2301
2321
  response = this.normalizeCompoundColumnPresentationPlan(response, request);
2302
2322
  response = this.normalizeComputedColumnAuxiliaryMaterializations(response);
2303
2323
  if (response.type === 'clarification' || response.type === 'info' || response.type === 'error') {
2324
+ const selectedRecordReadonlyClarificationBoundary = this.selectedRecordReadonlyClarificationBoundaryResponse(response, request);
2325
+ if (selectedRecordReadonlyClarificationBoundary) {
2326
+ return selectedRecordReadonlyClarificationBoundary;
2327
+ }
2304
2328
  const continuedEarlyColumnPlan = this.columnPlanForMisroutedVisualSemanticsClarification(response, request);
2305
2329
  if (continuedEarlyColumnPlan) {
2306
2330
  return this.compileAdapterResponse(continuedEarlyColumnPlan, request);
@@ -2343,6 +2367,10 @@ class TableAgenticAuthoringTurnFlow {
2343
2367
  if (openOnlySurfaceRuntimeOperation) {
2344
2368
  return openOnlySurfaceRuntimeOperation;
2345
2369
  }
2370
+ const selectedRecordReadonlyBoundary = this.selectedRecordReadonlyBoundaryResponse(executableResponse, request);
2371
+ if (selectedRecordReadonlyBoundary) {
2372
+ return selectedRecordReadonlyBoundary;
2373
+ }
2346
2374
  return executableResponse;
2347
2375
  }
2348
2376
  if (compiledExecutable?.type === 'error') {
@@ -2536,6 +2564,10 @@ class TableAgenticAuthoringTurnFlow {
2536
2564
  patch: normalizedCompiled.patch,
2537
2565
  warnings: warnings.length ? warnings : undefined,
2538
2566
  };
2567
+ const selectedRecordReadonlyBoundary = this.selectedRecordReadonlyBoundaryResponse(compiledResponse, request);
2568
+ if (selectedRecordReadonlyBoundary) {
2569
+ return selectedRecordReadonlyBoundary;
2570
+ }
2539
2571
  const columnVisibilitySurfaceMismatch = this.columnVisibilityPlanForMisroutedSurfaceRuntime(compiledResponse, request);
2540
2572
  if (columnVisibilitySurfaceMismatch) {
2541
2573
  return this.compileAdapterResponse(columnVisibilitySurfaceMismatch, request);
@@ -6221,6 +6253,344 @@ class TableAgenticAuthoringTurnFlow {
6221
6253
  .map((operation) => this.toRecord(operation))
6222
6254
  .filter((operation) => !!operation && this.stringValue(operation['operationId']) === 'table.filter.apply');
6223
6255
  }
6256
+ selectedRecordReadonlyBoundaryResponse(response, request) {
6257
+ if (!this.selectedRecordReadOnlyAnalysisRequested(request))
6258
+ return null;
6259
+ if (!response.patch || this.tableFilterApplyOperations(response.patch).length === 0)
6260
+ return null;
6261
+ if (this.responseDeclaresTableMutation(response))
6262
+ return null;
6263
+ const contextHints = this.contextHintsFor(request);
6264
+ return {
6265
+ type: 'info',
6266
+ sessionId: response.sessionId ?? request?.sessionId,
6267
+ message: this.selectedRecordsAnalyticalSummary(contextHints),
6268
+ warnings: [
6269
+ ...(response.warnings ?? []),
6270
+ 'selected-record-readonly-analysis-filter-materialization-blocked',
6271
+ 'A plataforma bloqueou table.filter.apply porque o turno tinha selectedRecordsContext consultivo e a resposta nao declarou uma decisao semantica mutante explicita.',
6272
+ ],
6273
+ };
6274
+ }
6275
+ selectedRecordReadonlyClarificationBoundaryResponse(response, request) {
6276
+ if (!this.selectedRecordReadOnlyAnalysisRequested(request))
6277
+ return null;
6278
+ if (response.patch)
6279
+ return null;
6280
+ const contextHints = this.contextHintsFor(request);
6281
+ if (!this.selectedRecordSampleRows(contextHints).length)
6282
+ return null;
6283
+ if (!this.responseAsksForSelectedRecordAnalysisDimension(response))
6284
+ return null;
6285
+ return {
6286
+ type: 'info',
6287
+ sessionId: response.sessionId ?? request?.sessionId,
6288
+ message: this.selectedRecordsAnalyticalSummary(contextHints),
6289
+ warnings: [
6290
+ ...(response.warnings ?? []),
6291
+ 'selected-record-readonly-analysis-clarification-collapsed',
6292
+ 'A plataforma respondeu a analise read-only usando selectedRecordsContext.sampleRows em vez de devolver uma clarificacao generica de campo.',
6293
+ ],
6294
+ };
6295
+ }
6296
+ responseAsksForSelectedRecordAnalysisDimension(response) {
6297
+ const text = [
6298
+ response.message,
6299
+ response.explanation,
6300
+ ...(response.questions ?? []),
6301
+ ].map((entry) => this.stringValue(entry)).join(' ');
6302
+ const normalized = this.normalizeLabel(text);
6303
+ if (!normalized)
6304
+ return false;
6305
+ return [
6306
+ 'por qual campo',
6307
+ 'qual campo',
6308
+ 'quais campos',
6309
+ 'campo voce quer',
6310
+ 'campo você quer',
6311
+ 'escolha um campo',
6312
+ 'opcoes uteis',
6313
+ 'opções úteis',
6314
+ 'responda com uma das opcoes',
6315
+ 'responda com uma das opções',
6316
+ 'analisar tudo',
6317
+ ].some((signal) => this.normalizedTextContainsApproxPhrase(normalized, signal));
6318
+ }
6319
+ selectedRecordReadOnlyAnalysisRequested(request) {
6320
+ const contextHints = this.contextHintsFor(request);
6321
+ const selectedCount = this.extractSelectedRecordsCount(contextHints);
6322
+ const hasSelectedRows = selectedCount > 0 || this.selectedRecordSampleRows(contextHints).length > 0;
6323
+ if (!hasSelectedRows)
6324
+ return false;
6325
+ if (this.toRecord(contextHints?.['selectedRecordsFilter'])
6326
+ || this.toRecord(request?.action?.contextHints?.['selectedRecordsFilter'])
6327
+ || this.toRecord(contextHints?.['tableRuntimeOperation'])
6328
+ || this.toRecord(request?.action?.contextHints?.['tableRuntimeOperation'])) {
6329
+ return false;
6330
+ }
6331
+ const normalizedPrompt = this.normalizeLabel(request?.prompt ?? '');
6332
+ if (this.promptExplicitlyForbidsTableMutation(normalizedPrompt))
6333
+ return true;
6334
+ if (this.promptRequestsSelectedRecordDerivedOperation(normalizedPrompt))
6335
+ return false;
6336
+ const responseContract = this.toRecord(contextHints?.['responseContract'])
6337
+ ?? this.toRecord(request?.action?.contextHints?.['responseContract']);
6338
+ if (responseContract) {
6339
+ const preferredResponse = this.normalizeLabel(this.stringValue(responseContract['preferredResponse']));
6340
+ const mutatesTable = responseContract['mutatesTable'];
6341
+ if (preferredResponse === 'info' || mutatesTable === false)
6342
+ return true;
6343
+ if (mutatesTable === true)
6344
+ return false;
6345
+ }
6346
+ const authoringMode = this.normalizeLabel(this.stringValue(contextHints?.['authoringMode']).replace(/[._-]+/gu, ' '));
6347
+ if (authoringMode === 'table selection readonly analysis')
6348
+ return true;
6349
+ return this.selectedRecordPromptLooksConsultative(normalizedPrompt);
6350
+ }
6351
+ selectedRecordPromptLooksConsultative(normalizedPrompt) {
6352
+ if (!normalizedPrompt)
6353
+ return false;
6354
+ if (this.promptRequestsRuntimeFilter(normalizedPrompt)
6355
+ || this.promptRequestsVisualOrStructuralEdit(normalizedPrompt)
6356
+ || this.promptRequestsExportOperation(normalizedPrompt)) {
6357
+ return this.promptExplicitlyForbidsTableMutation(normalizedPrompt);
6358
+ }
6359
+ if (this.promptExplicitlyForbidsTableMutation(normalizedPrompt))
6360
+ return true;
6361
+ // This is a defensive read-only boundary after selectedRecordsContext is already in scope.
6362
+ // It does not choose a table operation; it only avoids materializing one when the turn is a question.
6363
+ const questionSignals = [
6364
+ 'qual',
6365
+ 'quais',
6366
+ 'o que',
6367
+ 'quem',
6368
+ 'quanto',
6369
+ 'quantos',
6370
+ 'compare',
6371
+ 'comparar',
6372
+ 'resuma',
6373
+ 'resumir',
6374
+ 'analise',
6375
+ 'analisar',
6376
+ 'explique',
6377
+ 'explicar',
6378
+ 'tem algum',
6379
+ 'existe algum',
6380
+ 'faixa salarial',
6381
+ 'ganha mais',
6382
+ 'ganha menos',
6383
+ 'em comum',
6384
+ 'padrao',
6385
+ 'padrão',
6386
+ ].map((value) => this.normalizeLabel(value));
6387
+ return normalizedPrompt.includes('?')
6388
+ || questionSignals.some((signal) => this.normalizedTextHasStandaloneToken(normalizedPrompt, signal)
6389
+ || this.normalizedTextContainsApproxPhrase(normalizedPrompt, signal));
6390
+ }
6391
+ promptRequestsSelectedRecordDerivedOperation(normalizedPrompt) {
6392
+ if (!normalizedPrompt)
6393
+ return false;
6394
+ if (this.promptExplicitlyForbidsTableMutation(normalizedPrompt))
6395
+ return false;
6396
+ if (this.promptRequestsExportOperation(normalizedPrompt) || this.promptRequestsVisualOrStructuralEdit(normalizedPrompt)) {
6397
+ return true;
6398
+ }
6399
+ // This ranks explicit selected-record operation wording after selectedRecordsContext is already available.
6400
+ // The primary intent still comes from the semantic turn/contract; these phrases only prevent a read-only
6401
+ // safety boundary from cancelling an operation the user explicitly asked to materialize.
6402
+ return [
6403
+ 'filtrar',
6404
+ 'filtra',
6405
+ 'filtro',
6406
+ 'filtre',
6407
+ 'buscar registros',
6408
+ 'procurar registros',
6409
+ 'outros registros',
6410
+ 'registro parecido',
6411
+ 'registros parecidos',
6412
+ 'parecidos',
6413
+ 'semelhantes',
6414
+ 'mesmo cargo',
6415
+ 'mesmos cargos',
6416
+ 'mesmo departamento',
6417
+ 'mesmos departamentos',
6418
+ 'mesmos valores',
6419
+ 'gente com os mesmos',
6420
+ 'pessoas com os mesmos',
6421
+ 'funcionarios com os mesmos',
6422
+ 'funcionários com os mesmos',
6423
+ 'quero outros',
6424
+ 'quero os mesmo',
6425
+ 'quero os mesmos',
6426
+ 'quero ver gente',
6427
+ ].some((signal) => this.normalizedTextContainsApproxPhrase(normalizedPrompt, signal));
6428
+ }
6429
+ promptExplicitlyForbidsTableMutation(normalizedPrompt) {
6430
+ if (!normalizedPrompt)
6431
+ return false;
6432
+ return [
6433
+ 'sem alterar',
6434
+ 'nao altere',
6435
+ 'não altere',
6436
+ 'nao aplique',
6437
+ 'não aplique',
6438
+ 'so explique',
6439
+ 'só explique',
6440
+ 'apenas explique',
6441
+ 'sem aplicar filtro',
6442
+ 'nao filtrar',
6443
+ 'não filtrar',
6444
+ ].some((signal) => this.normalizedTextContainsApproxPhrase(normalizedPrompt, signal));
6445
+ }
6446
+ responseDeclaresTableMutation(response) {
6447
+ const responseRecord = response;
6448
+ const semanticDecision = this.toRecord(responseRecord['semanticDecision'])
6449
+ ?? this.toRecord(this.toRecord(responseRecord['intentResolution'])?.['semanticDecision'])
6450
+ ?? this.toRecord(this.toRecord(responseRecord['diagnostics'])?.['semanticDecision']);
6451
+ const responseContract = this.toRecord(responseRecord['responseContract'])
6452
+ ?? this.toRecord(semanticDecision?.['responseContract']);
6453
+ if (responseContract?.['mutatesTable'] === true)
6454
+ return true;
6455
+ if (semanticDecision?.['mutatesTable'] === true)
6456
+ return true;
6457
+ const operationKind = this.normalizeLabel(this.stringValue(semanticDecision?.['operationKind']));
6458
+ const changeKind = this.normalizeLabel(this.stringValue(semanticDecision?.['changeKind']));
6459
+ const artifactIntent = this.normalizeLabel(this.stringValue(semanticDecision?.['artifactIntent']));
6460
+ return [
6461
+ operationKind,
6462
+ changeKind,
6463
+ artifactIntent,
6464
+ ].some((value) => value.includes('table filter apply')
6465
+ || value.includes('filter apply')
6466
+ || value.includes('runtime operation')
6467
+ || value.includes('mutation')
6468
+ || value.includes('mutate'));
6469
+ }
6470
+ selectedRecordsAnalyticalSummary(contextHints) {
6471
+ const rows = this.selectedRecordSampleRows(contextHints);
6472
+ const selectedCount = this.extractSelectedRecordsCount(contextHints) || rows.length;
6473
+ if (!rows.length) {
6474
+ return `Encontrei ${selectedCount} registro${selectedCount === 1 ? '' : 's'} selecionado${selectedCount === 1 ? '' : 's'}, mas o contexto enviado não trouxe amostras de valores suficientes para comparar sem alterar a tabela.`;
6475
+ }
6476
+ const columns = this.toArray(this.adapter.getCurrentConfig?.()?.['columns'])
6477
+ .map((column) => this.toRecord(column))
6478
+ .filter((column) => !!column);
6479
+ const labelByField = new Map();
6480
+ for (const column of columns) {
6481
+ const field = this.stringValue(column['field']);
6482
+ if (!field)
6483
+ continue;
6484
+ labelByField.set(field, this.stringValue(column['header']) || this.humanizeField(field));
6485
+ }
6486
+ const fields = Array.from(new Set(rows.flatMap((row) => Object.keys(row))))
6487
+ .filter((field) => this.selectedRecordAnalyticalFieldAllowed(field, rows));
6488
+ const nameField = fields.find((field) => ['nome', 'nome completo', 'funcionario', 'funcionário', 'name'].includes(this.normalizeLabel(field)))
6489
+ ?? fields.find((field) => this.normalizeLabel(field).includes('nome'))
6490
+ ?? fields[0];
6491
+ const names = nameField
6492
+ ? rows.map((row) => this.readableCellValue(row[nameField])).filter((value) => !!value)
6493
+ : [];
6494
+ const common = fields
6495
+ .map((field) => {
6496
+ const values = rows.map((row) => this.readableCellValue(row[field])).filter((value) => !!value);
6497
+ const unique = Array.from(new Set(values));
6498
+ return unique.length === 1 ? `${labelByField.get(field) || this.humanizeField(field)}: ${unique[0]}` : null;
6499
+ })
6500
+ .filter((entry) => !!entry)
6501
+ .slice(0, 5);
6502
+ const numericRanges = fields
6503
+ .map((field) => {
6504
+ const values = rows.map((row) => this.numberValue(row[field])).filter((value) => value !== null);
6505
+ if (values.length < 2)
6506
+ return null;
6507
+ const min = Math.min(...values);
6508
+ const max = Math.max(...values);
6509
+ if (min === max)
6510
+ return null;
6511
+ return `${labelByField.get(field) || this.humanizeField(field)}: ${this.formatAnalysisNumber(min)} até ${this.formatAnalysisNumber(max)}`;
6512
+ })
6513
+ .filter((entry) => !!entry)
6514
+ .slice(0, 4);
6515
+ const dateRanges = fields
6516
+ .map((field) => {
6517
+ const timestamps = rows
6518
+ .map((row) => this.dateTimestamp(row[field]))
6519
+ .filter((value) => value !== null);
6520
+ if (timestamps.length < 2)
6521
+ return null;
6522
+ const min = Math.min(...timestamps);
6523
+ const max = Math.max(...timestamps);
6524
+ if (min === max)
6525
+ return null;
6526
+ return `${labelByField.get(field) || this.humanizeField(field)}: ${this.formatAnalysisDate(min)} até ${this.formatAnalysisDate(max)}`;
6527
+ })
6528
+ .filter((entry) => !!entry)
6529
+ .slice(0, 3);
6530
+ const differences = fields
6531
+ .map((field) => {
6532
+ const values = rows.map((row) => this.readableCellValue(row[field])).filter((value) => !!value);
6533
+ const unique = Array.from(new Set(values));
6534
+ if (unique.length <= 1 || unique.length > 5)
6535
+ return null;
6536
+ return `${labelByField.get(field) || this.humanizeField(field)}: ${unique.join(', ')}`;
6537
+ })
6538
+ .filter((entry) => !!entry)
6539
+ .slice(0, 5);
6540
+ const lines = [
6541
+ `Analisei ${selectedCount} registro${selectedCount === 1 ? '' : 's'} selecionado${selectedCount === 1 ? '' : 's'} sem alterar a tabela.`,
6542
+ names.length ? `Selecionados: ${names.slice(0, 6).join(', ')}.` : null,
6543
+ common.length ? `Em comum: ${common.join('; ')}.` : 'Não encontrei um valor idêntico em todos os campos visíveis enviados.',
6544
+ numericRanges.length ? `Faixas numéricas observadas: ${numericRanges.join('; ')}.` : null,
6545
+ dateRanges.length ? `Períodos observados: ${dateRanges.join('; ')}.` : null,
6546
+ differences.length ? `Diferenças relevantes: ${differences.join('; ')}.` : null,
6547
+ ].filter((line) => !!line);
6548
+ return lines.join('\n');
6549
+ }
6550
+ selectedRecordAnalyticalFieldAllowed(field, rows) {
6551
+ const normalized = this.normalizeLabel(field);
6552
+ if (!normalized)
6553
+ return false;
6554
+ if (normalized === 'id' || normalized.endsWith(' id') || normalized.endsWith(' ids'))
6555
+ return false;
6556
+ return rows.some((row) => this.readableCellValue(row[field]));
6557
+ }
6558
+ readableCellValue(value) {
6559
+ if (value === null || value === undefined)
6560
+ return '';
6561
+ if (typeof value === 'boolean')
6562
+ return value ? 'Sim' : 'Não';
6563
+ if (typeof value === 'number')
6564
+ return Number.isFinite(value) ? this.formatAnalysisNumber(value) : '';
6565
+ if (value instanceof Date)
6566
+ return this.formatAnalysisDate(value.getTime());
6567
+ if (typeof value === 'string')
6568
+ return value.trim();
6569
+ if (Array.isArray(value)) {
6570
+ return value.map((entry) => this.readableCellValue(entry)).filter(Boolean).join(', ');
6571
+ }
6572
+ return '';
6573
+ }
6574
+ dateTimestamp(value) {
6575
+ const raw = value instanceof Date
6576
+ ? value.getTime()
6577
+ : typeof value === 'string'
6578
+ ? Date.parse(value)
6579
+ : Number.NaN;
6580
+ return Number.isFinite(raw) ? raw : null;
6581
+ }
6582
+ formatAnalysisDate(timestamp) {
6583
+ return new Intl.DateTimeFormat('pt-BR', {
6584
+ day: '2-digit',
6585
+ month: '2-digit',
6586
+ year: 'numeric',
6587
+ }).format(new Date(timestamp));
6588
+ }
6589
+ formatAnalysisNumber(value) {
6590
+ return new Intl.NumberFormat('pt-BR', {
6591
+ maximumFractionDigits: 2,
6592
+ }).format(value);
6593
+ }
6224
6594
  visualPresentationSurfaceRuntimeMismatch(response, request) {
6225
6595
  if (!request)
6226
6596
  return null;
@@ -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 { 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-D0NRZNEo.mjs';
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-Bj3EXbi8.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 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-D0NRZNEo.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 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-Bj3EXbi8.mjs';
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "8.0.0-beta.95",
3
+ "version": "8.0.0-beta.97",
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.95",
9
- "@praxisui/core": "^8.0.0-beta.95",
10
- "@praxisui/dynamic-fields": "^8.0.0-beta.95",
11
- "@praxisui/dynamic-form": "^8.0.0-beta.95",
12
- "@praxisui/metadata-editor": "^8.0.0-beta.95",
13
- "@praxisui/rich-content": "^8.0.0-beta.95",
14
- "@praxisui/settings-panel": "^8.0.0-beta.95",
15
- "@praxisui/table-rule-builder": "^8.0.0-beta.95",
8
+ "@praxisui/ai": "^8.0.0-beta.97",
9
+ "@praxisui/core": "^8.0.0-beta.97",
10
+ "@praxisui/dynamic-fields": "^8.0.0-beta.97",
11
+ "@praxisui/dynamic-form": "^8.0.0-beta.97",
12
+ "@praxisui/metadata-editor": "^8.0.0-beta.97",
13
+ "@praxisui/rich-content": "^8.0.0-beta.97",
14
+ "@praxisui/settings-panel": "^8.0.0-beta.97",
15
+ "@praxisui/table-rule-builder": "^8.0.0-beta.97",
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.95",
20
+ "@praxisui/dialog": "^8.0.0-beta.97",
21
21
  "rxjs": "~7.8.0"
22
22
  },
23
23
  "dependencies": {