@tokis/react 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -6
- package/dist/__tests__/Accordion.test.d.ts +2 -0
- package/dist/__tests__/Accordion.test.d.ts.map +1 -0
- package/dist/__tests__/Accordion.test.js +144 -0
- package/dist/__tests__/Accordion.test.js.map +1 -0
- package/dist/__tests__/Button.test.d.ts +2 -0
- package/dist/__tests__/Button.test.d.ts.map +1 -0
- package/dist/__tests__/Button.test.js +104 -0
- package/dist/__tests__/Button.test.js.map +1 -0
- package/dist/__tests__/Checkbox.test.d.ts +2 -0
- package/dist/__tests__/Checkbox.test.d.ts.map +1 -0
- package/dist/__tests__/Checkbox.test.js +90 -0
- package/dist/__tests__/Checkbox.test.js.map +1 -0
- package/dist/__tests__/Select.test.d.ts +2 -0
- package/dist/__tests__/Select.test.d.ts.map +1 -0
- package/dist/__tests__/Select.test.js +119 -0
- package/dist/__tests__/Select.test.js.map +1 -0
- package/dist/__tests__/datagrid-utils.test.d.ts +2 -0
- package/dist/__tests__/datagrid-utils.test.d.ts.map +1 -0
- package/dist/__tests__/datagrid-utils.test.js +190 -0
- package/dist/__tests__/datagrid-utils.test.js.map +1 -0
- package/dist/__tests__/date-utils.test.d.ts +2 -0
- package/dist/__tests__/date-utils.test.d.ts.map +1 -0
- package/dist/__tests__/date-utils.test.js +180 -0
- package/dist/__tests__/date-utils.test.js.map +1 -0
- package/dist/cjs/components/accordion/index.js +1 -1
- package/dist/cjs/components/checkbox/index.js +2 -1
- package/dist/cjs/components/datagrid/index.js +161 -0
- package/dist/cjs/components/datagrid/types.js +2 -0
- package/dist/cjs/components/datagrid/utils.js +87 -0
- package/dist/cjs/components/datepicker/Calendar.js +117 -0
- package/dist/cjs/components/datepicker/date-utils.js +121 -0
- package/dist/cjs/components/datepicker/index.js +134 -0
- package/dist/cjs/components/extended/index.js +39 -31
- package/dist/cjs/components/layout/index.js +5 -4
- package/dist/cjs/components/treeview/index.js +1 -1
- package/dist/cjs/hooks/useId.js +18 -5
- package/dist/cjs/index.js +2 -0
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/accordion/index.js.map +1 -1
- package/dist/components/checkbox/index.js +2 -1
- package/dist/components/checkbox/index.js.map +1 -1
- package/dist/components/datagrid/index.d.ts +20 -0
- package/dist/components/datagrid/index.d.ts.map +1 -0
- package/dist/components/datagrid/index.js +159 -0
- package/dist/components/datagrid/index.js.map +1 -0
- package/dist/components/datagrid/types.d.ts +92 -0
- package/dist/components/datagrid/types.d.ts.map +1 -0
- package/dist/components/datagrid/types.js +2 -0
- package/dist/components/datagrid/types.js.map +1 -0
- package/dist/components/datagrid/utils.d.ts +14 -0
- package/dist/components/datagrid/utils.d.ts.map +1 -0
- package/dist/components/datagrid/utils.js +80 -0
- package/dist/components/datagrid/utils.js.map +1 -0
- package/dist/components/datepicker/Calendar.d.ts +30 -0
- package/dist/components/datepicker/Calendar.d.ts.map +1 -0
- package/dist/components/datepicker/Calendar.js +115 -0
- package/dist/components/datepicker/Calendar.js.map +1 -0
- package/dist/components/datepicker/date-utils.d.ts +34 -0
- package/dist/components/datepicker/date-utils.d.ts.map +1 -0
- package/dist/components/datepicker/date-utils.js +107 -0
- package/dist/components/datepicker/date-utils.js.map +1 -0
- package/dist/components/datepicker/index.d.ts +52 -0
- package/dist/components/datepicker/index.d.ts.map +1 -0
- package/dist/components/datepicker/index.js +128 -0
- package/dist/components/datepicker/index.js.map +1 -0
- package/dist/components/extended/index.d.ts +14 -29
- package/dist/components/extended/index.d.ts.map +1 -1
- package/dist/components/extended/index.js +40 -27
- package/dist/components/extended/index.js.map +1 -1
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +5 -4
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/treeview/index.js +1 -1
- package/dist/components/treeview/index.js.map +1 -1
- package/dist/hooks/useId.d.ts +13 -3
- package/dist/hooks/useId.d.ts.map +1 -1
- package/dist/hooks/useId.js +19 -6
- package/dist/hooks/useId.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/cjs/index.js
CHANGED
|
@@ -27,6 +27,7 @@ __exportStar(require("./components/switch/index"), exports);
|
|
|
27
27
|
__exportStar(require("./components/select/index"), exports);
|
|
28
28
|
__exportStar(require("./components/slider/index"), exports);
|
|
29
29
|
__exportStar(require("./components/spinner/index"), exports);
|
|
30
|
+
__exportStar(require("./components/datepicker/index"), exports);
|
|
30
31
|
// ─── Layout ───────────────────────────────────────────────
|
|
31
32
|
__exportStar(require("./components/layout/index"), exports);
|
|
32
33
|
// ─── Surfaces ─────────────────────────────────────────────
|
|
@@ -97,6 +98,7 @@ __exportStar(require("./components/charts/index"), exports);
|
|
|
97
98
|
// ─── Data ─────────────────────────────────────────────────
|
|
98
99
|
__exportStar(require("./components/virtual-list/index"), exports);
|
|
99
100
|
__exportStar(require("./components/infinite-scroll/index"), exports);
|
|
101
|
+
__exportStar(require("./components/datagrid/index"), exports);
|
|
100
102
|
// ─── Utilities ────────────────────────────────────────────
|
|
101
103
|
var cn_js_1 = require("./utils/cn");
|
|
102
104
|
Object.defineProperty(exports, "cn", { enumerable: true, get: function () { return cn_js_1.cn; } });
|
|
@@ -29,6 +29,6 @@ function AccordionItemComponent({ item, isOpen, onToggle }) {
|
|
|
29
29
|
const triggerId = useId();
|
|
30
30
|
const panelId = useId();
|
|
31
31
|
return (_jsxs("div", { className: "tokis-accordion-item", children: [_jsxs("button", { id: triggerId, type: "button", "aria-expanded": isOpen, "aria-controls": panelId, "aria-disabled": item.disabled || undefined, disabled: item.disabled, className: "tokis-accordion-trigger", onClick: () => { if (!item.disabled)
|
|
32
|
-
onToggle(item.value); }, children: [_jsx("span", { style: { flex: 1, textAlign: '
|
|
32
|
+
onToggle(item.value); }, children: [_jsx("span", { style: { flex: 1, textAlign: 'start' }, children: item.trigger }), _jsx("svg", { className: "tokis-accordion-trigger__icon", width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M4 6l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })] }), _jsx("div", { id: panelId, role: "region", "aria-labelledby": triggerId, className: "tokis-accordion-content", "data-open": isOpen ? 'true' : 'false', "aria-hidden": !isOpen, children: _jsx("div", { className: "tokis-accordion-content-inner", children: item.content }) })] }));
|
|
33
33
|
}
|
|
34
34
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/accordion/index.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/accordion/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ export function Checkbox({ label, description, checked, defaultChecked, indeterm
|
|
|
11
11
|
inputRef.current.indeterminate = indeterminate;
|
|
12
12
|
}
|
|
13
13
|
}, [indeterminate]);
|
|
14
|
-
return (_jsxs("label", { className: cn('tokis-checkbox-root', className), "data-disabled": disabled || undefined, htmlFor: inputId, children: [_jsx("input", { ref: inputRef, type: "checkbox", id: inputId, name: name, value: value, checked: checked, defaultChecked: defaultChecked, disabled: disabled, onChange: (e) =>
|
|
14
|
+
return (_jsxs("label", { className: cn('tokis-checkbox-root', className), "data-disabled": disabled || undefined, htmlFor: inputId, children: [_jsx("input", { ref: inputRef, type: "checkbox", id: inputId, name: name, value: value, checked: checked, defaultChecked: defaultChecked, disabled: disabled, onChange: (e) => { if (!disabled)
|
|
15
|
+
onChange?.(e.target.checked); }, className: "tokis-checkbox-native", "aria-label": !label ? ariaLabel : undefined, "aria-describedby": descId }), _jsx("span", { "aria-hidden": "true", className: "tokis-checkbox-control", "data-checked": checked && !indeterminate ? 'true' : undefined, "data-indeterminate": indeterminate ? 'true' : undefined }), (label || description) && (_jsxs("div", { children: [label && _jsx("span", { className: "tokis-checkbox-label", children: label }), description && _jsx("p", { id: descId, className: "tokis-checkbox-description", children: description })] }))] }));
|
|
15
16
|
}
|
|
16
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/checkbox/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAiBvC,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,GAAG,KAAK,EAClE,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,GACjE;IACd,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,EAAE,IAAI,YAAY,MAAM,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;QACjD,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,CACL,iBACE,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,mBAChC,QAAQ,IAAI,SAAS,EACpC,OAAO,EAAE,OAAO,aAEhB,gBACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/checkbox/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAiBvC,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,GAAG,KAAK,EAClE,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,GACjE;IACd,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,EAAE,IAAI,YAAY,MAAM,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;QACjD,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,CACL,iBACE,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,mBAChC,QAAQ,IAAI,SAAS,EACpC,OAAO,EAAE,OAAO,aAEhB,gBACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ;oBAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACjE,SAAS,EAAC,uBAAuB,gBACrB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,sBACxB,MAAM,GACxB,EACF,8BACc,MAAM,EAClB,SAAS,EAAC,wBAAwB,kBACpB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,wBACxC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GACtD,EACD,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,0BACG,KAAK,IAAI,eAAM,SAAS,EAAC,sBAAsB,YAAE,KAAK,GAAQ,EAC9D,WAAW,IAAI,YAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAC,4BAA4B,YAAE,WAAW,GAAK,IACnF,CACP,IACK,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataGrid — feature-complete data table for Tokis.
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Column sorting (asc/desc/none cycle, click header)
|
|
6
|
+
* - Quick filter toolbar
|
|
7
|
+
* - Per-column text filtering
|
|
8
|
+
* - Client-side pagination with page-size selector
|
|
9
|
+
* - Row selection (single / multi-select checkboxes)
|
|
10
|
+
* - Custom cell rendering (renderCell)
|
|
11
|
+
* - Loading skeleton state
|
|
12
|
+
* - Empty state
|
|
13
|
+
* - Windowed virtual scrolling (fixed height + rowHeight)
|
|
14
|
+
* - Controlled & uncontrolled patterns for sort, filter, page
|
|
15
|
+
* - ARIA: role="grid", aria-sort, aria-rowcount, aria-colcount
|
|
16
|
+
*/
|
|
17
|
+
import type { DataGridProps } from './types.js';
|
|
18
|
+
export declare function DataGrid<R extends Record<string, unknown> = Record<string, unknown>>({ columns, rows, rowIdField, loading, emptyText, checkboxSelection, selectionModel: selectionProp, onSelectionChange, onRowClick, sortModel: sortProp, onSortModelChange, filterModel: filterProp, onFilterModelChange, showToolbar, pageSize: pageSizeProp, pageSizeOptions, page: pageProp, onPageChange, height, rowHeight, className, }: DataGridProps<R>): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export type { DataGridProps, DataGridColumn, SortModel, FilterModel, RowId } from './types.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/datagrid/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAcH,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,YAAY,CAAC;AA0KpB,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACpF,OAAO,EACP,IAAI,EACJ,UAAiB,EACjB,OAAe,EACf,SAAqB,EACrB,iBAAyB,EACzB,cAAc,EAAE,aAAa,EAC7B,iBAAiB,EACjB,UAAU,EACV,SAAS,EAAE,QAAQ,EACnB,iBAAiB,EACjB,WAAW,EAAE,UAAU,EACvB,mBAAmB,EACnB,WAAmB,EACnB,QAAQ,EAAE,YAAiB,EAC3B,eAAmC,EACnC,IAAI,EAAE,QAAQ,EACd,YAAY,EACZ,MAAM,EACN,SAAc,EACd,SAAS,GACV,EAAE,aAAa,CAAC,CAAC,CAAC,2CAiMlB;AAGD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* DataGrid — feature-complete data table for Tokis.
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Column sorting (asc/desc/none cycle, click header)
|
|
7
|
+
* - Quick filter toolbar
|
|
8
|
+
* - Per-column text filtering
|
|
9
|
+
* - Client-side pagination with page-size selector
|
|
10
|
+
* - Row selection (single / multi-select checkboxes)
|
|
11
|
+
* - Custom cell rendering (renderCell)
|
|
12
|
+
* - Loading skeleton state
|
|
13
|
+
* - Empty state
|
|
14
|
+
* - Windowed virtual scrolling (fixed height + rowHeight)
|
|
15
|
+
* - Controlled & uncontrolled patterns for sort, filter, page
|
|
16
|
+
* - ARIA: role="grid", aria-sort, aria-rowcount, aria-colcount
|
|
17
|
+
*/
|
|
18
|
+
import { useState, useCallback, useMemo, useRef, useEffect, } from 'react';
|
|
19
|
+
import { cn } from '../../utils/cn.js';
|
|
20
|
+
import { sortRows, filterRows, nextSortDirection, paginateRows, } from './utils.js';
|
|
21
|
+
// ─── Sort icon ────────────────────────────────────────────────────────────────
|
|
22
|
+
function SortIcon({ direction }) {
|
|
23
|
+
if (!direction)
|
|
24
|
+
return _jsx("span", { className: "tokis-dg-sort-icon tokis-dg-sort-icon--none", "aria-hidden": "true", children: "\u21C5" });
|
|
25
|
+
if (direction === 'asc')
|
|
26
|
+
return _jsx("span", { className: "tokis-dg-sort-icon", "aria-hidden": "true", children: "\u2191" });
|
|
27
|
+
return _jsx("span", { className: "tokis-dg-sort-icon", "aria-hidden": "true", children: "\u2193" });
|
|
28
|
+
}
|
|
29
|
+
function DataGridToolbar({ quickFilter, onQuickFilter }) {
|
|
30
|
+
return (_jsx("div", { className: "tokis-dg-toolbar", children: _jsx("input", { type: "search", className: "tokis-dg-search", placeholder: "Search\u2026", value: quickFilter, "aria-label": "Quick filter", onChange: (e) => onQuickFilter(e.target.value) }) }));
|
|
31
|
+
}
|
|
32
|
+
function DataGridHeader({ columns, sortModel, onSort, checkboxSelection, allSelected, someSelected, onSelectAll, columnFilters, onColumnFilter, }) {
|
|
33
|
+
return (_jsxs("div", { className: "tokis-dg-header", role: "rowgroup", children: [_jsxs("div", { className: "tokis-dg-row tokis-dg-row--header", role: "row", children: [checkboxSelection && (_jsx("div", { className: "tokis-dg-cell tokis-dg-cell--checkbox", role: "columnheader", "aria-label": "Select all", children: _jsx("input", { type: "checkbox", checked: allSelected, ref: (el) => { if (el)
|
|
34
|
+
el.indeterminate = someSelected && !allSelected; }, onChange: (e) => onSelectAll(e.target.checked), "aria-label": "Select all rows" }) })), columns.map((col) => {
|
|
35
|
+
const isSorted = sortModel.field === col.field && sortModel.direction != null;
|
|
36
|
+
return (_jsxs("div", { className: cn('tokis-dg-cell', 'tokis-dg-cell--header', col.sortable !== false && 'tokis-dg-cell--sortable'), role: "columnheader", "aria-sort": isSorted ? (sortModel.direction === 'asc' ? 'ascending' : 'descending') : 'none', style: { '--dg-align': col.headerAlign ?? col.align ?? 'start' }, onClick: () => col.sortable !== false && onSort(col.field), children: [col.renderHeader ? col.renderHeader(col) : (col.headerName ?? col.field), col.sortable !== false && (_jsx(SortIcon, { direction: isSorted ? sortModel.direction : null }))] }, col.field));
|
|
37
|
+
})] }), columns.some((c) => c.filterable) && (_jsxs("div", { className: "tokis-dg-row tokis-dg-row--filter-row", role: "row", "aria-label": "Column filters", children: [checkboxSelection && _jsx("div", { className: "tokis-dg-cell tokis-dg-cell--checkbox", role: "cell" }), columns.map((col) => (_jsx("div", { className: "tokis-dg-cell tokis-dg-cell--filter", role: "cell", children: col.filterable && (_jsx("input", { type: "search", className: "tokis-dg-col-filter", placeholder: `Filter ${col.headerName ?? col.field}…`, value: columnFilters[col.field] ?? '', "aria-label": `Filter by ${col.headerName ?? col.field}`, onChange: (e) => onColumnFilter(col.field, e.target.value) })) }, col.field)))] }))] }));
|
|
38
|
+
}
|
|
39
|
+
function DataGridPagination({ page, pageSize, pageSizeOptions, total, onPageChange, onPageSizeChange }) {
|
|
40
|
+
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
|
41
|
+
const start = page * pageSize + 1;
|
|
42
|
+
const end = Math.min((page + 1) * pageSize, total);
|
|
43
|
+
return (_jsxs("div", { className: "tokis-dg-pagination", role: "navigation", "aria-label": "Pagination", children: [_jsx("span", { className: "tokis-dg-pagination-info", children: total === 0 ? '0 rows' : `${start}–${end} of ${total}` }), _jsx("select", { className: "tokis-dg-page-size", value: pageSize, "aria-label": "Rows per page", onChange: (e) => { onPageSizeChange(Number(e.target.value)); onPageChange(0); }, children: pageSizeOptions.map((s) => _jsxs("option", { value: s, children: [s, " / page"] }, s)) }), _jsx("button", { className: "tokis-dg-page-btn", disabled: page === 0, onClick: () => onPageChange(0), "aria-label": "First page", children: "\u00AB" }), _jsx("button", { className: "tokis-dg-page-btn", disabled: page === 0, onClick: () => onPageChange(page - 1), "aria-label": "Previous page", children: "\u2039" }), _jsx("button", { className: "tokis-dg-page-btn", disabled: page >= totalPages - 1, onClick: () => onPageChange(page + 1), "aria-label": "Next page", children: "\u203A" }), _jsx("button", { className: "tokis-dg-page-btn", disabled: page >= totalPages - 1, onClick: () => onPageChange(totalPages - 1), "aria-label": "Last page", children: "\u00BB" })] }));
|
|
44
|
+
}
|
|
45
|
+
// ─── Skeleton loader ──────────────────────────────────────────────────────────
|
|
46
|
+
function DataGridSkeleton({ rows, columns }) {
|
|
47
|
+
return (_jsx(_Fragment, { children: Array.from({ length: rows }).map((_, r) => (_jsx("div", { className: "tokis-dg-row tokis-dg-row--skeleton", role: "row", "aria-hidden": "true", children: Array.from({ length: columns }).map((__, c) => (_jsx("div", { className: "tokis-dg-cell", children: _jsx("span", { className: "tokis-dg-skeleton-bar" }) }, c))) }, r))) }));
|
|
48
|
+
}
|
|
49
|
+
// ─── Main DataGrid ────────────────────────────────────────────────────────────
|
|
50
|
+
export function DataGrid({ columns, rows, rowIdField = 'id', loading = false, emptyText = 'No rows', checkboxSelection = false, selectionModel: selectionProp, onSelectionChange, onRowClick, sortModel: sortProp, onSortModelChange, filterModel: filterProp, onFilterModelChange, showToolbar = false, pageSize: pageSizeProp = 25, pageSizeOptions = [10, 25, 50, 100], page: pageProp, onPageChange, height, rowHeight = 48, className, }) {
|
|
51
|
+
// ── Internal state (uncontrolled fallbacks) ──
|
|
52
|
+
const [sortInternal, setSortInternal] = useState({ field: '', direction: null });
|
|
53
|
+
const [filterInternal, setFilterInternal] = useState({ quickFilter: '', columnFilters: {} });
|
|
54
|
+
const [pageInternal, setPageInternal] = useState(0);
|
|
55
|
+
const [pageSizeInternal, setPageSizeInternal] = useState(pageSizeProp);
|
|
56
|
+
const [selectionInternal, setSelectionInternal] = useState([]);
|
|
57
|
+
const sort = sortProp ?? sortInternal;
|
|
58
|
+
const filterModel = filterProp ?? filterInternal;
|
|
59
|
+
const page = pageProp ?? pageInternal;
|
|
60
|
+
const pageSize = pageSizeInternal;
|
|
61
|
+
const selection = selectionProp ?? selectionInternal;
|
|
62
|
+
const setSort = useCallback((model) => {
|
|
63
|
+
if (onSortModelChange)
|
|
64
|
+
onSortModelChange(model);
|
|
65
|
+
else
|
|
66
|
+
setSortInternal(model);
|
|
67
|
+
}, [onSortModelChange]);
|
|
68
|
+
const setFilter = useCallback((model) => {
|
|
69
|
+
if (onFilterModelChange)
|
|
70
|
+
onFilterModelChange(model);
|
|
71
|
+
else
|
|
72
|
+
setFilterInternal(model);
|
|
73
|
+
// Reset to page 0 on filter change
|
|
74
|
+
if (onPageChange)
|
|
75
|
+
onPageChange(0);
|
|
76
|
+
else
|
|
77
|
+
setPageInternal(0);
|
|
78
|
+
}, [onFilterModelChange, onPageChange]);
|
|
79
|
+
const setPage = useCallback((p) => {
|
|
80
|
+
if (onPageChange)
|
|
81
|
+
onPageChange(p);
|
|
82
|
+
else
|
|
83
|
+
setPageInternal(p);
|
|
84
|
+
}, [onPageChange]);
|
|
85
|
+
const setSelection = useCallback((ids) => {
|
|
86
|
+
if (onSelectionChange)
|
|
87
|
+
onSelectionChange(ids);
|
|
88
|
+
else
|
|
89
|
+
setSelectionInternal(ids);
|
|
90
|
+
}, [onSelectionChange]);
|
|
91
|
+
// ── Process rows ──
|
|
92
|
+
const processed = useMemo(() => {
|
|
93
|
+
let r = filterRows(rows, filterModel, columns);
|
|
94
|
+
r = sortRows(r, sort, columns);
|
|
95
|
+
return r;
|
|
96
|
+
}, [rows, filterModel, sort, columns]);
|
|
97
|
+
const paginated = useMemo(() => paginateRows(processed, page, pageSize), [processed, page, pageSize]);
|
|
98
|
+
// ── Virtualization ──
|
|
99
|
+
const bodyRef = useRef(null);
|
|
100
|
+
const [scrollTop, setScrollTop] = useState(0);
|
|
101
|
+
const isVirtualized = typeof height === 'number';
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
const el = bodyRef.current;
|
|
104
|
+
if (!el || !isVirtualized)
|
|
105
|
+
return;
|
|
106
|
+
const handler = () => setScrollTop(el.scrollTop);
|
|
107
|
+
el.addEventListener('scroll', handler, { passive: true });
|
|
108
|
+
return () => el.removeEventListener('scroll', handler);
|
|
109
|
+
}, [isVirtualized]);
|
|
110
|
+
const OVERSCAN = 5;
|
|
111
|
+
const visibleStart = isVirtualized ? Math.max(0, Math.floor(scrollTop / rowHeight) - OVERSCAN) : 0;
|
|
112
|
+
const visibleCount = isVirtualized ? Math.ceil((Number(height) / rowHeight) + OVERSCAN * 2) : paginated.length;
|
|
113
|
+
const visibleEnd = Math.min(paginated.length, visibleStart + visibleCount);
|
|
114
|
+
const visibleRows = isVirtualized ? paginated.slice(visibleStart, visibleEnd) : paginated;
|
|
115
|
+
const paddingTop = isVirtualized ? visibleStart * rowHeight : 0;
|
|
116
|
+
const paddingBottom = isVirtualized ? Math.max(0, (paginated.length - visibleEnd) * rowHeight) : 0;
|
|
117
|
+
// ── Selection helpers ──
|
|
118
|
+
const allOnPageSelected = paginated.length > 0 && paginated.every((r) => selection.includes(r[rowIdField]));
|
|
119
|
+
const someOnPageSelected = paginated.some((r) => selection.includes(r[rowIdField]));
|
|
120
|
+
const handleSelectAll = (checked) => {
|
|
121
|
+
if (checked) {
|
|
122
|
+
const newIds = paginated.map((r) => r[rowIdField]);
|
|
123
|
+
const merged = Array.from(new Set([...selection, ...newIds]));
|
|
124
|
+
setSelection(merged);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const pageIds = new Set(paginated.map((r) => r[rowIdField]));
|
|
128
|
+
setSelection(selection.filter((id) => !pageIds.has(id)));
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const handleRowSelect = (rowId, checked) => {
|
|
132
|
+
if (checked)
|
|
133
|
+
setSelection([...selection, rowId]);
|
|
134
|
+
else
|
|
135
|
+
setSelection(selection.filter((id) => id !== rowId));
|
|
136
|
+
};
|
|
137
|
+
// ── Sort handler ──
|
|
138
|
+
const handleSort = (field) => {
|
|
139
|
+
setSort(nextSortDirection(sort.field, sort, field));
|
|
140
|
+
};
|
|
141
|
+
// ── Filter handlers ──
|
|
142
|
+
const handleQuickFilter = (v) => setFilter({ ...filterModel, quickFilter: v });
|
|
143
|
+
const handleColumnFilter = (field, v) => {
|
|
144
|
+
setFilter({ ...filterModel, columnFilters: { ...(filterModel.columnFilters ?? {}), [field]: v } });
|
|
145
|
+
};
|
|
146
|
+
// ── Render ──
|
|
147
|
+
const bodyStyle = height
|
|
148
|
+
? { height: typeof height === 'number' ? `${height}px` : height, overflowY: 'auto' }
|
|
149
|
+
: {};
|
|
150
|
+
return (_jsxs("div", { className: cn('tokis-datagrid', className), role: "grid", "aria-rowcount": processed.length, "aria-colcount": columns.length, "aria-busy": loading, children: [showToolbar && (_jsx(DataGridToolbar, { quickFilter: filterModel.quickFilter ?? '', onQuickFilter: handleQuickFilter })), _jsx(DataGridHeader, { columns: columns, sortModel: sort, onSort: handleSort, checkboxSelection: checkboxSelection, allSelected: allOnPageSelected, someSelected: someOnPageSelected, onSelectAll: handleSelectAll, columnFilters: filterModel.columnFilters ?? {}, onColumnFilter: handleColumnFilter }), _jsx("div", { className: "tokis-dg-body", ref: bodyRef, style: bodyStyle, role: "rowgroup", children: loading ? (_jsx(DataGridSkeleton, { rows: Math.min(pageSize, 8), columns: columns.length + (checkboxSelection ? 1 : 0) })) : processed.length === 0 ? (_jsx("div", { className: "tokis-dg-empty", role: "row", children: _jsx("div", { className: "tokis-dg-cell", role: "cell", style: { gridColumn: '1 / -1' }, children: emptyText }) })) : (_jsxs(_Fragment, { children: [paddingTop > 0 && _jsx("div", { style: { height: paddingTop }, "aria-hidden": "true" }), visibleRows.map((row, idx) => {
|
|
151
|
+
const rowId = row[rowIdField];
|
|
152
|
+
const isSelected = selection.includes(rowId);
|
|
153
|
+
return (_jsxs("div", { className: cn('tokis-dg-row', isSelected && 'tokis-dg-row--selected'), role: "row", "aria-rowindex": visibleStart + idx + 2, "aria-selected": checkboxSelection ? isSelected : undefined, style: { height: `${rowHeight}px` }, onClick: (e) => onRowClick?.(row, e), children: [checkboxSelection && (_jsx("div", { className: "tokis-dg-cell tokis-dg-cell--checkbox", role: "gridcell", children: _jsx("input", { type: "checkbox", checked: isSelected, "aria-label": `Select row ${rowId}`, onChange: (e) => handleRowSelect(rowId, e.target.checked), onClick: (e) => e.stopPropagation() }) })), columns.map((col) => {
|
|
154
|
+
const value = col.valueGetter ? col.valueGetter(row) : row[col.field];
|
|
155
|
+
return (_jsx("div", { className: "tokis-dg-cell", role: "gridcell", style: { '--dg-align': col.align ?? 'start', ...col.cellStyle }, children: col.renderCell ? col.renderCell({ value, row, field: col.field }) : value }, col.field));
|
|
156
|
+
})] }, rowId ?? visibleStart + idx));
|
|
157
|
+
}), paddingBottom > 0 && _jsx("div", { style: { height: paddingBottom }, "aria-hidden": "true" })] })) }), _jsx(DataGridPagination, { page: page, pageSize: pageSize, pageSizeOptions: pageSizeOptions, total: processed.length, onPageChange: setPage, onPageSizeChange: setPageSizeInternal })] }));
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/datagrid/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { ReactNode, CSSProperties, MouseEvent } from 'react';
|
|
2
|
+
export interface DataGridCellParams<R = Record<string, unknown>> {
|
|
3
|
+
/** The raw cell value */
|
|
4
|
+
value: unknown;
|
|
5
|
+
/** The full row object */
|
|
6
|
+
row: R;
|
|
7
|
+
/** The column field name */
|
|
8
|
+
field: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DataGridColumn<R = Record<string, unknown>> {
|
|
11
|
+
/** Unique field key — must match a key in the row object. */
|
|
12
|
+
field: string;
|
|
13
|
+
/** Column header label. */
|
|
14
|
+
headerName?: string;
|
|
15
|
+
/** Fixed pixel width (mutually exclusive with `flex`). */
|
|
16
|
+
width?: number;
|
|
17
|
+
/** Flex grow ratio — distributes remaining width proportionally. */
|
|
18
|
+
flex?: number;
|
|
19
|
+
/** Allow sorting on this column. @default true */
|
|
20
|
+
sortable?: boolean;
|
|
21
|
+
/** Allow per-column text filtering. @default false */
|
|
22
|
+
filterable?: boolean;
|
|
23
|
+
/** Align cell content. @default 'start' */
|
|
24
|
+
align?: 'start' | 'center' | 'end';
|
|
25
|
+
/** Align header content. @default 'start' */
|
|
26
|
+
headerAlign?: 'start' | 'center' | 'end';
|
|
27
|
+
/** Inline styles for the cell. */
|
|
28
|
+
cellStyle?: CSSProperties;
|
|
29
|
+
/** Custom render function — overrides default value display. */
|
|
30
|
+
renderCell?: (params: DataGridCellParams<R>) => ReactNode;
|
|
31
|
+
/** Custom render function for the header cell. */
|
|
32
|
+
renderHeader?: (col: DataGridColumn<R>) => ReactNode;
|
|
33
|
+
/** Value getter — derive the sort/filter value from the row. */
|
|
34
|
+
valueGetter?: (row: R) => unknown;
|
|
35
|
+
}
|
|
36
|
+
export type SortDirection = 'asc' | 'desc' | null;
|
|
37
|
+
export interface SortModel {
|
|
38
|
+
field: string;
|
|
39
|
+
direction: SortDirection;
|
|
40
|
+
}
|
|
41
|
+
export interface FilterModel {
|
|
42
|
+
/** Global quick-filter string applied across all filterable columns. */
|
|
43
|
+
quickFilter?: string;
|
|
44
|
+
/** Per-column filter strings. */
|
|
45
|
+
columnFilters?: Record<string, string>;
|
|
46
|
+
}
|
|
47
|
+
export type RowId = string | number;
|
|
48
|
+
export interface DataGridProps<R extends Record<string, unknown> = Record<string, unknown>> {
|
|
49
|
+
/** Column definitions. */
|
|
50
|
+
columns: DataGridColumn<R>[];
|
|
51
|
+
/** Array of row objects. Each row must have the fields referenced by columns. */
|
|
52
|
+
rows: R[];
|
|
53
|
+
/** Field used as the unique row identifier. @default 'id' */
|
|
54
|
+
rowIdField?: string;
|
|
55
|
+
/** Show loading skeleton over the rows area. */
|
|
56
|
+
loading?: boolean;
|
|
57
|
+
/** Content rendered when rows is empty (and not loading). */
|
|
58
|
+
emptyText?: ReactNode;
|
|
59
|
+
/** Enable checkbox column for multi-row selection. */
|
|
60
|
+
checkboxSelection?: boolean;
|
|
61
|
+
/** Controlled selected row ids. */
|
|
62
|
+
selectionModel?: RowId[];
|
|
63
|
+
/** Fires when the selection changes. */
|
|
64
|
+
onSelectionChange?: (ids: RowId[]) => void;
|
|
65
|
+
/** Fires when a row is clicked. */
|
|
66
|
+
onRowClick?: (row: R, event: MouseEvent<HTMLElement>) => void;
|
|
67
|
+
/** Controlled sort model. */
|
|
68
|
+
sortModel?: SortModel;
|
|
69
|
+
/** Fires when the sort model changes. */
|
|
70
|
+
onSortModelChange?: (model: SortModel) => void;
|
|
71
|
+
/** Controlled filter model. */
|
|
72
|
+
filterModel?: FilterModel;
|
|
73
|
+
/** Fires when the filter model changes. */
|
|
74
|
+
onFilterModelChange?: (model: FilterModel) => void;
|
|
75
|
+
/** Show the global quick-filter toolbar. */
|
|
76
|
+
showToolbar?: boolean;
|
|
77
|
+
/** Rows per page for pagination. @default 25 */
|
|
78
|
+
pageSize?: number;
|
|
79
|
+
/** Available page-size options. @default [10, 25, 50, 100] */
|
|
80
|
+
pageSizeOptions?: number[];
|
|
81
|
+
/** Controlled current page (0-indexed). */
|
|
82
|
+
page?: number;
|
|
83
|
+
/** Fires when page changes. */
|
|
84
|
+
onPageChange?: (page: number) => void;
|
|
85
|
+
/** Container height. If set, enables virtualized scrolling. @default 'auto' */
|
|
86
|
+
height?: number | string;
|
|
87
|
+
/** Fixed row height in px (required for virtualization). @default 48 */
|
|
88
|
+
rowHeight?: number;
|
|
89
|
+
/** Additional CSS class on the root element. */
|
|
90
|
+
className?: string;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/datagrid/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/datagrid/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DataGridColumn, FilterModel, SortModel } from './types.js';
|
|
2
|
+
/** Extract a comparable value from a row cell. */
|
|
3
|
+
export declare function getCellValue<R extends Record<string, unknown>>(row: R, col: DataGridColumn<R>): unknown;
|
|
4
|
+
/** Sort rows by a single column. Returns a new array. */
|
|
5
|
+
export declare function sortRows<R extends Record<string, unknown>>(rows: R[], sortModel: SortModel, columns: DataGridColumn<R>[]): R[];
|
|
6
|
+
/** Filter rows based on the FilterModel. Returns a new array. */
|
|
7
|
+
export declare function filterRows<R extends Record<string, unknown>>(rows: R[], filterModel: FilterModel, columns: DataGridColumn<R>[]): R[];
|
|
8
|
+
/** Cycle sort direction: null → asc → desc → null */
|
|
9
|
+
export declare function nextSortDirection(currentField: string, currentModel: SortModel, clickedField: string): SortModel;
|
|
10
|
+
/** Paginate an array. Returns the slice for the given page. */
|
|
11
|
+
export declare function paginateRows<T>(rows: T[], page: number, pageSize: number): T[];
|
|
12
|
+
/** Compute column widths from fixed + flex definitions. */
|
|
13
|
+
export declare function computeColumnWidths<R>(columns: DataGridColumn<R>[], totalWidth: number): number[];
|
|
14
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/datagrid/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzE,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,GACrB,OAAO,CAET;AAED,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxD,IAAI,EAAE,CAAC,EAAE,EACT,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAC3B,CAAC,EAAE,CAmBL;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,IAAI,EAAE,CAAC,EAAE,EACT,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAC3B,CAAC,EAAE,CA8BL;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,SAAS,EACvB,YAAY,EAAE,MAAM,GACnB,SAAS,CAQX;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,CAG9E;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,EAC5B,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAWV"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/** Extract a comparable value from a row cell. */
|
|
2
|
+
export function getCellValue(row, col) {
|
|
3
|
+
return col.valueGetter ? col.valueGetter(row) : row[col.field];
|
|
4
|
+
}
|
|
5
|
+
/** Sort rows by a single column. Returns a new array. */
|
|
6
|
+
export function sortRows(rows, sortModel, columns) {
|
|
7
|
+
if (!sortModel.direction)
|
|
8
|
+
return rows;
|
|
9
|
+
const col = columns.find((c) => c.field === sortModel.field);
|
|
10
|
+
if (!col)
|
|
11
|
+
return rows;
|
|
12
|
+
return [...rows].sort((a, b) => {
|
|
13
|
+
const av = getCellValue(a, col);
|
|
14
|
+
const bv = getCellValue(b, col);
|
|
15
|
+
let cmp = 0;
|
|
16
|
+
if (typeof av === 'number' && typeof bv === 'number') {
|
|
17
|
+
cmp = av - bv;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
cmp = String(av ?? '').localeCompare(String(bv ?? ''), undefined, { numeric: true, sensitivity: 'base' });
|
|
21
|
+
}
|
|
22
|
+
return sortModel.direction === 'asc' ? cmp : -cmp;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** Filter rows based on the FilterModel. Returns a new array. */
|
|
26
|
+
export function filterRows(rows, filterModel, columns) {
|
|
27
|
+
let result = rows;
|
|
28
|
+
// Global quick filter
|
|
29
|
+
const q = filterModel.quickFilter?.trim().toLowerCase();
|
|
30
|
+
if (q) {
|
|
31
|
+
const filterableCols = columns.filter((c) => c.filterable !== false);
|
|
32
|
+
result = result.filter((row) => filterableCols.some((col) => {
|
|
33
|
+
const v = getCellValue(row, col);
|
|
34
|
+
return String(v ?? '').toLowerCase().includes(q);
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
// Per-column filters
|
|
38
|
+
const colFilters = filterModel.columnFilters ?? {};
|
|
39
|
+
const activeColFilters = Object.entries(colFilters).filter(([, v]) => v.trim() !== '');
|
|
40
|
+
if (activeColFilters.length > 0) {
|
|
41
|
+
result = result.filter((row) => activeColFilters.every(([field, filterStr]) => {
|
|
42
|
+
const col = columns.find((c) => c.field === field);
|
|
43
|
+
if (!col)
|
|
44
|
+
return true;
|
|
45
|
+
const v = getCellValue(row, col);
|
|
46
|
+
return String(v ?? '').toLowerCase().includes(filterStr.toLowerCase());
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
/** Cycle sort direction: null → asc → desc → null */
|
|
52
|
+
export function nextSortDirection(currentField, currentModel, clickedField) {
|
|
53
|
+
if (currentModel.field !== clickedField || currentModel.direction === null) {
|
|
54
|
+
return { field: clickedField, direction: 'asc' };
|
|
55
|
+
}
|
|
56
|
+
if (currentModel.direction === 'asc') {
|
|
57
|
+
return { field: clickedField, direction: 'desc' };
|
|
58
|
+
}
|
|
59
|
+
return { field: clickedField, direction: null };
|
|
60
|
+
}
|
|
61
|
+
/** Paginate an array. Returns the slice for the given page. */
|
|
62
|
+
export function paginateRows(rows, page, pageSize) {
|
|
63
|
+
const start = page * pageSize;
|
|
64
|
+
return rows.slice(start, start + pageSize);
|
|
65
|
+
}
|
|
66
|
+
/** Compute column widths from fixed + flex definitions. */
|
|
67
|
+
export function computeColumnWidths(columns, totalWidth) {
|
|
68
|
+
const fixed = columns.map((c) => c.width ?? 0);
|
|
69
|
+
const totalFixed = fixed.reduce((s, w) => s + w, 0);
|
|
70
|
+
const totalFlex = columns.reduce((s, c) => s + (c.flex ?? 0), 0);
|
|
71
|
+
const remaining = Math.max(0, totalWidth - totalFixed);
|
|
72
|
+
return columns.map((col, i) => {
|
|
73
|
+
if (col.width)
|
|
74
|
+
return col.width;
|
|
75
|
+
if (totalFlex > 0 && col.flex)
|
|
76
|
+
return (col.flex / totalFlex) * remaining;
|
|
77
|
+
return fixed[i] || 120; // fallback
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/datagrid/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calendar — standalone month-grid date picker widget.
|
|
3
|
+
*
|
|
4
|
+
* Implements WAI-ARIA Calendar / Date Grid pattern:
|
|
5
|
+
* - role="grid" on the day grid
|
|
6
|
+
* - role="gridcell" on each day
|
|
7
|
+
* - Arrow keys navigate within the grid
|
|
8
|
+
* - Enter/Space selects the focused date
|
|
9
|
+
* - Page Up/Down → prev/next month
|
|
10
|
+
* - Ctrl+Page Up/Down → prev/next year
|
|
11
|
+
* - Home/End → first/last day of current week
|
|
12
|
+
*/
|
|
13
|
+
export interface CalendarProps {
|
|
14
|
+
/** Currently selected date as YYYY-MM-DD. */
|
|
15
|
+
value?: string;
|
|
16
|
+
/** Fires with YYYY-MM-DD when a day is selected. */
|
|
17
|
+
onChange?: (value: string) => void;
|
|
18
|
+
/** Minimum selectable date (YYYY-MM-DD). */
|
|
19
|
+
min?: string;
|
|
20
|
+
/** Maximum selectable date (YYYY-MM-DD). */
|
|
21
|
+
max?: string;
|
|
22
|
+
/** Initial month to display (defaults to selected or current month). */
|
|
23
|
+
defaultMonth?: {
|
|
24
|
+
year: number;
|
|
25
|
+
month: number;
|
|
26
|
+
};
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function Calendar({ value, onChange, min, max, defaultMonth, className }: CalendarProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
//# sourceMappingURL=Calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/components/datepicker/Calendar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,aAAa,2CA2L7F"}
|