@epilot/zenith-react 0.2.0-next.1 → 0.2.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data-table/data-table-header.js +113 -99
- package/dist/components/data-table/data-table-header.js.map +1 -1
- package/dist/components/data-table/data-table-row.js +49 -40
- package/dist/components/data-table/data-table-row.js.map +1 -1
- package/dist/components/drawer/drawer.js +5 -5
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/tokens.json +1 -1
- package/package.json +5 -4
|
@@ -1,33 +1,49 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import * as
|
|
3
|
-
import { useCallback as
|
|
4
|
-
import { flexRender as
|
|
5
|
-
import { useSensors as
|
|
6
|
-
import { arrayMove as
|
|
7
|
-
import { SLOT_ATTR as
|
|
8
|
-
import { makeZenithStyles as
|
|
9
|
-
import {
|
|
10
|
-
import { TableHeader as
|
|
11
|
-
import { DataTableHeaderDraggable as
|
|
12
|
-
import { getPinnedColumnOffset as
|
|
13
|
-
import { useDataTable as
|
|
14
|
-
import { useDataTableVirtualizer as
|
|
1
|
+
import { jsx as a, jsxs as F } from "react/jsx-runtime";
|
|
2
|
+
import * as j from "react";
|
|
3
|
+
import { useCallback as K, useMemo as M } from "react";
|
|
4
|
+
import { flexRender as U } from "../../vendor/.bun/@tanstack_react-table@8.21.3_6f4b9a1cfb20c0ae/vendor/@tanstack/react-table/build/lib/index.js";
|
|
5
|
+
import { useSensors as V, useSensor as H, DndContext as Z, closestCenter as q, KeyboardSensor as G, PointerSensor as J } from "../../vendor/.bun/@dnd-kit_core@6.3.1_6f4b9a1cfb20c0ae/vendor/@dnd-kit/core/dist/core.esm.js";
|
|
6
|
+
import { arrayMove as Q, SortableContext as X, horizontalListSortingStrategy as Y, sortableKeyboardCoordinates as ee } from "../../vendor/.bun/@dnd-kit_sortable@10.0.0_1d291640e1250bbe/vendor/@dnd-kit/sortable/dist/sortable.esm.js";
|
|
7
|
+
import { SLOT_ATTR as oe, shorthands as h, mergeClasses as te } from "@epilot/zenith-runtime/v1";
|
|
8
|
+
import { makeZenithStyles as ne } from "../../styles/make-styles.js";
|
|
9
|
+
import { gray2 as re, fontWeightSemibold as ie, grayA6 as O, spacingElement1 as z } from "../../tokens/index.js";
|
|
10
|
+
import { TableHeader as ae, TableRow as se, TableHead as L } from "../table/table.js";
|
|
11
|
+
import { DataTableHeaderDraggable as de } from "./data-table-header-draggable.js";
|
|
12
|
+
import { getPinnedColumnOffset as le, isLastLeftPinnedColumn as ce, isFirstRightPinnedColumn as me } from "./data-table-pinning-utils.js";
|
|
13
|
+
import { useDataTable as ue } from "./hooks/use-data-table.js";
|
|
14
|
+
import { useDataTableVirtualizer as ge } from "./hooks/use-data-table-virtualizer.js";
|
|
15
15
|
import { useDataTableContent as fe } from "./hooks/use-data-table-content.js";
|
|
16
|
-
const
|
|
16
|
+
const pe = ({ transform: d }) => ({
|
|
17
17
|
...d,
|
|
18
18
|
y: 0
|
|
19
|
-
}),
|
|
20
|
-
function
|
|
19
|
+
}), be = 150;
|
|
20
|
+
function he(d) {
|
|
21
21
|
if (d.id === "select") return !1;
|
|
22
22
|
const l = d.columnDef.meta;
|
|
23
23
|
return (l == null ? void 0 : l.enableOrdering) !== !1;
|
|
24
24
|
}
|
|
25
|
-
const
|
|
25
|
+
const Ce = ne({
|
|
26
|
+
// Painted on the cells, as DataTableRow's rule is: WebKit draws no
|
|
27
|
+
// box-shadow on a <tr>.
|
|
28
|
+
headerRowBorder: {
|
|
29
|
+
"& > th": {
|
|
30
|
+
backgroundImage: `linear-gradient(${O}, ${O})`,
|
|
31
|
+
backgroundSize: "100% 1px",
|
|
32
|
+
backgroundPosition: "bottom",
|
|
33
|
+
backgroundRepeat: "no-repeat"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
26
36
|
headerTitle: {
|
|
27
37
|
display: "block",
|
|
28
|
-
...
|
|
38
|
+
...h.overflow("hidden"),
|
|
29
39
|
whiteSpace: "nowrap",
|
|
30
|
-
fontWeight: ie
|
|
40
|
+
fontWeight: ie,
|
|
41
|
+
// The clip truncates long titles, but a control in the header (the
|
|
42
|
+
// select-all checkbox) needs its focus ring drawn outside its box: give
|
|
43
|
+
// the clip room for it, and take that room back so layout is unchanged.
|
|
44
|
+
boxSizing: "border-box",
|
|
45
|
+
...h.padding(z),
|
|
46
|
+
...h.margin(`calc(${z} * -1)`)
|
|
31
47
|
},
|
|
32
48
|
shadowLeft: {
|
|
33
49
|
boxShadow: "2px 0 5px -2px rgba(0,0,0,0.1)"
|
|
@@ -35,112 +51,110 @@ const he = te({
|
|
|
35
51
|
shadowRight: {
|
|
36
52
|
boxShadow: "-2px 0 5px -2px rgba(0,0,0,0.1)"
|
|
37
53
|
}
|
|
38
|
-
}), We =
|
|
39
|
-
const
|
|
40
|
-
table:
|
|
41
|
-
disableColumnResizing:
|
|
42
|
-
showHeaderBorder:
|
|
43
|
-
fitHeaderWidth:
|
|
54
|
+
}), We = j.forwardRef(function({ className: l, sticky: I, stickyBackground: C = re }, k) {
|
|
55
|
+
const u = Ce(), {
|
|
56
|
+
table: o,
|
|
57
|
+
disableColumnResizing: P,
|
|
58
|
+
showHeaderBorder: W,
|
|
59
|
+
fitHeaderWidth: A,
|
|
44
60
|
enableColumnOrdering: c
|
|
45
|
-
} =
|
|
46
|
-
|
|
61
|
+
} = ue(), S = !P, N = ge(), b = fe(), x = (b == null ? void 0 : b.spacerWidth) ?? 0, r = I ?? !!N, $ = V(
|
|
62
|
+
H(J, {
|
|
47
63
|
activationConstraint: { distance: 5 }
|
|
48
64
|
}),
|
|
49
|
-
|
|
50
|
-
coordinateGetter:
|
|
65
|
+
H(G, {
|
|
66
|
+
coordinateGetter: ee
|
|
51
67
|
})
|
|
52
|
-
),
|
|
68
|
+
), E = K(
|
|
53
69
|
(n) => {
|
|
54
|
-
const { active: e, over:
|
|
55
|
-
if (!
|
|
56
|
-
const
|
|
57
|
-
if (
|
|
58
|
-
const m =
|
|
59
|
-
|
|
70
|
+
const { active: e, over: t } = n;
|
|
71
|
+
if (!t || e.id === t.id) return;
|
|
72
|
+
const s = o.getState().columnOrder && o.getState().columnOrder.length > 0 ? o.getState().columnOrder : o.getAllLeafColumns().map((p) => p.id), g = s.indexOf(e.id), f = s.indexOf(t.id);
|
|
73
|
+
if (g === -1 || f === -1) return;
|
|
74
|
+
const m = Q(s, g, f);
|
|
75
|
+
o.setColumnOrder(m);
|
|
60
76
|
},
|
|
61
|
-
[
|
|
62
|
-
),
|
|
63
|
-
const
|
|
64
|
-
width:
|
|
65
|
-
minWidth:
|
|
66
|
-
backgroundColor:
|
|
67
|
-
position:
|
|
68
|
-
top:
|
|
69
|
-
left:
|
|
70
|
-
right:
|
|
71
|
-
zIndex:
|
|
77
|
+
[o]
|
|
78
|
+
), v = (n) => n.map((e) => {
|
|
79
|
+
const t = e.column.getIsPinned(), s = t ? le(e.column, o) : void 0, g = ce(e.column, o), f = me(e.column, o), m = e.column.columnDef.meta, p = m == null ? void 0 : m.align, D = {
|
|
80
|
+
width: S || e.getSize() !== be ? e.getSize() : void 0,
|
|
81
|
+
minWidth: A ? "max-content" : void 0,
|
|
82
|
+
backgroundColor: r || t ? C : void 0,
|
|
83
|
+
position: r || t ? "sticky" : S ? "relative" : void 0,
|
|
84
|
+
top: r ? 0 : void 0,
|
|
85
|
+
left: t === "left" ? `${s}px` : void 0,
|
|
86
|
+
right: t === "right" ? `${s}px` : void 0,
|
|
87
|
+
zIndex: t ? 30 : r ? 10 : void 0,
|
|
72
88
|
// Reduce padding for sortable headers
|
|
73
89
|
...(() => {
|
|
74
|
-
const
|
|
75
|
-
return (
|
|
90
|
+
const i = e.column.columnDef.meta;
|
|
91
|
+
return (i == null ? void 0 : i._sortableHeaderWrapped) || e.column.getCanSort() && typeof e.column.columnDef.header == "function" ? (i == null ? void 0 : i.align) === "right" ? { paddingRight: 8 } : { paddingLeft: 8 } : {};
|
|
76
92
|
})()
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
f &&
|
|
80
|
-
),
|
|
93
|
+
}, R = te(
|
|
94
|
+
g && u.shadowLeft,
|
|
95
|
+
f && u.shadowRight
|
|
96
|
+
), w = e.column.getIsSorted() === "asc" ? "ascending" : e.column.getIsSorted() === "desc" ? "descending" : e.column.getCanSort() ? "none" : void 0, T = /* @__PURE__ */ a("span", { className: u.headerTitle, children: e.isPlaceholder ? null : U(e.column.columnDef.header, e.getContext()) });
|
|
81
97
|
if (c) {
|
|
82
|
-
const
|
|
83
|
-
return /* @__PURE__ */
|
|
84
|
-
|
|
98
|
+
const i = he(e.column) && !t;
|
|
99
|
+
return /* @__PURE__ */ a(
|
|
100
|
+
de,
|
|
85
101
|
{
|
|
86
102
|
headerId: e.column.id,
|
|
87
|
-
disabled: !
|
|
88
|
-
align:
|
|
89
|
-
"aria-sort":
|
|
90
|
-
style:
|
|
91
|
-
className:
|
|
92
|
-
children:
|
|
103
|
+
disabled: !i,
|
|
104
|
+
align: p,
|
|
105
|
+
"aria-sort": w,
|
|
106
|
+
style: D,
|
|
107
|
+
className: R,
|
|
108
|
+
children: T
|
|
93
109
|
},
|
|
94
110
|
e.id
|
|
95
111
|
);
|
|
96
112
|
}
|
|
97
|
-
return /* @__PURE__ */
|
|
98
|
-
|
|
113
|
+
return /* @__PURE__ */ a(
|
|
114
|
+
L,
|
|
99
115
|
{
|
|
100
|
-
align:
|
|
101
|
-
"aria-sort":
|
|
102
|
-
style:
|
|
103
|
-
className:
|
|
104
|
-
children:
|
|
116
|
+
align: p,
|
|
117
|
+
"aria-sort": w,
|
|
118
|
+
style: D,
|
|
119
|
+
className: R,
|
|
120
|
+
children: T
|
|
105
121
|
},
|
|
106
122
|
e.id
|
|
107
123
|
);
|
|
108
|
-
}),
|
|
109
|
-
|
|
124
|
+
}), _ = o.getAllLeafColumns().map((n) => n.id), y = /* @__PURE__ */ a(
|
|
125
|
+
ae,
|
|
110
126
|
{
|
|
111
|
-
ref:
|
|
127
|
+
ref: k,
|
|
112
128
|
"data-slot": "data-table-header",
|
|
113
|
-
[
|
|
129
|
+
[oe]: "data-table-header",
|
|
114
130
|
"data-fs-element": "DataTable-Header",
|
|
115
131
|
className: l,
|
|
116
|
-
children:
|
|
132
|
+
children: o.getHeaderGroups().map((n) => /* @__PURE__ */ F(
|
|
117
133
|
se,
|
|
118
134
|
{
|
|
119
135
|
noHover: !0,
|
|
120
|
-
|
|
121
|
-
boxShadow: I !== !1 ? `inset 0 -1px 0 0 ${oe}` : "none"
|
|
122
|
-
},
|
|
136
|
+
className: W !== !1 ? u.headerRowBorder : void 0,
|
|
123
137
|
children: [
|
|
124
|
-
c ? /* @__PURE__ */
|
|
125
|
-
|
|
138
|
+
c ? /* @__PURE__ */ a(
|
|
139
|
+
X,
|
|
126
140
|
{
|
|
127
|
-
items:
|
|
128
|
-
strategy:
|
|
129
|
-
children:
|
|
141
|
+
items: _,
|
|
142
|
+
strategy: Y,
|
|
143
|
+
children: v(n.headers)
|
|
130
144
|
}
|
|
131
|
-
) :
|
|
132
|
-
|
|
133
|
-
|
|
145
|
+
) : v(n.headers),
|
|
146
|
+
x > 0 && /* @__PURE__ */ a(
|
|
147
|
+
L,
|
|
134
148
|
{
|
|
135
149
|
"data-spacer": !0,
|
|
136
150
|
"aria-hidden": "true",
|
|
137
151
|
style: {
|
|
138
|
-
width:
|
|
152
|
+
width: x,
|
|
139
153
|
padding: 0,
|
|
140
|
-
backgroundColor:
|
|
141
|
-
position:
|
|
142
|
-
top:
|
|
143
|
-
zIndex:
|
|
154
|
+
backgroundColor: r ? C : void 0,
|
|
155
|
+
position: r ? "sticky" : void 0,
|
|
156
|
+
top: r ? 0 : void 0,
|
|
157
|
+
zIndex: r ? 5 : void 0
|
|
144
158
|
}
|
|
145
159
|
}
|
|
146
160
|
)
|
|
@@ -149,18 +163,18 @@ const he = te({
|
|
|
149
163
|
n.id
|
|
150
164
|
))
|
|
151
165
|
}
|
|
152
|
-
),
|
|
166
|
+
), B = M(
|
|
153
167
|
() => c && typeof document < "u" ? document.body : void 0,
|
|
154
168
|
[c]
|
|
155
169
|
);
|
|
156
|
-
return c ? /* @__PURE__ */
|
|
157
|
-
|
|
170
|
+
return c ? /* @__PURE__ */ a(
|
|
171
|
+
Z,
|
|
158
172
|
{
|
|
159
|
-
sensors:
|
|
160
|
-
collisionDetection:
|
|
161
|
-
onDragEnd:
|
|
162
|
-
modifiers: [
|
|
163
|
-
accessibility: { container:
|
|
173
|
+
sensors: $,
|
|
174
|
+
collisionDetection: q,
|
|
175
|
+
onDragEnd: E,
|
|
176
|
+
modifiers: [pe],
|
|
177
|
+
accessibility: { container: B },
|
|
164
178
|
children: y
|
|
165
179
|
}
|
|
166
180
|
) : y;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-header.js","sources":["../../../src/components/data-table/data-table-header.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useCallback, useMemo } from \"react\"\nimport { flexRender, type Header } from \"@tanstack/react-table\"\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type Modifier,\n} from \"@dnd-kit/core\"\nimport {\n SortableContext,\n horizontalListSortingStrategy,\n arrayMove,\n sortableKeyboardCoordinates,\n} from \"@dnd-kit/sortable\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\nimport { TableHeader, TableRow, TableHead } from \"../table/table\"\nimport {\n useDataTable,\n useDataTableContent,\n useDataTableVirtualizer,\n} from \"./hooks\"\nimport { DataTableHeaderDraggable } from \"./data-table-header-draggable\"\nimport {\n getPinnedColumnOffset,\n isLastLeftPinnedColumn,\n isFirstRightPinnedColumn,\n} from \"./data-table-pinning-utils\"\n\n// Restrict drag movement to horizontal axis only\nconst restrictToHorizontalAxis: Modifier = ({ transform }) => ({\n ...transform,\n y: 0,\n})\n\n// TanStack Table's default column width\nconst DEFAULT_COLUMN_WIDTH = 150\n\n/** Check if a column can be reordered */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isColumnReorderable(column: Header<any, unknown>[\"column\"]): boolean {\n if (column.id === \"select\") return false\n const meta = column.columnDef.meta as { enableOrdering?: boolean } | undefined\n if (meta?.enableOrdering === false) return false\n return true\n}\n\nconst useStyles = makeZenithStyles({\n headerTitle: {\n display: \"block\",\n ...shorthands.overflow(\"hidden\"),\n whiteSpace: \"nowrap\",\n fontWeight: tokens.fontWeightSemibold,\n },\n shadowLeft: {\n boxShadow: \"2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n shadowRight: {\n boxShadow: \"-2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n})\n\nexport type DataTableHeaderProps = {\n /** Additional class name */\n className?: string\n /** Whether to make header sticky */\n sticky?: boolean\n /** Background color for sticky header. Default: tokens.gray2 */\n stickyBackground?: string\n}\n\n/**\n * Renders the table header with column headers.\n * Must be used within a DataTable component.\n */\nexport const DataTableHeader = React.forwardRef<\n HTMLTableSectionElement,\n DataTableHeaderProps\n>(function DataTableHeader(\n { className, sticky, stickyBackground = tokens.gray2 },\n ref\n) {\n const styles = useStyles()\n const {\n table,\n disableColumnResizing,\n showHeaderBorder,\n fitHeaderWidth,\n enableColumnOrdering,\n } = useDataTable()\n const enableColumnResizing = !disableColumnResizing\n const virtualizerContext = useDataTableVirtualizer()\n const contentContext = useDataTableContent()\n const spacerWidth = contentContext?.spacerWidth ?? 0\n\n // Auto-enable sticky when virtualization is active\n const isSticky = sticky ?? Boolean(virtualizerContext)\n\n // DnD sensors for column reordering\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 5 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const currentOrder =\n table.getState().columnOrder && table.getState().columnOrder.length > 0\n ? table.getState().columnOrder\n : table.getAllLeafColumns().map((c) => c.id)\n\n const oldIndex = currentOrder.indexOf(active.id as string)\n const newIndex = currentOrder.indexOf(over.id as string)\n\n if (oldIndex === -1 || newIndex === -1) return\n\n const newOrder = arrayMove(currentOrder, oldIndex, newIndex)\n table.setColumnOrder(newOrder)\n },\n [table]\n )\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const renderHeaders = (headers: Header<any, unknown>[]) =>\n headers.map((header) => {\n const isPinned = header.column.getIsPinned()\n const pinnedOffset = isPinned\n ? getPinnedColumnOffset(header.column, table)\n : undefined\n const isLastLeft = isLastLeftPinnedColumn(header.column, table)\n const isFirstRight = isFirstRightPinnedColumn(header.column, table)\n const columnMeta = header.column.columnDef.meta as\n { align?: \"left\" | \"center\" | \"right\" } | undefined\n const align = columnMeta?.align\n\n const cellStyle: React.CSSProperties = {\n width: enableColumnResizing\n ? header.getSize()\n : header.getSize() !== DEFAULT_COLUMN_WIDTH\n ? header.getSize()\n : undefined,\n minWidth: fitHeaderWidth ? \"max-content\" : undefined,\n backgroundColor: isSticky || isPinned ? stickyBackground : undefined,\n position:\n isSticky || isPinned\n ? \"sticky\"\n : enableColumnResizing\n ? \"relative\"\n : undefined,\n top: isSticky ? 0 : undefined,\n left: isPinned === \"left\" ? `${pinnedOffset}px` : undefined,\n right: isPinned === \"right\" ? `${pinnedOffset}px` : undefined,\n zIndex: isPinned ? 30 : isSticky ? 10 : undefined,\n // Reduce padding for sortable headers\n ...(() => {\n const meta = header.column.columnDef.meta as\n | {\n _sortableHeaderWrapped?: boolean\n align?: \"left\" | \"right\" | \"center\"\n }\n | undefined\n const shouldReducePadding =\n meta?._sortableHeaderWrapped ||\n (header.column.getCanSort() &&\n typeof header.column.columnDef.header === \"function\")\n if (!shouldReducePadding) return {}\n return meta?.align === \"right\"\n ? { paddingRight: 8 }\n : { paddingLeft: 8 }\n })(),\n }\n\n const cellClassName = mergeClasses(\n isLastLeft && styles.shadowLeft,\n isFirstRight && styles.shadowRight\n )\n\n const ariaSort =\n header.column.getIsSorted() === \"asc\"\n ? (\"ascending\" as const)\n : header.column.getIsSorted() === \"desc\"\n ? (\"descending\" as const)\n : header.column.getCanSort()\n ? (\"none\" as const)\n : undefined\n\n const headerContent = (\n <span className={styles.headerTitle}>\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </span>\n )\n\n if (enableColumnOrdering) {\n const canReorder = isColumnReorderable(header.column) && !isPinned\n\n return (\n <DataTableHeaderDraggable\n key={header.id}\n headerId={header.column.id}\n disabled={!canReorder}\n align={align}\n aria-sort={ariaSort}\n style={cellStyle}\n className={cellClassName}\n >\n {headerContent}\n </DataTableHeaderDraggable>\n )\n }\n\n return (\n <TableHead\n key={header.id}\n align={align}\n aria-sort={ariaSort}\n style={cellStyle}\n className={cellClassName}\n >\n {headerContent}\n </TableHead>\n )\n })\n\n // Get column IDs for SortableContext\n const orderedColumnIds = table.getAllLeafColumns().map((col) => col.id)\n\n const headerContent = (\n <TableHeader\n ref={ref}\n data-slot=\"data-table-header\"\n {...{ [SLOT_ATTR]: \"data-table-header\" }}\n data-fs-element=\"DataTable-Header\"\n className={className}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow\n key={headerGroup.id}\n noHover\n style={{\n boxShadow:\n showHeaderBorder !== false\n ? `inset 0 -1px 0 0 ${tokens.grayA6}`\n : \"none\",\n }}\n >\n {enableColumnOrdering ? (\n <SortableContext\n items={orderedColumnIds}\n strategy={horizontalListSortingStrategy}\n >\n {renderHeaders(headerGroup.headers)}\n </SortableContext>\n ) : (\n renderHeaders(headerGroup.headers)\n )}\n {/* Spacer cell - absorbs remaining width when columns < container */}\n {spacerWidth > 0 && (\n <TableHead\n data-spacer\n aria-hidden=\"true\"\n style={{\n width: spacerWidth,\n padding: 0,\n backgroundColor: isSticky ? stickyBackground : undefined,\n position: isSticky ? \"sticky\" : undefined,\n top: isSticky ? 0 : undefined,\n zIndex: isSticky ? 5 : undefined,\n }}\n />\n )}\n </TableRow>\n ))}\n </TableHeader>\n )\n\n const a11yContainer = useMemo(\n () =>\n enableColumnOrdering && typeof document !== \"undefined\"\n ? document.body\n : undefined,\n [enableColumnOrdering]\n )\n\n // Wrap with DndContext; portal a11y elements to body to avoid invalid DOM nesting in <table>\n if (enableColumnOrdering) {\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToHorizontalAxis]}\n accessibility={{ container: a11yContainer }}\n >\n {headerContent}\n </DndContext>\n )\n }\n\n return headerContent\n})\n"],"names":["restrictToHorizontalAxis","transform","DEFAULT_COLUMN_WIDTH","isColumnReorderable","column","meta","useStyles","makeZenithStyles","shorthands","tokens.fontWeightSemibold","DataTableHeader","React","className","sticky","stickyBackground","tokens.gray2","ref","styles","table","disableColumnResizing","showHeaderBorder","fitHeaderWidth","enableColumnOrdering","useDataTable","enableColumnResizing","virtualizerContext","useDataTableVirtualizer","contentContext","useDataTableContent","spacerWidth","isSticky","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","useCallback","event","active","over","currentOrder","c","oldIndex","newIndex","newOrder","arrayMove","renderHeaders","headers","header","isPinned","pinnedOffset","getPinnedColumnOffset","isLastLeft","isLastLeftPinnedColumn","isFirstRight","isFirstRightPinnedColumn","columnMeta","align","cellStyle","cellClassName","mergeClasses","ariaSort","headerContent","jsx","flexRender","canReorder","DataTableHeaderDraggable","TableHead","orderedColumnIds","col","TableHeader","SLOT_ATTR","headerGroup","jsxs","TableRow","tokens.grayA6","SortableContext","horizontalListSortingStrategy","a11yContainer","useMemo","DndContext","closestCenter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table-header.js","sources":["../../../src/components/data-table/data-table-header.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useCallback, useMemo } from \"react\"\nimport { flexRender, type Header } from \"@tanstack/react-table\"\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type Modifier,\n} from \"@dnd-kit/core\"\nimport {\n SortableContext,\n horizontalListSortingStrategy,\n arrayMove,\n sortableKeyboardCoordinates,\n} from \"@dnd-kit/sortable\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\nimport { TableHeader, TableRow, TableHead } from \"../table/table\"\nimport {\n useDataTable,\n useDataTableContent,\n useDataTableVirtualizer,\n} from \"./hooks\"\nimport { DataTableHeaderDraggable } from \"./data-table-header-draggable\"\nimport {\n getPinnedColumnOffset,\n isLastLeftPinnedColumn,\n isFirstRightPinnedColumn,\n} from \"./data-table-pinning-utils\"\n\n// Restrict drag movement to horizontal axis only\nconst restrictToHorizontalAxis: Modifier = ({ transform }) => ({\n ...transform,\n y: 0,\n})\n\n// TanStack Table's default column width\nconst DEFAULT_COLUMN_WIDTH = 150\n\n/** Check if a column can be reordered */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isColumnReorderable(column: Header<any, unknown>[\"column\"]): boolean {\n if (column.id === \"select\") return false\n const meta = column.columnDef.meta as { enableOrdering?: boolean } | undefined\n if (meta?.enableOrdering === false) return false\n return true\n}\n\nconst useStyles = makeZenithStyles({\n // Painted on the cells, as DataTableRow's rule is: WebKit draws no\n // box-shadow on a <tr>.\n headerRowBorder: {\n \"& > th\": {\n backgroundImage: `linear-gradient(${tokens.grayA6}, ${tokens.grayA6})`,\n backgroundSize: \"100% 1px\",\n backgroundPosition: \"bottom\",\n backgroundRepeat: \"no-repeat\",\n },\n },\n headerTitle: {\n display: \"block\",\n ...shorthands.overflow(\"hidden\"),\n whiteSpace: \"nowrap\",\n fontWeight: tokens.fontWeightSemibold,\n // The clip truncates long titles, but a control in the header (the\n // select-all checkbox) needs its focus ring drawn outside its box: give\n // the clip room for it, and take that room back so layout is unchanged.\n boxSizing: \"border-box\",\n ...shorthands.padding(tokens.spacingElement1),\n ...shorthands.margin(`calc(${tokens.spacingElement1} * -1)`),\n },\n shadowLeft: {\n boxShadow: \"2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n shadowRight: {\n boxShadow: \"-2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n})\n\nexport type DataTableHeaderProps = {\n /** Additional class name */\n className?: string\n /** Whether to make header sticky */\n sticky?: boolean\n /** Background color for sticky header. Default: tokens.gray2 */\n stickyBackground?: string\n}\n\n/**\n * Renders the table header with column headers.\n * Must be used within a DataTable component.\n */\nexport const DataTableHeader = React.forwardRef<\n HTMLTableSectionElement,\n DataTableHeaderProps\n>(function DataTableHeader(\n { className, sticky, stickyBackground = tokens.gray2 },\n ref\n) {\n const styles = useStyles()\n const {\n table,\n disableColumnResizing,\n showHeaderBorder,\n fitHeaderWidth,\n enableColumnOrdering,\n } = useDataTable()\n const enableColumnResizing = !disableColumnResizing\n const virtualizerContext = useDataTableVirtualizer()\n const contentContext = useDataTableContent()\n const spacerWidth = contentContext?.spacerWidth ?? 0\n\n // Auto-enable sticky when virtualization is active\n const isSticky = sticky ?? Boolean(virtualizerContext)\n\n // DnD sensors for column reordering\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 5 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const currentOrder =\n table.getState().columnOrder && table.getState().columnOrder.length > 0\n ? table.getState().columnOrder\n : table.getAllLeafColumns().map((c) => c.id)\n\n const oldIndex = currentOrder.indexOf(active.id as string)\n const newIndex = currentOrder.indexOf(over.id as string)\n\n if (oldIndex === -1 || newIndex === -1) return\n\n const newOrder = arrayMove(currentOrder, oldIndex, newIndex)\n table.setColumnOrder(newOrder)\n },\n [table]\n )\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const renderHeaders = (headers: Header<any, unknown>[]) =>\n headers.map((header) => {\n const isPinned = header.column.getIsPinned()\n const pinnedOffset = isPinned\n ? getPinnedColumnOffset(header.column, table)\n : undefined\n const isLastLeft = isLastLeftPinnedColumn(header.column, table)\n const isFirstRight = isFirstRightPinnedColumn(header.column, table)\n const columnMeta = header.column.columnDef.meta as\n { align?: \"left\" | \"center\" | \"right\" } | undefined\n const align = columnMeta?.align\n\n const cellStyle: React.CSSProperties = {\n width: enableColumnResizing\n ? header.getSize()\n : header.getSize() !== DEFAULT_COLUMN_WIDTH\n ? header.getSize()\n : undefined,\n minWidth: fitHeaderWidth ? \"max-content\" : undefined,\n backgroundColor: isSticky || isPinned ? stickyBackground : undefined,\n position:\n isSticky || isPinned\n ? \"sticky\"\n : enableColumnResizing\n ? \"relative\"\n : undefined,\n top: isSticky ? 0 : undefined,\n left: isPinned === \"left\" ? `${pinnedOffset}px` : undefined,\n right: isPinned === \"right\" ? `${pinnedOffset}px` : undefined,\n zIndex: isPinned ? 30 : isSticky ? 10 : undefined,\n // Reduce padding for sortable headers\n ...(() => {\n const meta = header.column.columnDef.meta as\n | {\n _sortableHeaderWrapped?: boolean\n align?: \"left\" | \"right\" | \"center\"\n }\n | undefined\n const shouldReducePadding =\n meta?._sortableHeaderWrapped ||\n (header.column.getCanSort() &&\n typeof header.column.columnDef.header === \"function\")\n if (!shouldReducePadding) return {}\n return meta?.align === \"right\"\n ? { paddingRight: 8 }\n : { paddingLeft: 8 }\n })(),\n }\n\n const cellClassName = mergeClasses(\n isLastLeft && styles.shadowLeft,\n isFirstRight && styles.shadowRight\n )\n\n const ariaSort =\n header.column.getIsSorted() === \"asc\"\n ? (\"ascending\" as const)\n : header.column.getIsSorted() === \"desc\"\n ? (\"descending\" as const)\n : header.column.getCanSort()\n ? (\"none\" as const)\n : undefined\n\n const headerContent = (\n <span className={styles.headerTitle}>\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </span>\n )\n\n if (enableColumnOrdering) {\n const canReorder = isColumnReorderable(header.column) && !isPinned\n\n return (\n <DataTableHeaderDraggable\n key={header.id}\n headerId={header.column.id}\n disabled={!canReorder}\n align={align}\n aria-sort={ariaSort}\n style={cellStyle}\n className={cellClassName}\n >\n {headerContent}\n </DataTableHeaderDraggable>\n )\n }\n\n return (\n <TableHead\n key={header.id}\n align={align}\n aria-sort={ariaSort}\n style={cellStyle}\n className={cellClassName}\n >\n {headerContent}\n </TableHead>\n )\n })\n\n // Get column IDs for SortableContext\n const orderedColumnIds = table.getAllLeafColumns().map((col) => col.id)\n\n const headerContent = (\n <TableHeader\n ref={ref}\n data-slot=\"data-table-header\"\n {...{ [SLOT_ATTR]: \"data-table-header\" }}\n data-fs-element=\"DataTable-Header\"\n className={className}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow\n key={headerGroup.id}\n noHover\n className={\n showHeaderBorder !== false ? styles.headerRowBorder : undefined\n }\n >\n {enableColumnOrdering ? (\n <SortableContext\n items={orderedColumnIds}\n strategy={horizontalListSortingStrategy}\n >\n {renderHeaders(headerGroup.headers)}\n </SortableContext>\n ) : (\n renderHeaders(headerGroup.headers)\n )}\n {/* Spacer cell - absorbs remaining width when columns < container */}\n {spacerWidth > 0 && (\n <TableHead\n data-spacer\n aria-hidden=\"true\"\n style={{\n width: spacerWidth,\n padding: 0,\n backgroundColor: isSticky ? stickyBackground : undefined,\n position: isSticky ? \"sticky\" : undefined,\n top: isSticky ? 0 : undefined,\n zIndex: isSticky ? 5 : undefined,\n }}\n />\n )}\n </TableRow>\n ))}\n </TableHeader>\n )\n\n const a11yContainer = useMemo(\n () =>\n enableColumnOrdering && typeof document !== \"undefined\"\n ? document.body\n : undefined,\n [enableColumnOrdering]\n )\n\n // Wrap with DndContext; portal a11y elements to body to avoid invalid DOM nesting in <table>\n if (enableColumnOrdering) {\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToHorizontalAxis]}\n accessibility={{ container: a11yContainer }}\n >\n {headerContent}\n </DndContext>\n )\n }\n\n return headerContent\n})\n"],"names":["restrictToHorizontalAxis","transform","DEFAULT_COLUMN_WIDTH","isColumnReorderable","column","meta","useStyles","makeZenithStyles","tokens.grayA6","shorthands","tokens.fontWeightSemibold","tokens.spacingElement1","DataTableHeader","React","className","sticky","stickyBackground","tokens.gray2","ref","styles","table","disableColumnResizing","showHeaderBorder","fitHeaderWidth","enableColumnOrdering","useDataTable","enableColumnResizing","virtualizerContext","useDataTableVirtualizer","contentContext","useDataTableContent","spacerWidth","isSticky","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","useCallback","event","active","over","currentOrder","c","oldIndex","newIndex","newOrder","arrayMove","renderHeaders","headers","header","isPinned","pinnedOffset","getPinnedColumnOffset","isLastLeft","isLastLeftPinnedColumn","isFirstRight","isFirstRightPinnedColumn","columnMeta","align","cellStyle","cellClassName","mergeClasses","ariaSort","headerContent","jsx","flexRender","canReorder","DataTableHeaderDraggable","TableHead","orderedColumnIds","col","TableHeader","SLOT_ATTR","headerGroup","jsxs","TableRow","SortableContext","horizontalListSortingStrategy","a11yContainer","useMemo","DndContext","closestCenter"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsxs as A, jsx as
|
|
1
|
+
import { jsxs as A, jsx as p } from "react/jsx-runtime";
|
|
2
2
|
import * as B from "react";
|
|
3
3
|
import { flexRender as N } from "../../vendor/.bun/@tanstack_react-table@8.21.3_6f4b9a1cfb20c0ae/vendor/@tanstack/react-table/build/lib/index.js";
|
|
4
|
-
import { mergeClasses as
|
|
5
|
-
import { makeZenithStyles as
|
|
6
|
-
import { boxModel as
|
|
7
|
-
import { grayA6 as
|
|
4
|
+
import { mergeClasses as w, SLOT_ATTR as u, shorthands as g } from "@epilot/zenith-runtime/v1";
|
|
5
|
+
import { makeZenithStyles as $ } from "../../styles/make-styles.js";
|
|
6
|
+
import { boxModel as h } from "../../styles/host-reset.js";
|
|
7
|
+
import { grayA6 as k, accentA3 as x } from "../../tokens/index.js";
|
|
8
8
|
import { TableRow as z, TableCell as C } from "../table/table.js";
|
|
9
9
|
import { getPinnedColumnOffset as j, isLastLeftPinnedColumn as F, isFirstRightPinnedColumn as K } from "./data-table-pinning-utils.js";
|
|
10
10
|
import { useDataTable as V } from "./hooks/use-data-table.js";
|
|
@@ -17,7 +17,7 @@ function q(t) {
|
|
|
17
17
|
const a = t.column.columnDef.meta;
|
|
18
18
|
return a == null ? void 0 : a.align;
|
|
19
19
|
}
|
|
20
|
-
const
|
|
20
|
+
const R = [
|
|
21
21
|
"button",
|
|
22
22
|
"a",
|
|
23
23
|
"input",
|
|
@@ -36,8 +36,8 @@ const k = [
|
|
|
36
36
|
'[role="switch"]',
|
|
37
37
|
'[role="tab"]',
|
|
38
38
|
"[data-radix-collection-item]",
|
|
39
|
-
`[${
|
|
40
|
-
], G =
|
|
39
|
+
`[${u}="checkbox"]`
|
|
40
|
+
], G = $({
|
|
41
41
|
rowClickable: {
|
|
42
42
|
cursor: "pointer",
|
|
43
43
|
":hover": {
|
|
@@ -47,23 +47,32 @@ const k = [
|
|
|
47
47
|
rowSelected: {
|
|
48
48
|
backgroundColor: x
|
|
49
49
|
},
|
|
50
|
+
// The rule is painted on the cells: WebKit draws no box-shadow on a <tr>,
|
|
51
|
+
// and row borders don't paint under DataTableContent's
|
|
52
|
+
// `border-collapse: separate`. A background image also stays clear of the
|
|
53
|
+
// pinned cells' own box-shadow and adds no height.
|
|
50
54
|
rowBorder: {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
"& > td": {
|
|
56
|
+
backgroundImage: `linear-gradient(${k}, ${k})`,
|
|
57
|
+
backgroundSize: "100% 1px",
|
|
58
|
+
backgroundPosition: "bottom",
|
|
59
|
+
backgroundRepeat: "no-repeat"
|
|
60
|
+
},
|
|
61
|
+
"&:last-child > td": {
|
|
62
|
+
backgroundImage: "none"
|
|
54
63
|
}
|
|
55
64
|
},
|
|
56
65
|
cellTruncate: {
|
|
57
|
-
...
|
|
66
|
+
...h,
|
|
58
67
|
maxWidth: 0,
|
|
59
|
-
...
|
|
68
|
+
...g.overflow("hidden"),
|
|
60
69
|
textOverflow: "ellipsis",
|
|
61
70
|
whiteSpace: "nowrap"
|
|
62
71
|
},
|
|
63
72
|
cellWrap: {
|
|
64
|
-
...
|
|
73
|
+
...h,
|
|
65
74
|
maxWidth: 0,
|
|
66
|
-
...
|
|
75
|
+
...g.overflow("hidden"),
|
|
67
76
|
overflowWrap: "break-word",
|
|
68
77
|
wordBreak: "break-word"
|
|
69
78
|
},
|
|
@@ -78,21 +87,21 @@ function H({ row: t, style: a, className: n }, v) {
|
|
|
78
87
|
const r = G(), {
|
|
79
88
|
table: c,
|
|
80
89
|
onRowClick: i,
|
|
81
|
-
clickableRowClassName:
|
|
82
|
-
selectedRowClassName:
|
|
83
|
-
cellOverflow:
|
|
90
|
+
clickableRowClassName: T,
|
|
91
|
+
selectedRowClassName: S,
|
|
92
|
+
cellOverflow: I = "truncate",
|
|
84
93
|
showRowBorders: D,
|
|
85
|
-
disableColumnResizing:
|
|
86
|
-
} = V(), d = _(),
|
|
94
|
+
disableColumnResizing: y
|
|
95
|
+
} = V(), d = _(), f = (d == null ? void 0 : d.spacerWidth) ?? 0, E = !y, s = !!i, O = (e) => {
|
|
87
96
|
if (!i) return;
|
|
88
97
|
const l = e.target;
|
|
89
|
-
|
|
98
|
+
R.some(
|
|
90
99
|
(o) => l.closest(o)
|
|
91
100
|
) || i(t, e);
|
|
92
|
-
},
|
|
101
|
+
}, L = (e) => {
|
|
93
102
|
if (i && (e.key === "Enter" || e.key === " ")) {
|
|
94
103
|
const l = e.target;
|
|
95
|
-
if (
|
|
104
|
+
if (R.some(
|
|
96
105
|
(o) => l.closest(o)
|
|
97
106
|
))
|
|
98
107
|
return;
|
|
@@ -104,53 +113,53 @@ function H({ row: t, style: a, className: n }, v) {
|
|
|
104
113
|
{
|
|
105
114
|
ref: v,
|
|
106
115
|
"data-slot": "data-table-row",
|
|
107
|
-
[
|
|
116
|
+
[u]: "data-table-row",
|
|
108
117
|
"data-fs-element": "DataTable-Row",
|
|
109
118
|
"data-state": t.getIsSelected() ? "selected" : void 0,
|
|
110
119
|
"data-clickable": s ? "true" : void 0,
|
|
111
120
|
style: a,
|
|
112
|
-
className:
|
|
121
|
+
className: w(
|
|
113
122
|
D !== !1 && r.rowBorder,
|
|
114
|
-
s && (
|
|
115
|
-
t.getIsSelected() && (
|
|
123
|
+
s && (T ?? r.rowClickable),
|
|
124
|
+
t.getIsSelected() && (S ?? r.rowSelected),
|
|
116
125
|
n
|
|
117
126
|
),
|
|
118
|
-
onClick: s ?
|
|
127
|
+
onClick: s ? O : void 0,
|
|
119
128
|
tabIndex: s ? 0 : void 0,
|
|
120
|
-
onKeyDown: s ?
|
|
129
|
+
onKeyDown: s ? L : void 0,
|
|
121
130
|
children: [
|
|
122
131
|
t.getVisibleCells().map((e) => {
|
|
123
|
-
const l = Z(e,
|
|
124
|
-
return /* @__PURE__ */
|
|
132
|
+
const l = Z(e, I), m = q(e), o = e.column.getIsPinned(), b = o ? j(e.column, c) : void 0, W = F(e.column, c), P = K(e.column, c);
|
|
133
|
+
return /* @__PURE__ */ p(
|
|
125
134
|
C,
|
|
126
135
|
{
|
|
127
136
|
"data-slot": "data-table-cell",
|
|
128
|
-
[
|
|
137
|
+
[u]: "data-table-cell",
|
|
129
138
|
"data-fs-element": "DataTable-Cell",
|
|
130
139
|
"data-pinned": o || void 0,
|
|
131
140
|
align: m,
|
|
132
141
|
style: {
|
|
133
|
-
width:
|
|
134
|
-
left: o === "left" ? `${
|
|
135
|
-
right: o === "right" ? `${
|
|
142
|
+
width: E || o ? e.column.getSize() : void 0,
|
|
143
|
+
left: o === "left" ? `${b}px` : void 0,
|
|
144
|
+
right: o === "right" ? `${b}px` : void 0
|
|
136
145
|
},
|
|
137
|
-
className:
|
|
146
|
+
className: w(
|
|
138
147
|
l === "truncate" && r.cellTruncate,
|
|
139
148
|
l === "wrap" && r.cellWrap,
|
|
140
|
-
|
|
141
|
-
|
|
149
|
+
W && r.shadowLeft,
|
|
150
|
+
P && r.shadowRight
|
|
142
151
|
),
|
|
143
152
|
children: N(e.column.columnDef.cell, e.getContext())
|
|
144
153
|
},
|
|
145
154
|
e.id
|
|
146
155
|
);
|
|
147
156
|
}),
|
|
148
|
-
|
|
157
|
+
f > 0 && /* @__PURE__ */ p(
|
|
149
158
|
C,
|
|
150
159
|
{
|
|
151
160
|
"data-spacer": !0,
|
|
152
161
|
"aria-hidden": "true",
|
|
153
|
-
style: { width:
|
|
162
|
+
style: { width: f, padding: 0 }
|
|
154
163
|
}
|
|
155
164
|
)
|
|
156
165
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-row.js","sources":["../../../src/components/data-table/data-table-row.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { CSSProperties, MouseEvent, KeyboardEvent } from \"react\"\nimport type { Row, Cell } from \"@tanstack/react-table\"\nimport { flexRender } from \"@tanstack/react-table\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { TableRow, TableCell } from \"../table/table\"\nimport { useDataTable, useDataTableContent } from \"./hooks\"\nimport type { DataTableCellOverflow } from \"./data-table-context\"\nimport {\n getPinnedColumnOffset,\n isLastLeftPinnedColumn,\n isFirstRightPinnedColumn,\n} from \"./data-table-pinning-utils\"\n\ntype CellAlign = \"left\" | \"center\" | \"right\"\n\n/**\n * Gets the cell overflow mode, checking column meta first, then falling back to table default.\n */\nfunction getCellOverflow<TData>(\n cell: Cell<TData, unknown>,\n tableDefault: DataTableCellOverflow\n): DataTableCellOverflow {\n const columnMeta = cell.column.columnDef.meta as\n { cellOverflow?: DataTableCellOverflow } | undefined\n return columnMeta?.cellOverflow ?? tableDefault\n}\n\n/**\n * Gets the cell alignment from column meta.\n */\nfunction getCellAlign<TData>(\n cell: Cell<TData, unknown>\n): CellAlign | undefined {\n const columnMeta = cell.column.columnDef.meta as\n { align?: CellAlign } | undefined\n return columnMeta?.align\n}\n\n// Interactive element selectors that should NOT trigger row click\nconst INTERACTIVE_SELECTORS = [\n \"button\",\n \"a\",\n \"input\",\n \"select\",\n \"textarea\",\n '[role=\"button\"]',\n '[role=\"checkbox\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n '[role=\"option\"]',\n '[role=\"radio\"]',\n '[role=\"slider\"]',\n '[role=\"spinbutton\"]',\n '[role=\"switch\"]',\n '[role=\"tab\"]',\n \"[data-radix-collection-item]\",\n `[${SLOT_ATTR}=\"checkbox\"]`,\n]\n\nconst useStyles = makeZenithStyles({\n rowClickable: {\n cursor: \"pointer\",\n \":hover\": {\n backgroundColor: tokens.accentA3,\n },\n },\n rowSelected: {\n backgroundColor: tokens.accentA3,\n },\n rowBorder: {\n boxShadow: `inset 0 -1px 0 0 ${tokens.grayA6}`,\n \"&:last-child\": {\n boxShadow: \"none\",\n },\n },\n cellTruncate: {\n ...boxModel,\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n cellWrap: {\n ...boxModel,\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n overflowWrap: \"break-word\",\n wordBreak: \"break-word\",\n },\n shadowLeft: {\n boxShadow: \"2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n shadowRight: {\n boxShadow: \"-2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n})\n\nexport type DataTableRowProps<TData> = {\n /** The row instance from TanStack Table */\n row: Row<TData>\n /** Optional style (used for virtualized row heights) */\n style?: CSSProperties\n /** Additional class name */\n className?: string\n}\n\n/**\n * Renders a single table row with its cells.\n * Supports clickable rows when onRowClick is provided via DataTable context.\n */\nfunction DataTableRowInner<TData>(\n { row, style, className }: DataTableRowProps<TData>,\n ref: React.ForwardedRef<HTMLTableRowElement>\n) {\n const styles = useStyles()\n const {\n table,\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow: tableCellOverflow = \"truncate\",\n showRowBorders,\n disableColumnResizing,\n } = useDataTable<TData>()\n const contentContext = useDataTableContent()\n const spacerWidth = contentContext?.spacerWidth ?? 0\n\n const enableColumnResizing = !disableColumnResizing\n const isClickable = Boolean(onRowClick)\n\n const handleClick = (event: MouseEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return\n\n // Check if click originated from an interactive element\n const target = event.target as HTMLElement\n const isInteractiveElement = INTERACTIVE_SELECTORS.some((selector) =>\n target.closest(selector)\n )\n\n if (isInteractiveElement) {\n return // Don't trigger row click for interactive elements\n }\n\n onRowClick(row, event)\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return\n\n if (event.key === \"Enter\" || event.key === \" \") {\n // Check if key event originated from an interactive element\n const target = event.target as HTMLElement\n const isInteractiveElement = INTERACTIVE_SELECTORS.some((selector) =>\n target.closest(selector)\n )\n\n if (isInteractiveElement) {\n return // Let the interactive element handle the event\n }\n\n event.preventDefault()\n onRowClick(row, event as unknown as MouseEvent<HTMLTableRowElement>)\n }\n }\n\n return (\n <TableRow\n ref={ref}\n data-slot=\"data-table-row\"\n {...{ [SLOT_ATTR]: \"data-table-row\" }}\n data-fs-element=\"DataTable-Row\"\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n data-clickable={isClickable ? \"true\" : undefined}\n style={style}\n className={mergeClasses(\n showRowBorders !== false && styles.rowBorder,\n isClickable && (clickableRowClassName ?? styles.rowClickable),\n row.getIsSelected() && (selectedRowClassName ?? styles.rowSelected),\n className\n )}\n onClick={isClickable ? handleClick : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={isClickable ? handleKeyDown : undefined}\n >\n {row.getVisibleCells().map((cell) => {\n const overflow = getCellOverflow(cell, tableCellOverflow)\n const align = getCellAlign(cell)\n const isPinned = cell.column.getIsPinned()\n const pinnedOffset = isPinned\n ? getPinnedColumnOffset(cell.column, table)\n : undefined\n const isLastLeft = isLastLeftPinnedColumn(cell.column, table)\n const isFirstRight = isFirstRightPinnedColumn(cell.column, table)\n\n return (\n <TableCell\n key={cell.id}\n data-slot=\"data-table-cell\"\n {...{ [SLOT_ATTR]: \"data-table-cell\" }}\n data-fs-element=\"DataTable-Cell\"\n data-pinned={isPinned || undefined}\n align={align}\n style={{\n width:\n enableColumnResizing || isPinned\n ? cell.column.getSize()\n : undefined,\n left: isPinned === \"left\" ? `${pinnedOffset}px` : undefined,\n right: isPinned === \"right\" ? `${pinnedOffset}px` : undefined,\n }}\n className={mergeClasses(\n overflow === \"truncate\" && styles.cellTruncate,\n overflow === \"wrap\" && styles.cellWrap,\n isLastLeft && styles.shadowLeft,\n isFirstRight && styles.shadowRight\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n )\n })}\n {/* Spacer cell - matches header spacer column */}\n {spacerWidth > 0 && (\n <TableCell\n data-spacer\n aria-hidden=\"true\"\n style={{ width: spacerWidth, padding: 0 }}\n />\n )}\n </TableRow>\n )\n}\n\nexport const DataTableRow = React.forwardRef(DataTableRowInner) as <TData>(\n props: DataTableRowProps<TData> & {\n ref?: React.Ref<HTMLTableRowElement>\n }\n) => React.ReactElement | null\n"],"names":["getCellOverflow","cell","tableDefault","columnMeta","getCellAlign","INTERACTIVE_SELECTORS","SLOT_ATTR","useStyles","makeZenithStyles","tokens.accentA3","tokens.grayA6","boxModel","shorthands","DataTableRowInner","row","style","className","ref","styles","table","onRowClick","clickableRowClassName","selectedRowClassName","tableCellOverflow","showRowBorders","disableColumnResizing","useDataTable","contentContext","useDataTableContent","spacerWidth","enableColumnResizing","isClickable","handleClick","event","target","selector","handleKeyDown","jsxs","TableRow","mergeClasses","overflow","align","isPinned","pinnedOffset","getPinnedColumnOffset","isLastLeft","isLastLeftPinnedColumn","isFirstRight","isFirstRightPinnedColumn","jsx","TableCell","DataTableRow","React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table-row.js","sources":["../../../src/components/data-table/data-table-row.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { CSSProperties, MouseEvent, KeyboardEvent } from \"react\"\nimport type { Row, Cell } from \"@tanstack/react-table\"\nimport { flexRender } from \"@tanstack/react-table\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { TableRow, TableCell } from \"../table/table\"\nimport { useDataTable, useDataTableContent } from \"./hooks\"\nimport type { DataTableCellOverflow } from \"./data-table-context\"\nimport {\n getPinnedColumnOffset,\n isLastLeftPinnedColumn,\n isFirstRightPinnedColumn,\n} from \"./data-table-pinning-utils\"\n\ntype CellAlign = \"left\" | \"center\" | \"right\"\n\n/**\n * Gets the cell overflow mode, checking column meta first, then falling back to table default.\n */\nfunction getCellOverflow<TData>(\n cell: Cell<TData, unknown>,\n tableDefault: DataTableCellOverflow\n): DataTableCellOverflow {\n const columnMeta = cell.column.columnDef.meta as\n { cellOverflow?: DataTableCellOverflow } | undefined\n return columnMeta?.cellOverflow ?? tableDefault\n}\n\n/**\n * Gets the cell alignment from column meta.\n */\nfunction getCellAlign<TData>(\n cell: Cell<TData, unknown>\n): CellAlign | undefined {\n const columnMeta = cell.column.columnDef.meta as\n { align?: CellAlign } | undefined\n return columnMeta?.align\n}\n\n// Interactive element selectors that should NOT trigger row click\nconst INTERACTIVE_SELECTORS = [\n \"button\",\n \"a\",\n \"input\",\n \"select\",\n \"textarea\",\n '[role=\"button\"]',\n '[role=\"checkbox\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n '[role=\"option\"]',\n '[role=\"radio\"]',\n '[role=\"slider\"]',\n '[role=\"spinbutton\"]',\n '[role=\"switch\"]',\n '[role=\"tab\"]',\n \"[data-radix-collection-item]\",\n `[${SLOT_ATTR}=\"checkbox\"]`,\n]\n\nconst useStyles = makeZenithStyles({\n rowClickable: {\n cursor: \"pointer\",\n \":hover\": {\n backgroundColor: tokens.accentA3,\n },\n },\n rowSelected: {\n backgroundColor: tokens.accentA3,\n },\n // The rule is painted on the cells: WebKit draws no box-shadow on a <tr>,\n // and row borders don't paint under DataTableContent's\n // `border-collapse: separate`. A background image also stays clear of the\n // pinned cells' own box-shadow and adds no height.\n rowBorder: {\n \"& > td\": {\n backgroundImage: `linear-gradient(${tokens.grayA6}, ${tokens.grayA6})`,\n backgroundSize: \"100% 1px\",\n backgroundPosition: \"bottom\",\n backgroundRepeat: \"no-repeat\",\n },\n \"&:last-child > td\": {\n backgroundImage: \"none\",\n },\n },\n cellTruncate: {\n ...boxModel,\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n cellWrap: {\n ...boxModel,\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n overflowWrap: \"break-word\",\n wordBreak: \"break-word\",\n },\n shadowLeft: {\n boxShadow: \"2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n shadowRight: {\n boxShadow: \"-2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n})\n\nexport type DataTableRowProps<TData> = {\n /** The row instance from TanStack Table */\n row: Row<TData>\n /** Optional style (used for virtualized row heights) */\n style?: CSSProperties\n /** Additional class name */\n className?: string\n}\n\n/**\n * Renders a single table row with its cells.\n * Supports clickable rows when onRowClick is provided via DataTable context.\n */\nfunction DataTableRowInner<TData>(\n { row, style, className }: DataTableRowProps<TData>,\n ref: React.ForwardedRef<HTMLTableRowElement>\n) {\n const styles = useStyles()\n const {\n table,\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow: tableCellOverflow = \"truncate\",\n showRowBorders,\n disableColumnResizing,\n } = useDataTable<TData>()\n const contentContext = useDataTableContent()\n const spacerWidth = contentContext?.spacerWidth ?? 0\n\n const enableColumnResizing = !disableColumnResizing\n const isClickable = Boolean(onRowClick)\n\n const handleClick = (event: MouseEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return\n\n // Check if click originated from an interactive element\n const target = event.target as HTMLElement\n const isInteractiveElement = INTERACTIVE_SELECTORS.some((selector) =>\n target.closest(selector)\n )\n\n if (isInteractiveElement) {\n return // Don't trigger row click for interactive elements\n }\n\n onRowClick(row, event)\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return\n\n if (event.key === \"Enter\" || event.key === \" \") {\n // Check if key event originated from an interactive element\n const target = event.target as HTMLElement\n const isInteractiveElement = INTERACTIVE_SELECTORS.some((selector) =>\n target.closest(selector)\n )\n\n if (isInteractiveElement) {\n return // Let the interactive element handle the event\n }\n\n event.preventDefault()\n onRowClick(row, event as unknown as MouseEvent<HTMLTableRowElement>)\n }\n }\n\n return (\n <TableRow\n ref={ref}\n data-slot=\"data-table-row\"\n {...{ [SLOT_ATTR]: \"data-table-row\" }}\n data-fs-element=\"DataTable-Row\"\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n data-clickable={isClickable ? \"true\" : undefined}\n style={style}\n className={mergeClasses(\n showRowBorders !== false && styles.rowBorder,\n isClickable && (clickableRowClassName ?? styles.rowClickable),\n row.getIsSelected() && (selectedRowClassName ?? styles.rowSelected),\n className\n )}\n onClick={isClickable ? handleClick : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={isClickable ? handleKeyDown : undefined}\n >\n {row.getVisibleCells().map((cell) => {\n const overflow = getCellOverflow(cell, tableCellOverflow)\n const align = getCellAlign(cell)\n const isPinned = cell.column.getIsPinned()\n const pinnedOffset = isPinned\n ? getPinnedColumnOffset(cell.column, table)\n : undefined\n const isLastLeft = isLastLeftPinnedColumn(cell.column, table)\n const isFirstRight = isFirstRightPinnedColumn(cell.column, table)\n\n return (\n <TableCell\n key={cell.id}\n data-slot=\"data-table-cell\"\n {...{ [SLOT_ATTR]: \"data-table-cell\" }}\n data-fs-element=\"DataTable-Cell\"\n data-pinned={isPinned || undefined}\n align={align}\n style={{\n width:\n enableColumnResizing || isPinned\n ? cell.column.getSize()\n : undefined,\n left: isPinned === \"left\" ? `${pinnedOffset}px` : undefined,\n right: isPinned === \"right\" ? `${pinnedOffset}px` : undefined,\n }}\n className={mergeClasses(\n overflow === \"truncate\" && styles.cellTruncate,\n overflow === \"wrap\" && styles.cellWrap,\n isLastLeft && styles.shadowLeft,\n isFirstRight && styles.shadowRight\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n )\n })}\n {/* Spacer cell - matches header spacer column */}\n {spacerWidth > 0 && (\n <TableCell\n data-spacer\n aria-hidden=\"true\"\n style={{ width: spacerWidth, padding: 0 }}\n />\n )}\n </TableRow>\n )\n}\n\nexport const DataTableRow = React.forwardRef(DataTableRowInner) as <TData>(\n props: DataTableRowProps<TData> & {\n ref?: React.Ref<HTMLTableRowElement>\n }\n) => React.ReactElement | null\n"],"names":["getCellOverflow","cell","tableDefault","columnMeta","getCellAlign","INTERACTIVE_SELECTORS","SLOT_ATTR","useStyles","makeZenithStyles","tokens.accentA3","tokens.grayA6","boxModel","shorthands","DataTableRowInner","row","style","className","ref","styles","table","onRowClick","clickableRowClassName","selectedRowClassName","tableCellOverflow","showRowBorders","disableColumnResizing","useDataTable","contentContext","useDataTableContent","spacerWidth","enableColumnResizing","isClickable","handleClick","event","target","selector","handleKeyDown","jsxs","TableRow","mergeClasses","overflow","align","isPinned","pinnedOffset","getPinnedColumnOffset","isLastLeft","isLastLeftPinnedColumn","isFirstRight","isFirstRightPinnedColumn","jsx","TableCell","DataTableRow","React"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { useDensity as E } from "../density-provider/density-provider.js";
|
|
|
7
7
|
import { makeZenithStyles as I } from "../../styles/make-styles.js";
|
|
8
8
|
import { boxModel as p, nativeControl as x } from "../../styles/host-reset.js";
|
|
9
9
|
import { OVERLAY_Z_INDEX as D } from "../../styles/overlay-layer.js";
|
|
10
|
-
import { leadingSm as P, textSm as _, grayA11 as B, grayA12 as H, fontWeightSemibold as W, leadingLg as j, textLg as Z, accentA8 as C, accentSoft as M, accentA11 as
|
|
10
|
+
import { leadingSm as P, textSm as _, grayA11 as B, grayA12 as H, fontWeightSemibold as W, leadingLg as j, textLg as Z, accentA8 as C, accentSoft as M, accentA11 as V, spacingLayout1 as g, spacingElement1 as i, gray2 as q, spacingElement2 as y, grayA1 as w, radius2xl as G } from "../../tokens/index.js";
|
|
11
11
|
const d = I({
|
|
12
12
|
// For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the
|
|
13
13
|
// child owns its own element and two atom sets would race for the same properties.
|
|
@@ -38,13 +38,13 @@ const d = I({
|
|
|
38
38
|
},
|
|
39
39
|
content: {
|
|
40
40
|
...p,
|
|
41
|
-
backgroundColor:
|
|
41
|
+
backgroundColor: q,
|
|
42
42
|
position: "fixed",
|
|
43
43
|
zIndex: D,
|
|
44
44
|
display: "flex",
|
|
45
45
|
flexDirection: "column",
|
|
46
46
|
...e.gap(g),
|
|
47
|
-
...e.borderRadius(
|
|
47
|
+
...e.borderRadius(G),
|
|
48
48
|
// v1 shadow-lg; elevation has no token in this package.
|
|
49
49
|
boxShadow: "0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a",
|
|
50
50
|
// Collapses the side slots' slide too: media rules sort after them at equal specificity.
|
|
@@ -61,7 +61,7 @@ const d = I({
|
|
|
61
61
|
},
|
|
62
62
|
contentPadding: {
|
|
63
63
|
...p,
|
|
64
|
-
//
|
|
64
|
+
// Layout tier, unlike Dialog, AlertDialog and Popover: a drawer holds sections, not one group.
|
|
65
65
|
...e.padding(g)
|
|
66
66
|
},
|
|
67
67
|
right: {
|
|
@@ -226,7 +226,7 @@ const d = I({
|
|
|
226
226
|
// v1 rounded-full; no full-radius token exists in this package.
|
|
227
227
|
borderRadius: "9999px",
|
|
228
228
|
cursor: "pointer",
|
|
229
|
-
color:
|
|
229
|
+
color: V,
|
|
230
230
|
":hover": {
|
|
231
231
|
backgroundColor: M
|
|
232
232
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer.js","sources":["../../../src/components/drawer/drawer.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst useStyles = makeZenithStyles({\n // For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the\n // child owns its own element and two atom sets would race for the same properties.\n nativeTrigger: {\n ...nativeControl,\n },\n overlay: {\n position: \"fixed\",\n ...shorthands.inset(0),\n zIndex: OVERLAY_Z_INDEX,\n backgroundColor: \"rgb(0 0 0 / 50%)\",\n \"&[data-state='open']\": {\n animationName: {\n from: { opacity: 0 },\n to: { opacity: 1 },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: { opacity: 1 },\n to: { opacity: 0 },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n content: {\n ...boxModel,\n backgroundColor: tokens.gray2,\n position: \"fixed\",\n zIndex: OVERLAY_Z_INDEX,\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingGroup2),\n ...shorthands.borderRadius(tokens.radius2xl),\n // v1 shadow-lg; elevation has no token in this package.\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n // Collapses the side slots' slide too: media rules sort after them at equal specificity.\n \"@media (prefers-reduced-motion: reduce)\": {\n animationDuration: \"0.01ms\",\n animationIterationCount: \"1\",\n \"&[data-state='open']\": {\n animationDuration: \"0.01ms\",\n },\n \"&[data-state='closed']\": {\n animationDuration: \"0.01ms\",\n },\n },\n },\n contentPadding: {\n ...boxModel,\n // Group tier, as Dialog, AlertDialog and Popover; matches the radius2xl corner.\n ...shorthands.padding(tokens.spacingGroup2),\n },\n right: {\n ...boxModel,\n top: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n right: tokens.spacingElement1,\n height: \"calc(100% - 0.5rem)\",\n ...shorthands.borderLeft(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-state='open']\": {\n animationName: {\n from: {\n opacity: 0,\n transform: \"translateX(100%)\",\n },\n to: {\n opacity: 1,\n transform: \"translateX(0)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: {\n opacity: 1,\n transform: \"translateX(0)\",\n },\n to: {\n opacity: 0,\n transform: \"translateX(100%)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n left: {\n ...boxModel,\n top: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n left: tokens.spacingElement1,\n height: \"calc(100% - 0.5rem)\",\n ...shorthands.borderRight(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-state='open']\": {\n animationName: {\n from: {\n opacity: 0,\n transform: \"translateX(-100%)\",\n },\n to: {\n opacity: 1,\n transform: \"translateX(0)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: {\n opacity: 1,\n transform: \"translateX(0)\",\n },\n to: {\n opacity: 0,\n transform: \"translateX(-100%)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n top: {\n ...boxModel,\n left: tokens.spacingElement1,\n right: tokens.spacingElement1,\n top: tokens.spacingElement1,\n width: \"calc(100% - 0.5rem)\",\n ...shorthands.borderBottom(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-state='open']\": {\n animationName: {\n from: {\n opacity: 0,\n transform: \"translateY(-100%)\",\n },\n to: {\n opacity: 1,\n transform: \"translateY(0)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: {\n opacity: 1,\n transform: \"translateY(0)\",\n },\n to: {\n opacity: 0,\n transform: \"translateY(-100%)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n bottom: {\n ...boxModel,\n left: tokens.spacingElement1,\n right: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n width: \"calc(100% - 0.5rem)\",\n ...shorthands.borderTop(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-state='open']\": {\n animationName: {\n from: {\n opacity: 0,\n transform: \"translateY(100%)\",\n },\n to: {\n opacity: 1,\n transform: \"translateY(0)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: {\n opacity: 1,\n transform: \"translateY(0)\",\n },\n to: {\n opacity: 0,\n transform: \"translateY(100%)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n close: {\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n },\n closeButton: {\n ...nativeControl,\n position: \"absolute\",\n // Inset by the content padding so it lines up with the padded header.\n top: tokens.spacingGroup2,\n right: tokens.spacingGroup2,\n ...shorthands.padding(tokens.spacingElement2),\n // v1 rounded-full; no full-radius token exists in this package.\n borderRadius: \"9999px\",\n cursor: \"pointer\",\n color: tokens.accentA11,\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \":disabled\": {\n pointerEvents: \"none\",\n },\n \"& svg\": {\n display: \"block\",\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n header: {\n display: \"flex\",\n flexShrink: 0,\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement2),\n textAlign: \"left\",\n },\n footer: {\n marginTop: \"auto\",\n display: \"flex\",\n flexShrink: 0,\n ...shorthands.gap(tokens.spacingElement2),\n justifyContent: \"flex-end\",\n },\n title: {\n ...shorthands.margin(0),\n fontSize: tokens.textLg,\n lineHeight: tokens.leadingLg,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n },\n description: {\n ...shorthands.margin(0),\n color: tokens.grayA11,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n})\n\nconst XIcon = React.forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n function XIcon(props, ref) {\n return (\n <svg\n ref={ref}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M4.38333 5.31667L1.11667 8.58333C0.994445 8.70556 0.838889 8.76667 0.65 8.76667C0.461111 8.76667 0.305556 8.70556 0.183333 8.58333C0.0611111 8.46111 0 8.30556 0 8.11667C0 7.92778 0.0611111 7.77222 0.183333 7.65L3.45 4.38333L0.183333 1.11667C0.0611111 0.994445 0 0.838889 0 0.65C0 0.461111 0.0611111 0.305556 0.183333 0.183333C0.305556 0.0611111 0.461111 0 0.65 0C0.838889 0 0.994445 0.0611111 1.11667 0.183333L4.38333 3.45L7.65 0.183333C7.77222 0.0611111 7.92778 0 8.11667 0C8.30556 0 8.46111 0.0611111 8.58333 0.183333C8.70556 0.305556 8.76667 0.461111 8.76667 0.65C8.76667 0.838889 8.70556 0.994445 8.58333 1.11667L5.31667 4.38333L8.58333 7.65C8.70556 7.77222 8.76667 7.92778 8.76667 8.11667C8.76667 8.30556 8.70556 8.46111 8.58333 8.58333C8.46111 8.70556 8.30556 8.76667 8.11667 8.76667C7.92778 8.76667 7.77222 8.70556 7.65 8.58333L4.38333 5.31667Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\nexport type DrawerProps = React.ComponentProps<typeof DialogPrimitive.Root>\n\nexport const Drawer = React.forwardRef<HTMLElement, DrawerProps>(\n function Drawer(props, _ref) {\n return <DialogPrimitive.Root data-slot=\"drawer\" {...props} />\n }\n)\n\nexport type DrawerTriggerProps = React.ComponentProps<\n typeof DialogPrimitive.Trigger\n>\n\nexport const DrawerTrigger = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Trigger>,\n DrawerTriggerProps\n>(function DrawerTrigger({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Trigger\n ref={ref}\n data-slot=\"drawer-trigger\"\n {...{ [SLOT_ATTR]: \"drawer-trigger\" }}\n className={mergeClasses(\n !props.asChild && styles.nativeTrigger,\n className\n )}\n {...props}\n />\n )\n})\n\nexport type DrawerPortalProps = React.ComponentProps<\n typeof DialogPrimitive.Portal\n>\n\nexport const DrawerPortal = React.forwardRef<HTMLElement, DrawerPortalProps>(\n function DrawerPortal(props, _ref) {\n return (\n <DialogPrimitive.Portal\n data-slot=\"drawer-portal\"\n {...{ [SLOT_ATTR]: \"drawer-portal\" }}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerOverlayProps = React.ComponentProps<\n typeof DialogPrimitive.Overlay\n>\n\nexport const DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n DrawerOverlayProps\n>(function DrawerOverlay({ className, ...props }, ref) {\n const styles = useStyles()\n // The overlay is portalled too, so it re-stamps the boundary's appearance like the content (#8).\n const appearance = useAppearanceAttributes()\n\n return (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"drawer-overlay\"\n {...{ [SLOT_ATTR]: \"drawer-overlay\" }}\n {...appearance}\n className={mergeClasses(styles.overlay, className)}\n {...props}\n />\n )\n})\n\nexport type DrawerSide = \"left\" | \"right\" | \"top\" | \"bottom\"\n\nexport type DrawerContentProps = React.ComponentProps<\n typeof DialogPrimitive.Content\n> & {\n showCloseButton?: boolean\n /**\n * Accessible name of the built-in close button, read by screen readers. Pass a translated\n * string for any locale other than English. Defaults to \"Close\".\n */\n closeButtonLabel?: string\n side?: DrawerSide\n flush?: boolean\n}\n\nexport const DrawerContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n DrawerContentProps\n>(function DrawerContent(\n {\n className,\n children,\n showCloseButton = true,\n closeButtonLabel = \"Close\",\n side = \"right\",\n flush = false,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n // DENSITY-SPEC.md §4.4 — portal content boundary; see dialog.tsx's identical comment.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n\n return (\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"drawer-content\"\n {...{ [SLOT_ATTR]: \"drawer-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n data-side={side}\n className={mergeClasses(\n styles.content,\n styles[side],\n !flush && styles.contentPadding,\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"drawer-close\"\n {...{ [SLOT_ATTR]: \"drawer-close\" }}\n className={styles.closeButton}\n >\n <XIcon />\n <span className={styles.srOnly}>{closeButtonLabel}</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n )\n})\n\nexport type DrawerCloseProps = React.ComponentProps<\n typeof DialogPrimitive.Close\n>\n\nexport const DrawerClose = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Close>,\n DrawerCloseProps\n>(function DrawerClose({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Close\n ref={ref}\n data-slot=\"drawer-close\"\n {...{ [SLOT_ATTR]: \"drawer-close\" }}\n className={mergeClasses(\n !props.asChild && styles.nativeTrigger,\n styles.close,\n className\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Close>\n )\n})\n\nexport type DrawerHeaderProps = React.ComponentProps<\"div\">\n\nexport const DrawerHeader = React.forwardRef<HTMLDivElement, DrawerHeaderProps>(\n function DrawerHeader({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"drawer-header\"\n {...{ [SLOT_ATTR]: \"drawer-header\" }}\n className={mergeClasses(styles.header, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerFooterProps = React.ComponentProps<\"div\">\n\nexport const DrawerFooter = React.forwardRef<HTMLDivElement, DrawerFooterProps>(\n function DrawerFooter({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"drawer-footer\"\n {...{ [SLOT_ATTR]: \"drawer-footer\" }}\n className={mergeClasses(styles.footer, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerTitleProps = React.ComponentProps<\n typeof DialogPrimitive.Title\n>\n\nexport const DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n DrawerTitleProps\n>(function DrawerTitle({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"drawer-title\"\n {...{ [SLOT_ATTR]: \"drawer-title\" }}\n className={mergeClasses(styles.title, className)}\n {...props}\n />\n )\n})\n\nexport type DrawerDescriptionProps = React.ComponentProps<\n typeof DialogPrimitive.Description\n>\n\nexport const DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n DrawerDescriptionProps\n>(function DrawerDescription({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"drawer-description\"\n {...{ [SLOT_ATTR]: \"drawer-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n />\n )\n})\n"],"names":["useStyles","makeZenithStyles","nativeControl","shorthands","OVERLAY_Z_INDEX","boxModel","tokens.gray2","tokens.spacingGroup2","tokens.radius2xl","tokens.spacingElement1","tokens.grayA1","tokens.accentA8","tokens.spacingElement2","tokens.accentA11","tokens.accentSoft","tokens.textLg","tokens.leadingLg","tokens.fontWeightSemibold","tokens.grayA12","tokens.grayA11","tokens.textSm","tokens.leadingSm","XIcon","React","props","ref","jsx","Drawer","_ref","DialogPrimitive.Root","DrawerTrigger","className","styles","DialogPrimitive.Trigger","SLOT_ATTR","mergeClasses","DrawerPortal","DialogPrimitive.Portal","DrawerOverlay","appearance","useAppearanceAttributes","DialogPrimitive.Overlay","DrawerContent","children","showCloseButton","closeButtonLabel","side","flush","override","useDensity","jsxs","DialogPrimitive.Content","DialogPrimitive.Close","DrawerClose","DrawerHeader","DrawerFooter","DrawerTitle","DialogPrimitive.Title","DrawerDescription","DialogPrimitive.Description"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"drawer.js","sources":["../../../src/components/drawer/drawer.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst useStyles = makeZenithStyles({\n // For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the\n // child owns its own element and two atom sets would race for the same properties.\n nativeTrigger: {\n ...nativeControl,\n },\n overlay: {\n position: \"fixed\",\n ...shorthands.inset(0),\n zIndex: OVERLAY_Z_INDEX,\n backgroundColor: \"rgb(0 0 0 / 50%)\",\n \"&[data-state='open']\": {\n animationName: {\n from: { opacity: 0 },\n to: { opacity: 1 },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: { opacity: 1 },\n to: { opacity: 0 },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n content: {\n ...boxModel,\n backgroundColor: tokens.gray2,\n position: \"fixed\",\n zIndex: OVERLAY_Z_INDEX,\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingLayout1),\n ...shorthands.borderRadius(tokens.radius2xl),\n // v1 shadow-lg; elevation has no token in this package.\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n // Collapses the side slots' slide too: media rules sort after them at equal specificity.\n \"@media (prefers-reduced-motion: reduce)\": {\n animationDuration: \"0.01ms\",\n animationIterationCount: \"1\",\n \"&[data-state='open']\": {\n animationDuration: \"0.01ms\",\n },\n \"&[data-state='closed']\": {\n animationDuration: \"0.01ms\",\n },\n },\n },\n contentPadding: {\n ...boxModel,\n // Layout tier, unlike Dialog, AlertDialog and Popover: a drawer holds sections, not one group.\n ...shorthands.padding(tokens.spacingLayout1),\n },\n right: {\n ...boxModel,\n top: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n right: tokens.spacingElement1,\n height: \"calc(100% - 0.5rem)\",\n ...shorthands.borderLeft(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-state='open']\": {\n animationName: {\n from: {\n opacity: 0,\n transform: \"translateX(100%)\",\n },\n to: {\n opacity: 1,\n transform: \"translateX(0)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: {\n opacity: 1,\n transform: \"translateX(0)\",\n },\n to: {\n opacity: 0,\n transform: \"translateX(100%)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n left: {\n ...boxModel,\n top: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n left: tokens.spacingElement1,\n height: \"calc(100% - 0.5rem)\",\n ...shorthands.borderRight(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-state='open']\": {\n animationName: {\n from: {\n opacity: 0,\n transform: \"translateX(-100%)\",\n },\n to: {\n opacity: 1,\n transform: \"translateX(0)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: {\n opacity: 1,\n transform: \"translateX(0)\",\n },\n to: {\n opacity: 0,\n transform: \"translateX(-100%)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n top: {\n ...boxModel,\n left: tokens.spacingElement1,\n right: tokens.spacingElement1,\n top: tokens.spacingElement1,\n width: \"calc(100% - 0.5rem)\",\n ...shorthands.borderBottom(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-state='open']\": {\n animationName: {\n from: {\n opacity: 0,\n transform: \"translateY(-100%)\",\n },\n to: {\n opacity: 1,\n transform: \"translateY(0)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: {\n opacity: 1,\n transform: \"translateY(0)\",\n },\n to: {\n opacity: 0,\n transform: \"translateY(-100%)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n bottom: {\n ...boxModel,\n left: tokens.spacingElement1,\n right: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n width: \"calc(100% - 0.5rem)\",\n ...shorthands.borderTop(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-state='open']\": {\n animationName: {\n from: {\n opacity: 0,\n transform: \"translateY(100%)\",\n },\n to: {\n opacity: 1,\n transform: \"translateY(0)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n \"&[data-state='closed']\": {\n animationName: {\n from: {\n opacity: 1,\n transform: \"translateY(0)\",\n },\n to: {\n opacity: 0,\n transform: \"translateY(100%)\",\n },\n },\n animationDuration: \"150ms\",\n animationTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n },\n close: {\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n },\n closeButton: {\n ...nativeControl,\n position: \"absolute\",\n // Inset by the content padding so it lines up with the padded header.\n top: tokens.spacingLayout1,\n right: tokens.spacingLayout1,\n ...shorthands.padding(tokens.spacingElement2),\n // v1 rounded-full; no full-radius token exists in this package.\n borderRadius: \"9999px\",\n cursor: \"pointer\",\n color: tokens.accentA11,\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \":disabled\": {\n pointerEvents: \"none\",\n },\n \"& svg\": {\n display: \"block\",\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n header: {\n display: \"flex\",\n flexShrink: 0,\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement2),\n textAlign: \"left\",\n },\n footer: {\n marginTop: \"auto\",\n display: \"flex\",\n flexShrink: 0,\n ...shorthands.gap(tokens.spacingElement2),\n justifyContent: \"flex-end\",\n },\n title: {\n ...shorthands.margin(0),\n fontSize: tokens.textLg,\n lineHeight: tokens.leadingLg,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n },\n description: {\n ...shorthands.margin(0),\n color: tokens.grayA11,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n})\n\nconst XIcon = React.forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n function XIcon(props, ref) {\n return (\n <svg\n ref={ref}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M4.38333 5.31667L1.11667 8.58333C0.994445 8.70556 0.838889 8.76667 0.65 8.76667C0.461111 8.76667 0.305556 8.70556 0.183333 8.58333C0.0611111 8.46111 0 8.30556 0 8.11667C0 7.92778 0.0611111 7.77222 0.183333 7.65L3.45 4.38333L0.183333 1.11667C0.0611111 0.994445 0 0.838889 0 0.65C0 0.461111 0.0611111 0.305556 0.183333 0.183333C0.305556 0.0611111 0.461111 0 0.65 0C0.838889 0 0.994445 0.0611111 1.11667 0.183333L4.38333 3.45L7.65 0.183333C7.77222 0.0611111 7.92778 0 8.11667 0C8.30556 0 8.46111 0.0611111 8.58333 0.183333C8.70556 0.305556 8.76667 0.461111 8.76667 0.65C8.76667 0.838889 8.70556 0.994445 8.58333 1.11667L5.31667 4.38333L8.58333 7.65C8.70556 7.77222 8.76667 7.92778 8.76667 8.11667C8.76667 8.30556 8.70556 8.46111 8.58333 8.58333C8.46111 8.70556 8.30556 8.76667 8.11667 8.76667C7.92778 8.76667 7.77222 8.70556 7.65 8.58333L4.38333 5.31667Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\nexport type DrawerProps = React.ComponentProps<typeof DialogPrimitive.Root>\n\nexport const Drawer = React.forwardRef<HTMLElement, DrawerProps>(\n function Drawer(props, _ref) {\n return <DialogPrimitive.Root data-slot=\"drawer\" {...props} />\n }\n)\n\nexport type DrawerTriggerProps = React.ComponentProps<\n typeof DialogPrimitive.Trigger\n>\n\nexport const DrawerTrigger = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Trigger>,\n DrawerTriggerProps\n>(function DrawerTrigger({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Trigger\n ref={ref}\n data-slot=\"drawer-trigger\"\n {...{ [SLOT_ATTR]: \"drawer-trigger\" }}\n className={mergeClasses(\n !props.asChild && styles.nativeTrigger,\n className\n )}\n {...props}\n />\n )\n})\n\nexport type DrawerPortalProps = React.ComponentProps<\n typeof DialogPrimitive.Portal\n>\n\nexport const DrawerPortal = React.forwardRef<HTMLElement, DrawerPortalProps>(\n function DrawerPortal(props, _ref) {\n return (\n <DialogPrimitive.Portal\n data-slot=\"drawer-portal\"\n {...{ [SLOT_ATTR]: \"drawer-portal\" }}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerOverlayProps = React.ComponentProps<\n typeof DialogPrimitive.Overlay\n>\n\nexport const DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n DrawerOverlayProps\n>(function DrawerOverlay({ className, ...props }, ref) {\n const styles = useStyles()\n // The overlay is portalled too, so it re-stamps the boundary's appearance like the content (#8).\n const appearance = useAppearanceAttributes()\n\n return (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"drawer-overlay\"\n {...{ [SLOT_ATTR]: \"drawer-overlay\" }}\n {...appearance}\n className={mergeClasses(styles.overlay, className)}\n {...props}\n />\n )\n})\n\nexport type DrawerSide = \"left\" | \"right\" | \"top\" | \"bottom\"\n\nexport type DrawerContentProps = React.ComponentProps<\n typeof DialogPrimitive.Content\n> & {\n showCloseButton?: boolean\n /**\n * Accessible name of the built-in close button, read by screen readers. Pass a translated\n * string for any locale other than English. Defaults to \"Close\".\n */\n closeButtonLabel?: string\n side?: DrawerSide\n flush?: boolean\n}\n\nexport const DrawerContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n DrawerContentProps\n>(function DrawerContent(\n {\n className,\n children,\n showCloseButton = true,\n closeButtonLabel = \"Close\",\n side = \"right\",\n flush = false,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n // DENSITY-SPEC.md §4.4 — portal content boundary; see dialog.tsx's identical comment.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n\n return (\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"drawer-content\"\n {...{ [SLOT_ATTR]: \"drawer-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n data-side={side}\n className={mergeClasses(\n styles.content,\n styles[side],\n !flush && styles.contentPadding,\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"drawer-close\"\n {...{ [SLOT_ATTR]: \"drawer-close\" }}\n className={styles.closeButton}\n >\n <XIcon />\n <span className={styles.srOnly}>{closeButtonLabel}</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n )\n})\n\nexport type DrawerCloseProps = React.ComponentProps<\n typeof DialogPrimitive.Close\n>\n\nexport const DrawerClose = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Close>,\n DrawerCloseProps\n>(function DrawerClose({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Close\n ref={ref}\n data-slot=\"drawer-close\"\n {...{ [SLOT_ATTR]: \"drawer-close\" }}\n className={mergeClasses(\n !props.asChild && styles.nativeTrigger,\n styles.close,\n className\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Close>\n )\n})\n\nexport type DrawerHeaderProps = React.ComponentProps<\"div\">\n\nexport const DrawerHeader = React.forwardRef<HTMLDivElement, DrawerHeaderProps>(\n function DrawerHeader({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"drawer-header\"\n {...{ [SLOT_ATTR]: \"drawer-header\" }}\n className={mergeClasses(styles.header, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerFooterProps = React.ComponentProps<\"div\">\n\nexport const DrawerFooter = React.forwardRef<HTMLDivElement, DrawerFooterProps>(\n function DrawerFooter({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"drawer-footer\"\n {...{ [SLOT_ATTR]: \"drawer-footer\" }}\n className={mergeClasses(styles.footer, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerTitleProps = React.ComponentProps<\n typeof DialogPrimitive.Title\n>\n\nexport const DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n DrawerTitleProps\n>(function DrawerTitle({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"drawer-title\"\n {...{ [SLOT_ATTR]: \"drawer-title\" }}\n className={mergeClasses(styles.title, className)}\n {...props}\n />\n )\n})\n\nexport type DrawerDescriptionProps = React.ComponentProps<\n typeof DialogPrimitive.Description\n>\n\nexport const DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n DrawerDescriptionProps\n>(function DrawerDescription({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"drawer-description\"\n {...{ [SLOT_ATTR]: \"drawer-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n />\n )\n})\n"],"names":["useStyles","makeZenithStyles","nativeControl","shorthands","OVERLAY_Z_INDEX","boxModel","tokens.gray2","tokens.spacingLayout1","tokens.radius2xl","tokens.spacingElement1","tokens.grayA1","tokens.accentA8","tokens.spacingElement2","tokens.accentA11","tokens.accentSoft","tokens.textLg","tokens.leadingLg","tokens.fontWeightSemibold","tokens.grayA12","tokens.grayA11","tokens.textSm","tokens.leadingSm","XIcon","React","props","ref","jsx","Drawer","_ref","DialogPrimitive.Root","DrawerTrigger","className","styles","DialogPrimitive.Trigger","SLOT_ATTR","mergeClasses","DrawerPortal","DialogPrimitive.Portal","DrawerOverlay","appearance","useAppearanceAttributes","DialogPrimitive.Overlay","DrawerContent","children","showCloseButton","closeButtonLabel","side","flush","override","useDensity","jsxs","DialogPrimitive.Content","DialogPrimitive.Close","DrawerClose","DrawerHeader","DrawerFooter","DrawerTitle","DialogPrimitive.Title","DrawerDescription","DialogPrimitive.Description"],"mappings":"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"}
|
package/dist/tokens.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "GENERATED. Design token values for consumers that do not render this package's React components. Compile these into your own CSS under your own names at your own build time; do not reference this package's runtime custom properties, whose names are content-hashed and change with their values. `themes.light`/`themes.dark` are mode-resolved; `densities.compact`/`densities.normal`/`densities.comfortable` resolve the component layer's geometry tokens (WP9A-ACCEPTANCE-WP9B1) and carry no mode of their own — do not read a value out of `themes` for a key that only exists under `densities`, or the reverse. This file is copied verbatim to this package's public `tokens.json` export (`package.json`'s `build` script, `cp src/generated/values.generated.json dist/tokens.json`).",
|
|
3
3
|
"package": "@epilot/zenith-react",
|
|
4
|
-
"version": "0.2.0-next.
|
|
4
|
+
"version": "0.2.0-next.3",
|
|
5
5
|
"themes": {
|
|
6
6
|
"light": {
|
|
7
7
|
"accent-1": "#fcfdfe",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epilot/zenith-react",
|
|
3
|
-
"version": "0.2.0-next.
|
|
3
|
+
"version": "0.2.0-next.3",
|
|
4
4
|
"description": "Zenith React components, styled with Griffel and designed for isolated micro-frontend delivery",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -65,7 +65,8 @@
|
|
|
65
65
|
"gate:appearance-boundary": "node gates/appearance-boundary/build-and-run.mjs",
|
|
66
66
|
"gate:host-reset": "node gates/host-reset/build-and-run.mjs",
|
|
67
67
|
"gate:surface-composition": "node gates/surface-composition/build-and-run.mjs",
|
|
68
|
-
"
|
|
68
|
+
"gate:table-rules": "node gates/table-rules/build-and-run.mjs",
|
|
69
|
+
"gates": "bun run gate:vr && bun run gate:isolation && bun run gate:token-value-skew && bun run gate:class-salt-skew && bun run gate:cascade && bun run gate:lifecycle-commit-phase && bun run gate:dts-self-contained && bun run gate:a11y && bun run gate:palette-namespace && bun run gate:appearance-boundary && bun run gate:surface-composition && bun run gate:one-bare-specifier && bun run gate:host-reset && bun run gate:table-rules",
|
|
69
70
|
"migration:sweep": "bun scripts/migration-sweep.mjs",
|
|
70
71
|
"test:migration-sweep": "bun test scripts/migration-diagnostics.test.mjs scripts/migration-diagnostics-core.test.mjs scripts/migration-sweep-packed-cli.test.mjs scripts/migration-sweep-cli-guard.test.mjs scripts/build-diagnostic-identity.test.mjs",
|
|
71
72
|
"gate:one-bare-specifier": "node gates/one-bare-specifier.mjs",
|
|
@@ -74,7 +75,7 @@
|
|
|
74
75
|
"verify:consumer": "bun ../../scripts/verify-packed-consumer.ts"
|
|
75
76
|
},
|
|
76
77
|
"dependencies": {
|
|
77
|
-
"@epilot/zenith-runtime": "0.2.0-next.
|
|
78
|
+
"@epilot/zenith-runtime": "0.2.0-next.0"
|
|
78
79
|
},
|
|
79
80
|
"peerDependencies": {
|
|
80
81
|
"react": ">=18",
|
|
@@ -84,7 +85,7 @@
|
|
|
84
85
|
"@dnd-kit/core": "6.3.1",
|
|
85
86
|
"@dnd-kit/sortable": "10.0.0",
|
|
86
87
|
"@dnd-kit/utilities": "3.2.2",
|
|
87
|
-
"@epilot/zenith-tokens": "0.2.0-next.
|
|
88
|
+
"@epilot/zenith-tokens": "0.2.0-next.3",
|
|
88
89
|
"@radix-ui/react-accordion": "1.2.12",
|
|
89
90
|
"@radix-ui/react-alert-dialog": "1.1.15",
|
|
90
91
|
"@radix-ui/react-avatar": "1.1.10",
|