@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.
Files changed (205) hide show
  1. package/dist/auto/auto-columns.d.ts +9 -0
  2. package/dist/auto/auto-columns.d.ts.map +1 -0
  3. package/dist/auto/auto-columns.js +39 -0
  4. package/dist/auto/auto-columns.js.map +1 -0
  5. package/dist/auto/auto-filters.d.ts +22 -0
  6. package/dist/auto/auto-filters.d.ts.map +1 -0
  7. package/dist/auto/auto-filters.js +15 -0
  8. package/dist/auto/auto-filters.js.map +1 -0
  9. package/dist/auto/rest-adapter.d.ts +34 -0
  10. package/dist/auto/rest-adapter.d.ts.map +1 -0
  11. package/dist/auto/rest-adapter.js +31 -0
  12. package/dist/auto/rest-adapter.js.map +1 -0
  13. package/dist/auto/static-adapter.d.ts +21 -0
  14. package/dist/auto/static-adapter.d.ts.map +1 -0
  15. package/dist/auto/static-adapter.js +116 -0
  16. package/dist/auto/static-adapter.js.map +1 -0
  17. package/dist/auto/tablecraft-adapter.d.ts +26 -0
  18. package/dist/auto/tablecraft-adapter.d.ts.map +1 -0
  19. package/dist/auto/tablecraft-adapter.js +143 -0
  20. package/dist/auto/tablecraft-adapter.js.map +1 -0
  21. package/dist/auto/use-auto-columns.d.ts +13 -0
  22. package/dist/auto/use-auto-columns.d.ts.map +1 -0
  23. package/dist/auto/use-auto-columns.js +53 -0
  24. package/dist/auto/use-auto-columns.js.map +1 -0
  25. package/dist/column-header.d.ts +8 -0
  26. package/dist/column-header.d.ts.map +1 -0
  27. package/dist/column-header.js +33 -0
  28. package/dist/column-header.js.map +1 -0
  29. package/dist/components/button.d.ts +12 -0
  30. package/dist/components/button.d.ts.map +1 -0
  31. package/dist/components/button.js +35 -0
  32. package/dist/components/button.js.map +1 -0
  33. package/dist/components/calendar-date-picker.d.ts +21 -0
  34. package/dist/components/calendar-date-picker.d.ts.map +1 -0
  35. package/dist/components/calendar-date-picker.js +333 -0
  36. package/dist/components/calendar-date-picker.js.map +1 -0
  37. package/dist/components/calendar.d.ts +9 -0
  38. package/dist/components/calendar.d.ts.map +1 -0
  39. package/dist/components/calendar.js +77 -0
  40. package/dist/components/calendar.js.map +1 -0
  41. package/dist/components/checkbox.d.ts +5 -0
  42. package/dist/components/checkbox.d.ts.map +1 -0
  43. package/dist/components/checkbox.js +10 -0
  44. package/dist/components/checkbox.js.map +1 -0
  45. package/dist/components/command.d.ts +79 -0
  46. package/dist/components/command.d.ts.map +1 -0
  47. package/dist/components/command.js +26 -0
  48. package/dist/components/command.js.map +1 -0
  49. package/dist/components/popover.d.ts +11 -0
  50. package/dist/components/popover.d.ts.map +1 -0
  51. package/dist/components/popover.js +27 -0
  52. package/dist/components/popover.js.map +1 -0
  53. package/dist/components/select.d.ts +14 -0
  54. package/dist/components/select.d.ts.map +1 -0
  55. package/dist/components/select.js +28 -0
  56. package/dist/components/select.js.map +1 -0
  57. package/dist/components/table-dropdown.d.ts +26 -0
  58. package/dist/components/table-dropdown.d.ts.map +1 -0
  59. package/dist/components/table-dropdown.js +52 -0
  60. package/dist/components/table-dropdown.js.map +1 -0
  61. package/dist/core/table-config.d.ts +12 -0
  62. package/dist/core/table-config.d.ts.map +1 -0
  63. package/dist/core/table-config.js +33 -0
  64. package/dist/core/table-config.js.map +1 -0
  65. package/dist/core/use-column-resize.d.ts +10 -0
  66. package/dist/core/use-column-resize.d.ts.map +1 -0
  67. package/dist/core/use-column-resize.js +83 -0
  68. package/dist/core/use-column-resize.js.map +1 -0
  69. package/dist/core/use-conditional-state.d.ts +14 -0
  70. package/dist/core/use-conditional-state.d.ts.map +1 -0
  71. package/dist/core/use-conditional-state.js +27 -0
  72. package/dist/core/use-conditional-state.js.map +1 -0
  73. package/dist/core/use-table-data.d.ts +64 -0
  74. package/dist/core/use-table-data.d.ts.map +1 -0
  75. package/dist/core/use-table-data.js +141 -0
  76. package/dist/core/use-table-data.js.map +1 -0
  77. package/dist/core/use-url-state.d.ts +14 -0
  78. package/dist/core/use-url-state.d.ts.map +1 -0
  79. package/dist/core/use-url-state.js +269 -0
  80. package/dist/core/use-url-state.js.map +1 -0
  81. package/dist/data-table.d.ts +3 -0
  82. package/dist/data-table.d.ts.map +1 -0
  83. package/dist/data-table.js +278 -0
  84. package/dist/data-table.js.map +1 -0
  85. package/dist/expand-icon.d.ts +9 -0
  86. package/dist/expand-icon.d.ts.map +1 -0
  87. package/dist/expand-icon.js +13 -0
  88. package/dist/expand-icon.js.map +1 -0
  89. package/dist/export.d.ts +13 -0
  90. package/dist/export.d.ts.map +1 -0
  91. package/dist/export.js +122 -0
  92. package/dist/export.js.map +1 -0
  93. package/dist/index.d.ts +34 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +35 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/pagination.d.ts +11 -0
  98. package/dist/pagination.d.ts.map +1 -0
  99. package/dist/pagination.js +49 -0
  100. package/dist/pagination.js.map +1 -0
  101. package/dist/renderers/actions.d.ts +8 -0
  102. package/dist/renderers/actions.d.ts.map +1 -0
  103. package/dist/renderers/actions.js +10 -0
  104. package/dist/renderers/actions.js.map +1 -0
  105. package/dist/renderers/badge.d.ts +3 -0
  106. package/dist/renderers/badge.d.ts.map +1 -0
  107. package/dist/renderers/badge.js +18 -0
  108. package/dist/renderers/badge.js.map +1 -0
  109. package/dist/renderers/boolean.d.ts +3 -0
  110. package/dist/renderers/boolean.d.ts.map +1 -0
  111. package/dist/renderers/boolean.js +10 -0
  112. package/dist/renderers/boolean.js.map +1 -0
  113. package/dist/renderers/date.d.ts +3 -0
  114. package/dist/renderers/date.d.ts.map +1 -0
  115. package/dist/renderers/date.js +56 -0
  116. package/dist/renderers/date.js.map +1 -0
  117. package/dist/renderers/image.d.ts +3 -0
  118. package/dist/renderers/image.d.ts.map +1 -0
  119. package/dist/renderers/image.js +18 -0
  120. package/dist/renderers/image.js.map +1 -0
  121. package/dist/renderers/index.d.ts +23 -0
  122. package/dist/renderers/index.d.ts.map +1 -0
  123. package/dist/renderers/index.js +43 -0
  124. package/dist/renderers/index.js.map +1 -0
  125. package/dist/renderers/link.d.ts +3 -0
  126. package/dist/renderers/link.d.ts.map +1 -0
  127. package/dist/renderers/link.js +9 -0
  128. package/dist/renderers/link.js.map +1 -0
  129. package/dist/renderers/number.d.ts +3 -0
  130. package/dist/renderers/number.d.ts.map +1 -0
  131. package/dist/renderers/number.js +29 -0
  132. package/dist/renderers/number.js.map +1 -0
  133. package/dist/renderers/progress.d.ts +3 -0
  134. package/dist/renderers/progress.d.ts.map +1 -0
  135. package/dist/renderers/progress.js +10 -0
  136. package/dist/renderers/progress.js.map +1 -0
  137. package/dist/renderers/tags.d.ts +3 -0
  138. package/dist/renderers/tags.d.ts.map +1 -0
  139. package/dist/renderers/tags.js +28 -0
  140. package/dist/renderers/tags.js.map +1 -0
  141. package/dist/renderers/text.d.ts +3 -0
  142. package/dist/renderers/text.d.ts.map +1 -0
  143. package/dist/renderers/text.js +8 -0
  144. package/dist/renderers/text.js.map +1 -0
  145. package/dist/resizer.d.ts +6 -0
  146. package/dist/resizer.d.ts.map +1 -0
  147. package/dist/resizer.js +10 -0
  148. package/dist/resizer.js.map +1 -0
  149. package/dist/row-actions.d.ts +10 -0
  150. package/dist/row-actions.d.ts.map +1 -0
  151. package/dist/row-actions.js +36 -0
  152. package/dist/row-actions.js.map +1 -0
  153. package/dist/toolbar.d.ts +35 -0
  154. package/dist/toolbar.d.ts.map +1 -0
  155. package/dist/toolbar.js +119 -0
  156. package/dist/toolbar.js.map +1 -0
  157. package/dist/types.d.ts +230 -0
  158. package/dist/types.d.ts.map +1 -0
  159. package/dist/types.js +2 -0
  160. package/dist/types.js.map +1 -0
  161. package/dist/utils/cn.d.ts +3 -0
  162. package/dist/utils/cn.d.ts.map +1 -0
  163. package/dist/utils/cn.js +6 -0
  164. package/dist/utils/cn.js.map +1 -0
  165. package/dist/utils/column-sizing.d.ts +18 -0
  166. package/dist/utils/column-sizing.d.ts.map +1 -0
  167. package/dist/utils/column-sizing.js +78 -0
  168. package/dist/utils/column-sizing.js.map +1 -0
  169. package/dist/utils/date-format.d.ts +13 -0
  170. package/dist/utils/date-format.d.ts.map +1 -0
  171. package/dist/utils/date-format.js +30 -0
  172. package/dist/utils/date-format.js.map +1 -0
  173. package/dist/utils/deep-utils.d.ts +15 -0
  174. package/dist/utils/deep-utils.d.ts.map +1 -0
  175. package/dist/utils/deep-utils.js +111 -0
  176. package/dist/utils/deep-utils.js.map +1 -0
  177. package/dist/utils/export-utils.d.ts +25 -0
  178. package/dist/utils/export-utils.d.ts.map +1 -0
  179. package/dist/utils/export-utils.js +170 -0
  180. package/dist/utils/export-utils.js.map +1 -0
  181. package/dist/utils/history-sync.d.ts +11 -0
  182. package/dist/utils/history-sync.d.ts.map +1 -0
  183. package/dist/utils/history-sync.js +45 -0
  184. package/dist/utils/history-sync.js.map +1 -0
  185. package/dist/utils/keyboard-navigation.d.ts +11 -0
  186. package/dist/utils/keyboard-navigation.d.ts.map +1 -0
  187. package/dist/utils/keyboard-navigation.js +39 -0
  188. package/dist/utils/keyboard-navigation.js.map +1 -0
  189. package/dist/utils/search.d.ts +10 -0
  190. package/dist/utils/search.d.ts.map +1 -0
  191. package/dist/utils/search.js +33 -0
  192. package/dist/utils/search.js.map +1 -0
  193. package/dist/utils/size-variants.d.ts +15 -0
  194. package/dist/utils/size-variants.d.ts.map +1 -0
  195. package/dist/utils/size-variants.js +42 -0
  196. package/dist/utils/size-variants.js.map +1 -0
  197. package/dist/utils/url-events.d.ts +2 -0
  198. package/dist/utils/url-events.d.ts.map +1 -0
  199. package/dist/utils/url-events.js +4 -0
  200. package/dist/utils/url-events.js.map +1 -0
  201. package/dist/view-options.d.ts +10 -0
  202. package/dist/view-options.d.ts.map +1 -0
  203. package/dist/view-options.js +104 -0
  204. package/dist/view-options.js.map +1 -0
  205. 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"}