@dalexto/lexsys-registry 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
  **Type:** Package README
5
5
  **Source of truth for:** Package role, public exports, item structure, template sync
6
6
  **Verified against:** `packages/registry/src/`
7
+ **Last reviewed:** 2026-05-30
7
8
 
8
9
  ---
9
10
 
package/dist/index.js CHANGED
@@ -20,7 +20,6 @@ var getInstallLayer = (item) => {
20
20
  var accordionRegistryItem = {
21
21
  name: "accordion",
22
22
  canonicalName: "Accordion",
23
- version: "0.0.1",
24
23
  type: "component",
25
24
  category: "data-display",
26
25
  aliases: ["collapse"],
@@ -56,7 +55,6 @@ var accordionRegistryItem = {
56
55
  var alertDialogRegistryItem = {
57
56
  name: "alert-dialog",
58
57
  canonicalName: "AlertDialog",
59
- version: "0.0.1",
60
58
  type: "component",
61
59
  category: "overlays",
62
60
  aliases: [],
@@ -93,7 +91,6 @@ var alertDialogRegistryItem = {
93
91
  var alertRegistryItem = {
94
92
  name: "alert",
95
93
  canonicalName: "Alert",
96
- version: "0.0.1",
97
94
  type: "component",
98
95
  category: "feedback",
99
96
  aliases: ["notice", "message"],
@@ -124,7 +121,6 @@ var alertRegistryItem = {
124
121
  var avatarRegistryItem = {
125
122
  name: "avatar",
126
123
  canonicalName: "Avatar",
127
- version: "0.0.1",
128
124
  type: "component",
129
125
  category: "data-display",
130
126
  aliases: [],
@@ -160,7 +156,6 @@ var avatarRegistryItem = {
160
156
  var badgeRegistryItem = {
161
157
  name: "badge",
162
158
  canonicalName: "Badge",
163
- version: "0.0.1",
164
159
  type: "component",
165
160
  category: "data-display",
166
161
  aliases: ["tag", "label"],
@@ -191,7 +186,6 @@ var badgeRegistryItem = {
191
186
  var buttonRegistryItem = {
192
187
  name: "button",
193
188
  canonicalName: "Button",
194
- version: "0.0.1",
195
189
  type: "component",
196
190
  category: "actions",
197
191
  aliases: ["btn"],
@@ -227,7 +221,6 @@ var buttonRegistryItem = {
227
221
  var cardRegistryItem = {
228
222
  name: "card",
229
223
  canonicalName: "Card",
230
- version: "0.0.1",
231
224
  type: "component",
232
225
  category: "layout",
233
226
  aliases: ["panel", "surface"],
@@ -258,7 +251,6 @@ var cardRegistryItem = {
258
251
  var checkboxRegistryItem = {
259
252
  name: "checkbox",
260
253
  canonicalName: "Checkbox",
261
- version: "0.0.2",
262
254
  type: "component",
263
255
  category: "forms",
264
256
  aliases: ["check"],
@@ -294,7 +286,6 @@ var checkboxRegistryItem = {
294
286
  var collapsibleRegistryItem = {
295
287
  name: "collapsible",
296
288
  canonicalName: "Collapsible",
297
- version: "0.0.1",
298
289
  type: "component",
299
290
  category: "layout",
300
291
  aliases: [],
@@ -331,7 +322,6 @@ var collapsibleRegistryItem = {
331
322
  var contextMenuRegistryItem = {
332
323
  name: "context-menu",
333
324
  canonicalName: "ContextMenu",
334
- version: "0.0.1",
335
325
  type: "component",
336
326
  category: "overlays",
337
327
  aliases: [],
@@ -368,7 +358,6 @@ var contextMenuRegistryItem = {
368
358
  var dialogRegistryItem = {
369
359
  name: "dialog",
370
360
  canonicalName: "Dialog",
371
- version: "0.0.1",
372
361
  type: "component",
373
362
  category: "overlays",
374
363
  aliases: [],
@@ -405,7 +394,6 @@ var dialogRegistryItem = {
405
394
  var drawerRegistryItem = {
406
395
  name: "drawer",
407
396
  canonicalName: "Drawer",
408
- version: "0.0.2",
409
397
  type: "component",
410
398
  category: "overlays",
411
399
  aliases: [],
@@ -442,7 +430,6 @@ var drawerRegistryItem = {
442
430
  var fieldRegistryItem = {
443
431
  name: "field",
444
432
  canonicalName: "Field",
445
- version: "0.0.1",
446
433
  type: "component",
447
434
  category: "forms",
448
435
  aliases: [],
@@ -478,7 +465,6 @@ var fieldRegistryItem = {
478
465
  var fieldsetRegistryItem = {
479
466
  name: "fieldset",
480
467
  canonicalName: "Fieldset",
481
- version: "0.0.1",
482
468
  type: "component",
483
469
  category: "forms",
484
470
  aliases: [],
@@ -514,7 +500,6 @@ var fieldsetRegistryItem = {
514
500
  var formRegistryItem = {
515
501
  name: "form",
516
502
  canonicalName: "Form",
517
- version: "0.0.1",
518
503
  type: "component",
519
504
  category: "forms",
520
505
  aliases: [],
@@ -550,7 +535,6 @@ var formRegistryItem = {
550
535
  var inputRegistryItem = {
551
536
  name: "input",
552
537
  canonicalName: "Input",
553
- version: "0.0.1",
554
538
  type: "component",
555
539
  category: "forms",
556
540
  aliases: ["ipt"],
@@ -586,7 +570,6 @@ var inputRegistryItem = {
586
570
  var menuRegistryItem = {
587
571
  name: "menu",
588
572
  canonicalName: "Menu",
589
- version: "0.0.2",
590
573
  type: "component",
591
574
  category: "overlays",
592
575
  aliases: [],
@@ -623,7 +606,6 @@ var menuRegistryItem = {
623
606
  var menubarRegistryItem = {
624
607
  name: "menubar",
625
608
  canonicalName: "Menubar",
626
- version: "0.0.1",
627
609
  type: "component",
628
610
  category: "overlays",
629
611
  aliases: [],
@@ -659,7 +641,6 @@ var menubarRegistryItem = {
659
641
  var meterRegistryItem = {
660
642
  name: "meter",
661
643
  canonicalName: "Meter",
662
- version: "0.0.1",
663
644
  type: "component",
664
645
  category: "data-display",
665
646
  aliases: [],
@@ -695,7 +676,6 @@ var meterRegistryItem = {
695
676
  var numberFieldRegistryItem = {
696
677
  name: "number-field",
697
678
  canonicalName: "NumberField",
698
- version: "0.0.1",
699
679
  type: "component",
700
680
  category: "forms",
701
681
  aliases: [],
@@ -731,7 +711,6 @@ var numberFieldRegistryItem = {
731
711
  var navigationMenuRegistryItem = {
732
712
  name: "navigation-menu",
733
713
  canonicalName: "NavigationMenu",
734
- version: "0.0.1",
735
714
  type: "component",
736
715
  category: "overlays",
737
716
  aliases: [],
@@ -768,7 +747,6 @@ var navigationMenuRegistryItem = {
768
747
  var popoverRegistryItem = {
769
748
  name: "popover",
770
749
  canonicalName: "Popover",
771
- version: "0.0.1",
772
750
  type: "component",
773
751
  category: "overlays",
774
752
  aliases: [],
@@ -805,7 +783,6 @@ var popoverRegistryItem = {
805
783
  var previewCardRegistryItem = {
806
784
  name: "preview-card",
807
785
  canonicalName: "PreviewCard",
808
- version: "0.0.1",
809
786
  type: "component",
810
787
  category: "overlays",
811
788
  aliases: [],
@@ -841,7 +818,6 @@ var previewCardRegistryItem = {
841
818
  var progressRegistryItem = {
842
819
  name: "progress",
843
820
  canonicalName: "Progress",
844
- version: "0.0.2",
845
821
  type: "component",
846
822
  category: "feedback",
847
823
  aliases: ["progress-bar"],
@@ -877,7 +853,6 @@ var progressRegistryItem = {
877
853
  var radioGroupRegistryItem = {
878
854
  name: "radio-group",
879
855
  canonicalName: "RadioGroup",
880
- version: "0.0.1",
881
856
  type: "component",
882
857
  category: "forms",
883
858
  aliases: ["radio"],
@@ -913,7 +888,6 @@ var radioGroupRegistryItem = {
913
888
  var selectRegistryItem = {
914
889
  name: "select",
915
890
  canonicalName: "Select",
916
- version: "0.0.1",
917
891
  type: "component",
918
892
  category: "forms",
919
893
  aliases: [],
@@ -950,7 +924,6 @@ var selectRegistryItem = {
950
924
  var separatorRegistryItem = {
951
925
  name: "separator",
952
926
  canonicalName: "Separator",
953
- version: "0.0.1",
954
927
  type: "component",
955
928
  category: "layout",
956
929
  aliases: ["divider"],
@@ -986,7 +959,6 @@ var separatorRegistryItem = {
986
959
  var sliderRegistryItem = {
987
960
  name: "slider",
988
961
  canonicalName: "Slider",
989
- version: "0.0.2",
990
962
  type: "component",
991
963
  category: "forms",
992
964
  aliases: ["range"],
@@ -1022,7 +994,6 @@ var sliderRegistryItem = {
1022
994
  var switchRegistryItem = {
1023
995
  name: "switch",
1024
996
  canonicalName: "Switch",
1025
- version: "0.0.2",
1026
997
  type: "component",
1027
998
  category: "forms",
1028
999
  aliases: ["toggle-switch"],
@@ -1054,11 +1025,40 @@ var switchRegistryItem = {
1054
1025
  target: "src/components/ui/Switch"
1055
1026
  };
1056
1027
 
1028
+ // src/items/table.ts
1029
+ var tableRegistryItem = {
1030
+ name: "table",
1031
+ canonicalName: "Table",
1032
+ type: "component",
1033
+ category: "data-display",
1034
+ aliases: [],
1035
+ files: [
1036
+ "primitives/Table/Table.tsx",
1037
+ "primitives/Table/Table.types.ts",
1038
+ "primitives/Table/Table.variants.ts"
1039
+ ],
1040
+ remoteFiles: [
1041
+ {
1042
+ path: "primitives/Table/Table.tsx"
1043
+ },
1044
+ {
1045
+ path: "primitives/Table/Table.types.ts"
1046
+ },
1047
+ {
1048
+ path: "primitives/Table/Table.variants.ts"
1049
+ }
1050
+ ],
1051
+ dependencies: ["class-variance-authority", "clsx", "tailwind-merge"],
1052
+ registryDependencies: [],
1053
+ utilities: ["cn"],
1054
+ styles: ["theme"],
1055
+ target: "src/components/ui/Table"
1056
+ };
1057
+
1057
1058
  // src/items/tabs.ts
1058
1059
  var tabsRegistryItem = {
1059
1060
  name: "tabs",
1060
1061
  canonicalName: "Tabs",
1061
- version: "0.0.1",
1062
1062
  type: "component",
1063
1063
  category: "navigation",
1064
1064
  aliases: ["tab"],
@@ -1094,7 +1094,6 @@ var tabsRegistryItem = {
1094
1094
  var textareaRegistryItem = {
1095
1095
  name: "textarea",
1096
1096
  canonicalName: "Textarea",
1097
- version: "0.0.1",
1098
1097
  type: "component",
1099
1098
  category: "forms",
1100
1099
  aliases: [],
@@ -1130,7 +1129,6 @@ var textareaRegistryItem = {
1130
1129
  var toastRegistryItem = {
1131
1130
  name: "toast",
1132
1131
  canonicalName: "Toast",
1133
- version: "0.0.1",
1134
1132
  type: "component",
1135
1133
  category: "feedback",
1136
1134
  aliases: [],
@@ -1167,7 +1165,6 @@ var toastRegistryItem = {
1167
1165
  var toggleGroupRegistryItem = {
1168
1166
  name: "toggle-group",
1169
1167
  canonicalName: "ToggleGroup",
1170
- version: "0.0.1",
1171
1168
  type: "component",
1172
1169
  category: "actions",
1173
1170
  aliases: [],
@@ -1203,7 +1200,6 @@ var toggleGroupRegistryItem = {
1203
1200
  var toggleRegistryItem = {
1204
1201
  name: "toggle",
1205
1202
  canonicalName: "Toggle",
1206
- version: "0.0.1",
1207
1203
  type: "component",
1208
1204
  category: "actions",
1209
1205
  aliases: ["toggle-button"],
@@ -1239,7 +1235,6 @@ var toggleRegistryItem = {
1239
1235
  var toolbarRegistryItem = {
1240
1236
  name: "toolbar",
1241
1237
  canonicalName: "Toolbar",
1242
- version: "0.0.1",
1243
1238
  type: "component",
1244
1239
  category: "layout",
1245
1240
  aliases: [],
@@ -1275,7 +1270,6 @@ var toolbarRegistryItem = {
1275
1270
  var tooltipRegistryItem = {
1276
1271
  name: "tooltip",
1277
1272
  canonicalName: "Tooltip",
1278
- version: "0.0.1",
1279
1273
  type: "component",
1280
1274
  category: "overlays",
1281
1275
  aliases: ["hint"],
@@ -1311,7 +1305,6 @@ var tooltipRegistryItem = {
1311
1305
  var scrollAreaRegistryItem = {
1312
1306
  name: "scroll-area",
1313
1307
  canonicalName: "ScrollArea",
1314
- version: "0.0.1",
1315
1308
  type: "component",
1316
1309
  category: "layout",
1317
1310
  aliases: ["scroll"],
@@ -1347,7 +1340,6 @@ var scrollAreaRegistryItem = {
1347
1340
  var dashboardShellRegistryItem = {
1348
1341
  name: "dashboard-shell",
1349
1342
  canonicalName: "DashboardShell",
1350
- version: "0.0.2",
1351
1343
  type: "block",
1352
1344
  category: "layout",
1353
1345
  aliases: ["dashboard-template"],
@@ -1367,7 +1359,6 @@ var dashboardShellRegistryItem = {
1367
1359
  var formFieldRegistryItem = {
1368
1360
  name: "form-field",
1369
1361
  canonicalName: "FormField",
1370
- version: "0.0.2",
1371
1362
  type: "block",
1372
1363
  category: "blocks",
1373
1364
  aliases: [],
@@ -1387,7 +1378,6 @@ var formFieldRegistryItem = {
1387
1378
  var settingsPanelRegistryItem = {
1388
1379
  name: "settings-panel",
1389
1380
  canonicalName: "SettingsPanel",
1390
- version: "0.0.2",
1391
1381
  type: "block",
1392
1382
  category: "blocks",
1393
1383
  aliases: ["settings-section"],
@@ -1407,7 +1397,6 @@ var settingsPanelRegistryItem = {
1407
1397
  var sidebarRegistryItem = {
1408
1398
  name: "sidebar",
1409
1399
  canonicalName: "Sidebar",
1410
- version: "0.0.2",
1411
1400
  type: "block",
1412
1401
  category: "blocks",
1413
1402
  aliases: [],
@@ -1427,7 +1416,6 @@ var sidebarRegistryItem = {
1427
1416
  var autocompleteRegistryItem = {
1428
1417
  name: "autocomplete",
1429
1418
  canonicalName: "Autocomplete",
1430
- version: "0.0.2",
1431
1419
  type: "component",
1432
1420
  category: "forms",
1433
1421
  aliases: [],
@@ -1464,7 +1452,6 @@ var autocompleteRegistryItem = {
1464
1452
  var checkboxGroupRegistryItem = {
1465
1453
  name: "checkbox-group",
1466
1454
  canonicalName: "CheckboxGroup",
1467
- version: "0.0.1",
1468
1455
  type: "component",
1469
1456
  category: "forms",
1470
1457
  aliases: [],
@@ -1500,7 +1487,6 @@ var checkboxGroupRegistryItem = {
1500
1487
  var comboboxRegistryItem = {
1501
1488
  name: "combobox",
1502
1489
  canonicalName: "Combobox",
1503
- version: "0.0.2",
1504
1490
  type: "component",
1505
1491
  category: "forms",
1506
1492
  aliases: [],
@@ -1537,7 +1523,6 @@ var comboboxRegistryItem = {
1537
1523
  var authFormRegistryItem = {
1538
1524
  name: "auth-form",
1539
1525
  canonicalName: "AuthForm",
1540
- version: "0.0.2",
1541
1526
  type: "block",
1542
1527
  category: "blocks",
1543
1528
  aliases: ["login-form"],
@@ -1557,7 +1542,6 @@ var authFormRegistryItem = {
1557
1542
  var commandPaletteRegistryItem = {
1558
1543
  name: "command-palette",
1559
1544
  canonicalName: "CommandPalette",
1560
- version: "0.0.2",
1561
1545
  type: "block",
1562
1546
  category: "blocks",
1563
1547
  aliases: ["command-menu", "kbar"],
@@ -1577,7 +1561,6 @@ var commandPaletteRegistryItem = {
1577
1561
  var otpFieldRegistryItem = {
1578
1562
  name: "otp-field",
1579
1563
  canonicalName: "OtpField",
1580
- version: "0.0.1",
1581
1564
  type: "component",
1582
1565
  category: "forms",
1583
1566
  aliases: [],
@@ -1613,7 +1596,6 @@ var otpFieldRegistryItem = {
1613
1596
  var emptyRegistryItem = {
1614
1597
  name: "empty",
1615
1598
  canonicalName: "Empty",
1616
- version: "0.0.3",
1617
1599
  type: "block",
1618
1600
  category: "layout",
1619
1601
  aliases: ["empty-state"],
@@ -1660,6 +1642,7 @@ var registryItems = [
1660
1642
  separatorRegistryItem,
1661
1643
  sliderRegistryItem,
1662
1644
  switchRegistryItem,
1645
+ tableRegistryItem,
1663
1646
  tabsRegistryItem,
1664
1647
  textareaRegistryItem,
1665
1648
  toastRegistryItem,
@@ -1727,9 +1710,6 @@ var validateRegistryItem = (item) => {
1727
1710
  if (isEmpty(item.canonicalName)) {
1728
1711
  throw new Error(`Registry item "${item.name}" has invalid 'canonicalName'`);
1729
1712
  }
1730
- if (isEmpty(item.version)) {
1731
- throw new Error(`Registry item "${item.name}" has invalid 'version'`);
1732
- }
1733
1713
  if (!item.files || !item.files.length) {
1734
1714
  throw new Error(
1735
1715
  `Registry item "${item.name}" must define at least one file`
@@ -2182,4 +2162,4 @@ var registryManifest = {
2182
2162
  utilities: registryUtilities
2183
2163
  };
2184
2164
 
2185
- export { accordionRegistryItem, alertDialogRegistryItem, alertRegistryItem, authFormRegistryItem, autocompleteRegistryItem, avatarRegistryItem, badgeRegistryItem, buttonRegistryItem, cardRegistryItem, checkboxGroupRegistryItem, checkboxRegistryItem, cnRegistryUtility, collapsibleRegistryItem, comboboxRegistryItem, commandPaletteRegistryItem, contextMenuRegistryItem, dashboardShellRegistryItem, dialogRegistryItem, drawerRegistryItem, emptyRegistryItem, fieldRegistryItem, fieldsetRegistryItem, formFieldRegistryItem, formRegistryItem, getInstallLayer, inputRegistryItem, menuRegistryItem, menubarRegistryItem, meterRegistryItem, navigationMenuRegistryItem, numberFieldRegistryItem, otpFieldRegistryItem, popoverRegistryItem, previewCardRegistryItem, progressRegistryItem, radioGroupRegistryItem, registryItems, registryManifest, registryStyles, registryUtilities, registryVersion, scrollAreaRegistryItem, selectRegistryItem, separatorRegistryItem, settingsPanelRegistryItem, sidebarRegistryItem, sliderRegistryItem, switchRegistryItem, tabsRegistryItem, textareaRegistryItem, themeRegistryStyle, toastRegistryItem, toggleGroupRegistryItem, toggleRegistryItem, toolbarRegistryItem, tooltipRegistryItem, validateRegistry, validateRegistryItem };
2165
+ export { accordionRegistryItem, alertDialogRegistryItem, alertRegistryItem, authFormRegistryItem, autocompleteRegistryItem, avatarRegistryItem, badgeRegistryItem, buttonRegistryItem, cardRegistryItem, checkboxGroupRegistryItem, checkboxRegistryItem, cnRegistryUtility, collapsibleRegistryItem, comboboxRegistryItem, commandPaletteRegistryItem, contextMenuRegistryItem, dashboardShellRegistryItem, dialogRegistryItem, drawerRegistryItem, emptyRegistryItem, fieldRegistryItem, fieldsetRegistryItem, formFieldRegistryItem, formRegistryItem, getInstallLayer, inputRegistryItem, menuRegistryItem, menubarRegistryItem, meterRegistryItem, navigationMenuRegistryItem, numberFieldRegistryItem, otpFieldRegistryItem, popoverRegistryItem, previewCardRegistryItem, progressRegistryItem, radioGroupRegistryItem, registryItems, registryManifest, registryStyles, registryUtilities, registryVersion, scrollAreaRegistryItem, selectRegistryItem, separatorRegistryItem, settingsPanelRegistryItem, sidebarRegistryItem, sliderRegistryItem, switchRegistryItem, tableRegistryItem, tabsRegistryItem, textareaRegistryItem, themeRegistryStyle, toastRegistryItem, toggleGroupRegistryItem, toggleRegistryItem, toolbarRegistryItem, tooltipRegistryItem, validateRegistry, validateRegistryItem };
@@ -47,4 +47,5 @@ export { authFormRegistryItem } from "./auth-form.js";
47
47
  export { commandPaletteRegistryItem } from "./command-palette.js";
48
48
  export { otpFieldRegistryItem } from "./otp-field.js";
49
49
  export { emptyRegistryItem } from "./empty.js";
50
+ export { tableRegistryItem } from "./table.js";
50
51
  export declare const registryItems: RegistryItem[];
@@ -0,0 +1,7 @@
1
+ /**
2
+ * table.ts
3
+ *
4
+ * Registry metadata for the Table component.
5
+ */
6
+ import type { RegistryItem } from "../registry.types.js";
7
+ export declare const tableRegistryItem: RegistryItem;
@@ -26,7 +26,6 @@ export type RegistryItemCategory = "actions" | "forms" | "overlays" | "navigatio
26
26
  export interface RegistryItem {
27
27
  name: string;
28
28
  canonicalName: string;
29
- version: string;
30
29
  type: RegistryItemType;
31
30
  category: RegistryItemCategory;
32
31
  aliases: string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dalexto/lexsys-registry",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "Install metadata and templates for the Lexsys registry-first UI framework",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Table.tsx
3
+ *
4
+ * Reference Table component implementation.
5
+ */
6
+
7
+ import type {
8
+ TableBodyProps,
9
+ TableCaptionProps,
10
+ TableCellProps,
11
+ TableFooterProps,
12
+ TableHeadProps,
13
+ TableHeaderProps,
14
+ TableProps,
15
+ TableRowProps,
16
+ } from "./Table.types"
17
+ import {
18
+ tableBodyClassName,
19
+ tableCaptionClassName,
20
+ tableCellClassName,
21
+ tableFooterClassName,
22
+ tableHeadClassName,
23
+ tableHeaderClassName,
24
+ tableRowClassName,
25
+ tableVariants,
26
+ tableWrapperClassName,
27
+ } from "./Table.variants"
28
+ import { cn } from "@/lib/utils"
29
+
30
+ const Table = ({ ref, variant, className, ...props }: TableProps) => {
31
+ return (
32
+ <div className={tableWrapperClassName}>
33
+ <table
34
+ ref={ref}
35
+ className={cn(tableVariants({ variant }), className)}
36
+ {...props}
37
+ />
38
+ </div>
39
+ )
40
+ }
41
+
42
+ Table.displayName = "Table"
43
+
44
+ const TableHeader = ({ ref, className, ...props }: TableHeaderProps) => {
45
+ return (
46
+ <thead
47
+ ref={ref}
48
+ className={cn(tableHeaderClassName, className)}
49
+ {...props}
50
+ />
51
+ )
52
+ }
53
+
54
+ TableHeader.displayName = "TableHeader"
55
+
56
+ const TableBody = ({ ref, className, ...props }: TableBodyProps) => {
57
+ return (
58
+ <tbody ref={ref} className={cn(tableBodyClassName, className)} {...props} />
59
+ )
60
+ }
61
+
62
+ TableBody.displayName = "TableBody"
63
+
64
+ const TableFooter = ({ ref, className, ...props }: TableFooterProps) => {
65
+ return (
66
+ <tfoot
67
+ ref={ref}
68
+ className={cn(tableFooterClassName, className)}
69
+ {...props}
70
+ />
71
+ )
72
+ }
73
+
74
+ TableFooter.displayName = "TableFooter"
75
+
76
+ const TableRow = ({ ref, className, ...props }: TableRowProps) => {
77
+ return (
78
+ <tr ref={ref} className={cn(tableRowClassName, className)} {...props} />
79
+ )
80
+ }
81
+
82
+ TableRow.displayName = "TableRow"
83
+
84
+ const TableHead = ({ ref, className, ...props }: TableHeadProps) => {
85
+ return (
86
+ <th ref={ref} className={cn(tableHeadClassName, className)} {...props} />
87
+ )
88
+ }
89
+
90
+ TableHead.displayName = "TableHead"
91
+
92
+ const TableCell = ({ ref, className, ...props }: TableCellProps) => {
93
+ return (
94
+ <td ref={ref} className={cn(tableCellClassName, className)} {...props} />
95
+ )
96
+ }
97
+
98
+ TableCell.displayName = "TableCell"
99
+
100
+ const TableCaption = ({ ref, className, ...props }: TableCaptionProps) => {
101
+ return (
102
+ <caption
103
+ ref={ref}
104
+ className={cn(tableCaptionClassName, className)}
105
+ {...props}
106
+ />
107
+ )
108
+ }
109
+
110
+ TableCaption.displayName = "TableCaption"
111
+
112
+ export {
113
+ Table,
114
+ TableHeader,
115
+ TableBody,
116
+ TableFooter,
117
+ TableHead,
118
+ TableRow,
119
+ TableCell,
120
+ TableCaption,
121
+ }
@@ -0,0 +1,68 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * Table.types.ts
4
+ *
5
+ * Public and internal types for Table component.
6
+ */
7
+
8
+ import type {
9
+ HTMLAttributes,
10
+ TableHTMLAttributes,
11
+ TdHTMLAttributes,
12
+ ThHTMLAttributes,
13
+ } from "react"
14
+
15
+ export type TableVariant = "default" | "striped" | "bordered"
16
+
17
+ export interface TableProps extends Omit<
18
+ TableHTMLAttributes<HTMLTableElement>,
19
+ "className"
20
+ > {
21
+ ref?: Ref<HTMLTableElement>
22
+ variant?: TableVariant
23
+ className?: string
24
+ }
25
+
26
+ export interface TableSectionProps extends Omit<
27
+ HTMLAttributes<HTMLTableSectionElement>,
28
+ "className"
29
+ > {
30
+ ref?: Ref<HTMLTableSectionElement>
31
+ className?: string
32
+ }
33
+
34
+ export type TableHeaderProps = TableSectionProps
35
+ export type TableBodyProps = TableSectionProps
36
+ export type TableFooterProps = TableSectionProps
37
+
38
+ export interface TableRowProps extends Omit<
39
+ HTMLAttributes<HTMLTableRowElement>,
40
+ "className"
41
+ > {
42
+ ref?: Ref<HTMLTableRowElement>
43
+ className?: string
44
+ }
45
+
46
+ export interface TableHeadProps extends Omit<
47
+ ThHTMLAttributes<HTMLTableCellElement>,
48
+ "className"
49
+ > {
50
+ ref?: Ref<HTMLTableCellElement>
51
+ className?: string
52
+ }
53
+
54
+ export interface TableCellProps extends Omit<
55
+ TdHTMLAttributes<HTMLTableCellElement>,
56
+ "className"
57
+ > {
58
+ ref?: Ref<HTMLTableCellElement>
59
+ className?: string
60
+ }
61
+
62
+ export interface TableCaptionProps extends Omit<
63
+ HTMLAttributes<HTMLTableCaptionElement>,
64
+ "className"
65
+ > {
66
+ ref?: Ref<HTMLTableCaptionElement>
67
+ className?: string
68
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Table.variants.ts
3
+ *
4
+ * Defines Table visual slots using class composition.
5
+ */
6
+
7
+ import { cva } from "class-variance-authority"
8
+
9
+ export const tableVariants = cva(
10
+ [
11
+ "w-full caption-bottom border-collapse text-(length:--lex-table-cell-font-size)",
12
+ "text-(--lex-table-foreground)",
13
+ ].join(" "),
14
+ {
15
+ variants: {
16
+ variant: {
17
+ default: "",
18
+ striped:
19
+ "[&_tbody_tr:nth-child(even)]:bg-(--lex-table-row-striped-background)",
20
+ bordered:
21
+ "border border-(--lex-table-border-color) [&_th]:border [&_td]:border [&_th]:border-(--lex-table-border-color) [&_td]:border-(--lex-table-border-color)",
22
+ },
23
+ },
24
+ defaultVariants: {
25
+ variant: "default",
26
+ },
27
+ },
28
+ )
29
+
30
+ export const tableWrapperClassName = "relative w-full overflow-x-auto"
31
+
32
+ export const tableCaptionClassName =
33
+ "mt-(--lex-table-cell-padding-y) text-(length:--lex-table-caption-font-size) leading-(--lex-table-caption-font-line-height) text-(--lex-table-caption-foreground)"
34
+
35
+ export const tableHeaderClassName =
36
+ "[&_tr]:border-b [&_tr]:border-(--lex-table-border-color)"
37
+
38
+ export const tableBodyClassName =
39
+ "[&_tr:last-child]:border-0 [&_tr]:border-b [&_tr]:border-(--lex-table-border-color)"
40
+
41
+ export const tableFooterClassName =
42
+ "border-t border-(--lex-table-border-color) bg-(--lex-table-footer-background) font-medium [&_tr]:last:border-b-0"
43
+
44
+ export const tableRowClassName =
45
+ "border-b border-(--lex-table-border-color) transition-colors hover:bg-(--lex-table-head-background)/50 data-[state=selected]:bg-(--lex-table-head-background)"
46
+
47
+ export const tableHeadClassName =
48
+ "h-10 px-(--lex-table-cell-padding-x) py-(--lex-table-cell-padding-y) text-left align-middle font-(--lex-table-head-font-weight) text-(length:--lex-table-head-font-size) leading-(--lex-table-head-font-line-height) text-(--lex-table-head-foreground) [&:has([role=checkbox])]:pr-0"
49
+
50
+ export const tableCellClassName =
51
+ "px-(--lex-table-cell-padding-x) py-(--lex-table-cell-padding-y) align-middle leading-(--lex-table-cell-font-line-height) [&:has([role=checkbox])]:pr-0"
@@ -1324,6 +1324,24 @@
1324
1324
  --lex-switch-focus-ring-offset: var(--lex-outline-offset-focus);
1325
1325
  --lex-switch-transition-duration: var(--lex-duration-control);
1326
1326
  --lex-switch-transition-easing: var(--lex-easing-control);
1327
+ --lex-table-background: var(--lex-color-background-surface);
1328
+ --lex-table-foreground: var(--lex-color-text-primary);
1329
+ --lex-table-border-color: var(--lex-border-default);
1330
+ --lex-table-caption-foreground: var(--lex-color-text-secondary);
1331
+ --lex-table-caption-font-size: var(--lex-typography-body-sm-font-size);
1332
+ --lex-table-caption-font-line-height: var(--lex-typography-body-sm-line-height);
1333
+ --lex-table-head-background: var(--lex-color-background-subtle);
1334
+ --lex-table-head-foreground: var(--lex-color-text-primary);
1335
+ --lex-table-head-font-size: var(--lex-typography-body-sm-font-size);
1336
+ --lex-table-head-font-weight: var(--lex-typography-body-sm-font-weight);
1337
+ --lex-table-head-font-line-height: var(--lex-typography-body-sm-line-height);
1338
+ --lex-table-cell-font-size: var(--lex-typography-body-sm-font-size);
1339
+ --lex-table-cell-font-line-height: var(--lex-typography-body-sm-line-height);
1340
+ --lex-table-cell-padding-x: var(--lex-space-surface-md);
1341
+ --lex-table-cell-padding-y: var(--lex-space-surface-sm);
1342
+ --lex-table-row-striped-background: var(--lex-color-background-subtle);
1343
+ --lex-table-footer-background: var(--lex-color-background-subtle);
1344
+ --lex-table-footer-foreground: var(--lex-color-text-secondary);
1327
1345
  --lex-tabs-gap: var(--lex-space-control-gap-lg);
1328
1346
  --lex-tabs-list-background: var(--lex-color-background-subtle);
1329
1347
  --lex-tabs-list-radius: var(--lex-radius-control);