@ds-mo/ui 14.4.2 → 14.5.0

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.
@@ -8,16 +8,22 @@
8
8
  */
9
9
 
10
10
  :where(.ds-table) {
11
- --_table-cell-track-min-block-size: calc(
12
- var(--dimension-size-400) - var(--dimension-space-050)
13
- );
11
+ --_table-cell-track-min-block-size: var(--dimension-size-300);
14
12
  --_table-cell-track-padding-inline: calc(
15
13
  var(--dimension-space-075) - var(--dimension-space-025)
16
14
  );
17
15
  --_table-cell-track-label-inset: var(--dimension-space-025);
18
16
  --_table-caption-bar-block-size: var(--dimension-size-600);
19
- --_table-image-block-size: calc(
20
- var(--dimension-size-800) - var(--dimension-space-200)
17
+ --_table-image-block-size: var(--_table-cell-track-min-block-size);
18
+ --_table-image-block-size-multi: calc(
19
+ var(--_table-cell-track-min-block-size)
20
+ + var(--dimension-space-025)
21
+ + var(--dimension-size-250)
22
+ );
23
+ --_table-image-block-size-triple: calc(
24
+ var(--_table-image-block-size-multi)
25
+ + var(--dimension-space-025)
26
+ + var(--dimension-size-250)
21
27
  );
22
28
  --_table-surface: var(--ds-table-surface, var(--color-background-primary));
23
29
  --_table-header-surface: var(--ds-table-header-surface, var(--color-background-primary));
@@ -762,34 +768,43 @@
762
768
 
763
769
  :where(.ds-table__cell-track--text) {
764
770
  inline-size: 100%;
765
- padding-inline: var(--_table-cell-track-label-inset);
766
- }
767
-
768
- :where(.ds-table__cell--text-single),
769
- :where(.ds-table__cell--text-multi),
770
- :where(.ds-table__cell--primary-text),
771
- :where(.ds-table__cell--empty),
772
- :where(.ds-table__cell--blank) {
773
- padding: var(--dimension-space-125);
771
+ padding-inline: var(--_table-cell-track-padding-inline);
774
772
  }
775
773
 
776
774
  :where(.ds-table__cell--text-single .ds-table__cell-content),
777
775
  :where(.ds-table__cell--text-multi .ds-table__cell-content),
776
+ :where(.ds-table__cell--text-triple .ds-table__cell-content),
778
777
  :where(.ds-table__cell--primary-text .ds-table__cell-content),
779
778
  :where(.ds-table__cell--empty .ds-table__cell-content),
780
779
  :where(.ds-table__cell--blank .ds-table__cell-content),
781
780
  :where(.ds-table__cell--text-single .ds-table__cell-track),
782
781
  :where(.ds-table__cell--text-multi .ds-table__cell-track),
782
+ :where(.ds-table__cell--text-triple .ds-table__cell-track),
783
783
  :where(.ds-table__cell--primary-text .ds-table__cell-track),
784
784
  :where(.ds-table__cell--empty .ds-table__cell-track) {
785
785
  min-block-size: 0;
786
786
  }
787
787
 
788
- :where(.ds-table__cell--text-multi .ds-table__cell-copy) {
789
- gap: var(--dimension-space-050);
788
+ :where(.ds-table__cell--text-multi .ds-table__cell-copy),
789
+ :where(.ds-table__cell--text-triple .ds-table__cell-copy) {
790
+ gap: var(--dimension-space-025);
791
+ }
792
+
793
+ /*
794
+ * Body cells share 8px chrome. 20px content (body-medium text, md icon,
795
+ * checkbox) sits in a 24px track (2px block inset). Text tracks keep that
796
+ * 2px plus the 2px label inset, so padding-inline is 4px and copy lines up
797
+ * with column-header labels. Later body-small tracks stay 20px, stacked with
798
+ * a 2px gap. Header and group rows keep their own recipes.
799
+ */
800
+ :where(.ds-table__cell-primary),
801
+ :where(.ds-table__cell--empty .ds-table__cell-track) {
802
+ padding-block: var(--dimension-space-025);
790
803
  }
791
804
 
792
- :where(.ds-table__cell--text-multi .ds-table__cell-secondary) {
805
+ :where(.ds-table__cell--text-multi .ds-table__cell-secondary),
806
+ :where(.ds-table__cell--text-triple .ds-table__cell-secondary),
807
+ :where(.ds-table__cell--text-triple .ds-table__cell-tertiary) {
793
808
  padding-block: var(--dimension-space-025);
794
809
  }
795
810
 
@@ -797,13 +812,8 @@
797
812
  padding-block: 0;
798
813
  }
799
814
 
800
- :where(.ds-table__cell--tag-tag-only),
801
- :where(.ds-table__cell--tag-tag-with-text) {
802
- padding: var(--dimension-space-100);
803
- }
804
-
805
- :where(.ds-table__cell--tag-text-with-tag) {
806
- padding: var(--dimension-space-125);
815
+ :where(.ds-table__cell--tag-tag-only .ds-table__cell-content) {
816
+ min-block-size: 0;
807
817
  }
808
818
 
809
819
  :where(.ds-table__cell-tag-stack) {
@@ -830,12 +840,13 @@
830
840
  }
831
841
 
832
842
  :where(.ds-table__cell-tag-stack--text-with-tag .ds-table__cell-tag-text) {
833
- padding-inline: var(--_table-cell-track-label-inset);
843
+ padding-inline: var(--_table-cell-track-padding-inline);
844
+ padding-block: var(--dimension-space-025);
834
845
  min-block-size: 0;
835
846
  }
836
847
 
837
848
  :where(.ds-table__cell-tag-stack--text-with-tag) {
838
- gap: var(--dimension-space-050);
849
+ gap: var(--dimension-space-025);
839
850
  }
840
851
 
841
852
  :where(.ds-table__cell-tag-control-track) {
@@ -848,21 +859,56 @@
848
859
  min-block-size: var(--dimension-size-250);
849
860
  }
850
861
 
851
- :where(.ds-table__cell--icon) {
852
- padding: var(--dimension-space-125);
853
- }
854
-
855
862
  :where(.ds-table__cell--icon .ds-table__cell-content) {
856
863
  align-items: center;
857
864
  justify-content: center;
858
865
  inline-size: 100%;
859
- min-block-size: var(--dimension-iconography-md);
866
+ min-block-size: var(--dimension-size-300);
860
867
  }
861
868
 
862
- :where(.ds-table__cell--image) {
863
- padding: var(--dimension-space-100);
869
+ /*
870
+ * Icon-and-text: md prefix in a 24px slot (2px padding on every side), then a
871
+ * 2px flex gap. Text tracks keep their own 4px inline and 2px block padding.
872
+ */
873
+ :where(.ds-table__cell-icon-text) {
874
+ display: flex;
875
+ align-items: flex-start;
876
+ gap: var(--dimension-space-025);
877
+ inline-size: 100%;
878
+ min-inline-size: 0;
879
+ max-inline-size: 100%;
880
+ }
881
+
882
+ :where(.ds-table__cell-icon-text-icon) {
883
+ box-sizing: border-box;
884
+ display: flex;
885
+ flex: none;
886
+ align-items: flex-start;
887
+ min-block-size: var(--_table-cell-track-min-block-size);
888
+ padding: var(--dimension-space-025);
889
+ }
890
+
891
+ :where(.ds-table__cell--icon-text .ds-table__cell-content),
892
+ :where(.ds-table__cell--icon-text .ds-table__cell-track) {
893
+ min-block-size: 0;
894
+ }
895
+
896
+ :where(.ds-table__cell--icon-text-multi .ds-table__cell-copy),
897
+ :where(.ds-table__cell--icon-text-triple .ds-table__cell-copy) {
898
+ gap: var(--dimension-space-025);
899
+ }
900
+
901
+ :where(.ds-table__cell--icon-text-multi .ds-table__cell-secondary),
902
+ :where(.ds-table__cell--icon-text-triple .ds-table__cell-secondary),
903
+ :where(.ds-table__cell--icon-text-triple .ds-table__cell-tertiary) {
904
+ padding-block: var(--dimension-space-025);
864
905
  }
865
906
 
907
+ /*
908
+ * Image previews fill the matching body-row content box (cell height minus
909
+ * 8px padding) at 16:9. Track 1 is the 24px first-track stack; tracks 2 and
910
+ * 3 add the same 20px later-track and 2px gap as text.
911
+ */
866
912
  :where(.ds-table__cell-image) {
867
913
  display: block;
868
914
  box-sizing: border-box;
@@ -874,6 +920,14 @@
874
920
  border-radius: var(--dimension-radius-025);
875
921
  }
876
922
 
923
+ :where(.ds-table__cell--image-multi .ds-table__cell-image) {
924
+ block-size: var(--_table-image-block-size-multi);
925
+ }
926
+
927
+ :where(.ds-table__cell--image-triple .ds-table__cell-image) {
928
+ block-size: var(--_table-image-block-size-triple);
929
+ }
930
+
877
931
  :where(.ds-table__cell-image-content),
878
932
  :where(.ds-table__cell-image-placeholder) {
879
933
  display: block;
@@ -885,19 +939,33 @@
885
939
  object-fit: cover;
886
940
  }
887
941
 
888
- :where(.ds-table__cell--action) {
889
- padding: var(--dimension-space-100);
890
- }
891
-
892
942
  :where(.ds-table__cell--action .ds-table__cell-content) {
893
943
  min-block-size: var(--dimension-size-300);
894
944
  }
895
945
 
896
946
  :where(.ds-table__cell-primary),
897
- :where(.ds-table__cell-secondary) {
947
+ :where(.ds-table__cell-secondary),
948
+ :where(.ds-table__cell-tertiary),
949
+ :where(.ds-table__cell-run),
950
+ :where(.ds-table__cell-link) {
898
951
  min-inline-size: 0;
899
952
  }
900
953
 
954
+ :where(.ds-table__cell-track--runs) {
955
+ overflow: hidden;
956
+ gap: var(--dimension-space-050);
957
+ }
958
+
959
+ :where(.ds-table__cell-run-separator) {
960
+ flex: none;
961
+ }
962
+
963
+ :where(.ds-table__cell-link) {
964
+ display: flex;
965
+ max-inline-size: 100%;
966
+ inline-size: 100%;
967
+ }
968
+
901
969
  :where(.ds-table__cell-copy--wrap) {
902
970
  overflow-wrap: anywhere;
903
971
  }
@@ -905,6 +973,7 @@
905
973
  :where(.ds-table__cell--align-center),
906
974
  :where(.ds-table__cell--align-center .ds-table__cell-content),
907
975
  :where(.ds-table__cell--align-center .ds-table__cell-track),
976
+ :where(.ds-table__cell--align-center .ds-table__cell-link),
908
977
  :where(.ds-table__cell--align-center .ds-table__header-static),
909
978
  :where(.ds-table__cell--align-center .ds-table__header-labels),
910
979
  :where(.ds-table__cell--align-center .ds-table__header-label) {
@@ -915,6 +984,7 @@
915
984
  :where(.ds-table__cell--align-end),
916
985
  :where(.ds-table__cell--align-end .ds-table__cell-content),
917
986
  :where(.ds-table__cell--align-end .ds-table__cell-track),
987
+ :where(.ds-table__cell--align-end .ds-table__cell-link),
918
988
  :where(.ds-table__cell--align-end .ds-table__header-static),
919
989
  :where(.ds-table__cell--align-end .ds-table__header-labels),
920
990
  :where(.ds-table__cell--align-end .ds-table__header-label) {
@@ -1054,7 +1124,7 @@
1054
1124
  }
1055
1125
 
1056
1126
  :where(.ds-table__cell.ds-table__selection-cell) {
1057
- padding: var(--dimension-space-125);
1127
+ padding: var(--_table-cell-padding-block) var(--_table-cell-padding-inline);
1058
1128
  }
1059
1129
 
1060
1130
  :where(.ds-table__selection-control) {
@@ -1077,9 +1147,9 @@
1077
1147
  }
1078
1148
 
1079
1149
  :where(.ds-table__cell.ds-table__selection-cell .ds-table__selection-control) {
1080
- inline-size: var(--dimension-iconography-md);
1081
- min-block-size: var(--dimension-iconography-md);
1082
- block-size: var(--dimension-iconography-md);
1150
+ inline-size: var(--dimension-size-300);
1151
+ min-block-size: var(--dimension-size-300);
1152
+ block-size: var(--dimension-size-300);
1083
1153
  }
1084
1154
 
1085
1155
  :where(.ds-table__selection-control:disabled) {
@@ -175,6 +175,8 @@ export declare class Table {
175
175
  private renderColgroup;
176
176
  private renderHeader;
177
177
  private renderCellValue;
178
+ private renderTextCopy;
179
+ private renderTextTrack;
178
180
  private renderRow;
179
181
  private emitGroupCollapse;
180
182
  private emitAllGroupsCollapse;
@@ -1,2 +1,2 @@
1
- export type { TableCaptionVisibility, TableCellAlign, TableCellAction, TableCellActionDetail, TableCellBlank, TableCellEmpty, TableCellIcon, TableCellImage, TableCellPrimaryText, TableCellSkeleton, TableCellText, TableCellTag, TableCellTagVariant, TableCellValue, TableSkeletonWidth, TableColumn, TableColumnSticky, TableColumnWidth, TableDataMode, TableGroup, TableGroupCollapseChangeDetail, TableGroupLoadMoreDetail, TableGroupIntent, TableHeaderSegment, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason, TablePaginationState, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortDirection, TableSortState, } from './table-types';
1
+ export type { TableCaptionVisibility, TableCellAlign, TableCellAction, TableCellActionDetail, TableCellBlank, TableCellEmpty, TableCellLinkTarget, TableCellIcon, TableCellIconText, TableCellImage, TableCellImageTracks, TableCellPrimaryText, TableCellSkeleton, TableCellText, TableCellTextRun, TableCellTextTrack, TableCellTag, TableCellTagVariant, TableCellValue, TableSkeletonWidth, TableColumn, TableColumnSticky, TableColumnWidth, TableDataMode, TableGroup, TableGroupCollapseChangeDetail, TableGroupLoadMoreDetail, TableGroupIntent, TableHeaderSegment, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason, TablePaginationState, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortDirection, TableSortState, } from './table-types';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,9 +1,16 @@
1
- import type { TableCellAction, TableCellBlank, TableCellEmpty, TableCellIcon, TableCellImage, TableCellTag, TableCellTagVariant, TableCellValue, TableColumn } from './table-types';
1
+ import type { TableCellAction, TableCellBlank, TableCellEmpty, TableCellIcon, TableCellImage, TableCellImageTracks, TableCellTag, TableCellTagVariant, TableCellTextRun, TableCellTextTrack, TableCellValue, TableCellLinkTarget, TableColumn } from './table-types';
2
+ import type { IconColor } from '../Icon/Icon';
2
3
  import type { TextColor } from '../Text/text-types';
4
+ /** Maximum independently colored runs on one secondary or tertiary track. */
5
+ export declare const TABLE_CELL_TEXT_RUN_LIMIT = 3;
3
6
  export interface ResolvedTableCellText {
4
7
  primary: string | number;
5
- secondary?: string | number;
8
+ secondary?: TableCellTextRun[];
9
+ tertiary?: TableCellTextRun[];
6
10
  secondaryColor?: TextColor;
11
+ tertiaryColor?: TextColor;
12
+ href?: string;
13
+ target?: TableCellLinkTarget;
7
14
  wrap?: boolean;
8
15
  fontFeature?: 'normal' | 'tabular-nums';
9
16
  }
@@ -19,10 +26,20 @@ export type TableCellPresentation = {
19
26
  kind: 'icon';
20
27
  cellType: 'icon';
21
28
  value: TableCellIcon;
29
+ } | {
30
+ kind: 'icon-text';
31
+ cellType: 'icon-text';
32
+ icon: string;
33
+ iconColor?: IconColor;
34
+ iconLabel?: string;
35
+ value: ResolvedTableCellText;
36
+ variant: 'single' | 'multi' | 'triple';
37
+ wraps: boolean;
22
38
  } | {
23
39
  kind: 'image';
24
40
  cellType: 'image';
25
41
  value: TableCellImage;
42
+ variant: 'single' | 'multi' | 'triple';
26
43
  } | {
27
44
  kind: 'action';
28
45
  cellType: 'action';
@@ -38,9 +55,15 @@ export type TableCellPresentation = {
38
55
  value: ResolvedTableCellText;
39
56
  primaryText: boolean;
40
57
  singleLine: boolean;
41
- variant: 'single' | 'multi' | 'primary-pair';
58
+ variant: 'single' | 'multi' | 'triple' | 'primary-pair';
42
59
  wraps: boolean;
43
60
  };
61
+ /** Resolve an image cell's track stack; unknown values fall back to one track. */
62
+ export declare function resolveTableCellImageTracks(tracks: TableCellImage['tracks']): TableCellImageTracks;
63
+ /** Map an image track stack onto the shared single/multi/triple cell variant. */
64
+ export declare function tableCellImageVariant(tracks: TableCellImageTracks): 'single' | 'multi' | 'triple';
65
+ /** Collapse a consumer track into at most three non-empty runs. */
66
+ export declare function normalizeTableCellTextTrack(track: TableCellTextTrack | number | undefined): TableCellTextRun[] | undefined;
44
67
  /** Resolve a cell's semantic and visual recipe once for both markup and classes. */
45
68
  export declare function resolveTableCellPresentation(value: TableCellValue, column: TableColumn): TableCellPresentation;
46
69
  //# sourceMappingURL=table-cell-model.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { TableCellBlank, TableCellAction, TableCellEmpty, TableCellIcon, TableCellImage, TableCellPrimaryText, TableCellText, TableCellTag, TableCellValue, TableColumn, TableGroup, TableRow, TableSortState } from './table-types';
1
+ import type { TableCellBlank, TableCellAction, TableCellEmpty, TableCellIcon, TableCellIconText, TableCellImage, TableCellPrimaryText, TableCellText, TableCellTag, TableCellValue, TableColumn, TableGroup, TableRow, TableSortState } from './table-types';
2
2
  export interface TableSelectionState {
3
3
  selectableRowIds: string[];
4
4
  selectedLoadedCount: number;
@@ -9,6 +9,7 @@ export declare function isTableCellText(value: TableCellValue): value is TableCe
9
9
  export declare function isTableCellPrimaryText(value: TableCellValue): value is TableCellPrimaryText;
10
10
  export declare function isTableCellTag(value: TableCellValue): value is TableCellTag;
11
11
  export declare function isTableCellIcon(value: TableCellValue): value is TableCellIcon;
12
+ export declare function isTableCellIconText(value: TableCellValue): value is TableCellIconText;
12
13
  export declare function isTableCellImage(value: TableCellValue): value is TableCellImage;
13
14
  export declare function isTableCellAction(value: TableCellValue): value is TableCellAction;
14
15
  export declare function isTableCellEmpty(value: TableCellValue): value is TableCellEmpty;
@@ -5,6 +5,7 @@ import type { PaginationState } from '../Pagination/pagination-types';
5
5
  export type TableSortDirection = 'asc' | 'desc';
6
6
  export type TableSelectionMode = 'none' | 'multiple';
7
7
  export type TableCellAlign = 'start' | 'center' | 'end';
8
+ export type TableCellLinkTarget = '_self' | '_blank';
8
9
  export type TableColumnSticky = 'start' | 'end';
9
10
  export type TableCaptionVisibility = 'visible' | 'hidden';
10
11
  export type TableLoadMoreMode = 'auto' | 'manual';
@@ -31,12 +32,28 @@ export interface TableGroupingState {
31
32
  columnId: string;
32
33
  direction: TableSortDirection;
33
34
  }
34
- /** Standard two-line cell content owned by the table renderer. */
35
+ /** One independently colored run inside a secondary or tertiary track. */
36
+ export interface TableCellTextRun {
37
+ text: string;
38
+ /** Defaults to the track’s standard color. */
39
+ color?: TextColor;
40
+ }
41
+ /** A secondary or tertiary track: one string, or up to three colorable runs. */
42
+ export type TableCellTextTrack = string | TableCellTextRun[];
43
+ /** Standard two- or three-line cell content owned by the table renderer. */
35
44
  export interface TableCellText {
36
45
  primary: string | number;
37
- secondary?: string;
38
- /** Optional semantic foreground for secondary copy; defaults to the standard secondary color. */
46
+ secondary?: TableCellTextTrack;
47
+ /** Third subdued track; ignored on dual-primary cells. */
48
+ tertiary?: TableCellTextTrack;
49
+ /** Optional semantic foreground for a string secondary track. */
39
50
  secondaryColor?: TextColor;
51
+ /** Optional semantic foreground for a string tertiary track. */
52
+ tertiaryColor?: TextColor;
53
+ /** Application-owned URL for the primary track only. Scalars stay unlinked. */
54
+ href?: string;
55
+ /** Native anchor target for a resolved primary link. */
56
+ target?: TableCellLinkTarget;
40
57
  /** Allow this cell to wrap even when its column truncates by default. */
41
58
  wrap?: boolean;
42
59
  fontFeature?: 'normal' | 'tabular-nums';
@@ -46,6 +63,10 @@ export interface TableCellPrimaryText {
46
63
  kind: 'primary-text';
47
64
  primary: string | number;
48
65
  secondary: string | number;
66
+ /** Application-owned URL for the primary track only. */
67
+ href?: string;
68
+ /** Native anchor target for a resolved primary link. */
69
+ target?: TableCellLinkTarget;
49
70
  /** Allow this cell to wrap even when its column truncates by default. */
50
71
  wrap?: boolean;
51
72
  fontFeature?: 'normal' | 'tabular-nums';
@@ -69,6 +90,29 @@ export interface TableCellIcon {
69
90
  /** Application-owned value used when this icon column participates in sorting. */
70
91
  sortValue?: string | number | boolean;
71
92
  }
93
+ /**
94
+ * Prefix icon beside a text copy stack. Independent of icon-only and plain
95
+ * text cells so those recipes stay unchanged.
96
+ */
97
+ export interface TableCellIconText {
98
+ kind: 'icon-text';
99
+ /** Exact canonical IcoMo export name. */
100
+ icon: string;
101
+ iconColor?: IconColor;
102
+ /** Accessible name. Omit when the glyph is decorative. */
103
+ iconLabel?: string;
104
+ primary: string | number;
105
+ secondary?: TableCellTextTrack;
106
+ tertiary?: TableCellTextTrack;
107
+ secondaryColor?: TextColor;
108
+ tertiaryColor?: TextColor;
109
+ href?: string;
110
+ target?: TableCellLinkTarget;
111
+ wrap?: boolean;
112
+ fontFeature?: 'normal' | 'tabular-nums';
113
+ }
114
+ /** Body-row track stack an image preview occupies. */
115
+ export type TableCellImageTracks = 1 | 2 | 3;
72
116
  /** Declarative 16:9 image preview rendered by the table's standard cell primitive. */
73
117
  export interface TableCellImage {
74
118
  kind: 'image';
@@ -76,6 +120,11 @@ export interface TableCellImage {
76
120
  src?: string;
77
121
  /** Accessible description for either the image or its placeholder. */
78
122
  alt: string;
123
+ /**
124
+ * Which body-row contract the preview fills. The thumbnail height is that
125
+ * cell height minus 8px padding; width follows 16:9. Defaults to 1.
126
+ */
127
+ tracks?: TableCellImageTracks;
79
128
  }
80
129
  interface TableCellActionBase {
81
130
  kind: 'action';
@@ -120,23 +169,32 @@ export type TableCellTag = TableCellTagBase & ({
120
169
  variant: Exclude<TableCellTagVariant, 'tag-only'>;
121
170
  text: string;
122
171
  });
123
- export type TableCellValue = string | number | null | undefined | TableCellText | TableCellPrimaryText | TableCellTag | TableCellIcon | TableCellImage | TableCellAction | TableCellEmpty | TableCellBlank;
172
+ export type TableCellValue = string | number | null | undefined | TableCellText | TableCellPrimaryText | TableCellTag | TableCellIcon | TableCellIconText | TableCellImage | TableCellAction | TableCellEmpty | TableCellBlank;
124
173
  export type TableSkeletonWidth = string | number;
125
174
  /** Representative loading geometry for one table column. */
126
175
  export type TableCellSkeleton = {
127
176
  kind: 'text';
128
- /** One track for scalar content, two for primary and secondary copy. */
129
- lines?: 1 | 2;
177
+ /** One track for scalar content, two for primary and secondary, three when tertiary is present. */
178
+ lines?: 1 | 2 | 3;
130
179
  primaryWidth?: TableSkeletonWidth;
131
180
  secondaryWidth?: TableSkeletonWidth;
181
+ tertiaryWidth?: TableSkeletonWidth;
132
182
  } | {
133
183
  kind: 'image';
184
+ /** Match the loaded image cell's track stack. Defaults to 1. */
185
+ tracks?: TableCellImageTracks;
134
186
  } | {
135
187
  kind: 'tag';
136
188
  width?: TableSkeletonWidth;
137
189
  } | {
138
190
  kind: 'icon';
139
191
  rounded?: boolean;
192
+ } | {
193
+ kind: 'icon-text';
194
+ lines?: 1 | 2 | 3;
195
+ primaryWidth?: TableSkeletonWidth;
196
+ secondaryWidth?: TableSkeletonWidth;
197
+ tertiaryWidth?: TableSkeletonWidth;
140
198
  } | {
141
199
  kind: 'action';
142
200
  /** Icon actions use a square control canvas; labeled actions may provide a wider width. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ds-mo/ui",
3
- "version": "14.4.2",
3
+ "version": "14.5.0",
4
4
  "description": "CompoMo — composable web components styled with TokoMo design tokens",
5
5
  "keywords": [
6
6
  "web-components",