react-semaphor 0.1.305 → 0.1.307

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.
Files changed (46) hide show
  1. package/dist/brand-studio/index.cjs +2 -2
  2. package/dist/brand-studio/index.js +14 -14
  3. package/dist/chunks/braces-CkL8POe0.js +6 -0
  4. package/dist/chunks/braces-e5qkN-I_.js +23 -0
  5. package/dist/chunks/{dashboard-controls-DjOO0fkG.js → dashboard-controls-5bibC_5a.js} +141 -128
  6. package/dist/chunks/dashboard-controls-Dwet_9h0.js +52 -0
  7. package/dist/chunks/{dashboard-filter-controls-button-YvRfoUuN.js → dashboard-filter-controls-button-D0k9NDci.js} +4 -4
  8. package/dist/chunks/{dashboard-filter-controls-button-CR0_duPw.js → dashboard-filter-controls-button-ZeYO5jux.js} +1 -1
  9. package/dist/chunks/{dashboard-json-tOsNVccY.js → dashboard-json-Bi5XdgG5.js} +1 -1
  10. package/dist/chunks/{dashboard-json-BYLaWi0-.js → dashboard-json-CfRKLL7C.js} +2 -2
  11. package/dist/chunks/{dashboard-summary-settings-dialog-CMxi2arh.js → dashboard-summary-settings-dialog-Bj4_wBW9.js} +2 -2
  12. package/dist/chunks/{dashboard-summary-settings-dialog-DioOegLQ.js → dashboard-summary-settings-dialog-DD9Aj2XH.js} +1 -1
  13. package/dist/chunks/{edit-dashboard-visual-ClLcFLD_.js → edit-dashboard-visual-DIuzuJfj.js} +8796 -8713
  14. package/dist/chunks/edit-dashboard-visual-Wfs53Kbn.js +183 -0
  15. package/dist/chunks/{index-DJFckbGE.js → index-DMFCfjgD.js} +52348 -49752
  16. package/dist/chunks/index-DQCMUspd.js +1350 -0
  17. package/dist/chunks/{palette-BqJlrRto.js → palette-D5Lorzf2.js} +2 -7
  18. package/dist/chunks/{palette-DD-i7bNS.js → palette-Oa4O9jWG.js} +3 -23
  19. package/dist/chunks/{resource-management-panel-CoHy6cOi.js → resource-management-panel-CNr6uMMf.js} +1 -1
  20. package/dist/chunks/{resource-management-panel-BS9nfJbb.js → resource-management-panel-Dqc3gfYn.js} +3 -3
  21. package/dist/chunks/{save-j-clxFtx.js → save-CDX2p4v1.js} +1 -1
  22. package/dist/chunks/{save-CFBIhbHD.js → save-zEdICevW.js} +1 -1
  23. package/dist/chunks/{switch-BH17qlxH.js → switch-BPFzGTzF.js} +34 -29
  24. package/dist/chunks/{switch-BFhVVwh9.js → switch-CKiXRRoh.js} +432 -390
  25. package/dist/chunks/{use-create-flow-overlay-state-Lmk-mIkA.js → use-create-flow-overlay-state-CLyv5c2m.js} +4 -4
  26. package/dist/chunks/{use-create-flow-overlay-state-BSUi4chy.js → use-create-flow-overlay-state-CSMe5Ls6.js} +1 -1
  27. package/dist/chunks/{use-visual-utils-CR9nLyEz.js → use-visual-utils-DDAs4dCz.js} +1 -1
  28. package/dist/chunks/{use-visual-utils-CikIkKb2.js → use-visual-utils-Det6M3Wd.js} +2 -2
  29. package/dist/dashboard/index.cjs +1 -1
  30. package/dist/dashboard/index.js +1 -1
  31. package/dist/index.cjs +1 -1
  32. package/dist/index.js +7 -7
  33. package/dist/style.css +1 -1
  34. package/dist/surfboard/index.cjs +1 -1
  35. package/dist/surfboard/index.js +2 -2
  36. package/dist/types/dashboard.d.ts +142 -44
  37. package/dist/types/main.d.ts +144 -46
  38. package/dist/types/shared.d.ts +142 -44
  39. package/dist/types/surfboard.d.ts +142 -44
  40. package/dist/types/types.d.ts +142 -44
  41. package/package.json +4 -4
  42. package/dist/chunks/dashboard-controls-BcwXajYv.js +0 -47
  43. package/dist/chunks/edit-dashboard-visual-331vOmKT.js +0 -183
  44. package/dist/chunks/index-BOGpMmRo.js +0 -1360
  45. package/dist/chunks/rotate-ccw-CdGW8Rxm.js +0 -6
  46. package/dist/chunks/rotate-ccw-X8MbX_hF.js +0 -14
@@ -259,10 +259,7 @@ declare interface ColumnSettings {
259
259
  maxWidth?: number;
260
260
  textOverflow?: 'ellipsis' | 'wrap' | 'clip';
261
261
  textWrap: 'wrap' | 'nowrap';
262
- /**
263
- * Totals-row behavior for this column. Undefined = 'none'. The footer
264
- * renders only when at least one visible column has a non-'none' behavior.
265
- */
262
+ /** Deprecated/inert. Totals are controlled by tablePrefs.tableStyle.totals. */
266
263
  totalsBehavior?: TotalsBehavior;
267
264
  totalsLabel?: string;
268
265
  numberFormat: {
@@ -302,6 +299,90 @@ declare type ColumnSettingsMap = Record<string, ColumnSettings>;
302
299
 
303
300
  declare type ColumnType = 'string' | 'number' | 'date';
304
301
 
302
+ declare type ComparisonOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte';
303
+
304
+ declare type ConditionalFormatCondition = {
305
+ kind: 'comparison';
306
+ columnId: string;
307
+ operator: ComparisonOperator;
308
+ value: unknown;
309
+ } | {
310
+ kind: 'between';
311
+ columnId: string;
312
+ min: unknown;
313
+ max: unknown;
314
+ inclusive?: boolean;
315
+ } | {
316
+ kind: 'blank';
317
+ columnId: string;
318
+ isBlank: boolean;
319
+ } | {
320
+ kind: 'contains';
321
+ columnId: string;
322
+ value: string;
323
+ caseSensitive?: boolean;
324
+ exact?: boolean;
325
+ } | {
326
+ kind: 'topBottom';
327
+ columnId: string;
328
+ direction: 'top' | 'bottom';
329
+ count: number;
330
+ } | {
331
+ kind: 'colorScale';
332
+ columnId: string;
333
+ range: 'auto' | 'manual';
334
+ min?: number;
335
+ mid?: number;
336
+ max?: number;
337
+ colors: {
338
+ min: string;
339
+ mid?: string;
340
+ max: string;
341
+ };
342
+ } | {
343
+ kind: 'dataBar';
344
+ columnId: string;
345
+ range: 'auto' | 'manual';
346
+ min?: number;
347
+ max?: number;
348
+ color: string;
349
+ showValue?: boolean;
350
+ };
351
+
352
+ declare type ConditionalFormatRule = {
353
+ id: string;
354
+ name?: string;
355
+ enabled?: boolean;
356
+ target: ConditionalFormatTarget;
357
+ condition: ConditionalFormatCondition;
358
+ style?: ConditionalFormatStyle;
359
+ };
360
+
361
+ declare type ConditionalFormatStyle = {
362
+ backgroundColor?: string;
363
+ textColor?: string;
364
+ fontWeight?: 'normal' | 'medium' | 'semibold' | 'bold';
365
+ italic?: boolean;
366
+ textDecoration?: 'none' | 'underline' | 'line-through';
367
+ icon?: 'arrowUp' | 'arrowDown' | 'warning' | 'check' | 'x';
368
+ dataBar?: {
369
+ color: string;
370
+ showValue: boolean;
371
+ };
372
+ };
373
+
374
+ declare type ConditionalFormatTarget = {
375
+ level: 'cell' | 'row';
376
+ columnIds?: string[];
377
+ conditionColumnId?: string;
378
+ applyToColumnIds?: string[];
379
+ tableParts?: TablePart[];
380
+ rowRoles?: string[];
381
+ depth?: number;
382
+ includeTotals?: boolean;
383
+ includeSubtotals?: boolean;
384
+ };
385
+
305
386
  declare type ConnectionType = 'GoogleSheets' | 'FileUpload' | 'MySQL' | 'MSSQL' | 'PostgreSQL' | 'BigQuery' | 'Redshift' | 'Snowflake' | 'S3' | 'clickhouse' | 'S3Tables' | 'API' | 'none';
306
387
 
307
388
  declare type ControlBinding = {
@@ -708,12 +789,6 @@ declare type DocumentSpacerSection = {
708
789
  heightPx: number;
709
790
  };
710
791
 
711
- declare type DocumentTableDensity = 'comfortable' | 'standard' | 'compact' | 'dense';
712
-
713
- declare type DocumentTableGridLines = 'none' | 'outer' | 'inner' | 'horizontal' | 'vertical' | 'top' | 'right' | 'bottom' | 'left' | 'full';
714
-
715
- declare type DocumentTableHeaderStyle = 'plain' | 'filled' | 'accent';
716
-
717
792
  declare type DocumentTableSection = {
718
793
  id: string;
719
794
  type: 'table';
@@ -724,30 +799,9 @@ declare type DocumentTableSection = {
724
799
  columnFormatting?: Record<string, unknown>;
725
800
  repeatHeaderOnPageBreak?: boolean;
726
801
  rowHeightPx?: number;
727
- style?: DocumentTableStyle;
728
- totalsStyle?: DocumentTableTotalsStyle;
729
802
  };
730
803
  };
731
804
 
732
- declare type DocumentTableStyle = {
733
- density?: DocumentTableDensity;
734
- headerStyle?: DocumentTableHeaderStyle;
735
- headerBackgroundColor?: string;
736
- headerTextColor?: string;
737
- stripedRows?: boolean;
738
- gridLines?: DocumentTableGridLines;
739
- wrapText?: boolean;
740
- };
741
-
742
- declare type DocumentTableTotalsFontWeight = 'normal' | 'medium' | 'semibold' | 'bold';
743
-
744
- declare type DocumentTableTotalsStyle = {
745
- backgroundColor?: string;
746
- textColor?: string;
747
- fontWeight?: DocumentTableTotalsFontWeight;
748
- borderTop?: boolean;
749
- };
750
-
751
805
  declare type DocumentTextContent = DocumentTextNode[];
752
806
 
753
807
  declare type DocumentTextInlineFormat = {
@@ -1541,6 +1595,29 @@ declare type StyleProps = {
1541
1595
  };
1542
1596
  };
1543
1597
 
1598
+ declare type TableBaseFormatting = {
1599
+ version: TableFormattingVersion;
1600
+ tableParts?: Partial<Record<TablePart, TableBaseStyle>>;
1601
+ columns?: Record<string, {
1602
+ body?: TableBaseStyle;
1603
+ header?: TableBaseStyle;
1604
+ footer?: TableBaseStyle;
1605
+ }>;
1606
+ };
1607
+
1608
+ declare type TableBaseStyle = {
1609
+ fontWeight?: 'normal' | 'medium' | 'semibold' | 'bold';
1610
+ italic?: boolean;
1611
+ textColor?: string;
1612
+ backgroundColor?: string;
1613
+ textDecoration?: 'none' | 'underline' | 'line-through';
1614
+ };
1615
+
1616
+ declare type TableConditionalFormatting = {
1617
+ version: TableFormattingVersion;
1618
+ rules: ConditionalFormatRule[];
1619
+ };
1620
+
1544
1621
  /**
1545
1622
  * Row rhythm for the whole table. Authors pick one per card; undefined
1546
1623
  * falls back to 'compact' (the canonical default — dense scanning, matches
@@ -1549,8 +1626,18 @@ declare type StyleProps = {
1549
1626
  */
1550
1627
  declare type TableDensity = 'dense' | 'compact' | 'standard' | 'comfortable' | 'spacious';
1551
1628
 
1629
+ declare type TableFormattingVersion = 1;
1630
+
1631
+ declare type TableGridLines = 'none' | 'outer' | 'inner' | 'horizontal' | 'vertical' | 'top' | 'right' | 'bottom' | 'left' | 'full';
1632
+
1633
+ declare type TableHeaderStyle = 'plain' | 'filled' | 'accent';
1634
+
1635
+ declare type TablePart = 'body' | 'header' | 'footer' | 'subtotal' | 'grandTotal';
1636
+
1552
1637
  declare type TablePreferences = {
1553
1638
  columnSettingsMap?: ColumnSettingsMap;
1639
+ baseFormatting?: TableBaseFormatting;
1640
+ conditionalFormatting?: TableConditionalFormatting;
1554
1641
  selectColumnVisible?: boolean;
1555
1642
  columnVisibility?: Record<string, boolean>;
1556
1643
  columnSizing?: ColumnSizingState;
@@ -1558,7 +1645,29 @@ declare type TablePreferences = {
1558
1645
  enableDevModePagination?: boolean;
1559
1646
  forceClientPagination?: boolean;
1560
1647
  density?: TableDensity;
1561
- documentWrapText?: boolean;
1648
+ tableStyle?: TableStylePreferences;
1649
+ };
1650
+
1651
+ declare type TableStylePreferences = {
1652
+ headerStyle?: TableHeaderStyle;
1653
+ headerBackgroundColor?: string;
1654
+ headerTextColor?: string;
1655
+ stripedRows?: boolean;
1656
+ gridLines?: TableGridLines;
1657
+ wrapText?: boolean;
1658
+ totals?: TableTotalsStylePreferences;
1659
+ };
1660
+
1661
+ declare type TableTotalsFontWeight = 'normal' | 'medium' | 'semibold' | 'bold';
1662
+
1663
+ declare type TableTotalsStylePreferences = {
1664
+ enabled?: boolean;
1665
+ backgroundColor?: string;
1666
+ textColor?: string;
1667
+ fontWeight?: TableTotalsFontWeight;
1668
+ borderTop?: boolean;
1669
+ borderTopStyle?: 'solid' | 'dashed' | 'dotted' | 'double';
1670
+ borderTopColor?: string;
1562
1671
  };
1563
1672
 
1564
1673
  /**
@@ -2245,18 +2354,7 @@ declare type TLegendOptions = {
2245
2354
  /** Line dash style options */
2246
2355
  declare type TLineStyle = 'solid' | 'dashed' | 'dotted' | 'dash-dot';
2247
2356
 
2248
- /**
2249
- * Per-column contribution to the table-level totals row (`<tfoot>`).
2250
- * Additive and optional — omitting it keeps the cell empty in the footer,
2251
- * matching existing behavior when a totals row is not needed.
2252
- *
2253
- * - 'sum' → aggregate the column across the full dataset
2254
- * - 'avg' → arithmetic mean across the full dataset
2255
- * - 'count' → non-null count across the full dataset
2256
- * - 'label' → render `totalsLabel` (or 'Total') as static text — typically
2257
- * on the first column so the footer reads as a labeled row
2258
- * - 'none' → blank cell in the footer
2259
- */
2357
+ /** Historical per-column totals shape. Runtime totals are table-level now. */
2260
2358
  declare type TotalsBehavior = 'sum' | 'avg' | 'count' | 'label' | 'none';
2261
2359
 
2262
2360
  /** Point style options supported by Chart.js */
@@ -359,10 +359,7 @@ declare interface ColumnSettings {
359
359
  maxWidth?: number;
360
360
  textOverflow?: 'ellipsis' | 'wrap' | 'clip';
361
361
  textWrap: 'wrap' | 'nowrap';
362
- /**
363
- * Totals-row behavior for this column. Undefined = 'none'. The footer
364
- * renders only when at least one visible column has a non-'none' behavior.
365
- */
362
+ /** Deprecated/inert. Totals are controlled by tablePrefs.tableStyle.totals. */
366
363
  totalsBehavior?: TotalsBehavior;
367
364
  totalsLabel?: string;
368
365
  numberFormat: {
@@ -402,6 +399,90 @@ declare type ColumnSettingsMap = Record<string, ColumnSettings>;
402
399
 
403
400
  declare type ColumnType = 'string' | 'number' | 'date';
404
401
 
402
+ declare type ComparisonOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte';
403
+
404
+ declare type ConditionalFormatCondition = {
405
+ kind: 'comparison';
406
+ columnId: string;
407
+ operator: ComparisonOperator;
408
+ value: unknown;
409
+ } | {
410
+ kind: 'between';
411
+ columnId: string;
412
+ min: unknown;
413
+ max: unknown;
414
+ inclusive?: boolean;
415
+ } | {
416
+ kind: 'blank';
417
+ columnId: string;
418
+ isBlank: boolean;
419
+ } | {
420
+ kind: 'contains';
421
+ columnId: string;
422
+ value: string;
423
+ caseSensitive?: boolean;
424
+ exact?: boolean;
425
+ } | {
426
+ kind: 'topBottom';
427
+ columnId: string;
428
+ direction: 'top' | 'bottom';
429
+ count: number;
430
+ } | {
431
+ kind: 'colorScale';
432
+ columnId: string;
433
+ range: 'auto' | 'manual';
434
+ min?: number;
435
+ mid?: number;
436
+ max?: number;
437
+ colors: {
438
+ min: string;
439
+ mid?: string;
440
+ max: string;
441
+ };
442
+ } | {
443
+ kind: 'dataBar';
444
+ columnId: string;
445
+ range: 'auto' | 'manual';
446
+ min?: number;
447
+ max?: number;
448
+ color: string;
449
+ showValue?: boolean;
450
+ };
451
+
452
+ declare type ConditionalFormatRule = {
453
+ id: string;
454
+ name?: string;
455
+ enabled?: boolean;
456
+ target: ConditionalFormatTarget;
457
+ condition: ConditionalFormatCondition;
458
+ style?: ConditionalFormatStyle;
459
+ };
460
+
461
+ declare type ConditionalFormatStyle = {
462
+ backgroundColor?: string;
463
+ textColor?: string;
464
+ fontWeight?: 'normal' | 'medium' | 'semibold' | 'bold';
465
+ italic?: boolean;
466
+ textDecoration?: 'none' | 'underline' | 'line-through';
467
+ icon?: 'arrowUp' | 'arrowDown' | 'warning' | 'check' | 'x';
468
+ dataBar?: {
469
+ color: string;
470
+ showValue: boolean;
471
+ };
472
+ };
473
+
474
+ declare type ConditionalFormatTarget = {
475
+ level: 'cell' | 'row';
476
+ columnIds?: string[];
477
+ conditionColumnId?: string;
478
+ applyToColumnIds?: string[];
479
+ tableParts?: TablePart[];
480
+ rowRoles?: string[];
481
+ depth?: number;
482
+ includeTotals?: boolean;
483
+ includeSubtotals?: boolean;
484
+ };
485
+
405
486
  export declare type ConnectionPolicy = {
406
487
  connectionId?: string;
407
488
  name: string;
@@ -953,12 +1034,6 @@ export declare type DocumentSpacerSection = {
953
1034
  heightPx: number;
954
1035
  };
955
1036
 
956
- export declare type DocumentTableDensity = 'comfortable' | 'standard' | 'compact' | 'dense';
957
-
958
- export declare type DocumentTableGridLines = 'none' | 'outer' | 'inner' | 'horizontal' | 'vertical' | 'top' | 'right' | 'bottom' | 'left' | 'full';
959
-
960
- export declare type DocumentTableHeaderStyle = 'plain' | 'filled' | 'accent';
961
-
962
1037
  export declare type DocumentTableSection = {
963
1038
  id: string;
964
1039
  type: 'table';
@@ -969,30 +1044,9 @@ export declare type DocumentTableSection = {
969
1044
  columnFormatting?: Record<string, unknown>;
970
1045
  repeatHeaderOnPageBreak?: boolean;
971
1046
  rowHeightPx?: number;
972
- style?: DocumentTableStyle;
973
- totalsStyle?: DocumentTableTotalsStyle;
974
1047
  };
975
1048
  };
976
1049
 
977
- export declare type DocumentTableStyle = {
978
- density?: DocumentTableDensity;
979
- headerStyle?: DocumentTableHeaderStyle;
980
- headerBackgroundColor?: string;
981
- headerTextColor?: string;
982
- stripedRows?: boolean;
983
- gridLines?: DocumentTableGridLines;
984
- wrapText?: boolean;
985
- };
986
-
987
- export declare type DocumentTableTotalsFontWeight = 'normal' | 'medium' | 'semibold' | 'bold';
988
-
989
- export declare type DocumentTableTotalsStyle = {
990
- backgroundColor?: string;
991
- textColor?: string;
992
- fontWeight?: DocumentTableTotalsFontWeight;
993
- borderTop?: boolean;
994
- };
995
-
996
1050
  export declare type DocumentTextContent = DocumentTextNode[];
997
1051
 
998
1052
  export declare type DocumentTextInlineFormat = {
@@ -1959,6 +2013,29 @@ declare type TableAppearance = {
1959
2013
  };
1960
2014
  };
1961
2015
 
2016
+ declare type TableBaseFormatting = {
2017
+ version: TableFormattingVersion;
2018
+ tableParts?: Partial<Record<TablePart, TableBaseStyle>>;
2019
+ columns?: Record<string, {
2020
+ body?: TableBaseStyle;
2021
+ header?: TableBaseStyle;
2022
+ footer?: TableBaseStyle;
2023
+ }>;
2024
+ };
2025
+
2026
+ declare type TableBaseStyle = {
2027
+ fontWeight?: 'normal' | 'medium' | 'semibold' | 'bold';
2028
+ italic?: boolean;
2029
+ textColor?: string;
2030
+ backgroundColor?: string;
2031
+ textDecoration?: 'none' | 'underline' | 'line-through';
2032
+ };
2033
+
2034
+ declare type TableConditionalFormatting = {
2035
+ version: TableFormattingVersion;
2036
+ rules: ConditionalFormatRule[];
2037
+ };
2038
+
1962
2039
  /**
1963
2040
  * Row rhythm for the whole table. Authors pick one per card; undefined
1964
2041
  * falls back to 'compact' (the canonical default — dense scanning, matches
@@ -1967,8 +2044,18 @@ declare type TableAppearance = {
1967
2044
  */
1968
2045
  declare type TableDensity = 'dense' | 'compact' | 'standard' | 'comfortable' | 'spacious';
1969
2046
 
2047
+ declare type TableFormattingVersion = 1;
2048
+
2049
+ declare type TableGridLines = 'none' | 'outer' | 'inner' | 'horizontal' | 'vertical' | 'top' | 'right' | 'bottom' | 'left' | 'full';
2050
+
2051
+ declare type TableHeaderStyle = 'plain' | 'filled' | 'accent';
2052
+
2053
+ declare type TablePart = 'body' | 'header' | 'footer' | 'subtotal' | 'grandTotal';
2054
+
1970
2055
  declare type TablePreferences = {
1971
2056
  columnSettingsMap?: ColumnSettingsMap;
2057
+ baseFormatting?: TableBaseFormatting;
2058
+ conditionalFormatting?: TableConditionalFormatting;
1972
2059
  selectColumnVisible?: boolean;
1973
2060
  columnVisibility?: Record<string, boolean>;
1974
2061
  columnSizing?: ColumnSizingState;
@@ -1976,7 +2063,29 @@ declare type TablePreferences = {
1976
2063
  enableDevModePagination?: boolean;
1977
2064
  forceClientPagination?: boolean;
1978
2065
  density?: TableDensity;
1979
- documentWrapText?: boolean;
2066
+ tableStyle?: TableStylePreferences;
2067
+ };
2068
+
2069
+ declare type TableStylePreferences = {
2070
+ headerStyle?: TableHeaderStyle;
2071
+ headerBackgroundColor?: string;
2072
+ headerTextColor?: string;
2073
+ stripedRows?: boolean;
2074
+ gridLines?: TableGridLines;
2075
+ wrapText?: boolean;
2076
+ totals?: TableTotalsStylePreferences;
2077
+ };
2078
+
2079
+ declare type TableTotalsFontWeight = 'normal' | 'medium' | 'semibold' | 'bold';
2080
+
2081
+ declare type TableTotalsStylePreferences = {
2082
+ enabled?: boolean;
2083
+ backgroundColor?: string;
2084
+ textColor?: string;
2085
+ fontWeight?: TableTotalsFontWeight;
2086
+ borderTop?: boolean;
2087
+ borderTopStyle?: 'solid' | 'dashed' | 'dotted' | 'double';
2088
+ borderTopColor?: string;
1980
2089
  };
1981
2090
 
1982
2091
  /**
@@ -2708,18 +2817,7 @@ export declare type TLens = {
2708
2817
  /** Line dash style options */
2709
2818
  export declare type TLineStyle = 'solid' | 'dashed' | 'dotted' | 'dash-dot';
2710
2819
 
2711
- /**
2712
- * Per-column contribution to the table-level totals row (`<tfoot>`).
2713
- * Additive and optional — omitting it keeps the cell empty in the footer,
2714
- * matching existing behavior when a totals row is not needed.
2715
- *
2716
- * - 'sum' → aggregate the column across the full dataset
2717
- * - 'avg' → arithmetic mean across the full dataset
2718
- * - 'count' → non-null count across the full dataset
2719
- * - 'label' → render `totalsLabel` (or 'Total') as static text — typically
2720
- * on the first column so the footer reads as a labeled row
2721
- * - 'none' → blank cell in the footer
2722
- */
2820
+ /** Historical per-column totals shape. Runtime totals are table-level now. */
2723
2821
  declare type TotalsBehavior = 'sum' | 'avg' | 'count' | 'label' | 'none';
2724
2822
 
2725
2823
  /** Point style options supported by Chart.js */