@himanshu-sorathiya/react-kit 1.0.10 → 1.0.12

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 (3) hide show
  1. package/dist/index.d.ts +126 -53
  2. package/dist/index.js +325 -201
  3. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,12 +1,16 @@
1
1
  // Generated by dts-bundle-generator v9.5.1
2
2
 
3
- import { RefObject } from 'react';
3
+ import { CSSProperties, RefObject } from 'react';
4
4
 
5
5
  export interface ModalLayoutProps {
6
+ modalId: string;
6
7
  children: React.ReactNode;
7
- className?: string;
8
+ wrapperClassName?: string;
9
+ wrapperStyle?: CSSProperties;
10
+ containerClassName?: string;
11
+ containerStyle?: CSSProperties;
8
12
  }
9
- export declare function ModalLayout({ children, className }: ModalLayoutProps): import("react").ReactPortal;
13
+ export declare function ModalLayout({ modalId, children, wrapperClassName, wrapperStyle, containerClassName, containerStyle, }: ModalLayoutProps): import("react").ReactPortal | null;
10
14
  export interface DebounceOptions {
11
15
  maxWait?: number;
12
16
  leading?: boolean;
@@ -34,34 +38,74 @@ export type DateOperator = "equals" | "before" | "after" | "between";
34
38
  export type SelectOperator = "equals" | "notEquals";
35
39
  export type MultiselectOperator = "in" | "notIn" | "intersects";
36
40
  export type CustomOperator = "custom";
37
- export type FilterOperator = TextOperator | NumberOperator | BooleanOperator | DateOperator | SelectOperator | MultiselectOperator | CustomOperator;
38
- export interface FilterOptions {
41
+ export interface FilterOptions<T = unknown> {
39
42
  caseSensitive?: boolean;
40
- compare?: (itemValue: any, filterValue: any, item: any) => boolean;
43
+ compare?: (itemValue: unknown, filterValue: unknown, item: T) => boolean;
41
44
  }
42
- export interface FilterConfig extends FilterOptions {
45
+ export type BaseFilterConfig<T> = FilterOptions<T> & {
43
46
  id: string;
44
47
  field: string;
45
- type: FilterType;
46
- operator: FilterOperator;
47
- value: any;
48
- }
49
- export type FilterState = FilterConfig[];
48
+ isActive?: boolean;
49
+ };
50
+ export type FilterConfig<T = unknown> = BaseFilterConfig<T> & ({
51
+ type: "text";
52
+ operator: TextOperator;
53
+ value: string;
54
+ } | {
55
+ type: "number";
56
+ operator: "between";
57
+ value: {
58
+ min: number;
59
+ max: number;
60
+ };
61
+ } | {
62
+ type: "number";
63
+ operator: Exclude<NumberOperator, "between">;
64
+ value: number;
65
+ } | {
66
+ type: "boolean";
67
+ operator: BooleanOperator;
68
+ value: boolean;
69
+ } | {
70
+ type: "date";
71
+ operator: "between";
72
+ value: {
73
+ min: string | number | Date;
74
+ max: string | number | Date;
75
+ };
76
+ } | {
77
+ type: "date";
78
+ operator: Exclude<DateOperator, "between">;
79
+ value: string | number | Date;
80
+ } | {
81
+ type: "select";
82
+ operator: SelectOperator;
83
+ value: string | number;
84
+ } | {
85
+ type: "multiselect";
86
+ operator: MultiselectOperator;
87
+ value: (string | number)[];
88
+ } | {
89
+ type: "custom";
90
+ operator: CustomOperator;
91
+ value: unknown;
92
+ });
93
+ export type FilterState<T> = FilterConfig<T>[];
50
94
  export interface UseFilterReturn<T> {
51
95
  filteredItems: T[];
52
- filters: FilterState;
53
- addFilter: (filter: FilterConfig) => void;
96
+ filters: FilterState<T>;
97
+ upsertFilter: (filter: FilterConfig<T>) => void;
54
98
  removeFilter: (id: string | string[]) => void;
55
99
  clearFilters: () => void;
56
100
  resetFilters: () => void;
57
- setFilters: (filters: FilterConfig[]) => void;
58
- toggleFilter: (filter: FilterConfig) => void;
59
- updateFilterConfig: (id: string, partialConfig: Partial<Omit<FilterConfig, "id">>) => void;
60
- getFilterValue: (id: string) => any;
61
- updateFilterValue: (id: string, value: any) => void;
101
+ replaceFilters: (filters: FilterConfig<T>[]) => void;
102
+ toggleFilter: (filter: FilterConfig<T>) => void;
103
+ updateFilterConfig: (id: string, partialConfig: Partial<Omit<FilterConfig<T>, "id">>) => void;
104
+ getFilterValue: (id: string) => unknown;
105
+ updateFilterValue: (id: string, value: unknown) => void;
62
106
  isFilterActive: (id: string) => boolean;
63
107
  }
64
- export declare function useFilter<T>(data: T[], initialFilters?: FilterState): UseFilterReturn<T>;
108
+ export declare function useFilter<T>(data: T[], initialFilters?: FilterState<T>): UseFilterReturn<T>;
65
109
  export interface FuzzySearchOptions {
66
110
  threshold?: number;
67
111
  caseSensitive?: boolean;
@@ -80,38 +124,56 @@ declare const validKeyEventTypes: readonly [
80
124
  "keypress"
81
125
  ];
82
126
  export type KeyEventType = (typeof validKeyEventTypes)[number];
83
- export interface KeyLifecycleOptions {
127
+ export interface BaseKeyOptions {
84
128
  enabled?: boolean;
85
129
  target?: RefObject<HTMLElement | null> | Window;
86
- }
87
- export interface KeyEventModifiers {
88
130
  preventDefault?: boolean;
89
131
  stopPropagation?: boolean;
90
- eventType?: KeyEventType;
91
- }
92
- export interface KeyChordModifiers {
132
+ ignoreWhenFocusedInInputs?: boolean;
93
133
  ctrlKey?: boolean;
94
134
  shiftKey?: boolean;
95
135
  altKey?: boolean;
96
136
  metaKey?: boolean;
97
137
  }
98
- export interface KeyFilterOptions {
99
- requireReset?: boolean;
100
- ignoreInputs?: boolean;
101
- }
102
- export interface KeyOptions extends KeyLifecycleOptions, KeyEventModifiers, KeyChordModifiers, KeyFilterOptions {
103
- }
138
+ export type KeyOptions = BaseKeyOptions & ({
139
+ eventType?: "keydown" | "keypress";
140
+ preventRepeat?: boolean;
141
+ } | {
142
+ eventType: "keyup";
143
+ preventRepeat?: never;
144
+ });
104
145
  export type UseKeyReturn = void;
105
- export declare function useKey(key: string, func: (...args: any[]) => void, { enabled, preventDefault, stopPropagation, eventType, requireReset, ignoreInputs, ctrlKey, shiftKey, altKey, metaKey, target, }?: KeyOptions): UseKeyReturn;
106
- export interface UseModalReturn<TData> {
146
+ export declare function useKey(key: string, handler: (e: KeyboardEvent) => void, { enabled, preventDefault, stopPropagation, eventType, preventRepeat, ignoreWhenFocusedInInputs, ctrlKey, shiftKey, altKey, metaKey, target, }?: KeyOptions): UseKeyReturn;
147
+ export interface UseModalStateReturn<TData> {
148
+ isOpen: boolean;
107
149
  id: string | null;
108
150
  data: TData | undefined;
109
- openModal: <T = any>(id: string, data?: T) => void;
110
- closeModal: () => void;
111
151
  }
112
- export declare function useModal<TData = any>(): UseModalReturn<TData>;
152
+ export interface UseModalActionsReturn {
153
+ openModal: <T = unknown>(id: string, data?: T) => void;
154
+ closeModal: () => void;
155
+ clearModal: () => void;
156
+ }
157
+ export type UseModalReturn<TData> = UseModalStateReturn<TData> & UseModalActionsReturn;
158
+ export declare function useModalState<TData = unknown>(): UseModalStateReturn<TData>;
159
+ export declare function useModalActions(): UseModalActionsReturn;
160
+ export declare function useModal<TData = unknown>(): UseModalReturn<TData>;
161
+ export interface UseOrderReturn<T> {
162
+ orderedItems: T[];
163
+ moveUp: (index: number) => void;
164
+ moveDown: (index: number) => void;
165
+ canMoveUp: (index: number) => boolean;
166
+ canMoveDown: (index: number) => boolean;
167
+ moveToTop: (index: number) => void;
168
+ moveToBottom: (index: number) => void;
169
+ move: (fromIndex: number, toIndex: number) => void;
170
+ swap: (indexA: number, indexB: number) => void;
171
+ replaceOrder: (newOrderedItems: T[]) => void;
172
+ resetOrder: () => void;
173
+ }
174
+ export declare function useOrder<T>(initialItems: T[]): UseOrderReturn<T>;
113
175
  export interface UsePaginationReturn<T> {
114
- currentItems: T[];
176
+ pageItems: T[];
115
177
  pageSize: number;
116
178
  pageIndex: number;
117
179
  totalPages: number;
@@ -119,41 +181,52 @@ export interface UsePaginationReturn<T> {
119
181
  canNext: boolean;
120
182
  nextPage: () => void;
121
183
  previousPage: () => void;
122
- firstPage: () => void;
123
- lastPage: () => void;
124
- setPageIndex: (newPageIndex: number) => void;
125
- setPageSize: (newPageSize: number) => void;
184
+ goToFirstPage: () => void;
185
+ goToLastPage: () => void;
186
+ goToPage: (newPageIndex: number) => void;
187
+ changePageSize: (newPageSize: number) => void;
126
188
  resetPageIndex: () => void;
127
189
  resetPageSize: () => void;
190
+ resetPagination: () => void;
128
191
  }
129
192
  export declare function usePagination<T>(data: T[], initialPageSize: number, initialPageIndex?: number): UsePaginationReturn<T>;
130
193
  export type SortType = "numeric" | "alphabetical" | "alphanumeric" | "boolean" | "date" | "basic" | "custom";
131
- export interface SortOptions {
194
+ export interface BaseSortOptions {
132
195
  desc?: boolean;
133
- caseSensitive?: boolean;
134
196
  disableSortRemoval?: boolean;
135
197
  invertSorting?: boolean;
136
- sortUndefined?: "first" | "last" | false | -1 | 1;
137
- compare?: (a: any, b: any) => number;
198
+ sortUndefined?: "first" | "last" | -1 | 1;
138
199
  }
139
- export interface SortConfig extends SortOptions {
200
+ export interface BaseSortConfig extends BaseSortOptions {
140
201
  id: string;
141
- type: SortType;
142
202
  field?: string;
143
203
  }
144
- export type SortState = Array<SortConfig>;
204
+ export type SortConfig = BaseSortConfig & ({
205
+ type: "numeric" | "boolean" | "date" | "basic";
206
+ } | {
207
+ type: "alphabetical" | "alphanumeric";
208
+ caseSensitive?: boolean;
209
+ } | {
210
+ type: "custom";
211
+ compare: (a: unknown, b: unknown) => number;
212
+ });
213
+ export type SortState = SortConfig[];
214
+ export type SortOptionsForType<T extends SortType> = Omit<Extract<SortConfig, {
215
+ type: T;
216
+ }>, "id" | "type" | "field">;
145
217
  export interface UseSortReturn<T> {
146
218
  sortedItems: T[];
147
219
  sorts: SortState;
148
- addSort: (sort: SortConfig) => void;
220
+ upsertSorts: (sort: SortConfig) => void;
149
221
  removeSort: (id: string | string[]) => void;
150
222
  clearSorts: () => void;
151
223
  resetSorts: () => void;
152
- setSorts: (sorts: SortState) => void;
153
- getSortDirection: (id: string) => "asc" | "desc" | undefined;
154
- toggleSort: (id: string, type: SortType, options?: SortOptions & {
224
+ replaceSorts: (sorts: SortState) => void;
225
+ toggleSort: <TType extends SortType>(id: string, type: TType, options?: SortOptionsForType<TType> & {
155
226
  multi?: boolean;
227
+ field?: string;
156
228
  }) => void;
229
+ getSortDirection: (id: string) => "asc" | "desc" | undefined;
157
230
  getNextSortingOrder: (id: string) => "asc" | "desc" | "none";
158
231
  getSortIndex: (id: string) => number | undefined;
159
232
  }
package/dist/index.js CHANGED
@@ -1,38 +1,64 @@
1
- import { createContext as e, useCallback as t, useContext as n, useEffect as r, useMemo as i, useRef as a, useState as o } from "react";
2
- import { createPortal as s } from "react-dom";
3
- import { jsx as c } from "react/jsx-runtime";
1
+ import { createContext as e, useCallback as t, useContext as n, useEffect as r, useLayoutEffect as i, useMemo as a, useRef as o, useState as s } from "react";
2
+ import { createPortal as c } from "react-dom";
3
+ import { jsx as l } from "react/jsx-runtime";
4
4
  //#region src/context/ModalContext.tsx
5
- var l = e(void 0);
5
+ var u = e(null), d = e(null);
6
6
  //#endregion
7
7
  //#region src/hooks/useModal.ts
8
- function u() {
9
- let e = n(l);
10
- if (!e) throw Error("useModal must be used within a ModalProvider");
8
+ function f() {
9
+ let e = n(u);
10
+ if (!e) throw Error("useModalState must be used within a ModalProvider");
11
11
  return e;
12
12
  }
13
+ function p() {
14
+ let e = n(d);
15
+ if (!e) throw Error("useModalActions must be used within a ModalProvider");
16
+ return e;
17
+ }
18
+ function m() {
19
+ return {
20
+ ...f(),
21
+ ...p()
22
+ };
23
+ }
13
24
  //#endregion
14
25
  //#region src/components/Modal.tsx
15
- function d({ children: e, className: t }) {
16
- let { id: n, closeModal: i } = u(), o = a(null);
26
+ function h({ modalId: e, children: t, wrapperClassName: n = "", wrapperStyle: i, containerClassName: a = "", containerStyle: u }) {
27
+ let { isOpen: d, id: m } = f(), { closeModal: h, clearModal: g } = p(), [_, v] = s(!1), y = o(null), b = m === e, x = d && b;
17
28
  return r(() => {
18
- let e = o.current;
19
- e && (n && !e.open ? e.showModal() : !n && e.open && e.close());
20
- }, [n]), s(/* @__PURE__ */ c("dialog", {
21
- ref: o,
29
+ let e = y.current;
30
+ e && (x && !e.open ? (v(!1), e.showModal()) : !x && e.open && v(!0));
31
+ }, [x]), typeof document > "u" || !b && !_ ? null : c(/* @__PURE__ */ l("dialog", {
32
+ ref: y,
22
33
  onCancel: (e) => {
23
- e.preventDefault(), i();
34
+ e.preventDefault(), h();
35
+ },
36
+ onClose: h,
37
+ onClick: (e) => {
38
+ let t = y.current;
39
+ if (!t) return;
40
+ let n = t.getBoundingClientRect();
41
+ (e.clientX < n.x || e.clientX > n.x + n.width || e.clientY < n.y || e.clientY > n.y + n.height) && h();
42
+ },
43
+ onAnimationEnd: () => {
44
+ if (_) {
45
+ let e = y.current;
46
+ e && e.close(), v(!1), b && g();
47
+ }
24
48
  },
25
- className: `universal-modal ${t}`,
26
- children: /* @__PURE__ */ c("div", {
27
- className: "modal-container",
28
- children: e
49
+ className: `universal-modal ${n}`.trim(),
50
+ style: i,
51
+ children: /* @__PURE__ */ l("div", {
52
+ className: `modal-container ${a}`.trim(),
53
+ style: u,
54
+ children: t
29
55
  })
30
56
  }), document.body);
31
57
  }
32
58
  //#endregion
33
59
  //#region src/hooks/useDebounce.ts
34
- function f(e, n, i = {}) {
35
- let [s, c] = o(!1), l = i.maxWait, u = !!i.leading, d = !u && i.trailing === !1 ? !0 : i.trailing ?? !u, f = a(e), p = a(null), m = a(-1), h = a(-1), g = a(null);
60
+ function g(e, n, i = {}) {
61
+ let [a, c] = s(!1), l = i.maxWait, u = !!i.leading, d = !u && i.trailing === !1 ? !0 : i.trailing ?? !u, f = o(e), p = o(null), m = o(-1), h = o(-1), g = o(null);
36
62
  r(() => {
37
63
  f.current = e;
38
64
  }, [e]);
@@ -56,28 +82,28 @@ function f(e, n, i = {}) {
56
82
  ]),
57
83
  cancel: _,
58
84
  flush: v,
59
- isPending: s
85
+ isPending: a
60
86
  };
61
87
  }
62
88
  //#endregion
63
89
  //#region src/hooks/useDebouncedValue.ts
64
- function p(e, t, n = {}) {
65
- let [i, a] = o(e), { debouncedFunc: s } = f((e) => {
90
+ function _(e, t, n = {}) {
91
+ let [i, a] = s(e), { debouncedFunc: o } = g((e) => {
66
92
  a(e);
67
93
  }, t, n);
68
94
  return r(() => {
69
- s(e);
70
- }, [e, s]), i;
95
+ o(e);
96
+ }, [e, o]), i;
71
97
  }
72
98
  //#endregion
73
99
  //#region src/utils/filterUtils.ts
74
- var m = {
100
+ var v = {
75
101
  text: {
76
- contains: (e, t, n) => n?.caseSensitive ? String(e).includes(String(t)) : String(e).toLowerCase().includes(String(t).toLowerCase()),
77
- equals: (e, t, n) => n?.caseSensitive ? String(e) === String(t) : String(e).toLowerCase() === String(t).toLowerCase(),
78
- startsWith: (e, t, n) => n?.caseSensitive ? String(e).startsWith(String(t)) : String(e).toLowerCase().startsWith(String(t).toLowerCase()),
79
- endsWith: (e, t, n) => n?.caseSensitive ? String(e).endsWith(String(t)) : String(e).toLowerCase().endsWith(String(t).toLowerCase()),
80
- notContains: (e, t, n) => n?.caseSensitive ? !String(e).includes(String(t)) : !String(e).toLowerCase().includes(String(t).toLowerCase())
102
+ contains: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).includes(String(t)) : String(e).toLowerCase().includes(String(t).toLowerCase()),
103
+ equals: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e) === String(t) : String(e).toLowerCase() === String(t).toLowerCase(),
104
+ startsWith: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).startsWith(String(t)) : String(e).toLowerCase().startsWith(String(t).toLowerCase()),
105
+ endsWith: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).endsWith(String(t)) : String(e).toLowerCase().endsWith(String(t).toLowerCase()),
106
+ notContains: (e, t, n) => e == null ? !0 : n?.caseSensitive ? !String(e).includes(String(t)) : !String(e).toLowerCase().includes(String(t).toLowerCase())
81
107
  },
82
108
  number: {
83
109
  equals: (e, t) => Number(e) === Number(t),
@@ -85,29 +111,35 @@ var m = {
85
111
  lessThan: (e, t) => Number(e) < Number(t),
86
112
  greaterThanOrEqual: (e, t) => Number(e) >= Number(t),
87
113
  lessThanOrEqual: (e, t) => Number(e) <= Number(t),
88
- between: (e, t) => Number(e) >= Number(t.min) && Number(e) <= Number(t.max)
114
+ between: (e, t) => {
115
+ if (typeof t != "object" || !t) return !1;
116
+ let { min: n, max: r } = t;
117
+ return n == null || r == null ? !1 : Number(e) >= Number(n) && Number(e) <= Number(r);
118
+ }
89
119
  },
90
120
  boolean: { equals: (e, t) => !!e == !!t },
91
121
  date: {
92
122
  equals: (e, t) => {
93
123
  if (!e || !t) return !1;
94
- let n = new Date(e).getTime(), r = new Date(t).getTime();
95
- return Number.isNaN(n) || Number.isNaN(r) ? !1 : n === r;
124
+ let n = new Date(e), r = new Date(t);
125
+ return Number.isNaN(n.getTime()) || Number.isNaN(r.getTime()) ? !1 : n.getFullYear() === r.getFullYear() && n.getMonth() === r.getMonth() && n.getDate() === r.getDate();
96
126
  },
97
127
  before: (e, t) => {
98
128
  if (!e || !t) return !1;
99
- let n = new Date(e).getTime(), r = new Date(t).getTime();
129
+ let n = new Date(e).setHours(0, 0, 0, 0), r = new Date(t).setHours(0, 0, 0, 0);
100
130
  return Number.isNaN(n) || Number.isNaN(r) ? !1 : n < r;
101
131
  },
102
132
  after: (e, t) => {
103
133
  if (!e || !t) return !1;
104
- let n = new Date(e).getTime(), r = new Date(t).getTime();
134
+ let n = new Date(e).setHours(0, 0, 0, 0), r = new Date(t).setHours(0, 0, 0, 0);
105
135
  return Number.isNaN(n) || Number.isNaN(r) ? !1 : n > r;
106
136
  },
107
137
  between: (e, t) => {
108
- if (!e || !t?.min || !t?.max) return !1;
109
- let n = new Date(e).getTime(), r = new Date(t.min).getTime(), i = new Date(t.max).getTime();
110
- return Number.isNaN(n) || Number.isNaN(r) || Number.isNaN(i) ? !1 : n >= r && n <= i;
138
+ if (!e || typeof t != "object" || !t) return !1;
139
+ let { min: n, max: r } = t;
140
+ if (n == null || r == null) return !1;
141
+ let i = new Date(e).setHours(0, 0, 0, 0), a = new Date(n).setHours(0, 0, 0, 0), o = new Date(r).setHours(0, 0, 0, 0);
142
+ return Number.isNaN(i) || Number.isNaN(a) || Number.isNaN(o) ? !1 : i >= a && i <= o;
111
143
  }
112
144
  },
113
145
  select: {
@@ -122,62 +154,77 @@ var m = {
122
154
  };
123
155
  //#endregion
124
156
  //#region src/utils/utils.ts
125
- function h(e, t, n) {
157
+ function y(e, t, n) {
126
158
  if (typeof e != "object" || !e) return e;
127
- let r = (t || n) ?? "";
128
- return r.includes(".") ? r.split(".").reduce((e, t) => e?.[t], e) : e?.[r];
159
+ let r = t ?? n ?? "";
160
+ return Array.isArray(r) ? r.reduce((e, t) => e?.[t], e) : r.includes(".") ? r.split(".").reduce((e, t) => e?.[t], e) : e?.[r];
129
161
  }
130
162
  //#endregion
131
163
  //#region src/hooks/useFilter.ts
132
- function g(e, n = []) {
133
- let [r, a] = o(n), s = i(() => e.filter((e) => r.every((t) => {
134
- let { id: n, field: r, type: i, operator: a, value: o, compare: s } = t, c = h(e, r, n);
135
- if (i === "custom" || a === "custom") return s ? s(c, o, e) : !0;
136
- let l = m[i];
137
- if (!l) return !0;
138
- let u = l[a];
139
- return u ? u(c, o, t) : !0;
140
- })), [e, r]), c = t((e) => {
141
- a((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]);
164
+ function b(e, n = []) {
165
+ let [r, i] = s(n), o = a(() => {
166
+ let t = r.filter((e) => e.isActive !== !1).map((e) => ({
167
+ ...e,
168
+ pathArray: (e.field || e.id).split(".")
169
+ }));
170
+ return e.filter((e) => t.every((t) => {
171
+ let { id: n, type: r, operator: i, value: a, compare: o, pathArray: s } = t, c = y(e, s, n);
172
+ if (r === "custom") return o ? o(c, a, e) : !0;
173
+ let l = v[r];
174
+ if (!l) return !0;
175
+ let u = l[i];
176
+ return u ? u(c, a, t) : !0;
177
+ }));
178
+ }, [e, r]), c = t((e) => {
179
+ i((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]);
142
180
  }, []), l = t((e) => {
143
- a((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
181
+ i((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
144
182
  }, []), u = t(() => {
145
- a([]);
183
+ i([]);
146
184
  }, []), d = t(() => {
147
- a(n);
185
+ i(n);
148
186
  }, [n]), f = t((e) => {
149
- a(e);
150
- }, []), p = t((e) => r.find((t) => t.id === e)?.value, [r]), g = t((e, t) => {
151
- a((n) => n.map((n) => n.id === e ? {
152
- ...n,
153
- value: t
154
- } : n));
155
- }, []), _ = t((e) => r.some((t) => t.id === e), [r]);
187
+ i(e);
188
+ }, []);
156
189
  return {
157
- filteredItems: s,
190
+ filteredItems: o,
158
191
  filters: r,
159
- addFilter: c,
192
+ upsertFilter: c,
160
193
  removeFilter: l,
161
194
  clearFilters: u,
162
195
  resetFilters: d,
163
196
  toggleFilter: t((e) => {
164
- a((t) => t.some((t) => t.id === e.id) ? t.filter((t) => t.id !== e.id) : [...t, e]);
197
+ i((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? {
198
+ ...t,
199
+ isActive: t.isActive === !1
200
+ } : t) : [...t, {
201
+ ...e,
202
+ isActive: !0
203
+ }]);
165
204
  }, []),
166
205
  updateFilterConfig: t((e, t) => {
167
- a((n) => n.map((n) => n.id === e ? {
206
+ i((n) => n.map((n) => n.id === e ? {
168
207
  ...n,
169
208
  ...t
170
209
  } : n));
171
210
  }, []),
172
- setFilters: f,
173
- getFilterValue: p,
174
- updateFilterValue: g,
175
- isFilterActive: _
211
+ replaceFilters: f,
212
+ getFilterValue: t((e) => r.find((t) => t.id === e)?.value, [r]),
213
+ updateFilterValue: t((e, t) => {
214
+ i((n) => n.map((n) => n.id === e ? {
215
+ ...n,
216
+ value: t
217
+ } : n));
218
+ }, []),
219
+ isFilterActive: t((e) => {
220
+ let t = r.find((t) => t.id === e);
221
+ return t ? t.isActive !== !1 : !1;
222
+ }, [r])
176
223
  };
177
224
  }
178
225
  //#endregion
179
226
  //#region src/utils/fuzzySearchUtils.ts
180
- function _(e, t, n = !1) {
227
+ function x(e, t, n = !1) {
181
228
  let r = e.trim(), i = t.trim(), a = r.length > 1 && r === r.toUpperCase() && /^[A-Z]+$/.test(r);
182
229
  if (n || (r = r.toLowerCase(), i = i.toLowerCase()), r === i) return 1;
183
230
  if (r === "" || i === "") return 0;
@@ -226,11 +273,11 @@ function _(e, t, n = !1) {
226
273
  }
227
274
  //#endregion
228
275
  //#region src/hooks/useFuzzySearch.ts
229
- function v(e, t, n, r = {}) {
230
- let a = r.threshold ?? .01, o = r.caseSensitive ?? !1, s = r.matchStrategy ?? "any", c = r.exactPhraseBonus ?? !0, l = i(() => n.length === 0 || e.length === 0 ? [] : e.map((e, t) => {
276
+ function S(e, t, n, r = {}) {
277
+ let i = r.threshold ?? .01, o = r.caseSensitive ?? !1, s = r.matchStrategy ?? "any", c = r.exactPhraseBonus ?? !0, l = a(() => n.length === 0 || e.length === 0 ? [] : e.map((e, t) => {
231
278
  let r = [], i = [];
232
279
  for (let [t, a] of n) {
233
- let n = h(e, t);
280
+ let n = y(e, t);
234
281
  if (Array.isArray(n)) {
235
282
  for (let e of n) if (e != null && e !== "" && typeof e != "object") {
236
283
  let t = String(e);
@@ -258,12 +305,12 @@ function v(e, t, n, r = {}) {
258
305
  combinedFlatText: i.join(" ")
259
306
  };
260
307
  }), [e, n]);
261
- return i(() => {
308
+ return a(() => {
262
309
  let n = t.trim();
263
310
  if (!n || l.length === 0) return e;
264
311
  let r = n.split(/\s+/).filter((e) => e.length > 0);
265
312
  if (r.length === 0) return e;
266
- let i = [], u = .3;
313
+ let a = [], u = .3;
267
314
  for (let e of l) {
268
315
  let t = 0, n = 0, l = !1;
269
316
  for (let i of r) {
@@ -276,7 +323,7 @@ function v(e, t, n, r = {}) {
276
323
  let e = Math.abs(i.length - n.length), t = Math.max(i.length, n.length);
277
324
  if (t > 0 && (t - e) / t < u) continue;
278
325
  }
279
- let e = _(i, n, o) * t.weight;
326
+ let e = x(i, n, o) * t.weight;
280
327
  e > r && (r = e);
281
328
  }
282
329
  }
@@ -288,19 +335,19 @@ function v(e, t, n, r = {}) {
288
335
  let t = r.map((e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("\\s+");
289
336
  new RegExp(t, o ? "g" : "gi").test(e.combinedFlatText) && (n += .15);
290
337
  }
291
- n >= a && i.push({
338
+ n >= i && a.push({
292
339
  item: e.item,
293
340
  score: n,
294
341
  index: e.index
295
342
  });
296
343
  }
297
344
  }
298
- return i.toSorted((e, t) => t.score === e.score ? e.index - t.index : t.score - e.score).map((e) => e.item);
345
+ return a.toSorted((e, t) => t.score === e.score ? e.index - t.index : t.score - e.score).map((e) => e.item);
299
346
  }, [
300
347
  l,
301
348
  e,
302
349
  t,
303
- a,
350
+ i,
304
351
  o,
305
352
  s,
306
353
  c
@@ -308,42 +355,45 @@ function v(e, t, n, r = {}) {
308
355
  }
309
356
  //#endregion
310
357
  //#region src/constants/keyConstants.ts
311
- var y = [
358
+ var C = [
312
359
  "keydown",
313
360
  "keyup",
314
361
  "keypress"
315
362
  ];
316
363
  //#endregion
317
364
  //#region src/hooks/useKey.ts
318
- function b(e, t, { enabled: n = !0, preventDefault: i = !0, stopPropagation: o = !0, eventType: s = "keydown", requireReset: c = !1, ignoreInputs: l = !0, ctrlKey: u = !1, shiftKey: d = !1, altKey: f = !1, metaKey: p = !1, target: m = window } = {}) {
319
- let h = a(t), g = a(n), _ = a(!1), v = m && "current" in m && m.current || window;
320
- r(() => {
321
- h.current = t;
365
+ function w(e, t, { enabled: n = !0, preventDefault: a = !0, stopPropagation: s = !0, eventType: c = "keydown", preventRepeat: l = !1, ignoreWhenFocusedInInputs: u = !0, ctrlKey: d = !1, shiftKey: f = !1, altKey: p = !1, metaKey: m = !1, target: h = window } = {}) {
366
+ let g = o(t), _ = o(n), v = o(!1);
367
+ i(() => {
368
+ g.current = t;
322
369
  }, [t]), r(() => {
323
- g.current = n;
370
+ _.current = n;
324
371
  }, [n]), r(() => {
325
- if (!v) return;
326
- let t = y.includes(s) ? s : "keydown";
327
- function n(t) {
328
- if (!(t instanceof KeyboardEvent)) return;
329
- let n = t.key.toLowerCase();
330
- (n === e.toLowerCase() || u && n === "control" || d && n === "shift" || f && n === "alt" || p && n === "meta") && (_.current = !1);
372
+ let t = h && "current" in h ? h.current : h;
373
+ if (!t) return;
374
+ let n = e.toLowerCase(), r = C.includes(c) ? c : "keydown", i = l && r !== "keyup";
375
+ function o() {
376
+ v.current = !1;
377
+ }
378
+ function y(e) {
379
+ if (!(e instanceof KeyboardEvent)) return;
380
+ let t = e.key.toLowerCase();
381
+ (t === n || d && t === "control" || f && t === "shift" || p && t === "alt" || m && t === "meta") && (v.current = !1);
331
382
  }
332
- function r(t) {
333
- if (!(t instanceof KeyboardEvent) || !g.current) return;
334
- let n = t.target;
335
- if (!(l && n instanceof HTMLElement && (n instanceof HTMLInputElement || n instanceof HTMLTextAreaElement || n instanceof HTMLSelectElement || n.isContentEditable)) && t.ctrlKey === u && t.shiftKey === d && t.altKey === f && t.metaKey === p && e.toLowerCase() === t.key.toLowerCase()) {
336
- if (c && _.current) return;
337
- _.current = !0, h.current(t), i && t.preventDefault(), o && t.stopPropagation();
383
+ function b(e) {
384
+ if (!(e instanceof KeyboardEvent) || !_.current) return;
385
+ let t = e.target;
386
+ if (!(u && t instanceof HTMLElement && (t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement || t instanceof HTMLSelectElement || t.isContentEditable)) && e.ctrlKey === d && e.shiftKey === f && e.altKey === p && e.metaKey === m && n === e.key.toLowerCase()) {
387
+ if (i && v.current) return;
388
+ v.current = !0, g.current(e), a && e.preventDefault(), s && e.stopPropagation();
338
389
  }
339
390
  }
340
- return v.addEventListener(t, r), v.addEventListener("keyup", n), () => {
341
- v.removeEventListener(t, r), v.removeEventListener("keyup", n);
391
+ return t.addEventListener(r, b), i && (t.addEventListener("keyup", y), window.addEventListener("blur", o)), () => {
392
+ t.removeEventListener(r, b), i && (t.removeEventListener("keyup", y), window.removeEventListener("blur", o));
342
393
  };
343
394
  }, [
344
395
  e,
345
- i,
346
- o,
396
+ a,
347
397
  s,
348
398
  c,
349
399
  l,
@@ -351,20 +401,79 @@ function b(e, t, { enabled: n = !0, preventDefault: i = !0, stopPropagation: o =
351
401
  d,
352
402
  f,
353
403
  p,
354
- v
404
+ m,
405
+ h
355
406
  ]);
356
407
  }
357
408
  //#endregion
409
+ //#region src/hooks/useOrder.ts
410
+ function T(e) {
411
+ let n = o(e), [r, i] = s(e);
412
+ return {
413
+ orderedItems: r,
414
+ moveUp: t((e) => {
415
+ typeof e == "number" && i((t) => {
416
+ if (e <= 0 || e >= t.length) return t;
417
+ let n = [...t];
418
+ return [n[e], n[e - 1]] = [n[e - 1], n[e]], n;
419
+ });
420
+ }, []),
421
+ moveDown: t((e) => {
422
+ typeof e == "number" && i((t) => {
423
+ if (e < 0 || e >= t.length - 1) return t;
424
+ let n = [...t];
425
+ return [n[e], n[e + 1]] = [n[e + 1], n[e]], n;
426
+ });
427
+ }, []),
428
+ canMoveUp: t((e) => e > 0, []),
429
+ canMoveDown: t((e) => e < r.length - 1, [r.length]),
430
+ moveToTop: t((e) => {
431
+ typeof e == "number" && i((t) => {
432
+ if (e <= 0 || e >= t.length) return t;
433
+ let n = [...t], [r] = n.splice(e, 1);
434
+ return n.unshift(r), n;
435
+ });
436
+ }, []),
437
+ moveToBottom: t((e) => {
438
+ typeof e == "number" && i((t) => {
439
+ if (e < 0 || e >= t.length - 1) return t;
440
+ let n = [...t], [r] = n.splice(e, 1);
441
+ return n.push(r), n;
442
+ });
443
+ }, []),
444
+ move: t((e, t) => {
445
+ typeof e != "number" || typeof t != "number" || e === t || i((n) => {
446
+ if (e < 0 || e >= n.length || t < 0 || t >= n.length) return n;
447
+ let r = [...n], [i] = r.splice(e, 1);
448
+ return r.splice(t, 0, i), r;
449
+ });
450
+ }, []),
451
+ swap: t((e, t) => {
452
+ typeof e != "number" || typeof t != "number" || e === t || i((n) => {
453
+ if (e < 0 || e >= n.length || t < 0 || t >= n.length) return n;
454
+ let r = [...n];
455
+ return [r[e], r[t]] = [r[t], r[e]], r;
456
+ });
457
+ }, []),
458
+ replaceOrder: t((e) => {
459
+ i(e);
460
+ }, []),
461
+ resetOrder: t(() => {
462
+ i(n.current);
463
+ }, [])
464
+ };
465
+ }
466
+ //#endregion
358
467
  //#region src/hooks/usePagination.ts
359
- function x(e, n, r = 0) {
360
- let [a, s] = o(n), [c, l] = o(r), u = Math.max(1, Math.ceil(e.length / Math.max(1, a))), d = Math.min(Math.max(0, c), u - 1);
468
+ function E(e, n, r = 0) {
469
+ let [i, o] = s(n), [c, l] = s(r), u = Math.max(1, Math.ceil(e.length / Math.max(1, i))), d = Math.min(Math.max(0, c), u - 1);
361
470
  return c !== d && l(d), {
362
- currentItems: i(() => typeof a != "number" || a < 1 ? [] : e.slice(c * a, (c + 1) * a), [
471
+ pageItems: a(() => typeof i != "number" || i < 1 ? [] : e.slice(c * i, (c + 1) * i), [
363
472
  c,
364
- a,
473
+ i,
365
474
  e
366
475
  ]),
367
- pageSize: a,
476
+ pageSize: i,
368
477
  pageIndex: c,
369
478
  totalPages: u,
370
479
  canPrevious: c > 0,
@@ -375,18 +484,18 @@ function x(e, n, r = 0) {
375
484
  previousPage: t(() => {
376
485
  l((e) => e > 0 ? e - 1 : e);
377
486
  }, []),
378
- firstPage: t(() => {
487
+ goToFirstPage: t(() => {
379
488
  l(0);
380
489
  }, []),
381
- lastPage: t(() => {
490
+ goToLastPage: t(() => {
382
491
  l(u - 1);
383
492
  }, [u]),
384
- setPageIndex: t((e) => {
493
+ goToPage: t((e) => {
385
494
  typeof e == "number" && e >= 0 && e <= u - 1 && l(e);
386
495
  }, [u]),
387
- setPageSize: t((t) => {
496
+ changePageSize: t((t) => {
388
497
  if (typeof t == "number" && t > 0) {
389
- s(t);
498
+ o(t);
390
499
  let n = Math.max(1, Math.ceil(e.length / Math.max(1, t)));
391
500
  l((e) => Math.min(Math.max(0, e), n - 1));
392
501
  }
@@ -395,34 +504,43 @@ function x(e, n, r = 0) {
395
504
  l(Math.min(Math.max(0, r), u - 1));
396
505
  }, [r, u]),
397
506
  resetPageSize: t(() => {
398
- s(Math.max(1, n));
507
+ o(Math.max(1, n));
399
508
  let t = Math.max(1, Math.ceil(e.length / Math.max(1, n)));
400
509
  l((e) => Math.min(Math.max(0, e), t - 1));
401
- }, [n, e.length])
510
+ }, [n, e.length]),
511
+ resetPagination: t(() => {
512
+ o(Math.max(1, n));
513
+ let t = Math.max(1, Math.ceil(e.length / Math.max(1, n)));
514
+ l(Math.min(Math.max(0, r), t - 1));
515
+ }, [
516
+ n,
517
+ r,
518
+ e.length
519
+ ])
402
520
  };
403
521
  }
404
522
  //#endregion
405
523
  //#region src/utils/sortUtils.ts
406
- function S(e, t, n = {}) {
407
- let { sortUndefined: r, desc: i = !1 } = n, a = k(e, t, r, i);
524
+ function D(e, t, n = {}) {
525
+ let { sortUndefined: r, desc: i = !1 } = n, a = P(e, t, r, i);
408
526
  if (a !== null) return a;
409
527
  let o = !!e;
410
528
  return o === !!t ? 0 : o ? 1 : -1;
411
529
  }
412
- function C(e, t, n = {}) {
413
- let { sortUndefined: r, desc: i = !1 } = n, a = k(e, t, r, i);
530
+ function O(e, t, n = {}) {
531
+ let { sortUndefined: r, desc: i = !1 } = n, a = P(e, t, r, i);
414
532
  if (a !== null) return a;
415
- let o = e === "" || e === null ? NaN : Number(e), s = t === "" || t === null ? NaN : Number(t), c = Number.isNaN(o), l = Number.isNaN(s);
416
- return c || l ? k(c ? void 0 : o, l ? void 0 : s, r, i) ?? 0 : o - s;
533
+ let o = Number(e), s = Number(t), c = Number.isNaN(o), l = Number.isNaN(s);
534
+ return c || l ? P(c ? void 0 : o, l ? void 0 : s, r, i) ?? 0 : o - s;
417
535
  }
418
- function w(e, t, n = {}) {
419
- let { desc: r = !1, sortUndefined: i, caseSensitive: a = !1 } = n, o = k(e, t, i, r);
536
+ function k(e, t, n = {}) {
537
+ let { desc: r = !1, sortUndefined: i, caseSensitive: a = !1 } = n, o = P(e, t, i, r);
420
538
  if (o !== null) return o;
421
539
  let s = String(e), c = String(t);
422
540
  return s.localeCompare(c, void 0, { sensitivity: a ? "variant" : "base" });
423
541
  }
424
- function T(e, t, n = {}) {
425
- let { desc: r = !1, sortUndefined: i, caseSensitive: a = !1 } = n, o = k(e, t, i, r);
542
+ function A(e, t, n = {}) {
543
+ let { desc: r = !1, sortUndefined: i, caseSensitive: a = !1 } = n, o = P(e, t, i, r);
426
544
  if (o !== null) return o;
427
545
  let s = String(e), c = String(t);
428
546
  return s.localeCompare(c, void 0, {
@@ -430,116 +548,122 @@ function T(e, t, n = {}) {
430
548
  sensitivity: a ? "variant" : "base"
431
549
  });
432
550
  }
433
- function E(e, t, n = {}) {
434
- let { desc: r = !1, sortUndefined: i } = n, a = k(e, t, i, r);
551
+ function j(e, t, n = {}) {
552
+ let { desc: r = !1, sortUndefined: i } = n, a = P(e, t, i, r);
435
553
  if (a !== null) return a;
436
- let o = new Date(e).getTime(), s = new Date(t).getTime();
437
- return (Number.isNaN(o) ? 0 : o) - (Number.isNaN(s) ? 0 : s);
554
+ let o = new Date(e).getTime(), s = new Date(t).getTime(), c = Number.isNaN(o), l = Number.isNaN(s);
555
+ return (c || l) && (a = P(c ? void 0 : o, l ? void 0 : s, i, r), a !== null) ? a : o - s;
438
556
  }
439
- function D(e, t, n = {}) {
440
- let { desc: r = !1, sortUndefined: i } = n, a = k(e, t, i, r);
557
+ function M(e, t, n = {}) {
558
+ let { desc: r = !1, sortUndefined: i } = n, a = P(e, t, i, r);
441
559
  return a === null ? e < t ? -1 : +(e > t) : a;
442
560
  }
443
- function O(e, t, n = {}) {
444
- let { desc: r = !1, sortUndefined: i, compare: a } = n, o = k(e, t, i, r);
561
+ function N(e, t, n = {}) {
562
+ let { desc: r = !1, sortUndefined: i, compare: a } = n, o = P(e, t, i, r);
445
563
  return o === null ? typeof a == "function" ? a(e, t) : e < t ? -1 : +(e > t) : o;
446
564
  }
447
- function k(e, t, n = !1, r) {
448
- let i = e ?? void 0, a = t ?? void 0;
449
- if (i !== void 0 && a !== void 0) return null;
450
- if (i === void 0 && a === void 0 || n === !1) return 0;
451
- if (n === "first") return i === void 0 ? -1 : 1;
452
- if (n === "last") return i === void 0 ? 1 : -1;
565
+ function P(e, t, n = "last", r) {
566
+ let i = e == null || e === "", a = t == null || t === "";
567
+ if (i && a) return 0;
568
+ if (!i && !a) return null;
569
+ if (n === "first") return i ? -1 : 1;
570
+ if (n === "last") return i ? 1 : -1;
453
571
  if (n === -1) {
454
572
  let e = r ? 1 : -1;
455
- return i === void 0 ? e : -e;
573
+ return i ? e : -e;
456
574
  }
457
575
  if (n === 1) {
458
576
  let e = r ? 1 : -1;
459
- return i === void 0 ? -e : e;
577
+ return i ? -e : e;
460
578
  }
461
579
  return null;
462
580
  }
463
581
  //#endregion
464
582
  //#region src/hooks/useSort.ts
465
- function A(e, n = []) {
466
- let [r, a] = o(n);
467
- return {
468
- sortedItems: i(() => e.toSorted((e, t) => {
469
- for (let n of r) {
470
- let { type: r, field: i, id: a, desc: o = !1, invertSorting: s = !1 } = n, c = h(e, i, a), l = h(t, i, a), u;
471
- switch (r) {
583
+ function F(e, n = []) {
584
+ let [r, i] = s(n), o = a(() => {
585
+ let t = r.map((e) => ({
586
+ ...e,
587
+ pathArray: (e.field || e.id).split(".")
588
+ }));
589
+ return [...e].sort((e, n) => {
590
+ for (let r of t) {
591
+ let { type: t, id: i, desc: a = !1, invertSorting: o = !1, pathArray: s } = r, c = y(e, s, i), l = y(n, s, i), u;
592
+ switch (t) {
472
593
  case "numeric":
473
- u = C(c, l, n);
594
+ u = O(c, l, r);
474
595
  break;
475
596
  case "alphabetical":
476
- u = w(c, l, n);
597
+ u = k(c, l, r);
477
598
  break;
478
599
  case "alphanumeric":
479
- u = T(c, l, n);
600
+ u = A(c, l, r);
480
601
  break;
481
602
  case "boolean":
482
- u = S(c, l, n);
603
+ u = D(c, l, r);
483
604
  break;
484
605
  case "date":
485
- u = E(c, l, n);
606
+ u = j(c, l, r);
486
607
  break;
487
608
  case "basic":
488
- u = D(c, l, n);
609
+ u = M(c, l, r);
489
610
  break;
490
611
  case "custom":
491
- u = O(c, l, n);
612
+ u = N(c, l, r);
492
613
  break;
493
- default: u = D(c, l, n);
614
+ default: u = M(c, l, r);
494
615
  }
495
- if (u !== 0) return u * (o === s ? 1 : -1);
616
+ if (u !== 0) return u * (a === o ? 1 : -1);
496
617
  }
497
618
  return 0;
498
- }), [r, e]),
619
+ });
620
+ }, [r, e]), c = t((e) => i((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]), []), l = t((e) => {
621
+ i((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
622
+ }, []), u = t(() => i([]), []), d = t(() => i(n), [n]), f = t((e) => i(e), []), p = t((e, t, n) => {
623
+ let { multi: r = !1, ...a } = n || {};
624
+ i((n) => {
625
+ let i = n.find((t) => t.id === e);
626
+ if (!i) {
627
+ let i = {
628
+ id: e,
629
+ type: t,
630
+ ...a,
631
+ desc: !1
632
+ };
633
+ return r ? [...n, i] : [i];
634
+ }
635
+ if (!i.desc) {
636
+ let t = {
637
+ ...i,
638
+ ...a,
639
+ desc: !0
640
+ };
641
+ return r ? n.map((n) => n.id === e ? t : n) : [t];
642
+ }
643
+ if (i.disableSortRemoval || a.disableSortRemoval) {
644
+ let t = {
645
+ ...i,
646
+ ...a,
647
+ desc: !1
648
+ };
649
+ return r ? n.map((n) => n.id === e ? t : n) : [t];
650
+ }
651
+ return r ? n.filter((t) => t.id !== e) : [];
652
+ });
653
+ }, []);
654
+ return {
655
+ sortedItems: o,
499
656
  sorts: r,
500
- addSort: t((e) => a((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]), []),
501
- removeSort: t((e) => {
502
- a((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
503
- }, []),
504
- clearSorts: t(() => a([]), []),
505
- resetSorts: t(() => a(n), [n]),
506
- setSorts: t((e) => a(e), []),
657
+ upsertSorts: c,
658
+ removeSort: l,
659
+ clearSorts: u,
660
+ resetSorts: d,
661
+ replaceSorts: f,
507
662
  getSortDirection: t((e) => {
508
663
  let t = r.find((t) => t.id === e);
509
664
  return t ? t.desc ? "desc" : "asc" : void 0;
510
665
  }, [r]),
511
- toggleSort: t((e, t, n) => {
512
- let { multi: r = !1, ...i } = n || {};
513
- a((n) => {
514
- let a = n.find((t) => t.id === e);
515
- if (!a) {
516
- let a = {
517
- id: e,
518
- type: t,
519
- ...i,
520
- desc: !1
521
- };
522
- return r ? [...n, a] : [a];
523
- }
524
- if (!a.desc) {
525
- let t = {
526
- ...a,
527
- ...i,
528
- desc: !0
529
- };
530
- return r ? n.map((n) => n.id === e ? t : n) : [t];
531
- }
532
- if (a.disableSortRemoval || i.disableSortRemoval) {
533
- let t = {
534
- ...a,
535
- ...i,
536
- desc: !1
537
- };
538
- return r ? n.map((n) => n.id === e ? t : n) : [t];
539
- }
540
- return r ? n.filter((t) => t.id !== e) : [];
541
- });
542
- }, []),
666
+ toggleSort: p,
543
667
  getNextSortingOrder: t((e) => {
544
668
  let t = r.find((t) => t.id === e);
545
669
  return t ? t.desc ? t.disableSortRemoval ? "asc" : "none" : "desc" : "asc";
@@ -552,8 +676,8 @@ function A(e, n = []) {
552
676
  }
553
677
  //#endregion
554
678
  //#region src/hooks/useThrottle.ts
555
- function j(e, n, i = {}) {
556
- let [s, c] = o(!1), l = i.leading ?? !0, u = i.trailing ?? !0, d = a(e), f = a(null), p = a(-1), m = a(null);
679
+ function I(e, n, i = {}) {
680
+ let [a, c] = s(!1), l = i.leading ?? !0, u = i.trailing ?? !0, d = o(e), f = o(null), p = o(-1), m = o(null);
557
681
  r(() => {
558
682
  d.current = e;
559
683
  }, [e]);
@@ -582,8 +706,8 @@ function j(e, n, i = {}) {
582
706
  ]),
583
707
  cancel: h,
584
708
  flush: g,
585
- isPending: s
709
+ isPending: a
586
710
  };
587
711
  }
588
712
  //#endregion
589
- export { d as ModalLayout, f as useDebounce, p as useDebouncedValue, g as useFilter, v as useFuzzySearch, b as useKey, u as useModal, x as usePagination, A as useSort, j as useThrottle };
713
+ export { h as ModalLayout, g as useDebounce, _ as useDebouncedValue, b as useFilter, S as useFuzzySearch, w as useKey, m as useModal, p as useModalActions, f as useModalState, T as useOrder, E as usePagination, F as useSort, I as useThrottle };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@himanshu-sorathiya/react-kit",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "An opinionated collection of react hooks, and reusable UI components.",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",