@sproutsocial/seeds-react-table 1.0.3 → 1.0.5

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 (93) hide show
  1. package/.turbo/turbo-build.log +51 -35
  2. package/CHANGELOG.md +152 -0
  3. package/dist/Table-BzLSa3jk.d.ts +27 -0
  4. package/dist/Table-C6yuMYZA.d.mts +27 -0
  5. package/dist/{TableTypes-Dg7QrcGt.d.ts → TableTypes-DIUHC_FW.d.ts} +1 -1
  6. package/dist/{TableTypes-jS0O3bwQ.d.mts → TableTypes-i1Uir0xI.d.mts} +1 -1
  7. package/dist/esm/chunk-F73BV5I2.js +100 -0
  8. package/dist/esm/chunk-F73BV5I2.js.map +1 -0
  9. package/dist/esm/{chunk-SMHAMHIP.js → chunk-T7WTUUPA.js} +7 -7
  10. package/dist/esm/chunk-T7WTUUPA.js.map +1 -0
  11. package/dist/esm/{chunk-XJMS6762.js → chunk-WGM7UCXV.js} +6 -6
  12. package/dist/esm/chunk-WGM7UCXV.js.map +1 -0
  13. package/dist/esm/index.js +7 -97
  14. package/dist/esm/index.js.map +1 -1
  15. package/dist/esm/{tableCell.js → v1/TableCell/index.js} +2 -2
  16. package/dist/esm/{tableHeaderCell.js → v1/TableHeaderCell/index.js} +2 -2
  17. package/dist/esm/{tableRowAccordion.js → v1/TableRowAccordion/index.js} +7 -7
  18. package/dist/esm/v1/TableRowAccordion/index.js.map +1 -0
  19. package/dist/esm/v1/index.js +13 -0
  20. package/dist/esm/v1/index.js.map +1 -0
  21. package/dist/esm/v2/index.js +138 -0
  22. package/dist/esm/v2/index.js.map +1 -0
  23. package/dist/index.d.mts +7 -26
  24. package/dist/index.d.ts +7 -26
  25. package/dist/index.js +20 -20
  26. package/dist/index.js.map +1 -1
  27. package/dist/{tableCell.d.ts → v1/TableCell/index.d.mts} +2 -2
  28. package/dist/{tableCell.d.mts → v1/TableCell/index.d.ts} +2 -2
  29. package/dist/{tableCell.js → v1/TableCell/index.js} +7 -7
  30. package/dist/v1/TableCell/index.js.map +1 -0
  31. package/dist/{tableHeaderCell.d.ts → v1/TableHeaderCell/index.d.mts} +3 -3
  32. package/dist/{tableHeaderCell.d.mts → v1/TableHeaderCell/index.d.ts} +3 -3
  33. package/dist/{tableHeaderCell.js → v1/TableHeaderCell/index.js} +8 -8
  34. package/dist/v1/TableHeaderCell/index.js.map +1 -0
  35. package/dist/{tableRowAccordion.d.mts → v1/TableRowAccordion/index.d.mts} +3 -3
  36. package/dist/{tableRowAccordion.d.ts → v1/TableRowAccordion/index.d.ts} +3 -3
  37. package/dist/{tableRowAccordion.js → v1/TableRowAccordion/index.js} +12 -12
  38. package/dist/v1/TableRowAccordion/index.js.map +1 -0
  39. package/dist/v1/index.d.mts +13 -0
  40. package/dist/v1/index.d.ts +13 -0
  41. package/dist/v1/index.js +323 -0
  42. package/dist/v1/index.js.map +1 -0
  43. package/dist/v2/index.d.mts +42 -0
  44. package/dist/v2/index.d.ts +42 -0
  45. package/dist/v2/index.js +189 -0
  46. package/dist/v2/index.js.map +1 -0
  47. package/package.json +24 -13
  48. package/src/index.ts +3 -2
  49. package/src/v1/index.ts +13 -0
  50. package/src/v2/TableV2.stories.tsx +242 -0
  51. package/src/v2/TableV2.tsx +91 -0
  52. package/src/v2/TableV2Types.ts +12 -0
  53. package/src/v2/__tests__/TableV2.typetest.tsx +109 -0
  54. package/src/v2/__tests__/table-v2.test.tsx +374 -0
  55. package/src/v2/index.ts +20 -0
  56. package/src/v2/styles.ts +82 -0
  57. package/tsup.config.ts +8 -6
  58. package/dist/esm/chunk-SMHAMHIP.js.map +0 -1
  59. package/dist/esm/chunk-XJMS6762.js.map +0 -1
  60. package/dist/esm/tableRowAccordion.js.map +0 -1
  61. package/dist/tableCell.js.map +0 -1
  62. package/dist/tableHeaderCell.js.map +0 -1
  63. package/dist/tableRowAccordion.js.map +0 -1
  64. /package/dist/esm/{tableCell.js.map → v1/TableCell/index.js.map} +0 -0
  65. /package/dist/esm/{tableHeaderCell.js.map → v1/TableHeaderCell/index.js.map} +0 -0
  66. /package/src/{Table.stories.tsx → v1/Table.stories.tsx} +0 -0
  67. /package/src/{Table.tsx → v1/Table.tsx} +0 -0
  68. /package/src/{TableCell → v1/TableCell}/TableCell.stories.tsx +0 -0
  69. /package/src/{TableCell → v1/TableCell}/TableCell.tsx +0 -0
  70. /package/src/{TableCell → v1/TableCell}/TableCellTypes.ts +0 -0
  71. /package/src/{TableCell → v1/TableCell}/__tests__/TabelCell.test.tsx +0 -0
  72. /package/src/{TableCell → v1/TableCell}/__tests__/TableCell.typetest.tsx +0 -0
  73. /package/src/{TableCell → v1/TableCell}/index.ts +0 -0
  74. /package/src/{TableCell → v1/TableCell}/styles.ts +0 -0
  75. /package/src/{TableHeaderCell → v1/TableHeaderCell}/TableHeaderCell.stories.tsx +0 -0
  76. /package/src/{TableHeaderCell → v1/TableHeaderCell}/TableHeaderCell.tsx +0 -0
  77. /package/src/{TableHeaderCell → v1/TableHeaderCell}/TableHeaderCellTypes.ts +0 -0
  78. /package/src/{TableHeaderCell → v1/TableHeaderCell}/__tests__/TableHeaderCell.test.tsx +0 -0
  79. /package/src/{TableHeaderCell → v1/TableHeaderCell}/__tests__/TableHeaderCell.typetest.tsx +0 -0
  80. /package/src/{TableHeaderCell → v1/TableHeaderCell}/constants.ts +0 -0
  81. /package/src/{TableHeaderCell → v1/TableHeaderCell}/index.ts +0 -0
  82. /package/src/{TableHeaderCell → v1/TableHeaderCell}/styles.ts +0 -0
  83. /package/src/{TableRowAccordion → v1/TableRowAccordion}/TableRowAccordion.stories.tsx +0 -0
  84. /package/src/{TableRowAccordion → v1/TableRowAccordion}/TableRowAccordion.tsx +0 -0
  85. /package/src/{TableRowAccordion → v1/TableRowAccordion}/TableRowAccordionTypes.ts +0 -0
  86. /package/src/{TableRowAccordion → v1/TableRowAccordion}/__tests__/TableRowAccordion.test.tsx +0 -0
  87. /package/src/{TableRowAccordion → v1/TableRowAccordion}/__tests__/TableRowAccordion.typetest.tsx +0 -0
  88. /package/src/{TableRowAccordion → v1/TableRowAccordion}/index.ts +0 -0
  89. /package/src/{TableRowAccordion → v1/TableRowAccordion}/styles.ts +0 -0
  90. /package/src/{TableTypes.ts → v1/TableTypes.ts} +0 -0
  91. /package/src/{__tests__ → v1/__tests__}/Table.test.tsx +0 -0
  92. /package/src/{__tests__ → v1/__tests__}/Table.typetest.tsx +0 -0
  93. /package/src/{styles.ts → v1/styles.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sproutsocial/seeds-react-table",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Seeds React Table",
5
5
  "author": "Sprout Social, Inc.",
6
6
  "license": "MIT",
@@ -13,20 +13,30 @@
13
13
  "import": "./dist/esm/index.js",
14
14
  "require": "./dist/index.js"
15
15
  },
16
+ "./v1": {
17
+ "types": "./dist/v1/index.d.ts",
18
+ "import": "./dist/esm/v1/index.js",
19
+ "require": "./dist/v1/index.js"
20
+ },
21
+ "./v2": {
22
+ "types": "./dist/v2/index.d.ts",
23
+ "import": "./dist/esm/v2/index.js",
24
+ "require": "./dist/v2/index.js"
25
+ },
16
26
  "./TableCell": {
17
- "types": "./dist/tableCell.d.ts",
18
- "import": "./dist/esm/tableCell.js",
19
- "require": "./dist/tableCell.js"
27
+ "types": "./dist/v1/TableCell/index.d.ts",
28
+ "import": "./dist/esm/v1/TableCell/index.js",
29
+ "require": "./dist/v1/TableCell/index.js"
20
30
  },
21
31
  "./TableHeaderCell": {
22
- "types": "./dist/tableHeaderCell.d.ts",
23
- "import": "./dist/esm/tableHeaderCell.js",
24
- "require": "./dist/tableHeaderCell.js"
32
+ "types": "./dist/v1/TableHeaderCell/index.d.ts",
33
+ "import": "./dist/esm/v1/TableHeaderCell/index.js",
34
+ "require": "./dist/v1/TableHeaderCell/index.js"
25
35
  },
26
36
  "./TableRowAccordion": {
27
- "types": "./dist/tableRowAccordion.d.ts",
28
- "import": "./dist/esm/tableRowAccordion.js",
29
- "require": "./dist/tableRowAccordion.js"
37
+ "types": "./dist/v1/TableRowAccordion/index.d.ts",
38
+ "import": "./dist/esm/v1/TableRowAccordion/index.js",
39
+ "require": "./dist/v1/TableRowAccordion/index.js"
30
40
  }
31
41
  },
32
42
  "scripts": {
@@ -40,9 +50,10 @@
40
50
  "test:watch": "jest --watch --coverage=false"
41
51
  },
42
52
  "dependencies": {
43
- "@sproutsocial/seeds-react-theme": "^3.1.0",
44
- "@sproutsocial/seeds-react-system-props": "^3.0.1",
45
- "@sproutsocial/seeds-react-icon": "^1.1.4"
53
+ "@sproutsocial/seeds-react-theme": "^3.1.1",
54
+ "@sproutsocial/seeds-react-system-props": "^3.0.2",
55
+ "@sproutsocial/seeds-react-icon": "^1.1.5",
56
+ "@sproutsocial/seeds-react-text": "^1.3.2"
46
57
  },
47
58
  "devDependencies": {
48
59
  "@types/react": "^18.0.0",
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
- import Table from "./Table";
1
+ // V1 Table - Default export for backwards compatibility
2
+ import Table from "./v1/Table";
2
3
 
3
4
  export default Table;
4
5
  export { Table };
5
- export * from "./TableTypes";
6
+ export * from "./v1/TableTypes";
@@ -0,0 +1,13 @@
1
+ // V1 Table - Explicit exports for optimal tree shaking
2
+ import Table from "./Table";
3
+
4
+ export default Table;
5
+ export { Table };
6
+
7
+ // Explicit type exports
8
+ export type {
9
+ TypeTableProps,
10
+ TypeTableRow,
11
+ TypeTableHeadProp,
12
+ TypePassthroughProps,
13
+ } from "./TableTypes";
@@ -0,0 +1,242 @@
1
+ import React from "react";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import TableV2, {
4
+ TableWrapper,
5
+ TableRoot,
6
+ TableCaption,
7
+ TableHeader,
8
+ TableBody,
9
+ TableRow,
10
+ TableHeaderCell,
11
+ TableCell,
12
+ } from "./TableV2";
13
+ import { Text } from "@sproutsocial/seeds-react-text";
14
+ import { Icon } from "@sproutsocial/seeds-react-icon";
15
+ import { Badge } from "@sproutsocial/seeds-react-badge";
16
+
17
+ export default {
18
+ title: "Components/TableV2",
19
+ component: TableV2,
20
+ } as Meta;
21
+
22
+ type Story = StoryObj<typeof TableV2>;
23
+
24
+ export const Default: Story = {
25
+ args: {
26
+ caption: "Table Caption",
27
+ displayCaption: true,
28
+ columns: ["Header 1", "Header 2", "Header 3"],
29
+ data: [
30
+ ["Data 1", "Data 2", "Data 3"],
31
+ ["Data 4", "Data 5", "Data 6"],
32
+ ],
33
+ },
34
+ };
35
+
36
+ export const HiddenCaption: Story = {
37
+ args: {
38
+ caption: "Table Caption",
39
+ displayCaption: false,
40
+ columns: ["Header 1", "Header 2", "Header 3"],
41
+ data: [
42
+ ["Data 1", "Data 2", "Data 3"],
43
+ ["Data 4", "Data 5", "Data 6"],
44
+ ],
45
+ },
46
+ };
47
+
48
+ export const WithJSXElements: Story = {
49
+ args: {
50
+ caption: "Project Status Table",
51
+ displayCaption: true,
52
+ columns: ["Project", "Status", "Priority", "Owner"],
53
+ data: [
54
+ [
55
+ <Text
56
+ key="project-1"
57
+ fontSize={400}
58
+ fontWeight="semibold"
59
+ color="green.700"
60
+ qa={{ "data-testid": "project-1" }}
61
+ >
62
+ Website Redesign
63
+ </Text>,
64
+ <Badge key="status-1">Complete</Badge>,
65
+ <div
66
+ key="priority-1"
67
+ style={{ display: "flex", alignItems: "center", gap: "4px" }}
68
+ >
69
+ <Icon name="flag-solid" size="mini" color="red.600" />
70
+ <Text
71
+ fontSize={300}
72
+ qa={{ "data-testid": "project-1" }}
73
+ color="red.600"
74
+ >
75
+ High
76
+ </Text>
77
+ </div>,
78
+ <Text
79
+ key="owner-1"
80
+ fontSize={400}
81
+ qa={{ "data-testid": "project-1" }}
82
+ color="red.600"
83
+ >
84
+ Jane Doe
85
+ </Text>,
86
+ ],
87
+ [
88
+ <Text
89
+ key="project-2"
90
+ fontSize={400}
91
+ qa={{ "data-testid": "project-2" }}
92
+ fontWeight="semibold"
93
+ color="purple.700"
94
+ >
95
+ API Integration
96
+ </Text>,
97
+ <Badge key="status-2">In Progress</Badge>,
98
+ <div
99
+ key="priority-2"
100
+ style={{ display: "flex", alignItems: "center", gap: "4px" }}
101
+ >
102
+ <Icon name="flag-solid" size="mini" color="orange.600" />
103
+ <Text
104
+ fontSize={300}
105
+ qa={{ "data-testid": "project-2" }}
106
+ color="orange.600"
107
+ >
108
+ Medium
109
+ </Text>
110
+ </div>,
111
+ <Text
112
+ key="owner-2"
113
+ qa={{ "data-testid": "project-2" }}
114
+ color="orange.600"
115
+ fontSize={400}
116
+ >
117
+ John Smith
118
+ </Text>,
119
+ ],
120
+ [
121
+ <Text
122
+ key="project-3"
123
+ fontSize={400}
124
+ fontWeight="semibold"
125
+ qa={{ "data-testid": "project-2" }}
126
+ color="orange.600"
127
+ >
128
+ Documentation Update
129
+ </Text>,
130
+ <Badge key="status-3">Not Started</Badge>,
131
+ <div
132
+ key="priority-3"
133
+ style={{ display: "flex", alignItems: "center", gap: "4px" }}
134
+ >
135
+ <Icon name="flag-solid" size="mini" color="green.600" />
136
+ <Text
137
+ fontSize={300}
138
+ qa={{ "data-testid": "project-2" }}
139
+ color="green.600"
140
+ >
141
+ Low
142
+ </Text>
143
+ </div>,
144
+ <Text
145
+ key="owner-3"
146
+ fontSize={400}
147
+ qa={{ "data-testid": "project-2" }}
148
+ color="green.600"
149
+ >
150
+ Sarah Johnson
151
+ </Text>,
152
+ ],
153
+ ],
154
+ },
155
+ };
156
+
157
+ export const GranularComponents: Story = {
158
+ render: () => (
159
+ <TableWrapper>
160
+ <TableRoot>
161
+ <TableCaption isVisible={true}>Employee Directory</TableCaption>
162
+ <TableHeader>
163
+ <TableRow>
164
+ <TableHeaderCell scope="col">Name</TableHeaderCell>
165
+ <TableHeaderCell scope="col">Department</TableHeaderCell>
166
+ <TableHeaderCell scope="col">Role</TableHeaderCell>
167
+ <TableHeaderCell scope="col">Status</TableHeaderCell>
168
+ </TableRow>
169
+ </TableHeader>
170
+ <TableBody>
171
+ <TableRow>
172
+ <TableCell>
173
+ <Text fontSize={400} fontWeight="semibold" color="blue.700">
174
+ Alice Johnson
175
+ </Text>
176
+ </TableCell>
177
+ <TableCell>
178
+ <Text fontSize={300} color="gray.700">
179
+ Engineering
180
+ </Text>
181
+ </TableCell>
182
+ <TableCell>
183
+ <Text fontSize={300} color="gray.700">
184
+ Senior Developer
185
+ </Text>
186
+ </TableCell>
187
+ <TableCell>
188
+ <Badge>Active</Badge>
189
+ </TableCell>
190
+ </TableRow>
191
+ <TableRow>
192
+ <TableCell>
193
+ <Text fontSize={400} fontWeight="semibold" color="purple.700">
194
+ Bob Smith
195
+ </Text>
196
+ </TableCell>
197
+ <TableCell>
198
+ <Text fontSize={300} color="gray.700">
199
+ Design
200
+ </Text>
201
+ </TableCell>
202
+ <TableCell>
203
+ <Text fontSize={300} color="gray.700">
204
+ UX Designer
205
+ </Text>
206
+ </TableCell>
207
+ <TableCell>
208
+ <Badge>Active</Badge>
209
+ </TableCell>
210
+ </TableRow>
211
+ <TableRow>
212
+ <TableCell>
213
+ <Text fontSize={400} fontWeight="semibold" color="green.700">
214
+ Carol Davis
215
+ </Text>
216
+ </TableCell>
217
+ <TableCell>
218
+ <Text fontSize={300} color="gray.700">
219
+ Marketing
220
+ </Text>
221
+ </TableCell>
222
+ <TableCell>
223
+ <Text fontSize={300} color="gray.700">
224
+ Marketing Manager
225
+ </Text>
226
+ </TableCell>
227
+ <TableCell>
228
+ <div
229
+ style={{ display: "flex", alignItems: "center", gap: "4px" }}
230
+ >
231
+ <Icon name="clock-solid" size="mini" color="orange.600" />
232
+ <Text fontSize={300} color="orange.600">
233
+ On Leave
234
+ </Text>
235
+ </div>
236
+ </TableCell>
237
+ </TableRow>
238
+ </TableBody>
239
+ </TableRoot>
240
+ </TableWrapper>
241
+ ),
242
+ };
@@ -0,0 +1,91 @@
1
+ import React, { useId } from "react";
2
+ import { type TableV2Props } from "./TableV2Types";
3
+ import {
4
+ StyledTableV2Container,
5
+ StyledTableV2,
6
+ StyledCaption,
7
+ StyledTableHeader,
8
+ StyledTableBody,
9
+ StyledTableRow,
10
+ StyledTableHeaderCell,
11
+ StyledTableCell,
12
+ } from "./styles";
13
+
14
+ const TableContainerContext = React.createContext<string | null>(null);
15
+
16
+ export const useTableContainerId = () =>
17
+ React.useContext(TableContainerContext);
18
+
19
+ export const TableWrapper = ({
20
+ children,
21
+ ...rest
22
+ }: {
23
+ children: React.ReactElement;
24
+ }) => {
25
+ const containerId = useId();
26
+ return (
27
+ <TableContainerContext.Provider value={containerId}>
28
+ <StyledTableV2Container
29
+ role="region"
30
+ tabIndex={0}
31
+ id={containerId}
32
+ aria-labelledby={containerId}
33
+ {...rest}
34
+ >
35
+ {children}
36
+ </StyledTableV2Container>
37
+ </TableContainerContext.Provider>
38
+ );
39
+ };
40
+
41
+ const TableV2 = ({
42
+ caption,
43
+ displayCaption = true,
44
+ columns,
45
+ data,
46
+ }: TableV2Props) => {
47
+ const containerId = useTableContainerId();
48
+
49
+ return (
50
+ <TableWrapper>
51
+ <StyledTableV2>
52
+ <StyledCaption id={containerId ?? undefined} isVisible={displayCaption}>
53
+ {caption}
54
+ </StyledCaption>
55
+ <StyledTableHeader>
56
+ <StyledTableRow>
57
+ {columns.map((column, index) => (
58
+ <StyledTableHeaderCell key={index} scope="col">
59
+ {column}
60
+ </StyledTableHeaderCell>
61
+ ))}
62
+ </StyledTableRow>
63
+ </StyledTableHeader>
64
+ <StyledTableBody>
65
+ {data.map((row, rowIndex) => (
66
+ <StyledTableRow key={rowIndex}>
67
+ {row.map((cell, cellIndex) => (
68
+ <StyledTableCell key={cellIndex}>{cell}</StyledTableCell>
69
+ ))}
70
+ </StyledTableRow>
71
+ ))}
72
+ </StyledTableBody>
73
+ </StyledTableV2>
74
+ </TableWrapper>
75
+ );
76
+ };
77
+
78
+ // Export the full Table component as Table (main export)
79
+ export const Table = TableV2;
80
+
81
+ // Export styled components for compound component usage
82
+ export const TableRoot = StyledTableV2;
83
+ export const TableCaption = StyledCaption;
84
+ export const TableHeader = StyledTableHeader;
85
+ export const TableBody = StyledTableBody;
86
+ export const TableRow = StyledTableRow;
87
+ export const TableHeaderCell = StyledTableHeaderCell;
88
+ export const TableCell = StyledTableCell;
89
+
90
+ // Default export
91
+ export default TableV2;
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+
3
+ export type ColumnHeader = string | React.ReactNode;
4
+
5
+ export type RowData = Array<string | React.ReactNode>;
6
+
7
+ export interface TableV2Props {
8
+ caption: string;
9
+ displayCaption?: boolean;
10
+ columns: ColumnHeader[];
11
+ data: RowData[];
12
+ }
@@ -0,0 +1,109 @@
1
+ import * as React from "react";
2
+ import TableV2, {
3
+ TableWrapper,
4
+ TableRoot,
5
+ TableCaption,
6
+ TableHeader,
7
+ TableBody,
8
+ TableRow,
9
+ TableHeaderCell,
10
+ TableCell,
11
+ } from "../TableV2";
12
+
13
+ // This file tests TypeScript type checking for TableV2
14
+ // It doesn't need to run, just needs to compile without errors
15
+
16
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
+ function TableV2Types() {
18
+ const columns = ["Name", "Age", "Occupation"];
19
+ const data = [
20
+ ["John Doe", "30", "Engineer"],
21
+ ["Jane Smith", "25", "Designer"],
22
+ ];
23
+
24
+ return (
25
+ <>
26
+ {/* Valid: All required props */}
27
+ <TableV2 caption="User Data" columns={columns} data={data} />
28
+
29
+ {/* Valid: With displayCaption */}
30
+ <TableV2
31
+ caption="User Data"
32
+ columns={columns}
33
+ data={data}
34
+ displayCaption={true}
35
+ />
36
+
37
+ {/* Valid: With displayCaption false */}
38
+ <TableV2
39
+ caption="User Data"
40
+ columns={columns}
41
+ data={data}
42
+ displayCaption={false}
43
+ />
44
+
45
+ {/* Valid: With JSX in columns */}
46
+ <TableV2
47
+ caption="JSX Columns"
48
+ columns={[<strong key="1">Name</strong>, "Age"]}
49
+ data={data}
50
+ />
51
+
52
+ {/* Valid: With JSX in data */}
53
+ <TableV2
54
+ caption="JSX Data"
55
+ columns={columns}
56
+ data={[[<strong key="1">John</strong>, "30", "Engineer"]]}
57
+ />
58
+
59
+ {/* Valid: Empty data */}
60
+ <TableV2 caption="Empty Table" columns={columns} data={[]} />
61
+
62
+ {/* @ts-expect-error - missing required prop: caption */}
63
+ <TableV2 columns={columns} data={data} />
64
+
65
+ {/* @ts-expect-error - missing required prop: columns */}
66
+ <TableV2 caption="Missing Columns" data={data} />
67
+
68
+ {/* @ts-expect-error - missing required prop: data */}
69
+ <TableV2 caption="Missing Data" columns={columns} />
70
+
71
+ {/* prettier-ignore */}
72
+ <TableV2
73
+ caption="Invalid Caption"
74
+ columns={columns}
75
+ data={data}
76
+ // @ts-expect-error - displayCaption should be boolean, not string
77
+ displayCaption="true"
78
+ />
79
+
80
+ {/* @ts-expect-error - columns should be an array */}
81
+ <TableV2 caption="Invalid Columns" columns="invalid" data={data} />
82
+
83
+ {/* @ts-expect-error - data should be a 2D array */}
84
+ <TableV2 caption="Invalid Data" columns={columns} data="invalid" />
85
+ </>
86
+ );
87
+ }
88
+
89
+ // Test compound component types
90
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
91
+ function CompoundComponentTypes() {
92
+ return (
93
+ <TableWrapper>
94
+ <TableRoot>
95
+ <TableCaption isVisible={true}>Custom Table</TableCaption>
96
+ <TableHeader>
97
+ <TableRow>
98
+ <TableHeaderCell scope="col">Header</TableHeaderCell>
99
+ </TableRow>
100
+ </TableHeader>
101
+ <TableBody>
102
+ <TableRow>
103
+ <TableCell>Data</TableCell>
104
+ </TableRow>
105
+ </TableBody>
106
+ </TableRoot>
107
+ </TableWrapper>
108
+ );
109
+ }