@tablecraft/table 0.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/dist/auto/auto-columns.d.ts +9 -0
- package/dist/auto/auto-columns.d.ts.map +1 -0
- package/dist/auto/auto-columns.js +39 -0
- package/dist/auto/auto-columns.js.map +1 -0
- package/dist/auto/auto-filters.d.ts +22 -0
- package/dist/auto/auto-filters.d.ts.map +1 -0
- package/dist/auto/auto-filters.js +15 -0
- package/dist/auto/auto-filters.js.map +1 -0
- package/dist/auto/rest-adapter.d.ts +34 -0
- package/dist/auto/rest-adapter.d.ts.map +1 -0
- package/dist/auto/rest-adapter.js +31 -0
- package/dist/auto/rest-adapter.js.map +1 -0
- package/dist/auto/static-adapter.d.ts +21 -0
- package/dist/auto/static-adapter.d.ts.map +1 -0
- package/dist/auto/static-adapter.js +116 -0
- package/dist/auto/static-adapter.js.map +1 -0
- package/dist/auto/tablecraft-adapter.d.ts +26 -0
- package/dist/auto/tablecraft-adapter.d.ts.map +1 -0
- package/dist/auto/tablecraft-adapter.js +143 -0
- package/dist/auto/tablecraft-adapter.js.map +1 -0
- package/dist/auto/use-auto-columns.d.ts +13 -0
- package/dist/auto/use-auto-columns.d.ts.map +1 -0
- package/dist/auto/use-auto-columns.js +53 -0
- package/dist/auto/use-auto-columns.js.map +1 -0
- package/dist/column-header.d.ts +8 -0
- package/dist/column-header.d.ts.map +1 -0
- package/dist/column-header.js +33 -0
- package/dist/column-header.js.map +1 -0
- package/dist/components/button.d.ts +12 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +35 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar-date-picker.d.ts +21 -0
- package/dist/components/calendar-date-picker.d.ts.map +1 -0
- package/dist/components/calendar-date-picker.js +333 -0
- package/dist/components/calendar-date-picker.js.map +1 -0
- package/dist/components/calendar.d.ts +9 -0
- package/dist/components/calendar.d.ts.map +1 -0
- package/dist/components/calendar.js +77 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/checkbox.d.ts +5 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +10 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/command.d.ts +79 -0
- package/dist/components/command.d.ts.map +1 -0
- package/dist/components/command.js +26 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/popover.d.ts +11 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +27 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/select.d.ts +14 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +28 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/table-dropdown.d.ts +26 -0
- package/dist/components/table-dropdown.d.ts.map +1 -0
- package/dist/components/table-dropdown.js +52 -0
- package/dist/components/table-dropdown.js.map +1 -0
- package/dist/core/table-config.d.ts +12 -0
- package/dist/core/table-config.d.ts.map +1 -0
- package/dist/core/table-config.js +33 -0
- package/dist/core/table-config.js.map +1 -0
- package/dist/core/use-column-resize.d.ts +10 -0
- package/dist/core/use-column-resize.d.ts.map +1 -0
- package/dist/core/use-column-resize.js +83 -0
- package/dist/core/use-column-resize.js.map +1 -0
- package/dist/core/use-conditional-state.d.ts +14 -0
- package/dist/core/use-conditional-state.d.ts.map +1 -0
- package/dist/core/use-conditional-state.js +27 -0
- package/dist/core/use-conditional-state.js.map +1 -0
- package/dist/core/use-table-data.d.ts +64 -0
- package/dist/core/use-table-data.d.ts.map +1 -0
- package/dist/core/use-table-data.js +141 -0
- package/dist/core/use-table-data.js.map +1 -0
- package/dist/core/use-url-state.d.ts +14 -0
- package/dist/core/use-url-state.d.ts.map +1 -0
- package/dist/core/use-url-state.js +269 -0
- package/dist/core/use-url-state.js.map +1 -0
- package/dist/data-table.d.ts +3 -0
- package/dist/data-table.d.ts.map +1 -0
- package/dist/data-table.js +278 -0
- package/dist/data-table.js.map +1 -0
- package/dist/expand-icon.d.ts +9 -0
- package/dist/expand-icon.d.ts.map +1 -0
- package/dist/expand-icon.js +13 -0
- package/dist/expand-icon.js.map +1 -0
- package/dist/export.d.ts +13 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +122 -0
- package/dist/export.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/pagination.d.ts +11 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +49 -0
- package/dist/pagination.js.map +1 -0
- package/dist/renderers/actions.d.ts +8 -0
- package/dist/renderers/actions.d.ts.map +1 -0
- package/dist/renderers/actions.js +10 -0
- package/dist/renderers/actions.js.map +1 -0
- package/dist/renderers/badge.d.ts +3 -0
- package/dist/renderers/badge.d.ts.map +1 -0
- package/dist/renderers/badge.js +18 -0
- package/dist/renderers/badge.js.map +1 -0
- package/dist/renderers/boolean.d.ts +3 -0
- package/dist/renderers/boolean.d.ts.map +1 -0
- package/dist/renderers/boolean.js +10 -0
- package/dist/renderers/boolean.js.map +1 -0
- package/dist/renderers/date.d.ts +3 -0
- package/dist/renderers/date.d.ts.map +1 -0
- package/dist/renderers/date.js +56 -0
- package/dist/renderers/date.js.map +1 -0
- package/dist/renderers/image.d.ts +3 -0
- package/dist/renderers/image.d.ts.map +1 -0
- package/dist/renderers/image.js +18 -0
- package/dist/renderers/image.js.map +1 -0
- package/dist/renderers/index.d.ts +23 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +43 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/link.d.ts +3 -0
- package/dist/renderers/link.d.ts.map +1 -0
- package/dist/renderers/link.js +9 -0
- package/dist/renderers/link.js.map +1 -0
- package/dist/renderers/number.d.ts +3 -0
- package/dist/renderers/number.d.ts.map +1 -0
- package/dist/renderers/number.js +29 -0
- package/dist/renderers/number.js.map +1 -0
- package/dist/renderers/progress.d.ts +3 -0
- package/dist/renderers/progress.d.ts.map +1 -0
- package/dist/renderers/progress.js +10 -0
- package/dist/renderers/progress.js.map +1 -0
- package/dist/renderers/tags.d.ts +3 -0
- package/dist/renderers/tags.d.ts.map +1 -0
- package/dist/renderers/tags.js +28 -0
- package/dist/renderers/tags.js.map +1 -0
- package/dist/renderers/text.d.ts +3 -0
- package/dist/renderers/text.d.ts.map +1 -0
- package/dist/renderers/text.js +8 -0
- package/dist/renderers/text.js.map +1 -0
- package/dist/resizer.d.ts +6 -0
- package/dist/resizer.d.ts.map +1 -0
- package/dist/resizer.js +10 -0
- package/dist/resizer.js.map +1 -0
- package/dist/row-actions.d.ts +10 -0
- package/dist/row-actions.d.ts.map +1 -0
- package/dist/row-actions.js +36 -0
- package/dist/row-actions.js.map +1 -0
- package/dist/toolbar.d.ts +35 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +119 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/types.d.ts +230 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +6 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/column-sizing.d.ts +18 -0
- package/dist/utils/column-sizing.d.ts.map +1 -0
- package/dist/utils/column-sizing.js +78 -0
- package/dist/utils/column-sizing.js.map +1 -0
- package/dist/utils/date-format.d.ts +13 -0
- package/dist/utils/date-format.d.ts.map +1 -0
- package/dist/utils/date-format.js +30 -0
- package/dist/utils/date-format.js.map +1 -0
- package/dist/utils/deep-utils.d.ts +15 -0
- package/dist/utils/deep-utils.d.ts.map +1 -0
- package/dist/utils/deep-utils.js +111 -0
- package/dist/utils/deep-utils.js.map +1 -0
- package/dist/utils/export-utils.d.ts +25 -0
- package/dist/utils/export-utils.d.ts.map +1 -0
- package/dist/utils/export-utils.js +170 -0
- package/dist/utils/export-utils.js.map +1 -0
- package/dist/utils/history-sync.d.ts +11 -0
- package/dist/utils/history-sync.d.ts.map +1 -0
- package/dist/utils/history-sync.js +45 -0
- package/dist/utils/history-sync.js.map +1 -0
- package/dist/utils/keyboard-navigation.d.ts +11 -0
- package/dist/utils/keyboard-navigation.d.ts.map +1 -0
- package/dist/utils/keyboard-navigation.js +39 -0
- package/dist/utils/keyboard-navigation.js.map +1 -0
- package/dist/utils/search.d.ts +10 -0
- package/dist/utils/search.d.ts.map +1 -0
- package/dist/utils/search.js +33 -0
- package/dist/utils/search.js.map +1 -0
- package/dist/utils/size-variants.d.ts +15 -0
- package/dist/utils/size-variants.d.ts.map +1 -0
- package/dist/utils/size-variants.js +42 -0
- package/dist/utils/size-variants.js.map +1 -0
- package/dist/utils/url-events.d.ts +2 -0
- package/dist/utils/url-events.d.ts.map +1 -0
- package/dist/utils/url-events.js +4 -0
- package/dist/utils/url-events.js.map +1 -0
- package/dist/view-options.d.ts +10 -0
- package/dist/view-options.d.ts.map +1 -0
- package/dist/view-options.js +104 -0
- package/dist/view-options.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ColumnDef } from "@tanstack/react-table";
|
|
2
|
+
import type { TableMetadata, CellRenderer } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Generates TanStack Table column definitions from TableCraft metadata.
|
|
5
|
+
* This is the magic that makes `<DataTable adapter={adapter} />` work
|
|
6
|
+
* with zero manual column configuration.
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateColumns<T extends Record<string, unknown>>(metadata: TableMetadata, customRenderers?: Record<string, CellRenderer>): ColumnDef<T, unknown>[];
|
|
9
|
+
//# sourceMappingURL=auto-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-columns.d.ts","sourceRoot":"","sources":["../../src/auto/auto-columns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAA6B,MAAM,UAAU,CAAC;AAIvF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,QAAQ,EAAE,aAAa,EACvB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC7C,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAuCzB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { resolveRenderer } from "../renderers";
|
|
3
|
+
import { DataTableColumnHeader } from "../column-header";
|
|
4
|
+
/**
|
|
5
|
+
* Generates TanStack Table column definitions from TableCraft metadata.
|
|
6
|
+
* This is the magic that makes `<DataTable adapter={adapter} />` work
|
|
7
|
+
* with zero manual column configuration.
|
|
8
|
+
*/
|
|
9
|
+
export function generateColumns(metadata, customRenderers) {
|
|
10
|
+
return metadata.columns
|
|
11
|
+
.filter((col) => !col.hidden)
|
|
12
|
+
.map((col) => {
|
|
13
|
+
const Renderer = resolveRenderer(col.type, customRenderers);
|
|
14
|
+
const rendererColumn = {
|
|
15
|
+
name: col.name,
|
|
16
|
+
type: col.type,
|
|
17
|
+
format: col.format,
|
|
18
|
+
align: col.align,
|
|
19
|
+
options: col.options,
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
id: col.name,
|
|
23
|
+
accessorKey: col.name,
|
|
24
|
+
header: ({ column }) => (_jsx(DataTableColumnHeader, { column: column, title: col.label })),
|
|
25
|
+
cell: ({ getValue, row }) => (_jsx(Renderer, { value: getValue(), row: row.original, column: rendererColumn })),
|
|
26
|
+
enableSorting: col.sortable,
|
|
27
|
+
enableHiding: true,
|
|
28
|
+
size: col.width,
|
|
29
|
+
minSize: col.minWidth,
|
|
30
|
+
maxSize: col.maxWidth,
|
|
31
|
+
meta: {
|
|
32
|
+
label: col.label,
|
|
33
|
+
type: col.type,
|
|
34
|
+
format: col.format,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=auto-columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-columns.js","sourceRoot":"","sources":["../../src/auto/auto-columns.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAuB,EACvB,eAA8C;IAE9C,OAAO,QAAQ,CAAC,OAAO;SACpB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;SAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAE5D,MAAM,cAAc,GAA8B;YAChD,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,IAAI;YACZ,WAAW,EAAE,GAAG,CAAC,IAAI;YACrB,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CACtB,KAAC,qBAAqB,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAI,CAC5D;YACD,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAC3B,KAAC,QAAQ,IACP,KAAK,EAAE,QAAQ,EAAE,EACjB,GAAG,EAAE,GAAG,CAAC,QAAmC,EAC5C,MAAM,EAAE,cAAc,GACtB,CACH;YACD,aAAa,EAAE,GAAG,CAAC,QAAQ;YAC3B,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,GAAG,CAAC,KAAK;YACf,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,IAAI,EAAE;gBACJ,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB;SAC8B,CAAC;IACpC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { TableMetadata } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Filter configuration for the frontend.
|
|
4
|
+
*/
|
|
5
|
+
export interface FilterConfig {
|
|
6
|
+
field: string;
|
|
7
|
+
type: string;
|
|
8
|
+
label: string;
|
|
9
|
+
operators: string[];
|
|
10
|
+
options?: {
|
|
11
|
+
value: string | number | boolean;
|
|
12
|
+
label: string;
|
|
13
|
+
color?: string;
|
|
14
|
+
}[];
|
|
15
|
+
datePresets?: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generates filter configuration from table metadata.
|
|
19
|
+
* Used to auto-build filter UI elements.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateFilterConfig(metadata: TableMetadata): FilterConfig[];
|
|
22
|
+
//# sourceMappingURL=auto-filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-filters.d.ts","sourceRoot":"","sources":["../../src/auto/auto-filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,GACtB,YAAY,EAAE,CAShB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates filter configuration from table metadata.
|
|
3
|
+
* Used to auto-build filter UI elements.
|
|
4
|
+
*/
|
|
5
|
+
export function generateFilterConfig(metadata) {
|
|
6
|
+
return metadata.filters.map((filter) => ({
|
|
7
|
+
field: filter.field,
|
|
8
|
+
type: filter.type,
|
|
9
|
+
label: filter.label,
|
|
10
|
+
operators: filter.operators,
|
|
11
|
+
options: filter.options,
|
|
12
|
+
datePresets: filter.datePresets,
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=auto-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-filters.js","sourceRoot":"","sources":["../../src/auto/auto-filters.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAuB;IAEvB,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAsB,EAAE,EAAE,CAAC,CAAC;QACvD,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DataAdapter, QueryParams, QueryResult, TableMetadata } from "../types";
|
|
2
|
+
export interface RestAdapterOptions<T> {
|
|
3
|
+
/** Function that fetches data given table params */
|
|
4
|
+
queryFn: (params: QueryParams) => Promise<QueryResult<T>>;
|
|
5
|
+
/** Function to fetch specific items by IDs (for cross-page export) */
|
|
6
|
+
queryByIdsFn?: (ids: (string | number)[]) => Promise<T[]>;
|
|
7
|
+
/** Function to fetch table metadata (enables auto-columns) */
|
|
8
|
+
metaFn?: () => Promise<TableMetadata>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates a DataAdapter for any REST API.
|
|
12
|
+
* You provide the data fetching logic, the table handles the rest.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const adapter = createRestAdapter({
|
|
17
|
+
* queryFn: async (params) => {
|
|
18
|
+
* const res = await fetch(`/api/users?page=${params.page}&limit=${params.pageSize}`);
|
|
19
|
+
* const json = await res.json();
|
|
20
|
+
* return {
|
|
21
|
+
* data: json.results,
|
|
22
|
+
* meta: {
|
|
23
|
+
* total: json.count,
|
|
24
|
+
* page: params.page,
|
|
25
|
+
* pageSize: params.pageSize,
|
|
26
|
+
* totalPages: Math.ceil(json.count / params.pageSize),
|
|
27
|
+
* },
|
|
28
|
+
* };
|
|
29
|
+
* },
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function createRestAdapter<T = Record<string, unknown>>(options: RestAdapterOptions<T>): DataAdapter<T>;
|
|
34
|
+
//# sourceMappingURL=rest-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-adapter.d.ts","sourceRoot":"","sources":["../../src/auto/rest-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErF,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,oDAAoD;IACpD,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,sEAAsE;IACtE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1D,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,WAAW,CAAC,CAAC,CAAC,CAMhB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a DataAdapter for any REST API.
|
|
3
|
+
* You provide the data fetching logic, the table handles the rest.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const adapter = createRestAdapter({
|
|
8
|
+
* queryFn: async (params) => {
|
|
9
|
+
* const res = await fetch(`/api/users?page=${params.page}&limit=${params.pageSize}`);
|
|
10
|
+
* const json = await res.json();
|
|
11
|
+
* return {
|
|
12
|
+
* data: json.results,
|
|
13
|
+
* meta: {
|
|
14
|
+
* total: json.count,
|
|
15
|
+
* page: params.page,
|
|
16
|
+
* pageSize: params.pageSize,
|
|
17
|
+
* totalPages: Math.ceil(json.count / params.pageSize),
|
|
18
|
+
* },
|
|
19
|
+
* };
|
|
20
|
+
* },
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function createRestAdapter(options) {
|
|
25
|
+
return {
|
|
26
|
+
query: options.queryFn,
|
|
27
|
+
queryByIds: options.queryByIdsFn,
|
|
28
|
+
meta: options.metaFn,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=rest-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-adapter.js","sourceRoot":"","sources":["../../src/auto/rest-adapter.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA8B;IAE9B,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,OAAO;QACtB,UAAU,EAAE,OAAO,CAAC,YAAY;QAChC,IAAI,EAAE,OAAO,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DataAdapter } from "../types";
|
|
2
|
+
export interface StaticAdapterOptions {
|
|
3
|
+
/** Page size override (default: uses params.pageSize) */
|
|
4
|
+
defaultPageSize?: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Creates a DataAdapter for static/in-memory data.
|
|
8
|
+
* Handles client-side pagination, sorting, filtering, and search.
|
|
9
|
+
* Great for small datasets and prototyping.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const adapter = createStaticAdapter([
|
|
14
|
+
* { id: 1, name: 'Alice', email: 'alice@example.com' },
|
|
15
|
+
* { id: 2, name: 'Bob', email: 'bob@example.com' },
|
|
16
|
+
* ]);
|
|
17
|
+
* <DataTable adapter={adapter} columns={columns} />
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function createStaticAdapter<T extends Record<string, unknown>>(data: T[], options?: StaticAdapterOptions): DataAdapter<T>;
|
|
21
|
+
//# sourceMappingURL=static-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-adapter.d.ts","sourceRoot":"","sources":["../../src/auto/static-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA4B,MAAM,UAAU,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,IAAI,EAAE,CAAC,EAAE,EACT,OAAO,CAAC,EAAE,oBAAoB,GAC7B,WAAW,CAAC,CAAC,CAAC,CA4GhB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a DataAdapter for static/in-memory data.
|
|
3
|
+
* Handles client-side pagination, sorting, filtering, and search.
|
|
4
|
+
* Great for small datasets and prototyping.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const adapter = createStaticAdapter([
|
|
9
|
+
* { id: 1, name: 'Alice', email: 'alice@example.com' },
|
|
10
|
+
* { id: 2, name: 'Bob', email: 'bob@example.com' },
|
|
11
|
+
* ]);
|
|
12
|
+
* <DataTable adapter={adapter} columns={columns} />
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function createStaticAdapter(data, options) {
|
|
16
|
+
return {
|
|
17
|
+
async query(params) {
|
|
18
|
+
let filtered = [...data];
|
|
19
|
+
// Search
|
|
20
|
+
if (params.search) {
|
|
21
|
+
const searchLower = params.search.toLowerCase();
|
|
22
|
+
filtered = filtered.filter((row) => Object.values(row).some((val) => val !== null &&
|
|
23
|
+
val !== undefined &&
|
|
24
|
+
String(val).toLowerCase().includes(searchLower)));
|
|
25
|
+
}
|
|
26
|
+
// Filters
|
|
27
|
+
if (params.filters && Object.keys(params.filters).length > 0) {
|
|
28
|
+
for (const [field, filterValue] of Object.entries(params.filters)) {
|
|
29
|
+
if (filterValue === null || filterValue === undefined)
|
|
30
|
+
continue;
|
|
31
|
+
filtered = filtered.filter((row) => {
|
|
32
|
+
const rowVal = row[field];
|
|
33
|
+
if (typeof filterValue === "object" && !Array.isArray(filterValue)) {
|
|
34
|
+
const filter = filterValue;
|
|
35
|
+
const val = filter.value;
|
|
36
|
+
switch (filter.operator) {
|
|
37
|
+
case "gt": return Number(rowVal) > Number(val);
|
|
38
|
+
case "gte": return Number(rowVal) >= Number(val);
|
|
39
|
+
case "lt": return Number(rowVal) < Number(val);
|
|
40
|
+
case "lte": return Number(rowVal) <= Number(val);
|
|
41
|
+
case "contains": return String(rowVal).toLowerCase().includes(String(val).toLowerCase());
|
|
42
|
+
case "neq": return rowVal !== val;
|
|
43
|
+
default: return rowVal === val;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return String(rowVal) === String(filterValue);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Date range filter (searches all date-like fields)
|
|
51
|
+
if (params.dateRange?.from || params.dateRange?.to) {
|
|
52
|
+
const from = params.dateRange.from ? new Date(params.dateRange.from).getTime() : -Infinity;
|
|
53
|
+
const to = params.dateRange.to ? new Date(params.dateRange.to).getTime() : Infinity;
|
|
54
|
+
filtered = filtered.filter((row) => {
|
|
55
|
+
// Check common date fields
|
|
56
|
+
for (const key of Object.keys(row)) {
|
|
57
|
+
const val = row[key];
|
|
58
|
+
if (typeof val === "string" || val instanceof Date) {
|
|
59
|
+
const d = new Date(val).getTime();
|
|
60
|
+
if (!Number.isNaN(d) && d >= from && d <= to)
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Sort
|
|
68
|
+
if (params.sort) {
|
|
69
|
+
const sortField = params.sort;
|
|
70
|
+
const desc = params.sortOrder === "desc";
|
|
71
|
+
filtered.sort((a, b) => {
|
|
72
|
+
const aVal = a[sortField];
|
|
73
|
+
const bVal = b[sortField];
|
|
74
|
+
if (aVal === bVal)
|
|
75
|
+
return 0;
|
|
76
|
+
if (aVal === null || aVal === undefined)
|
|
77
|
+
return 1;
|
|
78
|
+
if (bVal === null || bVal === undefined)
|
|
79
|
+
return -1;
|
|
80
|
+
let cmp = 0;
|
|
81
|
+
if (typeof aVal === "string" && typeof bVal === "string") {
|
|
82
|
+
cmp = aVal.localeCompare(bVal);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
cmp = aVal > bVal ? 1 : -1;
|
|
86
|
+
}
|
|
87
|
+
return desc ? -cmp : cmp;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// Pagination
|
|
91
|
+
const total = filtered.length;
|
|
92
|
+
const pageSize = options?.defaultPageSize ?? params.pageSize;
|
|
93
|
+
const totalPages = Math.ceil(total / pageSize);
|
|
94
|
+
const page = Math.min(params.page, totalPages || 1);
|
|
95
|
+
const start = (page - 1) * pageSize;
|
|
96
|
+
const pageData = filtered.slice(start, start + pageSize);
|
|
97
|
+
return {
|
|
98
|
+
data: pageData,
|
|
99
|
+
meta: {
|
|
100
|
+
total,
|
|
101
|
+
page,
|
|
102
|
+
pageSize,
|
|
103
|
+
totalPages,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
async queryByIds(ids) {
|
|
108
|
+
const idStrings = new Set(ids.map(String));
|
|
109
|
+
return data.filter((row) => {
|
|
110
|
+
const id = row.id ?? row.ID ?? row._id;
|
|
111
|
+
return id !== undefined && idStrings.has(String(id));
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=static-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-adapter.js","sourceRoot":"","sources":["../../src/auto/static-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DataAdapter } from "../types";
|
|
2
|
+
export interface TableCraftAdapterOptions {
|
|
3
|
+
/** Base URL of your TableCraft API. Example: "/api/data" */
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
/** Table name. Example: "users" */
|
|
6
|
+
table: string;
|
|
7
|
+
/** Default headers for every request (auth tokens, etc.) */
|
|
8
|
+
headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
|
|
9
|
+
/** Custom fetch function. Defaults to global fetch. */
|
|
10
|
+
fetch?: typeof fetch;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a DataAdapter that talks directly to a TableCraft backend.
|
|
14
|
+
* This is the "native" adapter — zero config beyond baseUrl + table name.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const adapter = createTableCraftAdapter({
|
|
19
|
+
* baseUrl: '/api/data',
|
|
20
|
+
* table: 'users',
|
|
21
|
+
* });
|
|
22
|
+
* <DataTable adapter={adapter} />
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function createTableCraftAdapter<T = Record<string, unknown>>(options: TableCraftAdapterOptions): DataAdapter<T>;
|
|
26
|
+
//# sourceMappingURL=tablecraft-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tablecraft-adapter.d.ts","sourceRoot":"","sources":["../../src/auto/tablecraft-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA2C,MAAM,UAAU,CAAC;AAErF,MAAM,WAAW,wBAAwB;IACvC,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACpG,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,OAAO,EAAE,wBAAwB,GAChC,WAAW,CAAC,CAAC,CAAC,CAwJhB"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a DataAdapter that talks directly to a TableCraft backend.
|
|
3
|
+
* This is the "native" adapter — zero config beyond baseUrl + table name.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const adapter = createTableCraftAdapter({
|
|
8
|
+
* baseUrl: '/api/data',
|
|
9
|
+
* table: 'users',
|
|
10
|
+
* });
|
|
11
|
+
* <DataTable adapter={adapter} />
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function createTableCraftAdapter(options) {
|
|
15
|
+
const { baseUrl, table: tableName } = options;
|
|
16
|
+
const customFetch = options.fetch ?? globalThis.fetch;
|
|
17
|
+
const tableUrl = `${baseUrl.replace(/\/$/, "")}/${tableName}`;
|
|
18
|
+
let cachedMetadata = null;
|
|
19
|
+
async function resolveHeaders() {
|
|
20
|
+
if (!options.headers)
|
|
21
|
+
return {};
|
|
22
|
+
if (typeof options.headers === "function") {
|
|
23
|
+
return await options.headers();
|
|
24
|
+
}
|
|
25
|
+
return options.headers;
|
|
26
|
+
}
|
|
27
|
+
async function request(url) {
|
|
28
|
+
const headers = await resolveHeaders();
|
|
29
|
+
const response = await customFetch(url, {
|
|
30
|
+
method: "GET",
|
|
31
|
+
headers: {
|
|
32
|
+
Accept: "application/json",
|
|
33
|
+
...headers,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
const body = await response.json().catch(() => ({}));
|
|
38
|
+
const err = new Error(body.error ?? `Request failed: ${response.status}`);
|
|
39
|
+
err.status = response.status;
|
|
40
|
+
throw err;
|
|
41
|
+
}
|
|
42
|
+
return response.json();
|
|
43
|
+
}
|
|
44
|
+
function buildQueryUrl(params, dateRangeColumn) {
|
|
45
|
+
const url = new URL(tableUrl, globalThis.location?.origin ?? "http://localhost");
|
|
46
|
+
if (params.page)
|
|
47
|
+
url.searchParams.set("page", String(params.page));
|
|
48
|
+
if (params.pageSize)
|
|
49
|
+
url.searchParams.set("pageSize", String(params.pageSize));
|
|
50
|
+
if (params.sort) {
|
|
51
|
+
const sortStr = params.sortOrder === "desc" ? `-${params.sort}` : params.sort;
|
|
52
|
+
url.searchParams.set("sort", sortStr);
|
|
53
|
+
}
|
|
54
|
+
if (params.search) {
|
|
55
|
+
url.searchParams.set("search", params.search);
|
|
56
|
+
}
|
|
57
|
+
if (params.filters) {
|
|
58
|
+
for (const [field, value] of Object.entries(params.filters)) {
|
|
59
|
+
if (value === null || value === undefined)
|
|
60
|
+
continue;
|
|
61
|
+
if (typeof value === "object" && !Array.isArray(value)) {
|
|
62
|
+
const filter = value;
|
|
63
|
+
if (filter.operator && filter.operator !== "eq") {
|
|
64
|
+
url.searchParams.set(`filter[${field}][${filter.operator}]`, String(filter.value));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
url.searchParams.set(`filter[${field}]`, String(filter.value ?? value));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
url.searchParams.set(`filter[${field}]`, String(value));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (dateRangeColumn && params.dateRange?.from) {
|
|
76
|
+
url.searchParams.set(`filter[${dateRangeColumn}][gte]`, params.dateRange.from);
|
|
77
|
+
}
|
|
78
|
+
if (dateRangeColumn && params.dateRange?.to) {
|
|
79
|
+
url.searchParams.set(`filter[${dateRangeColumn}][lte]`, params.dateRange.to);
|
|
80
|
+
}
|
|
81
|
+
return url.toString();
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
async query(params) {
|
|
85
|
+
let dateRangeCol = cachedMetadata?.dateRangeColumn ?? 'createdAt';
|
|
86
|
+
if (!cachedMetadata) {
|
|
87
|
+
try {
|
|
88
|
+
cachedMetadata = await request(`${tableUrl}/_meta`);
|
|
89
|
+
dateRangeCol = cachedMetadata?.dateRangeColumn ?? 'createdAt';
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.warn(`[TableCraft] Could not fetch metadata for "${tableName}"; date filtering will use fallback column "createdAt".`, error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const url = buildQueryUrl(params, dateRangeCol);
|
|
96
|
+
const result = await request(url);
|
|
97
|
+
return {
|
|
98
|
+
data: result.data,
|
|
99
|
+
meta: result.meta,
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
async meta() {
|
|
103
|
+
if (!cachedMetadata) {
|
|
104
|
+
cachedMetadata = await request(`${tableUrl}/_meta`);
|
|
105
|
+
}
|
|
106
|
+
return cachedMetadata;
|
|
107
|
+
},
|
|
108
|
+
async export(format, params) {
|
|
109
|
+
let dateRangeCol = cachedMetadata?.dateRangeColumn ?? 'createdAt';
|
|
110
|
+
if (!cachedMetadata) {
|
|
111
|
+
try {
|
|
112
|
+
cachedMetadata = await request(`${tableUrl}/_meta`);
|
|
113
|
+
dateRangeCol = cachedMetadata?.dateRangeColumn ?? 'createdAt';
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.warn(`[TableCraft] Could not fetch metadata for "${tableName}"; date filtering will use fallback column "createdAt".`, error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const fullParams = {
|
|
120
|
+
page: 1,
|
|
121
|
+
pageSize: 10000,
|
|
122
|
+
search: "",
|
|
123
|
+
sort: "",
|
|
124
|
+
sortOrder: "asc",
|
|
125
|
+
filters: {},
|
|
126
|
+
dateRange: { from: "", to: "" },
|
|
127
|
+
...params,
|
|
128
|
+
};
|
|
129
|
+
const url = new URL(buildQueryUrl(fullParams, dateRangeCol));
|
|
130
|
+
url.searchParams.set("export", format);
|
|
131
|
+
const headers = await resolveHeaders();
|
|
132
|
+
const response = await customFetch(url.toString(), {
|
|
133
|
+
method: "GET",
|
|
134
|
+
headers: { ...headers },
|
|
135
|
+
});
|
|
136
|
+
if (!response.ok) {
|
|
137
|
+
throw new Error(`Export failed: ${response.status}`);
|
|
138
|
+
}
|
|
139
|
+
return response.text();
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=tablecraft-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tablecraft-adapter.js","sourceRoot":"","sources":["../../src/auto/tablecraft-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ColumnDef } from "@tanstack/react-table";
|
|
2
|
+
import type { DataAdapter, TableMetadata, CellRenderer } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Hook that auto-generates columns from adapter metadata.
|
|
5
|
+
* If manual columns are provided, they take priority.
|
|
6
|
+
* If no columns and no metadata, returns an empty array.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useAutoColumns<T extends Record<string, unknown>>(adapter: DataAdapter<T>, manualColumns?: ColumnDef<T, unknown>[], customRenderers?: Record<string, CellRenderer>): {
|
|
9
|
+
columns: ColumnDef<T, unknown>[];
|
|
10
|
+
metadata: TableMetadata | null;
|
|
11
|
+
isLoadingMeta: boolean;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=use-auto-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-auto-columns.d.ts","sourceRoot":"","sources":["../../src/auto/use-auto-columns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGzE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EACvB,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EACvC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC7C;IACD,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;CACxB,CAkDA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useState, useEffect, useMemo } from "react";
|
|
2
|
+
import { generateColumns } from "./auto-columns";
|
|
3
|
+
/**
|
|
4
|
+
* Hook that auto-generates columns from adapter metadata.
|
|
5
|
+
* If manual columns are provided, they take priority.
|
|
6
|
+
* If no columns and no metadata, returns an empty array.
|
|
7
|
+
*/
|
|
8
|
+
export function useAutoColumns(adapter, manualColumns, customRenderers) {
|
|
9
|
+
const [metadata, setMetadata] = useState(null);
|
|
10
|
+
const [isLoadingMeta, setIsLoadingMeta] = useState(false);
|
|
11
|
+
// Fetch metadata if no manual columns and adapter supports it
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (manualColumns && manualColumns.length > 0)
|
|
14
|
+
return;
|
|
15
|
+
if (!adapter.meta)
|
|
16
|
+
return;
|
|
17
|
+
let cancelled = false;
|
|
18
|
+
setIsLoadingMeta(true);
|
|
19
|
+
adapter
|
|
20
|
+
.meta()
|
|
21
|
+
.then((meta) => {
|
|
22
|
+
if (!cancelled) {
|
|
23
|
+
setMetadata(meta);
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
.catch((err) => {
|
|
27
|
+
if (!cancelled) {
|
|
28
|
+
console.error("Failed to fetch table metadata:", err);
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
.finally(() => {
|
|
32
|
+
if (!cancelled) {
|
|
33
|
+
setIsLoadingMeta(false);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return () => {
|
|
37
|
+
cancelled = true;
|
|
38
|
+
};
|
|
39
|
+
}, [adapter, manualColumns]);
|
|
40
|
+
const columns = useMemo(() => {
|
|
41
|
+
// Manual columns take priority
|
|
42
|
+
if (manualColumns && manualColumns.length > 0) {
|
|
43
|
+
return manualColumns;
|
|
44
|
+
}
|
|
45
|
+
// Auto-generate from metadata
|
|
46
|
+
if (metadata) {
|
|
47
|
+
return generateColumns(metadata, customRenderers);
|
|
48
|
+
}
|
|
49
|
+
return [];
|
|
50
|
+
}, [manualColumns, metadata, customRenderers]);
|
|
51
|
+
return { columns, metadata, isLoadingMeta };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=use-auto-columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-auto-columns.js","sourceRoot":"","sources":["../../src/auto/use-auto-columns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAuB,EACvB,aAAuC,EACvC,eAA8C;IAM9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IACrE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1D,8DAA8D;IAC9D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QACtD,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,OAAO;QAE1B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEvB,OAAO;aACJ,IAAI,EAAE;aACN,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,+BAA+B;QAC/B,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,8BAA8B;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,eAAe,CAAI,QAAQ,EAAE,eAAe,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IAE/C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Column } from "@tanstack/react-table";
|
|
2
|
+
interface DataTableColumnHeaderProps<TData, TValue> extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
column: Column<TData, TValue>;
|
|
4
|
+
title: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function DataTableColumnHeader<TData, TValue>({ column, title, className, }: DataTableColumnHeaderProps<TData, TValue>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=column-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-header.d.ts","sourceRoot":"","sources":["../src/column-header.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAWpD,UAAU,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAChD,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,EACnD,MAAM,EACN,KAAK,EACL,SAAS,GACV,EAAE,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,2CAiE3C"}
|