@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.
Files changed (253) hide show
  1. package/README.md +25 -10
  2. package/cli/registry.json +12 -0
  3. package/dist/charts/area.js +9 -10
  4. package/dist/charts/area.js.map +1 -1
  5. package/dist/charts/area.mjs +2 -3
  6. package/dist/charts/area.mjs.map +1 -1
  7. package/dist/charts/bar.js +10 -95
  8. package/dist/charts/bar.js.map +1 -1
  9. package/dist/charts/bar.mjs +2 -95
  10. package/dist/charts/bar.mjs.map +1 -1
  11. package/dist/charts/bubble.js +8 -9
  12. package/dist/charts/bubble.js.map +1 -1
  13. package/dist/charts/bubble.mjs +2 -3
  14. package/dist/charts/bubble.mjs.map +1 -1
  15. package/dist/charts/funnel/Funnel.d.ts +6 -0
  16. package/dist/charts/funnel/Funnel.d.ts.map +1 -0
  17. package/dist/charts/funnel/index.d.ts +4 -0
  18. package/dist/charts/funnel/index.d.ts.map +1 -0
  19. package/dist/charts/funnel.js +102 -0
  20. package/dist/charts/funnel.js.map +1 -0
  21. package/dist/charts/funnel.mjs +89 -0
  22. package/dist/charts/funnel.mjs.map +1 -0
  23. package/dist/charts/line.js +8 -9
  24. package/dist/charts/line.js.map +1 -1
  25. package/dist/charts/line.mjs +2 -3
  26. package/dist/charts/line.mjs.map +1 -1
  27. package/dist/charts/pie/Pie.d.ts +1 -1
  28. package/dist/charts/pie/Pie.d.ts.map +1 -1
  29. package/dist/charts/pie.js +19 -6
  30. package/dist/charts/pie.js.map +1 -1
  31. package/dist/charts/pie.mjs +17 -4
  32. package/dist/charts/pie.mjs.map +1 -1
  33. package/dist/charts/radar/Radar.d.ts +6 -0
  34. package/dist/charts/radar/Radar.d.ts.map +1 -0
  35. package/dist/charts/radar/index.d.ts +4 -0
  36. package/dist/charts/radar/index.d.ts.map +1 -0
  37. package/dist/charts/radar.js +94 -0
  38. package/dist/charts/radar.js.map +1 -0
  39. package/dist/charts/radar.mjs +81 -0
  40. package/dist/charts/radar.mjs.map +1 -0
  41. package/dist/charts/scatter/Scatter.d.ts +6 -0
  42. package/dist/charts/scatter/Scatter.d.ts.map +1 -0
  43. package/dist/charts/scatter/index.d.ts +4 -0
  44. package/dist/charts/scatter/index.d.ts.map +1 -0
  45. package/dist/charts/scatter.js +116 -0
  46. package/dist/charts/scatter.js.map +1 -0
  47. package/dist/charts/scatter.mjs +103 -0
  48. package/dist/charts/scatter.mjs.map +1 -0
  49. package/dist/charts/shared/chart-frame.d.ts +2 -1
  50. package/dist/charts/shared/chart-frame.d.ts.map +1 -1
  51. package/dist/charts/shared/types.d.ts +22 -2
  52. package/dist/charts/shared/types.d.ts.map +1 -1
  53. package/dist/charts/stacked-bar/StackedBar.d.ts +6 -0
  54. package/dist/charts/stacked-bar/StackedBar.d.ts.map +1 -0
  55. package/dist/charts/stacked-bar/index.d.ts +4 -0
  56. package/dist/charts/stacked-bar/index.d.ts.map +1 -0
  57. package/dist/charts/stacked-bar.js +29 -0
  58. package/dist/charts/stacked-bar.js.map +1 -0
  59. package/dist/charts/stacked-bar.mjs +15 -0
  60. package/dist/charts/stacked-bar.mjs.map +1 -0
  61. package/dist/chunk-7TGUGTTQ.mjs +147 -0
  62. package/dist/chunk-7TGUGTTQ.mjs.map +1 -0
  63. package/dist/chunk-CQMV7BB6.js +50 -0
  64. package/dist/chunk-CQMV7BB6.js.map +1 -0
  65. package/dist/chunk-DN7TYUJ6.js +119 -0
  66. package/dist/chunk-DN7TYUJ6.js.map +1 -0
  67. package/dist/chunk-F3V4POW3.mjs +8 -0
  68. package/dist/chunk-F3V4POW3.mjs.map +1 -0
  69. package/dist/{chunk-G2WARVAM.mjs → chunk-HZIRD3SR.mjs} +35 -15
  70. package/dist/chunk-HZIRD3SR.mjs.map +1 -0
  71. package/dist/{chunk-G66SXATZ.js → chunk-IL4LH2XX.js} +50 -4
  72. package/dist/chunk-IL4LH2XX.js.map +1 -0
  73. package/dist/chunk-LREMK2XR.js +97 -0
  74. package/dist/chunk-LREMK2XR.js.map +1 -0
  75. package/dist/chunk-O2KM3ETC.mjs +95 -0
  76. package/dist/chunk-O2KM3ETC.mjs.map +1 -0
  77. package/dist/chunk-ODBG4Y6R.mjs +48 -0
  78. package/dist/chunk-ODBG4Y6R.mjs.map +1 -0
  79. package/dist/{chunk-ZIFMIS7D.mjs → chunk-OL3BJSRC.mjs} +51 -5
  80. package/dist/chunk-OL3BJSRC.mjs.map +1 -0
  81. package/dist/{chunk-QNUDODDX.js → chunk-PWPMKXEG.js} +36 -14
  82. package/dist/chunk-PWPMKXEG.js.map +1 -0
  83. package/dist/chunk-RKX5MERK.js +150 -0
  84. package/dist/chunk-RKX5MERK.js.map +1 -0
  85. package/dist/chunk-VYI3GS2C.mjs +115 -0
  86. package/dist/chunk-VYI3GS2C.mjs.map +1 -0
  87. package/dist/chunk-XRM7GOIE.js +10 -0
  88. package/dist/chunk-XRM7GOIE.js.map +1 -0
  89. package/dist/design-system/copy-button.d.ts +43 -0
  90. package/dist/design-system/copy-button.d.ts.map +1 -0
  91. package/dist/design-system/index.d.ts +2 -0
  92. package/dist/design-system/index.d.ts.map +1 -1
  93. package/dist/design-system/kbd.d.ts +44 -0
  94. package/dist/design-system/kbd.d.ts.map +1 -0
  95. package/dist/hooks/index.d.ts +2 -0
  96. package/dist/hooks/index.d.ts.map +1 -1
  97. package/dist/hooks/useClipboard.js +6 -44
  98. package/dist/hooks/useClipboard.js.map +1 -1
  99. package/dist/hooks/useClipboard.mjs +1 -46
  100. package/dist/hooks/useClipboard.mjs.map +1 -1
  101. package/dist/hooks/useIsomorphicLayoutEffect.js +6 -4
  102. package/dist/hooks/useIsomorphicLayoutEffect.js.map +1 -1
  103. package/dist/hooks/useIsomorphicLayoutEffect.mjs +1 -6
  104. package/dist/hooks/useIsomorphicLayoutEffect.mjs.map +1 -1
  105. package/dist/hooks/useTableFilter/index.d.ts +3 -0
  106. package/dist/hooks/useTableFilter/index.d.ts.map +1 -0
  107. package/dist/hooks/useTableFilter/types.d.ts +20 -0
  108. package/dist/hooks/useTableFilter/types.d.ts.map +1 -0
  109. package/dist/hooks/useTableFilter/useTableFilter.d.ts +3 -0
  110. package/dist/hooks/useTableFilter/useTableFilter.d.ts.map +1 -0
  111. package/dist/hooks/useTableFilter.js +124 -0
  112. package/dist/hooks/useTableFilter.js.map +1 -0
  113. package/dist/hooks/useTableFilter.mjs +122 -0
  114. package/dist/hooks/useTableFilter.mjs.map +1 -0
  115. package/dist/hooks/useTableSort/index.d.ts +3 -0
  116. package/dist/hooks/useTableSort/index.d.ts.map +1 -0
  117. package/dist/hooks/useTableSort/types.d.ts +15 -0
  118. package/dist/hooks/useTableSort/types.d.ts.map +1 -0
  119. package/dist/hooks/useTableSort/useTableSort.d.ts +3 -0
  120. package/dist/hooks/useTableSort/useTableSort.d.ts.map +1 -0
  121. package/dist/hooks/useTableSort.js +99 -0
  122. package/dist/hooks/useTableSort.js.map +1 -0
  123. package/dist/hooks/useTableSort.mjs +97 -0
  124. package/dist/hooks/useTableSort.mjs.map +1 -0
  125. package/dist/ui/copy-button/animated/animations.d.ts +3 -0
  126. package/dist/ui/copy-button/animated/animations.d.ts.map +1 -0
  127. package/dist/ui/copy-button/animated/copy-button-animated.d.ts +6 -0
  128. package/dist/ui/copy-button/animated/copy-button-animated.d.ts.map +1 -0
  129. package/dist/ui/copy-button/animated/index.d.ts +4 -0
  130. package/dist/ui/copy-button/animated/index.d.ts.map +1 -0
  131. package/dist/ui/copy-button/animated/types.d.ts +26 -0
  132. package/dist/ui/copy-button/animated/types.d.ts.map +1 -0
  133. package/dist/ui/copy-button/animated.js +59 -0
  134. package/dist/ui/copy-button/animated.js.map +1 -0
  135. package/dist/ui/copy-button/animated.mjs +56 -0
  136. package/dist/ui/copy-button/animated.mjs.map +1 -0
  137. package/dist/ui/copy-button/copy-button-base.d.ts +6 -0
  138. package/dist/ui/copy-button/copy-button-base.d.ts.map +1 -0
  139. package/dist/ui/copy-button/copy-button.d.ts +6 -0
  140. package/dist/ui/copy-button/copy-button.d.ts.map +1 -0
  141. package/dist/ui/copy-button/index.d.ts +4 -0
  142. package/dist/ui/copy-button/index.d.ts.map +1 -0
  143. package/dist/ui/copy-button/types.d.ts +32 -0
  144. package/dist/ui/copy-button/types.d.ts.map +1 -0
  145. package/dist/ui/copy-button/variants.d.ts +6 -0
  146. package/dist/ui/copy-button/variants.d.ts.map +1 -0
  147. package/dist/ui/copy-button.js +20 -0
  148. package/dist/ui/copy-button.js.map +1 -0
  149. package/dist/ui/copy-button.mjs +15 -0
  150. package/dist/ui/copy-button.mjs.map +1 -0
  151. package/dist/ui/kbd/animated/animations.d.ts +3 -0
  152. package/dist/ui/kbd/animated/animations.d.ts.map +1 -0
  153. package/dist/ui/kbd/animated/index.d.ts +4 -0
  154. package/dist/ui/kbd/animated/index.d.ts.map +1 -0
  155. package/dist/ui/kbd/animated/kbd-animated.d.ts +6 -0
  156. package/dist/ui/kbd/animated/kbd-animated.d.ts.map +1 -0
  157. package/dist/ui/kbd/animated/types.d.ts +10 -0
  158. package/dist/ui/kbd/animated/types.d.ts.map +1 -0
  159. package/dist/ui/kbd/animated.js +42 -0
  160. package/dist/ui/kbd/animated.js.map +1 -0
  161. package/dist/ui/kbd/animated.mjs +39 -0
  162. package/dist/ui/kbd/animated.mjs.map +1 -0
  163. package/dist/ui/kbd/index.d.ts +4 -0
  164. package/dist/ui/kbd/index.d.ts.map +1 -0
  165. package/dist/ui/kbd/kbd-base.d.ts +6 -0
  166. package/dist/ui/kbd/kbd-base.d.ts.map +1 -0
  167. package/dist/ui/kbd/kbd.d.ts +6 -0
  168. package/dist/ui/kbd/kbd.d.ts.map +1 -0
  169. package/dist/ui/kbd/types.d.ts +17 -0
  170. package/dist/ui/kbd/types.d.ts.map +1 -0
  171. package/dist/ui/kbd/variants.d.ts +8 -0
  172. package/dist/ui/kbd/variants.d.ts.map +1 -0
  173. package/dist/ui/kbd.js +23 -0
  174. package/dist/ui/kbd.js.map +1 -0
  175. package/dist/ui/kbd.mjs +14 -0
  176. package/dist/ui/kbd.mjs.map +1 -0
  177. package/dist/ui/marquee/marquee.d.ts.map +1 -1
  178. package/dist/ui/marquee.js +82 -21
  179. package/dist/ui/marquee.js.map +1 -1
  180. package/dist/ui/marquee.mjs +83 -22
  181. package/dist/ui/marquee.mjs.map +1 -1
  182. package/dist/ui/table/animated.js +8 -8
  183. package/dist/ui/table/animated.mjs +2 -2
  184. package/dist/ui/table/index.d.ts +1 -1
  185. package/dist/ui/table/index.d.ts.map +1 -1
  186. package/dist/ui/table/table-base.d.ts +2 -2
  187. package/dist/ui/table/table-base.d.ts.map +1 -1
  188. package/dist/ui/table/types.d.ts +9 -1
  189. package/dist/ui/table/types.d.ts.map +1 -1
  190. package/dist/ui/table.js +14 -14
  191. package/dist/ui/table.mjs +1 -1
  192. package/package.json +1 -1
  193. package/src/charts/charts.test.tsx +80 -0
  194. package/src/charts/funnel/Funnel.tsx +105 -0
  195. package/src/charts/funnel/index.ts +14 -0
  196. package/src/charts/pie/Pie.tsx +28 -1
  197. package/src/charts/radar/Radar.tsx +84 -0
  198. package/src/charts/radar/index.ts +16 -0
  199. package/src/charts/scatter/Scatter.tsx +104 -0
  200. package/src/charts/scatter/index.ts +16 -0
  201. package/src/charts/shared/chart-frame.tsx +4 -2
  202. package/src/charts/shared/types.ts +42 -2
  203. package/src/charts/stacked-bar/StackedBar.tsx +12 -0
  204. package/src/charts/stacked-bar/index.ts +16 -0
  205. package/src/design-system/copy-button.ts +81 -0
  206. package/src/design-system/index.ts +2 -0
  207. package/src/design-system/kbd.ts +83 -0
  208. package/src/hooks/index.ts +12 -0
  209. package/src/hooks/useTableFilter/index.ts +7 -0
  210. package/src/hooks/useTableFilter/types.ts +28 -0
  211. package/src/hooks/useTableFilter/useTableFilter.test.ts +141 -0
  212. package/src/hooks/useTableFilter/useTableFilter.ts +153 -0
  213. package/src/hooks/useTableSort/index.ts +5 -0
  214. package/src/hooks/useTableSort/types.ts +23 -0
  215. package/src/hooks/useTableSort/useTableSort.test.ts +150 -0
  216. package/src/hooks/useTableSort/useTableSort.ts +121 -0
  217. package/src/ui/copy-button/animated/animations.ts +22 -0
  218. package/src/ui/copy-button/animated/copy-button-animated.tsx +39 -0
  219. package/src/ui/copy-button/animated/index.ts +10 -0
  220. package/src/ui/copy-button/animated/types.ts +21 -0
  221. package/src/ui/copy-button/copy-button-base.tsx +88 -0
  222. package/src/ui/copy-button/copy-button.test.tsx +82 -0
  223. package/src/ui/copy-button/copy-button.tsx +9 -0
  224. package/src/ui/copy-button/index.ts +10 -0
  225. package/src/ui/copy-button/types.ts +37 -0
  226. package/src/ui/copy-button/variants.ts +29 -0
  227. package/src/ui/divider/divider.test.tsx +55 -0
  228. package/src/ui/empty-state/empty-state.test.tsx +88 -0
  229. package/src/ui/kbd/animated/animations.ts +15 -0
  230. package/src/ui/kbd/animated/index.ts +9 -0
  231. package/src/ui/kbd/animated/kbd-animated.tsx +26 -0
  232. package/src/ui/kbd/animated/types.ts +16 -0
  233. package/src/ui/kbd/index.ts +5 -0
  234. package/src/ui/kbd/kbd-base.tsx +50 -0
  235. package/src/ui/kbd/kbd.test.tsx +48 -0
  236. package/src/ui/kbd/kbd.tsx +9 -0
  237. package/src/ui/kbd/types.ts +21 -0
  238. package/src/ui/kbd/variants.ts +31 -0
  239. package/src/ui/marquee/marquee.test.tsx +45 -4
  240. package/src/ui/marquee/marquee.tsx +100 -18
  241. package/src/ui/skeleton/skeleton.test.tsx +85 -0
  242. package/src/ui/table/index.ts +3 -0
  243. package/src/ui/table/table-base.tsx +69 -4
  244. package/src/ui/table/table.test.tsx +207 -0
  245. package/src/ui/table/types.ts +13 -1
  246. package/dist/chunk-G2WARVAM.mjs.map +0 -1
  247. package/dist/chunk-G66SXATZ.js.map +0 -1
  248. package/dist/chunk-OULU7OC4.mjs +0 -21
  249. package/dist/chunk-OULU7OC4.mjs.map +0 -1
  250. package/dist/chunk-QNUDODDX.js.map +0 -1
  251. package/dist/chunk-Z6S36PDD.js +0 -24
  252. package/dist/chunk-Z6S36PDD.js.map +0 -1
  253. 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"}
@@ -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 react = require('react');
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
- exports.useClipboard = useClipboard;
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":["../../src/hooks/useClipboard/useClipboard.ts"],"names":["useState","useRef","useCallback"],"mappings":";;;;;AAwBO,SAAS,YAAA,CAAa,aAAa,GAAA,EAA0B;AAClE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAA4B,MAAS,CAAA;AAC/D,EAAA,MAAM,UAAA,GAAaC,YAAA;AAAA,IACjB;AAAA,GACF;AAEA,EAAA,MAAM,KAAA,GAAQC,kBAAY,MAAM;AAC9B,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,UAAA,CAAW,OAAA,GAAU,MAAA;AAAA,IACvB;AACA,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAA,QAAA,CAAS,MAAS,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAOA,iBAAA;AAAA,IACX,OAAO,IAAA,KAAiB;AACtB,MAAA,KAAA,EAAM;AACN,MAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,CAAC,SAAA,CAAU,WAAW,SAAA,EAAW;AACvE,QAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,gCAAgC,CAAA;AACtD,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,QAAA,SAAA,CAAU,IAAI,CAAA;AACd,QAAA,IAAI,aAAa,CAAA,EAAG;AAClB,UAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,YAAA,SAAA,CAAU,KAAK,CAAA;AAAA,UACjB,GAAG,UAAU,CAAA;AAAA,QACf;AACA,QAAA,OAAO,IAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,GAAA,GAAM,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAO,UAAU;AAAA,GACpB;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AACtC","file":"useClipboard.js","sourcesContent":["\"use client\";\n\nimport { useCallback, useRef, useState } from \"react\";\n\nexport type UseClipboardResult = {\n /** `true` after a successful `copy` until the reset delay elapses or `reset` is called. */\n copied: boolean;\n /** Set when the Clipboard API is missing or `writeText` rejects (e.g. permission denied). */\n error: Error | undefined;\n /** Writes `text` via `navigator.clipboard.writeText`; returns whether the write succeeded. */\n copy: (text: string) => Promise<boolean>;\n /** Clears `copied`/`error` and cancels any pending auto-reset timeout. */\n reset: () => void;\n};\n\n/**\n * Wraps the async Clipboard API with React state for UX feedback (“Copied!”) and error surfacing.\n *\n * After a successful copy, `copied` flips to `true` for `resetDelay` ms (or stays true if `resetDelay` is 0).\n * SSR-safe: `copy` resolves `false` with an error when `navigator.clipboard` is unavailable.\n *\n * @param resetDelay - Milliseconds before `copied` auto-clears after success; `0` disables auto-clear.\n * @returns `{ copied, error, copy, reset }` for rendering and handlers.\n */\nexport function useClipboard(resetDelay = 2000): UseClipboardResult {\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | undefined>(undefined);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n\n const reset = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n setCopied(false);\n setError(undefined);\n }, []);\n\n const copy = useCallback(\n async (text: string) => {\n reset();\n if (typeof navigator === \"undefined\" || !navigator.clipboard?.writeText) {\n const err = new Error(\"Clipboard API is not available\");\n setError(err);\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n if (resetDelay > 0) {\n timeoutRef.current = setTimeout(() => {\n setCopied(false);\n }, resetDelay);\n }\n return true;\n } catch (cause) {\n const err = cause instanceof Error ? cause : new Error(String(cause));\n setError(err);\n return false;\n }\n },\n [reset, resetDelay],\n );\n\n return { copied, error, copy, reset };\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"useClipboard.js"}
@@ -1,49 +1,4 @@
1
1
  "use client";
2
- import { useState, useRef, useCallback } from 'react';
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":["../../src/hooks/useClipboard/useClipboard.ts"],"names":[],"mappings":";;;AAwBO,SAAS,YAAA,CAAa,aAAa,GAAA,EAA0B;AAClE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAA4B,MAAS,CAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,MAAA;AAAA,IACjB;AAAA,GACF;AAEA,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,UAAA,CAAW,OAAA,GAAU,MAAA;AAAA,IACvB;AACA,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAA,QAAA,CAAS,MAAS,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAO,WAAA;AAAA,IACX,OAAO,IAAA,KAAiB;AACtB,MAAA,KAAA,EAAM;AACN,MAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,CAAC,SAAA,CAAU,WAAW,SAAA,EAAW;AACvE,QAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,gCAAgC,CAAA;AACtD,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,QAAA,SAAA,CAAU,IAAI,CAAA;AACd,QAAA,IAAI,aAAa,CAAA,EAAG;AAClB,UAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,YAAA,SAAA,CAAU,KAAK,CAAA;AAAA,UACjB,GAAG,UAAU,CAAA;AAAA,QACf;AACA,QAAA,OAAO,IAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,GAAA,GAAM,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAO,UAAU;AAAA,GACpB;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AACtC","file":"useClipboard.mjs","sourcesContent":["\"use client\";\n\nimport { useCallback, useRef, useState } from \"react\";\n\nexport type UseClipboardResult = {\n /** `true` after a successful `copy` until the reset delay elapses or `reset` is called. */\n copied: boolean;\n /** Set when the Clipboard API is missing or `writeText` rejects (e.g. permission denied). */\n error: Error | undefined;\n /** Writes `text` via `navigator.clipboard.writeText`; returns whether the write succeeded. */\n copy: (text: string) => Promise<boolean>;\n /** Clears `copied`/`error` and cancels any pending auto-reset timeout. */\n reset: () => void;\n};\n\n/**\n * Wraps the async Clipboard API with React state for UX feedback (“Copied!”) and error surfacing.\n *\n * After a successful copy, `copied` flips to `true` for `resetDelay` ms (or stays true if `resetDelay` is 0).\n * SSR-safe: `copy` resolves `false` with an error when `navigator.clipboard` is unavailable.\n *\n * @param resetDelay - Milliseconds before `copied` auto-clears after success; `0` disables auto-clear.\n * @returns `{ copied, error, copy, reset }` for rendering and handlers.\n */\nexport function useClipboard(resetDelay = 2000): UseClipboardResult {\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | undefined>(undefined);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n\n const reset = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n setCopied(false);\n setError(undefined);\n }, []);\n\n const copy = useCallback(\n async (text: string) => {\n reset();\n if (typeof navigator === \"undefined\" || !navigator.clipboard?.writeText) {\n const err = new Error(\"Clipboard API is not available\");\n setError(err);\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n if (resetDelay > 0) {\n timeoutRef.current = setTimeout(() => {\n setCopied(false);\n }, resetDelay);\n }\n return true;\n } catch (cause) {\n const err = cause instanceof Error ? cause : new Error(String(cause));\n setError(err);\n return false;\n }\n },\n [reset, resetDelay],\n );\n\n return { copied, error, copy, reset };\n}\n"]}
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 react = require('react');
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
- exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
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":["../../src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts"],"names":["useLayoutEffect","useEffect"],"mappings":";;;;;AAUO,IAAM,yBAAA,GACX,OAAO,MAAA,KAAW,WAAA,GAAcA,qBAAA,GAAkBC","file":"useIsomorphicLayoutEffect.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"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"useIsomorphicLayoutEffect.js"}
@@ -1,9 +1,4 @@
1
1
  "use client";
2
- import { useLayoutEffect, useEffect } from 'react';
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":["../../src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts"],"names":[],"mappings":";;;AAUO,IAAM,yBAAA,GACX,OAAO,MAAA,KAAW,WAAA,GAAc,eAAA,GAAkB","file":"useIsomorphicLayoutEffect.mjs","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"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"useIsomorphicLayoutEffect.mjs"}
@@ -0,0 +1,3 @@
1
+ export { type TableFilterPredicate, type TableFilterState, type UseTableFilterParams, type UseTableFilterResult, } from "./types";
2
+ export { useTableFilter } from "./useTableFilter";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { type UseTableSortParams, type UseTableSortResult, } from "./types";
2
+ export { useTableSort } from "./useTableSort";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}