@solidxai/core-ui 0.1.5-beta.10 → 0.1.5-beta.11
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/auth/SolidOTPVerify.d.ts +3 -0
- package/dist/components/auth/SolidOTPVerify.d.ts.map +1 -0
- package/dist/components/auth/SolidOTPVerify.js +67 -0
- package/dist/components/auth/SolidOTPVerify.js.map +1 -0
- package/dist/components/auth/SolidOTPVerify.tsx +133 -0
- package/dist/components/common/AuthBanner.js.map +1 -1
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +2 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +1 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.js +50 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.js.map +1 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.tsx +70 -0
- package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.js +22 -15
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.tsx +14 -2
- package/dist/nextAuth/authProviders.d.ts +4 -0
- package/dist/nextAuth/authProviders.d.ts.map +1 -0
- package/dist/nextAuth/authProviders.js +198 -0
- package/dist/nextAuth/authProviders.js.map +1 -0
- package/dist/nextAuth/authProviders.tsx +232 -0
- package/dist/nextAuth/handleLogout.d.ts +2 -0
- package/dist/nextAuth/handleLogout.d.ts.map +1 -0
- package/dist/nextAuth/handleLogout.js +36 -0
- package/dist/nextAuth/handleLogout.js.map +1 -0
- package/dist/nextAuth/handleLogout.tsx +39 -0
- package/dist/nextAuth/refreshAccessToken.d.ts +2 -0
- package/dist/nextAuth/refreshAccessToken.d.ts.map +1 -0
- package/dist/nextAuth/refreshAccessToken.js +24 -0
- package/dist/nextAuth/refreshAccessToken.js.map +1 -0
- package/dist/nextAuth/refreshAccessToken.tsx +28 -0
- package/dist/redux/features/settingsSlice.d.ts +20 -0
- package/dist/redux/features/settingsSlice.d.ts.map +1 -0
- package/dist/redux/features/settingsSlice.js +39 -0
- package/dist/redux/features/settingsSlice.js.map +1 -0
- package/dist/redux/features/settingsSlice.ts +60 -0
- package/package.json +1 -1
- package/dist/components/auth/AuthTabs.d.ts +0 -14
- package/dist/components/auth/AuthTabs.d.ts.map +0 -1
- package/dist/components/auth/AuthTabs.js +0 -19
- package/dist/components/auth/AuthTabs.js.map +0 -1
- package/dist/components/auth/AuthTabs.tsx +0 -38
- package/dist/components/common/SolidErrorStatePage.d.ts +0 -12
- package/dist/components/common/SolidErrorStatePage.d.ts.map +0 -1
- package/dist/components/common/SolidErrorStatePage.js +0 -16
- package/dist/components/common/SolidErrorStatePage.js.map +0 -1
- package/dist/components/common/SolidErrorStatePage.tsx +0 -55
- package/dist/components/core/list/PLAN.md +0 -92
- package/dist/components/core/list/SolidDataTable.d.ts +0 -58
- package/dist/components/core/list/SolidDataTable.d.ts.map +0 -1
- package/dist/components/core/list/SolidDataTable.js +0 -141
- package/dist/components/core/list/SolidDataTable.js.map +0 -1
- package/dist/components/core/list/SolidDataTable.tsx +0 -314
- package/dist/components/core/list/SolidDataTablePagination.d.ts +0 -15
- package/dist/components/core/list/SolidDataTablePagination.d.ts.map +0 -1
- package/dist/components/core/list/SolidDataTablePagination.js +0 -22
- package/dist/components/core/list/SolidDataTablePagination.js.map +0 -1
- package/dist/components/core/list/SolidDataTablePagination.tsx +0 -71
- package/dist/components/layout/AdminTopHeader.d.ts +0 -2
- package/dist/components/layout/AdminTopHeader.d.ts.map +0 -1
- package/dist/components/layout/AdminTopHeader.js +0 -68
- package/dist/components/layout/AdminTopHeader.js.map +0 -1
- package/dist/components/layout/AdminTopHeader.tsx +0 -135
- package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts +0 -24
- package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidAutocomplete.js +0 -224
- package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +0 -339
- package/dist/components/shad-cn-ui/SolidButton.d.ts +0 -14
- package/dist/components/shad-cn-ui/SolidButton.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidButton.js +0 -36
- package/dist/components/shad-cn-ui/SolidButton.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidButton.tsx +0 -54
- package/dist/components/shad-cn-ui/SolidInput.d.ts +0 -5
- package/dist/components/shad-cn-ui/SolidInput.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidInput.js +0 -35
- package/dist/components/shad-cn-ui/SolidInput.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidInput.tsx +0 -12
- package/dist/components/shad-cn-ui/SolidNumberInput.d.ts +0 -10
- package/dist/components/shad-cn-ui/SolidNumberInput.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidNumberInput.js +0 -33
- package/dist/components/shad-cn-ui/SolidNumberInput.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidNumberInput.tsx +0 -24
- package/dist/components/shad-cn-ui/SolidSelect.d.ts +0 -16
- package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidSelect.js +0 -26
- package/dist/components/shad-cn-ui/SolidSelect.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidSelect.tsx +0 -65
- package/dist/components/shad-cn-ui/SolidTabs.d.ts +0 -18
- package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidTabs.js +0 -22
- package/dist/components/shad-cn-ui/SolidTabs.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidTabs.tsx +0 -73
- package/dist/components/shad-cn-ui/index.d.ts +0 -7
- package/dist/components/shad-cn-ui/index.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/index.js +0 -7
- package/dist/components/shad-cn-ui/index.js.map +0 -1
- package/dist/components/shad-cn-ui/index.ts +0 -6
- package/dist/components/solid-ui/SolidButton.d.ts +0 -14
- package/dist/components/solid-ui/SolidButton.d.ts.map +0 -1
- package/dist/components/solid-ui/SolidButton.js +0 -36
- package/dist/components/solid-ui/SolidButton.js.map +0 -1
- package/dist/components/solid-ui/SolidButton.tsx +0 -54
- package/dist/components/solid-ui/SolidTabs.d.ts +0 -18
- package/dist/components/solid-ui/SolidTabs.d.ts.map +0 -1
- package/dist/components/solid-ui/SolidTabs.js +0 -22
- package/dist/components/solid-ui/SolidTabs.js.map +0 -1
- package/dist/components/solid-ui/SolidTabs.tsx +0 -73
- package/dist/components/solid-ui/index.d.ts +0 -3
- package/dist/components/solid-ui/index.d.ts.map +0 -1
- package/dist/components/solid-ui/index.js +0 -3
- package/dist/components/solid-ui/index.js.map +0 -1
- package/dist/components/solid-ui/index.ts +0 -2
- package/dist/resources/images/errors/error-astronaut-404.png +0 -0
- package/dist/resources/shadcn-base.css +0 -3200
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { SolidButton } from "../shad-cn-ui/SolidButton";
|
|
3
|
-
export var SolidErrorStatePage = function (_a) {
|
|
4
|
-
var _b = _a.eyebrow, eyebrow = _b === void 0 ? "Whoops!" : _b, statusCode = _a.statusCode, title = _a.title, description = _a.description, actionLabel = _a.actionLabel, actionHref = _a.actionHref, onAction = _a.onAction;
|
|
5
|
-
var handleAction = function () {
|
|
6
|
-
if (onAction) {
|
|
7
|
-
onAction();
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
if (actionHref) {
|
|
11
|
-
window.location.href = actionHref;
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
return (_jsxs("div", { className: "solid-error-page", children: [_jsx("section", { className: "solid-error-page__content", children: _jsxs("div", { className: "solid-error-page__copy", children: [_jsx("p", { className: "solid-error-page__eyebrow", children: eyebrow }), _jsx("h1", { className: "solid-error-page__title", children: title }), _jsx("p", { className: "solid-error-page__description", children: description }), _jsx(SolidButton, { size: "lg", className: "solid-error-page__cta", onClick: handleAction, children: actionLabel })] }) }), _jsx("section", { className: "solid-error-page__visual", "aria-hidden": "true", children: _jsx("div", { className: "solid-error-page__visual-card", children: statusCode ? _jsx("span", { className: "solid-error-page__code", children: statusCode }) : null }) })] }));
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=SolidErrorStatePage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SolidErrorStatePage.js","sourceRoot":"","sources":["../../../src/components/common/SolidErrorStatePage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAYxD,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,EAQT;QAPzB,eAAmB,EAAnB,OAAO,mBAAG,SAAS,KAAA,EACnB,UAAU,gBAAA,EACV,KAAK,WAAA,EACL,WAAW,iBAAA,EACX,WAAW,iBAAA,EACX,UAAU,gBAAA,EACV,QAAQ,cAAA;IAER,IAAM,YAAY,GAAG;QACnB,IAAI,QAAQ,EAAE;YACZ,QAAQ,EAAE,CAAC;YACX,OAAO;SACR;QACD,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;SACnC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,kBAAkB,aAC/B,kBAAS,SAAS,EAAC,2BAA2B,YAC5C,eAAK,SAAS,EAAC,wBAAwB,aACrC,YAAG,SAAS,EAAC,2BAA2B,YAAE,OAAO,GAAK,EACtD,aAAI,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAM,EACpD,YAAG,SAAS,EAAC,+BAA+B,YAAE,WAAW,GAAK,EAC9D,KAAC,WAAW,IACV,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,uBAAuB,EACjC,OAAO,EAAE,YAAY,YAEpB,WAAW,GACA,IACV,GACE,EACV,kBAAS,SAAS,EAAC,0BAA0B,iBAAa,MAAM,YAC9D,cAAK,SAAS,EAAC,+BAA+B,YAC3C,UAAU,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,wBAAwB,YAAE,UAAU,GAAQ,CAAC,CAAC,CAAC,IAAI,GAC7E,GACE,IACN,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { SolidButton } from \"../shad-cn-ui/SolidButton\";\n\ntype SolidErrorStatePageProps = {\n eyebrow?: string;\n statusCode?: string;\n title: string;\n description: string;\n actionLabel: string;\n actionHref?: string;\n onAction?: () => void;\n};\n\nexport const SolidErrorStatePage = ({\n eyebrow = \"Whoops!\",\n statusCode,\n title,\n description,\n actionLabel,\n actionHref,\n onAction,\n}: SolidErrorStatePageProps) => {\n const handleAction = () => {\n if (onAction) {\n onAction();\n return;\n }\n if (actionHref) {\n window.location.href = actionHref;\n }\n };\n\n return (\n <div className=\"solid-error-page\">\n <section className=\"solid-error-page__content\">\n <div className=\"solid-error-page__copy\">\n <p className=\"solid-error-page__eyebrow\">{eyebrow}</p>\n <h1 className=\"solid-error-page__title\">{title}</h1>\n <p className=\"solid-error-page__description\">{description}</p>\n <SolidButton\n size=\"lg\"\n className=\"solid-error-page__cta\"\n onClick={handleAction}\n >\n {actionLabel}\n </SolidButton>\n </div>\n </section>\n <section className=\"solid-error-page__visual\" aria-hidden=\"true\">\n <div className=\"solid-error-page__visual-card\">\n {statusCode ? <span className=\"solid-error-page__code\">{statusCode}</span> : null}\n </div>\n </section>\n </div>\n );\n};\n"]}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { SolidButton } from "../shad-cn-ui/SolidButton";
|
|
2
|
-
|
|
3
|
-
type SolidErrorStatePageProps = {
|
|
4
|
-
eyebrow?: string;
|
|
5
|
-
statusCode?: string;
|
|
6
|
-
title: string;
|
|
7
|
-
description: string;
|
|
8
|
-
actionLabel: string;
|
|
9
|
-
actionHref?: string;
|
|
10
|
-
onAction?: () => void;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export const SolidErrorStatePage = ({
|
|
14
|
-
eyebrow = "Whoops!",
|
|
15
|
-
statusCode,
|
|
16
|
-
title,
|
|
17
|
-
description,
|
|
18
|
-
actionLabel,
|
|
19
|
-
actionHref,
|
|
20
|
-
onAction,
|
|
21
|
-
}: SolidErrorStatePageProps) => {
|
|
22
|
-
const handleAction = () => {
|
|
23
|
-
if (onAction) {
|
|
24
|
-
onAction();
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
if (actionHref) {
|
|
28
|
-
window.location.href = actionHref;
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
return (
|
|
33
|
-
<div className="solid-error-page">
|
|
34
|
-
<section className="solid-error-page__content">
|
|
35
|
-
<div className="solid-error-page__copy">
|
|
36
|
-
<p className="solid-error-page__eyebrow">{eyebrow}</p>
|
|
37
|
-
<h1 className="solid-error-page__title">{title}</h1>
|
|
38
|
-
<p className="solid-error-page__description">{description}</p>
|
|
39
|
-
<SolidButton
|
|
40
|
-
size="lg"
|
|
41
|
-
className="solid-error-page__cta"
|
|
42
|
-
onClick={handleAction}
|
|
43
|
-
>
|
|
44
|
-
{actionLabel}
|
|
45
|
-
</SolidButton>
|
|
46
|
-
</div>
|
|
47
|
-
</section>
|
|
48
|
-
<section className="solid-error-page__visual" aria-hidden="true">
|
|
49
|
-
<div className="solid-error-page__visual-card">
|
|
50
|
-
{statusCode ? <span className="solid-error-page__code">{statusCode}</span> : null}
|
|
51
|
-
</div>
|
|
52
|
-
</section>
|
|
53
|
-
</div>
|
|
54
|
-
);
|
|
55
|
-
};
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# List View Rewrite Plan (Shadcn + Single Sort)
|
|
2
|
-
|
|
3
|
-
## Goal
|
|
4
|
-
- [ ] Rebuild list view UX on shadcn primitives while preserving current behavior.
|
|
5
|
-
- [ ] Remove PrimeReact dependencies from list flow.
|
|
6
|
-
- [ ] Replace multi-sort with single-sort everywhere (UI, state, query, imperative API).
|
|
7
|
-
|
|
8
|
-
## Scope
|
|
9
|
-
- [ ] `SolidListView.tsx`
|
|
10
|
-
- [ ] `SolidListViewColumn.tsx` + `columns/*`
|
|
11
|
-
- [ ] `SolidListViewConfigure.tsx`
|
|
12
|
-
- [ ] `SolidColumnSelector/SolidListColumnSelector.tsx`
|
|
13
|
-
- [ ] `core/common/SolidGlobalSearchElement.tsx`
|
|
14
|
-
- [ ] `core/common/FilterComponent.tsx`
|
|
15
|
-
- [ ] `core/common/SolidGenericImport/*`
|
|
16
|
-
- [ ] `components/common/SolidExport.tsx`
|
|
17
|
-
|
|
18
|
-
## Phase 1: Architecture Baseline
|
|
19
|
-
- [ ] Define target component map (shadcn): table, dropdown-menu, dialog, popover, tabs, select, checkbox, input, pagination.
|
|
20
|
-
- [ ] Freeze current contract of `SolidListViewHandle` and decide required signature changes for single-sort.
|
|
21
|
-
- [ ] Add migration notes for preserved extension points:
|
|
22
|
-
- [ ] `onListLoad`
|
|
23
|
-
- [ ] `onBeforeListDataLoad`
|
|
24
|
-
- [ ] custom header/row buttons
|
|
25
|
-
|
|
26
|
-
## Phase 2: Sorting (Drop Multi-sort)
|
|
27
|
-
- [x] Replace `multiSortMeta` state with single sort state (`sortField`, `sortOrder`).
|
|
28
|
-
- [x] Update DataTable/table trigger logic to emit one active sort only.
|
|
29
|
-
- [x] Update `setQueryString()` to serialize exactly one sort expression.
|
|
30
|
-
- [x] Update localStorage restore/persist shape to single-sort.
|
|
31
|
-
- [x] Update `SolidListViewHandle.setSort(...)` to single-sort API.
|
|
32
|
-
- [x] Remove/cleanup all code paths referencing `event.multiSortMeta`.
|
|
33
|
-
|
|
34
|
-
## Phase 3: Core Table + Pagination
|
|
35
|
-
- [x] Implement shadcn table container and row rendering.
|
|
36
|
-
- [x] Recreate selectable rows (active + deleted split behavior).
|
|
37
|
-
- [x] Recreate paginator with:
|
|
38
|
-
- [x] rows per page
|
|
39
|
-
- [x] current page report
|
|
40
|
-
- [x] next/prev controls
|
|
41
|
-
- [x] Preserve row click routing and session back-navigation markers.
|
|
42
|
-
- [ ] Preserve archived/recover flows.
|
|
43
|
-
|
|
44
|
-
## Phase 4: Filters + Search
|
|
45
|
-
- [ ] Keep predicate model unchanged (`custom_filter_predicate`, `search_predicate`, `saved_filter_predicate`, `predefined_search_predicate`, grouping/aggregation).
|
|
46
|
-
- [ ] Migrate `SolidGlobalSearchElement` dialogs/popovers to shadcn.
|
|
47
|
-
- [ ] Migrate `FilterComponent` rule builder UI to shadcn controls.
|
|
48
|
-
- [ ] Preserve saved filter URL behavior (`savedQuery`) and local cache behavior.
|
|
49
|
-
- [ ] Confirm relation filter hydration still works.
|
|
50
|
-
|
|
51
|
-
## Phase 5: Configure Menu + Column Selector
|
|
52
|
-
- [ ] Replace cog overlay/context menu with shadcn dropdown/popover.
|
|
53
|
-
- [ ] Rebuild "Customize Layout" panel in shadcn.
|
|
54
|
-
- [ ] Keep drag-reorder + checkbox visibility behavior in `SolidListColumnSelector`.
|
|
55
|
-
- [ ] Remove page reload after layout save; refetch/re-render list metadata instead.
|
|
56
|
-
- [ ] Fix permission guard checks in configure actions (`actionsAllowed.includes(...)`).
|
|
57
|
-
|
|
58
|
-
## Phase 6: Import / Export
|
|
59
|
-
- [ ] Migrate `SolidExport` dialog and controls to shadcn.
|
|
60
|
-
- [ ] Preserve template CRUD and filtered export path.
|
|
61
|
-
- [ ] Migrate `SolidGenericImport` stepper/dialog flow to shadcn.
|
|
62
|
-
- [ ] Preserve upload, mapping, sync import, and failed-record download behavior.
|
|
63
|
-
|
|
64
|
-
## Phase 7: Column Renderers
|
|
65
|
-
- [ ] Keep `SolidListViewColumn` type dispatch pattern.
|
|
66
|
-
- [ ] Migrate per-column cell UI to shadcn styling where applicable.
|
|
67
|
-
- [ ] Preserve widgets loaded via extension registry.
|
|
68
|
-
- [ ] Verify relation columns (many-to-one, one-to-many, many-to-many) behavior parity.
|
|
69
|
-
|
|
70
|
-
## Phase 8: Cleanup
|
|
71
|
-
- [ ] Remove unused PrimeReact imports/styles from list modules.
|
|
72
|
-
- [ ] Delete obsolete list-specific filter components if fully replaced.
|
|
73
|
-
- [ ] Consolidate duplicated filter helpers between `core/list` and `core/filter` if safe.
|
|
74
|
-
|
|
75
|
-
## Validation Checklist
|
|
76
|
-
- [ ] List metadata fetch works for list pages and embedded mode.
|
|
77
|
-
- [ ] API query contains correct: `offset`, `limit`, `filters`, `populate`, `populateMedia`, `sort`, `locale`.
|
|
78
|
-
- [ ] Single sort works from UI and imperative API.
|
|
79
|
-
- [ ] Pagination state persists/restores correctly.
|
|
80
|
-
- [ ] Global search + custom filters + saved filters + predefined searches work together.
|
|
81
|
-
- [ ] Grouping/aggregation predicates are preserved in query payload.
|
|
82
|
-
- [ ] Column selector save updates layout reliably.
|
|
83
|
-
- [ ] Import and export end-to-end succeed.
|
|
84
|
-
- [ ] Row actions (default + custom) still honor permissions/roles.
|
|
85
|
-
|
|
86
|
-
## Suggested Execution Order
|
|
87
|
-
- [ ] 1) Sorting refactor first (single-sort data model).
|
|
88
|
-
- [ ] 2) Table shell + pagination.
|
|
89
|
-
- [ ] 3) Configure menu + column selector.
|
|
90
|
-
- [ ] 4) Global search/filter builder.
|
|
91
|
-
- [ ] 5) Import/export.
|
|
92
|
-
- [ ] 6) Column renderer pass + cleanup.
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
export type DataTableStateEvent = {
|
|
3
|
-
sortField?: string;
|
|
4
|
-
sortOrder?: 1 | -1 | 0;
|
|
5
|
-
};
|
|
6
|
-
type HeaderRenderer = React.ReactNode | (() => React.ReactNode);
|
|
7
|
-
type BodyRenderer = (rowData: any) => React.ReactNode;
|
|
8
|
-
export type SolidColumnProps = {
|
|
9
|
-
field?: string;
|
|
10
|
-
header?: HeaderRenderer;
|
|
11
|
-
body?: BodyRenderer;
|
|
12
|
-
sortable?: boolean;
|
|
13
|
-
selectionMode?: "multiple" | "single" | null;
|
|
14
|
-
headerStyle?: React.CSSProperties;
|
|
15
|
-
style?: React.CSSProperties;
|
|
16
|
-
className?: string;
|
|
17
|
-
headerClassName?: string;
|
|
18
|
-
frozen?: boolean;
|
|
19
|
-
alignFrozen?: "left" | "right";
|
|
20
|
-
[key: string]: any;
|
|
21
|
-
};
|
|
22
|
-
export declare function Column(_props: SolidColumnProps): null;
|
|
23
|
-
type SolidDataTableProps = {
|
|
24
|
-
value: any[];
|
|
25
|
-
children: React.ReactNode;
|
|
26
|
-
size?: "small" | "normal" | "large";
|
|
27
|
-
viewportHeight?: string;
|
|
28
|
-
dataKey?: string;
|
|
29
|
-
emptyMessage?: React.ReactNode;
|
|
30
|
-
rows?: number;
|
|
31
|
-
first?: number;
|
|
32
|
-
totalRecords?: number;
|
|
33
|
-
rowsPerPageOptions?: number[];
|
|
34
|
-
onPage?: (event: {
|
|
35
|
-
first: number;
|
|
36
|
-
rows: number;
|
|
37
|
-
}) => void;
|
|
38
|
-
onSort?: (event: DataTableStateEvent) => void;
|
|
39
|
-
sortField?: string;
|
|
40
|
-
sortOrder?: 1 | -1 | 0;
|
|
41
|
-
removableSort?: boolean;
|
|
42
|
-
selection?: any[];
|
|
43
|
-
selectionMode?: "checkbox" | null;
|
|
44
|
-
onSelectionChange?: (event: {
|
|
45
|
-
value: any[];
|
|
46
|
-
}) => void;
|
|
47
|
-
onRowClick?: (event: {
|
|
48
|
-
data: any;
|
|
49
|
-
}) => void;
|
|
50
|
-
rowClassName?: (rowData: any) => string;
|
|
51
|
-
tableClassName?: string;
|
|
52
|
-
paginatorClassName?: string;
|
|
53
|
-
currentPageReportTemplate?: string;
|
|
54
|
-
[key: string]: any;
|
|
55
|
-
};
|
|
56
|
-
export declare function SolidDataTable({ value, children, size, viewportHeight, dataKey, emptyMessage, rows, first, totalRecords, rowsPerPageOptions, onPage, onSort, sortField, sortOrder, removableSort, selection, selectionMode, onSelectionChange, onRowClick, rowClassName, tableClassName, paginatorClassName, currentPageReportTemplate, }: SolidDataTableProps): import("react/jsx-runtime").JSX.Element;
|
|
57
|
-
export {};
|
|
58
|
-
//# sourceMappingURL=SolidDataTable.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SolidDataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/core/list/SolidDataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
-
if (ar || !(i in from)) {
|
|
15
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
-
ar[i] = from[i];
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
-
};
|
|
21
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
-
import React from "react";
|
|
23
|
-
export function Column(_props) {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
var cx = function () {
|
|
27
|
-
var parts = [];
|
|
28
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
29
|
-
parts[_i] = arguments[_i];
|
|
30
|
-
}
|
|
31
|
-
return parts.filter(Boolean).join(" ");
|
|
32
|
-
};
|
|
33
|
-
function renderHeaderNode(header) {
|
|
34
|
-
if (typeof header === "function")
|
|
35
|
-
return header();
|
|
36
|
-
return header !== null && header !== void 0 ? header : null;
|
|
37
|
-
}
|
|
38
|
-
function normalizeColumns(children) {
|
|
39
|
-
return React.Children.toArray(children).filter(function (child) {
|
|
40
|
-
return React.isValidElement(child);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
function resolveSortIcon(active, order) {
|
|
44
|
-
if (!active || order === 0)
|
|
45
|
-
return "pi pi-sort-alt";
|
|
46
|
-
return order === 1 ? "pi pi-sort-amount-up-alt" : "pi pi-sort-amount-down";
|
|
47
|
-
}
|
|
48
|
-
function nextSortOrder(active, order, removableSort) {
|
|
49
|
-
if (removableSort === void 0) { removableSort = true; }
|
|
50
|
-
if (!active || order === 0)
|
|
51
|
-
return 1;
|
|
52
|
-
if (order === 1)
|
|
53
|
-
return -1;
|
|
54
|
-
return removableSort ? 0 : 1;
|
|
55
|
-
}
|
|
56
|
-
export function SolidDataTable(_a) {
|
|
57
|
-
var value = _a.value, children = _a.children, _b = _a.size, size = _b === void 0 ? "normal" : _b, viewportHeight = _a.viewportHeight, _c = _a.dataKey, dataKey = _c === void 0 ? "id" : _c, emptyMessage = _a.emptyMessage, _d = _a.rows, rows = _d === void 0 ? 25 : _d, _e = _a.first, first = _e === void 0 ? 0 : _e, _f = _a.totalRecords, totalRecords = _f === void 0 ? 0 : _f, _g = _a.rowsPerPageOptions, rowsPerPageOptions = _g === void 0 ? [10, 25, 50, 100] : _g, onPage = _a.onPage, onSort = _a.onSort, sortField = _a.sortField, _h = _a.sortOrder, sortOrder = _h === void 0 ? 0 : _h, _j = _a.removableSort, removableSort = _j === void 0 ? true : _j, _k = _a.selection, selection = _k === void 0 ? [] : _k, selectionMode = _a.selectionMode, onSelectionChange = _a.onSelectionChange, onRowClick = _a.onRowClick, rowClassName = _a.rowClassName, tableClassName = _a.tableClassName, paginatorClassName = _a.paginatorClassName, _l = _a.currentPageReportTemplate, currentPageReportTemplate = _l === void 0 ? "{first} - {last} of {totalRecords}" : _l;
|
|
58
|
-
var columns = normalizeColumns(children);
|
|
59
|
-
var pageRows = value !== null && value !== void 0 ? value : [];
|
|
60
|
-
var selectedKeys = new Set((selection || []).map(function (row) { return String(row === null || row === void 0 ? void 0 : row[dataKey]); }));
|
|
61
|
-
var allSelected = pageRows.length > 0 && pageRows.every(function (row) { return selectedKeys.has(String(row === null || row === void 0 ? void 0 : row[dataKey])); });
|
|
62
|
-
var start = totalRecords === 0 ? 0 : first + 1;
|
|
63
|
-
var end = Math.min(first + rows, totalRecords);
|
|
64
|
-
var currentPage = rows > 0 ? Math.floor(first / rows) + 1 : 1;
|
|
65
|
-
var totalPages = rows > 0 ? Math.max(1, Math.ceil(totalRecords / rows)) : 1;
|
|
66
|
-
var report = currentPageReportTemplate
|
|
67
|
-
.replace("{first}", String(start))
|
|
68
|
-
.replace("{last}", String(end))
|
|
69
|
-
.replace("{totalRecords}", String(totalRecords));
|
|
70
|
-
var emitSelection = function (nextSelection) {
|
|
71
|
-
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange({ value: nextSelection });
|
|
72
|
-
};
|
|
73
|
-
var toggleSelectAll = function (checked) {
|
|
74
|
-
if (!checked) {
|
|
75
|
-
var pageKeys_1 = new Set(pageRows.map(function (row) { return String(row === null || row === void 0 ? void 0 : row[dataKey]); }));
|
|
76
|
-
emitSelection((selection || []).filter(function (row) { return !pageKeys_1.has(String(row === null || row === void 0 ? void 0 : row[dataKey])); }));
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
var merged = __spreadArray([], (selection || []), true);
|
|
80
|
-
var mergedKeys = new Set(merged.map(function (row) { return String(row === null || row === void 0 ? void 0 : row[dataKey]); }));
|
|
81
|
-
pageRows.forEach(function (row) {
|
|
82
|
-
var key = String(row === null || row === void 0 ? void 0 : row[dataKey]);
|
|
83
|
-
if (!mergedKeys.has(key))
|
|
84
|
-
merged.push(row);
|
|
85
|
-
});
|
|
86
|
-
emitSelection(merged);
|
|
87
|
-
};
|
|
88
|
-
var toggleRowSelection = function (rowData, checked) {
|
|
89
|
-
var key = String(rowData === null || rowData === void 0 ? void 0 : rowData[dataKey]);
|
|
90
|
-
if (!checked) {
|
|
91
|
-
emitSelection((selection || []).filter(function (row) { return String(row === null || row === void 0 ? void 0 : row[dataKey]) !== key; }));
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
emitSelection(__spreadArray(__spreadArray([], (selection || []), true), [rowData], false));
|
|
95
|
-
};
|
|
96
|
-
var densityClass = size === "small"
|
|
97
|
-
? "solid-table-density-compact"
|
|
98
|
-
: size === "large"
|
|
99
|
-
? "solid-table-density-comfortable"
|
|
100
|
-
: "solid-table-density-cozy";
|
|
101
|
-
return (_jsxs("div", { className: cx("solid-data-table-root w-full min-h-0", densityClass), style: {
|
|
102
|
-
height: viewportHeight || "100%",
|
|
103
|
-
maxHeight: viewportHeight || "100%",
|
|
104
|
-
}, children: [_jsx("div", { className: "solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background", children: _jsxs("table", { className: cx("w-full text-sm border-collapse", tableClassName), children: [_jsx("thead", { className: "solid-data-table-head sticky top-0 z-2", children: _jsx("tr", { children: columns.map(function (column, index) {
|
|
105
|
-
var props = column.props;
|
|
106
|
-
var isSelectionColumn = props.selectionMode === "multiple";
|
|
107
|
-
var isSortable = Boolean(props.sortable && props.field && !isSelectionColumn);
|
|
108
|
-
var isActiveSort = isSortable && sortField === props.field;
|
|
109
|
-
var iconClass = resolveSortIcon(Boolean(isActiveSort), sortOrder);
|
|
110
|
-
return (_jsx("th", { className: cx("solid-data-table-th text-left text-foreground whitespace-nowrap", isSelectionColumn ? "solid-data-table-selection-col" : undefined, props.headerClassName), style: __assign(__assign({}, props.style), props.headerStyle), children: isSelectionColumn ? (_jsx("input", { type: "checkbox", checked: allSelected, onChange: function (e) { return toggleSelectAll(e.currentTarget.checked); }, "aria-label": "Select all rows" })) : (_jsxs("button", { type: "button", className: cx("solid-table-header-button", isSortable ? "is-sortable" : undefined), onClick: function () {
|
|
111
|
-
if (!isSortable)
|
|
112
|
-
return;
|
|
113
|
-
var nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);
|
|
114
|
-
onSort === null || onSort === void 0 ? void 0 : onSort({
|
|
115
|
-
sortField: nextOrder === 0 ? undefined : props.field,
|
|
116
|
-
sortOrder: nextOrder,
|
|
117
|
-
});
|
|
118
|
-
}, children: [renderHeaderNode(props.header), isSortable ? _jsx("i", { className: iconClass, "aria-hidden": "true" }) : null] })) }, "header-".concat(index)));
|
|
119
|
-
}) }) }), _jsx("tbody", { children: pageRows.length === 0 ? (_jsx("tr", { children: _jsx("td", { className: "px-3 py-6 text-center text-muted-foreground", colSpan: Math.max(columns.length, 1), children: emptyMessage || "No records found" }) })) : (pageRows.map(function (rowData) {
|
|
120
|
-
var key = String(rowData === null || rowData === void 0 ? void 0 : rowData[dataKey]);
|
|
121
|
-
var rowSelected = selectedKeys.has(key);
|
|
122
|
-
return (_jsx("tr", { className: cx("solid-data-table-row", rowClassName === null || rowClassName === void 0 ? void 0 : rowClassName(rowData)), onClick: function (event) {
|
|
123
|
-
var target = event.target;
|
|
124
|
-
if (target.closest("button,a,input,label,[data-no-row-click='true']"))
|
|
125
|
-
return;
|
|
126
|
-
onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick({ data: rowData });
|
|
127
|
-
}, children: columns.map(function (column, index) {
|
|
128
|
-
var props = column.props;
|
|
129
|
-
var isSelectionColumn = props.selectionMode === "multiple";
|
|
130
|
-
var content = isSelectionColumn
|
|
131
|
-
? (_jsx("input", { type: "checkbox", checked: rowSelected, onChange: function (e) { return toggleRowSelection(rowData, e.currentTarget.checked); }, onClick: function (e) { return e.stopPropagation(); }, "aria-label": "Select row" }))
|
|
132
|
-
: props.body
|
|
133
|
-
? props.body(rowData)
|
|
134
|
-
: props.field
|
|
135
|
-
? rowData === null || rowData === void 0 ? void 0 : rowData[props.field]
|
|
136
|
-
: null;
|
|
137
|
-
return (_jsx("td", { className: cx("solid-data-table-td align-top text-foreground", isSelectionColumn ? "solid-data-table-selection-col" : undefined, props.className), style: props.style, children: content }, "cell-".concat(key, "-").concat(index)));
|
|
138
|
-
}) }, key));
|
|
139
|
-
})) })] }) }), typeof onPage === "function" ? (_jsxs("div", { className: cx("w-full solid-table-paginator solid-table-paginator-align-end flex items-center justify-end gap-3 text-sm rounded-md border border-border/60 px-3 py-1.5 bg-background", paginatorClassName), children: [_jsxs("div", { className: "solid-paginator-meta flex items-center gap-2 ml-auto", children: [_jsx("span", { className: "solid-paginator-label", children: "Rows" }), _jsx("select", { value: rows, onChange: function (e) { return onPage({ first: 0, rows: Number(e.target.value) }); }, className: "solid-paginator-select", children: rowsPerPageOptions.map(function (option) { return (_jsx("option", { value: option, children: option }, option)); }) }), _jsx("span", { className: "solid-paginator-report", children: report })] }), _jsxs("div", { className: "solid-paginator-actions flex items-center gap-2", children: [_jsx("button", { type: "button", className: "solid-paginator-btn", onClick: function () { return onPage({ first: Math.max(0, first - rows), rows: rows }); }, disabled: currentPage <= 1, children: "Previous" }), _jsx("button", { type: "button", className: "solid-paginator-btn", onClick: function () { return onPage({ first: Math.min((totalPages - 1) * rows, first + rows), rows: rows }); }, disabled: currentPage >= totalPages, children: "Next" })] })] })) : null] }));
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=SolidDataTable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SolidDataTable.js","sourceRoot":"","sources":["../../../../src/components/core/list/SolidDataTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nexport type DataTableStateEvent = {\n sortField?: string;\n sortOrder?: 1 | -1 | 0;\n};\n\ntype HeaderRenderer = React.ReactNode | (() => React.ReactNode);\ntype BodyRenderer = (rowData: any) => React.ReactNode;\n\nexport type SolidColumnProps = {\n field?: string;\n header?: HeaderRenderer;\n body?: BodyRenderer;\n sortable?: boolean;\n selectionMode?: \"multiple\" | \"single\" | null;\n headerStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n className?: string;\n headerClassName?: string;\n frozen?: boolean;\n alignFrozen?: \"left\" | \"right\";\n [key: string]: any;\n};\n\nexport function Column(_props: SolidColumnProps) {\n return null;\n}\n\ntype SolidDataTableProps = {\n value: any[];\n children: React.ReactNode;\n size?: \"small\" | \"normal\" | \"large\";\n viewportHeight?: string;\n dataKey?: string;\n emptyMessage?: React.ReactNode;\n rows?: number;\n first?: number;\n totalRecords?: number;\n rowsPerPageOptions?: number[];\n onPage?: (event: { first: number; rows: number }) => void;\n onSort?: (event: DataTableStateEvent) => void;\n sortField?: string;\n sortOrder?: 1 | -1 | 0;\n removableSort?: boolean;\n selection?: any[];\n selectionMode?: \"checkbox\" | null;\n onSelectionChange?: (event: { value: any[] }) => void;\n onRowClick?: (event: { data: any }) => void;\n rowClassName?: (rowData: any) => string;\n tableClassName?: string;\n paginatorClassName?: string;\n currentPageReportTemplate?: string;\n [key: string]: any;\n};\n\nconst cx = (...parts: Array<string | undefined | false>) => parts.filter(Boolean).join(\" \");\n\nfunction renderHeaderNode(header?: HeaderRenderer) {\n if (typeof header === \"function\") return header();\n return header ?? null;\n}\n\nfunction normalizeColumns(children: React.ReactNode): React.ReactElement<SolidColumnProps>[] {\n return React.Children.toArray(children).filter((child): child is React.ReactElement<SolidColumnProps> => {\n return React.isValidElement(child);\n });\n}\n\nfunction resolveSortIcon(active: boolean, order: 1 | -1 | 0): string {\n if (!active || order === 0) return \"pi pi-sort-alt\";\n return order === 1 ? \"pi pi-sort-amount-up-alt\" : \"pi pi-sort-amount-down\";\n}\n\nfunction nextSortOrder(active: boolean, order: 1 | -1 | 0, removableSort = true): 1 | -1 | 0 {\n if (!active || order === 0) return 1;\n if (order === 1) return -1;\n return removableSort ? 0 : 1;\n}\n\nexport function SolidDataTable({\n value,\n children,\n size = \"normal\",\n viewportHeight,\n dataKey = \"id\",\n emptyMessage,\n rows = 25,\n first = 0,\n totalRecords = 0,\n rowsPerPageOptions = [10, 25, 50, 100],\n onPage,\n onSort,\n sortField,\n sortOrder = 0,\n removableSort = true,\n selection = [],\n selectionMode,\n onSelectionChange,\n onRowClick,\n rowClassName,\n tableClassName,\n paginatorClassName,\n currentPageReportTemplate = \"{first} - {last} of {totalRecords}\",\n}: SolidDataTableProps) {\n const columns = normalizeColumns(children);\n const pageRows = value ?? [];\n\n const selectedKeys = new Set((selection || []).map((row: any) => String(row?.[dataKey])));\n const allSelected = pageRows.length > 0 && pageRows.every((row: any) => selectedKeys.has(String(row?.[dataKey])));\n\n const start = totalRecords === 0 ? 0 : first + 1;\n const end = Math.min(first + rows, totalRecords);\n const currentPage = rows > 0 ? Math.floor(first / rows) + 1 : 1;\n const totalPages = rows > 0 ? Math.max(1, Math.ceil(totalRecords / rows)) : 1;\n\n const report = currentPageReportTemplate\n .replace(\"{first}\", String(start))\n .replace(\"{last}\", String(end))\n .replace(\"{totalRecords}\", String(totalRecords));\n\n const emitSelection = (nextSelection: any[]) => {\n onSelectionChange?.({ value: nextSelection });\n };\n\n const toggleSelectAll = (checked: boolean) => {\n if (!checked) {\n const pageKeys = new Set(pageRows.map((row: any) => String(row?.[dataKey])));\n emitSelection((selection || []).filter((row: any) => !pageKeys.has(String(row?.[dataKey]))));\n return;\n }\n const merged = [...(selection || [])];\n const mergedKeys = new Set(merged.map((row: any) => String(row?.[dataKey])));\n pageRows.forEach((row: any) => {\n const key = String(row?.[dataKey]);\n if (!mergedKeys.has(key)) merged.push(row);\n });\n emitSelection(merged);\n };\n\n const toggleRowSelection = (rowData: any, checked: boolean) => {\n const key = String(rowData?.[dataKey]);\n if (!checked) {\n emitSelection((selection || []).filter((row: any) => String(row?.[dataKey]) !== key));\n return;\n }\n emitSelection([...(selection || []), rowData]);\n };\n\n const densityClass =\n size === \"small\"\n ? \"solid-table-density-compact\"\n : size === \"large\"\n ? \"solid-table-density-comfortable\"\n : \"solid-table-density-cozy\";\n\n return (\n <div\n className={cx(\"solid-data-table-root w-full min-h-0\", densityClass)}\n style={{\n height: viewportHeight || \"100%\",\n maxHeight: viewportHeight || \"100%\",\n }}\n >\n <div className=\"solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background\">\n <table className={cx(\"w-full text-sm border-collapse\", tableClassName)}>\n <thead className=\"solid-data-table-head sticky top-0 z-2\">\n <tr>\n {columns.map((column, index) => {\n const props = column.props;\n const isSelectionColumn = props.selectionMode === \"multiple\";\n const isSortable = Boolean(props.sortable && props.field && !isSelectionColumn);\n const isActiveSort = isSortable && sortField === props.field;\n const iconClass = resolveSortIcon(Boolean(isActiveSort), sortOrder);\n return (\n <th\n key={`header-${index}`}\n className={cx(\n \"solid-data-table-th text-left text-foreground whitespace-nowrap\",\n isSelectionColumn ? \"solid-data-table-selection-col\" : undefined,\n props.headerClassName\n )}\n style={{ ...props.style, ...props.headerStyle }}\n >\n {isSelectionColumn ? (\n <input\n type=\"checkbox\"\n checked={allSelected}\n onChange={(e) => toggleSelectAll(e.currentTarget.checked)}\n aria-label=\"Select all rows\"\n />\n ) : (\n <button\n type=\"button\"\n className={cx(\"solid-table-header-button\", isSortable ? \"is-sortable\" : undefined)}\n onClick={() => {\n if (!isSortable) return;\n const nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);\n onSort?.({\n sortField: nextOrder === 0 ? undefined : props.field,\n sortOrder: nextOrder,\n });\n }}\n >\n {renderHeaderNode(props.header)}\n {isSortable ? <i className={iconClass} aria-hidden=\"true\" /> : null}\n </button>\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {pageRows.length === 0 ? (\n <tr>\n <td className=\"px-3 py-6 text-center text-muted-foreground\" colSpan={Math.max(columns.length, 1)}>\n {emptyMessage || \"No records found\"}\n </td>\n </tr>\n ) : (\n pageRows.map((rowData: any) => {\n const key = String(rowData?.[dataKey]);\n const rowSelected = selectedKeys.has(key);\n return (\n <tr\n key={key}\n className={cx(\"solid-data-table-row\", rowClassName?.(rowData))}\n onClick={(event) => {\n const target = event.target as HTMLElement;\n if (target.closest(\"button,a,input,label,[data-no-row-click='true']\")) return;\n onRowClick?.({ data: rowData });\n }}\n >\n {columns.map((column, index) => {\n const props = column.props;\n const isSelectionColumn = props.selectionMode === \"multiple\";\n const content = isSelectionColumn\n ? (\n <input\n type=\"checkbox\"\n checked={rowSelected}\n onChange={(e) => toggleRowSelection(rowData, e.currentTarget.checked)}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Select row\"\n />\n )\n : props.body\n ? props.body(rowData)\n : props.field\n ? rowData?.[props.field]\n : null;\n return (\n <td\n key={`cell-${key}-${index}`}\n className={cx(\n \"solid-data-table-td align-top text-foreground\",\n isSelectionColumn ? \"solid-data-table-selection-col\" : undefined,\n props.className\n )}\n style={props.style}\n >\n {content}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {typeof onPage === \"function\" ? (\n <div\n className={cx(\"w-full solid-table-paginator solid-table-paginator-align-end flex items-center justify-end gap-3 text-sm rounded-md border border-border/60 px-3 py-1.5 bg-background\", paginatorClassName)}\n >\n <div className=\"solid-paginator-meta flex items-center gap-2 ml-auto\">\n <span className=\"solid-paginator-label\">Rows</span>\n <select\n value={rows}\n onChange={(e) => onPage({ first: 0, rows: Number(e.target.value) })}\n className=\"solid-paginator-select\"\n >\n {rowsPerPageOptions.map((option) => (\n <option key={option} value={option}>{option}</option>\n ))}\n </select>\n <span className=\"solid-paginator-report\">{report}</span>\n </div>\n <div className=\"solid-paginator-actions flex items-center gap-2\">\n <button\n type=\"button\"\n className=\"solid-paginator-btn\"\n onClick={() => onPage({ first: Math.max(0, first - rows), rows })}\n disabled={currentPage <= 1}\n >\n Previous\n </button>\n <button\n type=\"button\"\n className=\"solid-paginator-btn\"\n onClick={() => onPage({ first: Math.min((totalPages - 1) * rows, first + rows), rows })}\n disabled={currentPage >= totalPages}\n >\n Next\n </button>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n"]}
|