next-data-kit 9.2.0 → 9.4.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 (73) hide show
  1. package/dist/client.cjs +2951 -0
  2. package/dist/client.cjs.map +1 -0
  3. package/dist/client.d.cts +60 -0
  4. package/dist/client.d.ts +1 -0
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js +2907 -7
  7. package/dist/client.js.map +1 -1
  8. package/dist/index-CzDzNX62.d.cts +558 -0
  9. package/dist/index-CzDzNX62.d.ts +558 -0
  10. package/dist/index.cjs +99 -105
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +5 -557
  13. package/dist/index.d.ts +5 -557
  14. package/dist/index.js +99 -105
  15. package/dist/index.js.map +1 -1
  16. package/dist/styles.css +1 -1
  17. package/dist/types/index.js +2 -6
  18. package/dist/types/index.js.map +1 -1
  19. package/package.json +1 -1
  20. package/dist/client/components/data-kit-infinity.js +0 -86
  21. package/dist/client/components/data-kit-infinity.js.map +0 -1
  22. package/dist/client/components/data-kit-table.js +0 -190
  23. package/dist/client/components/data-kit-table.js.map +0 -1
  24. package/dist/client/components/data-kit.js +0 -79
  25. package/dist/client/components/data-kit.js.map +0 -1
  26. package/dist/client/components/index.js +0 -4
  27. package/dist/client/components/index.js.map +0 -1
  28. package/dist/client/components/ui/button.js +0 -36
  29. package/dist/client/components/ui/button.js.map +0 -1
  30. package/dist/client/components/ui/checkbox.js +0 -10
  31. package/dist/client/components/ui/checkbox.js.map +0 -1
  32. package/dist/client/components/ui/dropdown-menu.js +0 -52
  33. package/dist/client/components/ui/dropdown-menu.js.map +0 -1
  34. package/dist/client/components/ui/index.js +0 -8
  35. package/dist/client/components/ui/index.js.map +0 -1
  36. package/dist/client/components/ui/pagination.js +0 -31
  37. package/dist/client/components/ui/pagination.js.map +0 -1
  38. package/dist/client/components/ui/popover.js +0 -18
  39. package/dist/client/components/ui/popover.js.map +0 -1
  40. package/dist/client/components/ui/select.js +0 -39
  41. package/dist/client/components/ui/select.js.map +0 -1
  42. package/dist/client/components/ui/table.js +0 -29
  43. package/dist/client/components/ui/table.js.map +0 -1
  44. package/dist/client/context/index.js +0 -28
  45. package/dist/client/context/index.js.map +0 -1
  46. package/dist/client/hooks/index.js +0 -7
  47. package/dist/client/hooks/index.js.map +0 -1
  48. package/dist/client/hooks/useDataKit.js +0 -308
  49. package/dist/client/hooks/useDataKit.js.map +0 -1
  50. package/dist/client/hooks/usePagination.js +0 -51
  51. package/dist/client/hooks/usePagination.js.map +0 -1
  52. package/dist/client/hooks/useSelection.js +0 -93
  53. package/dist/client/hooks/useSelection.js.map +0 -1
  54. package/dist/client/index.js +0 -15
  55. package/dist/client/index.js.map +0 -1
  56. package/dist/client/utils/cn.js +0 -22
  57. package/dist/client/utils/cn.js.map +0 -1
  58. package/dist/client/utils/index.js +0 -133
  59. package/dist/client/utils/index.js.map +0 -1
  60. package/dist/server/utils.js +0 -117
  61. package/dist/server/utils.js.map +0 -1
  62. package/dist/types/client/component.js +0 -7
  63. package/dist/types/client/component.js.map +0 -1
  64. package/dist/types/client/hook.js +0 -7
  65. package/dist/types/client/hook.js.map +0 -1
  66. package/dist/types/client/selectable.js +0 -7
  67. package/dist/types/client/selectable.js.map +0 -1
  68. package/dist/types/next-data-kit.js +0 -7
  69. package/dist/types/next-data-kit.js.map +0 -1
  70. package/dist/types/server/action.js +0 -7
  71. package/dist/types/server/action.js.map +0 -1
  72. package/dist/types/server/database/mongo.js +0 -7
  73. package/dist/types/server/database/mongo.js.map +0 -1
@@ -1,308 +0,0 @@
1
- /**
2
- * next-data-kit - useDataKit Hook
3
- *
4
- * React hook for managing next-data-kit state and actions.
5
- */
6
- 'use client';
7
- import { useState, useCallback, useEffect, useRef } from 'react';
8
- import { parseUrlParams, stateToUrlParams } from '../utils';
9
- export const useDataKit = (props) => {
10
- // ** Deconstruct Props
11
- const { initial = {}, memory: memoryMode = 'memory', filters, action, onSuccess, onError, autoFetch = true, debounce: debounceDelay = 300 } = props;
12
- const { page: initialPage = 1, limit: initialLimit = 10, sorts: initialSorts = [], filter: initialFilter = {}, query: initialQuery = {} } = initial;
13
- // ** State
14
- const [page, setPageState] = useState(initialPage);
15
- const [limit, setLimitState] = useState(initialLimit);
16
- const [sorts, setSortsState] = useState(initialSorts);
17
- const [filter, setFilterState] = useState(initialFilter);
18
- const [debouncedFilter, setDebouncedFilter] = useState(initialFilter);
19
- const [query, setQueryState] = useState(initialQuery);
20
- const [isLoading, setIsLoading] = useState(false);
21
- const [error, setError] = useState(null);
22
- const [items, setItems] = useState([]);
23
- const [total, setTotal] = useState(0);
24
- // ** Refs
25
- const mounted = useRef(true);
26
- const fetchIdRef = useRef(0);
27
- const debounceTimerRef = useRef(null);
28
- // ** Refs for props to prevent infinite loops and stale closures
29
- const actionRef = useRef(action);
30
- const onSuccessRef = useRef(onSuccess);
31
- const onErrorRef = useRef(onError);
32
- const filtersRef = useRef(filters);
33
- // ** Update refs on every render
34
- actionRef.current = action;
35
- onSuccessRef.current = onSuccess;
36
- onErrorRef.current = onError;
37
- filtersRef.current = filters;
38
- // ** Get current input
39
- const getInput = useCallback(() => {
40
- const input = {
41
- action: 'FETCH',
42
- page,
43
- limit,
44
- sorts,
45
- filter: debouncedFilter,
46
- query: query,
47
- };
48
- if (filtersRef.current) {
49
- input.filterConfig = filtersRef.current.reduce((acc, f) => {
50
- if (f.configuration)
51
- acc[f.id] = f.configuration;
52
- return acc;
53
- }, {});
54
- }
55
- return input;
56
- }, [page, limit, sorts, debouncedFilter, query]);
57
- // ** Fetch data
58
- const fetchData = useCallback(async () => {
59
- const fetchId = ++fetchIdRef.current;
60
- setIsLoading(true);
61
- setError(null);
62
- try {
63
- const input = getInput();
64
- const result = (await actionRef.current(input));
65
- // ** Check if this is still the latest fetch
66
- if (fetchId !== fetchIdRef.current || !mounted.current)
67
- return;
68
- setItems(result.items);
69
- setTotal(result.documentTotal);
70
- onSuccessRef.current?.(result);
71
- }
72
- catch (err) {
73
- if (fetchId !== fetchIdRef.current || !mounted.current)
74
- return;
75
- const fetchError = err instanceof Error ? err : new Error(String(err));
76
- setError(fetchError);
77
- onErrorRef.current?.(fetchError);
78
- }
79
- finally {
80
- if (fetchId === fetchIdRef.current && mounted.current) {
81
- setIsLoading(false);
82
- }
83
- }
84
- }, [getInput]);
85
- // ** Debounce filter changes
86
- useEffect(() => {
87
- if (debounceTimerRef.current)
88
- clearTimeout(debounceTimerRef.current);
89
- debounceTimerRef.current = setTimeout(() => {
90
- setDebouncedFilter(filter);
91
- }, debounceDelay);
92
- return () => {
93
- if (debounceTimerRef.current)
94
- clearTimeout(debounceTimerRef.current);
95
- };
96
- }, [filter, debounceDelay]);
97
- // ** Actions
98
- const setPage = useCallback((newPage) => setPageState(newPage), []);
99
- const setLimit = useCallback((newLimit) => {
100
- setLimitState(newLimit);
101
- setPageState(1);
102
- }, []);
103
- const setSort = useCallback((path, value, append = false) => {
104
- setSortsState(prev => {
105
- if (value === null)
106
- return prev.filter(s => s.path !== path);
107
- if (!append)
108
- return [{ path, value }];
109
- const existing = prev.find(s => s.path === path);
110
- if (existing)
111
- return prev.map(s => (s.path === path ? { ...s, value } : s));
112
- return [...prev, { path, value }];
113
- });
114
- }, []);
115
- const setSorts = useCallback((newSorts) => setSortsState(newSorts), []);
116
- const setFilter = useCallback((key, value) => {
117
- setFilterState(prev => ({ ...prev, [key]: value }));
118
- setPageState(1);
119
- }, []);
120
- const setFilters = useCallback((filters) => {
121
- setFilterState(prev => ({ ...prev, ...filters }));
122
- setPageState(1);
123
- }, []);
124
- const clearFilters = useCallback(() => {
125
- setFilterState({});
126
- setPageState(1);
127
- }, []);
128
- const setQuery = useCallback((key, value) => {
129
- setQueryState(prev => ({ ...prev, [key]: value }));
130
- setPageState(1);
131
- }, []);
132
- const refresh = useCallback(async () => {
133
- await fetchData();
134
- }, [fetchData]);
135
- // ** Item mutations (optional helpers)
136
- const setItemsAction = useCallback((nextItems) => {
137
- setItems(nextItems);
138
- }, []);
139
- const setItemAt = useCallback((index, item) => {
140
- setItems(prev => {
141
- if (index < 0 || index >= prev.length)
142
- return prev;
143
- const next = [...prev];
144
- next[index] = item;
145
- return next;
146
- });
147
- }, []);
148
- const itemUpdate = useCallback((props) => {
149
- setItems(prev => {
150
- if ('index' in props) {
151
- // Update by index
152
- const { index, data } = props;
153
- if (index < 0 || index >= prev.length)
154
- return prev;
155
- const next = [...prev];
156
- next[index] = { ...next[index], ...data };
157
- return next;
158
- }
159
- else {
160
- // Update by id
161
- const { id, data } = props;
162
- const index = prev.findIndex((item) => {
163
- const itemWithId = item;
164
- return itemWithId.id === id;
165
- });
166
- if (index === -1)
167
- return prev;
168
- const next = [...prev];
169
- next[index] = { ...next[index], ...data };
170
- return next;
171
- }
172
- });
173
- }, []);
174
- const deleteItemAt = useCallback((index) => {
175
- setItems(prev => prev.filter((_, i) => i !== index));
176
- }, []);
177
- const itemDelete = useCallback((props) => {
178
- setItems(prev => {
179
- if ('index' in props) {
180
- // Delete by index
181
- const { index } = props;
182
- if (index < 0 || index >= prev.length)
183
- return prev;
184
- return prev.filter((_, i) => i !== index);
185
- }
186
- else {
187
- // Delete by id
188
- const { id } = props;
189
- return prev.filter((item) => {
190
- const itemWithId = item;
191
- return itemWithId.id !== id;
192
- });
193
- }
194
- });
195
- }, []);
196
- const itemPush = useCallback((item, position = 1) => {
197
- setItems(prev => (position === 0 ? [item, ...prev] : [...prev, item]));
198
- }, []);
199
- const deleteBulk = useCallback((itemsToDelete) => {
200
- if (itemsToDelete.length === 0)
201
- return;
202
- const toDelete = new Set(itemsToDelete);
203
- setItems(prev => prev.filter(it => !toDelete.has(it)));
204
- }, []);
205
- const reset = useCallback(() => {
206
- setPageState(initialPage);
207
- setLimitState(initialLimit);
208
- setSortsState(initialSorts);
209
- setFilterState(initialFilter);
210
- setDebouncedFilter(initialFilter);
211
- setQueryState(initialQuery);
212
- }, [initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);
213
- // ** Sync with URL if memoryMode is 'search-params'
214
- useEffect(() => {
215
- if (memoryMode !== 'search-params' || typeof window === 'undefined')
216
- return;
217
- // ** Initial load from URL
218
- const urlState = parseUrlParams(window.location.search);
219
- if (Object.keys(urlState).length > 0) {
220
- if (urlState.page)
221
- setPageState(urlState.page);
222
- if (urlState.limit)
223
- setLimitState(urlState.limit);
224
- if (urlState.sorts)
225
- setSortsState(urlState.sorts);
226
- if (urlState.filter) {
227
- setFilterState(prev => ({ ...prev, ...urlState.filter }));
228
- setDebouncedFilter(prev => ({ ...prev, ...urlState.filter }));
229
- }
230
- if (urlState.query)
231
- setQueryState(prev => ({ ...prev, ...urlState.query }));
232
- }
233
- // ** Listen for popstate (back/forward)
234
- const handlePopState = () => {
235
- const newUrlState = parseUrlParams(window.location.search);
236
- setPageState(newUrlState.page ?? initialPage);
237
- setLimitState(newUrlState.limit ?? initialLimit);
238
- setSortsState(newUrlState.sorts ?? initialSorts);
239
- setFilterState({ ...initialFilter, ...newUrlState.filter });
240
- setDebouncedFilter({ ...initialFilter, ...newUrlState.filter });
241
- setQueryState({ ...initialQuery, ...newUrlState.query });
242
- };
243
- window.addEventListener('popstate', handlePopState);
244
- return () => window.removeEventListener('popstate', handlePopState);
245
- }, [memoryMode, initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);
246
- // ** Update URL when state changes
247
- useEffect(() => {
248
- if (memoryMode !== 'search-params' || typeof window === 'undefined')
249
- return;
250
- const params = stateToUrlParams({ page, limit, sorts, filter, query });
251
- const newSearch = params.toString();
252
- const currentSearch = window.location.search.slice(1);
253
- if (newSearch !== currentSearch) {
254
- const newUrl = newSearch ? `?${newSearch}` : window.location.pathname;
255
- window.history.pushState(null, '', newUrl);
256
- }
257
- }, [page, limit, sorts, filter, query, memoryMode]);
258
- // ** Auto-fetch on mount and when dependencies change
259
- useEffect(() => {
260
- if (autoFetch)
261
- fetchData();
262
- }, [page, limit, sorts, debouncedFilter, query, autoFetch, fetchData]);
263
- // ** Cleanup
264
- useEffect(() => {
265
- mounted.current = true;
266
- return () => {
267
- mounted.current = false;
268
- };
269
- }, []);
270
- // ** Calculate hasNextPage
271
- const hasNextPage = page * limit < total;
272
- return {
273
- page,
274
- limit,
275
- sorts,
276
- filter,
277
- filterConfig: filters?.reduce((acc, f) => {
278
- if (f.configuration)
279
- acc[f.id] = f.configuration;
280
- return acc;
281
- }, {}),
282
- query,
283
- items,
284
- total,
285
- state: { isLoading, error, hasNextPage },
286
- actions: {
287
- setPage,
288
- setLimit,
289
- setSort,
290
- setSorts,
291
- setFilter,
292
- setFilters,
293
- clearFilters,
294
- setQuery,
295
- refresh,
296
- reset,
297
- getInput,
298
- setItems: setItemsAction,
299
- setItemAt,
300
- itemUpdate,
301
- deleteItemAt,
302
- itemDelete,
303
- itemPush,
304
- deleteBulk,
305
- },
306
- };
307
- };
308
- //# sourceMappingURL=useDataKit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDataKit.js","sourceRoot":"","sources":["../../../src/client/hooks/useDataKit.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- /**
2
- * next-data-kit - usePagination Hook
3
- *
4
- * React hook for calculating pagination state.
5
- */
6
- 'use client';
7
- import { useMemo } from 'react';
8
- import { calculatePagination } from '../../server/utils';
9
- const range = (start, end) => Array.from({ length: end - start + 1 }, (_, idx) => idx + start);
10
- export const usePagination = (props) => {
11
- // ** Deconstruct Props
12
- const { page, limit, total, siblingCount = 1 } = props;
13
- // ** Calculate pagination info
14
- const paginationInfo = useMemo(() => calculatePagination(page, limit, total), [page, limit, total]);
15
- // ** Calculate page numbers to display
16
- const pages = useMemo(() => {
17
- const { totalPages } = paginationInfo;
18
- // ** Total number of page buttons = siblings on both sides + first + last + current + 2 ellipsis
19
- const totalPageNumbers = siblingCount * 2 + 5;
20
- // ** If total pages is less than page numbers we want to show
21
- if (totalPageNumbers >= totalPages)
22
- return range(1, totalPages);
23
- const leftSiblingIndex = Math.max(page - siblingCount, 1);
24
- const rightSiblingIndex = Math.min(page + siblingCount, totalPages);
25
- const shouldShowLeftEllipsis = leftSiblingIndex > 2;
26
- const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1;
27
- // ** No left ellipsis, but right ellipsis
28
- if (!shouldShowLeftEllipsis && shouldShowRightEllipsis) {
29
- const leftRange = range(1, 3 + 2 * siblingCount);
30
- return [...leftRange, 'ellipsis', totalPages];
31
- }
32
- // ** Left ellipsis, no right ellipsis
33
- if (shouldShowLeftEllipsis && !shouldShowRightEllipsis) {
34
- const rightRange = range(totalPages - (3 + 2 * siblingCount) + 1, totalPages);
35
- return [1, 'ellipsis', ...rightRange];
36
- }
37
- // ** Both ellipsis
38
- if (shouldShowLeftEllipsis && shouldShowRightEllipsis) {
39
- const middleRange = range(leftSiblingIndex, rightSiblingIndex);
40
- return [1, 'ellipsis', ...middleRange, 'ellipsis', totalPages];
41
- }
42
- return range(1, totalPages);
43
- }, [paginationInfo, page, siblingCount]);
44
- return {
45
- ...paginationInfo,
46
- pages,
47
- firstPage: 1,
48
- lastPage: paginationInfo.totalPages,
49
- };
50
- };
51
- //# sourceMappingURL=usePagination.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePagination.js","sourceRoot":"","sources":["../../../src/client/hooks/usePagination.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAWzD,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AAEzH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,KAME,EACqB,EAAE;IACzB,uBAAuB;IACvB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;IAEvD,+BAA+B;IAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpG,uCAAuC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC;QAEtC,iGAAiG;QACjG,MAAM,gBAAgB,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9C,8DAA8D;QAC9D,IAAI,gBAAgB,IAAI,UAAU;YAAE,OAAO,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAEhE,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,EAAE,UAAU,CAAC,CAAC;QAEpE,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,CAAC,CAAC;QACpD,MAAM,uBAAuB,GAAG,iBAAiB,GAAG,UAAU,GAAG,CAAC,CAAC;QAEnE,0CAA0C;QAC1C,IAAI,CAAC,sBAAsB,IAAI,uBAAuB,EAAE,CAAC;YACxD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,SAAS,EAAE,UAAmB,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;QAED,sCAAsC;QACtC,IAAI,sBAAsB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;YAC9E,OAAO,CAAC,CAAC,EAAE,UAAmB,EAAE,GAAG,UAAU,CAAC,CAAC;QAChD,CAAC;QAED,mBAAmB;QACnB,IAAI,sBAAsB,IAAI,uBAAuB,EAAE,CAAC;YACvD,MAAM,WAAW,GAAG,KAAK,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC,EAAE,UAAmB,EAAE,GAAG,WAAW,EAAE,UAAmB,EAAE,UAAU,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzC,OAAO;QACN,GAAG,cAAc;QACjB,KAAK;QACL,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,cAAc,CAAC,UAAU;KACnC,CAAC;AACH,CAAC,CAAC"}
@@ -1,93 +0,0 @@
1
- /**
2
- * next-data-kit - useSelection Hook
3
- *
4
- * React hook for managing table row selection.
5
- */
6
- 'use client';
7
- import { useState, useCallback, useMemo } from 'react';
8
- export const useSelection = (initialSelected = []) => {
9
- // ** State
10
- const [selectedIds, setSelectedIds] = useState(new Set(initialSelected));
11
- // ** Select a single item
12
- const select = useCallback((id) => {
13
- setSelectedIds((prev) => new Set(prev).add(id));
14
- }, []);
15
- // ** Deselect a single item
16
- const deselect = useCallback((id) => {
17
- setSelectedIds((prev) => {
18
- const next = new Set(prev);
19
- next.delete(id);
20
- return next;
21
- });
22
- }, []);
23
- // ** Toggle selection of a single item
24
- const toggle = useCallback((id) => {
25
- setSelectedIds((prev) => {
26
- const next = new Set(prev);
27
- if (next.has(id))
28
- next.delete(id);
29
- else
30
- next.add(id);
31
- return next;
32
- });
33
- }, []);
34
- // ** Select all items
35
- const selectAll = useCallback((ids) => {
36
- setSelectedIds(new Set(ids));
37
- }, []);
38
- // ** Deselect all items
39
- const deselectAll = useCallback(() => {
40
- setSelectedIds(new Set());
41
- }, []);
42
- // ** Toggle all items selection
43
- const toggleAll = useCallback((ids) => {
44
- setSelectedIds((prev) => {
45
- // ** If all are selected, deselect all
46
- if (ids.every((id) => prev.has(id)))
47
- return new Set();
48
- // ** Otherwise, select all
49
- return new Set(ids);
50
- });
51
- }, []);
52
- // ** Check if an item is selected
53
- const isSelected = useCallback((id) => selectedIds.has(id), [selectedIds]);
54
- // ** Get array of selected IDs
55
- const getSelectedArray = useCallback(() => Array.from(selectedIds), [selectedIds]);
56
- // ** Calculate derived state
57
- const isAllSelected = useMemo(() => selectedIds.size > 0, [selectedIds.size]);
58
- const isIndeterminate = useMemo(() => false, []);
59
- return {
60
- selectedIds,
61
- isAllSelected,
62
- isIndeterminate,
63
- select,
64
- deselect,
65
- toggle,
66
- selectAll,
67
- deselectAll,
68
- toggleAll,
69
- isSelected,
70
- getSelectedArray,
71
- };
72
- };
73
- export const useSelectionWithTotal = (totalItems, initialSelected = []) => {
74
- // ** Base selection hook
75
- const selection = useSelection(initialSelected);
76
- // ** Calculate derived state
77
- const isAllSelected = useMemo(() => totalItems.length > 0 && totalItems.every((id) => selection.selectedIds.has(id)), [totalItems, selection.selectedIds]);
78
- const isIndeterminate = useMemo(() => selection.selectedIds.size > 0 && selection.selectedIds.size < totalItems.length, [totalItems.length, selection.selectedIds.size]);
79
- // ** Override toggleAll to use totalItems
80
- const toggleAll = useCallback(() => {
81
- if (isAllSelected)
82
- selection.deselectAll();
83
- else
84
- selection.selectAll(totalItems);
85
- }, [isAllSelected, selection, totalItems]);
86
- return {
87
- ...selection,
88
- isAllSelected,
89
- isIndeterminate,
90
- toggleAll,
91
- };
92
- };
93
- //# sourceMappingURL=useSelection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSelection.js","sourceRoot":"","sources":["../../../src/client/hooks/useSelection.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * next-data-kit - Client Exports
3
- *
4
- * Client-side utilities, hooks, and components for next-data-kit.
5
- */
6
- 'use client';
7
- // ** Hooks
8
- export { useDataKit, useSelection, useSelectionWithTotal, usePagination } from './hooks';
9
- // ** Context
10
- export { createDataKitContext, DataKitProvider, useDataKitContext, DataKitContext } from './context';
11
- // ** Components
12
- export { DataKitTable, DataKit, DataKitInfinity } from './components';
13
- // ** Utilities
14
- export { getColumnValue, getSortValue, getNextSortValue, formatNumber, debounce, throttle, sortEntriesToKey, keyToSortEntries } from './utils';
15
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;AAEb,WAAW;AACX,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAsD,MAAM,SAAS,CAAC;AAE7I,aAAa;AACb,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAA6B,MAAM,WAAW,CAAC;AAEhI,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEtE,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
@@ -1,22 +0,0 @@
1
- 'use client';
2
- const toClassString = (input) => {
3
- if (!input)
4
- return '';
5
- if (typeof input === 'string' || typeof input === 'number')
6
- return String(input);
7
- if (Array.isArray(input)) {
8
- return input.map(toClassString).filter(Boolean).join(' ');
9
- }
10
- if (typeof input === 'object') {
11
- return Object.entries(input)
12
- .filter(([, value]) => Boolean(value))
13
- .map(([key]) => key)
14
- .join(' ');
15
- }
16
- return '';
17
- };
18
- /**
19
- * Minimal `cn` helper (shadcn-style) without external deps.
20
- */
21
- export const cn = (...inputs) => inputs.map(toClassString).filter(Boolean).join(' ');
22
- //# sourceMappingURL=cn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cn.js","sourceRoot":"","sources":["../../../src/client/utils/cn.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAOb,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAU,EAAE;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;aACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAoB,EAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
@@ -1,133 +0,0 @@
1
- /**
2
- * next-data-kit - Utility Functions
3
- *
4
- * Helper utilities for client-side operations.
5
- */
6
- export { cn } from './cn';
7
- /**
8
- * Get the value from an item using a column accessor
9
- */
10
- export const getColumnValue = (item, column) => {
11
- const { accessor } = column;
12
- return typeof accessor === 'function' ? accessor(item) : item[accessor];
13
- };
14
- /**
15
- * Get the sort value for a column
16
- */
17
- export const getSortValue = (sorts, path) => {
18
- const sort = sorts.find((s) => s.path === path);
19
- return sort?.value ?? null;
20
- };
21
- /**
22
- * Get the next sort value in the cycle: null -> 1 -> -1 -> null
23
- */
24
- export const getNextSortValue = (current) => {
25
- if (current === null)
26
- return 1;
27
- if (current === 1)
28
- return -1;
29
- return null;
30
- };
31
- /**
32
- * Format a number with commas
33
- */
34
- export const formatNumber = (num) => num.toLocaleString();
35
- /**
36
- * Debounce a function
37
- */
38
- export const debounce = (fn, delay) => {
39
- let timeoutId;
40
- return (...args) => {
41
- clearTimeout(timeoutId);
42
- timeoutId = setTimeout(() => fn(...args), delay);
43
- };
44
- };
45
- /**
46
- * Throttle a function
47
- */
48
- export const throttle = (fn, limit) => {
49
- let inThrottle = false;
50
- return (...args) => {
51
- if (!inThrottle) {
52
- fn(...args);
53
- inThrottle = true;
54
- setTimeout(() => { inThrottle = false; }, limit);
55
- }
56
- };
57
- };
58
- /**
59
- * Create a stable object key from sort entries
60
- */
61
- export const sortEntriesToKey = (sorts) => sorts.map((s) => `${s.path}:${s.value}`).join(',');
62
- /**
63
- * Parse a sort key back to sort entries
64
- */
65
- export const keyToSortEntries = (key) => {
66
- if (!key)
67
- return [];
68
- return key.split(',').map((part) => {
69
- const [path, value] = part.split(':');
70
- return { path: path ?? '', value: parseInt(value ?? '1', 10) };
71
- });
72
- };
73
- /**
74
- * Parse URL search params into tabler state
75
- */
76
- export const parseUrlParams = (search) => {
77
- const params = new URLSearchParams(search);
78
- const state = {};
79
- // ** Page
80
- const page = params.get('page');
81
- if (page)
82
- state.page = parseInt(page, 10);
83
- // ** Limit
84
- const limit = params.get('limit');
85
- if (limit)
86
- state.limit = parseInt(limit, 10);
87
- // ** Sorts
88
- const sort = params.get('sort');
89
- if (sort)
90
- state.sorts = keyToSortEntries(sort);
91
- // ** Filter (f_key) and Query (q_key)
92
- const filter = {};
93
- const query = {};
94
- params.forEach((value, key) => {
95
- if (key.startsWith('f_'))
96
- filter[key.slice(2)] = value;
97
- else if (key.startsWith('q_'))
98
- query[key.slice(2)] = value;
99
- });
100
- if (Object.keys(filter).length > 0)
101
- state.filter = filter;
102
- if (Object.keys(query).length > 0)
103
- state.query = query;
104
- return state;
105
- };
106
- /**
107
- * Convert tabler state to URL search params
108
- */
109
- export const stateToUrlParams = (state) => {
110
- const params = new URLSearchParams();
111
- if (state.page && state.page > 1)
112
- params.set('page', state.page.toString());
113
- if (state.limit)
114
- params.set('limit', state.limit.toString());
115
- if (state.sorts && state.sorts.length > 0)
116
- params.set('sort', sortEntriesToKey(state.sorts));
117
- if (state.filter) {
118
- Object.entries(state.filter).forEach(([key, value]) => {
119
- if (value !== undefined && value !== null && value !== '') {
120
- params.set(`f_${key}`, String(value));
121
- }
122
- });
123
- }
124
- if (state.query) {
125
- Object.entries(state.query).forEach(([key, value]) => {
126
- if (value !== undefined && value !== null && value !== '') {
127
- params.set(`q_${key}`, String(value));
128
- }
129
- });
130
- }
131
- return params;
132
- };
133
- //# sourceMappingURL=index.js.map