@fragments-sdk/ui 0.9.4 → 0.9.6
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/assets/ui.css +443 -247
- package/dist/blocks/components/index.d.ts +0 -2
- package/dist/blocks/components/index.d.ts.map +1 -1
- package/dist/codeblock.cjs +187 -184
- package/dist/codeblock.cjs.map +1 -1
- package/dist/codeblock.js +183 -180
- package/dist/codeblock.js.map +1 -1
- package/dist/components/Box/Box.module.scss.cjs +73 -0
- package/dist/components/Box/Box.module.scss.cjs.map +1 -1
- package/dist/components/Box/Box.module.scss.js +73 -0
- package/dist/components/Box/Box.module.scss.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +6 -0
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +6 -0
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.js.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +20 -23
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +20 -23
- package/dist/components/CodeBlock/CodeBlock.module.scss.js.map +1 -1
- package/dist/components/CodeBlock/index.d.ts +11 -7
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.module.scss.cjs +15 -15
- package/dist/components/Combobox/Combobox.module.scss.js +15 -15
- package/dist/components/DataTable/DataTable.module.scss.cjs +84 -0
- package/dist/components/DataTable/DataTable.module.scss.cjs.map +1 -0
- package/dist/components/DataTable/DataTable.module.scss.js +84 -0
- package/dist/components/DataTable/DataTable.module.scss.js.map +1 -0
- package/dist/components/DataTable/index.cjs +383 -0
- package/dist/components/DataTable/index.cjs.map +1 -0
- package/dist/components/DataTable/index.d.ts +78 -0
- package/dist/components/DataTable/index.d.ts.map +1 -0
- package/dist/components/DataTable/index.js +366 -0
- package/dist/components/DataTable/index.js.map +1 -0
- package/dist/components/Drawer/Drawer.module.scss.cjs +9 -0
- package/dist/components/Drawer/Drawer.module.scss.cjs.map +1 -1
- package/dist/components/Drawer/Drawer.module.scss.js +9 -0
- package/dist/components/Drawer/Drawer.module.scss.js.map +1 -1
- package/dist/components/Image/Image.module.scss.cjs +12 -0
- package/dist/components/Image/Image.module.scss.cjs.map +1 -1
- package/dist/components/Image/Image.module.scss.js +12 -0
- package/dist/components/Image/Image.module.scss.js.map +1 -1
- package/dist/components/Link/Link.module.scss.cjs +3 -0
- package/dist/components/Link/Link.module.scss.cjs.map +1 -1
- package/dist/components/Link/Link.module.scss.js +3 -0
- package/dist/components/Link/Link.module.scss.js.map +1 -1
- package/dist/components/List/List.module.scss.cjs +5 -0
- package/dist/components/List/List.module.scss.cjs.map +1 -1
- package/dist/components/List/List.module.scss.js +5 -0
- package/dist/components/List/List.module.scss.js.map +1 -1
- package/dist/components/Loading/Loading.module.scss.cjs +5 -0
- package/dist/components/Loading/Loading.module.scss.cjs.map +1 -1
- package/dist/components/Loading/Loading.module.scss.js +5 -0
- package/dist/components/Loading/Loading.module.scss.js.map +1 -1
- package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
- package/dist/components/Markdown/Markdown.module.scss.js +1 -1
- package/dist/components/Message/Message.module.scss.cjs +22 -16
- package/dist/components/Message/Message.module.scss.cjs.map +1 -1
- package/dist/components/Message/Message.module.scss.js +22 -16
- package/dist/components/Message/Message.module.scss.js.map +1 -1
- package/dist/components/Message/index.cjs +5 -3
- package/dist/components/Message/index.cjs.map +1 -1
- package/dist/components/Message/index.d.ts +5 -1
- package/dist/components/Message/index.d.ts.map +1 -1
- package/dist/components/Message/index.js +5 -3
- package/dist/components/Message/index.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +14 -0
- package/dist/components/Skeleton/Skeleton.module.scss.cjs.map +1 -1
- package/dist/components/Skeleton/Skeleton.module.scss.js +14 -0
- package/dist/components/Skeleton/Skeleton.module.scss.js.map +1 -1
- package/dist/components/Stack/Stack.module.scss.cjs +14 -0
- package/dist/components/Stack/Stack.module.scss.cjs.map +1 -1
- package/dist/components/Stack/Stack.module.scss.js +14 -0
- package/dist/components/Stack/Stack.module.scss.js.map +1 -1
- package/dist/components/Table/Table.module.scss.cjs +21 -36
- package/dist/components/Table/Table.module.scss.cjs.map +1 -1
- package/dist/components/Table/Table.module.scss.js +21 -36
- package/dist/components/Table/Table.module.scss.js.map +1 -1
- package/dist/components/Table/index.d.ts +35 -55
- package/dist/components/Table/index.d.ts.map +1 -1
- package/dist/components/Text/Text.module.scss.cjs +14 -0
- package/dist/components/Text/Text.module.scss.cjs.map +1 -1
- package/dist/components/Text/Text.module.scss.js +14 -0
- package/dist/components/Text/Text.module.scss.js.map +1 -1
- package/dist/components/Textarea/Textarea.module.scss.cjs +4 -0
- package/dist/components/Textarea/Textarea.module.scss.cjs.map +1 -1
- package/dist/components/Textarea/Textarea.module.scss.js +4 -0
- package/dist/components/Textarea/Textarea.module.scss.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +5 -0
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +5 -0
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js.map +1 -1
- package/dist/index.cjs +119 -117
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/table.cjs +44 -262
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +47 -248
- package/dist/table.js.map +1 -1
- package/fragments.json +1 -1
- package/package.json +110 -118
- package/src/blocks/components/index.ts +0 -3
- package/src/components/CodeBlock/CodeBlock.module.scss +16 -34
- package/src/components/CodeBlock/index.tsx +351 -345
- package/src/components/Combobox/Combobox.module.scss +13 -9
- package/src/components/ConversationList/ConversationList.fragment.tsx +96 -129
- package/src/components/DataTable/DataTable.fragment.tsx +754 -0
- package/src/components/DataTable/DataTable.module.scss +300 -0
- package/src/components/DataTable/DataTable.test.tsx +224 -0
- package/src/components/DataTable/index.tsx +533 -0
- package/src/components/Message/Message.fragment.tsx +34 -0
- package/src/components/Message/Message.module.scss +11 -0
- package/src/components/Message/index.tsx +12 -3
- package/src/components/Table/Table.fragment.tsx +190 -175
- package/src/components/Table/Table.module.scss +15 -88
- package/src/components/Table/Table.test.tsx +184 -94
- package/src/components/Table/index.tsx +105 -374
- package/src/index.ts +15 -4
- package/src/tokens/_computed.scss +7 -6
- package/src/tokens/_density.scss +87 -47
- package/src/tokens/_variables.scss +46 -31
- package/dist/blocks/components/DataTable.d.ts +0 -19
- package/dist/blocks/components/DataTable.d.ts.map +0 -1
- package/src/blocks/components/DataTable.tsx +0 -124
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import '../../styles/globals.scss';
|
|
3
|
+
/** Column definition compatible with @tanstack/react-table */
|
|
4
|
+
export type ColumnDef<TData = unknown, TValue = unknown> = {
|
|
5
|
+
id?: string;
|
|
6
|
+
accessorKey?: string;
|
|
7
|
+
accessorFn?: (row: TData) => TValue;
|
|
8
|
+
header?: string | ((context: any) => React.ReactNode);
|
|
9
|
+
cell?: string | ((context: any) => React.ReactNode);
|
|
10
|
+
size?: number;
|
|
11
|
+
minSize?: number;
|
|
12
|
+
maxSize?: number;
|
|
13
|
+
enableSorting?: boolean;
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
};
|
|
16
|
+
export type SortingState = Array<{
|
|
17
|
+
id: string;
|
|
18
|
+
desc: boolean;
|
|
19
|
+
}>;
|
|
20
|
+
export type RowSelectionState = Record<string, boolean>;
|
|
21
|
+
export type ExpandedState = true | Record<string, boolean>;
|
|
22
|
+
type OnChangeFn<T> = ((updaterOrValue: T | ((prev: T) => T)) => void);
|
|
23
|
+
export type DataTableColumn<T> = ColumnDef<T, unknown>;
|
|
24
|
+
export interface DataTableProps<T> extends Omit<React.HTMLAttributes<HTMLTableElement>, 'onClick'> {
|
|
25
|
+
/** Column definitions */
|
|
26
|
+
columns: DataTableColumn<T>[];
|
|
27
|
+
/** Data array */
|
|
28
|
+
data: T[];
|
|
29
|
+
/** Unique key extractor for each row */
|
|
30
|
+
getRowId?: (row: T) => string;
|
|
31
|
+
/** Enable sorting */
|
|
32
|
+
sortable?: boolean;
|
|
33
|
+
/** Controlled sorting state */
|
|
34
|
+
sorting?: SortingState;
|
|
35
|
+
/** Sorting change handler */
|
|
36
|
+
onSortingChange?: OnChangeFn<SortingState>;
|
|
37
|
+
/** Enable row selection */
|
|
38
|
+
selectable?: boolean;
|
|
39
|
+
/** Show checkbox column for row selection */
|
|
40
|
+
showCheckbox?: boolean;
|
|
41
|
+
/** Controlled selection state */
|
|
42
|
+
rowSelection?: RowSelectionState;
|
|
43
|
+
/** Selection change handler */
|
|
44
|
+
onRowSelectionChange?: OnChangeFn<RowSelectionState>;
|
|
45
|
+
/** Row click handler */
|
|
46
|
+
onRowClick?: (row: T) => void;
|
|
47
|
+
/** Extract sub-rows from a row for expandable tree tables */
|
|
48
|
+
getSubRows?: (row: T) => T[] | undefined;
|
|
49
|
+
/** Controlled expanded state */
|
|
50
|
+
expanded?: ExpandedState;
|
|
51
|
+
/** Expanded state change handler */
|
|
52
|
+
onExpandedChange?: OnChangeFn<ExpandedState>;
|
|
53
|
+
/** Empty state message */
|
|
54
|
+
emptyMessage?: string;
|
|
55
|
+
/** Size variant */
|
|
56
|
+
size?: 'sm' | 'md';
|
|
57
|
+
/** Visible caption for the table (recommended for accessibility) */
|
|
58
|
+
caption?: string;
|
|
59
|
+
/** Hide the caption visually but keep it for screen readers */
|
|
60
|
+
captionHidden?: boolean;
|
|
61
|
+
/** Show alternating row backgrounds */
|
|
62
|
+
striped?: boolean;
|
|
63
|
+
/** Wrap table in a bordered container */
|
|
64
|
+
bordered?: boolean;
|
|
65
|
+
}
|
|
66
|
+
declare function DataTableRoot<T>({ columns: userColumns, data, getRowId, sortable, sorting: controlledSorting, onSortingChange, selectable, showCheckbox, rowSelection: controlledRowSelection, onRowSelectionChange, onRowClick, getSubRows, expanded: controlledExpanded, onExpandedChange, emptyMessage, size, className, caption, captionHidden, striped, bordered, 'aria-label': ariaLabel, 'aria-describedby': ariaDescribedBy, ...htmlProps }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element | null;
|
|
67
|
+
export declare function createColumns<T>(columns: Array<{
|
|
68
|
+
key: string;
|
|
69
|
+
header: string;
|
|
70
|
+
width?: number;
|
|
71
|
+
cell?: (row: T) => React.ReactNode;
|
|
72
|
+
}>): DataTableColumn<T>[];
|
|
73
|
+
export declare const DataTable: typeof DataTableRoot & {
|
|
74
|
+
Root: typeof DataTableRoot;
|
|
75
|
+
Columns: typeof createColumns;
|
|
76
|
+
};
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import styles from "./DataTable.module.scss.js";
|
|
5
|
+
import { Checkbox } from "../Checkbox/index.js";
|
|
6
|
+
let _useReactTable = null;
|
|
7
|
+
let _getCoreRowModel = null;
|
|
8
|
+
let _getSortedRowModel = null;
|
|
9
|
+
let _getExpandedRowModel = null;
|
|
10
|
+
let _flexRender = null;
|
|
11
|
+
let _tableLoaded = false;
|
|
12
|
+
let _tableFailed = false;
|
|
13
|
+
function loadTableDeps() {
|
|
14
|
+
if (_tableLoaded) return;
|
|
15
|
+
_tableLoaded = true;
|
|
16
|
+
try {
|
|
17
|
+
const rt = require("@tanstack/react-table");
|
|
18
|
+
_useReactTable = rt.useReactTable;
|
|
19
|
+
_getCoreRowModel = rt.getCoreRowModel;
|
|
20
|
+
_getSortedRowModel = rt.getSortedRowModel;
|
|
21
|
+
_getExpandedRowModel = rt.getExpandedRowModel;
|
|
22
|
+
_flexRender = rt.flexRender;
|
|
23
|
+
} catch {
|
|
24
|
+
_tableFailed = true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function DataTableRoot({
|
|
28
|
+
columns: userColumns,
|
|
29
|
+
data,
|
|
30
|
+
getRowId,
|
|
31
|
+
sortable = false,
|
|
32
|
+
sorting: controlledSorting,
|
|
33
|
+
onSortingChange,
|
|
34
|
+
selectable = false,
|
|
35
|
+
showCheckbox = false,
|
|
36
|
+
rowSelection: controlledRowSelection,
|
|
37
|
+
onRowSelectionChange,
|
|
38
|
+
onRowClick,
|
|
39
|
+
getSubRows,
|
|
40
|
+
expanded: controlledExpanded,
|
|
41
|
+
onExpandedChange,
|
|
42
|
+
emptyMessage = "No data available",
|
|
43
|
+
size = "md",
|
|
44
|
+
className,
|
|
45
|
+
caption,
|
|
46
|
+
captionHidden = false,
|
|
47
|
+
striped = false,
|
|
48
|
+
bordered = false,
|
|
49
|
+
"aria-label": ariaLabel,
|
|
50
|
+
"aria-describedby": ariaDescribedBy,
|
|
51
|
+
...htmlProps
|
|
52
|
+
}) {
|
|
53
|
+
loadTableDeps();
|
|
54
|
+
const [internalSorting, setInternalSorting] = React.useState([]);
|
|
55
|
+
const sorting = controlledSorting ?? internalSorting;
|
|
56
|
+
const handleSortingChange = onSortingChange ?? setInternalSorting;
|
|
57
|
+
const [internalRowSelection, setInternalRowSelection] = React.useState({});
|
|
58
|
+
const rowSelection = controlledRowSelection ?? internalRowSelection;
|
|
59
|
+
const handleRowSelectionChange = onRowSelectionChange ?? setInternalRowSelection;
|
|
60
|
+
const [internalExpanded, setInternalExpanded] = React.useState({});
|
|
61
|
+
const expanded = controlledExpanded ?? internalExpanded;
|
|
62
|
+
const handleExpandedChange = onExpandedChange ?? setInternalExpanded;
|
|
63
|
+
const columns = React.useMemo(() => {
|
|
64
|
+
if (!showCheckbox || !selectable) return userColumns;
|
|
65
|
+
const checkboxColumn = {
|
|
66
|
+
id: "__checkbox",
|
|
67
|
+
size: 40,
|
|
68
|
+
minSize: 40,
|
|
69
|
+
maxSize: 40,
|
|
70
|
+
enableSorting: false,
|
|
71
|
+
header: ({ table: table2 }) => /* @__PURE__ */ jsx(
|
|
72
|
+
Checkbox,
|
|
73
|
+
{
|
|
74
|
+
size: "sm",
|
|
75
|
+
checked: table2.getIsAllRowsSelected(),
|
|
76
|
+
indeterminate: table2.getIsSomeRowsSelected(),
|
|
77
|
+
onCheckedChange: () => table2.toggleAllRowsSelected(),
|
|
78
|
+
"aria-label": "Select all rows"
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
cell: ({ row }) => /* @__PURE__ */ jsx(
|
|
82
|
+
Checkbox,
|
|
83
|
+
{
|
|
84
|
+
size: "sm",
|
|
85
|
+
checked: row.getIsSelected(),
|
|
86
|
+
disabled: !row.getCanSelect(),
|
|
87
|
+
onCheckedChange: () => row.toggleSelected(),
|
|
88
|
+
"aria-label": `Select row ${row.id}`
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
};
|
|
92
|
+
return [checkboxColumn, ...userColumns];
|
|
93
|
+
}, [userColumns, showCheckbox, selectable]);
|
|
94
|
+
if (_tableFailed || !_useReactTable) {
|
|
95
|
+
if (_tableFailed && process.env.NODE_ENV === "development") {
|
|
96
|
+
console.warn(
|
|
97
|
+
"[@fragments-sdk/ui] DataTable: @tanstack/react-table is not installed. Install it with: npm install @tanstack/react-table"
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const hasSubRows = !!getSubRows;
|
|
103
|
+
const table = _useReactTable({
|
|
104
|
+
data,
|
|
105
|
+
columns,
|
|
106
|
+
getRowId,
|
|
107
|
+
getSubRows,
|
|
108
|
+
getCoreRowModel: _getCoreRowModel(),
|
|
109
|
+
getSortedRowModel: sortable ? _getSortedRowModel() : void 0,
|
|
110
|
+
getExpandedRowModel: hasSubRows && _getExpandedRowModel ? _getExpandedRowModel() : void 0,
|
|
111
|
+
state: {
|
|
112
|
+
sorting: sortable ? sorting : void 0,
|
|
113
|
+
rowSelection: selectable ? rowSelection : void 0,
|
|
114
|
+
expanded: hasSubRows ? expanded : void 0
|
|
115
|
+
},
|
|
116
|
+
onSortingChange: sortable ? handleSortingChange : void 0,
|
|
117
|
+
onRowSelectionChange: selectable ? handleRowSelectionChange : void 0,
|
|
118
|
+
onExpandedChange: hasSubRows ? handleExpandedChange : void 0,
|
|
119
|
+
enableRowSelection: selectable,
|
|
120
|
+
enableSorting: sortable,
|
|
121
|
+
enableExpanding: hasSubRows
|
|
122
|
+
});
|
|
123
|
+
const isEmpty = data.length === 0;
|
|
124
|
+
const hasExplicitColumnSizing = React.useMemo(
|
|
125
|
+
() => columns.some(
|
|
126
|
+
(column) => column.size !== void 0 || column.minSize !== void 0 || column.maxSize !== void 0
|
|
127
|
+
),
|
|
128
|
+
[columns]
|
|
129
|
+
);
|
|
130
|
+
const rootClasses = [
|
|
131
|
+
styles.table,
|
|
132
|
+
hasExplicitColumnSizing && styles.fixedLayout,
|
|
133
|
+
styles[size],
|
|
134
|
+
striped && styles.striped,
|
|
135
|
+
className
|
|
136
|
+
].filter(Boolean).join(" ");
|
|
137
|
+
const getColumnSizeStyle = (column) => {
|
|
138
|
+
const { size: size2, minSize, maxSize } = column.columnDef;
|
|
139
|
+
const hasExplicitSize = size2 !== void 0 || minSize !== void 0 || maxSize !== void 0;
|
|
140
|
+
if (!hasExplicitSize) {
|
|
141
|
+
return void 0;
|
|
142
|
+
}
|
|
143
|
+
const resolvedSize = column.getSize();
|
|
144
|
+
return {
|
|
145
|
+
width: resolvedSize,
|
|
146
|
+
minWidth: minSize ?? resolvedSize,
|
|
147
|
+
maxWidth: maxSize ?? resolvedSize
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
if (isEmpty) {
|
|
151
|
+
return /* @__PURE__ */ jsx("div", { className: styles.emptyState, children: /* @__PURE__ */ jsx("span", { className: styles.emptyMessage, children: emptyMessage }) });
|
|
152
|
+
}
|
|
153
|
+
const isInteractiveTarget = (target, currentTarget) => {
|
|
154
|
+
if (!(target instanceof Element)) return false;
|
|
155
|
+
const interactiveElement = target.closest(
|
|
156
|
+
'button, a, input, select, textarea, [role="button"], [role="link"], [role="checkbox"], [role="switch"]'
|
|
157
|
+
);
|
|
158
|
+
return Boolean(interactiveElement && currentTarget.contains(interactiveElement));
|
|
159
|
+
};
|
|
160
|
+
return /* @__PURE__ */ jsx("div", { className: [styles.wrapper, bordered && styles.bordered].filter(Boolean).join(" "), children: /* @__PURE__ */ jsxs(
|
|
161
|
+
"table",
|
|
162
|
+
{
|
|
163
|
+
...htmlProps,
|
|
164
|
+
className: rootClasses,
|
|
165
|
+
"aria-label": ariaLabel,
|
|
166
|
+
"aria-describedby": ariaDescribedBy,
|
|
167
|
+
children: [
|
|
168
|
+
caption && /* @__PURE__ */ jsx("caption", { className: captionHidden ? styles.captionHidden : styles.caption, children: caption }),
|
|
169
|
+
/* @__PURE__ */ jsx("thead", { className: styles.thead, children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx("tr", { className: styles.headerRow, children: headerGroup.headers.map((header) => {
|
|
170
|
+
const canSort = sortable && header.column.getCanSort();
|
|
171
|
+
const sortDirection = header.column.getIsSorted();
|
|
172
|
+
const toggleSorting = canSort ? header.column.getToggleSortingHandler() : void 0;
|
|
173
|
+
return /* @__PURE__ */ jsx(
|
|
174
|
+
"th",
|
|
175
|
+
{
|
|
176
|
+
className: [styles.th, canSort && styles.thSortable].filter(Boolean).join(" "),
|
|
177
|
+
style: getColumnSizeStyle(header.column),
|
|
178
|
+
scope: "col",
|
|
179
|
+
"aria-sort": sortDirection ? sortDirection === "asc" ? "ascending" : "descending" : canSort ? "none" : void 0,
|
|
180
|
+
children: canSort ? /* @__PURE__ */ jsxs(
|
|
181
|
+
"button",
|
|
182
|
+
{
|
|
183
|
+
type: "button",
|
|
184
|
+
className: styles.sortButton,
|
|
185
|
+
onClick: toggleSorting,
|
|
186
|
+
children: [
|
|
187
|
+
/* @__PURE__ */ jsx("span", { className: styles.headerContent, children: header.isPlaceholder ? null : _flexRender(
|
|
188
|
+
header.column.columnDef.header,
|
|
189
|
+
header.getContext()
|
|
190
|
+
) }),
|
|
191
|
+
/* @__PURE__ */ jsx("span", { className: styles.sortIndicator, "aria-hidden": "true", children: sortDirection === "asc" ? /* @__PURE__ */ jsx(SortAscIcon, {}) : sortDirection === "desc" ? /* @__PURE__ */ jsx(SortDescIcon, {}) : /* @__PURE__ */ jsx(SortIcon, {}) })
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
) : /* @__PURE__ */ jsx("div", { className: styles.headerContent, children: header.isPlaceholder ? null : _flexRender(
|
|
195
|
+
header.column.columnDef.header,
|
|
196
|
+
header.getContext()
|
|
197
|
+
) })
|
|
198
|
+
},
|
|
199
|
+
header.id
|
|
200
|
+
);
|
|
201
|
+
}) }, headerGroup.id)) }),
|
|
202
|
+
/* @__PURE__ */ jsx("tbody", { className: styles.tbody, children: table.getRowModel().rows.map((row) => {
|
|
203
|
+
const isClickable = !!onRowClick;
|
|
204
|
+
const isSelected = selectable ? row.getIsSelected() : false;
|
|
205
|
+
const depth = row.depth ?? 0;
|
|
206
|
+
const canExpand = hasSubRows && row.getCanExpand();
|
|
207
|
+
const handleRowClick = (event) => {
|
|
208
|
+
if (!onRowClick) return;
|
|
209
|
+
if (isInteractiveTarget(event.target, event.currentTarget)) return;
|
|
210
|
+
onRowClick(row.original);
|
|
211
|
+
};
|
|
212
|
+
const handleRowKeyDown = (event) => {
|
|
213
|
+
if (!onRowClick) return;
|
|
214
|
+
if (isInteractiveTarget(event.target, event.currentTarget)) return;
|
|
215
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
216
|
+
event.preventDefault();
|
|
217
|
+
onRowClick(row.original);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
return /* @__PURE__ */ jsx(
|
|
221
|
+
"tr",
|
|
222
|
+
{
|
|
223
|
+
className: [
|
|
224
|
+
styles.row,
|
|
225
|
+
isClickable && styles.clickable,
|
|
226
|
+
isSelected && styles.selected,
|
|
227
|
+
depth > 0 && styles.subRow
|
|
228
|
+
].filter(Boolean).join(" "),
|
|
229
|
+
onClick: isClickable ? handleRowClick : void 0,
|
|
230
|
+
onKeyDown: isClickable ? handleRowKeyDown : void 0,
|
|
231
|
+
tabIndex: isClickable ? 0 : void 0,
|
|
232
|
+
"data-selected": isSelected || void 0,
|
|
233
|
+
"data-depth": depth > 0 ? depth : void 0,
|
|
234
|
+
children: row.getVisibleCells().map((cell, cellIndex) => {
|
|
235
|
+
const isFirstDataCell = hasSubRows && cellIndex === (showCheckbox && selectable ? 1 : 0);
|
|
236
|
+
return /* @__PURE__ */ jsx(
|
|
237
|
+
"td",
|
|
238
|
+
{
|
|
239
|
+
className: styles.td,
|
|
240
|
+
style: {
|
|
241
|
+
...getColumnSizeStyle(cell.column),
|
|
242
|
+
...isFirstDataCell && depth > 0 ? { paddingLeft: `${depth * 24 + 12}px` } : void 0
|
|
243
|
+
},
|
|
244
|
+
children: isFirstDataCell && canExpand ? /* @__PURE__ */ jsxs("span", { className: styles.expandCell, children: [
|
|
245
|
+
/* @__PURE__ */ jsx(
|
|
246
|
+
"button",
|
|
247
|
+
{
|
|
248
|
+
type: "button",
|
|
249
|
+
className: styles.expandButton,
|
|
250
|
+
onClick: row.getToggleExpandedHandler(),
|
|
251
|
+
"aria-label": row.getIsExpanded() ? "Collapse row" : "Expand row",
|
|
252
|
+
"aria-expanded": row.getIsExpanded(),
|
|
253
|
+
children: /* @__PURE__ */ jsx(ExpandIcon, { expanded: row.getIsExpanded() })
|
|
254
|
+
}
|
|
255
|
+
),
|
|
256
|
+
_flexRender(cell.column.columnDef.cell, cell.getContext())
|
|
257
|
+
] }) : _flexRender(cell.column.columnDef.cell, cell.getContext())
|
|
258
|
+
},
|
|
259
|
+
cell.id
|
|
260
|
+
);
|
|
261
|
+
})
|
|
262
|
+
},
|
|
263
|
+
row.id
|
|
264
|
+
);
|
|
265
|
+
}) })
|
|
266
|
+
]
|
|
267
|
+
}
|
|
268
|
+
) });
|
|
269
|
+
}
|
|
270
|
+
function ExpandIcon({ expanded }) {
|
|
271
|
+
return /* @__PURE__ */ jsx(
|
|
272
|
+
"svg",
|
|
273
|
+
{
|
|
274
|
+
width: "12",
|
|
275
|
+
height: "12",
|
|
276
|
+
viewBox: "0 0 12 12",
|
|
277
|
+
fill: "none",
|
|
278
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
279
|
+
"aria-hidden": "true",
|
|
280
|
+
style: {
|
|
281
|
+
transform: expanded ? "rotate(90deg)" : void 0,
|
|
282
|
+
transition: "transform 150ms ease"
|
|
283
|
+
},
|
|
284
|
+
children: /* @__PURE__ */ jsx("path", { d: "M4.5 2.5L8 6L4.5 9.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
function SortIcon() {
|
|
289
|
+
return /* @__PURE__ */ jsxs(
|
|
290
|
+
"svg",
|
|
291
|
+
{
|
|
292
|
+
width: "12",
|
|
293
|
+
height: "12",
|
|
294
|
+
viewBox: "0 0 12 12",
|
|
295
|
+
fill: "none",
|
|
296
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
297
|
+
"aria-hidden": "true",
|
|
298
|
+
children: [
|
|
299
|
+
/* @__PURE__ */ jsx(
|
|
300
|
+
"path",
|
|
301
|
+
{
|
|
302
|
+
d: "M6 2L8.5 5H3.5L6 2Z",
|
|
303
|
+
fill: "currentColor",
|
|
304
|
+
opacity: "0.3"
|
|
305
|
+
}
|
|
306
|
+
),
|
|
307
|
+
/* @__PURE__ */ jsx(
|
|
308
|
+
"path",
|
|
309
|
+
{
|
|
310
|
+
d: "M6 10L3.5 7H8.5L6 10Z",
|
|
311
|
+
fill: "currentColor",
|
|
312
|
+
opacity: "0.3"
|
|
313
|
+
}
|
|
314
|
+
)
|
|
315
|
+
]
|
|
316
|
+
}
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
function SortAscIcon() {
|
|
320
|
+
return /* @__PURE__ */ jsx(
|
|
321
|
+
"svg",
|
|
322
|
+
{
|
|
323
|
+
width: "12",
|
|
324
|
+
height: "12",
|
|
325
|
+
viewBox: "0 0 12 12",
|
|
326
|
+
fill: "none",
|
|
327
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
328
|
+
"aria-hidden": "true",
|
|
329
|
+
children: /* @__PURE__ */ jsx("path", { d: "M6 2L8.5 5H3.5L6 2Z", fill: "currentColor" })
|
|
330
|
+
}
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
function SortDescIcon() {
|
|
334
|
+
return /* @__PURE__ */ jsx(
|
|
335
|
+
"svg",
|
|
336
|
+
{
|
|
337
|
+
width: "12",
|
|
338
|
+
height: "12",
|
|
339
|
+
viewBox: "0 0 12 12",
|
|
340
|
+
fill: "none",
|
|
341
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
342
|
+
"aria-hidden": "true",
|
|
343
|
+
children: /* @__PURE__ */ jsx("path", { d: "M6 10L3.5 7H8.5L6 10Z", fill: "currentColor" })
|
|
344
|
+
}
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
function createColumns(columns) {
|
|
348
|
+
return columns.map((col) => ({
|
|
349
|
+
id: col.key,
|
|
350
|
+
accessorKey: col.key,
|
|
351
|
+
header: col.header,
|
|
352
|
+
size: col.width,
|
|
353
|
+
minSize: col.width,
|
|
354
|
+
maxSize: col.width,
|
|
355
|
+
cell: col.cell ? ({ row }) => col.cell(row.original) : ({ getValue }) => getValue() ?? "--"
|
|
356
|
+
}));
|
|
357
|
+
}
|
|
358
|
+
const DataTable = Object.assign(DataTableRoot, {
|
|
359
|
+
Root: DataTableRoot,
|
|
360
|
+
Columns: createColumns
|
|
361
|
+
});
|
|
362
|
+
export {
|
|
363
|
+
DataTable,
|
|
364
|
+
createColumns
|
|
365
|
+
};
|
|
366
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/DataTable/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n// Import globals to ensure CSS variables are defined\nimport '../../styles/globals.scss';\nimport styles from './DataTable.module.scss';\nimport { Checkbox } from '../Checkbox';\n\n// ============================================\n// Types (self-owned — no external dependency for types)\n// ============================================\n\n/** Column definition compatible with @tanstack/react-table */\nexport type ColumnDef<TData = unknown, TValue = unknown> = {\n id?: string;\n accessorKey?: string;\n accessorFn?: (row: TData) => TValue;\n header?: string | ((context: any) => React.ReactNode);\n cell?: string | ((context: any) => React.ReactNode);\n size?: number;\n minSize?: number;\n maxSize?: number;\n enableSorting?: boolean;\n [key: string]: unknown;\n};\n\nexport type SortingState = Array<{ id: string; desc: boolean }>;\nexport type RowSelectionState = Record<string, boolean>;\nexport type ExpandedState = true | Record<string, boolean>;\ntype OnChangeFn<T> = ((updaterOrValue: T | ((prev: T) => T)) => void);\n\nexport type DataTableColumn<T> = ColumnDef<T, unknown>;\n\n// ============================================\n// Lazy-loaded dependency (@tanstack/react-table)\n// ============================================\n\nlet _useReactTable: any = null;\nlet _getCoreRowModel: any = null;\nlet _getSortedRowModel: any = null;\nlet _getExpandedRowModel: any = null;\nlet _flexRender: any = null;\nlet _tableLoaded = false;\nlet _tableFailed = false;\n\nfunction loadTableDeps() {\n if (_tableLoaded) return;\n _tableLoaded = true;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const rt = require('@tanstack/react-table');\n _useReactTable = rt.useReactTable;\n _getCoreRowModel = rt.getCoreRowModel;\n _getSortedRowModel = rt.getSortedRowModel;\n _getExpandedRowModel = rt.getExpandedRowModel;\n _flexRender = rt.flexRender;\n } catch {\n _tableFailed = true;\n }\n}\n\nexport interface DataTableProps<T> extends Omit<React.HTMLAttributes<HTMLTableElement>, 'onClick'> {\n /** Column definitions */\n columns: DataTableColumn<T>[];\n /** Data array */\n data: T[];\n /** Unique key extractor for each row */\n getRowId?: (row: T) => string;\n /** Enable sorting */\n sortable?: boolean;\n /** Controlled sorting state */\n sorting?: SortingState;\n /** Sorting change handler */\n onSortingChange?: OnChangeFn<SortingState>;\n /** Enable row selection */\n selectable?: boolean;\n /** Show checkbox column for row selection */\n showCheckbox?: boolean;\n /** Controlled selection state */\n rowSelection?: RowSelectionState;\n /** Selection change handler */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n /** Row click handler */\n onRowClick?: (row: T) => void;\n /** Extract sub-rows from a row for expandable tree tables */\n getSubRows?: (row: T) => T[] | undefined;\n /** Controlled expanded state */\n expanded?: ExpandedState;\n /** Expanded state change handler */\n onExpandedChange?: OnChangeFn<ExpandedState>;\n /** Empty state message */\n emptyMessage?: string;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Visible caption for the table (recommended for accessibility) */\n caption?: string;\n /** Hide the caption visually but keep it for screen readers */\n captionHidden?: boolean;\n /** Show alternating row backgrounds */\n striped?: boolean;\n /** Wrap table in a bordered container */\n bordered?: boolean;\n}\n\nfunction DataTableRoot<T>({\n columns: userColumns,\n data,\n getRowId,\n sortable = false,\n sorting: controlledSorting,\n onSortingChange,\n selectable = false,\n showCheckbox = false,\n rowSelection: controlledRowSelection,\n onRowSelectionChange,\n onRowClick,\n getSubRows,\n expanded: controlledExpanded,\n onExpandedChange,\n emptyMessage = 'No data available',\n size = 'md',\n className,\n caption,\n captionHidden = false,\n striped = false,\n bordered = false,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...htmlProps\n}: DataTableProps<T>) {\n loadTableDeps();\n\n // Internal sorting state when uncontrolled\n const [internalSorting, setInternalSorting] = React.useState<SortingState>([]);\n const sorting = controlledSorting ?? internalSorting;\n const handleSortingChange = onSortingChange ?? setInternalSorting;\n\n // Internal selection state when uncontrolled\n const [internalRowSelection, setInternalRowSelection] = React.useState<RowSelectionState>({});\n const rowSelection = controlledRowSelection ?? internalRowSelection;\n const handleRowSelectionChange = onRowSelectionChange ?? setInternalRowSelection;\n\n // Internal expanded state when uncontrolled\n const [internalExpanded, setInternalExpanded] = React.useState<ExpandedState>({});\n const expanded = controlledExpanded ?? internalExpanded;\n const handleExpandedChange = onExpandedChange ?? setInternalExpanded;\n\n // Build columns with optional checkbox prepended\n const columns = React.useMemo(() => {\n if (!showCheckbox || !selectable) return userColumns;\n\n const checkboxColumn: DataTableColumn<T> = {\n id: '__checkbox',\n size: 40,\n minSize: 40,\n maxSize: 40,\n enableSorting: false,\n header: ({ table }: any) => (\n <Checkbox\n size=\"sm\"\n checked={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onCheckedChange={() => table.toggleAllRowsSelected()}\n aria-label=\"Select all rows\"\n />\n ),\n cell: ({ row }: any) => (\n <Checkbox\n size=\"sm\"\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onCheckedChange={() => row.toggleSelected()}\n aria-label={`Select row ${row.id}`}\n />\n ),\n };\n\n return [checkboxColumn, ...userColumns];\n }, [userColumns, showCheckbox, selectable]);\n\n if (_tableFailed || !_useReactTable) {\n if (_tableFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] DataTable: @tanstack/react-table is not installed. ' +\n 'Install it with: npm install @tanstack/react-table'\n );\n }\n return null;\n }\n\n const hasSubRows = !!getSubRows;\n\n const table = _useReactTable({\n data,\n columns,\n getRowId,\n getSubRows: getSubRows as any,\n getCoreRowModel: _getCoreRowModel(),\n getSortedRowModel: sortable ? _getSortedRowModel() : undefined,\n getExpandedRowModel: hasSubRows && _getExpandedRowModel ? _getExpandedRowModel() : undefined,\n state: {\n sorting: sortable ? sorting : undefined,\n rowSelection: selectable ? rowSelection : undefined,\n expanded: hasSubRows ? expanded : undefined,\n },\n onSortingChange: sortable ? handleSortingChange : undefined,\n onRowSelectionChange: selectable ? handleRowSelectionChange : undefined,\n onExpandedChange: hasSubRows ? handleExpandedChange : undefined,\n enableRowSelection: selectable,\n enableSorting: sortable,\n enableExpanding: hasSubRows,\n });\n\n const isEmpty = data.length === 0;\n\n const hasExplicitColumnSizing = React.useMemo(\n () =>\n columns.some((column) =>\n column.size !== undefined ||\n column.minSize !== undefined ||\n column.maxSize !== undefined\n ),\n [columns]\n );\n\n const rootClasses = [\n styles.table,\n hasExplicitColumnSizing && styles.fixedLayout,\n styles[size],\n striped && styles.striped,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const getColumnSizeStyle = (\n column: {\n getSize: () => number;\n columnDef: { size?: number; minSize?: number; maxSize?: number };\n }\n ): React.CSSProperties | undefined => {\n const { size, minSize, maxSize } = column.columnDef;\n const hasExplicitSize = size !== undefined || minSize !== undefined || maxSize !== undefined;\n\n if (!hasExplicitSize) {\n return undefined;\n }\n\n const resolvedSize = column.getSize();\n\n return {\n width: resolvedSize,\n minWidth: minSize ?? resolvedSize,\n maxWidth: maxSize ?? resolvedSize,\n };\n };\n\n if (isEmpty) {\n return (\n <div className={styles.emptyState}>\n <span className={styles.emptyMessage}>{emptyMessage}</span>\n </div>\n );\n }\n\n const isInteractiveTarget = (\n target: EventTarget | null,\n currentTarget: HTMLTableRowElement\n ) => {\n if (!(target instanceof Element)) return false;\n\n const interactiveElement = target.closest(\n 'button, a, input, select, textarea, [role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"]'\n );\n\n return Boolean(interactiveElement && currentTarget.contains(interactiveElement));\n };\n\n return (\n <div className={[styles.wrapper, bordered && styles.bordered].filter(Boolean).join(' ')}>\n <table\n {...htmlProps}\n className={rootClasses}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n >\n {caption && (\n <caption className={captionHidden ? styles.captionHidden : styles.caption}>\n {caption}\n </caption>\n )}\n <thead className={styles.thead}>\n {table.getHeaderGroups().map((headerGroup: any) => (\n <tr key={headerGroup.id} className={styles.headerRow}>\n {headerGroup.headers.map((header: any) => {\n const canSort = sortable && header.column.getCanSort();\n const sortDirection = header.column.getIsSorted();\n const toggleSorting = canSort ? header.column.getToggleSortingHandler() : undefined;\n\n return (\n <th\n key={header.id}\n className={[styles.th, canSort && styles.thSortable].filter(Boolean).join(' ')}\n style={getColumnSizeStyle(header.column)}\n scope=\"col\"\n aria-sort={\n sortDirection\n ? sortDirection === 'asc'\n ? 'ascending'\n : 'descending'\n : canSort\n ? 'none'\n : undefined\n }\n >\n {canSort ? (\n <button\n type=\"button\"\n className={styles.sortButton}\n onClick={toggleSorting}\n >\n <span className={styles.headerContent}>\n {header.isPlaceholder\n ? null\n : _flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </span>\n <span className={styles.sortIndicator} aria-hidden=\"true\">\n {sortDirection === 'asc' ? (\n <SortAscIcon />\n ) : sortDirection === 'desc' ? (\n <SortDescIcon />\n ) : (\n <SortIcon />\n )}\n </span>\n </button>\n ) : (\n <div className={styles.headerContent}>\n {header.isPlaceholder\n ? null\n : _flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </div>\n )}\n </th>\n );\n })}\n </tr>\n ))}\n </thead>\n <tbody className={styles.tbody}>\n {table.getRowModel().rows.map((row: any) => {\n const isClickable = !!onRowClick;\n const isSelected = selectable ? row.getIsSelected() : false;\n const depth: number = row.depth ?? 0;\n const canExpand = hasSubRows && row.getCanExpand();\n const handleRowClick = (event: React.MouseEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return;\n if (isInteractiveTarget(event.target, event.currentTarget)) return;\n onRowClick(row.original);\n };\n\n const handleRowKeyDown = (event: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return;\n if (isInteractiveTarget(event.target, event.currentTarget)) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onRowClick(row.original);\n }\n };\n\n return (\n <tr\n key={row.id}\n className={[\n styles.row,\n isClickable && styles.clickable,\n isSelected && styles.selected,\n depth > 0 && styles.subRow,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={isClickable ? handleRowClick : undefined}\n onKeyDown={isClickable ? handleRowKeyDown : undefined}\n tabIndex={isClickable ? 0 : undefined}\n data-selected={isSelected || undefined}\n data-depth={depth > 0 ? depth : undefined}\n >\n {row.getVisibleCells().map((cell: any, cellIndex: number) => {\n const isFirstDataCell = hasSubRows && cellIndex === (showCheckbox && selectable ? 1 : 0);\n return (\n <td\n key={cell.id}\n className={styles.td}\n style={{\n ...getColumnSizeStyle(cell.column),\n ...(isFirstDataCell && depth > 0 ? { paddingLeft: `${depth * 24 + 12}px` } : undefined),\n }}\n >\n {isFirstDataCell && canExpand ? (\n <span className={styles.expandCell}>\n <button\n type=\"button\"\n className={styles.expandButton}\n onClick={row.getToggleExpandedHandler()}\n aria-label={row.getIsExpanded() ? 'Collapse row' : 'Expand row'}\n aria-expanded={row.getIsExpanded()}\n >\n <ExpandIcon expanded={row.getIsExpanded()} />\n </button>\n {_flexRender(cell.column.columnDef.cell, cell.getContext())}\n </span>\n ) : (\n _flexRender(cell.column.columnDef.cell, cell.getContext())\n )}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\n// Expand/collapse icon for sub-rows\nfunction ExpandIcon({ expanded }: { expanded: boolean }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n style={{\n transform: expanded ? 'rotate(90deg)' : undefined,\n transition: 'transform 150ms ease',\n }}\n >\n <path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n// Sort icons - minimal and functional\nfunction SortIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 2L8.5 5H3.5L6 2Z\"\n fill=\"currentColor\"\n opacity=\"0.3\"\n />\n <path\n d=\"M6 10L3.5 7H8.5L6 10Z\"\n fill=\"currentColor\"\n opacity=\"0.3\"\n />\n </svg>\n );\n}\n\nfunction SortAscIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 2L8.5 5H3.5L6 2Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction SortDescIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 10L3.5 7H8.5L6 10Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\n// Helper to create simple columns without TanStack's createColumnHelper\nexport function createColumns<T>(\n columns: Array<{\n key: string;\n header: string;\n width?: number;\n cell?: (row: T) => React.ReactNode;\n }>\n): DataTableColumn<T>[] {\n return columns.map((col) => ({\n id: col.key,\n accessorKey: col.key,\n header: col.header,\n size: col.width,\n minSize: col.width,\n maxSize: col.width,\n cell: col.cell\n ? ({ row }) => col.cell!(row.original)\n : ({ getValue }) => getValue() ?? '--',\n }));\n}\n\nexport const DataTable = Object.assign(DataTableRoot, {\n Root: DataTableRoot,\n Columns: createColumns,\n});\n"],"names":["table","size"],"mappings":"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"}
|
|
@@ -20,14 +20,23 @@ const close = "_close_bh12s_157";
|
|
|
20
20
|
const styles = {
|
|
21
21
|
backdrop,
|
|
22
22
|
popup,
|
|
23
|
+
"side-right": "_side-right_bh12s_40",
|
|
23
24
|
sideRight,
|
|
25
|
+
"side-left": "_side-left_bh12s_50",
|
|
24
26
|
sideLeft,
|
|
27
|
+
"side-top": "_side-top_bh12s_60",
|
|
25
28
|
sideTop,
|
|
29
|
+
"side-bottom": "_side-bottom_bh12s_70",
|
|
26
30
|
sideBottom,
|
|
31
|
+
"size-sm": "_size-sm_bh12s_80",
|
|
27
32
|
sizeSm,
|
|
33
|
+
"size-md": "_size-md_bh12s_84",
|
|
28
34
|
sizeMd,
|
|
35
|
+
"size-lg": "_size-lg_bh12s_88",
|
|
29
36
|
sizeLg,
|
|
37
|
+
"size-xl": "_size-xl_bh12s_92",
|
|
30
38
|
sizeXl,
|
|
39
|
+
"size-full": "_size-full_bh12s_96",
|
|
31
40
|
sizeFull,
|
|
32
41
|
header,
|
|
33
42
|
title,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Drawer.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -18,14 +18,23 @@ const close = "_close_bh12s_157";
|
|
|
18
18
|
const styles = {
|
|
19
19
|
backdrop,
|
|
20
20
|
popup,
|
|
21
|
+
"side-right": "_side-right_bh12s_40",
|
|
21
22
|
sideRight,
|
|
23
|
+
"side-left": "_side-left_bh12s_50",
|
|
22
24
|
sideLeft,
|
|
25
|
+
"side-top": "_side-top_bh12s_60",
|
|
23
26
|
sideTop,
|
|
27
|
+
"side-bottom": "_side-bottom_bh12s_70",
|
|
24
28
|
sideBottom,
|
|
29
|
+
"size-sm": "_size-sm_bh12s_80",
|
|
25
30
|
sizeSm,
|
|
31
|
+
"size-md": "_size-md_bh12s_84",
|
|
26
32
|
sizeMd,
|
|
33
|
+
"size-lg": "_size-lg_bh12s_88",
|
|
27
34
|
sizeLg,
|
|
35
|
+
"size-xl": "_size-xl_bh12s_92",
|
|
28
36
|
sizeXl,
|
|
37
|
+
"size-full": "_size-full_bh12s_96",
|
|
29
38
|
sizeFull,
|
|
30
39
|
header,
|
|
31
40
|
title,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Drawer.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -18,17 +18,29 @@ const fallback = "_fallback_jaiqu_63";
|
|
|
18
18
|
const styles = {
|
|
19
19
|
imageContainer,
|
|
20
20
|
image,
|
|
21
|
+
"fit-cover": "_fit-cover_jaiqu_15",
|
|
21
22
|
fitCover,
|
|
23
|
+
"fit-contain": "_fit-contain_jaiqu_19",
|
|
22
24
|
fitContain,
|
|
25
|
+
"fit-fill": "_fit-fill_jaiqu_23",
|
|
23
26
|
fitFill,
|
|
27
|
+
"fit-none": "_fit-none_jaiqu_27",
|
|
24
28
|
fitNone,
|
|
29
|
+
"aspect-1-1": "_aspect-1-1_jaiqu_31",
|
|
25
30
|
aspect11,
|
|
31
|
+
"aspect-4-3": "_aspect-4-3_jaiqu_35",
|
|
26
32
|
aspect43,
|
|
33
|
+
"aspect-16-9": "_aspect-16-9_jaiqu_39",
|
|
27
34
|
aspect169,
|
|
35
|
+
"aspect-21-9": "_aspect-21-9_jaiqu_43",
|
|
28
36
|
aspect219,
|
|
37
|
+
"rounded-sm": "_rounded-sm_jaiqu_47",
|
|
29
38
|
roundedSm,
|
|
39
|
+
"rounded-md": "_rounded-md_jaiqu_51",
|
|
30
40
|
roundedMd,
|
|
41
|
+
"rounded-lg": "_rounded-lg_jaiqu_55",
|
|
31
42
|
roundedLg,
|
|
43
|
+
"rounded-full": "_rounded-full_jaiqu_59",
|
|
32
44
|
roundedFull,
|
|
33
45
|
fallback
|
|
34
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Image.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -16,17 +16,29 @@ const fallback = "_fallback_jaiqu_63";
|
|
|
16
16
|
const styles = {
|
|
17
17
|
imageContainer,
|
|
18
18
|
image,
|
|
19
|
+
"fit-cover": "_fit-cover_jaiqu_15",
|
|
19
20
|
fitCover,
|
|
21
|
+
"fit-contain": "_fit-contain_jaiqu_19",
|
|
20
22
|
fitContain,
|
|
23
|
+
"fit-fill": "_fit-fill_jaiqu_23",
|
|
21
24
|
fitFill,
|
|
25
|
+
"fit-none": "_fit-none_jaiqu_27",
|
|
22
26
|
fitNone,
|
|
27
|
+
"aspect-1-1": "_aspect-1-1_jaiqu_31",
|
|
23
28
|
aspect11,
|
|
29
|
+
"aspect-4-3": "_aspect-4-3_jaiqu_35",
|
|
24
30
|
aspect43,
|
|
31
|
+
"aspect-16-9": "_aspect-16-9_jaiqu_39",
|
|
25
32
|
aspect169,
|
|
33
|
+
"aspect-21-9": "_aspect-21-9_jaiqu_43",
|
|
26
34
|
aspect219,
|
|
35
|
+
"rounded-sm": "_rounded-sm_jaiqu_47",
|
|
27
36
|
roundedSm,
|
|
37
|
+
"rounded-md": "_rounded-md_jaiqu_51",
|
|
28
38
|
roundedMd,
|
|
39
|
+
"rounded-lg": "_rounded-lg_jaiqu_55",
|
|
29
40
|
roundedLg,
|
|
41
|
+
"rounded-full": "_rounded-full_jaiqu_59",
|
|
30
42
|
roundedFull,
|
|
31
43
|
fallback
|
|
32
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Image.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -11,8 +11,11 @@ const styles = {
|
|
|
11
11
|
"default": "_default_77ogl_27",
|
|
12
12
|
subtle,
|
|
13
13
|
muted,
|
|
14
|
+
"underline-always": "_underline-always_77ogl_48",
|
|
14
15
|
underlineAlways,
|
|
16
|
+
"underline-hover": "_underline-hover_77ogl_53",
|
|
15
17
|
underlineHover,
|
|
18
|
+
"underline-none": "_underline-none_77ogl_61",
|
|
16
19
|
underlineNone
|
|
17
20
|
};
|
|
18
21
|
exports.default = styles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Link.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|