@happyvertical/smrt-ui 0.42.6 → 0.42.7

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.
@@ -28,12 +28,40 @@ export interface DataSurfaceIdentity {
28
28
  subject?: DataSurfaceSubject;
29
29
  }
30
30
  export type DataSurfaceColumnCapability = 'read' | 'search' | 'filter' | 'sort' | 'project';
31
+ /** Presentation tier emitted by policy-aware domain adapters. */
32
+ export type DataSurfaceColumnVisibility = 'basic' | 'advanced' | 'hidden';
33
+ /** A domain-neutral column role. Adapters use roles to protect structural columns. */
34
+ export type DataSurfaceColumnRole = 'data' | 'status' | 'computed' | 'row-key' | 'selection' | 'action';
35
+ /** Operator allowlists are intentionally strings: #2444 owns query semantics. */
36
+ export interface DataSurfaceColumnOperators {
37
+ search?: string[];
38
+ filter?: string[];
39
+ sort?: string[];
40
+ }
31
41
  export interface DataSurfaceColumnDescriptor {
32
42
  id: string;
33
43
  label: string;
34
44
  description?: string;
35
45
  sensitivity?: DataSurfaceSensitivity;
36
46
  capabilities: DataSurfaceColumnCapability[];
47
+ /** Domain field identity; never accepted as a request path. */
48
+ fieldName?: string;
49
+ /** Effective policy visibility, when a domain adapter supplies one. */
50
+ visibility?: DataSurfaceColumnVisibility;
51
+ /** Stable policy order; domain column ids remain unchanged. */
52
+ order?: number;
53
+ /** Structural columns are preserved even when field policy narrows data columns. */
54
+ role?: DataSurfaceColumnRole;
55
+ /** Responsive adapters consume this without importing DataTable types. */
56
+ responsivePriority?: number;
57
+ /** Per-operation operator allowlists, narrowed by policy adapters. */
58
+ operators?: DataSurfaceColumnOperators;
59
+ /** Explicit aliases for adapters that mirror the canonical query schema. */
60
+ searchOperators?: string[];
61
+ filterOperators?: string[];
62
+ sortOperators?: string[];
63
+ /** Explicit readability is useful when read capability is policy-gated. */
64
+ readable?: boolean;
37
65
  }
38
66
  /** #2444 owns the canonical query language; this declares only its bounds. */
39
67
  export type DataSurfaceQueryMode = 'rows' | 'count' | 'facets';
@@ -41,6 +69,10 @@ export interface DataSurfaceQueryCapabilities {
41
69
  modes: DataSurfaceQueryMode[];
42
70
  /** Explicit allowlist; field paths are not accepted in requests. */
43
71
  projectableColumnIds: string[];
72
+ /** Explicit allowlists for non-projection query operations. */
73
+ searchableColumnIds?: string[];
74
+ filterableColumnIds?: string[];
75
+ sortableColumnIds?: string[];
44
76
  }
45
77
  export interface DataSurfaceVisibleControl {
46
78
  /** Stable command name accepted by the mounted surface. */
@@ -56,6 +88,8 @@ export interface DataSurfaceActionDescriptor {
56
88
  sensitivity?: DataSurfaceSensitivity;
57
89
  selectionScopes: DataSurfaceSelectionScope[];
58
90
  requiresConfirmation?: boolean;
91
+ /** Optional column dependencies used by field-policy adapters. */
92
+ columnIds?: string[];
59
93
  }
60
94
  /** Per-surface limits; generic envelopes use DATA_SURFACE_MAX_REQUEST_BYTES. */
61
95
  export interface DataSurfaceLimits {
@@ -233,6 +267,8 @@ export interface DataSurfaceRegistry {
233
267
  }
234
268
  /** Generic browser-transport ceiling for normalized command/action envelopes. */
235
269
  export declare const DATA_SURFACE_MAX_REQUEST_BYTES = 100000;
270
+ /** Maximum length shared by every DataSurface protocol identifier. */
271
+ export declare const DATA_SURFACE_IDENTIFIER_MAX_LENGTH = 256;
236
272
  /** Per-surface LRU capacity for command acknowledgement replay. */
237
273
  export declare const DATA_SURFACE_MAX_REPLAY_ENTRIES = 100;
238
274
  export declare function normalizeDataSurfaceDescriptor(value: DataSurfaceDescriptor): DataSurfaceDescriptor;
@@ -1 +1 @@
1
- {"version":3,"file":"data-surface.d.ts","sourceRoot":"","sources":["../../../src/components/data/data-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-surface.d.ts","sourceRoot":"","sources":["../../../src/components/data/data-surface.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,11 @@
8
8
  */
9
9
  /** Generic browser-transport ceiling for normalized command/action envelopes. */
10
10
  export const DATA_SURFACE_MAX_REQUEST_BYTES = 100_000;
11
+ /** Maximum length shared by every DataSurface protocol identifier. */
12
+ export const DATA_SURFACE_IDENTIFIER_MAX_LENGTH = 256;
11
13
  /** Per-surface LRU capacity for command acknowledgement replay. */
12
14
  export const DATA_SURFACE_MAX_REPLAY_ENTRIES = 100;
13
15
  const MAX_QUERY_LIMIT = 1_000;
14
- const MAX_REQUEST_ID_LENGTH = 256;
15
16
  const MAX_CURSOR_LENGTH = 2_048;
16
17
  const MAX_JSON_DEPTH = 16;
17
18
  const MAX_JSON_CONTAINER_ITEMS = 1_000;
@@ -45,6 +46,19 @@ const SELECTION_SCOPES = new Set([
45
46
  'explicit-ids',
46
47
  'all-matching',
47
48
  ]);
49
+ const COLUMN_VISIBILITIES = new Set([
50
+ 'basic',
51
+ 'advanced',
52
+ 'hidden',
53
+ ]);
54
+ const COLUMN_ROLES = new Set([
55
+ 'data',
56
+ 'status',
57
+ 'computed',
58
+ 'row-key',
59
+ 'selection',
60
+ 'action',
61
+ ]);
48
62
  const FORBIDDEN_BOUNDARY_KEYS = new Set([
49
63
  'tenant',
50
64
  'tenantid',
@@ -94,11 +108,26 @@ function stringValue(value, label) {
94
108
  }
95
109
  return value;
96
110
  }
111
+ function identifierValue(value, label) {
112
+ const result = stringValue(value, label);
113
+ if (result.length > DATA_SURFACE_IDENTIFIER_MAX_LENGTH) {
114
+ throw new TypeError(`${label} cannot exceed ${DATA_SURFACE_IDENTIFIER_MAX_LENGTH} characters`);
115
+ }
116
+ return result;
117
+ }
97
118
  function optionalString(value, label) {
98
119
  if (value === undefined)
99
120
  return undefined;
100
121
  return stringValue(value, label);
101
122
  }
123
+ function optionalFiniteNumber(value, label) {
124
+ if (value === undefined)
125
+ return undefined;
126
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
127
+ throw new TypeError(`${label} must be a finite number`);
128
+ }
129
+ return value;
130
+ }
102
131
  function positiveInteger(value, label) {
103
132
  if (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0) {
104
133
  throw new TypeError(`${label} must be a positive safe integer`);
@@ -319,13 +348,13 @@ function normalizeIdentity(value) {
319
348
  exactKeys(source, ['type', 'id', 'label'], 'DataSurface subject');
320
349
  const label = optionalString(source.label, 'DataSurface subject label');
321
350
  subject = {
322
- type: stringValue(source.type, 'DataSurface subject type'),
323
- id: stringValue(source.id, 'DataSurface subject id'),
351
+ type: identifierValue(source.type, 'DataSurface subject type'),
352
+ id: identifierValue(source.id, 'DataSurface subject id'),
324
353
  ...(label ? { label } : {}),
325
354
  };
326
355
  }
327
356
  return {
328
- surfaceId: stringValue(object.surfaceId, 'DataSurface surface id'),
357
+ surfaceId: identifierValue(object.surfaceId, 'DataSurface surface id'),
329
358
  kind,
330
359
  ...(subject ? { subject } : {}),
331
360
  };
@@ -352,6 +381,9 @@ function normalizeStringArray(value, label, options = {}) {
352
381
  }
353
382
  return options.sort ? values.sort() : values;
354
383
  }
384
+ function normalizeIdentifierArray(value, label, options = {}) {
385
+ return normalizeStringArray(value, label, options).map((entry) => identifierValue(entry, label));
386
+ }
355
387
  function normalizeCapabilityArray(value, label) {
356
388
  const capabilities = normalizeStringArray(value, label, { sort: true });
357
389
  for (const capability of capabilities) {
@@ -370,6 +402,83 @@ function normalizeSensitivity(value, label) {
370
402
  }
371
403
  return sensitivity;
372
404
  }
405
+ function normalizeColumnOperators(value, label) {
406
+ if (value === undefined)
407
+ return undefined;
408
+ const operators = plainObject(value, label);
409
+ exactKeys(operators, ['search', 'filter', 'sort'], label);
410
+ const search = operators.search === undefined
411
+ ? undefined
412
+ : normalizeStringArray(operators.search, `${label} search operators`, {
413
+ sort: true,
414
+ });
415
+ const filter = operators.filter === undefined
416
+ ? undefined
417
+ : normalizeStringArray(operators.filter, `${label} filter operators`, {
418
+ sort: true,
419
+ });
420
+ const sort = operators.sort === undefined
421
+ ? undefined
422
+ : normalizeStringArray(operators.sort, `${label} sort operators`, {
423
+ sort: true,
424
+ });
425
+ if (!search && !filter && !sort)
426
+ return {};
427
+ return {
428
+ ...(search ? { search } : {}),
429
+ ...(filter ? { filter } : {}),
430
+ ...(sort ? { sort } : {}),
431
+ };
432
+ }
433
+ function normalizeColumnDescriptorMetadata(column) {
434
+ const fieldName = optionalString(column.fieldName, 'DataSurface column field name');
435
+ const rawVisibility = optionalString(column.visibility, 'DataSurface column visibility');
436
+ if (rawVisibility &&
437
+ !COLUMN_VISIBILITIES.has(rawVisibility)) {
438
+ throw new TypeError(`Unsupported DataSurface column visibility: ${rawVisibility}`);
439
+ }
440
+ const rawRole = optionalString(column.role, 'DataSurface column role');
441
+ if (rawRole && !COLUMN_ROLES.has(rawRole)) {
442
+ throw new TypeError(`Unsupported DataSurface column role: ${rawRole}`);
443
+ }
444
+ if (column.readable !== undefined && typeof column.readable !== 'boolean') {
445
+ throw new TypeError('DataSurface column readable must be boolean');
446
+ }
447
+ const normalizeAliasOperators = (key) => column[key] === undefined
448
+ ? undefined
449
+ : normalizeStringArray(column[key], `DataSurface column ${key}`, {
450
+ sort: true,
451
+ });
452
+ const searchOperators = normalizeAliasOperators('searchOperators');
453
+ const filterOperators = normalizeAliasOperators('filterOperators');
454
+ const sortOperators = normalizeAliasOperators('sortOperators');
455
+ return {
456
+ ...(fieldName ? { fieldName } : {}),
457
+ ...(rawVisibility
458
+ ? { visibility: rawVisibility }
459
+ : {}),
460
+ ...(column.order === undefined
461
+ ? {}
462
+ : {
463
+ order: optionalFiniteNumber(column.order, 'DataSurface column order'),
464
+ }),
465
+ ...(rawRole ? { role: rawRole } : {}),
466
+ ...(column.responsivePriority === undefined
467
+ ? {}
468
+ : {
469
+ responsivePriority: optionalFiniteNumber(column.responsivePriority, 'DataSurface column responsive priority'),
470
+ }),
471
+ ...(column.operators === undefined
472
+ ? {}
473
+ : {
474
+ operators: normalizeColumnOperators(column.operators, 'DataSurface column operators'),
475
+ }),
476
+ ...(searchOperators ? { searchOperators } : {}),
477
+ ...(filterOperators ? { filterOperators } : {}),
478
+ ...(sortOperators ? { sortOperators } : {}),
479
+ ...(column.readable === undefined ? {} : { readable: column.readable }),
480
+ };
481
+ }
373
482
  function normalizeSelection(value) {
374
483
  const object = plainObject(value, 'DataSurface selection');
375
484
  const scope = stringValue(object.scope, 'DataSurface selection scope');
@@ -394,7 +503,11 @@ function normalizeSelection(value) {
394
503
  (typeof rowId !== 'number' || !Number.isFinite(rowId))) {
395
504
  throw new TypeError('DataSurface row ids must be finite strings or numbers');
396
505
  }
397
- const normalized = typeof rowId === 'number' && rowId === 0 ? 0 : rowId;
506
+ const normalized = typeof rowId === 'string'
507
+ ? identifierValue(rowId, 'DataSurface row id')
508
+ : rowId === 0
509
+ ? 0
510
+ : rowId;
398
511
  rowIds.set(`${typeof normalized}:${String(normalized)}`, normalized);
399
512
  }
400
513
  return {
@@ -411,7 +524,7 @@ function normalizeSelection(value) {
411
524
  exactKeys(object, ['scope', 'queryFingerprint'], 'DataSurface all-matching selection');
412
525
  return {
413
526
  scope,
414
- queryFingerprint: stringValue(object.queryFingerprint, 'DataSurface query fingerprint'),
527
+ queryFingerprint: identifierValue(object.queryFingerprint, 'DataSurface query fingerprint'),
415
528
  };
416
529
  }
417
530
  export function normalizeDataSurfaceDescriptor(value) {
@@ -437,22 +550,46 @@ export function normalizeDataSurfaceDescriptor(value) {
437
550
  }
438
551
  const columns = object.columns.map((value) => {
439
552
  const column = plainObject(value, 'DataSurface column');
440
- exactKeys(column, ['id', 'label', 'description', 'sensitivity', 'capabilities'], 'DataSurface column');
553
+ exactKeys(column, [
554
+ 'id',
555
+ 'label',
556
+ 'description',
557
+ 'sensitivity',
558
+ 'capabilities',
559
+ 'fieldName',
560
+ 'visibility',
561
+ 'order',
562
+ 'role',
563
+ 'responsivePriority',
564
+ 'operators',
565
+ 'searchOperators',
566
+ 'filterOperators',
567
+ 'sortOperators',
568
+ 'readable',
569
+ ], 'DataSurface column');
441
570
  const sensitivity = normalizeSensitivity(column.sensitivity, 'DataSurface column sensitivity');
442
571
  const description = optionalString(column.description, 'DataSurface column description');
572
+ const metadata = normalizeColumnDescriptorMetadata(column);
443
573
  return {
444
- id: stringValue(column.id, 'DataSurface column id'),
574
+ id: identifierValue(column.id, 'DataSurface column id'),
445
575
  label: stringValue(column.label, 'DataSurface column label'),
446
576
  ...(description ? { description } : {}),
447
577
  ...(sensitivity ? { sensitivity } : {}),
448
578
  capabilities: normalizeCapabilityArray(column.capabilities, 'DataSurface column capabilities'),
579
+ ...metadata,
449
580
  };
450
581
  });
451
582
  if (new Set(columns.map((column) => column.id)).size !== columns.length) {
452
583
  throw new TypeError('DataSurface descriptor column ids must be unique');
453
584
  }
454
585
  const query = plainObject(object.query, 'DataSurface query capabilities');
455
- exactKeys(query, ['modes', 'projectableColumnIds'], 'DataSurface query capabilities');
586
+ exactKeys(query, [
587
+ 'modes',
588
+ 'projectableColumnIds',
589
+ 'searchableColumnIds',
590
+ 'filterableColumnIds',
591
+ 'sortableColumnIds',
592
+ ], 'DataSurface query capabilities');
456
593
  const modes = normalizeStringArray(query.modes, 'DataSurface query modes', {
457
594
  sort: true,
458
595
  });
@@ -461,13 +598,27 @@ export function normalizeDataSurfaceDescriptor(value) {
461
598
  throw new TypeError(`Unsupported DataSurface query mode: ${mode}`);
462
599
  }
463
600
  }
464
- const projectableColumnIds = normalizeStringArray(query.projectableColumnIds, 'DataSurface projectable column ids', { sort: true });
601
+ const projectableColumnIds = normalizeIdentifierArray(query.projectableColumnIds, 'DataSurface projectable column ids', { sort: true });
465
602
  const knownColumns = new Set(columns.map((column) => column.id));
466
603
  for (const columnId of projectableColumnIds) {
467
604
  if (!knownColumns.has(columnId)) {
468
605
  throw new TypeError(`Unknown projectable DataSurface column: ${columnId}`);
469
606
  }
470
607
  }
608
+ const queryColumnAllowlist = (value, label) => {
609
+ if (value === undefined)
610
+ return undefined;
611
+ const ids = normalizeStringArray(value, label, { sort: true });
612
+ for (const columnId of ids) {
613
+ if (!knownColumns.has(columnId)) {
614
+ throw new TypeError(`Unknown ${label}: ${columnId}`);
615
+ }
616
+ }
617
+ return ids;
618
+ };
619
+ const searchableColumnIds = queryColumnAllowlist(query.searchableColumnIds, 'searchable DataSurface column');
620
+ const filterableColumnIds = queryColumnAllowlist(query.filterableColumnIds, 'filterable DataSurface column');
621
+ const sortableColumnIds = queryColumnAllowlist(query.sortableColumnIds, 'sortable DataSurface column');
471
622
  if (!Array.isArray(object.controls)) {
472
623
  throw new TypeError('DataSurface controls must be an array');
473
624
  }
@@ -476,7 +627,7 @@ export function normalizeDataSurfaceDescriptor(value) {
476
627
  exactKeys(control, ['id', 'label', 'description'], 'DataSurface control');
477
628
  const description = optionalString(control.description, 'DataSurface control description');
478
629
  return {
479
- id: stringValue(control.id, 'DataSurface control id'),
630
+ id: identifierValue(control.id, 'DataSurface control id'),
480
631
  label: stringValue(control.label, 'DataSurface control label'),
481
632
  ...(description ? { description } : {}),
482
633
  };
@@ -496,6 +647,7 @@ export function normalizeDataSurfaceDescriptor(value) {
496
647
  'sensitivity',
497
648
  'selectionScopes',
498
649
  'requiresConfirmation',
650
+ 'columnIds',
499
651
  ], 'DataSurface action');
500
652
  if (action.requiresConfirmation !== undefined &&
501
653
  typeof action.requiresConfirmation !== 'boolean') {
@@ -509,8 +661,17 @@ export function normalizeDataSurfaceDescriptor(value) {
509
661
  }
510
662
  const sensitivity = normalizeSensitivity(action.sensitivity, 'DataSurface action sensitivity');
511
663
  const description = optionalString(action.description, 'DataSurface action description');
664
+ const columnIds = action.columnIds === undefined
665
+ ? undefined
666
+ : normalizeStringArray(action.columnIds, 'DataSurface action column ids', {
667
+ sort: true,
668
+ });
669
+ if (columnIds?.some((columnId) => !knownColumns.has(columnId))) {
670
+ const unknownColumnId = columnIds.find((columnId) => !knownColumns.has(columnId));
671
+ throw new TypeError(`Unknown DataSurface action column id: ${unknownColumnId}`);
672
+ }
512
673
  return {
513
- id: stringValue(action.id, 'DataSurface action id'),
674
+ id: identifierValue(action.id, 'DataSurface action id'),
514
675
  label: stringValue(action.label, 'DataSurface action label'),
515
676
  ...(description ? { description } : {}),
516
677
  ...(sensitivity ? { sensitivity } : {}),
@@ -518,6 +679,7 @@ export function normalizeDataSurfaceDescriptor(value) {
518
679
  ...(action.requiresConfirmation === undefined
519
680
  ? {}
520
681
  : { requiresConfirmation: action.requiresConfirmation }),
682
+ ...(columnIds ? { columnIds } : {}),
521
683
  };
522
684
  });
523
685
  if (new Set(actions.map((action) => action.id)).size !== actions.length) {
@@ -529,7 +691,7 @@ export function normalizeDataSurfaceDescriptor(value) {
529
691
  if (maxQueryRows > MAX_QUERY_LIMIT) {
530
692
  throw new TypeError(`DataSurface maxQueryRows cannot exceed ${MAX_QUERY_LIMIT}`);
531
693
  }
532
- const rowKey = stringValue(object.rowKey, 'DataSurface row key');
694
+ const rowKey = identifierValue(object.rowKey, 'DataSurface row key');
533
695
  if (!knownColumns.has(rowKey)) {
534
696
  throw new TypeError('DataSurface rowKey must name a declared column');
535
697
  }
@@ -542,7 +704,13 @@ export function normalizeDataSurfaceDescriptor(value) {
542
704
  ...(description ? { description } : {}),
543
705
  rowKey,
544
706
  columns,
545
- query: { modes, projectableColumnIds },
707
+ query: {
708
+ modes,
709
+ projectableColumnIds,
710
+ ...(searchableColumnIds ? { searchableColumnIds } : {}),
711
+ ...(filterableColumnIds ? { filterableColumnIds } : {}),
712
+ ...(sortableColumnIds ? { sortableColumnIds } : {}),
713
+ },
546
714
  controls,
547
715
  actions,
548
716
  limits: {
@@ -581,13 +749,10 @@ export function normalizeDataSurfaceVisibleCommand(value) {
581
749
  if (object.version !== 1) {
582
750
  throw new TypeError('Unsupported DataSurface visible command version');
583
751
  }
584
- const commandId = stringValue(object.commandId, 'DataSurface command id');
585
- if (commandId.length > MAX_REQUEST_ID_LENGTH) {
586
- throw new TypeError('DataSurface command id is too long');
587
- }
752
+ const commandId = identifierValue(object.commandId, 'DataSurface command id');
588
753
  const commandIdentity = normalizeIdentity(object.identity);
589
754
  const expectedRevision = revisionNumber(object.expectedRevision);
590
- const controlId = stringValue(object.controlId, 'DataSurface control id');
755
+ const controlId = identifierValue(object.controlId, 'DataSurface control id');
591
756
  assertRequestByteLimit(value, 'DataSurface visible command');
592
757
  const normalized = {
593
758
  version: 1,
@@ -610,10 +775,7 @@ export function normalizeDataSurfaceQueryRequest(value) {
610
775
  if (object.version !== 1) {
611
776
  throw new TypeError('Unsupported DataSurface query request version');
612
777
  }
613
- const requestId = stringValue(object.requestId, 'DataSurface query request id');
614
- if (requestId.length > MAX_REQUEST_ID_LENGTH) {
615
- throw new TypeError('DataSurface query request id is too long');
616
- }
778
+ const requestId = identifierValue(object.requestId, 'DataSurface query request id');
617
779
  const identity = normalizeIdentity(object.identity);
618
780
  if (kind === 'rows') {
619
781
  exactKeys(object, [
@@ -644,7 +806,7 @@ export function normalizeDataSurfaceQueryRequest(value) {
644
806
  ...(object.projection === undefined
645
807
  ? {}
646
808
  : {
647
- projection: normalizeStringArray(object.projection, 'DataSurface query projection', { sort: true }),
809
+ projection: normalizeIdentifierArray(object.projection, 'DataSurface query projection', { sort: true }),
648
810
  }),
649
811
  };
650
812
  }
@@ -665,7 +827,7 @@ export function normalizeDataSurfaceQueryRequest(value) {
665
827
  requestId,
666
828
  identity,
667
829
  kind,
668
- columnId: stringValue(object.columnId, 'DataSurface facets query column id'),
830
+ columnId: identifierValue(object.columnId, 'DataSurface facets query column id'),
669
831
  limit,
670
832
  };
671
833
  }
@@ -686,17 +848,14 @@ export function normalizeDataSurfaceActionRequest(value) {
686
848
  if (object.version !== 1) {
687
849
  throw new TypeError('Unsupported DataSurface action request version');
688
850
  }
689
- const requestId = stringValue(object.requestId, 'DataSurface action request id');
690
- if (requestId.length > MAX_REQUEST_ID_LENGTH) {
691
- throw new TypeError('DataSurface action request id is too long');
692
- }
851
+ const requestId = identifierValue(object.requestId, 'DataSurface action request id');
693
852
  const phase = stringValue(object.phase, 'DataSurface action phase');
694
853
  if (phase !== 'preview' && phase !== 'apply') {
695
854
  throw new TypeError(`Unsupported DataSurface action phase: ${phase}`);
696
855
  }
697
856
  const confirmationToken = optionalString(object.confirmationToken, 'DataSurface confirmation token');
698
857
  const actionIdentity = normalizeIdentity(object.identity);
699
- const actionId = stringValue(object.actionId, 'DataSurface action id');
858
+ const actionId = identifierValue(object.actionId, 'DataSurface action id');
700
859
  const selection = normalizeSelection(object.selection);
701
860
  assertRequestByteLimit(value, 'DataSurface action request');
702
861
  const normalized = {
@@ -0,0 +1,9 @@
1
+ /** Maps declared DataSurface controls onto the existing DataTable command model. */
2
+ import type { DataTableCommand } from './DataTableController.js';
3
+ import type { DataSurfaceVisibleCommand } from './data-surface.js';
4
+ /**
5
+ * Returns `null` for a component-local control (focus, reveal, refresh, …) or
6
+ * an invalid table command. The mounted component owns those local controls.
7
+ */
8
+ export declare function dataTableCommandFromDataSurfaceCommand(command: DataSurfaceVisibleCommand): DataTableCommand | null;
9
+ //# sourceMappingURL=data-table-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-surface.d.ts","sourceRoot":"","sources":["../../../src/components/data/data-table-surface.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,OAAO,KAAK,EAEV,gBAAgB,EAKjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAqJ3B;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,yBAAyB,GACjC,gBAAgB,GAAG,IAAI,CA8EzB"}