@zentauri-ui/zentauri-components 1.1.1 → 1.2.1

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 (290) hide show
  1. package/README.md +62 -21
  2. package/dist/chunk-2VQJ6OIL.js +31 -0
  3. package/dist/chunk-2VQJ6OIL.js.map +1 -0
  4. package/dist/chunk-73VCO5TE.mjs +29 -0
  5. package/dist/chunk-73VCO5TE.mjs.map +1 -0
  6. package/dist/chunk-BSWYZTYK.js +31 -0
  7. package/dist/chunk-BSWYZTYK.js.map +1 -0
  8. package/dist/chunk-CY5BQKRZ.mjs +29 -0
  9. package/dist/chunk-CY5BQKRZ.mjs.map +1 -0
  10. package/dist/chunk-DFEZH7TC.mjs +27 -0
  11. package/dist/chunk-DFEZH7TC.mjs.map +1 -0
  12. package/dist/chunk-FT2LMA66.mjs +25 -0
  13. package/dist/chunk-FT2LMA66.mjs.map +1 -0
  14. package/dist/chunk-JE3PD5ZA.js +107 -0
  15. package/dist/chunk-JE3PD5ZA.js.map +1 -0
  16. package/dist/chunk-JXCTEAXD.js +38 -0
  17. package/dist/chunk-JXCTEAXD.js.map +1 -0
  18. package/dist/chunk-LIJ6BDGP.mjs +36 -0
  19. package/dist/chunk-LIJ6BDGP.mjs.map +1 -0
  20. package/dist/chunk-P6YRSEOY.js +225 -0
  21. package/dist/chunk-P6YRSEOY.js.map +1 -0
  22. package/dist/chunk-PMAF6FBF.mjs +37 -0
  23. package/dist/chunk-PMAF6FBF.mjs.map +1 -0
  24. package/dist/chunk-TZ2JVWTZ.mjs +104 -0
  25. package/dist/chunk-TZ2JVWTZ.mjs.map +1 -0
  26. package/dist/chunk-UIYFEP3I.js +39 -0
  27. package/dist/chunk-UIYFEP3I.js.map +1 -0
  28. package/dist/chunk-UJ3AER3U.mjs +214 -0
  29. package/dist/chunk-UJ3AER3U.mjs.map +1 -0
  30. package/dist/chunk-UOZYPWDZ.js +32 -0
  31. package/dist/chunk-UOZYPWDZ.js.map +1 -0
  32. package/dist/chunk-WL5I7RVS.mjs +54 -0
  33. package/dist/chunk-WL5I7RVS.mjs.map +1 -0
  34. package/dist/chunk-WP7GYBRI.js +27 -0
  35. package/dist/chunk-WP7GYBRI.js.map +1 -0
  36. package/dist/chunk-YPLVTUYL.js +56 -0
  37. package/dist/chunk-YPLVTUYL.js.map +1 -0
  38. package/dist/hooks/useBodyScrollLock.d.mts +14 -0
  39. package/dist/hooks/useBodyScrollLock.d.ts +14 -0
  40. package/dist/hooks/useBodyScrollLock.js +13 -0
  41. package/dist/hooks/useBodyScrollLock.js.map +1 -0
  42. package/dist/hooks/useBodyScrollLock.mjs +4 -0
  43. package/dist/hooks/useBodyScrollLock.mjs.map +1 -0
  44. package/dist/hooks/useClickOutside.d.mts +23 -0
  45. package/dist/hooks/useClickOutside.d.ts +23 -0
  46. package/dist/hooks/useClickOutside.js +13 -0
  47. package/dist/hooks/useClickOutside.js.map +1 -0
  48. package/dist/hooks/useClickOutside.mjs +4 -0
  49. package/dist/hooks/useClickOutside.mjs.map +1 -0
  50. package/dist/hooks/useClipboard.d.mts +22 -0
  51. package/dist/hooks/useClipboard.d.ts +22 -0
  52. package/dist/hooks/useClipboard.js +51 -0
  53. package/dist/hooks/useClipboard.js.map +1 -0
  54. package/dist/hooks/useClipboard.mjs +49 -0
  55. package/dist/hooks/useClipboard.mjs.map +1 -0
  56. package/dist/hooks/useControllableState.d.mts +22 -0
  57. package/dist/hooks/useControllableState.d.ts +22 -0
  58. package/dist/hooks/useControllableState.js +13 -0
  59. package/dist/hooks/useControllableState.js.map +1 -0
  60. package/dist/hooks/useControllableState.mjs +4 -0
  61. package/dist/hooks/useControllableState.mjs.map +1 -0
  62. package/dist/hooks/useDebouncedValue.d.mts +14 -0
  63. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  64. package/dist/hooks/useDebouncedValue.js +22 -0
  65. package/dist/hooks/useDebouncedValue.js.map +1 -0
  66. package/dist/hooks/useDebouncedValue.mjs +20 -0
  67. package/dist/hooks/useDebouncedValue.mjs.map +1 -0
  68. package/dist/hooks/useDisclosure.d.mts +25 -0
  69. package/dist/hooks/useDisclosure.d.ts +25 -0
  70. package/dist/hooks/useDisclosure.js +37 -0
  71. package/dist/hooks/useDisclosure.js.map +1 -0
  72. package/dist/hooks/useDisclosure.mjs +35 -0
  73. package/dist/hooks/useDisclosure.mjs.map +1 -0
  74. package/dist/hooks/useDocumentTitle.d.mts +19 -0
  75. package/dist/hooks/useDocumentTitle.d.ts +19 -0
  76. package/dist/hooks/useDocumentTitle.js +40 -0
  77. package/dist/hooks/useDocumentTitle.js.map +1 -0
  78. package/dist/hooks/useDocumentTitle.mjs +38 -0
  79. package/dist/hooks/useDocumentTitle.mjs.map +1 -0
  80. package/dist/hooks/useFocusManagement.d.mts +24 -0
  81. package/dist/hooks/useFocusManagement.d.ts +24 -0
  82. package/dist/hooks/useFocusManagement.js +14 -0
  83. package/dist/hooks/useFocusManagement.js.map +1 -0
  84. package/dist/hooks/useFocusManagement.mjs +5 -0
  85. package/dist/hooks/useFocusManagement.mjs.map +1 -0
  86. package/dist/hooks/useHover.d.mts +15 -0
  87. package/dist/hooks/useHover.d.ts +15 -0
  88. package/dist/hooks/useHover.js +37 -0
  89. package/dist/hooks/useHover.js.map +1 -0
  90. package/dist/hooks/useHover.mjs +35 -0
  91. package/dist/hooks/useHover.mjs.map +1 -0
  92. package/dist/hooks/useInView.d.mts +19 -0
  93. package/dist/hooks/useInView.d.ts +19 -0
  94. package/dist/hooks/useInView.js +15 -0
  95. package/dist/hooks/useInView.js.map +1 -0
  96. package/dist/hooks/useInView.mjs +13 -0
  97. package/dist/hooks/useInView.mjs.map +1 -0
  98. package/dist/hooks/useIntersectionObserver.d.mts +19 -0
  99. package/dist/hooks/useIntersectionObserver.d.ts +19 -0
  100. package/dist/hooks/useIntersectionObserver.js +13 -0
  101. package/dist/hooks/useIntersectionObserver.js.map +1 -0
  102. package/dist/hooks/useIntersectionObserver.mjs +4 -0
  103. package/dist/hooks/useIntersectionObserver.mjs.map +1 -0
  104. package/dist/hooks/useIsMounted.d.mts +11 -0
  105. package/dist/hooks/useIsMounted.d.ts +11 -0
  106. package/dist/hooks/useIsMounted.js +20 -0
  107. package/dist/hooks/useIsMounted.js.map +1 -0
  108. package/dist/hooks/useIsMounted.mjs +18 -0
  109. package/dist/hooks/useIsMounted.mjs.map +1 -0
  110. package/dist/hooks/useIsomorphicLayoutEffect.d.mts +11 -0
  111. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +11 -0
  112. package/dist/hooks/useIsomorphicLayoutEffect.js +11 -0
  113. package/dist/hooks/useIsomorphicLayoutEffect.js.map +1 -0
  114. package/dist/hooks/useIsomorphicLayoutEffect.mjs +9 -0
  115. package/dist/hooks/useIsomorphicLayoutEffect.mjs.map +1 -0
  116. package/dist/hooks/useLocalStorage.d.mts +22 -0
  117. package/dist/hooks/useLocalStorage.d.ts +22 -0
  118. package/dist/hooks/useLocalStorage.js +84 -0
  119. package/dist/hooks/useLocalStorage.js.map +1 -0
  120. package/dist/hooks/useLocalStorage.mjs +82 -0
  121. package/dist/hooks/useLocalStorage.mjs.map +1 -0
  122. package/dist/hooks/useMediaQuery.d.mts +13 -0
  123. package/dist/hooks/useMediaQuery.d.ts +13 -0
  124. package/dist/hooks/useMediaQuery.js +13 -0
  125. package/dist/hooks/useMediaQuery.js.map +1 -0
  126. package/dist/hooks/useMediaQuery.mjs +4 -0
  127. package/dist/hooks/useMediaQuery.mjs.map +1 -0
  128. package/dist/hooks/useNetworkStatus.d.mts +10 -0
  129. package/dist/hooks/useNetworkStatus.d.ts +10 -0
  130. package/dist/hooks/useNetworkStatus.js +30 -0
  131. package/dist/hooks/useNetworkStatus.js.map +1 -0
  132. package/dist/hooks/useNetworkStatus.mjs +28 -0
  133. package/dist/hooks/useNetworkStatus.mjs.map +1 -0
  134. package/dist/hooks/usePageVisibility.d.mts +10 -0
  135. package/dist/hooks/usePageVisibility.d.ts +10 -0
  136. package/dist/hooks/usePageVisibility.js +28 -0
  137. package/dist/hooks/usePageVisibility.js.map +1 -0
  138. package/dist/hooks/usePageVisibility.mjs +26 -0
  139. package/dist/hooks/usePageVisibility.mjs.map +1 -0
  140. package/dist/hooks/usePagination.d.mts +5 -0
  141. package/dist/hooks/usePagination.d.ts +5 -0
  142. package/dist/hooks/usePagination.js +18 -0
  143. package/dist/hooks/usePagination.js.map +1 -0
  144. package/dist/hooks/usePagination.mjs +5 -0
  145. package/dist/hooks/usePagination.mjs.map +1 -0
  146. package/dist/hooks/usePrefersColorScheme.d.mts +10 -0
  147. package/dist/hooks/usePrefersColorScheme.d.ts +10 -0
  148. package/dist/hooks/usePrefersColorScheme.js +17 -0
  149. package/dist/hooks/usePrefersColorScheme.js.map +1 -0
  150. package/dist/hooks/usePrefersColorScheme.mjs +15 -0
  151. package/dist/hooks/usePrefersColorScheme.mjs.map +1 -0
  152. package/dist/hooks/usePrefersReducedMotion.d.mts +10 -0
  153. package/dist/hooks/usePrefersReducedMotion.d.ts +10 -0
  154. package/dist/hooks/usePrefersReducedMotion.js +13 -0
  155. package/dist/hooks/usePrefersReducedMotion.js.map +1 -0
  156. package/dist/hooks/usePrefersReducedMotion.mjs +11 -0
  157. package/dist/hooks/usePrefersReducedMotion.mjs.map +1 -0
  158. package/dist/hooks/useResizeObserver.d.mts +23 -0
  159. package/dist/hooks/useResizeObserver.d.ts +23 -0
  160. package/dist/hooks/useResizeObserver.js +38 -0
  161. package/dist/hooks/useResizeObserver.js.map +1 -0
  162. package/dist/hooks/useResizeObserver.mjs +36 -0
  163. package/dist/hooks/useResizeObserver.mjs.map +1 -0
  164. package/dist/hooks/useSessionStorage.d.mts +22 -0
  165. package/dist/hooks/useSessionStorage.d.ts +22 -0
  166. package/dist/hooks/useSessionStorage.js +58 -0
  167. package/dist/hooks/useSessionStorage.js.map +1 -0
  168. package/dist/hooks/useSessionStorage.mjs +56 -0
  169. package/dist/hooks/useSessionStorage.mjs.map +1 -0
  170. package/dist/hooks/useThrottledCallback.d.mts +14 -0
  171. package/dist/hooks/useThrottledCallback.d.ts +14 -0
  172. package/dist/hooks/useThrottledCallback.js +27 -0
  173. package/dist/hooks/useThrottledCallback.js.map +1 -0
  174. package/dist/hooks/useThrottledCallback.mjs +25 -0
  175. package/dist/hooks/useThrottledCallback.mjs.map +1 -0
  176. package/dist/hooks/useToggle.d.mts +9 -0
  177. package/dist/hooks/useToggle.d.ts +9 -0
  178. package/dist/hooks/useToggle.js +20 -0
  179. package/dist/hooks/useToggle.js.map +1 -0
  180. package/dist/hooks/useToggle.mjs +18 -0
  181. package/dist/hooks/useToggle.mjs.map +1 -0
  182. package/dist/hooks/useWindowSize.d.mts +14 -0
  183. package/dist/hooks/useWindowSize.d.ts +14 -0
  184. package/dist/hooks/useWindowSize.js +30 -0
  185. package/dist/hooks/useWindowSize.js.map +1 -0
  186. package/dist/hooks/useWindowSize.mjs +28 -0
  187. package/dist/hooks/useWindowSize.mjs.map +1 -0
  188. package/dist/hooks/utils.d.mts +8 -0
  189. package/dist/hooks/utils.d.ts +8 -0
  190. package/dist/hooks/utils.js +24 -0
  191. package/dist/hooks/utils.js.map +1 -0
  192. package/dist/hooks/utils.mjs +3 -0
  193. package/dist/hooks/utils.mjs.map +1 -0
  194. package/dist/index-ClPu5gDp.d.ts +86 -0
  195. package/dist/index-D4p9fn1o.d.mts +86 -0
  196. package/dist/types-BQ2H3yG7.d.mts +34 -0
  197. package/dist/types-BQ2H3yG7.d.ts +34 -0
  198. package/dist/ui/accordion.js +5 -5
  199. package/dist/ui/accordion.mjs +1 -1
  200. package/dist/ui/alert/animated.d.mts +13 -0
  201. package/dist/ui/alert/animated.d.ts +13 -0
  202. package/dist/ui/alert/animated.js +27 -0
  203. package/dist/ui/alert/animated.js.map +1 -0
  204. package/dist/ui/alert/animated.mjs +25 -0
  205. package/dist/ui/alert/animated.mjs.map +1 -0
  206. package/dist/ui/alert.d.mts +11 -36
  207. package/dist/ui/alert.d.ts +11 -36
  208. package/dist/ui/alert.js +40 -218
  209. package/dist/ui/alert.js.map +1 -1
  210. package/dist/ui/alert.mjs +7 -211
  211. package/dist/ui/alert.mjs.map +1 -1
  212. package/dist/ui/avatar.js +6 -6
  213. package/dist/ui/avatar.js.map +1 -1
  214. package/dist/ui/avatar.mjs +1 -1
  215. package/dist/ui/avatar.mjs.map +1 -1
  216. package/dist/ui/badge.js +2 -2
  217. package/dist/ui/badge.mjs +1 -1
  218. package/dist/ui/breadcrumb.js +7 -7
  219. package/dist/ui/breadcrumb.mjs +1 -1
  220. package/dist/ui/buttons.js +3 -3
  221. package/dist/ui/buttons.mjs +1 -1
  222. package/dist/ui/card.js +7 -7
  223. package/dist/ui/card.js.map +1 -1
  224. package/dist/ui/card.mjs +1 -1
  225. package/dist/ui/card.mjs.map +1 -1
  226. package/dist/ui/divider.js +6 -6
  227. package/dist/ui/divider.mjs +1 -1
  228. package/dist/ui/drawer.js +15 -60
  229. package/dist/ui/drawer.js.map +1 -1
  230. package/dist/ui/drawer.mjs +9 -54
  231. package/dist/ui/drawer.mjs.map +1 -1
  232. package/dist/ui/dropdown.js +6 -13
  233. package/dist/ui/dropdown.js.map +1 -1
  234. package/dist/ui/dropdown.mjs +4 -11
  235. package/dist/ui/dropdown.mjs.map +1 -1
  236. package/dist/ui/empty-state.js +6 -6
  237. package/dist/ui/empty-state.js.map +1 -1
  238. package/dist/ui/empty-state.mjs +1 -1
  239. package/dist/ui/empty-state.mjs.map +1 -1
  240. package/dist/ui/file-upload.js +3 -3
  241. package/dist/ui/file-upload.mjs +1 -1
  242. package/dist/ui/inputs.js +3 -3
  243. package/dist/ui/inputs.mjs +1 -1
  244. package/dist/ui/modal.js +16 -61
  245. package/dist/ui/modal.js.map +1 -1
  246. package/dist/ui/modal.mjs +9 -54
  247. package/dist/ui/modal.mjs.map +1 -1
  248. package/dist/ui/pagination.d.mts +3 -81
  249. package/dist/ui/pagination.d.ts +3 -81
  250. package/dist/ui/pagination.js +13 -122
  251. package/dist/ui/pagination.js.map +1 -1
  252. package/dist/ui/pagination.mjs +5 -114
  253. package/dist/ui/pagination.mjs.map +1 -1
  254. package/dist/ui/progress.js +7 -10
  255. package/dist/ui/progress.js.map +1 -1
  256. package/dist/ui/progress.mjs +1 -4
  257. package/dist/ui/progress.mjs.map +1 -1
  258. package/dist/ui/select.js +6 -6
  259. package/dist/ui/select.mjs +1 -1
  260. package/dist/ui/skeleton.js +7 -7
  261. package/dist/ui/skeleton.mjs +1 -1
  262. package/dist/ui/slider.js +9 -9
  263. package/dist/ui/slider.js.map +1 -1
  264. package/dist/ui/slider.mjs +1 -1
  265. package/dist/ui/slider.mjs.map +1 -1
  266. package/dist/ui/spinner.js +24 -10
  267. package/dist/ui/spinner.js.map +1 -1
  268. package/dist/ui/spinner.mjs +17 -3
  269. package/dist/ui/spinner.mjs.map +1 -1
  270. package/dist/ui/stepper.js +6 -6
  271. package/dist/ui/stepper.mjs +1 -1
  272. package/dist/ui/table.js +9 -9
  273. package/dist/ui/table.js.map +1 -1
  274. package/dist/ui/table.mjs +1 -1
  275. package/dist/ui/table.mjs.map +1 -1
  276. package/dist/ui/tabs.js +5 -5
  277. package/dist/ui/tabs.mjs +1 -1
  278. package/dist/ui/toast.js +7 -7
  279. package/dist/ui/toast.js.map +1 -1
  280. package/dist/ui/toast.mjs +1 -1
  281. package/dist/ui/toast.mjs.map +1 -1
  282. package/dist/ui/toggle.js +3 -3
  283. package/dist/ui/toggle.mjs +1 -1
  284. package/dist/ui/tooltip.js +2 -2
  285. package/dist/ui/tooltip.mjs +1 -1
  286. package/package.json +13 -3
  287. package/dist/chunk-B23TPTVG.mjs +0 -11
  288. package/dist/chunk-B23TPTVG.mjs.map +0 -1
  289. package/dist/chunk-WZ2GOU2J.js +0 -13
  290. package/dist/chunk-WZ2GOU2J.js.map +0 -1
@@ -1,9 +1,8 @@
1
1
  import * as class_variance_authority from 'class-variance-authority';
2
- import { VariantProps } from 'class-variance-authority';
3
2
  import * as class_variance_authority_types from 'class-variance-authority/types';
4
3
  import * as react from 'react';
5
- import { ComponentPropsWithoutRef } from 'react';
6
- import { b as buttonVariants } from '../variants-Dd9pe-ov.mjs';
4
+ export { P as PaginationAppearance, a as PaginationPageItem, b as PaginationProps, c as PaginationSize, U as UsePaginationParams, d as UsePaginationResult, u as usePagination } from '../index-D4p9fn1o.mjs';
5
+ import '../variants-Dd9pe-ov.mjs';
7
6
 
8
7
  declare const Pagination: react.ForwardRefExoticComponent<Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLElement>, HTMLElement>, "ref">, "onChange"> & class_variance_authority.VariantProps<(props?: ({
9
8
  appearance?: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | "glass" | "emerald" | "indigo" | "purple" | "pink" | "rose" | "sky" | "teal" | "yellow" | "orange" | "gray" | "amber" | "violet" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | null | undefined;
@@ -22,83 +21,6 @@ declare const Pagination: react.ForwardRefExoticComponent<Omit<Omit<react.Detail
22
21
  getPageHref?: (page: number) => string | undefined;
23
22
  } & react.RefAttributes<HTMLElement>>;
24
23
 
25
- type PaginationPageItem$1 = {
26
- type: "page";
27
- value: number;
28
- } | {
29
- type: "ellipsis";
30
- key: string;
31
- };
32
- type BuildPaginationItemsParams = {
33
- pageCount: number;
34
- currentPage: number;
35
- siblingCount: number;
36
- boundaryCount: number;
37
- };
38
- /**
39
- * Builds the ordered list of page numbers and ellipsis markers for a pagination control.
40
- *
41
- * Args:
42
- * pageCount: Total number of pages (must be >= 0).
43
- * currentPage: Active page index (1-based).
44
- * siblingCount: How many page buttons to show on each side of the current page.
45
- * boundaryCount: How many pages to pin at the start and end of the range.
46
- *
47
- * Returns:
48
- * A list of items suitable for rendering, e.g. [1, ellipsis, 4,5,6, ellipsis, 20].
49
- */
50
- declare function buildPaginationItems({ pageCount, currentPage, siblingCount, boundaryCount, }: BuildPaginationItemsParams): PaginationPageItem$1[];
51
- declare function clampPage(page: number, pageCount: number): number;
52
-
53
- type PaginationAppearance = NonNullable<VariantProps<typeof buttonVariants>["appearance"]>;
54
- type PaginationSize = NonNullable<VariantProps<typeof buttonVariants>["size"]>;
55
- type PaginationPageItem = PaginationPageItem$1;
56
- type UsePaginationParams = {
57
- pageCount: number;
58
- page?: number;
59
- defaultPage?: number;
60
- siblingCount?: number;
61
- boundaryCount?: number;
62
- onPageChange?: (page: number) => void;
63
- };
64
- type UsePaginationResult = {
65
- /** 1-based active page, clamped to `[1, pageCount]`. */
66
- currentPage: number;
67
- pageCount: number;
68
- items: PaginationPageItem[];
69
- setPage: (page: number) => void;
70
- goPrev: () => void;
71
- goNext: () => void;
72
- canGoPrev: boolean;
73
- canGoNext: boolean;
74
- };
75
- type PaginationProps = Omit<ComponentPropsWithoutRef<"nav">, "onChange"> & VariantProps<typeof buttonVariants> & {
76
- pageCount: number;
77
- page?: number;
78
- defaultPage?: number;
79
- onPageChange?: (page: number) => void;
80
- /**
81
- * Number of page buttons to show on each side of the current page (the “middle” window).
82
- * @defaultValue 1
83
- */
84
- siblingCount?: number;
85
- /**
86
- * Number of pages to keep visible at the start and end of the range.
87
- * @defaultValue 1
88
- */
89
- boundaryCount?: number;
90
- showPrevNext?: boolean;
91
- prevLabel?: string;
92
- nextLabel?: string;
93
- ellipsisLabel?: string;
94
- /**
95
- * When set, page controls render as anchors suitable for URL-based pagination.
96
- */
97
- getPageHref?: (page: number) => string | undefined;
98
- };
99
-
100
- declare function usePagination({ pageCount, page, defaultPage, siblingCount, boundaryCount, onPageChange, }: UsePaginationParams): UsePaginationResult;
101
-
102
24
  /**
103
25
  * Layout and chrome for the page list cluster. Appearance and size keys align with
104
26
  * `components/ui/buttons/variants.ts` for consistent design-system tokens.
@@ -111,4 +33,4 @@ declare const paginationEllipsisVariants: (props?: ({
111
33
  size?: "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl" | "8xl" | "9xl" | "10xl" | "icon" | null | undefined;
112
34
  } & class_variance_authority_types.ClassProp) | undefined) => string;
113
35
 
114
- export { Pagination, type PaginationAppearance, type PaginationPageItem, type PaginationProps, type PaginationSize, type UsePaginationParams, type UsePaginationResult, buildPaginationItems, clampPage, paginationEllipsisVariants, paginationListVariants, usePagination };
36
+ export { Pagination, paginationEllipsisVariants, paginationListVariants };
@@ -1,9 +1,8 @@
1
1
  import * as class_variance_authority from 'class-variance-authority';
2
- import { VariantProps } from 'class-variance-authority';
3
2
  import * as class_variance_authority_types from 'class-variance-authority/types';
4
3
  import * as react from 'react';
5
- import { ComponentPropsWithoutRef } from 'react';
6
- import { b as buttonVariants } from '../variants-Dd9pe-ov.js';
4
+ export { P as PaginationAppearance, a as PaginationPageItem, b as PaginationProps, c as PaginationSize, U as UsePaginationParams, d as UsePaginationResult, u as usePagination } from '../index-ClPu5gDp.js';
5
+ import '../variants-Dd9pe-ov.js';
7
6
 
8
7
  declare const Pagination: react.ForwardRefExoticComponent<Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLElement>, HTMLElement>, "ref">, "onChange"> & class_variance_authority.VariantProps<(props?: ({
9
8
  appearance?: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | "glass" | "emerald" | "indigo" | "purple" | "pink" | "rose" | "sky" | "teal" | "yellow" | "orange" | "gray" | "amber" | "violet" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | null | undefined;
@@ -22,83 +21,6 @@ declare const Pagination: react.ForwardRefExoticComponent<Omit<Omit<react.Detail
22
21
  getPageHref?: (page: number) => string | undefined;
23
22
  } & react.RefAttributes<HTMLElement>>;
24
23
 
25
- type PaginationPageItem$1 = {
26
- type: "page";
27
- value: number;
28
- } | {
29
- type: "ellipsis";
30
- key: string;
31
- };
32
- type BuildPaginationItemsParams = {
33
- pageCount: number;
34
- currentPage: number;
35
- siblingCount: number;
36
- boundaryCount: number;
37
- };
38
- /**
39
- * Builds the ordered list of page numbers and ellipsis markers for a pagination control.
40
- *
41
- * Args:
42
- * pageCount: Total number of pages (must be >= 0).
43
- * currentPage: Active page index (1-based).
44
- * siblingCount: How many page buttons to show on each side of the current page.
45
- * boundaryCount: How many pages to pin at the start and end of the range.
46
- *
47
- * Returns:
48
- * A list of items suitable for rendering, e.g. [1, ellipsis, 4,5,6, ellipsis, 20].
49
- */
50
- declare function buildPaginationItems({ pageCount, currentPage, siblingCount, boundaryCount, }: BuildPaginationItemsParams): PaginationPageItem$1[];
51
- declare function clampPage(page: number, pageCount: number): number;
52
-
53
- type PaginationAppearance = NonNullable<VariantProps<typeof buttonVariants>["appearance"]>;
54
- type PaginationSize = NonNullable<VariantProps<typeof buttonVariants>["size"]>;
55
- type PaginationPageItem = PaginationPageItem$1;
56
- type UsePaginationParams = {
57
- pageCount: number;
58
- page?: number;
59
- defaultPage?: number;
60
- siblingCount?: number;
61
- boundaryCount?: number;
62
- onPageChange?: (page: number) => void;
63
- };
64
- type UsePaginationResult = {
65
- /** 1-based active page, clamped to `[1, pageCount]`. */
66
- currentPage: number;
67
- pageCount: number;
68
- items: PaginationPageItem[];
69
- setPage: (page: number) => void;
70
- goPrev: () => void;
71
- goNext: () => void;
72
- canGoPrev: boolean;
73
- canGoNext: boolean;
74
- };
75
- type PaginationProps = Omit<ComponentPropsWithoutRef<"nav">, "onChange"> & VariantProps<typeof buttonVariants> & {
76
- pageCount: number;
77
- page?: number;
78
- defaultPage?: number;
79
- onPageChange?: (page: number) => void;
80
- /**
81
- * Number of page buttons to show on each side of the current page (the “middle” window).
82
- * @defaultValue 1
83
- */
84
- siblingCount?: number;
85
- /**
86
- * Number of pages to keep visible at the start and end of the range.
87
- * @defaultValue 1
88
- */
89
- boundaryCount?: number;
90
- showPrevNext?: boolean;
91
- prevLabel?: string;
92
- nextLabel?: string;
93
- ellipsisLabel?: string;
94
- /**
95
- * When set, page controls render as anchors suitable for URL-based pagination.
96
- */
97
- getPageHref?: (page: number) => string | undefined;
98
- };
99
-
100
- declare function usePagination({ pageCount, page, defaultPage, siblingCount, boundaryCount, onPageChange, }: UsePaginationParams): UsePaginationResult;
101
-
102
24
  /**
103
25
  * Layout and chrome for the page list cluster. Appearance and size keys align with
104
26
  * `components/ui/buttons/variants.ts` for consistent design-system tokens.
@@ -111,4 +33,4 @@ declare const paginationEllipsisVariants: (props?: ({
111
33
  size?: "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl" | "8xl" | "9xl" | "10xl" | "icon" | null | undefined;
112
34
  } & class_variance_authority_types.ClassProp) | undefined) => string;
113
35
 
114
- export { Pagination, type PaginationAppearance, type PaginationPageItem, type PaginationProps, type PaginationSize, type UsePaginationParams, type UsePaginationResult, buildPaginationItems, clampPage, paginationEllipsisVariants, paginationListVariants, usePagination };
36
+ export { Pagination, paginationEllipsisVariants, paginationListVariants };
@@ -1,123 +1,13 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunkJE3PD5ZA_js = require('../chunk-JE3PD5ZA.js');
4
5
  var chunkBITDSQMR_js = require('../chunk-BITDSQMR.js');
5
- var chunkWZ2GOU2J_js = require('../chunk-WZ2GOU2J.js');
6
+ var chunkUOZYPWDZ_js = require('../chunk-UOZYPWDZ.js');
6
7
  var react = require('react');
7
8
  var classVarianceAuthority = require('class-variance-authority');
8
9
  var jsxRuntime = require('react/jsx-runtime');
9
10
 
10
- // src/ui/pagination/pagination-logic.ts
11
- function buildPaginationItems({
12
- pageCount,
13
- currentPage,
14
- siblingCount,
15
- boundaryCount
16
- }) {
17
- if (pageCount <= 0) {
18
- return [];
19
- }
20
- const safeBoundary = Math.max(1, boundaryCount);
21
- const safeSibling = Math.max(0, siblingCount);
22
- const current = clampPage(currentPage, pageCount);
23
- const totalNumbers = safeBoundary * 2 + safeSibling * 2 + 1;
24
- if (pageCount <= totalNumbers) {
25
- return range(1, pageCount).map((value) => ({ type: "page", value }));
26
- }
27
- const leftBoundaryEnd = safeBoundary;
28
- const rightBoundaryStart = pageCount - safeBoundary + 1;
29
- const siblingsStart = Math.max(current - safeSibling, leftBoundaryEnd + 1);
30
- const siblingsEnd = Math.min(current + safeSibling, rightBoundaryStart - 1);
31
- const pages = /* @__PURE__ */ new Set();
32
- for (let p = 1; p <= leftBoundaryEnd; p += 1) {
33
- pages.add(p);
34
- }
35
- for (let p = rightBoundaryStart; p <= pageCount; p += 1) {
36
- pages.add(p);
37
- }
38
- for (let p = siblingsStart; p <= siblingsEnd; p += 1) {
39
- pages.add(p);
40
- }
41
- const sorted = [...pages].sort((a, b) => a - b);
42
- const items = [];
43
- for (let i = 0; i < sorted.length; i += 1) {
44
- const value = sorted[i];
45
- const prev = sorted[i - 1];
46
- if (i > 0 && prev !== void 0 && value && value - prev > 1) {
47
- items.push({ type: "ellipsis", key: `gap-${prev}-${value}` });
48
- }
49
- items.push({ type: "page", value });
50
- }
51
- return items;
52
- }
53
- function clampPage(page, pageCount) {
54
- if (pageCount <= 0) {
55
- return 1;
56
- }
57
- return Math.min(pageCount, Math.max(1, Math.floor(page)));
58
- }
59
- function range(from, to) {
60
- const out = [];
61
- for (let i = from; i <= to; i += 1) {
62
- out.push(i);
63
- }
64
- return out;
65
- }
66
- function usePagination({
67
- pageCount,
68
- page,
69
- defaultPage = 1,
70
- siblingCount = 1,
71
- boundaryCount = 1,
72
- onPageChange
73
- }) {
74
- const [internalPage, setInternalPage] = react.useState(
75
- () => clampPage(defaultPage, pageCount)
76
- );
77
- const isControlled = page !== void 0;
78
- const currentPage = clampPage(isControlled ? page : internalPage, pageCount);
79
- const setPage = react.useCallback(
80
- (next) => {
81
- const clamped = clampPage(next, pageCount);
82
- if (!isControlled) {
83
- setInternalPage(clamped);
84
- }
85
- onPageChange?.(clamped);
86
- },
87
- [isControlled, onPageChange, pageCount]
88
- );
89
- const items = react.useMemo(
90
- () => buildPaginationItems({
91
- pageCount,
92
- currentPage,
93
- siblingCount,
94
- boundaryCount
95
- }),
96
- [boundaryCount, currentPage, pageCount, siblingCount]
97
- );
98
- const canGoPrev = pageCount > 0 && currentPage > 1;
99
- const canGoNext = pageCount > 0 && currentPage < pageCount;
100
- const goPrev = react.useCallback(() => {
101
- if (canGoPrev) {
102
- setPage(currentPage - 1);
103
- }
104
- }, [canGoPrev, currentPage, setPage]);
105
- const goNext = react.useCallback(() => {
106
- if (canGoNext) {
107
- setPage(currentPage + 1);
108
- }
109
- }, [canGoNext, currentPage, setPage]);
110
- return {
111
- currentPage,
112
- pageCount,
113
- items,
114
- setPage,
115
- goPrev,
116
- goNext,
117
- canGoPrev,
118
- canGoNext
119
- };
120
- }
121
11
  var paginationListVariants = classVarianceAuthority.cva(
122
12
  "inline-flex flex-wrap items-center rounded-xl border p-1 ring-offset-slate-950",
123
13
  {
@@ -231,7 +121,7 @@ var Pagination = react.forwardRef(
231
121
  goNext,
232
122
  canGoPrev,
233
123
  canGoNext
234
- } = usePagination({
124
+ } = chunkJE3PD5ZA_js.usePagination({
235
125
  pageCount,
236
126
  page,
237
127
  defaultPage,
@@ -267,7 +157,7 @@ var Pagination = react.forwardRef(
267
157
  if (pageCount <= 0) {
268
158
  return null;
269
159
  }
270
- const inactiveTriggerClass = chunkWZ2GOU2J_js.cn(
160
+ const inactiveTriggerClass = chunkUOZYPWDZ_js.cn(
271
161
  chunkBITDSQMR_js.buttonVariants({ appearance: "ghost", size }),
272
162
  "bg-white/[0.04] text-slate-200 hover:bg-white/10"
273
163
  );
@@ -276,7 +166,7 @@ var Pagination = react.forwardRef(
276
166
  const renderPageControl = (pageNumber) => {
277
167
  const isCurrent = pageNumber === currentPage;
278
168
  const href = getPageHref?.(pageNumber);
279
- const shared = chunkWZ2GOU2J_js.cn(
169
+ const shared = chunkUOZYPWDZ_js.cn(
280
170
  isCurrent ? currentTriggerClass : inactiveTriggerClass,
281
171
  "min-w-[2.25ch] shrink-0",
282
172
  triggerFocusRing
@@ -311,9 +201,9 @@ var Pagination = react.forwardRef(
311
201
  }
312
202
  );
313
203
  };
314
- const prevHref = getPageHref?.(clampPage(currentPage - 1, pageCount));
315
- const nextHref = getPageHref?.(clampPage(currentPage + 1, pageCount));
316
- const navTriggerClass = chunkWZ2GOU2J_js.cn(
204
+ const prevHref = getPageHref?.(chunkUOZYPWDZ_js.clampPage(currentPage - 1, pageCount));
205
+ const nextHref = getPageHref?.(chunkUOZYPWDZ_js.clampPage(currentPage + 1, pageCount));
206
+ const navTriggerClass = chunkUOZYPWDZ_js.cn(
317
207
  chunkBITDSQMR_js.buttonVariants({ appearance: "outline", size }),
318
208
  "shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950"
319
209
  );
@@ -323,7 +213,7 @@ var Pagination = react.forwardRef(
323
213
  ref,
324
214
  "data-slot": "pagination",
325
215
  "aria-label": ariaLabel,
326
- className: chunkWZ2GOU2J_js.cn("w-full", className),
216
+ className: chunkUOZYPWDZ_js.cn("w-full", className),
327
217
  onKeyDown: handleKeyDown,
328
218
  ...rest,
329
219
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
@@ -402,11 +292,12 @@ var Pagination = react.forwardRef(
402
292
  );
403
293
  Pagination.displayName = "Pagination";
404
294
 
295
+ Object.defineProperty(exports, "usePagination", {
296
+ enumerable: true,
297
+ get: function () { return chunkJE3PD5ZA_js.usePagination; }
298
+ });
405
299
  exports.Pagination = Pagination;
406
- exports.buildPaginationItems = buildPaginationItems;
407
- exports.clampPage = clampPage;
408
300
  exports.paginationEllipsisVariants = paginationEllipsisVariants;
409
301
  exports.paginationListVariants = paginationListVariants;
410
- exports.usePagination = usePagination;
411
302
  //# sourceMappingURL=pagination.js.map
412
303
  //# sourceMappingURL=pagination.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/pagination/pagination-logic.ts","../../src/ui/pagination/use-pagination.ts","../../src/ui/pagination/variants.ts","../../src/ui/pagination/pagination.tsx"],"names":["useState","useCallback","useMemo","cva","forwardRef","Pagination","useId","cn","buttonVariants","jsx","jsxs"],"mappings":"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","file":"pagination.js","sourcesContent":["export type PaginationPageItem =\n | { type: \"page\"; value: number }\n | { type: \"ellipsis\"; key: string };\n\nexport type BuildPaginationItemsParams = {\n pageCount: number;\n currentPage: number;\n siblingCount: number;\n boundaryCount: number;\n};\n\n/**\n * Builds the ordered list of page numbers and ellipsis markers for a pagination control.\n *\n * Args:\n * pageCount: Total number of pages (must be >= 0).\n * currentPage: Active page index (1-based).\n * siblingCount: How many page buttons to show on each side of the current page.\n * boundaryCount: How many pages to pin at the start and end of the range.\n *\n * Returns:\n * A list of items suitable for rendering, e.g. [1, ellipsis, 4,5,6, ellipsis, 20].\n */\nexport function buildPaginationItems({\n pageCount,\n currentPage,\n siblingCount,\n boundaryCount,\n}: BuildPaginationItemsParams): PaginationPageItem[] {\n if (pageCount <= 0) {\n return [];\n }\n\n const safeBoundary = Math.max(1, boundaryCount);\n const safeSibling = Math.max(0, siblingCount);\n const current = clampPage(currentPage, pageCount);\n\n const totalNumbers = safeBoundary * 2 + safeSibling * 2 + 1;\n if (pageCount <= totalNumbers) {\n return range(1, pageCount).map((value) => ({ type: \"page\", value }));\n }\n\n const leftBoundaryEnd = safeBoundary;\n const rightBoundaryStart = pageCount - safeBoundary + 1;\n\n const siblingsStart = Math.max(current - safeSibling, leftBoundaryEnd + 1);\n const siblingsEnd = Math.min(current + safeSibling, rightBoundaryStart - 1);\n\n const pages = new Set<number>();\n for (let p = 1; p <= leftBoundaryEnd; p += 1) {\n pages.add(p);\n }\n for (let p = rightBoundaryStart; p <= pageCount; p += 1) {\n pages.add(p);\n }\n for (let p = siblingsStart; p <= siblingsEnd; p += 1) {\n pages.add(p);\n }\n\n const sorted = [...pages].sort((a, b) => a - b);\n const items: PaginationPageItem[] = [];\n\n for (let i = 0; i < sorted.length; i += 1) {\n const value = sorted[i];\n const prev = sorted[i - 1];\n if (i > 0 && prev !== undefined && value && value - prev > 1) {\n items.push({ type: \"ellipsis\", key: `gap-${prev}-${value}` });\n }\n items.push({ type: \"page\", value: value as number });\n }\n\n return items;\n}\n\nexport function clampPage(page: number, pageCount: number): number {\n if (pageCount <= 0) {\n return 1;\n }\n return Math.min(pageCount, Math.max(1, Math.floor(page)));\n}\n\nfunction range(from: number, to: number): number[] {\n const out: number[] = [];\n for (let i = from; i <= to; i += 1) {\n out.push(i);\n }\n return out;\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type { UsePaginationParams, UsePaginationResult } from \"./types\";\nimport { buildPaginationItems, clampPage } from \"./pagination-logic\";\n\nexport function usePagination({\n pageCount,\n page,\n defaultPage = 1,\n siblingCount = 1,\n boundaryCount = 1,\n onPageChange,\n}: UsePaginationParams): UsePaginationResult {\n const [internalPage, setInternalPage] = useState(() =>\n clampPage(defaultPage, pageCount),\n );\n\n const isControlled = page !== undefined;\n const currentPage = clampPage(isControlled ? page : internalPage, pageCount);\n\n const setPage = useCallback(\n (next: number) => {\n const clamped = clampPage(next, pageCount);\n if (!isControlled) {\n setInternalPage(clamped);\n }\n onPageChange?.(clamped);\n },\n [isControlled, onPageChange, pageCount],\n );\n\n const items = useMemo(\n () =>\n buildPaginationItems({\n pageCount,\n currentPage,\n siblingCount,\n boundaryCount,\n }),\n [boundaryCount, currentPage, pageCount, siblingCount],\n );\n\n const canGoPrev = pageCount > 0 && currentPage > 1;\n const canGoNext = pageCount > 0 && currentPage < pageCount;\n\n const goPrev = useCallback(() => {\n if (canGoPrev) {\n setPage(currentPage - 1);\n }\n }, [canGoPrev, currentPage, setPage]);\n\n const goNext = useCallback(() => {\n if (canGoNext) {\n setPage(currentPage + 1);\n }\n }, [canGoNext, currentPage, setPage]);\n\n return {\n currentPage,\n pageCount,\n items,\n setPage,\n goPrev,\n goNext,\n canGoPrev,\n canGoNext,\n };\n}\n","import { cva } from \"class-variance-authority\";\n\n/**\n * Layout and chrome for the page list cluster. Appearance and size keys align with\n * `components/ui/buttons/variants.ts` for consistent design-system tokens.\n */\nexport const paginationListVariants = cva(\n \"inline-flex flex-wrap items-center rounded-xl border p-1 ring-offset-slate-950\",\n {\n variants: {\n appearance: {\n default: \"border-white/10 bg-white/[0.03]\",\n secondary: \"border-white/10 bg-slate-900/40\",\n destructive: \"border-rose-500/25 bg-rose-950/20\",\n outline: \"border-white/15 bg-transparent\",\n ghost: \"border-transparent bg-transparent\",\n link: \"border-transparent bg-transparent\",\n glass: \"border-white/15 bg-white/5 backdrop-blur-md\",\n emerald: \"border-emerald-500/25 bg-emerald-950/20\",\n indigo: \"border-indigo-500/25 bg-indigo-950/20\",\n purple: \"border-purple-500/25 bg-purple-950/20\",\n pink: \"border-pink-500/25 bg-pink-950/20\",\n rose: \"border-rose-500/25 bg-rose-950/20\",\n sky: \"border-sky-500/25 bg-sky-950/20\",\n teal: \"border-teal-500/25 bg-teal-950/20\",\n yellow: \"border-yellow-500/25 bg-yellow-950/20\",\n orange: \"border-orange-500/25 bg-orange-950/20\",\n gray: \"border-gray-500/25 bg-gray-950/20\",\n amber: \"border-amber-500/25 bg-amber-950/20\",\n violet: \"border-violet-500/25 bg-violet-950/20\",\n \"gradient-blue\":\n \"border-blue-500/30 bg-gradient-to-r from-blue-950/30 to-purple-950/30\",\n \"gradient-green\":\n \"border-lime-500/30 bg-gradient-to-r from-green-950/30 to-lime-950/30\",\n \"gradient-red\":\n \"border-pink-500/30 bg-gradient-to-r from-red-950/30 to-pink-950/30\",\n \"gradient-yellow\":\n \"border-orange-500/30 bg-gradient-to-r from-yellow-950/30 to-orange-950/30\",\n \"gradient-purple\":\n \"border-pink-500/30 bg-gradient-to-r from-purple-950/30 to-pink-950/30\",\n \"gradient-teal\":\n \"border-cyan-500/30 bg-gradient-to-r from-teal-950/30 to-cyan-950/30\",\n \"gradient-indigo\":\n \"border-purple-500/30 bg-gradient-to-r from-indigo-950/30 to-purple-950/30\",\n \"gradient-pink\":\n \"border-rose-500/30 bg-gradient-to-r from-pink-950/30 to-rose-950/30\",\n \"gradient-orange\":\n \"border-orange-500/30 bg-gradient-to-r from-orange-950/30 to-red-950/30\",\n },\n size: {\n sm: \"gap-0.5\",\n md: \"gap-1\",\n lg: \"gap-1\",\n xl: \"gap-1.5\",\n \"2xl\": \"gap-1.5\",\n \"3xl\": \"gap-2\",\n \"4xl\": \"gap-2\",\n \"5xl\": \"gap-2\",\n \"6xl\": \"gap-2\",\n \"7xl\": \"gap-2.5\",\n \"8xl\": \"gap-2.5\",\n \"9xl\": \"gap-2.5\",\n \"10xl\": \"gap-3\",\n icon: \"gap-1\",\n },\n },\n defaultVariants: {\n appearance: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport const paginationEllipsisVariants = cva(\n \"inline-flex min-w-[2ch] select-none items-center justify-center px-1 font-medium text-slate-400\",\n {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n xl: \"text-base\",\n \"2xl\": \"text-lg\",\n \"3xl\": \"text-lg\",\n \"4xl\": \"text-xl\",\n \"5xl\": \"text-xl\",\n \"6xl\": \"text-xl\",\n \"7xl\": \"text-2xl\",\n \"8xl\": \"text-2xl\",\n \"9xl\": \"text-2xl\",\n \"10xl\": \"text-2xl\",\n icon: \"text-sm\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n","\"use client\";\n\nimport { forwardRef, useCallback, useId, type KeyboardEvent } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { buttonVariants } from \"../buttons/variants\";\n\nimport { clampPage } from \"./pagination-logic\";\nimport type { PaginationProps } from \"./types\";\nimport { usePagination } from \"./use-pagination\";\nimport { paginationEllipsisVariants, paginationListVariants } from \"./variants\";\n\nconst defaultPrevLabel = \"Previous page\";\nconst defaultNextLabel = \"Next page\";\nconst defaultEllipsisLabel = \"More pages\";\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n function Pagination(\n {\n className,\n appearance = \"default\",\n size = \"md\",\n pageCount,\n page,\n defaultPage = 1,\n onPageChange,\n siblingCount = 1,\n boundaryCount = 1,\n showPrevNext = true,\n prevLabel = defaultPrevLabel,\n nextLabel = defaultNextLabel,\n ellipsisLabel = defaultEllipsisLabel,\n getPageHref,\n \"aria-label\": ariaLabel = \"Pagination\",\n ...rest\n },\n ref,\n ) {\n const id = useId();\n const listId = `${id}-list`;\n\n const {\n currentPage,\n items,\n setPage,\n goPrev,\n goNext,\n canGoPrev,\n canGoNext,\n } = usePagination({\n pageCount,\n page,\n defaultPage,\n siblingCount,\n boundaryCount,\n onPageChange,\n });\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (pageCount <= 0) {\n return;\n }\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n if (canGoNext) {\n setPage(currentPage + 1);\n }\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (canGoPrev) {\n setPage(currentPage - 1);\n }\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setPage(1);\n } else if (event.key === \"End\") {\n event.preventDefault();\n setPage(pageCount);\n }\n },\n [canGoNext, canGoPrev, currentPage, pageCount, setPage],\n );\n\n if (pageCount <= 0) {\n return null;\n }\n\n const inactiveTriggerClass = cn(\n buttonVariants({ appearance: \"ghost\", size }),\n \"bg-white/[0.04] text-slate-200 hover:bg-white/10\",\n );\n\n const currentTriggerClass = buttonVariants({ appearance, size });\n\n const triggerFocusRing =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950\";\n\n const renderPageControl = (pageNumber: number) => {\n const isCurrent = pageNumber === currentPage;\n const href = getPageHref?.(pageNumber);\n const shared = cn(\n isCurrent ? currentTriggerClass : inactiveTriggerClass,\n \"min-w-[2.25ch] shrink-0\",\n triggerFocusRing,\n );\n\n if (href) {\n return (\n <a\n data-slot=\"pagination-trigger\"\n href={href}\n aria-label={`Page ${pageNumber}`}\n aria-current={isCurrent ? \"page\" : undefined}\n className={shared}\n >\n {pageNumber}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n data-slot=\"pagination-trigger\"\n aria-label={`Page ${pageNumber}`}\n aria-current={isCurrent ? \"page\" : undefined}\n className={shared}\n onClick={() => {\n if (!isCurrent) {\n setPage(pageNumber);\n }\n }}\n >\n {pageNumber}\n </button>\n );\n };\n\n const prevHref = getPageHref?.(clampPage(currentPage - 1, pageCount));\n const nextHref = getPageHref?.(clampPage(currentPage + 1, pageCount));\n\n const navTriggerClass = cn(\n buttonVariants({ appearance: \"outline\", size }),\n \"shrink-0 focus-visible: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 return (\n <nav\n ref={ref}\n data-slot=\"pagination\"\n aria-label={ariaLabel}\n className={cn(\"w-full\", className)}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n {showPrevNext ? (\n getPageHref && prevHref && canGoPrev ? (\n <a\n data-slot=\"pagination-prev\"\n aria-label={prevLabel}\n href={prevHref}\n className={navTriggerClass}\n >\n Prev\n </a>\n ) : (\n <button\n type=\"button\"\n data-slot=\"pagination-prev\"\n aria-label={prevLabel}\n disabled={!canGoPrev}\n className={navTriggerClass}\n onClick={goPrev}\n >\n Prev\n </button>\n )\n ) : null}\n\n <ul\n id={listId}\n data-slot=\"pagination-list\"\n className={paginationListVariants({ appearance, size })}\n >\n {items.map((item) => (\n <li\n key={item.type === \"page\" ? `page-${item.value}` : item.key}\n data-slot=\"pagination-item\"\n className=\"inline-flex items-center\"\n >\n {item.type === \"ellipsis\" ? (\n <span\n data-slot=\"pagination-ellipsis\"\n aria-hidden=\"true\"\n title={ellipsisLabel}\n className={paginationEllipsisVariants({ size })}\n >\n …\n </span>\n ) : (\n renderPageControl(item.value)\n )}\n </li>\n ))}\n </ul>\n\n {showPrevNext ? (\n getPageHref && nextHref && canGoNext ? (\n <a\n data-slot=\"pagination-next\"\n aria-label={nextLabel}\n href={nextHref}\n className={navTriggerClass}\n >\n Next\n </a>\n ) : (\n <button\n type=\"button\"\n data-slot=\"pagination-next\"\n aria-label={nextLabel}\n disabled={!canGoNext}\n className={navTriggerClass}\n onClick={goNext}\n >\n Next\n </button>\n )\n ) : null}\n </div>\n </nav>\n );\n },\n);\n\nPagination.displayName = \"Pagination\";\n"]}
1
+ {"version":3,"sources":["../../src/ui/pagination/variants.ts","../../src/ui/pagination/pagination.tsx"],"names":["cva","forwardRef","Pagination","useId","usePagination","useCallback","cn","buttonVariants","jsx","clampPage","jsxs"],"mappings":"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","file":"pagination.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\n/**\n * Layout and chrome for the page list cluster. Appearance and size keys align with\n * `components/ui/buttons/variants.ts` for consistent design-system tokens.\n */\nexport const paginationListVariants = cva(\n \"inline-flex flex-wrap items-center rounded-xl border p-1 ring-offset-slate-950\",\n {\n variants: {\n appearance: {\n default: \"border-white/10 bg-white/[0.03]\",\n secondary: \"border-white/10 bg-slate-900/40\",\n destructive: \"border-rose-500/25 bg-rose-950/20\",\n outline: \"border-white/15 bg-transparent\",\n ghost: \"border-transparent bg-transparent\",\n link: \"border-transparent bg-transparent\",\n glass: \"border-white/15 bg-white/5 backdrop-blur-md\",\n emerald: \"border-emerald-500/25 bg-emerald-950/20\",\n indigo: \"border-indigo-500/25 bg-indigo-950/20\",\n purple: \"border-purple-500/25 bg-purple-950/20\",\n pink: \"border-pink-500/25 bg-pink-950/20\",\n rose: \"border-rose-500/25 bg-rose-950/20\",\n sky: \"border-sky-500/25 bg-sky-950/20\",\n teal: \"border-teal-500/25 bg-teal-950/20\",\n yellow: \"border-yellow-500/25 bg-yellow-950/20\",\n orange: \"border-orange-500/25 bg-orange-950/20\",\n gray: \"border-gray-500/25 bg-gray-950/20\",\n amber: \"border-amber-500/25 bg-amber-950/20\",\n violet: \"border-violet-500/25 bg-violet-950/20\",\n \"gradient-blue\":\n \"border-blue-500/30 bg-gradient-to-r from-blue-950/30 to-purple-950/30\",\n \"gradient-green\":\n \"border-lime-500/30 bg-gradient-to-r from-green-950/30 to-lime-950/30\",\n \"gradient-red\":\n \"border-pink-500/30 bg-gradient-to-r from-red-950/30 to-pink-950/30\",\n \"gradient-yellow\":\n \"border-orange-500/30 bg-gradient-to-r from-yellow-950/30 to-orange-950/30\",\n \"gradient-purple\":\n \"border-pink-500/30 bg-gradient-to-r from-purple-950/30 to-pink-950/30\",\n \"gradient-teal\":\n \"border-cyan-500/30 bg-gradient-to-r from-teal-950/30 to-cyan-950/30\",\n \"gradient-indigo\":\n \"border-purple-500/30 bg-gradient-to-r from-indigo-950/30 to-purple-950/30\",\n \"gradient-pink\":\n \"border-rose-500/30 bg-gradient-to-r from-pink-950/30 to-rose-950/30\",\n \"gradient-orange\":\n \"border-orange-500/30 bg-gradient-to-r from-orange-950/30 to-red-950/30\",\n },\n size: {\n sm: \"gap-0.5\",\n md: \"gap-1\",\n lg: \"gap-1\",\n xl: \"gap-1.5\",\n \"2xl\": \"gap-1.5\",\n \"3xl\": \"gap-2\",\n \"4xl\": \"gap-2\",\n \"5xl\": \"gap-2\",\n \"6xl\": \"gap-2\",\n \"7xl\": \"gap-2.5\",\n \"8xl\": \"gap-2.5\",\n \"9xl\": \"gap-2.5\",\n \"10xl\": \"gap-3\",\n icon: \"gap-1\",\n },\n },\n defaultVariants: {\n appearance: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport const paginationEllipsisVariants = cva(\n \"inline-flex min-w-[2ch] select-none items-center justify-center px-1 font-medium text-slate-400\",\n {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n xl: \"text-base\",\n \"2xl\": \"text-lg\",\n \"3xl\": \"text-lg\",\n \"4xl\": \"text-xl\",\n \"5xl\": \"text-xl\",\n \"6xl\": \"text-xl\",\n \"7xl\": \"text-2xl\",\n \"8xl\": \"text-2xl\",\n \"9xl\": \"text-2xl\",\n \"10xl\": \"text-2xl\",\n icon: \"text-sm\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n","\"use client\";\n\nimport { forwardRef, useCallback, useId, type KeyboardEvent } from \"react\";\n\nimport { cn, clampPage } from \"../../lib/utils\";\nimport { buttonVariants } from \"../buttons/variants\";\n\nimport type { PaginationProps } from \"./types\";\nimport { usePagination } from \"../../hooks/usePagination\";\nimport { paginationEllipsisVariants, paginationListVariants } from \"./variants\";\n\nconst defaultPrevLabel = \"Previous page\";\nconst defaultNextLabel = \"Next page\";\nconst defaultEllipsisLabel = \"More pages\";\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n function Pagination(\n {\n className,\n appearance = \"default\",\n size = \"md\",\n pageCount,\n page,\n defaultPage = 1,\n onPageChange,\n siblingCount = 1,\n boundaryCount = 1,\n showPrevNext = true,\n prevLabel = defaultPrevLabel,\n nextLabel = defaultNextLabel,\n ellipsisLabel = defaultEllipsisLabel,\n getPageHref,\n \"aria-label\": ariaLabel = \"Pagination\",\n ...rest\n },\n ref,\n ) {\n const id = useId();\n const listId = `${id}-list`;\n\n const {\n currentPage,\n items,\n setPage,\n goPrev,\n goNext,\n canGoPrev,\n canGoNext,\n } = usePagination({\n pageCount,\n page,\n defaultPage,\n siblingCount,\n boundaryCount,\n onPageChange,\n });\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (pageCount <= 0) {\n return;\n }\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n if (canGoNext) {\n setPage(currentPage + 1);\n }\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (canGoPrev) {\n setPage(currentPage - 1);\n }\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setPage(1);\n } else if (event.key === \"End\") {\n event.preventDefault();\n setPage(pageCount);\n }\n },\n [canGoNext, canGoPrev, currentPage, pageCount, setPage],\n );\n\n if (pageCount <= 0) {\n return null;\n }\n\n const inactiveTriggerClass = cn(\n buttonVariants({ appearance: \"ghost\", size }),\n \"bg-white/[0.04] text-slate-200 hover:bg-white/10\",\n );\n\n const currentTriggerClass = buttonVariants({ appearance, size });\n\n const triggerFocusRing =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950\";\n\n const renderPageControl = (pageNumber: number) => {\n const isCurrent = pageNumber === currentPage;\n const href = getPageHref?.(pageNumber);\n const shared = cn(\n isCurrent ? currentTriggerClass : inactiveTriggerClass,\n \"min-w-[2.25ch] shrink-0\",\n triggerFocusRing,\n );\n\n if (href) {\n return (\n <a\n data-slot=\"pagination-trigger\"\n href={href}\n aria-label={`Page ${pageNumber}`}\n aria-current={isCurrent ? \"page\" : undefined}\n className={shared}\n >\n {pageNumber}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n data-slot=\"pagination-trigger\"\n aria-label={`Page ${pageNumber}`}\n aria-current={isCurrent ? \"page\" : undefined}\n className={shared}\n onClick={() => {\n if (!isCurrent) {\n setPage(pageNumber);\n }\n }}\n >\n {pageNumber}\n </button>\n );\n };\n\n const prevHref = getPageHref?.(clampPage(currentPage - 1, pageCount));\n const nextHref = getPageHref?.(clampPage(currentPage + 1, pageCount));\n\n const navTriggerClass = cn(\n buttonVariants({ appearance: \"outline\", size }),\n \"shrink-0 focus-visible: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 return (\n <nav\n ref={ref}\n data-slot=\"pagination\"\n aria-label={ariaLabel}\n className={cn(\"w-full\", className)}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n {showPrevNext ? (\n getPageHref && prevHref && canGoPrev ? (\n <a\n data-slot=\"pagination-prev\"\n aria-label={prevLabel}\n href={prevHref}\n className={navTriggerClass}\n >\n Prev\n </a>\n ) : (\n <button\n type=\"button\"\n data-slot=\"pagination-prev\"\n aria-label={prevLabel}\n disabled={!canGoPrev}\n className={navTriggerClass}\n onClick={goPrev}\n >\n Prev\n </button>\n )\n ) : null}\n\n <ul\n id={listId}\n data-slot=\"pagination-list\"\n className={paginationListVariants({ appearance, size })}\n >\n {items.map((item) => (\n <li\n key={item.type === \"page\" ? `page-${item.value}` : item.key}\n data-slot=\"pagination-item\"\n className=\"inline-flex items-center\"\n >\n {item.type === \"ellipsis\" ? (\n <span\n data-slot=\"pagination-ellipsis\"\n aria-hidden=\"true\"\n title={ellipsisLabel}\n className={paginationEllipsisVariants({ size })}\n >\n …\n </span>\n ) : (\n renderPageControl(item.value)\n )}\n </li>\n ))}\n </ul>\n\n {showPrevNext ? (\n getPageHref && nextHref && canGoNext ? (\n <a\n data-slot=\"pagination-next\"\n aria-label={nextLabel}\n href={nextHref}\n className={navTriggerClass}\n >\n Next\n </a>\n ) : (\n <button\n type=\"button\"\n data-slot=\"pagination-next\"\n aria-label={nextLabel}\n disabled={!canGoNext}\n className={navTriggerClass}\n onClick={goNext}\n >\n Next\n </button>\n )\n ) : null}\n </div>\n </nav>\n );\n },\n);\n\nPagination.displayName = \"Pagination\";\n"]}
@@ -1,121 +1,12 @@
1
1
  "use client";
2
+ import { usePagination } from '../chunk-TZ2JVWTZ.mjs';
3
+ export { usePagination } from '../chunk-TZ2JVWTZ.mjs';
2
4
  import { buttonVariants } from '../chunk-BORK3BJO.mjs';
3
- import { cn } from '../chunk-B23TPTVG.mjs';
4
- import { forwardRef, useId, useCallback, useState, useMemo } from 'react';
5
+ import { cn, clampPage } from '../chunk-DFEZH7TC.mjs';
6
+ import { forwardRef, useId, useCallback } from 'react';
5
7
  import { cva } from 'class-variance-authority';
6
8
  import { jsx, jsxs } from 'react/jsx-runtime';
7
9
 
8
- // src/ui/pagination/pagination-logic.ts
9
- function buildPaginationItems({
10
- pageCount,
11
- currentPage,
12
- siblingCount,
13
- boundaryCount
14
- }) {
15
- if (pageCount <= 0) {
16
- return [];
17
- }
18
- const safeBoundary = Math.max(1, boundaryCount);
19
- const safeSibling = Math.max(0, siblingCount);
20
- const current = clampPage(currentPage, pageCount);
21
- const totalNumbers = safeBoundary * 2 + safeSibling * 2 + 1;
22
- if (pageCount <= totalNumbers) {
23
- return range(1, pageCount).map((value) => ({ type: "page", value }));
24
- }
25
- const leftBoundaryEnd = safeBoundary;
26
- const rightBoundaryStart = pageCount - safeBoundary + 1;
27
- const siblingsStart = Math.max(current - safeSibling, leftBoundaryEnd + 1);
28
- const siblingsEnd = Math.min(current + safeSibling, rightBoundaryStart - 1);
29
- const pages = /* @__PURE__ */ new Set();
30
- for (let p = 1; p <= leftBoundaryEnd; p += 1) {
31
- pages.add(p);
32
- }
33
- for (let p = rightBoundaryStart; p <= pageCount; p += 1) {
34
- pages.add(p);
35
- }
36
- for (let p = siblingsStart; p <= siblingsEnd; p += 1) {
37
- pages.add(p);
38
- }
39
- const sorted = [...pages].sort((a, b) => a - b);
40
- const items = [];
41
- for (let i = 0; i < sorted.length; i += 1) {
42
- const value = sorted[i];
43
- const prev = sorted[i - 1];
44
- if (i > 0 && prev !== void 0 && value && value - prev > 1) {
45
- items.push({ type: "ellipsis", key: `gap-${prev}-${value}` });
46
- }
47
- items.push({ type: "page", value });
48
- }
49
- return items;
50
- }
51
- function clampPage(page, pageCount) {
52
- if (pageCount <= 0) {
53
- return 1;
54
- }
55
- return Math.min(pageCount, Math.max(1, Math.floor(page)));
56
- }
57
- function range(from, to) {
58
- const out = [];
59
- for (let i = from; i <= to; i += 1) {
60
- out.push(i);
61
- }
62
- return out;
63
- }
64
- function usePagination({
65
- pageCount,
66
- page,
67
- defaultPage = 1,
68
- siblingCount = 1,
69
- boundaryCount = 1,
70
- onPageChange
71
- }) {
72
- const [internalPage, setInternalPage] = useState(
73
- () => clampPage(defaultPage, pageCount)
74
- );
75
- const isControlled = page !== void 0;
76
- const currentPage = clampPage(isControlled ? page : internalPage, pageCount);
77
- const setPage = useCallback(
78
- (next) => {
79
- const clamped = clampPage(next, pageCount);
80
- if (!isControlled) {
81
- setInternalPage(clamped);
82
- }
83
- onPageChange?.(clamped);
84
- },
85
- [isControlled, onPageChange, pageCount]
86
- );
87
- const items = useMemo(
88
- () => buildPaginationItems({
89
- pageCount,
90
- currentPage,
91
- siblingCount,
92
- boundaryCount
93
- }),
94
- [boundaryCount, currentPage, pageCount, siblingCount]
95
- );
96
- const canGoPrev = pageCount > 0 && currentPage > 1;
97
- const canGoNext = pageCount > 0 && currentPage < pageCount;
98
- const goPrev = useCallback(() => {
99
- if (canGoPrev) {
100
- setPage(currentPage - 1);
101
- }
102
- }, [canGoPrev, currentPage, setPage]);
103
- const goNext = useCallback(() => {
104
- if (canGoNext) {
105
- setPage(currentPage + 1);
106
- }
107
- }, [canGoNext, currentPage, setPage]);
108
- return {
109
- currentPage,
110
- pageCount,
111
- items,
112
- setPage,
113
- goPrev,
114
- goNext,
115
- canGoPrev,
116
- canGoNext
117
- };
118
- }
119
10
  var paginationListVariants = cva(
120
11
  "inline-flex flex-wrap items-center rounded-xl border p-1 ring-offset-slate-950",
121
12
  {
@@ -400,6 +291,6 @@ var Pagination = forwardRef(
400
291
  );
401
292
  Pagination.displayName = "Pagination";
402
293
 
403
- export { Pagination, buildPaginationItems, clampPage, paginationEllipsisVariants, paginationListVariants, usePagination };
294
+ export { Pagination, paginationEllipsisVariants, paginationListVariants };
404
295
  //# sourceMappingURL=pagination.mjs.map
405
296
  //# sourceMappingURL=pagination.mjs.map