@zentauri-ui/zentauri-components 1.8.1 → 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 +21 -10
- package/cli/registry.json +10 -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-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-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-XRM7GOIE.js +10 -0
- package/dist/chunk-XRM7GOIE.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.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/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/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/divider/divider.test.tsx +55 -0
- package/src/ui/empty-state/empty-state.test.tsx +88 -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 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/design-system/table.ts","../src/ui/table/variants.ts","../src/ui/table/table-base.tsx"],"names":[],"mappings":"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","file":"chunk-OL3BJSRC.mjs","sourcesContent":["export const zuiTableBase =\n \"w-full table-auto border-collapse caption-bottom text-sm text-[color:var(--zui-table-fg,oklch(37.2%_0.044_257.287))] dark:text-[color:var(--zui-table-fg-dark,oklch(92.9%_0.013_255.508))] md:table-fixed\";\n\nexport const zuiTableAppearances = {\n default: \"\",\n striped: \"\",\n bordered:\n \"border border-[color:var(--zui-table-bordered-border,#0000001a)] dark:border-[color:var(--zui-table-bordered-border-dark,#ffffff1a)]\",\n ghost: \"\",\n sky: \"border border-[color:var(--zui-table-sky-border,oklch(44.3%_0.11_240.79))] dark:border-[color:var(--zui-table-sky-border-dark,oklch(58.8%_0.158_241.966))]\",\n rose: \"border border-[color:var(--zui-table-rose-border,oklch(45.5%_0.188_13.697))] dark:border-[color:var(--zui-table-rose-border-dark,oklch(58.6%_0.253_17.585))]\",\n purple:\n \"border border-[color:var(--zui-table-purple-border,oklch(43.8%_0.218_303.724))] dark:border-[color:var(--zui-table-purple-border-dark,oklch(55.8%_0.288_302.321))]\",\n pink: \"border border-[color:var(--zui-table-pink-border,oklch(45.9%_0.187_3.815))] dark:border-[color:var(--zui-table-pink-border-dark,oklch(59.2%_0.249_0.584))]\",\n orange:\n \"border border-[color:var(--zui-table-orange-border,oklch(47%_0.157_37.304))] dark:border-[color:var(--zui-table-orange-border-dark,oklch(64.6%_0.222_41.116))]\",\n yellow:\n \"border border-[color:var(--zui-table-yellow-border,oklch(47.6%_0.114_61.907))] dark:border-[color:var(--zui-table-yellow-border-dark,oklch(68.1%_0.162_75.834))]\",\n teal: \"border border-[color:var(--zui-table-teal-border,oklch(43.7%_0.078_188.216))] dark:border-[color:var(--zui-table-teal-border-dark,oklch(60%_0.118_184.704))]\",\n indigo:\n \"border border-[color:var(--zui-table-indigo-border,oklch(39.8%_0.195_277.366))] dark:border-[color:var(--zui-table-indigo-border-dark,oklch(51.1%_0.262_276.966))]\",\n emerald:\n \"border border-[color:var(--zui-table-emerald-border,oklch(43.2%_0.095_166.913))] dark:border-[color:var(--zui-table-emerald-border-dark,oklch(59.6%_0.145_163.225))]\",\n gray: \"border border-[color:var(--zui-table-gray-border,oklch(27.8%_0.033_256.848))] dark:border-[color:var(--zui-table-gray-border-dark,oklch(44.6%_0.03_256.802))]\",\n amber:\n \"border border-[color:var(--zui-table-amber-border,oklch(47.3%_0.137_46.201))] dark:border-[color:var(--zui-table-amber-border-dark,oklch(66.6%_0.179_58.318))]\",\n violet:\n \"border border-[color:var(--zui-table-violet-border,oklch(43.2%_0.232_292.759))] dark:border-[color:var(--zui-table-violet-border-dark,oklch(54.1%_0.281_293.009))]\",\n} as const;\n\nexport const zuiTableSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\nexport const zuiTableStickyHeader = {\n true: \"\",\n false: \"\",\n} as const;\n\nexport const zuiTableRowBase =\n \"border-b border-[color:var(--zui-table-row-border,#0000000d)] dark:border-[color:var(--zui-table-row-border-dark,#ffffff0d)] transition-colors data-[state=selected]:bg-[var(--zui-table-row-bg-selected,#0000000f)] dark:data-[state=selected]:bg-[var(--zui-table-row-bg-selected-dark,#ffffff0f)]\";\n\nexport const zuiTableRowAppearances = {\n default: \"\",\n striped:\n \"odd:bg-[var(--zui-table-row-striped-bg,#00000008)] dark:odd:bg-[var(--zui-table-row-striped-bg-dark,#ffffff08)]\",\n bordered: \"\",\n ghost:\n \"border-[color:var(--zui-table-row-ghost-border,transparent)] dark:border-[color:var(--zui-table-row-ghost-border-dark,transparent)] hover:bg-[var(--zui-table-row-ghost-bg-hover,#00000008)] dark:hover:bg-[var(--zui-table-row-ghost-bg-hover-dark,#ffffff08)]\",\n sky: \"border-[color:var(--zui-table-row-sky-border,oklch(44.3%_0.11_240.79))] dark:border-[color:var(--zui-table-row-sky-border-dark,oklch(58.8%_0.158_241.966))] hover:bg-[var(--zui-table-row-sky-bg-hover,oklch(44.3%_0.11_240.79))] dark:hover:bg-[var(--zui-table-row-sky-bg-hover-dark,oklch(58.8%_0.158_241.966))] hover:text-[color:var(--zui-table-row-sky-fg-hover,oklch(95.1%_0.026_236.824))] dark:hover:text-[color:var(--zui-table-row-sky-fg-hover-dark,oklch(95.1%_0.026_236.824))]\",\n rose: \"border-[color:var(--zui-table-row-rose-border,oklch(45.5%_0.188_13.697))] dark:border-[color:var(--zui-table-row-rose-border-dark,oklch(58.6%_0.253_17.585))] hover:bg-[var(--zui-table-row-rose-bg-hover,oklch(64.5%_0.246_16.439))] dark:hover:bg-[var(--zui-table-row-rose-bg-hover-dark,oklch(41%_0.159_10.272))] hover:text-[color:var(--zui-table-row-rose-fg-hover,oklch(94.1%_0.03_12.58))] dark:hover:text-[color:var(--zui-table-row-rose-fg-hover-dark,oklch(94.1%_0.03_12.58))]\",\n purple:\n \"border-[color:var(--zui-table-row-purple-border,oklch(43.8%_0.218_303.724))] dark:border-[color:var(--zui-table-row-purple-border-dark,oklch(55.8%_0.288_302.321))] hover:bg-[var(--zui-table-row-purple-bg-hover,oklch(62.7%_0.265_303.9))] dark:hover:bg-[var(--zui-table-row-purple-bg-hover-dark,oklch(38.1%_0.176_304.987))] hover:text-[color:var(--zui-table-row-purple-fg-hover,oklch(94.6%_0.033_307.174))] dark:hover:text-[color:var(--zui-table-row-purple-fg-hover-dark,oklch(94.6%_0.033_307.174))]\",\n pink: \"border-[color:var(--zui-table-row-pink-border,oklch(45.9%_0.187_3.815))] dark:border-[color:var(--zui-table-row-pink-border-dark,oklch(59.2%_0.249_0.584))] hover:bg-[var(--zui-table-row-pink-bg-hover,oklch(65.6%_0.241_354.308))] dark:hover:bg-[var(--zui-table-row-pink-bg-hover-dark,oklch(40.8%_0.153_2.432))] hover:text-[color:var(--zui-table-row-pink-fg-hover,oklch(94.8%_0.028_342.258))] dark:hover:text-[color:var(--zui-table-row-pink-fg-hover-dark,oklch(94.8%_0.028_342.258))]\",\n orange:\n \"border-[color:var(--zui-table-row-orange-border,oklch(47%_0.157_37.304))] dark:border-[color:var(--zui-table-row-orange-border-dark,oklch(64.6%_0.222_41.116))] hover:bg-[var(--zui-table-row-orange-bg-hover,oklch(70.5%_0.213_47.604))] dark:hover:bg-[var(--zui-table-row-orange-bg-hover-dark,oklch(40.8%_0.123_38.172))] hover:text-[color:var(--zui-table-row-orange-fg-hover,oklch(95.4%_0.038_75.164))] dark:hover:text-[color:var(--zui-table-row-orange-fg-hover-dark,oklch(95.4%_0.038_75.164))]\",\n yellow:\n \"border-[color:var(--zui-table-row-yellow-border,oklch(47.6%_0.114_61.907))] dark:border-[color:var(--zui-table-row-yellow-border-dark,oklch(68.1%_0.162_75.834))] hover:bg-[var(--zui-table-row-yellow-bg-hover,oklch(79.5%_0.184_86.047))] dark:hover:bg-[var(--zui-table-row-yellow-bg-hover-dark,oklch(42.1%_0.095_57.708))] hover:text-[color:var(--zui-table-row-yellow-fg-hover,oklch(97.3%_0.071_103.193))] dark:hover:text-[color:var(--zui-table-row-yellow-fg-hover-dark,oklch(97.3%_0.071_103.193))]\",\n teal: \"border-[color:var(--zui-table-row-teal-border,oklch(43.7%_0.078_188.216))] dark:border-[color:var(--zui-table-row-teal-border-dark,oklch(60%_0.118_184.704))] hover:bg-[var(--zui-table-row-teal-bg-hover,oklch(70.4%_0.14_182.503))] dark:hover:bg-[var(--zui-table-row-teal-bg-hover-dark,oklch(38.6%_0.063_188.416))] hover:text-[color:var(--zui-table-row-teal-fg-hover,oklch(95.3%_0.051_180.801))] dark:hover:text-[color:var(--zui-table-row-teal-fg-hover-dark,oklch(95.3%_0.051_180.801))]\",\n indigo:\n \"border-[color:var(--zui-table-row-indigo-border,oklch(39.8%_0.195_277.366))] dark:border-[color:var(--zui-table-row-indigo-border-dark,oklch(51.1%_0.262_276.966))] hover:bg-[var(--zui-table-row-indigo-bg-hover,oklch(58.5%_0.233_277.117))] dark:hover:bg-[var(--zui-table-row-indigo-bg-hover-dark,oklch(35.9%_0.144_278.697))] hover:text-[color:var(--zui-table-row-indigo-fg-hover,oklch(93%_0.034_272.788))] dark:hover:text-[color:var(--zui-table-row-indigo-fg-hover-dark,oklch(93%_0.034_272.788))]\",\n emerald:\n \"border-[color:var(--zui-table-row-emerald-border,oklch(43.2%_0.095_166.913))] dark:border-[color:var(--zui-table-row-emerald-border-dark,oklch(59.6%_0.145_163.225))] hover:bg-[var(--zui-table-row-emerald-bg-hover,oklch(69.6%_0.17_162.48))] dark:hover:bg-[var(--zui-table-row-emerald-bg-hover-dark,oklch(37.8%_0.077_168.94))] hover:text-[color:var(--zui-table-row-emerald-fg-hover,oklch(95%_0.052_163.051))] dark:hover:text-[color:var(--zui-table-row-emerald-fg-hover-dark,oklch(95%_0.052_163.051))]\",\n gray: \"border-[color:var(--zui-table-row-gray-border,oklch(27.8%_0.033_256.848))] dark:border-[color:var(--zui-table-row-gray-border-dark,oklch(44.6%_0.03_256.802))] hover:bg-[var(--zui-table-row-gray-bg-hover,oklch(55.1%_0.027_264.364))] dark:hover:bg-[var(--zui-table-row-gray-bg-hover-dark,oklch(21%_0.034_264.665))] hover:text-[color:var(--zui-table-row-gray-fg-hover,oklch(96.7%_0.003_264.542))] dark:hover:text-[color:var(--zui-table-row-gray-fg-hover-dark,oklch(96.7%_0.003_264.542))]\",\n amber:\n \"border-[color:var(--zui-table-row-amber-border,oklch(47.3%_0.137_46.201))] dark:border-[color:var(--zui-table-row-amber-border-dark,oklch(66.6%_0.179_58.318))] hover:bg-[var(--zui-table-row-amber-bg-hover,oklch(76.9%_0.188_70.08))] dark:hover:bg-[var(--zui-table-row-amber-bg-hover-dark,oklch(41.4%_0.112_45.904))] hover:text-[color:var(--zui-table-row-amber-fg-hover,oklch(96.2%_0.059_95.617))] dark:hover:text-[color:var(--zui-table-row-amber-fg-hover-dark,oklch(96.2%_0.059_95.617))]\",\n violet:\n \"border-[color:var(--zui-table-row-violet-border,oklch(43.2%_0.232_292.759))] dark:border-[color:var(--zui-table-row-violet-border-dark,oklch(54.1%_0.281_293.009))] hover:bg-[var(--zui-table-row-violet-bg-hover,oklch(60.6%_0.25_292.717))] dark:hover:bg-[var(--zui-table-row-violet-bg-hover-dark,oklch(38%_0.189_293.745))] hover:text-[color:var(--zui-table-row-violet-fg-hover,oklch(94.3%_0.029_294.588))] dark:hover:text-[color:var(--zui-table-row-violet-fg-hover-dark,oklch(94.3%_0.029_294.588))]\",\n} as const;\n\nexport const zuiTableCellBase = \"min-w-0 border p-3 align-middle break-words\";\n\nexport const zuiTableCellAppearances = {\n default:\n \"border-[color:var(--zui-table-cell-default-border,#0000001a)] dark:border-[color:var(--zui-table-cell-default-border-dark,#ffffff1a)]\",\n striped:\n \"border-[color:var(--zui-table-cell-striped-border,#0000001a)] dark:border-[color:var(--zui-table-cell-striped-border-dark,#ffffff1a)]\",\n bordered:\n \"border-[color:var(--zui-table-cell-bordered-border,#0000001a)] dark:border-[color:var(--zui-table-cell-bordered-border-dark,#ffffff1a)]\",\n ghost:\n \"border-[color:var(--zui-table-cell-ghost-border,#0000001a)] dark:border-[color:var(--zui-table-cell-ghost-border-dark,#ffffff1a)]\",\n sky: \"border-[color:var(--zui-table-cell-sky-border,oklch(44.3%_0.11_240.79))] dark:border-[color:var(--zui-table-cell-sky-border-dark,oklch(58.8%_0.158_241.966))]\",\n rose: \"border-[color:var(--zui-table-cell-rose-border,oklch(45.5%_0.188_13.697))] dark:border-[color:var(--zui-table-cell-rose-border-dark,oklch(58.6%_0.253_17.585))]\",\n purple:\n \"border-[color:var(--zui-table-cell-purple-border,oklch(43.8%_0.218_303.724))] dark:border-[color:var(--zui-table-cell-purple-border-dark,oklch(55.8%_0.288_302.321))]\",\n pink: \"border-[color:var(--zui-table-cell-pink-border,oklch(45.9%_0.187_3.815))] dark:border-[color:var(--zui-table-cell-pink-border-dark,oklch(59.2%_0.249_0.584))]\",\n orange:\n \"border-[color:var(--zui-table-cell-orange-border,oklch(47%_0.157_37.304))] dark:border-[color:var(--zui-table-cell-orange-border-dark,oklch(64.6%_0.222_41.116))]\",\n yellow:\n \"border-[color:var(--zui-table-cell-yellow-border,oklch(47.6%_0.114_61.907))] dark:border-[color:var(--zui-table-cell-yellow-border-dark,oklch(68.1%_0.162_75.834))]\",\n teal: \"border-[color:var(--zui-table-cell-teal-border,oklch(43.7%_0.078_188.216))] dark:border-[color:var(--zui-table-cell-teal-border-dark,oklch(60%_0.118_184.704))]\",\n indigo:\n \"border-[color:var(--zui-table-cell-indigo-border,oklch(39.8%_0.195_277.366))] dark:border-[color:var(--zui-table-cell-indigo-border-dark,oklch(51.1%_0.262_276.966))]\",\n emerald:\n \"border-[color:var(--zui-table-cell-emerald-border,oklch(43.2%_0.095_166.913))] dark:border-[color:var(--zui-table-cell-emerald-border-dark,oklch(59.6%_0.145_163.225))]\",\n gray: \"border-[color:var(--zui-table-cell-gray-border,oklch(27.8%_0.033_256.848))] dark:border-[color:var(--zui-table-cell-gray-border-dark,oklch(44.6%_0.03_256.802))]\",\n amber:\n \"border-[color:var(--zui-table-cell-amber-border,oklch(47.3%_0.137_46.201))] dark:border-[color:var(--zui-table-cell-amber-border-dark,oklch(66.6%_0.179_58.318))]\",\n violet:\n \"border-[color:var(--zui-table-cell-violet-border,oklch(43.2%_0.232_292.759))] dark:border-[color:var(--zui-table-cell-violet-border-dark,oklch(54.1%_0.281_293.009))]\",\n} as const;\n\nexport const zuiTableCellSizes = {\n sm: \"p-2\",\n md: \"p-3\",\n lg: \"p-4\",\n} as const;\n\nexport const zuiTableTextAlignments = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiTableAppearances,\n zuiTableBase,\n zuiTableCellAppearances,\n zuiTableCellBase,\n zuiTableCellSizes,\n zuiTableRowAppearances,\n zuiTableRowBase,\n zuiTableSizes,\n zuiTableStickyHeader,\n zuiTableTextAlignments,\n} from \"../../design-system/table\";\n\nexport const tableVariants = cva(zuiTableBase, {\n variants: {\n appearance: zuiTableAppearances,\n size: zuiTableSizes,\n stickyHeader: zuiTableStickyHeader,\n },\n defaultVariants: {\n appearance: \"default\",\n size: \"md\",\n stickyHeader: false,\n },\n});\n\nexport const tableRowVariants = cva(zuiTableRowBase, {\n variants: {\n appearance: zuiTableRowAppearances,\n },\n defaultVariants: { appearance: \"default\" },\n});\n\nexport const tableCellVariants = cva(zuiTableCellBase, {\n variants: {\n appearance: zuiTableCellAppearances,\n size: zuiTableCellSizes,\n textAlign: zuiTableTextAlignments,\n },\n defaultVariants: { appearance: \"default\", size: \"md\" },\n});\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n type KeyboardEvent,\n} from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type {\n TableCtx,\n TableCellProps,\n TableHeadCellProps,\n TableProps,\n TableSectionProps,\n TableSortDirection,\n} from \"./types\";\nimport { tableCellVariants, tableRowVariants, tableVariants } from \"./variants\";\n\nexport const TableContext = createContext<TableCtx | null>(null);\n\nexport function useTableContext(component: string): TableCtx {\n const ctx = useContext(TableContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <Table>`);\n }\n return ctx;\n}\n\nexport function TableBase(props: TableProps) {\n const {\n className,\n appearance = \"default\",\n size = \"md\",\n textAlign = \"left\",\n stickyHeader = false,\n scrollAreaAriaLabel,\n children,\n ref,\n ...rest\n } = props;\n const ctx = useMemo(\n () => ({\n appearance: appearance ?? \"default\",\n size: size ?? \"md\",\n stickyHeader: Boolean(stickyHeader),\n rowAnimation: \"none\" as const,\n textAlign,\n }),\n [appearance, size, stickyHeader, textAlign],\n );\n\n return (\n <TableContext.Provider value={ctx}>\n <div\n data-slot=\"table-scroll\"\n tabIndex={0}\n role=\"region\"\n aria-label={scrollAreaAriaLabel ?? \"Scrollable table\"}\n className={cn(\n \"relative w-full overflow-auto\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950\",\n )}\n >\n <table\n ref={ref}\n data-slot=\"table\"\n className={cn(\n tableVariants({ appearance, size, stickyHeader }),\n \"w-full min-w-0 table\",\n className,\n )}\n {...rest}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n );\n}\n\nTableBase.displayName = \"Table\";\n\nexport function TableHeader({ className, children }: TableSectionProps) {\n const { stickyHeader } = useTableContext(\"TableHeader\");\n const stickyClass = stickyHeader\n ? \"sticky top-0 z-10 dark:bg-slate-950/95 bg-slate-50/95 backdrop-blur\"\n : \"\";\n return (\n <thead data-slot=\"table-header\" className={cn(stickyClass, className)}>\n {children}\n </thead>\n );\n}\n\nTableHeader.displayName = \"TableHeader\";\n\nexport function TableBody({ className, children }: TableSectionProps) {\n return (\n <tbody data-slot=\"table-body\" className={cn(className)}>\n {children}\n </tbody>\n );\n}\n\nTableBody.displayName = \"TableBody\";\n\nexport function TableFooter({ className, children }: TableSectionProps) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"border-t border-white/10 bg-white/3 font-medium\",\n className,\n )}\n >\n {children}\n </tfoot>\n );\n}\n\nTableFooter.displayName = \"TableFooter\";\n\nexport function TableRow({\n className,\n children,\n ref,\n as: Wrapper = \"tr\",\n rowAnimation: _rowAnimation,\n ...rest\n}: TableSectionProps & { ref?: React.Ref<HTMLTableRowElement> }) {\n const { appearance } = useTableContext(\"TableRow\");\n\n return (\n <Wrapper\n ref={ref}\n data-slot=\"table-row\"\n className={cn(tableRowVariants({ appearance }), className)}\n {...rest}\n >\n {children}\n </Wrapper>\n );\n}\n\nTableRow.displayName = \"TableRow\";\n\nexport function TableHead({\n className,\n children,\n scope = \"col\",\n sortKey,\n sortDirection,\n onSortChange,\n onClick,\n onKeyDown,\n tabIndex,\n ref,\n ...rest\n}: TableHeadCellProps) {\n const { appearance, size, textAlign } = useTableContext(\"TableHead\");\n const isSortable = Boolean(sortKey && onSortChange);\n const sortableDirection: TableSortDirection = sortDirection ?? \"none\";\n\n const handleSort = useCallback(() => {\n if (!sortKey || !onSortChange) {\n return;\n }\n\n const nextDirection: TableSortDirection =\n sortableDirection === \"ascending\"\n ? \"descending\"\n : sortableDirection === \"descending\"\n ? \"none\"\n : \"ascending\";\n\n onSortChange({\n sortKey,\n sortDirection: nextDirection,\n });\n }, [onSortChange, sortKey, sortableDirection]);\n\n const handleClick = useCallback<NonNullable<TableHeadCellProps[\"onClick\"]>>(\n (event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleSort();\n }\n },\n [handleSort, onClick],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLTableCellElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || !isSortable) {\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleSort();\n }\n },\n [handleSort, isSortable, onKeyDown],\n );\n\n return (\n <th\n ref={ref}\n data-slot=\"table-head\"\n scope={scope}\n aria-sort={isSortable ? sortableDirection : sortDirection}\n data-sort-key={sortKey}\n data-sort-direction={sortDirection}\n tabIndex={isSortable ? (tabIndex ?? 0) : tabIndex}\n className={cn(\n tableCellVariants({ appearance, size, textAlign }),\n isSortable &&\n \"cursor-pointer select-none outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950\",\n className,\n )}\n onClick={isSortable ? handleClick : onClick}\n onKeyDown={isSortable ? handleKeyDown : onKeyDown}\n {...rest}\n >\n {children}\n </th>\n );\n}\n\nTableHead.displayName = \"TableHead\";\n\nexport function TableCell({\n className,\n children,\n ref,\n scope,\n ...rest\n}: TableCellProps) {\n const { appearance, size, textAlign } = useTableContext(\"TableCell\");\n const cellClassName = cn(\n tableCellVariants({ appearance, size, textAlign }),\n className,\n );\n\n if (scope !== undefined) {\n return (\n <th\n ref={ref}\n data-slot=\"table-cell\"\n scope={scope}\n className={cellClassName}\n {...rest}\n >\n {children}\n </th>\n );\n }\n\n return (\n <td ref={ref} data-slot=\"table-cell\" className={cellClassName} {...rest}>\n {children}\n </td>\n );\n}\n\nTableCell.displayName = \"TableCell\";\n\nexport function TableCaption({ className, children }: TableSectionProps) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"mt-3 text-left text-xs text-slate-500\", className)}\n >\n {children}\n </caption>\n );\n}\n\nTableCaption.displayName = \"TableCaption\";\n"]}
|
|
@@ -136,6 +136,7 @@ function ChartFrame({
|
|
|
136
136
|
emptyState = null,
|
|
137
137
|
hasData,
|
|
138
138
|
height,
|
|
139
|
+
overlay,
|
|
139
140
|
style,
|
|
140
141
|
...props
|
|
141
142
|
}) {
|
|
@@ -157,23 +158,26 @@ function ChartFrame({
|
|
|
157
158
|
}
|
|
158
159
|
);
|
|
159
160
|
}
|
|
160
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
161
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
161
162
|
"div",
|
|
162
163
|
{
|
|
163
164
|
className: chunkZS5756ZC_js.cn(chartVariants({ appearance, density }), className),
|
|
164
165
|
style: chartStyle,
|
|
165
166
|
...divProps,
|
|
166
|
-
children:
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
167
|
+
children: [
|
|
168
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: measureRef, className: "h-full min-h-0 w-full min-w-0", children: canRenderChart ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
169
|
+
recharts.ResponsiveContainer,
|
|
170
|
+
{
|
|
171
|
+
width: "100%",
|
|
172
|
+
height: "100%",
|
|
173
|
+
minWidth: 0,
|
|
174
|
+
debounce: 80,
|
|
175
|
+
style: containerStyle,
|
|
176
|
+
children
|
|
177
|
+
}
|
|
178
|
+
) : null }),
|
|
179
|
+
overlay
|
|
180
|
+
]
|
|
177
181
|
}
|
|
178
182
|
);
|
|
179
183
|
}
|
|
@@ -207,11 +211,29 @@ function ChartDecorators({
|
|
|
207
211
|
] });
|
|
208
212
|
}
|
|
209
213
|
|
|
214
|
+
// src/charts/shared/colors.ts
|
|
215
|
+
function resolveColor(color, index) {
|
|
216
|
+
if (color && color in chartPalette) {
|
|
217
|
+
return chartPalette[color];
|
|
218
|
+
}
|
|
219
|
+
if (color) {
|
|
220
|
+
return { stroke: color, fill: color };
|
|
221
|
+
}
|
|
222
|
+
const paletteValues = Object.values(chartPalette);
|
|
223
|
+
return paletteValues[index % paletteValues.length] ?? chartPalette.cyan;
|
|
224
|
+
}
|
|
225
|
+
function getSeriesFill(series, index, opacity = 0.18) {
|
|
226
|
+
const color = resolveColor(series.color, index);
|
|
227
|
+
return series.fill ?? `${color.fill}${Math.round(opacity * 255).toString(16).padStart(2, "0")}`;
|
|
228
|
+
}
|
|
229
|
+
|
|
210
230
|
exports.ChartDecorators = ChartDecorators;
|
|
211
231
|
exports.ChartFrame = ChartFrame;
|
|
212
232
|
exports.chartColorValues = chartColorValues;
|
|
213
233
|
exports.chartPalette = chartPalette;
|
|
214
234
|
exports.chartVariants = chartVariants;
|
|
215
235
|
exports.defaultChartMargin = defaultChartMargin;
|
|
216
|
-
|
|
217
|
-
|
|
236
|
+
exports.getSeriesFill = getSeriesFill;
|
|
237
|
+
exports.resolveColor = resolveColor;
|
|
238
|
+
//# sourceMappingURL=chunk-PWPMKXEG.js.map
|
|
239
|
+
//# sourceMappingURL=chunk-PWPMKXEG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/shared/variants.ts","../src/charts/shared/chart-frame.tsx","../src/charts/shared/colors.ts"],"names":["cva","useResizeObserver","jsx","cn","jsxs","ResponsiveContainer","Fragment","CartesianGrid","Tooltip","Legend"],"mappings":";;;;;;;;AAEO,IAAM,aAAA,GAAgBA,0BAAA;AAAA,EAC3B;AAAA,IACE,oDAAA;AAAA,IACA,0DAAA;AAAA,IACA,8HAAA;AAAA,IACA,mFAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,UAAA,EAAY;AAAA,QACV,OAAA,EACE,gFAAA;AAAA,QACF,KAAA,EACE,mFAAA;AAAA,QACF,OAAA,EACE,wGAAA;AAAA,QACF,KAAA,EACE,uHAAA;AAAA,QACF,GAAA,EAAK,+EAAA;AAAA,QACL,OAAA,EACE,uFAAA;AAAA,QACF,MAAA,EACE,qFAAA;AAAA,QACF,KAAA,EACE,mFAAA;AAAA,QACF,IAAA,EAAM,iFAAA;AAAA,QACN,KAAA,EACE,mFAAA;AAAA,QACF,IAAA,EAAM,iFAAA;AAAA,QACN,MAAA,EACE,qFAAA;AAAA,QACF,sBAAA,EACE,4GAAA;AAAA,QACF,yBAAA,EACE,+GAAA;AAAA,QACF,qBAAA,EACE,2GAAA;AAAA,QACF,qBAAA,EACE,2GAAA;AAAA,QACF,wBAAA,EACE,8GAAA;AAAA,QACF,oBAAA,EACE,0GAAA;AAAA,QACF,uBAAA,EACE,6GAAA;AAAA,QACF,qBAAA,EACE;AAAA,OACJ;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,YAAA;AAAA,QACT,WAAA,EAAa,YAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,UAAA,EAAY,SAAA;AAAA,MACZ,OAAA,EAAS;AAAA;AACX;AAEJ;AAEO,IAAM,YAAA,GAAe;AAAA,EAC1B,OAAO,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EAClE,SAAS,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EACpE,OAAO,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EAClE,SAAS,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EACpE,KAAK,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EAChE,MAAM,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EACjE,SAAS,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EACpE,QAAQ,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EACnE,OAAO,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EAClE,MAAM,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EACjE,OAAO,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EAClE,MAAM,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EACjE,OAAO,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EAClE,QAAQ,EAAE,MAAA,EAAQ,WAAW,IAAA,EAAM,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,EACnE,sBAAA,EAAwB;AAAA,IACtB,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW;AAAA;AAEf;AAEO,IAAM,gBAAA,GAAmB,MAAA,CAAO,IAAA,CAAK,YAAY;AC9GxD,IAAM,wBAAA,uBAA+B,GAAA,CAAI;AAAA,EACvC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,eACP,KAAA,EACgC;AAChC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA;AAAA,IACpC,CAAC,CAAC,GAAG,MAAM,CAAC,wBAAA,CAAyB,IAAI,GAAG;AAAA,GAC9C;AACA,EAAA,OAAO,MAAA,CAAO,YAAY,OAAO,CAAA;AACnC;AAcO,IAAM,kBAAA,GAAqB,EAAE,GAAA,EAAK,EAAA,EAAI,OAAO,EAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,CAAA;AAElE,SAAS,UAAA,CAAW;AAAA,EACzB,UAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoB;AAClB,EAAA,MAAM,QAAA,GAAW,eAAe,KAAK,CAAA;AACrC,EAAA,MAAM,CAAC,UAAA,EAAY,IAAI,CAAA,GAAIC,kCAAA,EAAkC;AAC7D,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,gBAAA,EAAkB,GAAG,MAAM,CAAA,EAAA,CAAA;AAAA,IAC3B,GAAG;AAAA,GACL;AACA,EAAA,MAAM,kBAAkB,IAAA,EAAM,KAAA,IAAS,KAAK,CAAA,IAAA,CAAM,IAAA,EAAM,UAAU,CAAA,IAAK,CAAA;AAEvE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,oBAAG,aAAA,CAAc,EAAE,YAAY,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,QAC/D,KAAA,EAAO,UAAA;AAAA,QACN,GAAG,QAAA;AAAA,QAEJ,QAAA,kBAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAA,EACZ,QAAA,EAAA,UAAA,EACH;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACEE,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWD,oBAAG,aAAA,CAAc,EAAE,YAAY,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAC/D,KAAA,EAAO,UAAA;AAAA,MACN,GAAG,QAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,UAAA,EAAY,SAAA,EAAU,iCAC7B,QAAA,EAAA,cAAA,mBACCA,cAAA;AAAA,UAACG,4BAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,MAAA;AAAA,YACN,MAAA,EAAO,MAAA;AAAA,YACP,QAAA,EAAU,CAAA;AAAA,YACV,QAAA,EAAU,EAAA;AAAA,YACV,KAAA,EAAO,cAAA;AAAA,YAEN;AAAA;AAAA,YAED,IAAA,EACN,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,EAMG;AACD,EAAA,uBACED,eAAA,CAAAE,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,QAAA,mBACCJ,cAAA;AAAA,MAACK,sBAAA;AAAA,MAAA;AAAA,QACC,eAAA,EAAgB,KAAA;AAAA,QAChB,MAAA,EAAO,cAAA;AAAA,QACP,OAAA,EAAS;AAAA;AAAA,KACX,GACE,IAAA;AAAA,IACH,IAAA;AAAA,IACA,WAAA,mBACCL,cAAA;AAAA,MAACM,gBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,QACxB,YAAA,EAAc,EAAE,KAAA,EAAO,YAAA,EAAa;AAAA,QACpC,UAAA,EAAY,EAAE,KAAA,EAAO,YAAA,EAAa;AAAA,QAClC,SAAA,EAAW,EAAE,KAAA,EAAO,YAAA;AAAa;AAAA,KACnC,GACE,IAAA;AAAA,IACH,UAAA,mBAAaN,cAAA,CAACO,eAAA,EAAA,EAAO,CAAA,GAAK;AAAA,GAAA,EAC7B,CAAA;AAEJ;;;AC1IO,SAAS,YAAA,CACd,OACA,KAAA,EACA;AACA,EAAA,IAAI,KAAA,IAAS,SAAS,YAAA,EAAc;AAClC,IAAA,OAAO,aAAa,KAAmB,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AAAA,EACtC;AAEA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAChD,EAAA,OAAO,aAAA,CAAc,KAAA,GAAQ,aAAA,CAAc,MAAM,KAAK,YAAA,CAAa,IAAA;AACrE;AAEO,SAAS,aAAA,CACd,MAAA,EACA,KAAA,EACA,OAAA,GAAU,IAAA,EACV;AACA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,KAAK,CAAA;AAC9C,EAAA,OACE,OAAO,IAAA,IACP,CAAA,EAAG,KAAA,CAAM,IAAI,GAAG,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,GAAG,EACrC,QAAA,CAAS,EAAE,EACX,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAEvB","file":"chunk-PWPMKXEG.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const chartVariants = cva(\n [\n \"relative w-full min-w-0 overflow-hidden rounded-xl\",\n \"h-[var(--chart-height)] min-h-64 sm:min-h-72 md:min-h-80\",\n \"[&_.recharts-default-tooltip]:rounded-lg [&_.recharts-default-tooltip]:border [&_.recharts-default-tooltip]:border-slate-200\",\n \"[&_.recharts-default-tooltip]:bg-white/95 [&_.recharts-default-tooltip]:shadow-lg\",\n \"[&_.recharts-default-tooltip]:text-slate-900\",\n ],\n {\n variants: {\n appearance: {\n default:\n \"bg-white text-slate-600 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n muted:\n \"bg-slate-50 text-slate-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n outline:\n \"border border-slate-200 bg-white text-slate-600 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n glass:\n \"border border-white/15 bg-white/10 text-slate-100 backdrop-blur-md [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n sky: \"bg-sky-50 text-sky-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n emerald:\n \"bg-emerald-50 text-emerald-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n violet:\n \"bg-violet-50 text-violet-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n amber:\n \"bg-amber-50 text-amber-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n rose: \"bg-rose-50 text-rose-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n slate:\n \"bg-slate-50 text-slate-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n gray: \"bg-gray-50 text-gray-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n indigo:\n \"bg-indigo-50 text-indigo-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n \"gradient-cyan-violet\":\n \"bg-gradient-to-r from-cyan-500 to-violet-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-emerald-violet\":\n \"bg-gradient-to-r from-emerald-500 to-violet-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-amber-rose\":\n \"bg-gradient-to-r from-amber-500 to-rose-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-slate-gray\":\n \"bg-gradient-to-r from-slate-500 to-gray-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-indigo-purple\":\n \"bg-gradient-to-r from-indigo-500 to-purple-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-cyan-blue\":\n \"bg-gradient-to-r from-cyan-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-emerald-blue\":\n \"bg-gradient-to-r from-emerald-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-amber-blue\":\n \"bg-gradient-to-r from-amber-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n },\n density: {\n compact: \"p-2 sm:p-3\",\n comfortable: \"p-3 sm:p-4\",\n spacious: \"p-4 sm:p-5 md:p-6\",\n },\n },\n defaultVariants: {\n appearance: \"default\",\n density: \"comfortable\",\n },\n },\n);\n\nexport const chartPalette = {\n glass: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n outline: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n muted: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n default: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n sky: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n cyan: { stroke: \"#0891b2\", fill: \"#67e8f9\", textColor: \"#0891b2\" },\n emerald: { stroke: \"#059669\", fill: \"#6ee7b7\", textColor: \"#059669\" },\n violet: { stroke: \"#7c3aed\", fill: \"#c4b5fd\", textColor: \"#7c3aed\" },\n amber: { stroke: \"#d97706\", fill: \"#fcd34d\", textColor: \"#d97706\" },\n rose: { stroke: \"#e11d48\", fill: \"#fda4af\", textColor: \"#e11d48\" },\n slate: { stroke: \"#475569\", fill: \"#cbd5e1\", textColor: \"#475569\" },\n gray: { stroke: \"#6b7280\", fill: \"#d1d5db\", textColor: \"#6b7280\" },\n white: { stroke: \"#ffffff\", fill: \"#ffffff\", textColor: \"#ffffff\" },\n indigo: { stroke: \"#6366f1\", fill: \"#c7d2fe\", textColor: \"#6366f1\" },\n \"gradient-cyan-violet\": {\n stroke: \"#0891b2\",\n fill: \"#67e8f9\",\n textColor: \"#0891b2\",\n },\n \"gradient-emerald-violet\": {\n stroke: \"#059669\",\n fill: \"#6ee7b7\",\n textColor: \"#059669\",\n },\n \"gradient-amber-rose\": {\n stroke: \"#d97706\",\n fill: \"#fcd34d\",\n textColor: \"#d97706\",\n },\n \"gradient-slate-gray\": {\n stroke: \"#475569\",\n fill: \"#cbd5e1\",\n textColor: \"#475569\",\n },\n \"gradient-indigo-purple\": {\n stroke: \"#6366f1\",\n fill: \"#c7d2fe\",\n textColor: \"#6366f1\",\n },\n \"gradient-cyan-blue\": {\n stroke: \"#0891b2\",\n fill: \"#67e8f9\",\n textColor: \"#0891b2\",\n },\n \"gradient-emerald-blue\": {\n stroke: \"#059669\",\n fill: \"#6ee7b7\",\n textColor: \"#059669\",\n },\n \"gradient-amber-blue\": {\n stroke: \"#d97706\",\n fill: \"#fcd34d\",\n textColor: \"#d97706\",\n },\n} as const;\n\nexport const chartColorValues = Object.keys(chartPalette) as Array<\n keyof typeof chartPalette\n>;\n","\"use client\";\n\nimport type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { CartesianGrid, Legend, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { useResizeObserver } from \"../../hooks/useResizeObserver/useResizeObserver\";\nimport { cn } from \"../../lib/utils\";\nimport { chartVariants } from \"./variants\";\nimport { VariantProps } from \"class-variance-authority\";\n\n/** Chart-level props that may be forwarded from *Chart `...rest` and must not reach a DOM node. */\nconst CHART_ONLY_DIV_PROP_KEYS = new Set([\n \"data\",\n \"margin\",\n \"series\",\n \"showGrid\",\n \"showLegend\",\n \"showTooltip\",\n \"stacked\",\n \"strokeDasharray\",\n \"syncId\",\n \"tooltipColor\",\n \"xKey\",\n]);\n\nfunction filterDivProps(\n props: HTMLAttributes<HTMLDivElement>,\n): HTMLAttributes<HTMLDivElement> {\n const entries = Object.entries(props).filter(\n ([key]) => !CHART_ONLY_DIV_PROP_KEYS.has(key),\n );\n return Object.fromEntries(entries) as HTMLAttributes<HTMLDivElement>;\n}\n\ntype ChartFrameProps = HTMLAttributes<HTMLDivElement> & {\n appearance?: VariantProps<typeof chartVariants>[\"appearance\"];\n containerStyle?: CSSProperties;\n density?: \"compact\" | \"comfortable\" | \"spacious\" | null;\n emptyState?: ReactNode;\n hasData: boolean;\n height: number;\n overlay?: ReactNode;\n style?: CSSProperties;\n children: ReactNode;\n};\n\nexport const defaultChartMargin = { top: 16, right: 16, bottom: 8, left: 0 };\n\nexport function ChartFrame({\n appearance,\n children,\n className,\n containerStyle,\n density,\n emptyState = null,\n hasData,\n height,\n overlay,\n style,\n ...props\n}: ChartFrameProps) {\n const divProps = filterDivProps(props);\n const [measureRef, size] = useResizeObserver<HTMLDivElement>();\n const chartStyle = {\n \"--chart-height\": `${height}px`,\n ...style,\n } as CSSProperties;\n const canRenderChart = (size?.width ?? 0) > 0 && (size?.height ?? 0) > 0;\n\n if (!hasData) {\n return (\n <div\n className={cn(chartVariants({ appearance, density }), className)}\n style={chartStyle}\n {...divProps}\n >\n <div className=\"flex h-full min-h-48 items-center justify-center text-sm text-slate-500\">\n {emptyState}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(chartVariants({ appearance, density }), className)}\n style={chartStyle}\n {...divProps}\n >\n <div ref={measureRef} className=\"h-full min-h-0 w-full min-w-0\">\n {canRenderChart ? (\n <ResponsiveContainer\n width=\"100%\"\n height=\"100%\"\n minWidth={0}\n debounce={80}\n style={containerStyle}\n >\n {children}\n </ResponsiveContainer>\n ) : null}\n </div>\n {overlay}\n </div>\n );\n}\n\nexport function ChartDecorators({\n axis,\n showGrid,\n showLegend,\n showTooltip,\n tooltipColor = \"#0f172a\",\n}: {\n axis: ReactNode;\n showGrid: boolean;\n showLegend: boolean;\n showTooltip: boolean;\n tooltipColor?: string;\n}) {\n return (\n <>\n {showGrid ? (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"currentColor\"\n opacity={0.16}\n />\n ) : null}\n {axis}\n {showTooltip ? (\n <Tooltip\n cursor={{ opacity: 0.12 }}\n contentStyle={{ color: tooltipColor }}\n labelStyle={{ color: tooltipColor }}\n itemStyle={{ color: tooltipColor }}\n />\n ) : null}\n {showLegend ? <Legend /> : null}\n </>\n );\n}\n","import type { ChartColor, ChartSeries } from \"./types\";\nimport { chartPalette } from \"./variants\";\n\nexport function resolveColor(\n color: ChartColor | string | undefined,\n index: number,\n) {\n if (color && color in chartPalette) {\n return chartPalette[color as ChartColor];\n }\n if (color) {\n return { stroke: color, fill: color };\n }\n\n const paletteValues = Object.values(chartPalette);\n return paletteValues[index % paletteValues.length] ?? chartPalette.cyan;\n}\n\nexport function getSeriesFill(\n series: ChartSeries,\n index: number,\n opacity = 0.18,\n) {\n const color = resolveColor(series.color, index);\n return (\n series.fill ??\n `${color.fill}${Math.round(opacity * 255)\n .toString(16)\n .padStart(2, \"0\")}`\n );\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
// src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts
|
|
6
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? react.useLayoutEffect : react.useEffect;
|
|
7
|
+
|
|
8
|
+
exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
|
|
9
|
+
//# sourceMappingURL=chunk-XRM7GOIE.js.map
|
|
10
|
+
//# sourceMappingURL=chunk-XRM7GOIE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts"],"names":["useLayoutEffect","useEffect"],"mappings":";;;;;AAUO,IAAM,yBAAA,GACX,OAAO,MAAA,KAAW,WAAA,GAAcA,qBAAA,GAAkBC","file":"chunk-XRM7GOIE.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useLayoutEffect } from \"react\";\n\n/**\n * Runs `useLayoutEffect` in the browser and `useEffect` on the server to avoid SSR warnings.\n *\n * Use for DOM measurements or synchronous paint updates that must run before the browser paints,\n * but only when the code path is safe on the client; on the server the timing matches `useEffect`.\n */\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n"]}
|
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,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":"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","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"}
|