@syncular/ui 0.0.6-56 → 0.0.6-66

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.
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys-table.d.ts","sourceRoot":"","sources":["../../src/console/api-keys-table.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,wBAAwB,EAAc,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG;IAChE,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAQF,QAAA,MAAM,YAAY;;;;;kDA6EjB,CAAC;AAGF,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"api-keys-table.d.ts","sourceRoot":"","sources":["../../src/console/api-keys-table.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,wBAAwB,EAAc,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAWhD,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG;IAChE,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAQF,QAAA,MAAM,YAAY;;;;;kDA+DjB,CAAC;AAGF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -3,19 +3,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { forwardRef } from 'react';
4
4
  import { cn } from '../lib/cn.js';
5
5
  import { Badge } from '../primitives/badge.js';
6
- import { Button } from '../primitives/button.js';
6
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '../primitives/table.js';
7
7
  const typeBadgeMap = {
8
8
  relay: 'relay',
9
9
  admin: 'flow',
10
10
  proxy: 'ghost',
11
11
  };
12
- const ApiKeysTable = forwardRef(({ className, keys, onCreateKey, onRotateKey, onRevokeKey, ...props }, ref) => (_jsxs("div", { ref: ref, className: cn('bg-panel border border-border rounded-lg hover:border-border-bright transition', className), ...props, children: [
13
- _jsxs("div", { className: "px-4 py-2.5 border-b border-border flex items-center justify-between", children: [
14
- _jsx("span", { className: "font-mono text-[10px] text-neutral-500 uppercase tracking-widest", children: "API Keys" }), onCreateKey && (_jsx(Button, { variant: "primary", size: "sm", onClick: onCreateKey, children: "+ Create Key" }))] }), _jsxs("div", { className: "font-mono text-[9px] tracking-wider uppercase text-neutral-600 flex items-center gap-4 px-4 leading-6 border-b border-border", children: [
15
- _jsx("span", { className: "w-[140px]", children: "Name" }), _jsx("span", { className: "w-[70px]", children: "Type" }), _jsx("span", { className: "flex-1", children: "Prefix" }), _jsx("span", { className: "w-[90px]", children: "Created" }), _jsx("span", { className: "w-[80px] text-right", children: "Actions" })
16
- ] }), keys.map((k, i) => (_jsxs("div", { className: cn('font-mono text-[11px] leading-7 px-4 flex items-center gap-4 hover:bg-white/[0.015] transition-colors cursor-default', i < keys.length - 1 && 'border-b border-[#141414]'), children: [
17
- _jsx("span", { className: "w-[140px] text-white truncate", children: k.name }), _jsx("span", { className: "w-[70px]", children: _jsx(Badge, { variant: typeBadgeMap[k.type] ?? 'ghost', children: k.type }) }), _jsx("span", { className: "flex-1 text-neutral-500 truncate", children: k.prefix }), _jsx("span", { className: "w-[90px] text-neutral-600 truncate", children: k.created }), _jsxs("span", { className: "w-[80px] flex gap-2 justify-end", children: [onRotateKey && (_jsx(Button, { variant: "default", size: "sm", className: "text-[9px] px-1.5 py-0.5", onClick: () => onRotateKey(k.name), children: "Rotate" })), onRevokeKey && (_jsx(Button, { variant: "destructive", size: "sm", className: "text-[9px] px-1.5 py-0.5", onClick: () => onRevokeKey(k.name), children: "Revoke" }))] })
18
- ] }, `${k.name}:${k.prefix}:${i}`)))] })));
12
+ const ApiKeysTable = forwardRef(({ className, keys, onCreateKey, onRotateKey, onRevokeKey, ...props }, ref) => (_jsx("div", { ref: ref, className: cn('w-full', className), ...props, children: _jsxs(Table, { children: [
13
+ _jsx(TableHeader, { children: _jsxs(TableRow, { children: [
14
+ _jsx(TableHead, { children: "Name" }), _jsx(TableHead, { children: "Type" }), _jsx(TableHead, { children: "Prefix" }), _jsx(TableHead, { children: "Created" })
15
+ ] }) }), _jsx(TableBody, { children: keys.map((k, i) => (_jsxs(TableRow, { className: "group relative", children: [
16
+ _jsx(TableCell, { children: _jsx("span", { className: "text-white truncate", children: k.name }) }), _jsx(TableCell, { children: _jsx(Badge, { variant: typeBadgeMap[k.type] ?? 'ghost', children: k.type }) }), _jsx(TableCell, { children: _jsx("span", { className: "text-neutral-500 truncate", children: k.prefix }) }), _jsx(TableCell, { children: _jsx("span", { className: "text-neutral-600 truncate", children: k.created }) }), (onRotateKey || onRevokeKey) && (_jsxs("div", { className: "absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity", children: [onRotateKey && (_jsx("button", { type: "button", onClick: () => onRotateKey(k.name), className: "flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] text-neutral-600 hover:text-white hover:bg-white/[0.05] cursor-pointer transition-colors", children: "rotate" })), onRevokeKey && (_jsx("button", { type: "button", onClick: () => onRevokeKey(k.name), className: "flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] text-neutral-600 hover:text-offline hover:bg-offline/10 cursor-pointer transition-colors", children: "revoke" }))] }))] }, `${k.name}:${k.prefix}:${i}`))) })
17
+ ] }) })));
19
18
  ApiKeysTable.displayName = 'ApiKeysTable';
20
19
  export { ApiKeysTable };
21
20
  //# sourceMappingURL=api-keys-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys-table.js","sourceRoot":"","sources":["../../src/console/api-keys-table.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAiC,UAAU,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAS9C,MAAM,YAAY,GAA0C;IAC1D,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,YAAY,GAAG,UAAU,CAC7B,CACE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EACpE,GAAG,EACH,EAAE,CAAC,CACH,eACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,gFAAgF,EAChF,SAAS,CACV,KACG,KAAK;QAGT,eAAK,SAAS,EAAC,sEAAsE;gBACnF,eAAM,SAAS,EAAC,kEAAkE,yBAE3E,EACN,WAAW,IAAI,CACd,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,WAAW,6BAE/C,CACV,IACG,EAGN,eAAK,SAAS,EAAC,8HAA8H;gBAC3I,eAAM,SAAS,EAAC,WAAW,qBAAY,EACvC,eAAM,SAAS,EAAC,UAAU,qBAAY,EACtC,eAAM,SAAS,EAAC,QAAQ,uBAAc,EACtC,eAAM,SAAS,EAAC,UAAU,wBAAe,EACzC,eAAM,SAAS,EAAC,qBAAqB,wBAAe;gBAChD,EAGL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,eAEE,SAAS,EAAE,EAAE,CACX,sHAAsH,EACtH,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,2BAA2B,CACnD;gBAED,eAAM,SAAS,EAAC,+BAA+B,YAAE,CAAC,CAAC,IAAI,GAAQ,EAC/D,eAAM,SAAS,EAAC,UAAU,YACxB,KAAC,KAAK,IAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,YAAG,CAAC,CAAC,IAAI,GAAS,GAC5D,EACP,eAAM,SAAS,EAAC,kCAAkC,YAAE,CAAC,CAAC,MAAM,GAAQ,EACpE,eAAM,SAAS,EAAC,oCAAoC,YACjD,CAAC,CAAC,OAAO,GACL,EACP,gBAAM,SAAS,EAAC,iCAAiC,aAC9C,WAAW,IAAI,CACd,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,0BAA0B,EACpC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,uBAG3B,CACV,EACA,WAAW,IAAI,CACd,KAAC,MAAM,IACL,OAAO,EAAC,aAAa,EACrB,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,0BAA0B,EACpC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,uBAG3B,CACV,IACI;iBAnCF,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAoC7B,CACP,CAAC,IACE,CACP,CACF,CAAC;AACF,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"api-keys-table.js","sourceRoot":"","sources":["../../src/console/api-keys-table.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAiC,UAAU,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAS7B,MAAM,YAAY,GAA0C;IAC1D,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,YAAY,GAAG,UAAU,CAC7B,CACE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EACpE,GAAG,EACH,EAAE,CAAC,CACH,cAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAM,KAAK,YAC1D,MAAC,KAAK;YACJ,KAAC,WAAW,cACV,MAAC,QAAQ;wBACP,KAAC,SAAS,uBAAiB,EAC3B,KAAC,SAAS,uBAAiB,EAC3B,KAAC,SAAS,yBAAmB,EAC7B,KAAC,SAAS,0BAAoB;wBACrB,GACC,EACd,KAAC,SAAS,cACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,MAAC,QAAQ,IAEP,SAAS,EAAC,gBAAgB;wBAE1B,KAAC,SAAS,cACR,eAAM,SAAS,EAAC,qBAAqB,YAAE,CAAC,CAAC,IAAI,GAAQ,GAC3C,EACZ,KAAC,SAAS,cACR,KAAC,KAAK,IAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,YAC5C,CAAC,CAAC,IAAI,GACD,GACE,EACZ,KAAC,SAAS,cACR,eAAM,SAAS,EAAC,2BAA2B,YAAE,CAAC,CAAC,MAAM,GAAQ,GACnD,EACZ,KAAC,SAAS,cACR,eAAM,SAAS,EAAC,2BAA2B,YAAE,CAAC,CAAC,OAAO,GAAQ,GACpD,EACX,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAC/B,eAAK,SAAS,EAAC,wHAAwH,aACpI,WAAW,IAAI,CACd,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAClC,SAAS,EAAC,mJAAmJ,uBAGtJ,CACV,EACA,WAAW,IAAI,CACd,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAClC,SAAS,EAAC,mJAAmJ,uBAGtJ,CACV,IACG,CACP,KAtCI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAuCxB,CACZ,CAAC,GACQ;YACN,GACJ,CACP,CACF,CAAC;AACF,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"danger-action-card.d.ts","sourceRoot":"","sources":["../../src/console/danger-action-card.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,WAAuB,EACvB,SAAS,EACT,WAAW,EACX,QAAQ,EACR,KAAK,EACL,KAAK,EACN,EAAE,qBAAqB,2CAqBvB"}
1
+ {"version":3,"file":"danger-action-card.d.ts","sourceRoot":"","sources":["../../src/console/danger-action-card.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,WAAuB,EACvB,SAAS,EACT,WAAW,EACX,QAAQ,EACR,KAAK,EACL,KAAK,EACN,EAAE,qBAAqB,2CAyBvB"}
@@ -5,6 +5,6 @@ import { Button } from '../primitives/button.js';
5
5
  import { Card, CardContent } from '../primitives/card.js';
6
6
  export function DangerActionCard({ actionLabel = 'Confirm', className, description, onAction, stats, title, }) {
7
7
  return (_jsx(Card, { className: cn('border-offline/20', className), children: _jsxs(CardContent, { className: "flex flex-col gap-3", children: [
8
- _jsx("h3", { className: "font-mono text-[10px] text-offline uppercase tracking-widest", children: title }), description ? (_jsx("p", { className: "font-mono text-[10px] text-neutral-500", children: description })) : null, stats ? _jsx("div", { children: stats }) : null, onAction ? (_jsx(Button, { variant: "destructive", onClick: onAction, children: actionLabel })) : null] }) }));
8
+ _jsx("h3", { className: "font-mono text-[10px] text-offline uppercase tracking-widest", children: title }), description ? (_jsx("p", { className: "font-mono text-[10px] text-neutral-500", children: description })) : null, stats ? _jsx("div", { children: stats }) : null, onAction ? (_jsx(Button, { variant: "destructive", className: "self-start", onClick: onAction, children: actionLabel })) : null] }) }));
9
9
  }
10
10
  //# sourceMappingURL=danger-action-card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"danger-action-card.js","sourceRoot":"","sources":["../../src/console/danger-action-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAWvD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,WAAW,GAAG,SAAS,EACvB,SAAS,EACT,WAAW,EACX,QAAQ,EACR,KAAK,EACL,KAAK,GACiB,EAAE;IACxB,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,YACjD,MAAC,WAAW,IAAC,SAAS,EAAC,qBAAqB;gBAC1C,aAAI,SAAS,EAAC,8DAA8D,YACzE,KAAK,GACH,EACJ,WAAW,CAAC,CAAC,CAAC,CACb,YAAG,SAAS,EAAC,wCAAwC,YAClD,WAAW,GACV,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,wBAAM,KAAK,GAAO,CAAC,CAAC,CAAC,IAAI,EACjC,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,MAAM,IAAC,OAAO,EAAC,aAAa,EAAC,OAAO,EAAE,QAAQ,YAC5C,WAAW,GACL,CACV,CAAC,CAAC,CAAC,IAAI,IACI,GACT,CACR,CAAC;AAAA,CACH"}
1
+ {"version":3,"file":"danger-action-card.js","sourceRoot":"","sources":["../../src/console/danger-action-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAWvD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,WAAW,GAAG,SAAS,EACvB,SAAS,EACT,WAAW,EACX,QAAQ,EACR,KAAK,EACL,KAAK,GACiB,EAAE;IACxB,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,YACjD,MAAC,WAAW,IAAC,SAAS,EAAC,qBAAqB;gBAC1C,aAAI,SAAS,EAAC,8DAA8D,YACzE,KAAK,GACH,EACJ,WAAW,CAAC,CAAC,CAAC,CACb,YAAG,SAAS,EAAC,wCAAwC,YAClD,WAAW,GACV,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,wBAAM,KAAK,GAAO,CAAC,CAAC,CAAC,IAAI,EACjC,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,MAAM,IACL,OAAO,EAAC,aAAa,EACrB,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,QAAQ,YAEhB,WAAW,GACL,CACV,CAAC,CAAC,CAAC,IAAI,IACI,GACT,CACR,CAAC;AAAA,CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-table.d.ts","sourceRoot":"","sources":["../../src/console/fleet-table.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,wBAAwB,EAAc,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAWnD,MAAM,MAAM,eAAe,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG;IAC9D,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAeF,QAAA,MAAM,UAAU;;;;kDA6Gf,CAAC;AAGF,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"fleet-table.d.ts","sourceRoot":"","sources":["../../src/console/fleet-table.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,wBAAwB,EAAc,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAWnD,MAAM,MAAM,eAAe,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG;IAC9D,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAeF,QAAA,MAAM,UAAU;;;;kDA4Gf,CAAC;AAGF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { UserX } from 'lucide-react';
3
4
  import { forwardRef } from 'react';
4
5
  import { cn } from '../lib/cn.js';
5
6
  import { Badge } from '../primitives/badge.js';
@@ -21,23 +22,26 @@ const statusBadgeVariant = {
21
22
  const FleetTable = forwardRef(({ className, clients, headSeq, onEvict, ...props }, ref) => {
22
23
  return (_jsx("div", { ref: ref, className: cn('w-full', className), ...props, children: _jsxs(Table, { children: [
23
24
  _jsx(TableHeader, { children: _jsxs(TableRow, { children: [
24
- _jsx(TableHead, { children: "Client" }), _jsx(TableHead, { children: "Status" }), _jsx(TableHead, { children: "Type" }), _jsx(TableHead, { children: "Cursor" }), _jsx(TableHead, { children: "Lag" }), _jsx(TableHead, { children: "Dialect" }), _jsx(TableHead, { children: "Mode" }), onEvict && _jsx(TableHead, { children: "Actions" })] }) }), _jsx(TableBody, { children: clients.map((client) => {
25
+ _jsx(TableHead, { className: "w-[160px]", children: "Client" }), _jsx(TableHead, { className: "w-[70px]", children: "Status" }), _jsx(TableHead, { className: "w-[60px]", children: "Type" }), _jsx(TableHead, { className: "w-[80px]", children: "Cursor" }), _jsx(TableHead, { className: "w-[110px]", children: "Lag" }), _jsx(TableHead, { className: "w-[60px]", children: "Dialect" }), _jsx(TableHead, { className: "flex-1", children: "Mode" })
26
+ ] }) }), _jsx(TableBody, { children: clients.map((client) => {
25
27
  const lag = Math.max(0, headSeq - client.cursor);
26
28
  const pct = headSeq > 0
27
29
  ? Math.min(100, (client.cursor / headSeq) * 100)
28
30
  : 100;
29
31
  const lagColor = getLagColor(lag);
30
- return (_jsxs(TableRow, { children: [
31
- _jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-2", children: [
32
+ return (_jsxs(TableRow, { className: "group relative", children: [
33
+ _jsx(TableCell, { className: "w-[160px]", children: _jsxs("div", { className: "flex items-center gap-2", children: [
32
34
  _jsx("span", { className: "w-1.5 h-1.5 rounded-full flex-shrink-0", style: {
33
35
  background: lagColor,
34
36
  boxShadow: `0 0 4px ${lagColor}`,
35
37
  } }), _jsx("span", { className: "font-mono text-[11px] text-white truncate", title: client.id, children: client.id.length > 18
36
38
  ? `${client.id.substring(0, 18)}\u2026`
37
39
  : client.id })
38
- ] }) }), _jsx(TableCell, { children: _jsx(Badge, { variant: statusBadgeVariant[client.status], children: client.status }) }), _jsx(TableCell, { children: _jsx("span", { className: "font-mono text-[10px] text-neutral-400", children: client.type }) }), _jsx(TableCell, { children: _jsxs("span", { className: "font-mono text-[11px] text-white font-medium", children: ["#", client.cursor.toLocaleString()] }) }), _jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-2", children: [
40
+ ] }) }), _jsx(TableCell, { className: "w-[70px]", children: _jsx(Badge, { variant: statusBadgeVariant[client.status], children: client.status }) }), _jsx(TableCell, { className: "w-[60px]", children: _jsx("span", { className: "font-mono text-[10px] text-neutral-400", children: client.type }) }), _jsx(TableCell, { className: "w-[80px]", children: _jsxs("span", { className: "font-mono text-[11px] text-white font-medium", children: ["#", client.cursor.toLocaleString()] }) }), _jsx(TableCell, { className: "w-[110px]", children: _jsxs("div", { className: "flex items-center gap-2", children: [
39
41
  _jsx("div", { className: "w-[60px] h-[3px] rounded-full bg-surface overflow-hidden", children: _jsx("div", { className: "h-full rounded-full transition-all", style: { width: `${pct}%`, background: lagColor } }) }), _jsx("span", { className: "font-mono text-[10px] font-medium", style: { color: lagColor }, children: lag === 0 ? '0' : `${lag}` })
40
- ] }) }), _jsx(TableCell, { children: _jsx("span", { className: "font-mono text-[10px] text-neutral-400", children: client.dialect }) }), _jsx(TableCell, { children: _jsx(Badge, { variant: client.mode === 'realtime' ? 'flow' : 'ghost', children: client.mode }) }), onEvict && (_jsx(TableCell, { children: _jsx("button", { type: "button", onClick: () => onEvict(client.id), className: "inline-flex items-center gap-1 rounded-md font-mono text-[9px] px-2 py-1 border border-transparent text-neutral-600 hover:border-offline/50 hover:text-offline hover:bg-offline/[0.06] cursor-pointer transition-all opacity-0 group-hover:opacity-100", children: "evict" }) }))] }, client.id));
42
+ ] }) }), _jsx(TableCell, { className: "w-[60px]", children: _jsx("span", { className: "font-mono text-[10px] text-neutral-400", children: client.dialect }) }), _jsx(TableCell, { className: "flex-1", children: _jsx(Badge, { variant: client.mode === 'realtime' ? 'flow' : 'ghost', children: client.mode }) }), onEvict && (_jsxs("button", { type: "button", title: "Evict client", onClick: () => onEvict(client.id), className: "absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] text-neutral-600 hover:text-offline hover:bg-offline/10 cursor-pointer transition-colors opacity-0 group-hover:opacity-100", children: [
43
+ _jsx(UserX, { size: 10 }),
44
+ "evict"] }))] }, client.id));
41
45
  }) })
42
46
  ] }) }));
43
47
  });
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-table.js","sourceRoot":"","sources":["../../src/console/fleet-table.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-table.js","sourceRoot":"","sources":["../../src/console/fleet-table.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/primitives/badge.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,KAAK,wBAAwB,EAAc,MAAM,OAAO,CAAC;AAGlE,QAAA,MAAM,aAAa;;8EAqBlB,CAAC;AAEF,KAAK,UAAU,GAAG,wBAAwB,CAAC,MAAM,CAAC,GAChD,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAErC,QAAA,MAAM,KAAK;;iIAQV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/primitives/badge.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,KAAK,wBAAwB,EAAc,MAAM,OAAO,CAAC;AAGlE,QAAA,MAAM,aAAa;;8EAqBlB,CAAC;AAEF,KAAK,UAAU,GAAG,wBAAwB,CAAC,MAAM,CAAC,GAChD,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAErC,QAAA,MAAM,KAAK;;iIASV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { forwardRef } from 'react';
5
5
  import { cn } from '../lib/cn.js';
6
- const badgeVariants = cva('inline-flex items-center gap-1 px-2 py-0.5 rounded-sm font-mono text-[9px] uppercase tracking-wider', {
6
+ const badgeVariants = cva('inline-flex items-center gap-1 px-2 py-0.5 rounded-sm font-mono text-[9px] leading-normal uppercase tracking-wider', {
7
7
  variants: {
8
8
  variant: {
9
9
  default: 'bg-white/[0.05] text-neutral-300 border border-border-bright',
@@ -22,7 +22,7 @@ const badgeVariants = cva('inline-flex items-center gap-1 px-2 py-0.5 rounded-sm
22
22
  variant: 'default',
23
23
  },
24
24
  });
25
- const Badge = forwardRef(({ className, variant, ...props }, ref) => (_jsx("span", { ref: ref, className: cn(badgeVariants({ variant, className })), ...props })));
25
+ const Badge = forwardRef(({ className, variant, style, ...props }, ref) => (_jsx("span", { ref: ref, className: cn(badgeVariants({ variant, className })), style: { lineHeight: 1, ...style }, ...props })));
26
26
  Badge.displayName = 'Badge';
27
27
  export { Badge, badgeVariants };
28
28
  //# sourceMappingURL=badge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/primitives/badge.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAiC,UAAU,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,MAAM,aAAa,GAAG,GAAG,CACvB,qGAAqG,EACrG;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,8DAA8D;YACvE,WAAW,EAAE,qDAAqD;YAClE,KAAK,EAAE,6DAA6D;YACpE,OAAO,EAAE,6DAA6D;YACtE,SAAS,EAAE,gDAAgD;YAC3D,OAAO,EAAE,qDAAqD;YAC9D,OAAO,EAAE,qDAAqD;YAC9D,OAAO,EAAE,qDAAqD;YAC9D,IAAI,EAAE,4CAA4C;YAClD,KAAK,EAAE,+CAA+C;SACvD;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CACF,CAAC;AAKF,MAAM,KAAK,GAAG,UAAU,CACtB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACzC,eACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,KAChD,KAAK,GACT,CACH,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/primitives/badge.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAiC,UAAU,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,MAAM,aAAa,GAAG,GAAG,CACvB,oHAAoH,EACpH;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,8DAA8D;YACvE,WAAW,EAAE,qDAAqD;YAClE,KAAK,EAAE,6DAA6D;YACpE,OAAO,EAAE,6DAA6D;YACtE,SAAS,EAAE,gDAAgD;YAC3D,OAAO,EAAE,qDAAqD;YAC9D,OAAO,EAAE,qDAAqD;YAC9D,OAAO,EAAE,qDAAqD;YAC9D,IAAI,EAAE,4CAA4C;YAClD,KAAK,EAAE,+CAA+C;SACvD;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CACF,CAAC;AAKF,MAAM,KAAK,GAAG,UAAU,CACtB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAChD,eACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EACpD,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,KAC9B,KAAK,GACT,CACH,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -1,8 +1,8 @@
1
- declare const Table: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>, "ref"> & import("react").RefAttributes<HTMLTableElement>>;
2
- declare const TableHeader: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & import("react").RefAttributes<HTMLTableSectionElement>>;
3
- declare const TableBody: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & import("react").RefAttributes<HTMLTableSectionElement>>;
4
- declare const TableRow: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>, "ref"> & import("react").RefAttributes<HTMLTableRowElement>>;
5
- declare const TableHead: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>, "ref"> & import("react").RefAttributes<HTMLTableCellElement>>;
6
- declare const TableCell: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement>, "ref"> & import("react").RefAttributes<HTMLTableCellElement>>;
1
+ declare const Table: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
2
+ declare const TableHeader: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
3
+ declare const TableBody: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
4
+ declare const TableRow: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
5
+ declare const TableHead: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
6
+ declare const TableCell: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
7
7
  export { Table, TableHeader, TableBody, TableRow, TableHead, TableCell };
8
8
  //# sourceMappingURL=table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/primitives/table.tsx"],"names":[],"mappings":"AAKA,QAAA,MAAM,KAAK,sNAIV,CAAC;AAGF,QAAA,MAAM,WAAW,sOAKf,CAAC;AAGH,QAAA,MAAM,SAAS,sOAKb,CAAC;AAGH,QAAA,MAAM,QAAQ,0NAYZ,CAAC;AAGH,QAAA,MAAM,SAAS,2OAYb,CAAC;AAGH,QAAA,MAAM,SAAS,uOASb,CAAC;AAGH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/primitives/table.tsx"],"names":[],"mappings":"AAKA,QAAA,MAAM,KAAK,2MAUV,CAAC;AAGF,QAAA,MAAM,WAAW,2MAKhB,CAAC;AAGF,QAAA,MAAM,SAAS,2MAKd,CAAC;AAGF,QAAA,MAAM,QAAQ,2MAcb,CAAC;AAGF,QAAA,MAAM,SAAS,2MAcd,CAAC;AAGF,QAAA,MAAM,SAAS,2MAad,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC"}
@@ -2,17 +2,17 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { forwardRef } from 'react';
4
4
  import { cn } from '../lib/cn.js';
5
- const Table = forwardRef(({ className, ...props }, ref) => (_jsx("table", { ref: ref, className: cn('w-full', className), ...props })));
5
+ const Table = forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, role: "table", className: cn('w-full', className), ...props })));
6
6
  Table.displayName = 'Table';
7
- const TableHeader = forwardRef(({ className, ...props }, ref) => (_jsx("thead", { ref: ref, className: cn(className), ...props })));
7
+ const TableHeader = forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, role: "rowgroup", className: cn(className), ...props })));
8
8
  TableHeader.displayName = 'TableHeader';
9
- const TableBody = forwardRef(({ className, ...props }, ref) => (_jsx("tbody", { ref: ref, className: cn(className), ...props })));
9
+ const TableBody = forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, role: "rowgroup", className: cn(className), ...props })));
10
10
  TableBody.displayName = 'TableBody';
11
- const TableRow = forwardRef(({ className, ...props }, ref) => (_jsx("tr", { ref: ref, className: cn('font-mono text-[11px] leading-7 px-4 flex items-center gap-4 border-b border-[#141414] hover:bg-white/[0.015] transition-colors cursor-default', className), ...props })));
11
+ const TableRow = forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, role: "row", className: cn('font-mono text-[11px] leading-6 px-4 flex items-center gap-4 border-b border-[#141414] hover:bg-white/[0.015] transition-colors cursor-default', className), ...props })));
12
12
  TableRow.displayName = 'TableRow';
13
- const TableHead = forwardRef(({ className, ...props }, ref) => (_jsx("th", { ref: ref, className: cn('font-mono text-[9px] text-neutral-600 uppercase tracking-wider leading-6 bg-white/[0.01] text-left', className), ...props })));
13
+ const TableHead = forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, role: "columnheader", className: cn('min-w-0 font-mono text-[9px] text-neutral-600 uppercase tracking-wider leading-6 bg-white/[0.01] text-left truncate', className), ...props })));
14
14
  TableHead.displayName = 'TableHead';
15
- const TableCell = forwardRef(({ className, ...props }, ref) => (_jsx("td", { ref: ref, className: cn('whitespace-nowrap overflow-hidden text-ellipsis', className), ...props })));
15
+ const TableCell = forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, role: "cell", className: cn('min-w-0 whitespace-nowrap overflow-hidden text-ellipsis', className), ...props })));
16
16
  TableCell.displayName = 'TableCell';
17
17
  export { Table, TableHeader, TableBody, TableRow, TableHead, TableCell };
18
18
  //# sourceMappingURL=table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/primitives/table.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAiC,UAAU,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,MAAM,KAAK,GAAG,UAAU,CACtB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAChC,gBAAO,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CACnE,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,WAAW,GAAG,UAAU,CAG5B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,gBAAO,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,KAAK,GAAI,CACzD,CAAC,CAAC;AACH,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,SAAS,GAAG,UAAU,CAG1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,gBAAO,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,KAAK,GAAI,CACzD,CAAC,CAAC;AACH,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,MAAM,QAAQ,GAAG,UAAU,CAGzB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,aACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,gJAAgJ,EAChJ,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC,CAAC;AACH,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAElC,MAAM,SAAS,GAAG,UAAU,CAG1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,aACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oGAAoG,EACpG,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC,CAAC;AACH,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,MAAM,SAAS,GAAG,UAAU,CAG1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,aACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,iDAAiD,EAAE,SAAS,CAAC,KACvE,KAAK,GACT,CACH,CAAC,CAAC;AACH,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/primitives/table.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAiC,UAAU,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,MAAM,KAAK,GAAG,UAAU,CACtB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAEhC,cACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,KAC9B,KAAK,GACT,CACH,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,WAAW,GAAG,UAAU,CAC5B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAEhC,cAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAC,UAAU,EAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,KAAK,GAAI,CACvE,CACF,CAAC;AACF,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,SAAS,GAAG,UAAU,CAC1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAEhC,cAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAC,UAAU,EAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,KAAK,GAAI,CACvE,CACF,CAAC;AACF,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,MAAM,QAAQ,GAAG,UAAU,CACzB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAGhC,cACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,KAAK,EACV,SAAS,EAAE,EAAE,CACX,gJAAgJ,EAChJ,SAAS,CACV,KACG,KAAK,GACT,CACH,CACF,CAAC;AACF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAElC,MAAM,SAAS,GAAG,UAAU,CAC1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAGhC,cACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,cAAc,EACnB,SAAS,EAAE,EAAE,CACX,qHAAqH,EACrH,SAAS,CACV,KACG,KAAK,GACT,CACH,CACF,CAAC;AACF,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,MAAM,SAAS,GAAG,UAAU,CAC1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAEhC,cACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,EAAE,CACX,yDAAyD,EACzD,SAAS,CACV,KACG,KAAK,GACT,CACH,CACF,CAAC;AACF,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC"}
package/dist/styles.css CHANGED
@@ -52,6 +52,7 @@
52
52
  --tracking-wider: 0.05em;
53
53
  --tracking-widest: 0.1em;
54
54
  --leading-tight: 1.25;
55
+ --leading-normal: 1.5;
55
56
  --leading-relaxed: 1.625;
56
57
  --ease-out: cubic-bezier(0, 0, 0.2, 1);
57
58
  --animate-spin: spin 1s linear infinite;
@@ -270,6 +271,9 @@
270
271
  .right-0 {
271
272
  right: calc(var(--spacing) * 0);
272
273
  }
274
+ .right-2 {
275
+ right: calc(var(--spacing) * 2);
276
+ }
273
277
  .right-5 {
274
278
  right: calc(var(--spacing) * 5);
275
279
  }
@@ -572,17 +576,17 @@
572
576
  .w-\[80px\] {
573
577
  width: 80px;
574
578
  }
575
- .w-\[90px\] {
576
- width: 90px;
577
- }
578
579
  .w-\[100px\] {
579
580
  width: 100px;
580
581
  }
582
+ .w-\[110px\] {
583
+ width: 110px;
584
+ }
581
585
  .w-\[120px\] {
582
586
  width: 120px;
583
587
  }
584
- .w-\[140px\] {
585
- width: 140px;
588
+ .w-\[160px\] {
589
+ width: 160px;
586
590
  }
587
591
  .w-\[400px\] {
588
592
  width: 400px;
@@ -795,6 +799,9 @@
795
799
  margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
796
800
  }
797
801
  }
802
+ .self-start {
803
+ align-self: flex-start;
804
+ }
798
805
  .truncate {
799
806
  overflow: hidden;
800
807
  text-overflow: ellipsis;
@@ -1504,6 +1511,10 @@
1504
1511
  --tw-leading: 1;
1505
1512
  line-height: 1;
1506
1513
  }
1514
+ .leading-normal {
1515
+ --tw-leading: var(--leading-normal);
1516
+ line-height: var(--leading-normal);
1517
+ }
1507
1518
  .leading-relaxed {
1508
1519
  --tw-leading: var(--leading-relaxed);
1509
1520
  line-height: var(--leading-relaxed);
@@ -1746,6 +1757,11 @@
1746
1757
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1747
1758
  transition-duration: var(--tw-duration, var(--default-transition-duration));
1748
1759
  }
1760
+ .transition-opacity {
1761
+ transition-property: opacity;
1762
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1763
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1764
+ }
1749
1765
  .transition-transform {
1750
1766
  transition-property: transform, translate, scale, rotate;
1751
1767
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -1880,16 +1896,6 @@
1880
1896
  }
1881
1897
  }
1882
1898
  }
1883
- .hover\:border-offline\/50 {
1884
- &:hover {
1885
- @media (hover: hover) {
1886
- border-color: var(--syncular-color-offline);
1887
- @supports (color: color-mix(in lab, red, red)) {
1888
- border-color: color-mix(in oklab, var(--syncular-color-offline) 50%, transparent);
1889
- }
1890
- }
1891
- }
1892
- }
1893
1899
  .hover\:bg-blue-600 {
1894
1900
  &:hover {
1895
1901
  @media (hover: hover) {
@@ -1947,22 +1953,22 @@
1947
1953
  }
1948
1954
  }
1949
1955
  }
1950
- .hover\:bg-offline\/20 {
1956
+ .hover\:bg-offline\/10 {
1951
1957
  &:hover {
1952
1958
  @media (hover: hover) {
1953
1959
  background-color: var(--syncular-color-offline);
1954
1960
  @supports (color: color-mix(in lab, red, red)) {
1955
- background-color: color-mix(in oklab, var(--syncular-color-offline) 20%, transparent);
1961
+ background-color: color-mix(in oklab, var(--syncular-color-offline) 10%, transparent);
1956
1962
  }
1957
1963
  }
1958
1964
  }
1959
1965
  }
1960
- .hover\:bg-offline\/\[0\.06\] {
1966
+ .hover\:bg-offline\/20 {
1961
1967
  &:hover {
1962
1968
  @media (hover: hover) {
1963
1969
  background-color: var(--syncular-color-offline);
1964
1970
  @supports (color: color-mix(in lab, red, red)) {
1965
- background-color: color-mix(in oklab, var(--syncular-color-offline) 6%, transparent);
1971
+ background-color: color-mix(in oklab, var(--syncular-color-offline) 20%, transparent);
1966
1972
  }
1967
1973
  }
1968
1974
  }
@@ -2004,6 +2010,16 @@
2004
2010
  }
2005
2011
  }
2006
2012
  }
2013
+ .hover\:bg-white\/\[0\.05\] {
2014
+ &:hover {
2015
+ @media (hover: hover) {
2016
+ background-color: color-mix(in srgb, #fff 5%, transparent);
2017
+ @supports (color: color-mix(in lab, red, red)) {
2018
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
2019
+ }
2020
+ }
2021
+ }
2022
+ }
2007
2023
  .hover\:bg-white\/\[0\.015\] {
2008
2024
  &:hover {
2009
2025
  @media (hover: hover) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/ui",
3
- "version": "0.0.6-56",
3
+ "version": "0.0.6-66",
4
4
  "description": "Reusable Syncular UI components and styles",
5
5
  "license": "MIT",
6
6
  "author": "Benjamin Kniffler",
@@ -4,7 +4,14 @@ import { type ComponentPropsWithoutRef, forwardRef } from 'react';
4
4
  import { cn } from '../lib/cn';
5
5
  import type { ApiKeyEntry } from '../lib/types';
6
6
  import { Badge, type BadgeProps } from '../primitives/badge';
7
- import { Button } from '../primitives/button';
7
+ import {
8
+ Table,
9
+ TableBody,
10
+ TableCell,
11
+ TableHead,
12
+ TableHeader,
13
+ TableRow,
14
+ } from '../primitives/table';
8
15
 
9
16
  export type ApiKeysTableProps = ComponentPropsWithoutRef<'div'> & {
10
17
  keys: ApiKeyEntry[];
@@ -24,76 +31,62 @@ const ApiKeysTable = forwardRef<HTMLDivElement, ApiKeysTableProps>(
24
31
  { className, keys, onCreateKey, onRotateKey, onRevokeKey, ...props },
25
32
  ref
26
33
  ) => (
27
- <div
28
- ref={ref}
29
- className={cn(
30
- 'bg-panel border border-border rounded-lg hover:border-border-bright transition',
31
- className
32
- )}
33
- {...props}
34
- >
35
- {/* Header */}
36
- <div className="px-4 py-2.5 border-b border-border flex items-center justify-between">
37
- <span className="font-mono text-[10px] text-neutral-500 uppercase tracking-widest">
38
- API Keys
39
- </span>
40
- {onCreateKey && (
41
- <Button variant="primary" size="sm" onClick={onCreateKey}>
42
- + Create Key
43
- </Button>
44
- )}
45
- </div>
46
-
47
- {/* Column headers */}
48
- <div className="font-mono text-[9px] tracking-wider uppercase text-neutral-600 flex items-center gap-4 px-4 leading-6 border-b border-border">
49
- <span className="w-[140px]">Name</span>
50
- <span className="w-[70px]">Type</span>
51
- <span className="flex-1">Prefix</span>
52
- <span className="w-[90px]">Created</span>
53
- <span className="w-[80px] text-right">Actions</span>
54
- </div>
55
-
56
- {/* Rows */}
57
- {keys.map((k, i) => (
58
- <div
59
- key={`${k.name}:${k.prefix}:${i}`}
60
- className={cn(
61
- 'font-mono text-[11px] leading-7 px-4 flex items-center gap-4 hover:bg-white/[0.015] transition-colors cursor-default',
62
- i < keys.length - 1 && 'border-b border-[#141414]'
63
- )}
64
- >
65
- <span className="w-[140px] text-white truncate">{k.name}</span>
66
- <span className="w-[70px]">
67
- <Badge variant={typeBadgeMap[k.type] ?? 'ghost'}>{k.type}</Badge>
68
- </span>
69
- <span className="flex-1 text-neutral-500 truncate">{k.prefix}</span>
70
- <span className="w-[90px] text-neutral-600 truncate">
71
- {k.created}
72
- </span>
73
- <span className="w-[80px] flex gap-2 justify-end">
74
- {onRotateKey && (
75
- <Button
76
- variant="default"
77
- size="sm"
78
- className="text-[9px] px-1.5 py-0.5"
79
- onClick={() => onRotateKey(k.name)}
80
- >
81
- Rotate
82
- </Button>
83
- )}
84
- {onRevokeKey && (
85
- <Button
86
- variant="destructive"
87
- size="sm"
88
- className="text-[9px] px-1.5 py-0.5"
89
- onClick={() => onRevokeKey(k.name)}
90
- >
91
- Revoke
92
- </Button>
93
- )}
94
- </span>
95
- </div>
96
- ))}
34
+ <div ref={ref} className={cn('w-full', className)} {...props}>
35
+ <Table>
36
+ <TableHeader>
37
+ <TableRow>
38
+ <TableHead>Name</TableHead>
39
+ <TableHead>Type</TableHead>
40
+ <TableHead>Prefix</TableHead>
41
+ <TableHead>Created</TableHead>
42
+ </TableRow>
43
+ </TableHeader>
44
+ <TableBody>
45
+ {keys.map((k, i) => (
46
+ <TableRow
47
+ key={`${k.name}:${k.prefix}:${i}`}
48
+ className="group relative"
49
+ >
50
+ <TableCell>
51
+ <span className="text-white truncate">{k.name}</span>
52
+ </TableCell>
53
+ <TableCell>
54
+ <Badge variant={typeBadgeMap[k.type] ?? 'ghost'}>
55
+ {k.type}
56
+ </Badge>
57
+ </TableCell>
58
+ <TableCell>
59
+ <span className="text-neutral-500 truncate">{k.prefix}</span>
60
+ </TableCell>
61
+ <TableCell>
62
+ <span className="text-neutral-600 truncate">{k.created}</span>
63
+ </TableCell>
64
+ {(onRotateKey || onRevokeKey) && (
65
+ <div className="absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity">
66
+ {onRotateKey && (
67
+ <button
68
+ type="button"
69
+ onClick={() => onRotateKey(k.name)}
70
+ className="flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] text-neutral-600 hover:text-white hover:bg-white/[0.05] cursor-pointer transition-colors"
71
+ >
72
+ rotate
73
+ </button>
74
+ )}
75
+ {onRevokeKey && (
76
+ <button
77
+ type="button"
78
+ onClick={() => onRevokeKey(k.name)}
79
+ className="flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] text-neutral-600 hover:text-offline hover:bg-offline/10 cursor-pointer transition-colors"
80
+ >
81
+ revoke
82
+ </button>
83
+ )}
84
+ </div>
85
+ )}
86
+ </TableRow>
87
+ ))}
88
+ </TableBody>
89
+ </Table>
97
90
  </div>
98
91
  )
99
92
  );
@@ -34,7 +34,11 @@ export function DangerActionCard({
34
34
  ) : null}
35
35
  {stats ? <div>{stats}</div> : null}
36
36
  {onAction ? (
37
- <Button variant="destructive" onClick={onAction}>
37
+ <Button
38
+ variant="destructive"
39
+ className="self-start"
40
+ onClick={onAction}
41
+ >
38
42
  {actionLabel}
39
43
  </Button>
40
44
  ) : null}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { UserX } from 'lucide-react';
3
4
  import { type ComponentPropsWithoutRef, forwardRef } from 'react';
4
5
  import { cn } from '../lib/cn';
5
6
  import type { SyncClientNode } from '../lib/types';
@@ -39,14 +40,13 @@ const FleetTable = forwardRef<HTMLDivElement, FleetTableProps>(
39
40
  <Table>
40
41
  <TableHeader>
41
42
  <TableRow>
42
- <TableHead>Client</TableHead>
43
- <TableHead>Status</TableHead>
44
- <TableHead>Type</TableHead>
45
- <TableHead>Cursor</TableHead>
46
- <TableHead>Lag</TableHead>
47
- <TableHead>Dialect</TableHead>
48
- <TableHead>Mode</TableHead>
49
- {onEvict && <TableHead>Actions</TableHead>}
43
+ <TableHead className="w-[160px]">Client</TableHead>
44
+ <TableHead className="w-[70px]">Status</TableHead>
45
+ <TableHead className="w-[60px]">Type</TableHead>
46
+ <TableHead className="w-[80px]">Cursor</TableHead>
47
+ <TableHead className="w-[110px]">Lag</TableHead>
48
+ <TableHead className="w-[60px]">Dialect</TableHead>
49
+ <TableHead className="flex-1">Mode</TableHead>
50
50
  </TableRow>
51
51
  </TableHeader>
52
52
  <TableBody>
@@ -59,8 +59,8 @@ const FleetTable = forwardRef<HTMLDivElement, FleetTableProps>(
59
59
  const lagColor = getLagColor(lag);
60
60
 
61
61
  return (
62
- <TableRow key={client.id}>
63
- <TableCell>
62
+ <TableRow key={client.id} className="group relative">
63
+ <TableCell className="w-[160px]">
64
64
  <div className="flex items-center gap-2">
65
65
  <span
66
66
  className="w-1.5 h-1.5 rounded-full flex-shrink-0"
@@ -79,22 +79,22 @@ const FleetTable = forwardRef<HTMLDivElement, FleetTableProps>(
79
79
  </span>
80
80
  </div>
81
81
  </TableCell>
82
- <TableCell>
82
+ <TableCell className="w-[70px]">
83
83
  <Badge variant={statusBadgeVariant[client.status]}>
84
84
  {client.status}
85
85
  </Badge>
86
86
  </TableCell>
87
- <TableCell>
87
+ <TableCell className="w-[60px]">
88
88
  <span className="font-mono text-[10px] text-neutral-400">
89
89
  {client.type}
90
90
  </span>
91
91
  </TableCell>
92
- <TableCell>
92
+ <TableCell className="w-[80px]">
93
93
  <span className="font-mono text-[11px] text-white font-medium">
94
94
  #{client.cursor.toLocaleString()}
95
95
  </span>
96
96
  </TableCell>
97
- <TableCell>
97
+ <TableCell className="w-[110px]">
98
98
  <div className="flex items-center gap-2">
99
99
  <div className="w-[60px] h-[3px] rounded-full bg-surface overflow-hidden">
100
100
  <div
@@ -110,12 +110,12 @@ const FleetTable = forwardRef<HTMLDivElement, FleetTableProps>(
110
110
  </span>
111
111
  </div>
112
112
  </TableCell>
113
- <TableCell>
113
+ <TableCell className="w-[60px]">
114
114
  <span className="font-mono text-[10px] text-neutral-400">
115
115
  {client.dialect}
116
116
  </span>
117
117
  </TableCell>
118
- <TableCell>
118
+ <TableCell className="flex-1">
119
119
  <Badge
120
120
  variant={client.mode === 'realtime' ? 'flow' : 'ghost'}
121
121
  >
@@ -123,15 +123,15 @@ const FleetTable = forwardRef<HTMLDivElement, FleetTableProps>(
123
123
  </Badge>
124
124
  </TableCell>
125
125
  {onEvict && (
126
- <TableCell>
127
- <button
128
- type="button"
129
- onClick={() => onEvict(client.id)}
130
- className="inline-flex items-center gap-1 rounded-md font-mono text-[9px] px-2 py-1 border border-transparent text-neutral-600 hover:border-offline/50 hover:text-offline hover:bg-offline/[0.06] cursor-pointer transition-all opacity-0 group-hover:opacity-100"
131
- >
132
- evict
133
- </button>
134
- </TableCell>
126
+ <button
127
+ type="button"
128
+ title="Evict client"
129
+ onClick={() => onEvict(client.id)}
130
+ className="absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] text-neutral-600 hover:text-offline hover:bg-offline/10 cursor-pointer transition-colors opacity-0 group-hover:opacity-100"
131
+ >
132
+ <UserX size={10} />
133
+ evict
134
+ </button>
135
135
  )}
136
136
  </TableRow>
137
137
  );
@@ -5,7 +5,7 @@ import { type ComponentPropsWithoutRef, forwardRef } from 'react';
5
5
  import { cn } from '../lib/cn';
6
6
 
7
7
  const badgeVariants = cva(
8
- 'inline-flex items-center gap-1 px-2 py-0.5 rounded-sm font-mono text-[9px] uppercase tracking-wider',
8
+ 'inline-flex items-center gap-1 px-2 py-0.5 rounded-sm font-mono text-[9px] leading-normal uppercase tracking-wider',
9
9
  {
10
10
  variants: {
11
11
  variant: {
@@ -31,10 +31,11 @@ type BadgeProps = ComponentPropsWithoutRef<'span'> &
31
31
  VariantProps<typeof badgeVariants>;
32
32
 
33
33
  const Badge = forwardRef<HTMLSpanElement, BadgeProps>(
34
- ({ className, variant, ...props }, ref) => (
34
+ ({ className, variant, style, ...props }, ref) => (
35
35
  <span
36
36
  ref={ref}
37
37
  className={cn(badgeVariants({ variant, className }))}
38
+ style={{ lineHeight: 1, ...style }}
38
39
  {...props}
39
40
  />
40
41
  )
@@ -3,69 +3,83 @@
3
3
  import { type ComponentPropsWithoutRef, forwardRef } from 'react';
4
4
  import { cn } from '../lib/cn';
5
5
 
6
- const Table = forwardRef<HTMLTableElement, ComponentPropsWithoutRef<'table'>>(
6
+ const Table = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(
7
7
  ({ className, ...props }, ref) => (
8
- <table ref={ref} className={cn('w-full', className)} {...props} />
8
+ // biome-ignore lint/a11y/useSemanticElements: using div for flex layout compatibility
9
+ <div
10
+ ref={ref}
11
+ role="table"
12
+ className={cn('w-full', className)}
13
+ {...props}
14
+ />
9
15
  )
10
16
  );
11
17
  Table.displayName = 'Table';
12
18
 
13
- const TableHeader = forwardRef<
14
- HTMLTableSectionElement,
15
- ComponentPropsWithoutRef<'thead'>
16
- >(({ className, ...props }, ref) => (
17
- <thead ref={ref} className={cn(className)} {...props} />
18
- ));
19
+ const TableHeader = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(
20
+ ({ className, ...props }, ref) => (
21
+ // biome-ignore lint/a11y/useSemanticElements: using div for flex layout compatibility
22
+ <div ref={ref} role="rowgroup" className={cn(className)} {...props} />
23
+ )
24
+ );
19
25
  TableHeader.displayName = 'TableHeader';
20
26
 
21
- const TableBody = forwardRef<
22
- HTMLTableSectionElement,
23
- ComponentPropsWithoutRef<'tbody'>
24
- >(({ className, ...props }, ref) => (
25
- <tbody ref={ref} className={cn(className)} {...props} />
26
- ));
27
+ const TableBody = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(
28
+ ({ className, ...props }, ref) => (
29
+ // biome-ignore lint/a11y/useSemanticElements: using div for flex layout compatibility
30
+ <div ref={ref} role="rowgroup" className={cn(className)} {...props} />
31
+ )
32
+ );
27
33
  TableBody.displayName = 'TableBody';
28
34
 
29
- const TableRow = forwardRef<
30
- HTMLTableRowElement,
31
- ComponentPropsWithoutRef<'tr'>
32
- >(({ className, ...props }, ref) => (
33
- <tr
34
- ref={ref}
35
- className={cn(
36
- 'font-mono text-[11px] leading-7 px-4 flex items-center gap-4 border-b border-[#141414] hover:bg-white/[0.015] transition-colors cursor-default',
37
- className
38
- )}
39
- {...props}
40
- />
41
- ));
35
+ const TableRow = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(
36
+ ({ className, ...props }, ref) => (
37
+ // biome-ignore lint/a11y/useSemanticElements: using div for flex layout compatibility
38
+ // biome-ignore lint/a11y/useFocusableInteractive: presentational table row, not interactive
39
+ <div
40
+ ref={ref}
41
+ role="row"
42
+ className={cn(
43
+ 'font-mono text-[11px] leading-6 px-4 flex items-center gap-4 border-b border-[#141414] hover:bg-white/[0.015] transition-colors cursor-default',
44
+ className
45
+ )}
46
+ {...props}
47
+ />
48
+ )
49
+ );
42
50
  TableRow.displayName = 'TableRow';
43
51
 
44
- const TableHead = forwardRef<
45
- HTMLTableCellElement,
46
- ComponentPropsWithoutRef<'th'>
47
- >(({ className, ...props }, ref) => (
48
- <th
49
- ref={ref}
50
- className={cn(
51
- 'font-mono text-[9px] text-neutral-600 uppercase tracking-wider leading-6 bg-white/[0.01] text-left',
52
- className
53
- )}
54
- {...props}
55
- />
56
- ));
52
+ const TableHead = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(
53
+ ({ className, ...props }, ref) => (
54
+ // biome-ignore lint/a11y/useSemanticElements: using div for flex layout compatibility
55
+ // biome-ignore lint/a11y/useFocusableInteractive: presentational column header, not interactive
56
+ <div
57
+ ref={ref}
58
+ role="columnheader"
59
+ className={cn(
60
+ 'min-w-0 font-mono text-[9px] text-neutral-600 uppercase tracking-wider leading-6 bg-white/[0.01] text-left truncate',
61
+ className
62
+ )}
63
+ {...props}
64
+ />
65
+ )
66
+ );
57
67
  TableHead.displayName = 'TableHead';
58
68
 
59
- const TableCell = forwardRef<
60
- HTMLTableCellElement,
61
- ComponentPropsWithoutRef<'td'>
62
- >(({ className, ...props }, ref) => (
63
- <td
64
- ref={ref}
65
- className={cn('whitespace-nowrap overflow-hidden text-ellipsis', className)}
66
- {...props}
67
- />
68
- ));
69
+ const TableCell = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(
70
+ ({ className, ...props }, ref) => (
71
+ // biome-ignore lint/a11y/useSemanticElements: using div for flex layout compatibility
72
+ <div
73
+ ref={ref}
74
+ role="cell"
75
+ className={cn(
76
+ 'min-w-0 whitespace-nowrap overflow-hidden text-ellipsis',
77
+ className
78
+ )}
79
+ {...props}
80
+ />
81
+ )
82
+ );
69
83
  TableCell.displayName = 'TableCell';
70
84
 
71
85
  export { Table, TableHeader, TableBody, TableRow, TableHead, TableCell };