@lglab/compose-ui 0.28.0 → 0.30.0

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 (213) hide show
  1. package/dist/accordion.d.ts +49 -40
  2. package/dist/accordion.d.ts.map +1 -0
  3. package/dist/accordion.js +47 -45
  4. package/dist/accordion.js.map +1 -0
  5. package/dist/alert-dialog.d.ts +93 -87
  6. package/dist/alert-dialog.d.ts.map +1 -0
  7. package/dist/alert-dialog.js +94 -111
  8. package/dist/alert-dialog.js.map +1 -0
  9. package/dist/autocomplete.d.ts +99 -96
  10. package/dist/autocomplete.d.ts.map +1 -0
  11. package/dist/autocomplete.js +92 -116
  12. package/dist/autocomplete.js.map +1 -0
  13. package/dist/avatar.d.ts +56 -47
  14. package/dist/avatar.d.ts.map +1 -0
  15. package/dist/avatar.js +66 -79
  16. package/dist/avatar.js.map +1 -0
  17. package/dist/badge.d.ts +48 -42
  18. package/dist/badge.d.ts.map +1 -0
  19. package/dist/badge.js +195 -202
  20. package/dist/badge.js.map +1 -0
  21. package/dist/button.d.ts +26 -21
  22. package/dist/button.d.ts.map +1 -0
  23. package/dist/button.js +24 -24
  24. package/dist/button.js.map +1 -0
  25. package/dist/card.d.ts +105 -99
  26. package/dist/card.d.ts.map +1 -0
  27. package/dist/card.js +105 -66
  28. package/dist/card.js.map +1 -0
  29. package/dist/checkbox-group.d.ts +16 -12
  30. package/dist/checkbox-group.d.ts.map +1 -0
  31. package/dist/checkbox-group.js +18 -14
  32. package/dist/checkbox-group.js.map +1 -0
  33. package/dist/checkbox.d.ts +25 -19
  34. package/dist/checkbox.d.ts.map +1 -0
  35. package/dist/checkbox.js +26 -32
  36. package/dist/checkbox.js.map +1 -0
  37. package/dist/collapsible.d.ts +32 -26
  38. package/dist/collapsible.d.ts.map +1 -0
  39. package/dist/collapsible.js +32 -32
  40. package/dist/collapsible.js.map +1 -0
  41. package/dist/combobox.d.ts +191 -182
  42. package/dist/combobox.d.ts.map +1 -0
  43. package/dist/combobox.js +176 -250
  44. package/dist/combobox.js.map +1 -0
  45. package/dist/components/table/filters.d.ts +29 -0
  46. package/dist/components/table/filters.d.ts.map +1 -0
  47. package/dist/components/table/filters.js +47 -0
  48. package/dist/components/table/filters.js.map +1 -0
  49. package/dist/components/table/primitives.d.ts +93 -0
  50. package/dist/components/table/primitives.d.ts.map +1 -0
  51. package/dist/components/table/primitives.js +129 -0
  52. package/dist/components/table/primitives.js.map +1 -0
  53. package/dist/components/table/sort.js +17 -0
  54. package/dist/components/table/sort.js.map +1 -0
  55. package/dist/components/table/types.d.ts +101 -0
  56. package/dist/components/table/types.d.ts.map +1 -0
  57. package/dist/context-menu.d.ts +151 -138
  58. package/dist/context-menu.d.ts.map +1 -0
  59. package/dist/context-menu.js +151 -173
  60. package/dist/context-menu.js.map +1 -0
  61. package/dist/dialog.d.ts +101 -92
  62. package/dist/dialog.d.ts.map +1 -0
  63. package/dist/dialog.js +101 -105
  64. package/dist/dialog.js.map +1 -0
  65. package/dist/drawer.d.ts +109 -99
  66. package/dist/drawer.d.ts.map +1 -0
  67. package/dist/drawer.js +120 -111
  68. package/dist/drawer.js.map +1 -0
  69. package/dist/field.d.ts +61 -54
  70. package/dist/field.d.ts.map +1 -0
  71. package/dist/field.js +58 -27
  72. package/dist/field.js.map +1 -0
  73. package/dist/fieldset.d.ts +24 -19
  74. package/dist/fieldset.d.ts.map +1 -0
  75. package/dist/fieldset.js +26 -18
  76. package/dist/fieldset.js.map +1 -0
  77. package/dist/form.d.ts +16 -12
  78. package/dist/form.d.ts.map +1 -0
  79. package/dist/form.js +18 -8
  80. package/dist/form.js.map +1 -0
  81. package/dist/index.d.ts +48 -2115
  82. package/dist/index.js +47 -318
  83. package/dist/input.d.ts +16 -12
  84. package/dist/input.d.ts.map +1 -0
  85. package/dist/input.js +19 -9
  86. package/dist/input.js.map +1 -0
  87. package/dist/lib/arrow-svg.js +28 -0
  88. package/dist/lib/arrow-svg.js.map +1 -0
  89. package/dist/lib/button-variants.d.ts +6 -0
  90. package/dist/lib/button-variants.d.ts.map +1 -0
  91. package/dist/lib/button-variants.js +31 -0
  92. package/dist/lib/button-variants.js.map +1 -0
  93. package/dist/lib/control-variants.d.ts +6 -0
  94. package/dist/lib/control-variants.d.ts.map +1 -0
  95. package/dist/lib/control-variants.js +38 -0
  96. package/dist/lib/control-variants.js.map +1 -0
  97. package/dist/lib/form-variants.js +11 -0
  98. package/dist/lib/form-variants.js.map +1 -0
  99. package/dist/lib/tooltip-variants.d.ts +5 -0
  100. package/dist/lib/tooltip-variants.d.ts.map +1 -0
  101. package/dist/lib/tooltip-variants.js +36 -0
  102. package/dist/lib/tooltip-variants.js.map +1 -0
  103. package/dist/lib/utils.js +11 -0
  104. package/dist/lib/utils.js.map +1 -0
  105. package/dist/menu.d.ts +151 -138
  106. package/dist/menu.d.ts.map +1 -0
  107. package/dist/menu.js +151 -146
  108. package/dist/menu.js.map +1 -0
  109. package/dist/menubar.d.ts +168 -155
  110. package/dist/menubar.d.ts.map +1 -0
  111. package/dist/menubar.js +163 -169
  112. package/dist/menubar.js.map +1 -0
  113. package/dist/meter.d.ts +53 -43
  114. package/dist/meter.d.ts.map +1 -0
  115. package/dist/meter.js +59 -64
  116. package/dist/meter.js.map +1 -0
  117. package/dist/navigation-menu.d.ts +111 -96
  118. package/dist/navigation-menu.d.ts.map +1 -0
  119. package/dist/navigation-menu.js +117 -175
  120. package/dist/navigation-menu.js.map +1 -0
  121. package/dist/number-field.d.ts +64 -54
  122. package/dist/number-field.d.ts.map +1 -0
  123. package/dist/number-field.js +61 -69
  124. package/dist/number-field.js.map +1 -0
  125. package/dist/pagination.d.ts +184 -0
  126. package/dist/pagination.d.ts.map +1 -0
  127. package/dist/pagination.js +164 -0
  128. package/dist/pagination.js.map +1 -0
  129. package/dist/popover.d.ts +90 -82
  130. package/dist/popover.d.ts.map +1 -0
  131. package/dist/popover.js +85 -94
  132. package/dist/popover.js.map +1 -0
  133. package/dist/preview-card.d.ts +58 -54
  134. package/dist/preview-card.d.ts.map +1 -0
  135. package/dist/preview-card.js +57 -81
  136. package/dist/preview-card.js.map +1 -0
  137. package/dist/progress.d.ts +48 -40
  138. package/dist/progress.d.ts.map +1 -0
  139. package/dist/progress.js +46 -50
  140. package/dist/progress.js.map +1 -0
  141. package/dist/radio-group.d.ts +16 -12
  142. package/dist/radio-group.d.ts.map +1 -0
  143. package/dist/radio-group.js +18 -14
  144. package/dist/radio-group.js.map +1 -0
  145. package/dist/radio.d.ts +24 -19
  146. package/dist/radio.d.ts.map +1 -0
  147. package/dist/radio.js +25 -34
  148. package/dist/radio.js.map +1 -0
  149. package/dist/scroll-area.d.ts +57 -47
  150. package/dist/scroll-area.d.ts.map +1 -0
  151. package/dist/scroll-area.js +54 -56
  152. package/dist/scroll-area.js.map +1 -0
  153. package/dist/select.d.ts +146 -133
  154. package/dist/select.d.ts.map +1 -0
  155. package/dist/select.js +133 -167
  156. package/dist/select.js.map +1 -0
  157. package/dist/separator.d.ts +17 -12
  158. package/dist/separator.d.ts.map +1 -0
  159. package/dist/separator.js +19 -23
  160. package/dist/separator.js.map +1 -0
  161. package/dist/skeleton.d.ts +20 -0
  162. package/dist/skeleton.d.ts.map +1 -0
  163. package/dist/skeleton.js +27 -0
  164. package/dist/skeleton.js.map +1 -0
  165. package/dist/slider.d.ts +56 -47
  166. package/dist/slider.d.ts.map +1 -0
  167. package/dist/slider.js +53 -62
  168. package/dist/slider.js.map +1 -0
  169. package/dist/styles/default.css +15 -1
  170. package/dist/switch.d.ts +24 -19
  171. package/dist/switch.d.ts.map +1 -0
  172. package/dist/switch.js +23 -39
  173. package/dist/switch.js.map +1 -0
  174. package/dist/table/index.d.ts +5 -0
  175. package/dist/table/index.js +5 -0
  176. package/dist/table/use-table.d.ts +9 -0
  177. package/dist/table/use-table.d.ts.map +1 -0
  178. package/dist/table/use-table.js +256 -0
  179. package/dist/table/use-table.js.map +1 -0
  180. package/dist/tabs.d.ts +60 -49
  181. package/dist/tabs.d.ts.map +1 -0
  182. package/dist/tabs.js +76 -84
  183. package/dist/tabs.js.map +1 -0
  184. package/dist/textarea.d.ts +15 -11
  185. package/dist/textarea.d.ts.map +1 -0
  186. package/dist/textarea.js +18 -14
  187. package/dist/textarea.js.map +1 -0
  188. package/dist/toast.d.ts +87 -81
  189. package/dist/toast.d.ts.map +1 -0
  190. package/dist/toast.js +79 -150
  191. package/dist/toast.js.map +1 -0
  192. package/dist/toggle-group.d.ts +34 -29
  193. package/dist/toggle-group.d.ts.map +1 -0
  194. package/dist/toggle-group.js +31 -34
  195. package/dist/toggle-group.js.map +1 -0
  196. package/dist/toggle.d.ts +24 -21
  197. package/dist/toggle.d.ts.map +1 -0
  198. package/dist/toggle.js +22 -15
  199. package/dist/toggle.js.map +1 -0
  200. package/dist/toolbar.d.ts +64 -56
  201. package/dist/toolbar.d.ts.map +1 -0
  202. package/dist/toolbar.js +57 -68
  203. package/dist/toolbar.js.map +1 -0
  204. package/dist/tooltip.d.ts +67 -62
  205. package/dist/tooltip.d.ts.map +1 -0
  206. package/dist/tooltip.js +65 -90
  207. package/dist/tooltip.js.map +1 -0
  208. package/package.json +25 -13
  209. package/dist/arrow-svg-C6zQTvgS.js +0 -40
  210. package/dist/button-variants-CbFMPwc8.js +0 -33
  211. package/dist/control-variants-Bwep4n0y.js +0 -37
  212. package/dist/form-variants-LJ8gIbk0.js +0 -9
  213. package/dist/utils-B6yFEsav.js +0 -8
@@ -1,54 +1,64 @@
1
- import { JSX } from 'react/jsx-runtime';
2
- import { NumberField } from '@base-ui/react/number-field';
3
- import * as React_2 from 'react';
4
-
5
- export declare const NumberFieldDecrement: {
6
- ({ className, ...props }: NumberFieldDecrementProps): JSX.Element;
7
- displayName: string;
8
- };
9
-
10
- export declare type NumberFieldDecrementProps = React_2.ComponentProps<typeof NumberField.Decrement>;
11
-
12
- export declare const NumberFieldGroup: {
13
- ({ className, ...props }: NumberFieldGroupProps): JSX.Element;
14
- displayName: string;
15
- };
16
-
17
- export declare type NumberFieldGroupProps = React_2.ComponentProps<typeof NumberField.Group>;
18
-
19
- export declare const NumberFieldIncrement: {
20
- ({ className, ...props }: NumberFieldIncrementProps): JSX.Element;
21
- displayName: string;
22
- };
23
-
24
- export declare type NumberFieldIncrementProps = React_2.ComponentProps<typeof NumberField.Increment>;
25
-
26
- export declare const NumberFieldInput: {
27
- ({ className, ...props }: NumberFieldInputProps): JSX.Element;
28
- displayName: string;
29
- };
30
-
31
- export declare type NumberFieldInputProps = React_2.ComponentProps<typeof NumberField.Input>;
32
-
33
- export declare const NumberFieldRoot: {
34
- ({ className, ...props }: NumberFieldRootProps): JSX.Element;
35
- displayName: string;
36
- };
37
-
38
- export declare type NumberFieldRootProps = React_2.ComponentProps<typeof NumberField.Root>;
39
-
40
- export declare const NumberFieldScrubArea: {
41
- ({ className, ...props }: NumberFieldScrubAreaProps): JSX.Element;
42
- displayName: string;
43
- };
44
-
45
- export declare const NumberFieldScrubAreaCursor: {
46
- ({ className, ...props }: NumberFieldScrubAreaCursorProps): JSX.Element;
47
- displayName: string;
48
- };
49
-
50
- export declare type NumberFieldScrubAreaCursorProps = React_2.ComponentProps<typeof NumberField.ScrubAreaCursor>;
51
-
52
- export declare type NumberFieldScrubAreaProps = React_2.ComponentProps<typeof NumberField.ScrubArea>;
53
-
54
- export { }
1
+ import * as React from "react";
2
+ import * as react_jsx_runtime155 from "react/jsx-runtime";
3
+ import { NumberField } from "@base-ui/react/number-field";
4
+
5
+ //#region src/components/number-field.d.ts
6
+ type NumberFieldRootProps = React.ComponentProps<typeof NumberField.Root>;
7
+ declare const NumberFieldRoot: {
8
+ ({
9
+ className,
10
+ ...props
11
+ }: NumberFieldRootProps): react_jsx_runtime155.JSX.Element;
12
+ displayName: string;
13
+ };
14
+ type NumberFieldScrubAreaProps = React.ComponentProps<typeof NumberField.ScrubArea>;
15
+ declare const NumberFieldScrubArea: {
16
+ ({
17
+ className,
18
+ ...props
19
+ }: NumberFieldScrubAreaProps): react_jsx_runtime155.JSX.Element;
20
+ displayName: string;
21
+ };
22
+ type NumberFieldScrubAreaCursorProps = React.ComponentProps<typeof NumberField.ScrubAreaCursor>;
23
+ declare const NumberFieldScrubAreaCursor: {
24
+ ({
25
+ className,
26
+ ...props
27
+ }: NumberFieldScrubAreaCursorProps): react_jsx_runtime155.JSX.Element;
28
+ displayName: string;
29
+ };
30
+ type NumberFieldGroupProps = React.ComponentProps<typeof NumberField.Group>;
31
+ declare const NumberFieldGroup: {
32
+ ({
33
+ className,
34
+ ...props
35
+ }: NumberFieldGroupProps): react_jsx_runtime155.JSX.Element;
36
+ displayName: string;
37
+ };
38
+ type NumberFieldInputProps = React.ComponentProps<typeof NumberField.Input>;
39
+ declare const NumberFieldInput: {
40
+ ({
41
+ className,
42
+ ...props
43
+ }: NumberFieldInputProps): react_jsx_runtime155.JSX.Element;
44
+ displayName: string;
45
+ };
46
+ type NumberFieldDecrementProps = React.ComponentProps<typeof NumberField.Decrement>;
47
+ declare const NumberFieldDecrement: {
48
+ ({
49
+ className,
50
+ ...props
51
+ }: NumberFieldDecrementProps): react_jsx_runtime155.JSX.Element;
52
+ displayName: string;
53
+ };
54
+ type NumberFieldIncrementProps = React.ComponentProps<typeof NumberField.Increment>;
55
+ declare const NumberFieldIncrement: {
56
+ ({
57
+ className,
58
+ ...props
59
+ }: NumberFieldIncrementProps): react_jsx_runtime155.JSX.Element;
60
+ displayName: string;
61
+ };
62
+ //#endregion
63
+ export { NumberFieldDecrement, type NumberFieldDecrementProps, NumberFieldGroup, type NumberFieldGroupProps, NumberFieldIncrement, type NumberFieldIncrementProps, NumberFieldInput, type NumberFieldInputProps, NumberFieldRoot, type NumberFieldRootProps, NumberFieldScrubArea, NumberFieldScrubAreaCursor, type NumberFieldScrubAreaCursorProps, type NumberFieldScrubAreaProps };
64
+ //# sourceMappingURL=number-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.d.ts","names":[],"sources":["../src/components/number-field.tsx"],"sourcesContent":[],"mappings":";;;;;KAYK,oBAAA,GAAuB,KAAA,CAAM,sBAAsB,WAAA,CAAgB;cAElE;;;;KAA4C,uBAAoB,oBAAA,CAAA,GAAA,CAAA;EAFjE,WAAA,EAAA,MAAA;CAAoB;KAYpB,yBAAA,GAA4B,KAAA,CAAM,cAZiC,CAAA,OAYX,WAAA,CAAgB,SAZL,CAAA;cAclE,oBAd4B,EAAA;EAAc,CAAA;IAAA,SAAA;IAAA,GAAA;EAAA,CAAA,EAcO,yBAdP,CAAA,EAcgC,oBAAA,CAAA,GAAA,CAAA,OAdhC;EAE1C,WAAA,EAAA,MAEL;CAAA;KAyBI,+BAAA,GAAkC,KAAA,CAAM,sBACpC,WAAA,CAAgB;cAGnB,0BA/B4C,EAAA;;IAAoB,SAAA;IAAA,GAAA;EAAA,CAAA,EAkCnE,+BAlCmE,CAAA,EAkCpC,oBAAA,CAAA,GAAA,CAAA,OAlCoC;EAAA,WAAA,EAAA,MAAA;AAAA,CAAA;KAiDjE,qBAAA,GAAwB,KAAA,CAAM,cAvCL,CAAA,OAuC2B,WAAA,CAAgB,KAvC3C,CAAA;cAyCxB,gBAzCuE,EAAA;;IAA5C,SAAM;IAAA,GAAA;EAAA,CAAA,EAyCY,qBAzCZ,CAAA,EAyCiC,oBAAA,CAAA,GAAA,CAAA,OAzCjC;EAAc,WAAA,EAAA,MAAA;AAAA,CAAA;KAmDhD,qBAAA,GAAwB,KAAA,CAAM,cA1ClC,CAAA,OA0CwD,WAAA,CAAgB,KA1CxE,CAAA;cA4CK;;IAnDiD,SAAA;IAAA,GAAA;EAAA,CAAA,EAmDJ,qBAnDI,CAAA,EAmDiB,oBAAA,CAAA,GAAA,CAAA,OAnDjB;aAAyB,EAAA,MAAA;CAAA;AAAA,KAqE3E,yBAAA,GAA4B,KAAA,CAAM,cAtDH,CAAA,OAsDyB,WAAA,CAAgB,SAtDzC,CAAA;cAwD9B,oBAxD8B,EAAA;;IAC3B,SAAA;IAAA,GAAgB;EAAA,CAAA,EAuD8B,yBAvD9B,CAAA,EAuDuD,oBAAA,CAAA,GAAA,CAAA,OAvDvD;aADoB,EAAA,MAAA;CAAc;AAAA,KA0EtD,yBAAA,GAA4B,KAAA,CAAM,cA5DtC,CAAA,OA4D4D,WAAA,CAAgB,SA5D5E,CAAA;cA8DK,oBA9DL,EAAA;;;;KA8DsD,4BAAyB,oBAAA,CAAA,GAAA,CAAA;aArE7E,EAAA,MAAA"}
@@ -1,70 +1,62 @@
1
- "use client";
2
- import { jsx as t } from "react/jsx-runtime";
3
- import { NumberField as o } from "@base-ui/react/number-field";
4
- import { a as s } from "./form-variants-LJ8gIbk0.js";
5
- import { c as n } from "./utils-B6yFEsav.js";
6
- const u = ({ className: e, ...r }) => /* @__PURE__ */ t(o.Root, { className: n(s, e), ...r });
7
- u.displayName = "NumberFieldRoot";
8
- const m = ({ className: e, ...r }) => /* @__PURE__ */ t(
9
- o.ScrubArea,
10
- {
11
- className: n("cursor-ew-resize select-none", e),
12
- ...r
13
- }
14
- );
15
- m.displayName = "NumberFieldScrubArea";
16
- const a = ({
17
- className: e,
18
- ...r
19
- }) => /* @__PURE__ */ t(
20
- o.ScrubAreaCursor,
21
- {
22
- className: n("drop-shadow-[0_1px_1px_rgba(0,0,0,0.5)] filter", e),
23
- ...r
24
- }
25
- );
26
- a.displayName = "NumberFieldScrubAreaCursor";
27
- const d = ({ className: e, ...r }) => /* @__PURE__ */ t(o.Group, { className: n("flex", e), ...r });
28
- d.displayName = "NumberFieldGroup";
29
- const b = ({ className: e, ...r }) => /* @__PURE__ */ t(
30
- o.Input,
31
- {
32
- className: n(
33
- "h-9 w-24 border-t border-b border-border bg-transparent text-center text-base text-foreground tabular-nums outline-none",
34
- e
35
- ),
36
- ...r
37
- }
38
- );
39
- b.displayName = "NumberFieldInput";
40
- const c = ({ className: e, ...r }) => /* @__PURE__ */ t(
41
- o.Decrement,
42
- {
43
- className: n(
44
- "flex size-9 items-center justify-center rounded-l-md border border-border bg-background text-foreground select-none transition-colors hover:bg-muted active:bg-muted",
45
- e
46
- ),
47
- ...r
48
- }
49
- );
50
- c.displayName = "NumberFieldDecrement";
51
- const l = ({ className: e, ...r }) => /* @__PURE__ */ t(
52
- o.Increment,
53
- {
54
- className: n(
55
- "flex size-9 items-center justify-center rounded-r-md border border-border bg-background text-foreground select-none transition-colors hover:bg-muted active:bg-muted",
56
- e
57
- ),
58
- ...r
59
- }
60
- );
61
- l.displayName = "NumberFieldIncrement";
62
- export {
63
- c as NumberFieldDecrement,
64
- d as NumberFieldGroup,
65
- l as NumberFieldIncrement,
66
- b as NumberFieldInput,
67
- u as NumberFieldRoot,
68
- m as NumberFieldScrubArea,
69
- a as NumberFieldScrubAreaCursor
1
+ 'use client';
2
+
3
+ import { cn } from "./lib/utils.js";
4
+ import { fieldRootStyles } from "./lib/form-variants.js";
5
+ import "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ import { NumberField } from "@base-ui/react/number-field";
8
+
9
+ //#region src/components/number-field.tsx
10
+ const NumberFieldRoot = ({ className, ...props }) => {
11
+ return /* @__PURE__ */ jsx(NumberField.Root, {
12
+ className: cn(fieldRootStyles, className),
13
+ ...props
14
+ });
70
15
  };
16
+ NumberFieldRoot.displayName = "NumberFieldRoot";
17
+ const NumberFieldScrubArea = ({ className, ...props }) => {
18
+ return /* @__PURE__ */ jsx(NumberField.ScrubArea, {
19
+ className: cn("cursor-ew-resize select-none", className),
20
+ ...props
21
+ });
22
+ };
23
+ NumberFieldScrubArea.displayName = "NumberFieldScrubArea";
24
+ const NumberFieldScrubAreaCursor = ({ className, ...props }) => {
25
+ return /* @__PURE__ */ jsx(NumberField.ScrubAreaCursor, {
26
+ className: cn("drop-shadow-[0_1px_1px_rgba(0,0,0,0.5)] filter", className),
27
+ ...props
28
+ });
29
+ };
30
+ NumberFieldScrubAreaCursor.displayName = "NumberFieldScrubAreaCursor";
31
+ const NumberFieldGroup = ({ className, ...props }) => {
32
+ return /* @__PURE__ */ jsx(NumberField.Group, {
33
+ className: cn("flex", className),
34
+ ...props
35
+ });
36
+ };
37
+ NumberFieldGroup.displayName = "NumberFieldGroup";
38
+ const NumberFieldInput = ({ className, ...props }) => {
39
+ return /* @__PURE__ */ jsx(NumberField.Input, {
40
+ className: cn("h-9 w-24 border-t border-b border-border bg-transparent text-center text-base text-foreground tabular-nums outline-none", className),
41
+ ...props
42
+ });
43
+ };
44
+ NumberFieldInput.displayName = "NumberFieldInput";
45
+ const NumberFieldDecrement = ({ className, ...props }) => {
46
+ return /* @__PURE__ */ jsx(NumberField.Decrement, {
47
+ className: cn("flex size-9 items-center justify-center rounded-l-md border border-border bg-background text-foreground select-none transition-colors hover:bg-muted active:bg-muted", className),
48
+ ...props
49
+ });
50
+ };
51
+ NumberFieldDecrement.displayName = "NumberFieldDecrement";
52
+ const NumberFieldIncrement = ({ className, ...props }) => {
53
+ return /* @__PURE__ */ jsx(NumberField.Increment, {
54
+ className: cn("flex size-9 items-center justify-center rounded-r-md border border-border bg-background text-foreground select-none transition-colors hover:bg-muted active:bg-muted", className),
55
+ ...props
56
+ });
57
+ };
58
+ NumberFieldIncrement.displayName = "NumberFieldIncrement";
59
+
60
+ //#endregion
61
+ export { NumberFieldDecrement, NumberFieldGroup, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, NumberFieldScrubArea, NumberFieldScrubAreaCursor };
62
+ //# sourceMappingURL=number-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.js","names":["BaseNumberField"],"sources":["../src/components/number-field.tsx"],"sourcesContent":["'use client'\n\nimport { NumberField as BaseNumberField } from '@base-ui/react/number-field'\nimport * as React from 'react'\n\nimport { fieldRootStyles } from '../lib/form-variants'\nimport { cn } from '../lib/utils'\n\n// ============================================================================\n// NumberFieldRoot\n// ============================================================================\n\ntype NumberFieldRootProps = React.ComponentProps<typeof BaseNumberField.Root>\n\nconst NumberFieldRoot = ({ className, ...props }: NumberFieldRootProps) => {\n return <BaseNumberField.Root className={cn(fieldRootStyles, className)} {...props} />\n}\n\nNumberFieldRoot.displayName = 'NumberFieldRoot'\n\n// ============================================================================\n// NumberFieldScrubArea\n// ============================================================================\n\ntype NumberFieldScrubAreaProps = React.ComponentProps<typeof BaseNumberField.ScrubArea>\n\nconst NumberFieldScrubArea = ({ className, ...props }: NumberFieldScrubAreaProps) => {\n return (\n <BaseNumberField.ScrubArea\n className={cn('cursor-ew-resize select-none', className)}\n {...props}\n />\n )\n}\n\nNumberFieldScrubArea.displayName = 'NumberFieldScrubArea'\n\n// ============================================================================\n// NumberFieldScrubAreaCursor\n// ============================================================================\n\ntype NumberFieldScrubAreaCursorProps = React.ComponentProps<\n typeof BaseNumberField.ScrubAreaCursor\n>\n\nconst NumberFieldScrubAreaCursor = ({\n className,\n ...props\n}: NumberFieldScrubAreaCursorProps) => {\n return (\n <BaseNumberField.ScrubAreaCursor\n className={cn('drop-shadow-[0_1px_1px_rgba(0,0,0,0.5)] filter', className)}\n {...props}\n />\n )\n}\n\nNumberFieldScrubAreaCursor.displayName = 'NumberFieldScrubAreaCursor'\n\n// ============================================================================\n// NumberFieldGroup\n// ============================================================================\n\ntype NumberFieldGroupProps = React.ComponentProps<typeof BaseNumberField.Group>\n\nconst NumberFieldGroup = ({ className, ...props }: NumberFieldGroupProps) => {\n return <BaseNumberField.Group className={cn('flex', className)} {...props} />\n}\n\nNumberFieldGroup.displayName = 'NumberFieldGroup'\n\n// ============================================================================\n// NumberFieldInput\n// ============================================================================\n\ntype NumberFieldInputProps = React.ComponentProps<typeof BaseNumberField.Input>\n\nconst NumberFieldInput = ({ className, ...props }: NumberFieldInputProps) => {\n return (\n <BaseNumberField.Input\n className={cn(\n 'h-9 w-24 border-t border-b border-border bg-transparent text-center text-base text-foreground tabular-nums outline-none',\n className,\n )}\n {...props}\n />\n )\n}\n\nNumberFieldInput.displayName = 'NumberFieldInput'\n\n// ============================================================================\n// NumberFieldDecrement\n// ============================================================================\n\ntype NumberFieldDecrementProps = React.ComponentProps<typeof BaseNumberField.Decrement>\n\nconst NumberFieldDecrement = ({ className, ...props }: NumberFieldDecrementProps) => {\n return (\n <BaseNumberField.Decrement\n className={cn(\n 'flex size-9 items-center justify-center rounded-l-md border border-border bg-background text-foreground select-none transition-colors hover:bg-muted active:bg-muted',\n className,\n )}\n {...props}\n />\n )\n}\n\nNumberFieldDecrement.displayName = 'NumberFieldDecrement'\n\n// ============================================================================\n// NumberFieldIncrement\n// ============================================================================\n\ntype NumberFieldIncrementProps = React.ComponentProps<typeof BaseNumberField.Increment>\n\nconst NumberFieldIncrement = ({ className, ...props }: NumberFieldIncrementProps) => {\n return (\n <BaseNumberField.Increment\n className={cn(\n 'flex size-9 items-center justify-center rounded-r-md border border-border bg-background text-foreground select-none transition-colors hover:bg-muted active:bg-muted',\n className,\n )}\n {...props}\n />\n )\n}\n\nNumberFieldIncrement.displayName = 'NumberFieldIncrement'\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n NumberFieldRoot,\n NumberFieldScrubArea,\n NumberFieldScrubAreaCursor,\n NumberFieldGroup,\n NumberFieldInput,\n NumberFieldDecrement,\n NumberFieldIncrement,\n}\n\nexport type {\n NumberFieldRootProps,\n NumberFieldScrubAreaProps,\n NumberFieldScrubAreaCursorProps,\n NumberFieldGroupProps,\n NumberFieldInputProps,\n NumberFieldDecrementProps,\n NumberFieldIncrementProps,\n}\n"],"mappings":";;;;;;;;;AAcA,MAAM,mBAAmB,EAAE,WAAW,GAAG,YAAkC;AACzE,QAAO,oBAACA,YAAgB;EAAK,WAAW,GAAG,iBAAiB,UAAU;EAAE,GAAI;GAAS;;AAGvF,gBAAgB,cAAc;AAQ9B,MAAM,wBAAwB,EAAE,WAAW,GAAG,YAAuC;AACnF,QACE,oBAACA,YAAgB;EACf,WAAW,GAAG,gCAAgC,UAAU;EACxD,GAAI;GACJ;;AAIN,qBAAqB,cAAc;AAUnC,MAAM,8BAA8B,EAClC,WACA,GAAG,YACkC;AACrC,QACE,oBAACA,YAAgB;EACf,WAAW,GAAG,kDAAkD,UAAU;EAC1E,GAAI;GACJ;;AAIN,2BAA2B,cAAc;AAQzC,MAAM,oBAAoB,EAAE,WAAW,GAAG,YAAmC;AAC3E,QAAO,oBAACA,YAAgB;EAAM,WAAW,GAAG,QAAQ,UAAU;EAAE,GAAI;GAAS;;AAG/E,iBAAiB,cAAc;AAQ/B,MAAM,oBAAoB,EAAE,WAAW,GAAG,YAAmC;AAC3E,QACE,oBAACA,YAAgB;EACf,WAAW,GACT,2HACA,UACD;EACD,GAAI;GACJ;;AAIN,iBAAiB,cAAc;AAQ/B,MAAM,wBAAwB,EAAE,WAAW,GAAG,YAAuC;AACnF,QACE,oBAACA,YAAgB;EACf,WAAW,GACT,wKACA,UACD;EACD,GAAI;GACJ;;AAIN,qBAAqB,cAAc;AAQnC,MAAM,wBAAwB,EAAE,WAAW,GAAG,YAAuC;AACnF,QACE,oBAACA,YAAgB;EACf,WAAW,GACT,wKACA,UACD;EACD,GAAI;GACJ;;AAIN,qBAAqB,cAAc"}
@@ -0,0 +1,184 @@
1
+ import { ControlSize, ControlVariant } from "./lib/control-variants.js";
2
+ import * as React from "react";
3
+ import * as react_jsx_runtime82 from "react/jsx-runtime";
4
+
5
+ //#region src/components/pagination.d.ts
6
+ type PaginationPage = number | 'ellipsis';
7
+ type UsePaginationOptions = {
8
+ /** Current active page (1-indexed) */
9
+ currentPage: number;
10
+ /** Total number of pages */
11
+ totalPages: number;
12
+ /** Number of pages to show on each side of current page (default: 1) */
13
+ siblingCount?: number;
14
+ /** Callback when page changes */
15
+ onPageChange: (page: number) => void;
16
+ /** Current page size */
17
+ pageSize?: number;
18
+ /** Available page size options (default: [10, 25, 50, 100]) */
19
+ pageSizeOptions?: number[];
20
+ /** Callback when page size changes */
21
+ onPageSizeChange?: (pageSize: number) => void;
22
+ };
23
+ type UsePaginationReturn = {
24
+ /** Array of page numbers and 'ellipsis' markers */
25
+ pages: PaginationPage[];
26
+ /** Current active page */
27
+ currentPage: number;
28
+ /** Total number of pages */
29
+ totalPages: number;
30
+ /** Whether navigation to next page is possible */
31
+ canGoNext: boolean;
32
+ /** Whether navigation to previous page is possible */
33
+ canGoPrevious: boolean;
34
+ /** Navigate to a specific page */
35
+ goToPage: (page: number) => void;
36
+ /** Navigate to the next page */
37
+ goToNext: () => void;
38
+ /** Navigate to the previous page */
39
+ goToPrevious: () => void;
40
+ /** Navigate to the first page */
41
+ goToFirst: () => void;
42
+ /** Navigate to the last page */
43
+ goToLast: () => void;
44
+ /** Current page size */
45
+ pageSize: number;
46
+ /** Available page size options */
47
+ pageSizeOptions: number[];
48
+ /** Set page size (calls onPageSizeChange if provided) */
49
+ setPageSize: (size: number) => void;
50
+ };
51
+ declare function usePagination({
52
+ currentPage,
53
+ totalPages,
54
+ siblingCount,
55
+ onPageChange,
56
+ pageSize,
57
+ pageSizeOptions,
58
+ onPageSizeChange
59
+ }: UsePaginationOptions): UsePaginationReturn;
60
+ type PaginationRootProps = React.ComponentProps<'nav'>;
61
+ declare const PaginationRoot: {
62
+ ({
63
+ className,
64
+ ...props
65
+ }: PaginationRootProps): react_jsx_runtime82.JSX.Element;
66
+ displayName: string;
67
+ };
68
+ type PaginationContentProps = React.ComponentProps<'ul'>;
69
+ declare const PaginationContent: {
70
+ ({
71
+ className,
72
+ ...props
73
+ }: PaginationContentProps): react_jsx_runtime82.JSX.Element;
74
+ displayName: string;
75
+ };
76
+ type PaginationItemProps = React.ComponentProps<'li'>;
77
+ declare const PaginationItem: {
78
+ ({
79
+ className,
80
+ ...props
81
+ }: PaginationItemProps): react_jsx_runtime82.JSX.Element;
82
+ displayName: string;
83
+ };
84
+ type PaginationButtonProps = React.ComponentProps<'button'> & {
85
+ /** Whether this button represents the current active page */
86
+ isActive?: boolean;
87
+ /** Visual style of the button */
88
+ variant?: ControlVariant;
89
+ /** Size of the button */
90
+ size?: ControlSize;
91
+ };
92
+ declare const PaginationButton: {
93
+ ({
94
+ className,
95
+ isActive,
96
+ variant,
97
+ size,
98
+ ...props
99
+ }: PaginationButtonProps): react_jsx_runtime82.JSX.Element;
100
+ displayName: string;
101
+ };
102
+ type PaginationPreviousProps = React.ComponentProps<'button'> & {
103
+ /** Visual style of the button */
104
+ variant?: ControlVariant;
105
+ /** Size of the button */
106
+ size?: ControlSize;
107
+ };
108
+ declare const PaginationPrevious: {
109
+ ({
110
+ className,
111
+ disabled,
112
+ variant,
113
+ size,
114
+ children,
115
+ ...props
116
+ }: PaginationPreviousProps): react_jsx_runtime82.JSX.Element;
117
+ displayName: string;
118
+ };
119
+ type PaginationNextProps = React.ComponentProps<'button'> & {
120
+ /** Visual style of the button */
121
+ variant?: ControlVariant;
122
+ /** Size of the button */
123
+ size?: ControlSize;
124
+ };
125
+ declare const PaginationNext: {
126
+ ({
127
+ className,
128
+ disabled,
129
+ variant,
130
+ size,
131
+ children,
132
+ ...props
133
+ }: PaginationNextProps): react_jsx_runtime82.JSX.Element;
134
+ displayName: string;
135
+ };
136
+ type PaginationFirstProps = React.ComponentProps<'button'> & {
137
+ /** Visual style of the button */
138
+ variant?: ControlVariant;
139
+ /** Size of the button */
140
+ size?: ControlSize;
141
+ };
142
+ declare const PaginationFirst: {
143
+ ({
144
+ className,
145
+ disabled,
146
+ variant,
147
+ size,
148
+ children,
149
+ ...props
150
+ }: PaginationFirstProps): react_jsx_runtime82.JSX.Element;
151
+ displayName: string;
152
+ };
153
+ type PaginationLastProps = React.ComponentProps<'button'> & {
154
+ /** Visual style of the button */
155
+ variant?: ControlVariant;
156
+ /** Size of the button */
157
+ size?: ControlSize;
158
+ };
159
+ declare const PaginationLast: {
160
+ ({
161
+ className,
162
+ disabled,
163
+ variant,
164
+ size,
165
+ children,
166
+ ...props
167
+ }: PaginationLastProps): react_jsx_runtime82.JSX.Element;
168
+ displayName: string;
169
+ };
170
+ type PaginationEllipsisProps = React.ComponentProps<'span'> & {
171
+ /** Size of the ellipsis container */
172
+ size?: ControlSize;
173
+ };
174
+ declare const PaginationEllipsis: {
175
+ ({
176
+ className,
177
+ size,
178
+ ...props
179
+ }: PaginationEllipsisProps): react_jsx_runtime82.JSX.Element;
180
+ displayName: string;
181
+ };
182
+ //#endregion
183
+ export { PaginationButton, type PaginationButtonProps, PaginationContent, type PaginationContentProps, PaginationEllipsis, type PaginationEllipsisProps, PaginationFirst, type PaginationFirstProps, PaginationItem, type PaginationItemProps, PaginationLast, type PaginationLastProps, PaginationNext, type PaginationNextProps, type PaginationPage, PaginationPrevious, type PaginationPreviousProps, PaginationRoot, type PaginationRootProps, type UsePaginationOptions, type UsePaginationReturn, usePagination };
184
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","names":[],"sources":["../src/components/pagination.tsx"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ 'use client';
2
+
3
+ import { cn } from "./lib/utils.js";
4
+ import { controlVariants } from "./lib/control-variants.js";
5
+ import * as React from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+
8
+ //#region src/components/pagination.tsx
9
+ const DEFAULT_PAGE_SIZE_OPTIONS = [
10
+ 10,
11
+ 25,
12
+ 50,
13
+ 100
14
+ ];
15
+ /**
16
+ * Generate page numbers with ellipsis for pagination display
17
+ */
18
+ function computePageRange(currentPage, totalPages, siblingCount) {
19
+ if (totalPages <= 1) return [1];
20
+ if (totalPages <= 7) return Array.from({ length: totalPages }, (_, i) => i + 1);
21
+ const result = [];
22
+ const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);
23
+ const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);
24
+ const shouldShowLeftEllipsis = leftSiblingIndex > 2;
25
+ const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1;
26
+ result.push(1);
27
+ if (shouldShowLeftEllipsis) result.push("ellipsis");
28
+ for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) if (i !== 1 && i !== totalPages) result.push(i);
29
+ if (shouldShowRightEllipsis) result.push("ellipsis");
30
+ if (totalPages > 1) result.push(totalPages);
31
+ return result;
32
+ }
33
+ function usePagination({ currentPage, totalPages, siblingCount = 1, onPageChange, pageSize = DEFAULT_PAGE_SIZE_OPTIONS[0], pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS, onPageSizeChange }) {
34
+ const pages = React.useMemo(() => computePageRange(currentPage, totalPages, siblingCount), [
35
+ currentPage,
36
+ totalPages,
37
+ siblingCount
38
+ ]);
39
+ const setPageSize = React.useCallback((size) => {
40
+ onPageSizeChange?.(size);
41
+ }, [onPageSizeChange]);
42
+ return {
43
+ pages,
44
+ currentPage,
45
+ totalPages,
46
+ canGoNext: currentPage < totalPages,
47
+ canGoPrevious: currentPage > 1,
48
+ goToPage: onPageChange,
49
+ goToNext: () => onPageChange(Math.min(currentPage + 1, totalPages)),
50
+ goToPrevious: () => onPageChange(Math.max(currentPage - 1, 1)),
51
+ goToFirst: () => onPageChange(1),
52
+ goToLast: () => onPageChange(totalPages),
53
+ pageSize,
54
+ pageSizeOptions,
55
+ setPageSize
56
+ };
57
+ }
58
+ const PaginationRoot = ({ className, ...props }) => {
59
+ return /* @__PURE__ */ jsx("nav", {
60
+ "aria-label": "pagination",
61
+ className,
62
+ ...props
63
+ });
64
+ };
65
+ PaginationRoot.displayName = "PaginationRoot";
66
+ const PaginationContent = ({ className, ...props }) => {
67
+ return /* @__PURE__ */ jsx("ul", {
68
+ role: "list",
69
+ className: cn("flex flex-row flex-wrap items-center gap-1 w-fit", className),
70
+ ...props
71
+ });
72
+ };
73
+ PaginationContent.displayName = "PaginationContent";
74
+ const PaginationItem = ({ className, ...props }) => {
75
+ return /* @__PURE__ */ jsx("li", {
76
+ className: cn("", className),
77
+ ...props
78
+ });
79
+ };
80
+ PaginationItem.displayName = "PaginationItem";
81
+ const PaginationButton = ({ className, isActive, variant, size = "icon-sm", ...props }) => {
82
+ return /* @__PURE__ */ jsx("button", {
83
+ type: "button",
84
+ "aria-current": isActive ? "page" : void 0,
85
+ className: cn(controlVariants({
86
+ variant,
87
+ size
88
+ }), className),
89
+ ...props
90
+ });
91
+ };
92
+ PaginationButton.displayName = "PaginationButton";
93
+ const PaginationPrevious = ({ className, disabled, variant, size = "icon-sm", children, ...props }) => {
94
+ return /* @__PURE__ */ jsx("button", {
95
+ type: "button",
96
+ "aria-label": "Go to previous page",
97
+ "aria-disabled": disabled || void 0,
98
+ disabled,
99
+ className: cn(controlVariants({
100
+ variant,
101
+ size
102
+ }), disabled && "pointer-events-none opacity-50", className),
103
+ ...props,
104
+ children
105
+ });
106
+ };
107
+ PaginationPrevious.displayName = "PaginationPrevious";
108
+ const PaginationNext = ({ className, disabled, variant, size = "icon-sm", children, ...props }) => {
109
+ return /* @__PURE__ */ jsx("button", {
110
+ type: "button",
111
+ "aria-label": "Go to next page",
112
+ "aria-disabled": disabled || void 0,
113
+ disabled,
114
+ className: cn(controlVariants({
115
+ variant,
116
+ size
117
+ }), disabled && "pointer-events-none opacity-50", className),
118
+ ...props,
119
+ children
120
+ });
121
+ };
122
+ PaginationNext.displayName = "PaginationNext";
123
+ const PaginationFirst = ({ className, disabled, variant, size = "icon-sm", children, ...props }) => {
124
+ return /* @__PURE__ */ jsx("button", {
125
+ type: "button",
126
+ "aria-label": "Go to first page",
127
+ "aria-disabled": disabled || void 0,
128
+ disabled,
129
+ className: cn(controlVariants({
130
+ variant,
131
+ size
132
+ }), disabled && "pointer-events-none opacity-50", className),
133
+ ...props,
134
+ children
135
+ });
136
+ };
137
+ PaginationFirst.displayName = "PaginationFirst";
138
+ const PaginationLast = ({ className, disabled, variant, size = "icon-sm", children, ...props }) => {
139
+ return /* @__PURE__ */ jsx("button", {
140
+ type: "button",
141
+ "aria-label": "Go to last page",
142
+ "aria-disabled": disabled || void 0,
143
+ disabled,
144
+ className: cn(controlVariants({
145
+ variant,
146
+ size
147
+ }), disabled && "pointer-events-none opacity-50", className),
148
+ ...props,
149
+ children
150
+ });
151
+ };
152
+ PaginationLast.displayName = "PaginationLast";
153
+ const PaginationEllipsis = ({ className, size = "icon-sm", ...props }) => {
154
+ return /* @__PURE__ */ jsx("span", {
155
+ "aria-hidden": "true",
156
+ className: cn(controlVariants({ size }), "border-transparent bg-transparent shadow-none", className),
157
+ ...props
158
+ });
159
+ };
160
+ PaginationEllipsis.displayName = "PaginationEllipsis";
161
+
162
+ //#endregion
163
+ export { PaginationButton, PaginationContent, PaginationEllipsis, PaginationFirst, PaginationItem, PaginationLast, PaginationNext, PaginationPrevious, PaginationRoot, usePagination };
164
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","names":[],"sources":["../src/components/pagination.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\n\nimport {\n type ControlSize,\n type ControlVariant,\n controlVariants,\n} from '../lib/control-variants'\nimport { cn } from '../lib/utils'\n\n// ============================================================================\n// usePagination Hook\n// ============================================================================\n\ntype PaginationPage = number | 'ellipsis'\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100]\n\ntype UsePaginationOptions = {\n /** Current active page (1-indexed) */\n currentPage: number\n /** Total number of pages */\n totalPages: number\n /** Number of pages to show on each side of current page (default: 1) */\n siblingCount?: number\n /** Callback when page changes */\n onPageChange: (page: number) => void\n /** Current page size */\n pageSize?: number\n /** Available page size options (default: [10, 25, 50, 100]) */\n pageSizeOptions?: number[]\n /** Callback when page size changes */\n onPageSizeChange?: (pageSize: number) => void\n}\n\ntype UsePaginationReturn = {\n /** Array of page numbers and 'ellipsis' markers */\n pages: PaginationPage[]\n /** Current active page */\n currentPage: number\n /** Total number of pages */\n totalPages: number\n /** Whether navigation to next page is possible */\n canGoNext: boolean\n /** Whether navigation to previous page is possible */\n canGoPrevious: boolean\n /** Navigate to a specific page */\n goToPage: (page: number) => void\n /** Navigate to the next page */\n goToNext: () => void\n /** Navigate to the previous page */\n goToPrevious: () => void\n /** Navigate to the first page */\n goToFirst: () => void\n /** Navigate to the last page */\n goToLast: () => void\n /** Current page size */\n pageSize: number\n /** Available page size options */\n pageSizeOptions: number[]\n /** Set page size (calls onPageSizeChange if provided) */\n setPageSize: (size: number) => void\n}\n\n/**\n * Generate page numbers with ellipsis for pagination display\n */\nfunction computePageRange(\n currentPage: number,\n totalPages: number,\n siblingCount: number,\n): PaginationPage[] {\n if (totalPages <= 1) return [1]\n if (totalPages <= 7) {\n // Show all pages if 7 or fewer\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const result: PaginationPage[] = []\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1)\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages)\n\n const shouldShowLeftEllipsis = leftSiblingIndex > 2\n const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1\n\n // Always show first page\n result.push(1)\n\n if (shouldShowLeftEllipsis) {\n result.push('ellipsis')\n }\n\n // Add pages around current page (excluding first and last which are handled separately)\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n if (i !== 1 && i !== totalPages) {\n result.push(i)\n }\n }\n\n if (shouldShowRightEllipsis) {\n result.push('ellipsis')\n }\n\n // Always show last page\n if (totalPages > 1) {\n result.push(totalPages)\n }\n\n return result\n}\n\nfunction usePagination({\n currentPage,\n totalPages,\n siblingCount = 1,\n onPageChange,\n pageSize = DEFAULT_PAGE_SIZE_OPTIONS[0],\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n onPageSizeChange,\n}: UsePaginationOptions): UsePaginationReturn {\n const pages = React.useMemo(\n () => computePageRange(currentPage, totalPages, siblingCount),\n [currentPage, totalPages, siblingCount],\n )\n\n const setPageSize = React.useCallback(\n (size: number) => {\n onPageSizeChange?.(size)\n },\n [onPageSizeChange],\n )\n\n return {\n pages,\n currentPage,\n totalPages,\n canGoNext: currentPage < totalPages,\n canGoPrevious: currentPage > 1,\n goToPage: onPageChange,\n goToNext: () => onPageChange(Math.min(currentPage + 1, totalPages)),\n goToPrevious: () => onPageChange(Math.max(currentPage - 1, 1)),\n goToFirst: () => onPageChange(1),\n goToLast: () => onPageChange(totalPages),\n pageSize,\n pageSizeOptions,\n setPageSize,\n }\n}\n\n// ============================================================================\n// PaginationRoot\n// ============================================================================\n\ntype PaginationRootProps = React.ComponentProps<'nav'>\n\nconst PaginationRoot = ({ className, ...props }: PaginationRootProps) => {\n return <nav aria-label='pagination' className={className} {...props} />\n}\n\nPaginationRoot.displayName = 'PaginationRoot'\n\n// ============================================================================\n// PaginationContent\n// ============================================================================\n\ntype PaginationContentProps = React.ComponentProps<'ul'>\n\nconst PaginationContent = ({ className, ...props }: PaginationContentProps) => {\n return (\n <ul\n role='list'\n className={cn('flex flex-row flex-wrap items-center gap-1 w-fit', className)}\n {...props}\n />\n )\n}\n\nPaginationContent.displayName = 'PaginationContent'\n\n// ============================================================================\n// PaginationItem\n// ============================================================================\n\ntype PaginationItemProps = React.ComponentProps<'li'>\n\nconst PaginationItem = ({ className, ...props }: PaginationItemProps) => {\n return <li className={cn('', className)} {...props} />\n}\n\nPaginationItem.displayName = 'PaginationItem'\n\n// ============================================================================\n// PaginationButton (page number button)\n// ============================================================================\n\ntype PaginationButtonProps = React.ComponentProps<'button'> & {\n /** Whether this button represents the current active page */\n isActive?: boolean\n /** Visual style of the button */\n variant?: ControlVariant\n /** Size of the button */\n size?: ControlSize\n}\n\nconst PaginationButton = ({\n className,\n isActive,\n variant,\n size = 'icon-sm',\n ...props\n}: PaginationButtonProps) => {\n return (\n <button\n type='button'\n aria-current={isActive ? 'page' : undefined}\n className={cn(controlVariants({ variant, size }), className)}\n {...props}\n />\n )\n}\n\nPaginationButton.displayName = 'PaginationButton'\n\n// ============================================================================\n// PaginationPrevious\n// ============================================================================\n\ntype PaginationPreviousProps = React.ComponentProps<'button'> & {\n /** Visual style of the button */\n variant?: ControlVariant\n /** Size of the button */\n size?: ControlSize\n}\n\nconst PaginationPrevious = ({\n className,\n disabled,\n variant,\n size = 'icon-sm',\n children,\n ...props\n}: PaginationPreviousProps) => {\n return (\n <button\n type='button'\n aria-label='Go to previous page'\n aria-disabled={disabled || undefined}\n disabled={disabled}\n className={cn(\n controlVariants({ variant, size }),\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nPaginationPrevious.displayName = 'PaginationPrevious'\n\n// ============================================================================\n// PaginationNext\n// ============================================================================\n\ntype PaginationNextProps = React.ComponentProps<'button'> & {\n /** Visual style of the button */\n variant?: ControlVariant\n /** Size of the button */\n size?: ControlSize\n}\n\nconst PaginationNext = ({\n className,\n disabled,\n variant,\n size = 'icon-sm',\n children,\n ...props\n}: PaginationNextProps) => {\n return (\n <button\n type='button'\n aria-label='Go to next page'\n aria-disabled={disabled || undefined}\n disabled={disabled}\n className={cn(\n controlVariants({ variant, size }),\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nPaginationNext.displayName = 'PaginationNext'\n\n// ============================================================================\n// PaginationFirst\n// ============================================================================\n\ntype PaginationFirstProps = React.ComponentProps<'button'> & {\n /** Visual style of the button */\n variant?: ControlVariant\n /** Size of the button */\n size?: ControlSize\n}\n\nconst PaginationFirst = ({\n className,\n disabled,\n variant,\n size = 'icon-sm',\n children,\n ...props\n}: PaginationFirstProps) => {\n return (\n <button\n type='button'\n aria-label='Go to first page'\n aria-disabled={disabled || undefined}\n disabled={disabled}\n className={cn(\n controlVariants({ variant, size }),\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nPaginationFirst.displayName = 'PaginationFirst'\n\n// ============================================================================\n// PaginationLast\n// ============================================================================\n\ntype PaginationLastProps = React.ComponentProps<'button'> & {\n /** Visual style of the button */\n variant?: ControlVariant\n /** Size of the button */\n size?: ControlSize\n}\n\nconst PaginationLast = ({\n className,\n disabled,\n variant,\n size = 'icon-sm',\n children,\n ...props\n}: PaginationLastProps) => {\n return (\n <button\n type='button'\n aria-label='Go to last page'\n aria-disabled={disabled || undefined}\n disabled={disabled}\n className={cn(\n controlVariants({ variant, size }),\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nPaginationLast.displayName = 'PaginationLast'\n\n// ============================================================================\n// PaginationEllipsis\n// ============================================================================\n\ntype PaginationEllipsisProps = React.ComponentProps<'span'> & {\n /** Size of the ellipsis container */\n size?: ControlSize\n}\n\nconst PaginationEllipsis = ({\n className,\n size = 'icon-sm',\n ...props\n}: PaginationEllipsisProps) => {\n return (\n <span\n aria-hidden='true'\n className={cn(\n controlVariants({ size }),\n 'border-transparent bg-transparent shadow-none',\n className,\n )}\n {...props}\n />\n )\n}\n\nPaginationEllipsis.displayName = 'PaginationEllipsis'\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n // eslint-disable-next-line react-refresh/only-export-components\n usePagination,\n PaginationRoot,\n PaginationContent,\n PaginationItem,\n PaginationButton,\n PaginationPrevious,\n PaginationNext,\n PaginationFirst,\n PaginationLast,\n PaginationEllipsis,\n}\n\nexport type {\n PaginationPage,\n UsePaginationOptions,\n UsePaginationReturn,\n PaginationRootProps,\n PaginationContentProps,\n PaginationItemProps,\n PaginationButtonProps,\n PaginationPreviousProps,\n PaginationNextProps,\n PaginationFirstProps,\n PaginationLastProps,\n PaginationEllipsisProps,\n}\n"],"mappings":"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"}