@zentauri-ui/zentauri-components 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -10
- package/cli/registry.json +12 -0
- package/dist/charts/area.js +9 -10
- package/dist/charts/area.js.map +1 -1
- package/dist/charts/area.mjs +2 -3
- package/dist/charts/area.mjs.map +1 -1
- package/dist/charts/bar.js +10 -95
- package/dist/charts/bar.js.map +1 -1
- package/dist/charts/bar.mjs +2 -95
- package/dist/charts/bar.mjs.map +1 -1
- package/dist/charts/bubble.js +8 -9
- package/dist/charts/bubble.js.map +1 -1
- package/dist/charts/bubble.mjs +2 -3
- package/dist/charts/bubble.mjs.map +1 -1
- package/dist/charts/funnel/Funnel.d.ts +6 -0
- package/dist/charts/funnel/Funnel.d.ts.map +1 -0
- package/dist/charts/funnel/index.d.ts +4 -0
- package/dist/charts/funnel/index.d.ts.map +1 -0
- package/dist/charts/funnel.js +102 -0
- package/dist/charts/funnel.js.map +1 -0
- package/dist/charts/funnel.mjs +89 -0
- package/dist/charts/funnel.mjs.map +1 -0
- package/dist/charts/line.js +8 -9
- package/dist/charts/line.js.map +1 -1
- package/dist/charts/line.mjs +2 -3
- package/dist/charts/line.mjs.map +1 -1
- package/dist/charts/pie/Pie.d.ts +1 -1
- package/dist/charts/pie/Pie.d.ts.map +1 -1
- package/dist/charts/pie.js +19 -6
- package/dist/charts/pie.js.map +1 -1
- package/dist/charts/pie.mjs +17 -4
- package/dist/charts/pie.mjs.map +1 -1
- package/dist/charts/radar/Radar.d.ts +6 -0
- package/dist/charts/radar/Radar.d.ts.map +1 -0
- package/dist/charts/radar/index.d.ts +4 -0
- package/dist/charts/radar/index.d.ts.map +1 -0
- package/dist/charts/radar.js +94 -0
- package/dist/charts/radar.js.map +1 -0
- package/dist/charts/radar.mjs +81 -0
- package/dist/charts/radar.mjs.map +1 -0
- package/dist/charts/scatter/Scatter.d.ts +6 -0
- package/dist/charts/scatter/Scatter.d.ts.map +1 -0
- package/dist/charts/scatter/index.d.ts +4 -0
- package/dist/charts/scatter/index.d.ts.map +1 -0
- package/dist/charts/scatter.js +116 -0
- package/dist/charts/scatter.js.map +1 -0
- package/dist/charts/scatter.mjs +103 -0
- package/dist/charts/scatter.mjs.map +1 -0
- package/dist/charts/shared/chart-frame.d.ts +2 -1
- package/dist/charts/shared/chart-frame.d.ts.map +1 -1
- package/dist/charts/shared/types.d.ts +22 -2
- package/dist/charts/shared/types.d.ts.map +1 -1
- package/dist/charts/stacked-bar/StackedBar.d.ts +6 -0
- package/dist/charts/stacked-bar/StackedBar.d.ts.map +1 -0
- package/dist/charts/stacked-bar/index.d.ts +4 -0
- package/dist/charts/stacked-bar/index.d.ts.map +1 -0
- package/dist/charts/stacked-bar.js +29 -0
- package/dist/charts/stacked-bar.js.map +1 -0
- package/dist/charts/stacked-bar.mjs +15 -0
- package/dist/charts/stacked-bar.mjs.map +1 -0
- package/dist/chunk-7TGUGTTQ.mjs +147 -0
- package/dist/chunk-7TGUGTTQ.mjs.map +1 -0
- package/dist/chunk-CQMV7BB6.js +50 -0
- package/dist/chunk-CQMV7BB6.js.map +1 -0
- package/dist/chunk-DN7TYUJ6.js +119 -0
- package/dist/chunk-DN7TYUJ6.js.map +1 -0
- package/dist/chunk-F3V4POW3.mjs +8 -0
- package/dist/chunk-F3V4POW3.mjs.map +1 -0
- package/dist/{chunk-G2WARVAM.mjs → chunk-HZIRD3SR.mjs} +35 -15
- package/dist/chunk-HZIRD3SR.mjs.map +1 -0
- package/dist/{chunk-G66SXATZ.js → chunk-IL4LH2XX.js} +50 -4
- package/dist/chunk-IL4LH2XX.js.map +1 -0
- package/dist/chunk-LREMK2XR.js +97 -0
- package/dist/chunk-LREMK2XR.js.map +1 -0
- package/dist/chunk-O2KM3ETC.mjs +95 -0
- package/dist/chunk-O2KM3ETC.mjs.map +1 -0
- package/dist/chunk-ODBG4Y6R.mjs +48 -0
- package/dist/chunk-ODBG4Y6R.mjs.map +1 -0
- package/dist/{chunk-ZIFMIS7D.mjs → chunk-OL3BJSRC.mjs} +51 -5
- package/dist/chunk-OL3BJSRC.mjs.map +1 -0
- package/dist/{chunk-QNUDODDX.js → chunk-PWPMKXEG.js} +36 -14
- package/dist/chunk-PWPMKXEG.js.map +1 -0
- package/dist/chunk-RKX5MERK.js +150 -0
- package/dist/chunk-RKX5MERK.js.map +1 -0
- package/dist/chunk-VYI3GS2C.mjs +115 -0
- package/dist/chunk-VYI3GS2C.mjs.map +1 -0
- package/dist/chunk-XRM7GOIE.js +10 -0
- package/dist/chunk-XRM7GOIE.js.map +1 -0
- package/dist/design-system/copy-button.d.ts +43 -0
- package/dist/design-system/copy-button.d.ts.map +1 -0
- package/dist/design-system/index.d.ts +2 -0
- package/dist/design-system/index.d.ts.map +1 -1
- package/dist/design-system/kbd.d.ts +44 -0
- package/dist/design-system/kbd.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useClipboard.js +6 -44
- package/dist/hooks/useClipboard.js.map +1 -1
- package/dist/hooks/useClipboard.mjs +1 -46
- package/dist/hooks/useClipboard.mjs.map +1 -1
- package/dist/hooks/useIsomorphicLayoutEffect.js +6 -4
- package/dist/hooks/useIsomorphicLayoutEffect.js.map +1 -1
- package/dist/hooks/useIsomorphicLayoutEffect.mjs +1 -6
- package/dist/hooks/useIsomorphicLayoutEffect.mjs.map +1 -1
- package/dist/hooks/useTableFilter/index.d.ts +3 -0
- package/dist/hooks/useTableFilter/index.d.ts.map +1 -0
- package/dist/hooks/useTableFilter/types.d.ts +20 -0
- package/dist/hooks/useTableFilter/types.d.ts.map +1 -0
- package/dist/hooks/useTableFilter/useTableFilter.d.ts +3 -0
- package/dist/hooks/useTableFilter/useTableFilter.d.ts.map +1 -0
- package/dist/hooks/useTableFilter.js +124 -0
- package/dist/hooks/useTableFilter.js.map +1 -0
- package/dist/hooks/useTableFilter.mjs +122 -0
- package/dist/hooks/useTableFilter.mjs.map +1 -0
- package/dist/hooks/useTableSort/index.d.ts +3 -0
- package/dist/hooks/useTableSort/index.d.ts.map +1 -0
- package/dist/hooks/useTableSort/types.d.ts +15 -0
- package/dist/hooks/useTableSort/types.d.ts.map +1 -0
- package/dist/hooks/useTableSort/useTableSort.d.ts +3 -0
- package/dist/hooks/useTableSort/useTableSort.d.ts.map +1 -0
- package/dist/hooks/useTableSort.js +99 -0
- package/dist/hooks/useTableSort.js.map +1 -0
- package/dist/hooks/useTableSort.mjs +97 -0
- package/dist/hooks/useTableSort.mjs.map +1 -0
- package/dist/ui/copy-button/animated/animations.d.ts +3 -0
- package/dist/ui/copy-button/animated/animations.d.ts.map +1 -0
- package/dist/ui/copy-button/animated/copy-button-animated.d.ts +6 -0
- package/dist/ui/copy-button/animated/copy-button-animated.d.ts.map +1 -0
- package/dist/ui/copy-button/animated/index.d.ts +4 -0
- package/dist/ui/copy-button/animated/index.d.ts.map +1 -0
- package/dist/ui/copy-button/animated/types.d.ts +26 -0
- package/dist/ui/copy-button/animated/types.d.ts.map +1 -0
- package/dist/ui/copy-button/animated.js +59 -0
- package/dist/ui/copy-button/animated.js.map +1 -0
- package/dist/ui/copy-button/animated.mjs +56 -0
- package/dist/ui/copy-button/animated.mjs.map +1 -0
- package/dist/ui/copy-button/copy-button-base.d.ts +6 -0
- package/dist/ui/copy-button/copy-button-base.d.ts.map +1 -0
- package/dist/ui/copy-button/copy-button.d.ts +6 -0
- package/dist/ui/copy-button/copy-button.d.ts.map +1 -0
- package/dist/ui/copy-button/index.d.ts +4 -0
- package/dist/ui/copy-button/index.d.ts.map +1 -0
- package/dist/ui/copy-button/types.d.ts +32 -0
- package/dist/ui/copy-button/types.d.ts.map +1 -0
- package/dist/ui/copy-button/variants.d.ts +6 -0
- package/dist/ui/copy-button/variants.d.ts.map +1 -0
- package/dist/ui/copy-button.js +20 -0
- package/dist/ui/copy-button.js.map +1 -0
- package/dist/ui/copy-button.mjs +15 -0
- package/dist/ui/copy-button.mjs.map +1 -0
- package/dist/ui/kbd/animated/animations.d.ts +3 -0
- package/dist/ui/kbd/animated/animations.d.ts.map +1 -0
- package/dist/ui/kbd/animated/index.d.ts +4 -0
- package/dist/ui/kbd/animated/index.d.ts.map +1 -0
- package/dist/ui/kbd/animated/kbd-animated.d.ts +6 -0
- package/dist/ui/kbd/animated/kbd-animated.d.ts.map +1 -0
- package/dist/ui/kbd/animated/types.d.ts +10 -0
- package/dist/ui/kbd/animated/types.d.ts.map +1 -0
- package/dist/ui/kbd/animated.js +42 -0
- package/dist/ui/kbd/animated.js.map +1 -0
- package/dist/ui/kbd/animated.mjs +39 -0
- package/dist/ui/kbd/animated.mjs.map +1 -0
- package/dist/ui/kbd/index.d.ts +4 -0
- package/dist/ui/kbd/index.d.ts.map +1 -0
- package/dist/ui/kbd/kbd-base.d.ts +6 -0
- package/dist/ui/kbd/kbd-base.d.ts.map +1 -0
- package/dist/ui/kbd/kbd.d.ts +6 -0
- package/dist/ui/kbd/kbd.d.ts.map +1 -0
- package/dist/ui/kbd/types.d.ts +17 -0
- package/dist/ui/kbd/types.d.ts.map +1 -0
- package/dist/ui/kbd/variants.d.ts +8 -0
- package/dist/ui/kbd/variants.d.ts.map +1 -0
- package/dist/ui/kbd.js +23 -0
- package/dist/ui/kbd.js.map +1 -0
- package/dist/ui/kbd.mjs +14 -0
- package/dist/ui/kbd.mjs.map +1 -0
- package/dist/ui/marquee/marquee.d.ts.map +1 -1
- package/dist/ui/marquee.js +82 -21
- package/dist/ui/marquee.js.map +1 -1
- package/dist/ui/marquee.mjs +83 -22
- package/dist/ui/marquee.mjs.map +1 -1
- package/dist/ui/table/animated.js +8 -8
- package/dist/ui/table/animated.mjs +2 -2
- package/dist/ui/table/index.d.ts +1 -1
- package/dist/ui/table/index.d.ts.map +1 -1
- package/dist/ui/table/table-base.d.ts +2 -2
- package/dist/ui/table/table-base.d.ts.map +1 -1
- package/dist/ui/table/types.d.ts +9 -1
- package/dist/ui/table/types.d.ts.map +1 -1
- package/dist/ui/table.js +14 -14
- package/dist/ui/table.mjs +1 -1
- package/package.json +1 -1
- package/src/charts/charts.test.tsx +80 -0
- package/src/charts/funnel/Funnel.tsx +105 -0
- package/src/charts/funnel/index.ts +14 -0
- package/src/charts/pie/Pie.tsx +28 -1
- package/src/charts/radar/Radar.tsx +84 -0
- package/src/charts/radar/index.ts +16 -0
- package/src/charts/scatter/Scatter.tsx +104 -0
- package/src/charts/scatter/index.ts +16 -0
- package/src/charts/shared/chart-frame.tsx +4 -2
- package/src/charts/shared/types.ts +42 -2
- package/src/charts/stacked-bar/StackedBar.tsx +12 -0
- package/src/charts/stacked-bar/index.ts +16 -0
- package/src/design-system/copy-button.ts +81 -0
- package/src/design-system/index.ts +2 -0
- package/src/design-system/kbd.ts +83 -0
- package/src/hooks/index.ts +12 -0
- package/src/hooks/useTableFilter/index.ts +7 -0
- package/src/hooks/useTableFilter/types.ts +28 -0
- package/src/hooks/useTableFilter/useTableFilter.test.ts +141 -0
- package/src/hooks/useTableFilter/useTableFilter.ts +153 -0
- package/src/hooks/useTableSort/index.ts +5 -0
- package/src/hooks/useTableSort/types.ts +23 -0
- package/src/hooks/useTableSort/useTableSort.test.ts +150 -0
- package/src/hooks/useTableSort/useTableSort.ts +121 -0
- package/src/ui/copy-button/animated/animations.ts +22 -0
- package/src/ui/copy-button/animated/copy-button-animated.tsx +39 -0
- package/src/ui/copy-button/animated/index.ts +10 -0
- package/src/ui/copy-button/animated/types.ts +21 -0
- package/src/ui/copy-button/copy-button-base.tsx +88 -0
- package/src/ui/copy-button/copy-button.test.tsx +82 -0
- package/src/ui/copy-button/copy-button.tsx +9 -0
- package/src/ui/copy-button/index.ts +10 -0
- package/src/ui/copy-button/types.ts +37 -0
- package/src/ui/copy-button/variants.ts +29 -0
- package/src/ui/divider/divider.test.tsx +55 -0
- package/src/ui/empty-state/empty-state.test.tsx +88 -0
- package/src/ui/kbd/animated/animations.ts +15 -0
- package/src/ui/kbd/animated/index.ts +9 -0
- package/src/ui/kbd/animated/kbd-animated.tsx +26 -0
- package/src/ui/kbd/animated/types.ts +16 -0
- package/src/ui/kbd/index.ts +5 -0
- package/src/ui/kbd/kbd-base.tsx +50 -0
- package/src/ui/kbd/kbd.test.tsx +48 -0
- package/src/ui/kbd/kbd.tsx +9 -0
- package/src/ui/kbd/types.ts +21 -0
- package/src/ui/kbd/variants.ts +31 -0
- package/src/ui/marquee/marquee.test.tsx +45 -4
- package/src/ui/marquee/marquee.tsx +100 -18
- package/src/ui/skeleton/skeleton.test.tsx +85 -0
- package/src/ui/table/index.ts +3 -0
- package/src/ui/table/table-base.tsx +69 -4
- package/src/ui/table/table.test.tsx +207 -0
- package/src/ui/table/types.ts +13 -1
- package/dist/chunk-G2WARVAM.mjs.map +0 -1
- package/dist/chunk-G66SXATZ.js.map +0 -1
- package/dist/chunk-OULU7OC4.mjs +0 -21
- package/dist/chunk-OULU7OC4.mjs.map +0 -1
- package/dist/chunk-QNUDODDX.js.map +0 -1
- package/dist/chunk-Z6S36PDD.js +0 -24
- package/dist/chunk-Z6S36PDD.js.map +0 -1
- package/dist/chunk-ZIFMIS7D.mjs.map +0 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare const zuiKbdBase: readonly ["inline-flex items-center justify-center gap-1 align-middle", "rounded-[var(--zui-kbd-radius,0.375rem)] font-mono font-medium leading-none select-none"];
|
|
2
|
+
export declare const zuiKbdKeyAppearances: {
|
|
3
|
+
readonly default: "bg-[var(--zui-kbd-default-bg,#0f172a)] dark:bg-[var(--zui-kbd-default-bg-dark,#f8fafc)] text-[color:var(--zui-kbd-default-fg,#f8fafc)] dark:text-[color:var(--zui-kbd-default-fg-dark,#020617)] shadow-[var(--zui-kbd-default-shadow,0_1px_2px_#0f172a14)] dark:shadow-[var(--zui-kbd-default-shadow-dark,0_1px_2px_#0f172a1f)]";
|
|
4
|
+
readonly secondary: "bg-[var(--zui-kbd-secondary-bg,#e2e8f0)] dark:bg-[var(--zui-kbd-secondary-bg-dark,#1e293b)] text-[color:var(--zui-kbd-secondary-fg,#0f172a)] dark:text-[color:var(--zui-kbd-secondary-fg-dark,#f8fafc)]";
|
|
5
|
+
readonly destructive: "bg-[var(--zui-kbd-destructive-bg,#f43f5e)] dark:bg-[var(--zui-kbd-destructive-bg-dark,#be123c)] text-[color:var(--zui-kbd-destructive-fg,#ffffff)] dark:text-[color:var(--zui-kbd-destructive-fg-dark,#ffffff)]";
|
|
6
|
+
readonly outline: "border border-[color:var(--zui-kbd-outline-border,#0000001a)] dark:border-[color:var(--zui-kbd-outline-border-dark,#ffffff1a)] bg-[var(--zui-kbd-outline-bg,#0000000d)] dark:bg-[var(--zui-kbd-outline-bg-dark,#ffffff0d)] text-[color:var(--zui-kbd-outline-fg,#0f172a)] dark:text-[color:var(--zui-kbd-outline-fg-dark,#f8fafc)]";
|
|
7
|
+
readonly ghost: "bg-transparent text-[color:var(--zui-kbd-ghost-fg,#334155)] dark:text-[color:var(--zui-kbd-ghost-fg-dark,#e2e8f0)]";
|
|
8
|
+
readonly glass: "border border-[color:var(--zui-kbd-glass-border,#00000026)] dark:border-[color:var(--zui-kbd-glass-border-dark,#ffffff26)] bg-[var(--zui-kbd-glass-bg,#0000001a)] dark:bg-[var(--zui-kbd-glass-bg-dark,#ffffff1a)] text-[color:var(--zui-kbd-glass-fg,#0f172a)] dark:text-[color:var(--zui-kbd-glass-fg-dark,#ffffff)] backdrop-blur-md";
|
|
9
|
+
readonly emerald: "bg-[var(--zui-kbd-emerald-bg,#10b981)] dark:bg-[var(--zui-kbd-emerald-bg-dark,#065f46)] text-[color:var(--zui-kbd-emerald-fg,#ffffff)] dark:text-[color:var(--zui-kbd-emerald-fg-dark,#ffffff)]";
|
|
10
|
+
readonly indigo: "bg-[var(--zui-kbd-indigo-bg,#3730a3)] dark:bg-[var(--zui-kbd-indigo-bg-dark,#4f46e5)] text-[color:var(--zui-kbd-indigo-fg,#ffffff)] dark:text-[color:var(--zui-kbd-indigo-fg-dark,#ffffff)]";
|
|
11
|
+
readonly purple: "bg-[var(--zui-kbd-purple-bg,#6b21a8)] dark:bg-[var(--zui-kbd-purple-bg-dark,#9333ea)] text-[color:var(--zui-kbd-purple-fg,#ffffff)] dark:text-[color:var(--zui-kbd-purple-fg-dark,#ffffff)]";
|
|
12
|
+
readonly pink: "bg-[var(--zui-kbd-pink-bg,#9d174d)] dark:bg-[var(--zui-kbd-pink-bg-dark,#db2777)] text-[color:var(--zui-kbd-pink-fg,#ffffff)] dark:text-[color:var(--zui-kbd-pink-fg-dark,#ffffff)]";
|
|
13
|
+
readonly rose: "bg-[var(--zui-kbd-rose-bg,#9f1239)] dark:bg-[var(--zui-kbd-rose-bg-dark,#e11d48)] text-[color:var(--zui-kbd-rose-fg,#ffffff)] dark:text-[color:var(--zui-kbd-rose-fg-dark,#ffffff)]";
|
|
14
|
+
readonly sky: "bg-[var(--zui-kbd-sky-bg,#0ea5e9)] dark:bg-[var(--zui-kbd-sky-bg-dark,#0369a1)] text-[color:var(--zui-kbd-sky-fg,#ffffff)] dark:text-[color:var(--zui-kbd-sky-fg-dark,#ffffff)]";
|
|
15
|
+
readonly teal: "bg-[var(--zui-kbd-teal-bg,#14b8a6)] dark:bg-[var(--zui-kbd-teal-bg-dark,#0f766e)] text-[color:var(--zui-kbd-teal-fg,#ffffff)] dark:text-[color:var(--zui-kbd-teal-fg-dark,#ffffff)]";
|
|
16
|
+
readonly yellow: "bg-[var(--zui-kbd-yellow-bg,#eab308)] dark:bg-[var(--zui-kbd-yellow-bg-dark,#854d0e)] text-[color:var(--zui-kbd-yellow-fg,#ffffff)] dark:text-[color:var(--zui-kbd-yellow-fg-dark,#ffffff)]";
|
|
17
|
+
readonly orange: "bg-[var(--zui-kbd-orange-bg,#f97316)] dark:bg-[var(--zui-kbd-orange-bg-dark,#9a3412)] text-[color:var(--zui-kbd-orange-fg,#ffffff)] dark:text-[color:var(--zui-kbd-orange-fg-dark,#ffffff)]";
|
|
18
|
+
readonly gray: "bg-[var(--zui-kbd-gray-bg,#6b7280)] dark:bg-[var(--zui-kbd-gray-bg-dark,#374151)] text-[color:var(--zui-kbd-gray-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gray-fg-dark,#ffffff)]";
|
|
19
|
+
readonly amber: "bg-[var(--zui-kbd-amber-bg,#f59e0b)] dark:bg-[var(--zui-kbd-amber-bg-dark,#92400e)] text-[color:var(--zui-kbd-amber-fg,#ffffff)] dark:text-[color:var(--zui-kbd-amber-fg-dark,#ffffff)]";
|
|
20
|
+
readonly violet: "bg-[var(--zui-kbd-violet-bg,#5b21b6)] dark:bg-[var(--zui-kbd-violet-bg-dark,#7c3aed)] text-[color:var(--zui-kbd-violet-fg,#ffffff)] dark:text-[color:var(--zui-kbd-violet-fg-dark,#ffffff)]";
|
|
21
|
+
readonly "gradient-blue": "bg-linear-to-r from-[var(--zui-kbd-gradient-blue-from,#1e40af)] dark:from-[var(--zui-kbd-gradient-blue-from-dark,#2563eb)] to-[var(--zui-kbd-gradient-blue-to,#6b21a8)] dark:to-[var(--zui-kbd-gradient-blue-to-dark,#9333ea)] text-[color:var(--zui-kbd-gradient-blue-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-blue-fg-dark,#ffffff)]";
|
|
22
|
+
readonly "gradient-green": "bg-linear-to-r from-[var(--zui-kbd-gradient-green-from,#166534)] dark:from-[var(--zui-kbd-gradient-green-from-dark,#16a34a)] to-[var(--zui-kbd-gradient-green-to,#3f6212)] dark:to-[var(--zui-kbd-gradient-green-to-dark,#65a30d)] text-[color:var(--zui-kbd-gradient-green-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-green-fg-dark,#ffffff)]";
|
|
23
|
+
readonly "gradient-red": "bg-linear-to-r from-[var(--zui-kbd-gradient-red-from,#991b1b)] dark:from-[var(--zui-kbd-gradient-red-from-dark,#dc2626)] to-[var(--zui-kbd-gradient-red-to,#9d174d)] dark:to-[var(--zui-kbd-gradient-red-to-dark,#db2777)] text-[color:var(--zui-kbd-gradient-red-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-red-fg-dark,#ffffff)]";
|
|
24
|
+
readonly "gradient-yellow": "bg-linear-to-r from-[var(--zui-kbd-gradient-yellow-from,#854d0e)] dark:from-[var(--zui-kbd-gradient-yellow-from-dark,#ca8a04)] to-[var(--zui-kbd-gradient-yellow-to,#9a3412)] dark:to-[var(--zui-kbd-gradient-yellow-to-dark,#ea580c)] text-[color:var(--zui-kbd-gradient-yellow-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-yellow-fg-dark,#ffffff)]";
|
|
25
|
+
readonly "gradient-purple": "bg-linear-to-r from-[var(--zui-kbd-gradient-purple-from,#6b21a8)] dark:from-[var(--zui-kbd-gradient-purple-from-dark,#9333ea)] to-[var(--zui-kbd-gradient-purple-to,#9d174d)] dark:to-[var(--zui-kbd-gradient-purple-to-dark,#db2777)] text-[color:var(--zui-kbd-gradient-purple-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-purple-fg-dark,#ffffff)]";
|
|
26
|
+
readonly "gradient-teal": "bg-linear-to-r from-[var(--zui-kbd-gradient-teal-from,#115e59)] dark:from-[var(--zui-kbd-gradient-teal-from-dark,#0d9488)] to-[var(--zui-kbd-gradient-teal-to,#155e75)] dark:to-[var(--zui-kbd-gradient-teal-to-dark,#0891b2)] text-[color:var(--zui-kbd-gradient-teal-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-teal-fg-dark,#ffffff)]";
|
|
27
|
+
readonly "gradient-indigo": "bg-linear-to-r from-[var(--zui-kbd-gradient-indigo-from,#3730a3)] dark:from-[var(--zui-kbd-gradient-indigo-from-dark,#4f46e5)] to-[var(--zui-kbd-gradient-indigo-to,#6b21a8)] dark:to-[var(--zui-kbd-gradient-indigo-to-dark,#9333ea)] text-[color:var(--zui-kbd-gradient-indigo-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-indigo-fg-dark,#ffffff)]";
|
|
28
|
+
readonly "gradient-pink": "bg-linear-to-r from-[var(--zui-kbd-gradient-pink-from,#9d174d)] dark:from-[var(--zui-kbd-gradient-pink-from-dark,#db2777)] to-[var(--zui-kbd-gradient-pink-to,#9f1239)] dark:to-[var(--zui-kbd-gradient-pink-to-dark,#e11d48)] text-[color:var(--zui-kbd-gradient-pink-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-pink-fg-dark,#ffffff)]";
|
|
29
|
+
readonly "gradient-orange": "bg-linear-to-r from-[var(--zui-kbd-gradient-orange-from,#9a3412)] dark:from-[var(--zui-kbd-gradient-orange-from-dark,#ea580c)] to-[var(--zui-kbd-gradient-orange-to,#991b1b)] dark:to-[var(--zui-kbd-gradient-orange-to-dark,#dc2626)] text-[color:var(--zui-kbd-gradient-orange-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-orange-fg-dark,#ffffff)]";
|
|
30
|
+
};
|
|
31
|
+
export type ZuiKbdAppearance = keyof typeof zuiKbdKeyAppearances;
|
|
32
|
+
export declare const zuiKbdKeyBase: readonly ["inline-flex items-center justify-center font-mono font-medium leading-none", "rounded-[var(--zui-kbd-radius,0.375rem)]", "shadow-[var(--zui-kbd-shadow,inset_0_-1px_0_#0000001f)] dark:shadow-[var(--zui-kbd-shadow-dark,inset_0_-1px_0_#0000004d)]"];
|
|
33
|
+
export declare const zuiKbdKeySizes: {
|
|
34
|
+
readonly sm: "h-5 min-w-5 px-1 text-[0.7rem]";
|
|
35
|
+
readonly md: "h-6 min-w-6 px-1.5 text-xs";
|
|
36
|
+
readonly lg: "h-7 min-w-7 px-2 text-sm";
|
|
37
|
+
};
|
|
38
|
+
export type ZuiKbdSize = keyof typeof zuiKbdKeySizes;
|
|
39
|
+
export declare const zuiKbdSeparatorSizes: {
|
|
40
|
+
readonly sm: "text-[0.7rem]";
|
|
41
|
+
readonly md: "text-xs";
|
|
42
|
+
readonly lg: "text-sm";
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=kbd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../src/design-system/kbd.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,oKAGb,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDvB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,oBAAoB,CAAC;AAEjE,eAAO,MAAM,aAAa,kQAIhB,CAAC;AAEX,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,cAAc,CAAC;AAErD,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC"}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export { usePrefersColorScheme, type ColorSchemePreference, } from "./usePrefers
|
|
|
21
21
|
export { usePrefersReducedMotion } from "./usePrefersReducedMotion";
|
|
22
22
|
export { useResizeObserver, type ElementSize } from "./useResizeObserver";
|
|
23
23
|
export { useSessionStorage, type UseSessionStorageResult, } from "./useSessionStorage";
|
|
24
|
+
export { useTableFilter, type TableFilterPredicate, type TableFilterState, type UseTableFilterParams, type UseTableFilterResult, } from "./useTableFilter";
|
|
25
|
+
export { useTableSort, type UseTableSortParams, type UseTableSortResult, } from "./useTableSort";
|
|
24
26
|
export { useThrottledCallback } from "./useThrottledCallback";
|
|
25
27
|
export { useToggle } from "./useToggle";
|
|
26
28
|
export { useWindowSize, type WindowSize } from "./useWindowSize";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,KAAK,0BAA0B,GAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,uBAAuB,EACvB,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,KAAK,0BAA0B,GAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,uBAAuB,EACvB,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,51 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkCQMV7BB6_js = require('../chunk-CQMV7BB6.js');
|
|
5
5
|
|
|
6
|
-
// src/hooks/useClipboard/useClipboard.ts
|
|
7
|
-
function useClipboard(resetDelay = 2e3) {
|
|
8
|
-
const [copied, setCopied] = react.useState(false);
|
|
9
|
-
const [error, setError] = react.useState(void 0);
|
|
10
|
-
const timeoutRef = react.useRef(
|
|
11
|
-
void 0
|
|
12
|
-
);
|
|
13
|
-
const reset = react.useCallback(() => {
|
|
14
|
-
if (timeoutRef.current) {
|
|
15
|
-
clearTimeout(timeoutRef.current);
|
|
16
|
-
timeoutRef.current = void 0;
|
|
17
|
-
}
|
|
18
|
-
setCopied(false);
|
|
19
|
-
setError(void 0);
|
|
20
|
-
}, []);
|
|
21
|
-
const copy = react.useCallback(
|
|
22
|
-
async (text) => {
|
|
23
|
-
reset();
|
|
24
|
-
if (typeof navigator === "undefined" || !navigator.clipboard?.writeText) {
|
|
25
|
-
const err = new Error("Clipboard API is not available");
|
|
26
|
-
setError(err);
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
await navigator.clipboard.writeText(text);
|
|
31
|
-
setCopied(true);
|
|
32
|
-
if (resetDelay > 0) {
|
|
33
|
-
timeoutRef.current = setTimeout(() => {
|
|
34
|
-
setCopied(false);
|
|
35
|
-
}, resetDelay);
|
|
36
|
-
}
|
|
37
|
-
return true;
|
|
38
|
-
} catch (cause) {
|
|
39
|
-
const err = cause instanceof Error ? cause : new Error(String(cause));
|
|
40
|
-
setError(err);
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
[reset, resetDelay]
|
|
45
|
-
);
|
|
46
|
-
return { copied, error, copy, reset };
|
|
47
|
-
}
|
|
48
6
|
|
|
49
|
-
|
|
7
|
+
|
|
8
|
+
Object.defineProperty(exports, "useClipboard", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return chunkCQMV7BB6_js.useClipboard; }
|
|
11
|
+
});
|
|
50
12
|
//# sourceMappingURL=useClipboard.js.map
|
|
51
13
|
//# sourceMappingURL=useClipboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"useClipboard.js"}
|
|
@@ -1,49 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// src/hooks/useClipboard/useClipboard.ts
|
|
5
|
-
function useClipboard(resetDelay = 2e3) {
|
|
6
|
-
const [copied, setCopied] = useState(false);
|
|
7
|
-
const [error, setError] = useState(void 0);
|
|
8
|
-
const timeoutRef = useRef(
|
|
9
|
-
void 0
|
|
10
|
-
);
|
|
11
|
-
const reset = useCallback(() => {
|
|
12
|
-
if (timeoutRef.current) {
|
|
13
|
-
clearTimeout(timeoutRef.current);
|
|
14
|
-
timeoutRef.current = void 0;
|
|
15
|
-
}
|
|
16
|
-
setCopied(false);
|
|
17
|
-
setError(void 0);
|
|
18
|
-
}, []);
|
|
19
|
-
const copy = useCallback(
|
|
20
|
-
async (text) => {
|
|
21
|
-
reset();
|
|
22
|
-
if (typeof navigator === "undefined" || !navigator.clipboard?.writeText) {
|
|
23
|
-
const err = new Error("Clipboard API is not available");
|
|
24
|
-
setError(err);
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
await navigator.clipboard.writeText(text);
|
|
29
|
-
setCopied(true);
|
|
30
|
-
if (resetDelay > 0) {
|
|
31
|
-
timeoutRef.current = setTimeout(() => {
|
|
32
|
-
setCopied(false);
|
|
33
|
-
}, resetDelay);
|
|
34
|
-
}
|
|
35
|
-
return true;
|
|
36
|
-
} catch (cause) {
|
|
37
|
-
const err = cause instanceof Error ? cause : new Error(String(cause));
|
|
38
|
-
setError(err);
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
[reset, resetDelay]
|
|
43
|
-
);
|
|
44
|
-
return { copied, error, copy, reset };
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export { useClipboard };
|
|
2
|
+
export { useClipboard } from '../chunk-ODBG4Y6R.mjs';
|
|
48
3
|
//# sourceMappingURL=useClipboard.mjs.map
|
|
49
4
|
//# sourceMappingURL=useClipboard.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"useClipboard.mjs"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkXRM7GOIE_js = require('../chunk-XRM7GOIE.js');
|
|
5
5
|
|
|
6
|
-
// src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts
|
|
7
|
-
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? react.useLayoutEffect : react.useEffect;
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
|
|
8
|
+
Object.defineProperty(exports, "useIsomorphicLayoutEffect", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return chunkXRM7GOIE_js.useIsomorphicLayoutEffect; }
|
|
11
|
+
});
|
|
10
12
|
//# sourceMappingURL=useIsomorphicLayoutEffect.js.map
|
|
11
13
|
//# sourceMappingURL=useIsomorphicLayoutEffect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"useIsomorphicLayoutEffect.js"}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts
|
|
5
|
-
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
|
|
6
|
-
|
|
7
|
-
export { useIsomorphicLayoutEffect };
|
|
2
|
+
export { useIsomorphicLayoutEffect } from '../chunk-F3V4POW3.mjs';
|
|
8
3
|
//# sourceMappingURL=useIsomorphicLayoutEffect.mjs.map
|
|
9
4
|
//# sourceMappingURL=useIsomorphicLayoutEffect.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"useIsomorphicLayoutEffect.mjs"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTableFilter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type TableFilterState<TKey extends string = string> = Partial<Record<TKey, string>>;
|
|
2
|
+
export type TableFilterPredicate<TData, TKey extends string = string> = (row: TData, filterValue: string, filterKey: TKey) => boolean;
|
|
3
|
+
export type UseTableFilterParams<TData, TKey extends string = string> = {
|
|
4
|
+
data: readonly TData[];
|
|
5
|
+
filters?: TableFilterState<TKey>;
|
|
6
|
+
defaultFilters?: TableFilterState<TKey>;
|
|
7
|
+
onFiltersChange?: (filters: TableFilterState<TKey>) => void;
|
|
8
|
+
getColumnValue?: (row: TData, filterKey: TKey) => unknown;
|
|
9
|
+
filterPredicate?: TableFilterPredicate<TData, TKey>;
|
|
10
|
+
};
|
|
11
|
+
export type UseTableFilterResult<TData, TKey extends string = string> = {
|
|
12
|
+
filters: TableFilterState<TKey>;
|
|
13
|
+
filteredData: TData[];
|
|
14
|
+
hasActiveFilters: boolean;
|
|
15
|
+
setFilter: (filterKey: TKey, value: string) => void;
|
|
16
|
+
setFilters: (filters: TableFilterState<TKey>) => void;
|
|
17
|
+
clearFilter: (filterKey: TKey) => void;
|
|
18
|
+
clearFilters: () => void;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTableFilter/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,OAAO,CAClE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,CACtE,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,IAAI,KACZ,OAAO,CAAC;AAEb,MAAM,MAAM,oBAAoB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI;IACtE,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5D,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,KAAK,OAAO,CAAC;IAC1D,eAAe,CAAC,EAAE,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI;IACtE,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,CAAC,SAAS,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { UseTableFilterParams, UseTableFilterResult } from "./types";
|
|
2
|
+
export declare function useTableFilter<TData, TKey extends string = string>({ data, filters, defaultFilters, onFiltersChange, getColumnValue, filterPredicate, }: UseTableFilterParams<TData, TKey>): UseTableFilterResult<TData, TKey>;
|
|
3
|
+
//# sourceMappingURL=useTableFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableFilter.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTableFilter/useTableFilter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AA2BjB,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE,EAClE,IAAI,EACJ,OAAO,EACP,cAAmB,EACnB,eAAe,EACf,cAAmC,EACnC,eAAe,GAChB,EAAE,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CA8GvE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
|
|
6
|
+
// src/hooks/useTableFilter/useTableFilter.ts
|
|
7
|
+
function normalizeFilters(filters) {
|
|
8
|
+
if (!filters || typeof filters !== "object") {
|
|
9
|
+
return {};
|
|
10
|
+
}
|
|
11
|
+
return Object.fromEntries(
|
|
12
|
+
Object.entries(filters).filter(
|
|
13
|
+
(entry) => typeof entry[1] === "string" && entry[1].trim().length > 0
|
|
14
|
+
)
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
function defaultColumnValue(row, filterKey) {
|
|
18
|
+
if (row && typeof row === "object" && filterKey in row) {
|
|
19
|
+
return row[filterKey];
|
|
20
|
+
}
|
|
21
|
+
return void 0;
|
|
22
|
+
}
|
|
23
|
+
function useTableFilter({
|
|
24
|
+
data,
|
|
25
|
+
filters,
|
|
26
|
+
defaultFilters = {},
|
|
27
|
+
onFiltersChange,
|
|
28
|
+
getColumnValue = defaultColumnValue,
|
|
29
|
+
filterPredicate
|
|
30
|
+
}) {
|
|
31
|
+
const [internalFilters, setInternalFilters] = react.useState(() => normalizeFilters(defaultFilters));
|
|
32
|
+
const isControlled = filters !== void 0;
|
|
33
|
+
const currentFilters = react.useMemo(
|
|
34
|
+
() => normalizeFilters(isControlled ? filters : internalFilters),
|
|
35
|
+
[filters, internalFilters, isControlled]
|
|
36
|
+
);
|
|
37
|
+
const setFilters = react.useCallback(
|
|
38
|
+
(nextFilters) => {
|
|
39
|
+
const normalized = normalizeFilters(nextFilters);
|
|
40
|
+
if (!isControlled) {
|
|
41
|
+
setInternalFilters(normalized);
|
|
42
|
+
}
|
|
43
|
+
onFiltersChange?.(normalized);
|
|
44
|
+
},
|
|
45
|
+
[isControlled, onFiltersChange]
|
|
46
|
+
);
|
|
47
|
+
const updateFilters = react.useCallback(
|
|
48
|
+
(updater) => {
|
|
49
|
+
if (isControlled) {
|
|
50
|
+
const normalized = normalizeFilters(updater(currentFilters));
|
|
51
|
+
onFiltersChange?.(normalized);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
setInternalFilters((previousFilters) => {
|
|
55
|
+
const normalized = normalizeFilters(updater(previousFilters));
|
|
56
|
+
onFiltersChange?.(normalized);
|
|
57
|
+
return normalized;
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
[currentFilters, isControlled, onFiltersChange]
|
|
61
|
+
);
|
|
62
|
+
const setFilter = react.useCallback(
|
|
63
|
+
(filterKey, value) => {
|
|
64
|
+
updateFilters((previousFilters) => ({
|
|
65
|
+
...previousFilters,
|
|
66
|
+
[filterKey]: value
|
|
67
|
+
}));
|
|
68
|
+
},
|
|
69
|
+
[updateFilters]
|
|
70
|
+
);
|
|
71
|
+
const clearFilter = react.useCallback(
|
|
72
|
+
(filterKey) => {
|
|
73
|
+
updateFilters((previousFilters) => {
|
|
74
|
+
const nextFilters = { ...previousFilters };
|
|
75
|
+
delete nextFilters[filterKey];
|
|
76
|
+
return nextFilters;
|
|
77
|
+
});
|
|
78
|
+
},
|
|
79
|
+
[updateFilters]
|
|
80
|
+
);
|
|
81
|
+
const clearFilters = react.useCallback(() => {
|
|
82
|
+
setFilters({});
|
|
83
|
+
}, [setFilters]);
|
|
84
|
+
const activeFilters = react.useMemo(
|
|
85
|
+
() => Object.entries(currentFilters).map(
|
|
86
|
+
([filterKey, filterValue]) => ({
|
|
87
|
+
filterKey,
|
|
88
|
+
filterValue,
|
|
89
|
+
lowerFilterValue: filterValue.toLowerCase()
|
|
90
|
+
})
|
|
91
|
+
),
|
|
92
|
+
[currentFilters]
|
|
93
|
+
);
|
|
94
|
+
const filteredData = react.useMemo(() => {
|
|
95
|
+
if (activeFilters.length === 0) {
|
|
96
|
+
return [...data];
|
|
97
|
+
}
|
|
98
|
+
return data.filter(
|
|
99
|
+
(row) => activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {
|
|
100
|
+
if (filterPredicate) {
|
|
101
|
+
return filterPredicate(row, filterValue, filterKey);
|
|
102
|
+
}
|
|
103
|
+
const columnValue = getColumnValue(row, filterKey);
|
|
104
|
+
if (columnValue == null) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return String(columnValue).toLowerCase().includes(lowerFilterValue);
|
|
108
|
+
})
|
|
109
|
+
);
|
|
110
|
+
}, [activeFilters, data, filterPredicate, getColumnValue]);
|
|
111
|
+
return {
|
|
112
|
+
filters: currentFilters,
|
|
113
|
+
filteredData,
|
|
114
|
+
hasActiveFilters: activeFilters.length > 0,
|
|
115
|
+
setFilter,
|
|
116
|
+
setFilters,
|
|
117
|
+
clearFilter,
|
|
118
|
+
clearFilters
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
exports.useTableFilter = useTableFilter;
|
|
123
|
+
//# sourceMappingURL=useTableFilter.js.map
|
|
124
|
+
//# sourceMappingURL=useTableFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useTableFilter/useTableFilter.ts"],"names":["useState","useMemo","useCallback"],"mappings":";;;;;AAUA,SAAS,iBACP,OAAA,EACwB;AACxB,EAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC3C,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,MAAA;AAAA,MACtB,CAAC,KAAA,KACC,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA,IAAY,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK,CAAE,MAAA,GAAS;AAAA;AAC7D,GACF;AACF;AAEA,SAAS,kBAAA,CACP,KACA,SAAA,EACS;AACT,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,aAAa,GAAA,EAAK;AACtD,IAAA,OAAQ,IAA8B,SAAS,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,cAAA,CAAoD;AAAA,EAClE,IAAA;AAAA,EACA,OAAA;AAAA,EACA,iBAAiB,EAAC;AAAA,EAClB,eAAA;AAAA,EACA,cAAA,GAAiB,kBAAA;AAAA,EACjB;AACF,CAAA,EAAyE;AACvE,EAAA,MAAM,CAAC,iBAAiB,kBAAkB,CAAA,GAAIA,eAE5C,MAAM,gBAAA,CAAiB,cAAc,CAAC,CAAA;AAExC,EAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,EAAA,MAAM,cAAA,GAAiBC,aAAA;AAAA,IACrB,MAAM,gBAAA,CAAiB,YAAA,GAAe,OAAA,GAAU,eAAe,CAAA;AAAA,IAC/D,CAAC,OAAA,EAAS,eAAA,EAAiB,YAAY;AAAA,GACzC;AAEA,EAAA,MAAM,UAAA,GAAaC,iBAAA;AAAA,IACjB,CAAC,WAAA,KAAwC;AACvC,MAAA,MAAM,UAAA,GAAa,iBAAiB,WAAW,CAAA;AAC/C,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,kBAAA,CAAmB,UAAU,CAAA;AAAA,MAC/B;AACA,MAAA,eAAA,GAAkB,UAAU,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,CAAC,cAAc,eAAe;AAAA,GAChC;AAEA,EAAA,MAAM,aAAA,GAAgBA,iBAAA;AAAA,IACpB,CACE,OAAA,KAGG;AACH,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,OAAA,CAAQ,cAAc,CAAC,CAAA;AAC3D,QAAA,eAAA,GAAkB,UAAU,CAAA;AAC5B,QAAA;AAAA,MACF;AAEA,MAAA,kBAAA,CAAmB,CAAC,eAAA,KAAoB;AACtC,QAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,OAAA,CAAQ,eAAe,CAAC,CAAA;AAC5D,QAAA,eAAA,GAAkB,UAAU,CAAA;AAC5B,QAAA,OAAO,UAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,YAAA,EAAc,eAAe;AAAA,GAChD;AAEA,EAAA,MAAM,SAAA,GAAYA,iBAAA;AAAA,IAChB,CAAC,WAAiB,KAAA,KAAkB;AAClC,MAAA,aAAA,CAAc,CAAC,eAAA,MAAqB;AAAA,QAClC,GAAG,eAAA;AAAA,QACH,CAAC,SAAS,GAAG;AAAA,OACf,CAAE,CAAA;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,CAAC,SAAA,KAAoB;AACnB,MAAA,aAAA,CAAc,CAAC,eAAA,KAAoB;AACjC,QAAA,MAAM,WAAA,GAAc,EAAE,GAAG,eAAA,EAAgB;AACzC,QAAA,OAAO,YAAY,SAAS,CAAA;AAC5B,QAAA,OAAO,WAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,YAAA,GAAeA,kBAAY,MAAM;AACrC,IAAA,UAAA,CAAW,EAAE,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,aAAA,GAAgBD,aAAA;AAAA,IACpB,MACG,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,CAAuB,GAAA;AAAA,MACnD,CAAC,CAAC,SAAA,EAAW,WAAW,CAAA,MAAO;AAAA,QAC7B,SAAA;AAAA,QACA,WAAA;AAAA,QACA,gBAAA,EAAkB,YAAY,WAAA;AAAY,OAC5C;AAAA,KACF;AAAA,IACF,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,YAAA,GAAeA,cAAQ,MAAM;AACjC,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,MAAA,OAAO,CAAC,GAAG,IAAI,CAAA;AAAA,IACjB;AAEA,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,MAAO,CAAC,QAClB,aAAA,CAAc,KAAA,CAAM,CAAC,EAAE,SAAA,EAAW,WAAA,EAAa,gBAAA,EAAiB,KAAM;AACpE,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,WAAA,EAAa,SAAS,CAAA;AAAA,QACpD;AAEA,QAAA,MAAM,WAAA,GAAc,cAAA,CAAe,GAAA,EAAK,SAAS,CAAA;AACjD,QAAA,IAAI,eAAe,IAAA,EAAM;AACvB,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,OAAO,OAAO,WAAW,CAAA,CAAE,WAAA,EAAY,CAAE,SAAS,gBAAgB,CAAA;AAAA,MACpE,CAAC;AAAA,KACH;AAAA,EACF,GAAG,CAAC,aAAA,EAAe,IAAA,EAAM,eAAA,EAAiB,cAAc,CAAC,CAAA;AAEzD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,cAAA;AAAA,IACT,YAAA;AAAA,IACA,gBAAA,EAAkB,cAAc,MAAA,GAAS,CAAA;AAAA,IACzC,SAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF","file":"useTableFilter.js","sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type {\n TableFilterState,\n UseTableFilterParams,\n UseTableFilterResult,\n} from \"./types\";\n\nfunction normalizeFilters<TKey extends string>(\n filters: TableFilterState<TKey> | null | undefined,\n): TableFilterState<TKey> {\n if (!filters || typeof filters !== \"object\") {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(filters).filter(\n (entry): entry is [TKey, string] =>\n typeof entry[1] === \"string\" && entry[1].trim().length > 0,\n ),\n ) as TableFilterState<TKey>;\n}\n\nfunction defaultColumnValue<TData, TKey extends string>(\n row: TData,\n filterKey: TKey,\n): unknown {\n if (row && typeof row === \"object\" && filterKey in row) {\n return (row as Record<TKey, unknown>)[filterKey];\n }\n return undefined;\n}\n\nexport function useTableFilter<TData, TKey extends string = string>({\n data,\n filters,\n defaultFilters = {},\n onFiltersChange,\n getColumnValue = defaultColumnValue,\n filterPredicate,\n}: UseTableFilterParams<TData, TKey>): UseTableFilterResult<TData, TKey> {\n const [internalFilters, setInternalFilters] = useState<\n TableFilterState<TKey>\n >(() => normalizeFilters(defaultFilters));\n\n const isControlled = filters !== undefined;\n const currentFilters = useMemo(\n () => normalizeFilters(isControlled ? filters : internalFilters),\n [filters, internalFilters, isControlled],\n );\n\n const setFilters = useCallback(\n (nextFilters: TableFilterState<TKey>) => {\n const normalized = normalizeFilters(nextFilters);\n if (!isControlled) {\n setInternalFilters(normalized);\n }\n onFiltersChange?.(normalized);\n },\n [isControlled, onFiltersChange],\n );\n\n const updateFilters = useCallback(\n (\n updater: (\n previousFilters: TableFilterState<TKey>,\n ) => TableFilterState<TKey>,\n ) => {\n if (isControlled) {\n const normalized = normalizeFilters(updater(currentFilters));\n onFiltersChange?.(normalized);\n return;\n }\n\n setInternalFilters((previousFilters) => {\n const normalized = normalizeFilters(updater(previousFilters));\n onFiltersChange?.(normalized);\n return normalized;\n });\n },\n [currentFilters, isControlled, onFiltersChange],\n );\n\n const setFilter = useCallback(\n (filterKey: TKey, value: string) => {\n updateFilters((previousFilters) => ({\n ...previousFilters,\n [filterKey]: value,\n }));\n },\n [updateFilters],\n );\n\n const clearFilter = useCallback(\n (filterKey: TKey) => {\n updateFilters((previousFilters) => {\n const nextFilters = { ...previousFilters };\n delete nextFilters[filterKey];\n return nextFilters;\n });\n },\n [updateFilters],\n );\n\n const clearFilters = useCallback(() => {\n setFilters({});\n }, [setFilters]);\n\n const activeFilters = useMemo(\n () =>\n (Object.entries(currentFilters) as [TKey, string][]).map(\n ([filterKey, filterValue]) => ({\n filterKey,\n filterValue,\n lowerFilterValue: filterValue.toLowerCase(),\n }),\n ),\n [currentFilters],\n );\n\n const filteredData = useMemo(() => {\n if (activeFilters.length === 0) {\n return [...data];\n }\n\n return data.filter((row) =>\n activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {\n if (filterPredicate) {\n return filterPredicate(row, filterValue, filterKey);\n }\n\n const columnValue = getColumnValue(row, filterKey);\n if (columnValue == null) {\n return false;\n }\n\n return String(columnValue).toLowerCase().includes(lowerFilterValue);\n }),\n );\n }, [activeFilters, data, filterPredicate, getColumnValue]);\n\n return {\n filters: currentFilters,\n filteredData,\n hasActiveFilters: activeFilters.length > 0,\n setFilter,\n setFilters,\n clearFilter,\n clearFilters,\n };\n}\n"]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useMemo, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
// src/hooks/useTableFilter/useTableFilter.ts
|
|
5
|
+
function normalizeFilters(filters) {
|
|
6
|
+
if (!filters || typeof filters !== "object") {
|
|
7
|
+
return {};
|
|
8
|
+
}
|
|
9
|
+
return Object.fromEntries(
|
|
10
|
+
Object.entries(filters).filter(
|
|
11
|
+
(entry) => typeof entry[1] === "string" && entry[1].trim().length > 0
|
|
12
|
+
)
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
function defaultColumnValue(row, filterKey) {
|
|
16
|
+
if (row && typeof row === "object" && filterKey in row) {
|
|
17
|
+
return row[filterKey];
|
|
18
|
+
}
|
|
19
|
+
return void 0;
|
|
20
|
+
}
|
|
21
|
+
function useTableFilter({
|
|
22
|
+
data,
|
|
23
|
+
filters,
|
|
24
|
+
defaultFilters = {},
|
|
25
|
+
onFiltersChange,
|
|
26
|
+
getColumnValue = defaultColumnValue,
|
|
27
|
+
filterPredicate
|
|
28
|
+
}) {
|
|
29
|
+
const [internalFilters, setInternalFilters] = useState(() => normalizeFilters(defaultFilters));
|
|
30
|
+
const isControlled = filters !== void 0;
|
|
31
|
+
const currentFilters = useMemo(
|
|
32
|
+
() => normalizeFilters(isControlled ? filters : internalFilters),
|
|
33
|
+
[filters, internalFilters, isControlled]
|
|
34
|
+
);
|
|
35
|
+
const setFilters = useCallback(
|
|
36
|
+
(nextFilters) => {
|
|
37
|
+
const normalized = normalizeFilters(nextFilters);
|
|
38
|
+
if (!isControlled) {
|
|
39
|
+
setInternalFilters(normalized);
|
|
40
|
+
}
|
|
41
|
+
onFiltersChange?.(normalized);
|
|
42
|
+
},
|
|
43
|
+
[isControlled, onFiltersChange]
|
|
44
|
+
);
|
|
45
|
+
const updateFilters = useCallback(
|
|
46
|
+
(updater) => {
|
|
47
|
+
if (isControlled) {
|
|
48
|
+
const normalized = normalizeFilters(updater(currentFilters));
|
|
49
|
+
onFiltersChange?.(normalized);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
setInternalFilters((previousFilters) => {
|
|
53
|
+
const normalized = normalizeFilters(updater(previousFilters));
|
|
54
|
+
onFiltersChange?.(normalized);
|
|
55
|
+
return normalized;
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
[currentFilters, isControlled, onFiltersChange]
|
|
59
|
+
);
|
|
60
|
+
const setFilter = useCallback(
|
|
61
|
+
(filterKey, value) => {
|
|
62
|
+
updateFilters((previousFilters) => ({
|
|
63
|
+
...previousFilters,
|
|
64
|
+
[filterKey]: value
|
|
65
|
+
}));
|
|
66
|
+
},
|
|
67
|
+
[updateFilters]
|
|
68
|
+
);
|
|
69
|
+
const clearFilter = useCallback(
|
|
70
|
+
(filterKey) => {
|
|
71
|
+
updateFilters((previousFilters) => {
|
|
72
|
+
const nextFilters = { ...previousFilters };
|
|
73
|
+
delete nextFilters[filterKey];
|
|
74
|
+
return nextFilters;
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
[updateFilters]
|
|
78
|
+
);
|
|
79
|
+
const clearFilters = useCallback(() => {
|
|
80
|
+
setFilters({});
|
|
81
|
+
}, [setFilters]);
|
|
82
|
+
const activeFilters = useMemo(
|
|
83
|
+
() => Object.entries(currentFilters).map(
|
|
84
|
+
([filterKey, filterValue]) => ({
|
|
85
|
+
filterKey,
|
|
86
|
+
filterValue,
|
|
87
|
+
lowerFilterValue: filterValue.toLowerCase()
|
|
88
|
+
})
|
|
89
|
+
),
|
|
90
|
+
[currentFilters]
|
|
91
|
+
);
|
|
92
|
+
const filteredData = useMemo(() => {
|
|
93
|
+
if (activeFilters.length === 0) {
|
|
94
|
+
return [...data];
|
|
95
|
+
}
|
|
96
|
+
return data.filter(
|
|
97
|
+
(row) => activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {
|
|
98
|
+
if (filterPredicate) {
|
|
99
|
+
return filterPredicate(row, filterValue, filterKey);
|
|
100
|
+
}
|
|
101
|
+
const columnValue = getColumnValue(row, filterKey);
|
|
102
|
+
if (columnValue == null) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
return String(columnValue).toLowerCase().includes(lowerFilterValue);
|
|
106
|
+
})
|
|
107
|
+
);
|
|
108
|
+
}, [activeFilters, data, filterPredicate, getColumnValue]);
|
|
109
|
+
return {
|
|
110
|
+
filters: currentFilters,
|
|
111
|
+
filteredData,
|
|
112
|
+
hasActiveFilters: activeFilters.length > 0,
|
|
113
|
+
setFilter,
|
|
114
|
+
setFilters,
|
|
115
|
+
clearFilter,
|
|
116
|
+
clearFilters
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { useTableFilter };
|
|
121
|
+
//# sourceMappingURL=useTableFilter.mjs.map
|
|
122
|
+
//# sourceMappingURL=useTableFilter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useTableFilter/useTableFilter.ts"],"names":[],"mappings":"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","file":"useTableFilter.mjs","sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type {\n TableFilterState,\n UseTableFilterParams,\n UseTableFilterResult,\n} from \"./types\";\n\nfunction normalizeFilters<TKey extends string>(\n filters: TableFilterState<TKey> | null | undefined,\n): TableFilterState<TKey> {\n if (!filters || typeof filters !== \"object\") {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(filters).filter(\n (entry): entry is [TKey, string] =>\n typeof entry[1] === \"string\" && entry[1].trim().length > 0,\n ),\n ) as TableFilterState<TKey>;\n}\n\nfunction defaultColumnValue<TData, TKey extends string>(\n row: TData,\n filterKey: TKey,\n): unknown {\n if (row && typeof row === \"object\" && filterKey in row) {\n return (row as Record<TKey, unknown>)[filterKey];\n }\n return undefined;\n}\n\nexport function useTableFilter<TData, TKey extends string = string>({\n data,\n filters,\n defaultFilters = {},\n onFiltersChange,\n getColumnValue = defaultColumnValue,\n filterPredicate,\n}: UseTableFilterParams<TData, TKey>): UseTableFilterResult<TData, TKey> {\n const [internalFilters, setInternalFilters] = useState<\n TableFilterState<TKey>\n >(() => normalizeFilters(defaultFilters));\n\n const isControlled = filters !== undefined;\n const currentFilters = useMemo(\n () => normalizeFilters(isControlled ? filters : internalFilters),\n [filters, internalFilters, isControlled],\n );\n\n const setFilters = useCallback(\n (nextFilters: TableFilterState<TKey>) => {\n const normalized = normalizeFilters(nextFilters);\n if (!isControlled) {\n setInternalFilters(normalized);\n }\n onFiltersChange?.(normalized);\n },\n [isControlled, onFiltersChange],\n );\n\n const updateFilters = useCallback(\n (\n updater: (\n previousFilters: TableFilterState<TKey>,\n ) => TableFilterState<TKey>,\n ) => {\n if (isControlled) {\n const normalized = normalizeFilters(updater(currentFilters));\n onFiltersChange?.(normalized);\n return;\n }\n\n setInternalFilters((previousFilters) => {\n const normalized = normalizeFilters(updater(previousFilters));\n onFiltersChange?.(normalized);\n return normalized;\n });\n },\n [currentFilters, isControlled, onFiltersChange],\n );\n\n const setFilter = useCallback(\n (filterKey: TKey, value: string) => {\n updateFilters((previousFilters) => ({\n ...previousFilters,\n [filterKey]: value,\n }));\n },\n [updateFilters],\n );\n\n const clearFilter = useCallback(\n (filterKey: TKey) => {\n updateFilters((previousFilters) => {\n const nextFilters = { ...previousFilters };\n delete nextFilters[filterKey];\n return nextFilters;\n });\n },\n [updateFilters],\n );\n\n const clearFilters = useCallback(() => {\n setFilters({});\n }, [setFilters]);\n\n const activeFilters = useMemo(\n () =>\n (Object.entries(currentFilters) as [TKey, string][]).map(\n ([filterKey, filterValue]) => ({\n filterKey,\n filterValue,\n lowerFilterValue: filterValue.toLowerCase(),\n }),\n ),\n [currentFilters],\n );\n\n const filteredData = useMemo(() => {\n if (activeFilters.length === 0) {\n return [...data];\n }\n\n return data.filter((row) =>\n activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {\n if (filterPredicate) {\n return filterPredicate(row, filterValue, filterKey);\n }\n\n const columnValue = getColumnValue(row, filterKey);\n if (columnValue == null) {\n return false;\n }\n\n return String(columnValue).toLowerCase().includes(lowerFilterValue);\n }),\n );\n }, [activeFilters, data, filterPredicate, getColumnValue]);\n\n return {\n filters: currentFilters,\n filteredData,\n hasActiveFilters: activeFilters.length > 0,\n setFilter,\n setFilters,\n clearFilter,\n clearFilters,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTableSort/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TableHeadCellProps, TableSortDirection, TableSortState } from "../../ui/table/types";
|
|
2
|
+
export type UseTableSortParams<TKey extends string = string> = {
|
|
3
|
+
sortKey?: TKey;
|
|
4
|
+
defaultSortKey?: TKey;
|
|
5
|
+
sortDirection?: TableSortDirection;
|
|
6
|
+
defaultSortDirection?: TableSortDirection;
|
|
7
|
+
onSortChange?: (nextSort: TableSortState<TKey>) => void;
|
|
8
|
+
};
|
|
9
|
+
export type UseTableSortResult<TKey extends string = string> = TableSortState<TKey> & {
|
|
10
|
+
setSort: (nextSort: TableSortState<TKey>) => void;
|
|
11
|
+
clearSort: () => void;
|
|
12
|
+
toggleSort: (sortKey: TKey) => void;
|
|
13
|
+
getSortProps: (sortKey: TKey) => Pick<TableHeadCellProps, "sortKey" | "sortDirection" | "onSortChange">;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTableSort/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,kBAAkB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI;IAC7D,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IACzD,cAAc,CAAC,IAAI,CAAC,GAAG;IACrB,OAAO,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAClD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CACZ,OAAO,EAAE,IAAI,KACV,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,eAAe,GAAG,cAAc,CAAC,CAAC;CAC7E,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { UseTableSortParams, UseTableSortResult } from "./types";
|
|
2
|
+
export declare function useTableSort<TKey extends string = string>({ sortKey, defaultSortKey, sortDirection, defaultSortDirection, onSortChange, }?: UseTableSortParams<TKey>): UseTableSortResult<TKey>;
|
|
3
|
+
//# sourceMappingURL=useTableSort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableSort.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTableSort/useTableSort.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAuBtE,wBAAgB,YAAY,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE,EACzD,OAAO,EACP,cAAc,EACd,aAAa,EACb,oBAA6B,EAC7B,YAAY,GACb,GAAE,kBAAkB,CAAC,IAAI,CAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAsF1D"}
|