@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.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +5 -5
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/docs/components.json +1 -1
- package/dist/mcp-data/registry/registry.json +4 -4
- package/dist/mcp-data/registry/table.json +9 -9
- package/dist/styles/table.css +112 -42
- package/dist/types/components/Table/Table.d.ts +2 -0
- package/dist/types/components/Table/index.d.ts +1 -1
- package/dist/types/components/Table/table-cell-model.d.ts +26 -3
- package/dist/types/components/Table/table-model.d.ts +2 -1
- package/dist/types/components/Table/table-types.d.ts +64 -6
- package/package.json +1 -1
package/dist/styles/table.css
CHANGED
|
@@ -8,16 +8,22 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
:where(.ds-table) {
|
|
11
|
-
--_table-cell-track-min-block-size:
|
|
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:
|
|
20
|
-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
866
|
+
min-block-size: var(--dimension-size-300);
|
|
860
867
|
}
|
|
861
868
|
|
|
862
|
-
|
|
863
|
-
|
|
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(--
|
|
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-
|
|
1081
|
-
min-block-size: var(--dimension-
|
|
1082
|
-
block-size: var(--dimension-
|
|
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?:
|
|
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
|
-
/**
|
|
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?:
|
|
38
|
-
/**
|
|
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
|
|
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. */
|