@uselets/ui 1.20.3 → 2.0.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 (295) hide show
  1. package/README.md +322 -425
  2. package/dist/as-child-Dxg3Xo1G.d.ts +41 -0
  3. package/dist/cli/uselets.mjs +5 -4
  4. package/dist/cli/uselets.mjs.map +1 -1
  5. package/dist/components/accordion.d.ts +12 -8
  6. package/dist/components/accordion.js +1 -1
  7. package/dist/components/accordion.js.map +1 -1
  8. package/dist/components/alert-dialog.d.ts +20 -15
  9. package/dist/components/alert-dialog.js +1 -1
  10. package/dist/components/alert-dialog.js.map +1 -1
  11. package/dist/components/alert.d.ts +1 -1
  12. package/dist/components/alert.js +1 -1
  13. package/dist/components/alert.js.map +1 -1
  14. package/dist/components/anchor.d.ts +3 -5
  15. package/dist/components/anchor.js +1 -1
  16. package/dist/components/anchor.js.map +1 -1
  17. package/dist/components/area-chart.d.ts +54 -0
  18. package/dist/components/area-chart.js +1 -1
  19. package/dist/components/area-chart.js.map +1 -1
  20. package/dist/components/avatar.d.ts +12 -7
  21. package/dist/components/avatar.js +1 -1
  22. package/dist/components/avatar.js.map +1 -1
  23. package/dist/components/badge.d.ts +3 -5
  24. package/dist/components/badge.js +1 -1
  25. package/dist/components/badge.js.map +1 -1
  26. package/dist/components/bar-chart.d.ts +48 -0
  27. package/dist/components/bar-chart.js +1 -1
  28. package/dist/components/bar-chart.js.map +1 -1
  29. package/dist/components/bottom-nav.d.ts +7 -3
  30. package/dist/components/bottom-nav.js +1 -1
  31. package/dist/components/bottom-nav.js.map +1 -1
  32. package/dist/components/breadcrumb.d.ts +3 -4
  33. package/dist/components/breadcrumb.js +1 -1
  34. package/dist/components/breadcrumb.js.map +1 -1
  35. package/dist/components/button-group.d.ts +3 -4
  36. package/dist/components/button-group.js +1 -1
  37. package/dist/components/button-group.js.map +1 -1
  38. package/dist/components/button.d.ts +8 -4
  39. package/dist/components/button.js +1 -1
  40. package/dist/components/button.js.map +1 -1
  41. package/dist/components/calendar.d.ts +4 -0
  42. package/dist/components/calendar.js +1 -1
  43. package/dist/components/calendar.js.map +1 -1
  44. package/dist/components/card.d.ts +4 -0
  45. package/dist/components/card.js +1 -1
  46. package/dist/components/card.js.map +1 -1
  47. package/dist/components/carousel.d.ts +11 -3
  48. package/dist/components/carousel.js +1 -1
  49. package/dist/components/carousel.js.map +1 -1
  50. package/dist/components/center.d.ts +1 -1
  51. package/dist/components/center.js +1 -1
  52. package/dist/components/center.js.map +1 -1
  53. package/dist/components/chart.js +4 -4
  54. package/dist/components/chart.js.map +1 -1
  55. package/dist/components/checkbox.d.ts +14 -4
  56. package/dist/components/checkbox.js +1 -1
  57. package/dist/components/checkbox.js.map +1 -1
  58. package/dist/components/code.js +1 -1
  59. package/dist/components/code.js.map +1 -1
  60. package/dist/components/collapsible.d.ts +8 -7
  61. package/dist/components/collapsible.js +1 -1
  62. package/dist/components/collapsible.js.map +1 -1
  63. package/dist/components/combobox.d.ts +48 -26
  64. package/dist/components/combobox.js +1 -1
  65. package/dist/components/combobox.js.map +1 -1
  66. package/dist/components/command.d.ts +16 -2
  67. package/dist/components/command.js +1 -1
  68. package/dist/components/command.js.map +1 -1
  69. package/dist/components/container.d.ts +1 -1
  70. package/dist/components/container.js +1 -1
  71. package/dist/components/container.js.map +1 -1
  72. package/dist/components/data-table.d.ts +177 -2
  73. package/dist/components/data-table.js +1 -1
  74. package/dist/components/data-table.js.map +1 -1
  75. package/dist/components/date-range-picker.d.ts +24 -2
  76. package/dist/components/date-range-picker.js +1 -1
  77. package/dist/components/date-range-picker.js.map +1 -1
  78. package/dist/components/dialog.d.ts +33 -15
  79. package/dist/components/dialog.js +1 -1
  80. package/dist/components/dialog.js.map +1 -1
  81. package/dist/components/direction.d.ts +7 -0
  82. package/dist/components/direction.js +1 -0
  83. package/dist/components/donut-chart.d.ts +12 -0
  84. package/dist/components/donut-chart.js +1 -1
  85. package/dist/components/donut-chart.js.map +1 -1
  86. package/dist/components/drawer.d.ts +33 -15
  87. package/dist/components/drawer.js +1 -1
  88. package/dist/components/drawer.js.map +1 -1
  89. package/dist/components/dropdown-menu.d.ts +36 -26
  90. package/dist/components/dropdown-menu.js +1 -1
  91. package/dist/components/dropdown-menu.js.map +1 -1
  92. package/dist/components/dropzone.d.ts +19 -0
  93. package/dist/components/dropzone.js +1 -1
  94. package/dist/components/dropzone.js.map +1 -1
  95. package/dist/components/empty.js +1 -1
  96. package/dist/components/empty.js.map +1 -1
  97. package/dist/components/field.d.ts +16 -4
  98. package/dist/components/field.js +1 -1
  99. package/dist/components/field.js.map +1 -1
  100. package/dist/components/flex.d.ts +1 -1
  101. package/dist/components/flex.js +1 -1
  102. package/dist/components/flex.js.map +1 -1
  103. package/dist/components/grid.d.ts +13 -0
  104. package/dist/components/grid.js +1 -1
  105. package/dist/components/grid.js.map +1 -1
  106. package/dist/components/group.d.ts +1 -1
  107. package/dist/components/group.js +1 -1
  108. package/dist/components/group.js.map +1 -1
  109. package/dist/components/heading.d.ts +3 -5
  110. package/dist/components/heading.js +1 -1
  111. package/dist/components/heading.js.map +1 -1
  112. package/dist/components/hover-card.d.ts +7 -6
  113. package/dist/components/hover-card.js +1 -1
  114. package/dist/components/hover-card.js.map +1 -1
  115. package/dist/components/input-group.d.ts +2 -2
  116. package/dist/components/input-group.js +1 -1
  117. package/dist/components/input-group.js.map +1 -1
  118. package/dist/components/input-otp.d.ts +4 -2
  119. package/dist/components/input-otp.js +1 -1
  120. package/dist/components/input-otp.js.map +1 -1
  121. package/dist/components/input.d.ts +1 -1
  122. package/dist/components/input.js +1 -1
  123. package/dist/components/input.js.map +1 -1
  124. package/dist/components/kbd.js +1 -1
  125. package/dist/components/kbd.js.map +1 -1
  126. package/dist/components/label.d.ts +3 -4
  127. package/dist/components/label.js +1 -1
  128. package/dist/components/label.js.map +1 -1
  129. package/dist/components/list.d.ts +8 -5
  130. package/dist/components/list.js +1 -1
  131. package/dist/components/list.js.map +1 -1
  132. package/dist/components/logo.d.ts +113 -0
  133. package/dist/components/logo.js +1 -1
  134. package/dist/components/marker.d.ts +4 -5
  135. package/dist/components/marker.js +1 -1
  136. package/dist/components/marker.js.map +1 -1
  137. package/dist/components/mask-input.d.ts +6 -0
  138. package/dist/components/mask-input.js +1 -1
  139. package/dist/components/mask-input.js.map +1 -1
  140. package/dist/components/native-select.d.ts +5 -1
  141. package/dist/components/native-select.js +1 -1
  142. package/dist/components/native-select.js.map +1 -1
  143. package/dist/components/navigation-menu.d.ts +19 -20
  144. package/dist/components/navigation-menu.js +1 -1
  145. package/dist/components/navigation-menu.js.map +1 -1
  146. package/dist/components/number-field.d.ts +18 -13
  147. package/dist/components/number-field.js +1 -1
  148. package/dist/components/number-field.js.map +1 -1
  149. package/dist/components/pagination.d.ts +9 -0
  150. package/dist/components/pagination.js +1 -1
  151. package/dist/components/pagination.js.map +1 -1
  152. package/dist/components/phone-input.d.ts +6 -0
  153. package/dist/components/phone-input.js +1 -1
  154. package/dist/components/phone-input.js.map +1 -1
  155. package/dist/components/pie-chart.d.ts +53 -0
  156. package/dist/components/pie-chart.js +1 -1
  157. package/dist/components/pie-chart.js.map +1 -1
  158. package/dist/components/popover.d.ts +13 -12
  159. package/dist/components/popover.js +1 -1
  160. package/dist/components/popover.js.map +1 -1
  161. package/dist/components/progress.d.ts +9 -3
  162. package/dist/components/progress.js +1 -1
  163. package/dist/components/progress.js.map +1 -1
  164. package/dist/components/radio-group.d.ts +20 -6
  165. package/dist/components/radio-group.js +1 -1
  166. package/dist/components/radio-group.js.map +1 -1
  167. package/dist/components/resizable.d.ts +1 -0
  168. package/dist/components/resizable.js +1 -1
  169. package/dist/components/resizable.js.map +1 -1
  170. package/dist/components/ring-progress.d.ts +9 -1
  171. package/dist/components/ring-progress.js +1 -1
  172. package/dist/components/ring-progress.js.map +1 -1
  173. package/dist/components/scroll-area.d.ts +3 -3
  174. package/dist/components/scroll-area.js +1 -1
  175. package/dist/components/scroll-area.js.map +1 -1
  176. package/dist/components/select.d.ts +25 -20
  177. package/dist/components/select.js +1 -1
  178. package/dist/components/select.js.map +1 -1
  179. package/dist/components/separator.d.ts +9 -4
  180. package/dist/components/separator.js +1 -1
  181. package/dist/components/separator.js.map +1 -1
  182. package/dist/components/sidebar.d.ts +63 -18
  183. package/dist/components/sidebar.js +1 -1
  184. package/dist/components/sidebar.js.map +1 -1
  185. package/dist/components/simple-grid.d.ts +7 -0
  186. package/dist/components/simple-grid.js +1 -1
  187. package/dist/components/simple-grid.js.map +1 -1
  188. package/dist/components/skeleton.d.ts +4 -0
  189. package/dist/components/skeleton.js +1 -1
  190. package/dist/components/skeleton.js.map +1 -1
  191. package/dist/components/slider.d.ts +2 -2
  192. package/dist/components/slider.js +1 -1
  193. package/dist/components/slider.js.map +1 -1
  194. package/dist/components/sonner.js +1 -1
  195. package/dist/components/sonner.js.map +1 -1
  196. package/dist/components/spinner.d.ts +1 -1
  197. package/dist/components/spinner.js +1 -1
  198. package/dist/components/spinner.js.map +1 -1
  199. package/dist/components/stack.d.ts +1 -1
  200. package/dist/components/stack.js +1 -1
  201. package/dist/components/stack.js.map +1 -1
  202. package/dist/components/stepper.d.ts +46 -25
  203. package/dist/components/stepper.js +1 -1
  204. package/dist/components/stepper.js.map +1 -1
  205. package/dist/components/switch.d.ts +17 -3
  206. package/dist/components/switch.js +1 -1
  207. package/dist/components/switch.js.map +1 -1
  208. package/dist/components/table.d.ts +10 -1
  209. package/dist/components/table.js +1 -1
  210. package/dist/components/table.js.map +1 -1
  211. package/dist/components/tabs.d.ts +14 -10
  212. package/dist/components/tabs.js +1 -1
  213. package/dist/components/tabs.js.map +1 -1
  214. package/dist/components/text.d.ts +3 -5
  215. package/dist/components/text.js +1 -1
  216. package/dist/components/text.js.map +1 -1
  217. package/dist/components/textarea.d.ts +1 -1
  218. package/dist/components/textarea.js +1 -1
  219. package/dist/components/textarea.js.map +1 -1
  220. package/dist/components/theme.d.ts +12 -0
  221. package/dist/components/theme.js +1 -1
  222. package/dist/components/theme.js.map +1 -1
  223. package/dist/components/timeline.d.ts +25 -1
  224. package/dist/components/timeline.js +1 -1
  225. package/dist/components/timeline.js.map +1 -1
  226. package/dist/components/toggle-group.d.ts +16 -6
  227. package/dist/components/toggle-group.js +1 -1
  228. package/dist/components/toggle-group.js.map +1 -1
  229. package/dist/components/toggle.d.ts +4 -4
  230. package/dist/components/toggle.js +1 -1
  231. package/dist/components/toggle.js.map +1 -1
  232. package/dist/components/tooltip.d.ts +15 -8
  233. package/dist/components/tooltip.js +1 -1
  234. package/dist/components/tooltip.js.map +1 -1
  235. package/dist/components/unstyled-button.d.ts +3 -5
  236. package/dist/components/unstyled-button.js +1 -1
  237. package/dist/components/unstyled-button.js.map +1 -1
  238. package/dist/components/visibility.d.ts +2 -0
  239. package/dist/components/visibility.js +1 -1
  240. package/dist/components/visibility.js.map +1 -1
  241. package/dist/hooks/use-breakpoint-value.d.ts +1 -0
  242. package/dist/hooks/use-breakpoint-value.js.map +1 -1
  243. package/dist/hooks/use-breakpoint.d.ts +1 -0
  244. package/dist/hooks/use-breakpoint.js.map +1 -1
  245. package/dist/hooks/use-disclosure.d.ts +3 -0
  246. package/dist/hooks/use-disclosure.js +1 -1
  247. package/dist/hooks/use-disclosure.js.map +1 -1
  248. package/dist/hooks/use-document-visibility.d.ts +1 -0
  249. package/dist/hooks/use-document-visibility.js.map +1 -1
  250. package/dist/hooks/use-hotkeys.d.ts +1 -1
  251. package/dist/hooks/use-hotkeys.js +1 -1
  252. package/dist/hooks/use-idle.d.ts +9 -0
  253. package/dist/hooks/use-idle.js.map +1 -1
  254. package/dist/hooks/use-interval.d.ts +1 -0
  255. package/dist/hooks/use-interval.js.map +1 -1
  256. package/dist/hooks/use-local-storage.d.ts +6 -0
  257. package/dist/hooks/use-local-storage.js +1 -1
  258. package/dist/hooks/use-local-storage.js.map +1 -1
  259. package/dist/hooks/use-mask.d.ts +1 -0
  260. package/dist/hooks/use-mask.js.map +1 -1
  261. package/dist/hooks/use-mobile.d.ts +1 -0
  262. package/dist/hooks/use-mobile.js.map +1 -1
  263. package/dist/index.d.ts +9 -7
  264. package/dist/index.js +1 -1
  265. package/dist/lib/as-child.d.ts +2 -0
  266. package/dist/lib/as-child.js +2 -0
  267. package/dist/lib/as-child.js.map +1 -0
  268. package/dist/lib/badge.js.map +1 -1
  269. package/dist/lib/button.js.map +1 -1
  270. package/dist/lib/color.js.map +1 -1
  271. package/dist/lib/compose-refs.js +1 -1
  272. package/dist/lib/compose-refs.js.map +1 -1
  273. package/dist/lib/progress.js.map +1 -1
  274. package/dist/lib/utils.d.ts +1 -1
  275. package/dist/lib/utils.js.map +1 -1
  276. package/dist/logo--R3_XDgA.js +2 -0
  277. package/dist/logo--R3_XDgA.js.map +1 -0
  278. package/dist/postcss.config.js.map +1 -1
  279. package/dist/resolve-class-name-BurP8ngI.js +2 -0
  280. package/dist/resolve-class-name-BurP8ngI.js.map +1 -0
  281. package/dist/skills/uselets-ui/SKILL.md +9 -3
  282. package/dist/skills/uselets-ui/references/component-catalog.md +31 -16
  283. package/dist/skills/uselets-ui/references/migration-v1-to-v2.md +599 -0
  284. package/dist/skills/uselets-ui/references/package-guide.md +23 -7
  285. package/dist/styles/base.css +21 -0
  286. package/dist/{use-hotkeys-DOjcX9Tt.d.ts → use-hotkeys-D1_TEIwN.d.ts} +2 -1
  287. package/dist/use-hotkeys-YDJmGWX6.js.map +1 -1
  288. package/package.json +18 -19
  289. package/skills/uselets-ui/SKILL.md +9 -3
  290. package/skills/uselets-ui/references/component-catalog.md +31 -16
  291. package/skills/uselets-ui/references/migration-v1-to-v2.md +599 -0
  292. package/skills/uselets-ui/references/package-guide.md +23 -7
  293. package/dist/data-table-DWWVGWbU.d.ts +0 -4184
  294. package/dist/logo-B0thHtTS.js +0 -2
  295. package/dist/logo-B0thHtTS.js.map +0 -1
@@ -1,21 +1,28 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
- import { Tooltip as Tooltip$1 } from "radix-ui";
2
+ import { t as AsChildPrimitiveProps } from "../as-child-Dxg3Xo1G.js";
3
3
  import * as React from "react";
4
+ import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
4
5
  //#region src/components/tooltip.d.ts
5
6
  export type TooltipProviderProps = React.ComponentProps<typeof Tooltip$1.Provider>;
6
7
  export type TooltipRootProps = React.ComponentProps<typeof Tooltip$1.Root>;
7
- export type TooltipTriggerProps = React.ComponentProps<typeof Tooltip$1.Trigger>;
8
- export type TooltipContentProps = React.ComponentProps<typeof Tooltip$1.Content>;
9
- export type TooltipProps = Omit<TooltipRootProps, 'children'> & Omit<TooltipContentProps, 'children'> & {
8
+ export type TooltipTriggerProps = AsChildPrimitiveProps<typeof Tooltip$1.Trigger>;
9
+ export type TooltipContentProps = AsChildPrimitiveProps<typeof Tooltip$1.Popup> & Pick<React.ComponentProps<typeof Tooltip$1.Positioner>, 'side' | 'sideOffset' | 'align' | 'alignOffset' | 'sticky'> & Pick<React.ComponentProps<typeof Tooltip$1.Portal>, 'keepMounted'>;
10
+ export type TooltipProps = Pick<TooltipRootProps, 'open' | 'defaultOpen' | 'onOpenChange' | 'onOpenChangeComplete' | 'disableHoverablePopup' | 'trackCursorAxis' | 'actionsRef'> & Omit<TooltipContentProps, 'children'> & Pick<TooltipTriggerProps, 'delay' | 'closeDelay'> & {
11
+ /** The trigger. Must be a single element that accepts a ref and event handlers. */
10
12
  children?: React.ReactNode;
13
+ /** Tooltip content. */
11
14
  label?: React.ReactNode;
15
+ /**
16
+ * Renders only the trigger, without a tooltip.
17
+ * @default false
18
+ */
12
19
  disabled?: boolean;
13
20
  };
14
- declare function TooltipProvider({ delayDuration, ...props }: TooltipProviderProps): React.JSX.Element;
21
+ declare function TooltipProvider({ delay, ...props }: TooltipProviderProps): React.JSX.Element;
15
22
  declare function TooltipRoot({ ...props }: TooltipRootProps): React.JSX.Element;
16
- declare function Tooltip({ label, children, disabled, open, defaultOpen, onOpenChange, delayDuration, disableHoverableContent, ...contentProps }: TooltipProps): string | number | bigint | boolean | React.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | Iterable<React.ReactNode> | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | React.ReactPortal | null | undefined> | null | undefined;
17
- declare function TooltipTrigger({ ...props }: TooltipTriggerProps): React.JSX.Element;
18
- declare function TooltipContent({ className, sideOffset, children, ...props }: TooltipContentProps): React.JSX.Element;
23
+ declare function Tooltip({ label, children, disabled, open, defaultOpen, onOpenChange, onOpenChangeComplete, disableHoverablePopup, trackCursorAxis, actionsRef, delay, closeDelay, ...contentProps }: TooltipProps): string | number | bigint | boolean | React.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | Iterable<React.ReactNode> | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | React.ReactPortal | null | undefined> | null | undefined;
24
+ declare function TooltipTrigger({ asChild, children, ...props }: TooltipTriggerProps): React.JSX.Element;
25
+ declare function TooltipContent({ className, side, sideOffset, align, alignOffset, sticky, keepMounted, children, asChild, ...props }: TooltipContentProps): React.JSX.Element;
19
26
  //#endregion
20
27
  export { Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger };
21
28
  //# sourceMappingURL=tooltip.d.ts.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Tooltip as t}from"radix-ui";import{jsx as n,jsxs as r}from"react/jsx-runtime";function TooltipProvider({delayDuration:e=0,...r}){return n(t.Provider,{"data-slot":`tooltip-provider`,delayDuration:e,...r})}function TooltipRoot({...e}){return n(t.Root,{"data-slot":`tooltip-root`,...e})}function Tooltip({label:e,children:t,disabled:i=!1,open:a,defaultOpen:o,onOpenChange:s,delayDuration:c,disableHoverableContent:l,...u}){return i?t:r(TooltipRoot,{open:a,defaultOpen:o,onOpenChange:s,delayDuration:c,disableHoverableContent:l,children:[n(TooltipTrigger,{asChild:!0,children:t}),n(TooltipContent,{...u,children:e})]})}function TooltipTrigger({...e}){return n(t.Trigger,{"data-slot":`tooltip-trigger`,...e})}function TooltipContent({className:i,sideOffset:a=0,children:o,...s}){return n(t.Portal,{children:r(t.Content,{"data-slot":`tooltip-content`,sideOffset:a,className:e(`bg-foreground text-background z-50 w-fit max-w-xs rounded-md px-3 py-1.5 text-xs origin-(--radix-tooltip-content-transform-origin)`,`data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95`,`data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,i),...s,children:[o,n(t.Arrow,{className:`size-2.5 rotate-45 rounded-[2px] bg-foreground fill-foreground z-50 translate-y-[calc(-50%-2px)]`})]})})}export{Tooltip,TooltipContent,TooltipProvider,TooltipRoot,TooltipTrigger};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{toAsChildRenderProps as e}from"../lib/as-child.js";import{cn as t}from"../lib/utils.js";import{t as n}from"../resolve-class-name-BurP8ngI.js";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{Tooltip as a}from"@base-ui/react/tooltip";function TooltipProvider({delay:e=0,...t}){return/* @__PURE__ */ r(a.Provider,{"data-slot":`tooltip-provider`,delay:e,...t})}function TooltipRoot({...e}){return/* @__PURE__ */ r(a.Root,{"data-slot":`tooltip-root`,...e})}function Tooltip({label:e,children:t,disabled:n=!1,open:a,defaultOpen:o,onOpenChange:s,onOpenChangeComplete:c,disableHoverablePopup:l,trackCursorAxis:u,actionsRef:d,delay:f,closeDelay:p,...m}){return n?t:/* @__PURE__ */ i(TooltipRoot,{open:a,defaultOpen:o,onOpenChange:s,onOpenChangeComplete:c,disableHoverablePopup:l,trackCursorAxis:u,actionsRef:d,children:[/* @__PURE__ */ r(TooltipTrigger,{asChild:!0,delay:f,closeDelay:p,children:t}),/* @__PURE__ */ r(TooltipContent,{...m,children:e})]})}function TooltipTrigger({asChild:t,children:n,...i}){return/* @__PURE__ */ r(a.Trigger,{"data-slot":`tooltip-trigger`,...i,...e(t,n)})}function TooltipContent({className:o,side:s=`top`,sideOffset:c=0,align:l=`center`,alignOffset:u=0,sticky:d,keepMounted:f,children:p,asChild:m,...h}){return/* @__PURE__ */ r(a.Portal,{keepMounted:f,children:/* @__PURE__ */ r(a.Positioner,{side:s,sideOffset:c,align:l,alignOffset:u,sticky:d,className:`isolate z-50`,children:/* @__PURE__ */ i(a.Popup,{"data-slot":`tooltip-content`,role:`tooltip`,className:e=>t(`bg-foreground text-background z-50 w-fit max-w-xs rounded-md px-3 py-1.5 text-xs origin-(--transform-origin)`,`data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95`,`data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,n(o,e)),...h,...e(m,p),children:[!m&&p,!m&&/* @__PURE__ */ r(a.Arrow,{"data-slot":`tooltip-arrow`,className:t(`size-2.5 rotate-45 rounded-[2px] bg-foreground fill-foreground z-50 translate-y-[calc(-50%-2px)]`,`data-[side=top]:-bottom-2.5 data-[side=bottom]:top-1`,`data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2`,`data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2`)})]})})})}export{Tooltip,TooltipContent,TooltipProvider,TooltipRoot,TooltipTrigger};
2
2
  //# sourceMappingURL=tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","names":["TooltipPrimitive"],"sources":["../../src/components/tooltip.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { Tooltip as TooltipPrimitive } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\n\nexport type TooltipProviderProps = React.ComponentProps<typeof TooltipPrimitive.Provider>\n\nexport type TooltipRootProps = React.ComponentProps<typeof TooltipPrimitive.Root>\n\nexport type TooltipTriggerProps = React.ComponentProps<typeof TooltipPrimitive.Trigger>\n\nexport type TooltipContentProps = React.ComponentProps<typeof TooltipPrimitive.Content>\n\nexport type TooltipProps = Omit<TooltipRootProps, 'children'> &\n Omit<TooltipContentProps, 'children'> & {\n children?: React.ReactNode\n label?: React.ReactNode\n disabled?: boolean\n }\n\nfunction TooltipProvider({ delayDuration = 0, ...props }: TooltipProviderProps) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />\n}\n\nfunction TooltipRoot({ ...props }: TooltipRootProps) {\n return <TooltipPrimitive.Root data-slot=\"tooltip-root\" {...props} />\n}\n\nfunction Tooltip({\n label,\n children,\n disabled = false,\n open,\n defaultOpen,\n onOpenChange,\n delayDuration,\n disableHoverableContent,\n ...contentProps\n}: TooltipProps) {\n if (disabled) {\n return children\n }\n\n return (\n <TooltipRoot\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n delayDuration={delayDuration}\n disableHoverableContent={disableHoverableContent}\n >\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent {...contentProps}>{label}</TooltipContent>\n </TooltipRoot>\n )\n}\n\nfunction TooltipTrigger({ ...props }: TooltipTriggerProps) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({ className, sideOffset = 0, children, ...props }: TooltipContentProps) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'bg-foreground text-background z-50 w-fit max-w-xs rounded-md px-3 py-1.5 text-xs origin-(--radix-tooltip-content-transform-origin)',\n 'data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95',\n 'data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"size-2.5 rotate-45 rounded-[2px] bg-foreground fill-foreground z-50 translate-y-[calc(-50%-2px)]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger }\n"],"mappings":"kKAqBA,SAAS,gBAAgB,CAAE,gBAAgB,EAAG,GAAG,GAA+B,CAC9E,OAAO,EAACA,EAAiB,SAAlB,CAA2B,YAAU,mBAAkC,gBAAe,GAAI,CAAQ,CAAA,CAC3G,CAEA,SAAS,YAAY,CAAE,GAAG,GAA2B,CACnD,OAAO,EAACA,EAAiB,KAAlB,CAAuB,YAAU,eAAe,GAAI,CAAQ,CAAA,CACrE,CAEA,SAAS,QAAQ,CACf,QACA,WACA,WAAW,GACX,OACA,cACA,eACA,gBACA,0BACA,GAAG,GACY,CAKf,OAJI,EACK,EAIP,EAAC,YAAD,CACQ,OACO,cACC,eACC,gBACU,0BAL3B,SAAA,CAOE,EAAC,eAAD,CAAgB,QAAA,GAAS,UAAyB,CAAA,EAClD,EAAC,eAAD,CAAgB,GAAI,EAAe,SAAA,CAAsB,CAAA,CAC9C,GAEjB,CAEA,SAAS,eAAe,CAAE,GAAG,GAA8B,CACzD,OAAO,EAACA,EAAiB,QAAlB,CAA0B,YAAU,kBAAkB,GAAI,CAAQ,CAAA,CAC3E,CAEA,SAAS,eAAe,CAAE,YAAW,aAAa,EAAG,WAAU,GAAG,GAA8B,CAC9F,OACE,EAACA,EAAiB,OAAlB,CAAA,SACE,EAACA,EAAiB,QAAlB,CACE,YAAU,kBACE,aACZ,UAAW,EACT,qIACA,8KACA,yEACA,8JACA,CACF,EACA,GAAI,EAVN,SAAA,CAYG,EACD,EAACA,EAAiB,MAAlB,CAAwB,UAAU,kGAAoG,CAAA,CAC9G,CACH,CAAA,CAAA,CAAA,CAE7B"}
1
+ {"version":3,"file":"tooltip.js","names":["TooltipPrimitive","resolveClassName","Tooltip$1","props","contentProps","disabled","children","label","toAsChildRenderProps","asChild","cn","className","state"],"sources":["../../src/components/tooltip.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'\n\nimport { type AsChildPrimitiveProps, toAsChildRenderProps } from '../lib/as-child'\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\n\nexport type TooltipProviderProps = React.ComponentProps<typeof TooltipPrimitive.Provider>\n\nexport type TooltipRootProps = React.ComponentProps<typeof TooltipPrimitive.Root>\n\nexport type TooltipTriggerProps = AsChildPrimitiveProps<typeof TooltipPrimitive.Trigger>\n\nexport type TooltipContentProps = AsChildPrimitiveProps<typeof TooltipPrimitive.Popup> &\n Pick<\n React.ComponentProps<typeof TooltipPrimitive.Positioner>,\n 'side' | 'sideOffset' | 'align' | 'alignOffset' | 'sticky'\n > &\n Pick<React.ComponentProps<typeof TooltipPrimitive.Portal>, 'keepMounted'>\n\nexport type TooltipProps = Pick<\n TooltipRootProps,\n | 'open'\n | 'defaultOpen'\n | 'onOpenChange'\n | 'onOpenChangeComplete'\n | 'disableHoverablePopup'\n | 'trackCursorAxis'\n | 'actionsRef'\n> &\n Omit<TooltipContentProps, 'children'> &\n Pick<TooltipTriggerProps, 'delay' | 'closeDelay'> & {\n /** The trigger. Must be a single element that accepts a ref and event handlers. */\n children?: React.ReactNode\n /** Tooltip content. */\n label?: React.ReactNode\n /**\n * Renders only the trigger, without a tooltip.\n * @default false\n */\n disabled?: boolean\n }\n\nfunction TooltipProvider({ delay = 0, ...props }: TooltipProviderProps) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delay={delay} {...props} />\n}\n\nfunction TooltipRoot({ ...props }: TooltipRootProps) {\n return <TooltipPrimitive.Root data-slot=\"tooltip-root\" {...props} />\n}\n\nfunction Tooltip({\n label,\n children,\n disabled = false,\n open,\n defaultOpen,\n onOpenChange,\n onOpenChangeComplete,\n disableHoverablePopup,\n trackCursorAxis,\n actionsRef,\n delay,\n closeDelay,\n ...contentProps\n}: TooltipProps) {\n if (disabled) {\n return children\n }\n\n return (\n <TooltipRoot\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n onOpenChangeComplete={onOpenChangeComplete}\n disableHoverablePopup={disableHoverablePopup}\n trackCursorAxis={trackCursorAxis}\n actionsRef={actionsRef}\n >\n <TooltipTrigger asChild delay={delay} closeDelay={closeDelay}>\n {children}\n </TooltipTrigger>\n <TooltipContent {...contentProps}>{label}</TooltipContent>\n </TooltipRoot>\n )\n}\n\nfunction TooltipTrigger({ asChild, children, ...props }: TooltipTriggerProps) {\n return (\n <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} {...toAsChildRenderProps(asChild, children)} />\n )\n}\n\nfunction TooltipContent({\n className,\n side = 'top',\n sideOffset = 0,\n align = 'center',\n alignOffset = 0,\n sticky,\n keepMounted,\n children,\n asChild,\n ...props\n}: TooltipContentProps) {\n return (\n <TooltipPrimitive.Portal keepMounted={keepMounted}>\n <TooltipPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n sticky={sticky}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n role=\"tooltip\"\n className={(state) =>\n cn(\n 'bg-foreground text-background z-50 w-fit max-w-xs rounded-md px-3 py-1.5 text-xs origin-(--transform-origin)',\n 'data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95',\n 'data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n resolveClassName(className, state)\n )\n }\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n >\n {!asChild && children}\n {!asChild && (\n <TooltipPrimitive.Arrow\n data-slot=\"tooltip-arrow\"\n className={cn(\n 'size-2.5 rotate-45 rounded-[2px] bg-foreground fill-foreground z-50 translate-y-[calc(-50%-2px)]',\n 'data-[side=top]:-bottom-2.5 data-[side=bottom]:top-1',\n 'data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2',\n 'data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2'\n )}\n />\n )}\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger }\n"],"mappings":"gSA4CA,SAAS,gBAAgB,CAAE,QAAQ,EAAG,GAAGG,GAA+B,CACtE,MAAO,kBAACH,EAAiB,SAAlB,CAA2B,YAAU,mBAA0B,QAAO,GAAIG,CAAQ,CAAA,CAC3F,CAEA,SAAS,YAAY,CAAE,GAAGA,GAA2B,CACnD,MAAO,kBAACH,EAAiB,KAAlB,CAAuB,YAAU,eAAe,GAAIG,CAAQ,CAAA,CACrE,CAEA,SAAS,QAAQ,CACf,QACA,WACA,WAAW,GACX,OACA,cACA,eACA,uBACA,wBACA,kBACA,aACA,QACA,aACA,GAAGC,GACY,CAKf,OAJIC,EACKC,EAIP,kBAAC,YAAD,CACQ,OACO,cACC,eACQ,uBACC,wBACN,kBACL,aAPd,SAAA,CASE,kBAAC,eAAD,CAAgB,QAAA,GAAe,QAAmB,aAC/C,UACa,CAAA,EAChB,kBAAC,eAAD,CAAgB,GAAIF,EAAe,SAAAG,CAAsB,CAAA,CAC9C,GAEjB,CAEA,SAAS,eAAe,CAAE,UAAS,WAAU,GAAGJ,GAA8B,CAC5E,MACE,kBAACH,EAAiB,QAAlB,CAA0B,YAAU,kBAAkB,GAAIG,EAAO,GAAIK,EAAqBC,EAASH,CAAQ,CAAI,CAAA,CAEnH,CAEA,SAAS,eAAe,CACtB,YACA,OAAO,MACP,aAAa,EACb,QAAQ,SACR,cAAc,EACd,SACA,cACA,WACA,UACA,GAAGH,GACmB,CACtB,MACE,kBAACH,EAAiB,OAAlB,CAAsC,cACpC,SAAA,kBAACA,EAAiB,WAAlB,CACQ,OACM,aACL,QACM,cACL,SACR,UAAU,eAEV,SAAA,kBAACA,EAAiB,MAAlB,CACE,YAAU,kBACV,KAAK,UACL,UAAY,GACVU,EACE,+GACA,gEACA,yEACA,8JACAT,EAAiBU,EAAWC,CAAK,CACnC,EAEF,GAAIT,EACJ,GAAIK,EAAqBC,EAASH,CAAQ,EAb5C,SAAA,CAeG,CAACG,GAAWH,EACZ,CAACG,GACA,kBAACT,EAAiB,MAAlB,CACE,YAAU,gBACV,UAAWU,EACT,mGACA,uDACA,wFACA,yFACF,CACD,CAAA,CAEmB,GACG,CAAA,CACN,CAAA,CAE7B"}
@@ -1,10 +1,8 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
- import * as React from "react";
2
+ import { n as AsChildProps } from "../as-child-Dxg3Xo1G.js";
3
3
  //#region src/components/unstyled-button.d.ts
4
- export type UnstyledButtonProps = React.ComponentProps<'button'> & {
5
- asChild?: boolean;
6
- };
7
- declare function UnstyledButton({ className, type, asChild, ...props }: UnstyledButtonProps): React.JSX.Element;
4
+ export type UnstyledButtonProps = AsChildProps<'button'>;
5
+ declare function UnstyledButton({ className, type, asChild, ...props }: UnstyledButtonProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
8
6
  //#endregion
9
7
  export { UnstyledButton };
10
8
  //# sourceMappingURL=unstyled-button.d.ts.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Slot as t}from"radix-ui";import{jsx as n}from"react/jsx-runtime";function UnstyledButton({className:r,type:i=`button`,asChild:a=!1,...o}){let s=a?t.Root:`button`;return n(s,{type:a?void 0:i,"data-slot":`unstyled-button`,className:e(`inline-flex appearance-none items-center justify-center border-0 bg-transparent p-0 [font:inherit] text-inherit outline-none`,`cursor-pointer select-none disabled:pointer-events-none disabled:opacity-50`,`focus-visible:ring-3 focus-visible:ring-ring/50`,r),...o})}export{UnstyledButton};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{useAsChild as e}from"../lib/as-child.js";import{cn as t}from"../lib/utils.js";function UnstyledButton({className:n,type:r=`button`,asChild:i=!1,...a}){return e(`button`,{asChild:i,type:i?void 0:r,"data-slot":`unstyled-button`,className:t(`inline-flex appearance-none items-center justify-center border-0 bg-transparent p-0 [font:inherit] text-inherit outline-none`,`cursor-pointer select-none disabled:pointer-events-none disabled:opacity-50`,`focus-visible:ring-3 focus-visible:ring-ring/50`,n),...a})}export{UnstyledButton};
2
2
  //# sourceMappingURL=unstyled-button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unstyled-button.js","names":[],"sources":["../../src/components/unstyled-button.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { Slot } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\n\nexport type UnstyledButtonProps = React.ComponentProps<'button'> & {\n asChild?: boolean\n}\n\nfunction UnstyledButton({ className, type = 'button', asChild = false, ...props }: UnstyledButtonProps) {\n const Comp = asChild ? Slot.Root : 'button'\n\n return (\n <Comp\n type={!asChild ? type : undefined}\n data-slot=\"unstyled-button\"\n className={cn(\n 'inline-flex appearance-none items-center justify-center border-0 bg-transparent p-0 [font:inherit] text-inherit outline-none',\n 'cursor-pointer select-none disabled:pointer-events-none disabled:opacity-50',\n 'focus-visible:ring-3 focus-visible:ring-ring/50',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { UnstyledButton }\n"],"mappings":"qJAUA,SAAS,eAAe,CAAE,YAAW,OAAO,SAAU,UAAU,GAAO,GAAG,GAA8B,CACtG,IAAM,EAAO,EAAU,EAAK,KAAO,SAEnC,OACE,EAAC,EAAD,CACE,KAAO,EAAiB,IAAA,GAAP,EACjB,YAAU,kBACV,UAAW,EACT,+HACA,8EACA,kDACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"unstyled-button.js","names":["props","useAsChild","asChild","type","cn","className"],"sources":["../../src/components/unstyled-button.tsx"],"sourcesContent":["import { type AsChildProps, useAsChild } from '../lib/as-child'\nimport { cn } from '../lib/utils'\n\nexport type UnstyledButtonProps = AsChildProps<'button'>\n\nfunction UnstyledButton({ className, type = 'button', asChild = false, ...props }: UnstyledButtonProps) {\n return useAsChild('button', {\n asChild,\n type: !asChild ? type : undefined,\n 'data-slot': 'unstyled-button',\n className: cn(\n 'inline-flex appearance-none items-center justify-center border-0 bg-transparent p-0 [font:inherit] text-inherit outline-none',\n 'cursor-pointer select-none disabled:pointer-events-none disabled:opacity-50',\n 'focus-visible:ring-3 focus-visible:ring-ring/50',\n className\n ),\n ...props\n })\n}\n\nexport { UnstyledButton }\n"],"mappings":"6HAKA,SAAS,eAAe,CAAE,YAAW,OAAO,SAAU,UAAU,GAAO,GAAGA,GAA8B,CACtG,OAAOC,EAAW,SAAU,CAC1B,UACA,KAAOC,EAAiB,IAAA,GAAPC,EACjB,YAAa,kBACb,UAAWC,EACT,+HACA,8EACA,kDACAC,CACF,EACA,GAAGL,CACL,CAAC,CACH"}
@@ -3,11 +3,13 @@ import { Breakpoint } from "../hooks/use-breakpoint.js";
3
3
  //#region src/components/visibility.d.ts
4
4
  type VisibilityBreakpoint = Exclude<Breakpoint, 'base'>;
5
5
  export type HiddenFromProps = React.ComponentProps<'div'> & {
6
+ /** Breakpoint from which the children are hidden. */
6
7
  breakpoint: VisibilityBreakpoint;
7
8
  children?: React.ReactNode;
8
9
  };
9
10
  declare function HiddenFrom({ breakpoint, children }: HiddenFromProps): import("react").JSX.Element;
10
11
  export type VisibleFromProps = {
12
+ /** Breakpoint from which the children are shown. */
11
13
  breakpoint: VisibilityBreakpoint;
12
14
  children?: React.ReactNode;
13
15
  };
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{useBreakpoint as e}from"../hooks/use-breakpoint.js";import{jsx as t}from"react/jsx-runtime";import{Activity as n}from"react";function HiddenFrom({breakpoint:r,children:i}){let a=e(r);return t(n,{mode:a?`hidden`:`visible`,children:i})}function VisibleFrom({breakpoint:r,children:i}){let a=e(r);return t(n,{mode:a?`visible`:`hidden`,children:i})}export{HiddenFrom,VisibleFrom};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{useBreakpoint as e}from"../hooks/use-breakpoint.js";import{Activity as t}from"react";import{jsx as n}from"react/jsx-runtime";function HiddenFrom({breakpoint:r,children:i}){let a=e(r);return/* @__PURE__ */ n(t,{mode:a?`hidden`:`visible`,children:i})}function VisibleFrom({breakpoint:r,children:i}){let a=e(r);return/* @__PURE__ */ n(t,{mode:a?`visible`:`hidden`,children:i})}export{HiddenFrom,VisibleFrom};
2
2
  //# sourceMappingURL=visibility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"visibility.js","names":[],"sources":["../../src/components/visibility.tsx"],"sourcesContent":["import { Activity } from 'react'\n\nimport { type Breakpoint, useBreakpoint } from '../hooks/use-breakpoint'\n\ntype VisibilityBreakpoint = Exclude<Breakpoint, 'base'>\n\nexport type HiddenFromProps = React.ComponentProps<'div'> & {\n breakpoint: VisibilityBreakpoint\n children?: React.ReactNode\n}\n\nfunction HiddenFrom({ breakpoint, children }: HiddenFromProps) {\n const isHidden = useBreakpoint(breakpoint)\n\n return <Activity mode={isHidden ? 'hidden' : 'visible'}>{children}</Activity>\n}\n\nexport type VisibleFromProps = {\n breakpoint: VisibilityBreakpoint\n children?: React.ReactNode\n}\n\nfunction VisibleFrom({ breakpoint, children }: VisibleFromProps) {\n const isVisible = useBreakpoint(breakpoint)\n\n return <Activity mode={isVisible ? 'visible' : 'hidden'}>{children}</Activity>\n}\n\nexport { HiddenFrom, VisibleFrom }\n"],"mappings":"4KAWA,SAAS,WAAW,CAAE,aAAY,YAA6B,CAC7D,IAAM,EAAW,EAAc,CAAU,EAEzC,OAAO,EAAC,EAAD,CAAU,KAAM,EAAW,SAAW,UAAY,UAAmB,CAAA,CAC9E,CAOA,SAAS,YAAY,CAAE,aAAY,YAA8B,CAC/D,IAAM,EAAY,EAAc,CAAU,EAE1C,OAAO,EAAC,EAAD,CAAU,KAAM,EAAY,UAAY,SAAW,UAAmB,CAAA,CAC/E"}
1
+ {"version":3,"file":"visibility.js","names":["isHidden","useBreakpoint","breakpoint","Activity","isVisible"],"sources":["../../src/components/visibility.tsx"],"sourcesContent":["import { Activity } from 'react'\n\nimport { type Breakpoint, useBreakpoint } from '../hooks/use-breakpoint'\n\ntype VisibilityBreakpoint = Exclude<Breakpoint, 'base'>\n\nexport type HiddenFromProps = React.ComponentProps<'div'> & {\n /** Breakpoint from which the children are hidden. */\n breakpoint: VisibilityBreakpoint\n children?: React.ReactNode\n}\n\nfunction HiddenFrom({ breakpoint, children }: HiddenFromProps) {\n const isHidden = useBreakpoint(breakpoint)\n\n return <Activity mode={isHidden ? 'hidden' : 'visible'}>{children}</Activity>\n}\n\nexport type VisibleFromProps = {\n /** Breakpoint from which the children are shown. */\n breakpoint: VisibilityBreakpoint\n children?: React.ReactNode\n}\n\nfunction VisibleFrom({ breakpoint, children }: VisibleFromProps) {\n const isVisible = useBreakpoint(breakpoint)\n\n return <Activity mode={isVisible ? 'visible' : 'hidden'}>{children}</Activity>\n}\n\nexport { HiddenFrom, VisibleFrom }\n"],"mappings":"4KAYA,SAAS,WAAW,CAAE,aAAY,YAA6B,CAC7D,IAAMA,EAAWC,EAAcC,CAAU,EAEzC,MAAO,kBAACC,EAAD,CAAU,KAAMH,EAAW,SAAW,UAAY,UAAmB,CAAA,CAC9E,CAQA,SAAS,YAAY,CAAE,aAAY,YAA8B,CAC/D,IAAMI,EAAYH,EAAcC,CAAU,EAE1C,MAAO,kBAACC,EAAD,CAAU,KAAMC,EAAY,UAAY,SAAW,UAAmB,CAAA,CAC/E"}
@@ -2,6 +2,7 @@ import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  import { Breakpoint } from "./use-breakpoint.js";
3
3
  //#region src/hooks/use-breakpoint-value.d.ts
4
4
  export type ResponsiveValueMap<T> = Partial<Record<Breakpoint, T>>;
5
+ /** Returns the value of the largest active breakpoint in `values`, or `undefined` when none matches. */
5
6
  export declare function useBreakpointValue<T>(values: ResponsiveValueMap<T>): T | undefined;
6
7
  //#endregion
7
8
  //# sourceMappingURL=use-breakpoint-value.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-breakpoint-value.js","names":[],"sources":["../../src/hooks/use-breakpoint-value.ts"],"sourcesContent":["import type { Breakpoint } from './use-breakpoint'\nimport { useBreakpoint } from './use-breakpoint'\n\nexport type ResponsiveValueMap<T> = Partial<Record<Breakpoint, T>>\n\nconst breakpointOrder = ['base', 'sm', 'md', 'lg', 'xl', '2xl'] as const satisfies readonly Breakpoint[]\n\nexport function useBreakpointValue<T>(values: ResponsiveValueMap<T>) {\n const activeBreakpoints = {\n base: useBreakpoint('base'),\n sm: useBreakpoint('sm'),\n md: useBreakpoint('md'),\n lg: useBreakpoint('lg'),\n xl: useBreakpoint('xl'),\n '2xl': useBreakpoint('2xl')\n }\n\n let value = values.base\n\n for (const breakpoint of breakpointOrder) {\n if (activeBreakpoints[breakpoint] && values[breakpoint] !== undefined) {\n value = values[breakpoint]\n }\n }\n\n return value\n}\n"],"mappings":"4FAKA,MAAM,EAAkB,CAAC,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAK,EAE9D,SAAgB,mBAAsB,EAA+B,CACnE,IAAM,EAAoB,CACxB,KAAM,EAAc,MAAM,EAC1B,GAAI,EAAc,IAAI,EACtB,GAAI,EAAc,IAAI,EACtB,GAAI,EAAc,IAAI,EACtB,GAAI,EAAc,IAAI,EACtB,MAAO,EAAc,KAAK,CAC5B,EAEI,EAAQ,EAAO,KAEnB,IAAK,IAAM,KAAc,EACnB,EAAkB,IAAe,EAAO,KAAgB,IAAA,KAC1D,EAAQ,EAAO,IAInB,OAAO,CACT"}
1
+ {"version":3,"file":"use-breakpoint-value.js","names":["breakpointOrder","activeBreakpoints","useBreakpoint","value","values","breakpoint"],"sources":["../../src/hooks/use-breakpoint-value.ts"],"sourcesContent":["import type { Breakpoint } from './use-breakpoint'\nimport { useBreakpoint } from './use-breakpoint'\n\nexport type ResponsiveValueMap<T> = Partial<Record<Breakpoint, T>>\n\nconst breakpointOrder = ['base', 'sm', 'md', 'lg', 'xl', '2xl'] as const satisfies readonly Breakpoint[]\n\n/** Returns the value of the largest active breakpoint in `values`, or `undefined` when none matches. */\nexport function useBreakpointValue<T>(values: ResponsiveValueMap<T>) {\n const activeBreakpoints = {\n base: useBreakpoint('base'),\n sm: useBreakpoint('sm'),\n md: useBreakpoint('md'),\n lg: useBreakpoint('lg'),\n xl: useBreakpoint('xl'),\n '2xl': useBreakpoint('2xl')\n }\n\n let value = values.base\n\n for (const breakpoint of breakpointOrder) {\n if (activeBreakpoints[breakpoint] && values[breakpoint] !== undefined) {\n value = values[breakpoint]\n }\n }\n\n return value\n}\n"],"mappings":"4FAKA,MAAMA,EAAkB,CAAC,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAK,EAG9D,SAAgB,mBAAsB,EAA+B,CACnE,IAAMC,EAAoB,CACxB,KAAMC,EAAc,MAAM,EAC1B,GAAIA,EAAc,IAAI,EACtB,GAAIA,EAAc,IAAI,EACtB,GAAIA,EAAc,IAAI,EACtB,GAAIA,EAAc,IAAI,EACtB,MAAOA,EAAc,KAAK,CAC5B,EAEIC,EAAQC,EAAO,KAEnB,IAAK,IAAMC,KAAcL,EACnBC,EAAkBI,IAAeD,EAAOC,KAAgB,IAAA,KAC1D,EAAQD,EAAOC,IAInB,OAAOF,CACT"}
@@ -2,6 +2,7 @@ import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  //#region src/hooks/use-breakpoint.d.ts
3
3
  export type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
4
4
  export declare const breakpointValues: Record<Exclude<Breakpoint, 'base'>, number>;
5
+ /** Returns whether the viewport is at or above the given Tailwind breakpoint. */
5
6
  export declare function useBreakpoint(breakpoint: Breakpoint): boolean;
6
7
  //#endregion
7
8
  //# sourceMappingURL=use-breakpoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-breakpoint.js","names":[],"sources":["../../src/hooks/use-breakpoint.ts"],"sourcesContent":["import * as React from 'react'\n\nexport type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport const breakpointValues: Record<Exclude<Breakpoint, 'base'>, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536\n}\n\nexport function useBreakpoint(breakpoint: Breakpoint) {\n const [matches, setMatches] = React.useState(breakpoint === 'base')\n\n React.useEffect(() => {\n if (breakpoint === 'base') {\n setMatches(true)\n return\n }\n\n const mql = window.matchMedia(`(min-width: ${breakpointValues[breakpoint]}px)`)\n const onChange = () => {\n setMatches(mql.matches)\n }\n\n mql.addEventListener('change', onChange)\n setMatches(mql.matches)\n\n return () => mql.removeEventListener('change', onChange)\n }, [breakpoint])\n\n return breakpoint === 'base' || matches\n}\n"],"mappings":"gEAIA,MAAa,EAAgE,CAC3E,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,MAAO,IACT,EAEA,SAAgB,cAAc,EAAwB,CACpD,GAAM,CAAC,EAAS,GAAc,EAAM,SAAS,IAAe,MAAM,EAmBlE,OAjBA,EAAM,cAAgB,CACpB,GAAI,IAAe,OAAQ,CACzB,EAAW,EAAI,EACf,MACF,CAEA,IAAM,EAAM,OAAO,WAAW,eAAe,EAAiB,GAAY,IAAI,EACxE,aAAiB,CACrB,EAAW,EAAI,OAAO,CACxB,EAKA,OAHA,EAAI,iBAAiB,SAAU,QAAQ,EACvC,EAAW,EAAI,OAAO,MAET,EAAI,oBAAoB,SAAU,QAAQ,CACzD,EAAG,CAAC,CAAU,CAAC,EAER,IAAe,QAAU,CAClC"}
1
+ {"version":3,"file":"use-breakpoint.js","names":["React","breakpointValues","matches","setMatches","breakpoint","mql"],"sources":["../../src/hooks/use-breakpoint.ts"],"sourcesContent":["import * as React from 'react'\n\nexport type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport const breakpointValues: Record<Exclude<Breakpoint, 'base'>, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536\n}\n\n/** Returns whether the viewport is at or above the given Tailwind breakpoint. */\nexport function useBreakpoint(breakpoint: Breakpoint) {\n const [matches, setMatches] = React.useState(breakpoint === 'base')\n\n React.useEffect(() => {\n if (breakpoint === 'base') {\n setMatches(true)\n return\n }\n\n const mql = window.matchMedia(`(min-width: ${breakpointValues[breakpoint]}px)`)\n const onChange = () => {\n setMatches(mql.matches)\n }\n\n mql.addEventListener('change', onChange)\n setMatches(mql.matches)\n\n return () => mql.removeEventListener('change', onChange)\n }, [breakpoint])\n\n return breakpoint === 'base' || matches\n}\n"],"mappings":"gEAIA,MAAaC,EAAgE,CAC3E,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,MAAO,IACT,EAGA,SAAgB,cAAc,EAAwB,CACpD,GAAM,CAACC,EAASC,GAAcH,EAAM,SAASI,IAAe,MAAM,EAmBlE,OAjBAJ,EAAM,cAAgB,CACpB,GAAII,IAAe,OAAQ,CACzBD,EAAW,EAAI,EACf,MACF,CAEA,IAAME,EAAM,OAAO,WAAW,eAAeJ,EAAiBG,GAAY,IAAI,EACxE,aAAiB,CACrBD,EAAWE,EAAI,OAAO,CACxB,EAKA,OAHAA,EAAI,iBAAiB,SAAU,QAAQ,EACvCF,EAAWE,EAAI,OAAO,MAETA,EAAI,oBAAoB,SAAU,QAAQ,CACzD,EAAG,CAACD,CAAU,CAAC,EAERA,IAAe,QAAUF,CAClC"}
@@ -1,7 +1,9 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  //#region src/hooks/use-disclosure.d.ts
3
3
  export type UseDisclosureOptions = {
4
+ /** Called when the state changes to open. */
4
5
  onOpen?: () => void;
6
+ /** Called when the state changes to closed. */
5
7
  onClose?: () => void;
6
8
  };
7
9
  export type UseDisclosureHandlers = {
@@ -11,6 +13,7 @@ export type UseDisclosureHandlers = {
11
13
  toggle: () => void;
12
14
  };
13
15
  export type UseDisclosureReturnValue = [boolean, UseDisclosureHandlers];
16
+ /** Open/close state with `open`, `close`, `toggle` and `set` handlers. */
14
17
  export declare function useDisclosure(initialState?: boolean, options?: UseDisclosureOptions): UseDisclosureReturnValue;
15
18
  export declare namespace useDisclosure {
16
19
  type Options = UseDisclosureOptions;
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{useCallback as e,useState as t}from"react";function useDisclosure(n=!1,r={}){let[i,a]=t(n),o=e(()=>{a(e=>e||(r.onOpen?.(),!0))},[r.onOpen]),s=e(()=>{a(e=>e&&(r.onClose?.(),!1))},[r.onClose]);return[i,{open:o,close:s,toggle:e(()=>{i?s():o()},[s,o,i]),set:a}]}export{useDisclosure};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{useCallback as e,useRef as t,useState as n}from"react";function useDisclosure(r=!1,i={}){let[a,o]=n(r),s=t(r),c=t(i);c.current=i;let l=e(e=>{s.current=e,o(e)},[]),u=e(()=>{s.current||(l(!0),c.current.onOpen?.())},[l]),d=e(()=>{s.current&&(l(!1),c.current.onClose?.())},[l]);return[a,{open:u,close:d,toggle:e(()=>{s.current?d():u()},[d,u]),set:l}]}export{useDisclosure};
2
2
  //# sourceMappingURL=use-disclosure.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-disclosure.js","names":[],"sources":["../../src/hooks/use-disclosure.ts"],"sourcesContent":["import { useCallback, useState } from 'react'\n\nexport type UseDisclosureOptions = {\n onOpen?: () => void\n onClose?: () => void\n}\n\nexport type UseDisclosureHandlers = {\n set: (value: boolean) => void\n open: () => void\n close: () => void\n toggle: () => void\n}\n\nexport type UseDisclosureReturnValue = [boolean, UseDisclosureHandlers]\n\nexport function useDisclosure(initialState = false, options: UseDisclosureOptions = {}): UseDisclosureReturnValue {\n const [opened, setOpened] = useState(initialState)\n\n const open = useCallback(() => {\n setOpened((isOpened) => {\n if (!isOpened) {\n options.onOpen?.()\n return true\n }\n return isOpened\n })\n }, [options.onOpen])\n\n const close = useCallback(() => {\n setOpened((isOpened) => {\n if (isOpened) {\n options.onClose?.()\n return false\n }\n return isOpened\n })\n }, [options.onClose])\n\n const toggle = useCallback(() => {\n opened ? close() : open()\n }, [close, open, opened])\n\n return [opened, { open, close, toggle, set: setOpened }]\n}\n\nexport namespace useDisclosure {\n export type Options = UseDisclosureOptions\n export type Handlers = UseDisclosureHandlers\n export type ReturnValue = UseDisclosureReturnValue\n}\n"],"mappings":"0FAgBA,SAAgB,cAAc,EAAe,GAAO,EAAgC,CAAC,EAA6B,CAChH,GAAM,CAAC,EAAQ,GAAa,EAAS,CAAY,EAE3C,EAAO,MAAkB,CAC7B,EAAW,GACJ,IACH,EAAQ,SAAS,EACV,GAGV,CACH,EAAG,CAAC,EAAQ,MAAM,CAAC,EAEb,EAAQ,MAAkB,CAC9B,EAAW,GACL,IACF,EAAQ,UAAU,EACX,GAGV,CACH,EAAG,CAAC,EAAQ,OAAO,CAAC,EAMpB,MAAO,CAAC,EAAQ,CAAE,OAAM,QAAO,OAJhB,MAAkB,CAC/B,EAAS,EAAM,EAAI,EAAK,CAC1B,EAAG,CAAC,EAAO,EAAM,CAAM,CAEa,EAAG,IAAK,CAAU,CAAC,CACzD"}
1
+ {"version":3,"file":"use-disclosure.js","names":["opened","setOpened","useState","initialState","openedRef","useRef","callbacksRef","options","set","useCallback","value","open","close"],"sources":["../../src/hooks/use-disclosure.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react'\n\nexport type UseDisclosureOptions = {\n /** Called when the state changes to open. */\n onOpen?: () => void\n /** Called when the state changes to closed. */\n onClose?: () => void\n}\n\nexport type UseDisclosureHandlers = {\n set: (value: boolean) => void\n open: () => void\n close: () => void\n toggle: () => void\n}\n\nexport type UseDisclosureReturnValue = [boolean, UseDisclosureHandlers]\n\n/** Open/close state with `open`, `close`, `toggle` and `set` handlers. */\nexport function useDisclosure(initialState = false, options: UseDisclosureOptions = {}): UseDisclosureReturnValue {\n const [opened, setOpened] = useState(initialState)\n // The callbacks run outside the state updater (React runs updaters twice in StrictMode), so the current state\n // is tracked in a ref that every handler reads and writes synchronously.\n const openedRef = useRef(initialState)\n const callbacksRef = useRef(options)\n callbacksRef.current = options\n\n const set = useCallback((value: boolean) => {\n openedRef.current = value\n setOpened(value)\n }, [])\n\n const open = useCallback(() => {\n if (openedRef.current) return\n set(true)\n callbacksRef.current.onOpen?.()\n }, [set])\n\n const close = useCallback(() => {\n if (!openedRef.current) return\n set(false)\n callbacksRef.current.onClose?.()\n }, [set])\n\n const toggle = useCallback(() => {\n openedRef.current ? close() : open()\n }, [close, open])\n\n return [opened, { open, close, toggle, set }]\n}\n\nexport namespace useDisclosure {\n export type Options = UseDisclosureOptions\n export type Handlers = UseDisclosureHandlers\n export type ReturnValue = UseDisclosureReturnValue\n}\n"],"mappings":"sGAmBA,SAAgB,cAAc,EAAe,GAAO,EAAgC,CAAC,EAA6B,CAChH,GAAM,CAACA,EAAQC,GAAaC,EAASC,CAAY,EAG3CC,EAAYC,EAAOF,CAAY,EAC/BG,EAAeD,EAAOE,CAAO,EACnC,EAAa,QAAUA,EAEvB,IAAMC,EAAMC,EAAa,GAAmB,CAC1C,EAAU,QAAUC,EACpBT,EAAUS,CAAK,CACjB,EAAG,CAAC,CAAC,EAECC,EAAOF,MAAkB,CACzBL,EAAU,UACdI,EAAI,EAAI,EACRF,EAAa,QAAQ,SAAS,EAChC,EAAG,CAACE,CAAG,CAAC,EAEFI,EAAQH,MAAkB,CACzBL,EAAU,UACfI,EAAI,EAAK,EACTF,EAAa,QAAQ,UAAU,EACjC,EAAG,CAACE,CAAG,CAAC,EAMR,MAAO,CAACR,EAAQ,CAAE,OAAM,QAAO,OAJhBS,MAAkB,CAC/BL,EAAU,QAAUQ,EAAM,EAAID,EAAK,CACrC,EAAG,CAACC,EAAOD,CAAI,CAEqB,EAAG,KAAI,CAAC,CAC9C"}
@@ -1,5 +1,6 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  //#region src/hooks/use-document-visibility.d.ts
3
+ /** Returns the page visibility state (`visible` or `hidden`). */
3
4
  export declare function useDocumentVisibility(): DocumentVisibilityState;
4
5
  //#endregion
5
6
  //# sourceMappingURL=use-document-visibility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-document-visibility.js","names":[],"sources":["../../src/hooks/use-document-visibility.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\n\nexport function useDocumentVisibility(): DocumentVisibilityState {\n const [documentVisibility, setDocumentVisibility] = useState<DocumentVisibilityState>('visible')\n\n useEffect(() => {\n setDocumentVisibility(document.visibilityState)\n const listener = () => setDocumentVisibility(document.visibilityState)\n document.addEventListener('visibilitychange', listener)\n return () => document.removeEventListener('visibilitychange', listener)\n }, [])\n\n return documentVisibility\n}\n"],"mappings":"wFAEA,SAAgB,uBAAiD,CAC/D,GAAM,CAAC,EAAoB,GAAyB,EAAkC,SAAS,EAS/F,OAPA,MAAgB,CACd,EAAsB,SAAS,eAAe,EAC9C,IAAM,aAAiB,EAAsB,SAAS,eAAe,EAErE,OADA,SAAS,iBAAiB,mBAAoB,QAAQ,MACzC,SAAS,oBAAoB,mBAAoB,QAAQ,CACxE,EAAG,CAAC,CAAC,EAEE,CACT"}
1
+ {"version":3,"file":"use-document-visibility.js","names":["documentVisibility","setDocumentVisibility","useState","useEffect"],"sources":["../../src/hooks/use-document-visibility.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\n\n/** Returns the page visibility state (`visible` or `hidden`). */\nexport function useDocumentVisibility(): DocumentVisibilityState {\n const [documentVisibility, setDocumentVisibility] = useState<DocumentVisibilityState>('visible')\n\n useEffect(() => {\n setDocumentVisibility(document.visibilityState)\n const listener = () => setDocumentVisibility(document.visibilityState)\n document.addEventListener('visibilitychange', listener)\n return () => document.removeEventListener('visibilitychange', listener)\n }, [])\n\n return documentVisibility\n}\n"],"mappings":"wFAGA,SAAgB,uBAAiD,CAC/D,GAAM,CAACA,EAAoBC,GAAyBC,EAAkC,SAAS,EAS/F,OAPAC,MAAgB,CACdF,EAAsB,SAAS,eAAe,EAC9C,IAAM,aAAiBA,EAAsB,SAAS,eAAe,EAErE,OADA,SAAS,iBAAiB,mBAAoB,QAAQ,MACzC,SAAS,oBAAoB,mBAAoB,QAAQ,CACxE,EAAG,CAAC,CAAC,EAEED,CACT"}
@@ -1,2 +1,2 @@
1
- import { i as getHotkeyHandler, n as useHotkeys, r as HotkeyItemOptions, t as HotkeyItem } from "../use-hotkeys-DOjcX9Tt.js";
1
+ import { i as getHotkeyHandler, n as useHotkeys, r as HotkeyItemOptions, t as HotkeyItem } from "../use-hotkeys-D1_TEIwN.js";
2
2
  export { HotkeyItem, type HotkeyItemOptions, getHotkeyHandler, useHotkeys };
@@ -1 +1 @@
1
- import{n as e,t}from"../use-hotkeys-YDJmGWX6.js";export{e as getHotkeyHandler,t as useHotkeys};
1
+ export{n as getHotkeyHandler,t as useHotkeys}from"../use-hotkeys-YDJmGWX6.js";
@@ -1,9 +1,18 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  //#region src/hooks/use-idle.d.ts
3
3
  export type UseIdleOptions = {
4
+ /**
5
+ * Events that count as activity.
6
+ * @default ['keydown', 'mousemove', 'touchmove', 'click', 'scroll', 'wheel']
7
+ */
4
8
  events?: (keyof DocumentEventMap)[];
9
+ /**
10
+ * Value before any activity.
11
+ * @default true
12
+ */
5
13
  initialState?: boolean;
6
14
  };
15
+ /** Returns `true` after `timeout` ms without user activity. */
7
16
  export declare function useIdle(timeout: number, options?: UseIdleOptions): boolean;
8
17
  export declare namespace useIdle {
9
18
  type Options = UseIdleOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"use-idle.js","names":[],"sources":["../../src/hooks/use-idle.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\n\nexport type UseIdleOptions = {\n events?: (keyof DocumentEventMap)[]\n initialState?: boolean\n}\n\nconst DEFAULT_OPTIONS: Required<UseIdleOptions> = {\n events: ['keydown', 'mousemove', 'touchmove', 'click', 'scroll', 'wheel'],\n initialState: true\n}\n\nexport function useIdle(timeout: number, options?: UseIdleOptions) {\n const { events, initialState } = { ...DEFAULT_OPTIONS, ...options }\n const [idle, setIdle] = useState(initialState)\n const timer = useRef(-1)\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should not re-execute the effect when `events` changes\n useEffect(() => {\n const handleEvents = () => {\n setIdle(false)\n\n if (timer.current) {\n window.clearTimeout(timer.current)\n }\n\n timer.current = window.setTimeout(() => {\n setIdle(true)\n }, timeout)\n }\n\n for (const event of events) {\n document.addEventListener(event, handleEvents)\n }\n\n // Start the timer immediately instead of waiting for the first event to happen\n timer.current = window.setTimeout(() => {\n setIdle(true)\n }, timeout)\n\n return () => {\n for (const event of events) {\n document.removeEventListener(event, handleEvents)\n }\n\n window.clearTimeout(timer.current)\n timer.current = -1\n }\n }, [timeout])\n\n return idle\n}\n\nexport namespace useIdle {\n export type Options = UseIdleOptions\n}\n"],"mappings":"oGAOA,MAAM,EAA4C,CAChD,OAAQ,CAAC,UAAW,YAAa,YAAa,QAAS,SAAU,OAAO,EACxE,aAAc,EAChB,EAEA,SAAgB,QAAQ,EAAiB,EAA0B,CACjE,GAAM,CAAE,SAAQ,gBAAiB,CAAE,GAAG,EAAiB,GAAG,CAAQ,EAC5D,CAAC,EAAM,GAAW,EAAS,CAAY,EACvC,EAAQ,EAAO,EAAE,EAmCvB,OAhCA,MAAgB,CACd,IAAM,iBAAqB,CACzB,EAAQ,EAAK,EAET,EAAM,SACR,OAAO,aAAa,EAAM,OAAO,EAGnC,EAAM,QAAU,OAAO,eAAiB,CACtC,EAAQ,EAAI,CACd,EAAG,CAAO,CACZ,EAEA,IAAK,IAAM,KAAS,EAClB,SAAS,iBAAiB,EAAO,YAAY,EAQ/C,MAJA,GAAM,QAAU,OAAO,eAAiB,CACtC,EAAQ,EAAI,CACd,EAAG,CAAO,MAEG,CACX,IAAK,IAAM,KAAS,EAClB,SAAS,oBAAoB,EAAO,YAAY,EAGlD,OAAO,aAAa,EAAM,OAAO,EACjC,EAAM,QAAU,EAClB,CACF,EAAG,CAAC,CAAO,CAAC,EAEL,CACT"}
1
+ {"version":3,"file":"use-idle.js","names":["DEFAULT_OPTIONS","options","idle","setIdle","useState","initialState","timer","useRef","useEffect","timeout","event","events"],"sources":["../../src/hooks/use-idle.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\n\nexport type UseIdleOptions = {\n /**\n * Events that count as activity.\n * @default ['keydown', 'mousemove', 'touchmove', 'click', 'scroll', 'wheel']\n */\n events?: (keyof DocumentEventMap)[]\n /**\n * Value before any activity.\n * @default true\n */\n initialState?: boolean\n}\n\nconst DEFAULT_OPTIONS: Required<UseIdleOptions> = {\n events: ['keydown', 'mousemove', 'touchmove', 'click', 'scroll', 'wheel'],\n initialState: true\n}\n\n/** Returns `true` after `timeout` ms without user activity. */\nexport function useIdle(timeout: number, options?: UseIdleOptions) {\n const { events, initialState } = { ...DEFAULT_OPTIONS, ...options }\n const [idle, setIdle] = useState(initialState)\n const timer = useRef(-1)\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should not re-execute the effect when `events` changes\n useEffect(() => {\n const handleEvents = () => {\n setIdle(false)\n\n if (timer.current) {\n window.clearTimeout(timer.current)\n }\n\n timer.current = window.setTimeout(() => {\n setIdle(true)\n }, timeout)\n }\n\n for (const event of events) {\n document.addEventListener(event, handleEvents)\n }\n\n // Start the timer immediately instead of waiting for the first event to happen\n timer.current = window.setTimeout(() => {\n setIdle(true)\n }, timeout)\n\n return () => {\n for (const event of events) {\n document.removeEventListener(event, handleEvents)\n }\n\n window.clearTimeout(timer.current)\n timer.current = -1\n }\n }, [timeout])\n\n return idle\n}\n\nexport namespace useIdle {\n export type Options = UseIdleOptions\n}\n"],"mappings":"oGAeA,MAAMA,EAA4C,CAChD,OAAQ,CAAC,UAAW,YAAa,YAAa,QAAS,SAAU,OAAO,EACxE,aAAc,EAChB,EAGA,SAAgB,QAAQ,EAAiB,EAA0B,CACjE,GAAM,CAAE,SAAQ,gBAAiB,CAAE,GAAGA,EAAiB,GAAGC,CAAQ,EAC5D,CAACC,EAAMC,GAAWC,EAASC,CAAY,EACvCC,EAAQC,EAAO,EAAE,EAmCvB,OAhCAC,MAAgB,CACd,IAAM,iBAAqB,CACzBL,EAAQ,EAAK,EAETG,EAAM,SACR,OAAO,aAAaA,EAAM,OAAO,EAGnC,EAAM,QAAU,OAAO,eAAiB,CACtCH,EAAQ,EAAI,CACd,EAAGM,CAAO,CACZ,EAEA,IAAK,IAAMC,KAASC,EAClB,SAAS,iBAAiBD,EAAO,YAAY,EAQ/C,MAJA,GAAM,QAAU,OAAO,eAAiB,CACtCP,EAAQ,EAAI,CACd,EAAGM,CAAO,MAEG,CACX,IAAK,IAAMC,KAASC,EAClB,SAAS,oBAAoBD,EAAO,YAAY,EAGlD,OAAO,aAAaJ,EAAM,OAAO,EACjC,EAAM,QAAU,EAClB,CACF,EAAG,CAACG,CAAO,CAAC,EAELP,CACT"}
@@ -14,6 +14,7 @@ export type UseIntervalReturnValue = {
14
14
  /** Indicates if the interval is active */
15
15
  active: boolean;
16
16
  };
17
+ /** Runs `fn` every `interval` ms, with `start`, `stop` and `toggle` controls. */
17
18
  export declare function useInterval(fn: () => void, interval: number, { autoInvoke }?: UseIntervalOptions): UseIntervalReturnValue;
18
19
  export declare namespace useInterval {
19
20
  type Options = UseIntervalOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"use-interval.js","names":[],"sources":["../../src/hooks/use-interval.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type UseIntervalOptions = {\n /** If set, the interval will start automatically when the component is mounted, `false` by default */\n autoInvoke?: boolean\n}\n\nexport type UseIntervalReturnValue = {\n /** Starts the interval */\n start: () => void\n\n /** Stops the interval */\n stop: () => void\n\n /** Toggles the interval */\n toggle: () => void\n\n /** Indicates if the interval is active */\n active: boolean\n}\n\nexport function useInterval(\n fn: () => void,\n interval: number,\n { autoInvoke = false }: UseIntervalOptions = {}\n): UseIntervalReturnValue {\n const intervalRef = useRef<number | null>(null)\n const fnRef = useRef<() => void>(null)\n const intervalValueRef = useRef(interval)\n\n const [active, setActive] = useState(false)\n\n intervalValueRef.current = interval\n\n const start = useCallback(() => {\n setActive((old) => {\n if (!old && !intervalRef.current) {\n intervalRef.current = window.setInterval(fnRef.current!, intervalValueRef.current)\n }\n return true\n })\n }, [])\n\n const stop = useCallback(() => {\n setActive(false)\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current)\n }\n intervalRef.current = null\n }, [])\n\n const toggle = useCallback(() => {\n setActive((current) => {\n if (current) {\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current)\n }\n intervalRef.current = null\n return false\n }\n if (!intervalRef.current) {\n intervalRef.current = window.setInterval(fnRef.current!, intervalValueRef.current)\n }\n return true\n })\n }, [])\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should includes the 'interval'\n useEffect(() => {\n fnRef.current = fn\n active && start()\n return stop\n }, [fn, active, interval, start, stop])\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should execute only once\n useEffect(() => {\n if (autoInvoke) {\n start()\n }\n }, [start])\n\n return { start, stop, toggle, active }\n}\n\nexport namespace useInterval {\n export type Options = UseIntervalOptions\n export type ReturnValue = UseIntervalReturnValue\n}\n"],"mappings":"qHAqBA,SAAgB,YACd,EACA,EACA,CAAE,aAAa,IAA8B,CAAC,EACtB,CACxB,IAAM,EAAc,EAAsB,IAAI,EACxC,EAAQ,EAAmB,IAAI,EAC/B,EAAmB,EAAO,CAAQ,EAElC,CAAC,EAAQ,GAAa,EAAS,EAAK,EAE1C,EAAiB,QAAU,EAE3B,IAAM,EAAQ,MAAkB,CAC9B,EAAW,IACL,CAAC,GAAO,CAAC,EAAY,UACvB,EAAY,QAAU,OAAO,YAAY,EAAM,QAAU,EAAiB,OAAO,GAE5E,GACR,CACH,EAAG,CAAC,CAAC,EAEC,EAAO,MAAkB,CAC7B,EAAU,EAAK,EACX,EAAY,SACd,OAAO,cAAc,EAAY,OAAO,EAE1C,EAAY,QAAU,IACxB,EAAG,CAAC,CAAC,EAEC,EAAS,MAAkB,CAC/B,EAAW,GACL,GACE,EAAY,SACd,OAAO,cAAc,EAAY,OAAO,EAE1C,EAAY,QAAU,KACf,KAET,AACE,EAAY,UAAU,OAAO,YAAY,EAAM,QAAU,EAAiB,OAAO,EAE5E,GACR,CACH,EAAG,CAAC,CAAC,EAgBL,OAbA,OACE,EAAM,QAAU,EAChB,GAAU,EAAM,EACT,GACN,CAAC,EAAI,EAAQ,EAAU,EAAO,CAAI,CAAC,EAGtC,MAAgB,CACV,GACF,EAAM,CAEV,EAAG,CAAC,CAAK,CAAC,EAEH,CAAE,QAAO,OAAM,SAAQ,QAAO,CACvC"}
1
+ {"version":3,"file":"use-interval.js","names":["intervalRef","useRef","fnRef","intervalValueRef","interval","active","setActive","useState","start","useCallback","old","stop","toggle","current","useEffect","fn","autoInvoke"],"sources":["../../src/hooks/use-interval.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type UseIntervalOptions = {\n /** If set, the interval will start automatically when the component is mounted, `false` by default */\n autoInvoke?: boolean\n}\n\nexport type UseIntervalReturnValue = {\n /** Starts the interval */\n start: () => void\n\n /** Stops the interval */\n stop: () => void\n\n /** Toggles the interval */\n toggle: () => void\n\n /** Indicates if the interval is active */\n active: boolean\n}\n\n/** Runs `fn` every `interval` ms, with `start`, `stop` and `toggle` controls. */\nexport function useInterval(\n fn: () => void,\n interval: number,\n { autoInvoke = false }: UseIntervalOptions = {}\n): UseIntervalReturnValue {\n const intervalRef = useRef<number | null>(null)\n const fnRef = useRef<() => void>(null)\n const intervalValueRef = useRef(interval)\n\n const [active, setActive] = useState(false)\n\n intervalValueRef.current = interval\n\n const start = useCallback(() => {\n setActive((old) => {\n if (!old && !intervalRef.current) {\n intervalRef.current = window.setInterval(fnRef.current!, intervalValueRef.current)\n }\n return true\n })\n }, [])\n\n const stop = useCallback(() => {\n setActive(false)\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current)\n }\n intervalRef.current = null\n }, [])\n\n const toggle = useCallback(() => {\n setActive((current) => {\n if (current) {\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current)\n }\n intervalRef.current = null\n return false\n }\n if (!intervalRef.current) {\n intervalRef.current = window.setInterval(fnRef.current!, intervalValueRef.current)\n }\n return true\n })\n }, [])\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should includes the 'interval'\n useEffect(() => {\n fnRef.current = fn\n active && start()\n return stop\n }, [fn, active, interval, start, stop])\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should execute only once\n useEffect(() => {\n if (autoInvoke) {\n start()\n }\n }, [start])\n\n return { start, stop, toggle, active }\n}\n\nexport namespace useInterval {\n export type Options = UseIntervalOptions\n export type ReturnValue = UseIntervalReturnValue\n}\n"],"mappings":"qHAsBA,SAAgB,YACd,EACA,EACA,CAAE,aAAa,IAA8B,CAAC,EACtB,CACxB,IAAMA,EAAcC,EAAsB,IAAI,EACxCC,EAAQD,EAAmB,IAAI,EAC/BE,EAAmBF,EAAOG,CAAQ,EAElC,CAACC,EAAQC,GAAaC,EAAS,EAAK,EAE1C,EAAiB,QAAUH,EAE3B,IAAMI,EAAQC,MAAkB,CAC9BH,EAAW,IACL,CAACI,GAAO,CAACV,EAAY,UACvB,EAAY,QAAU,OAAO,YAAYE,EAAM,QAAUC,EAAiB,OAAO,GAE5E,GACR,CACH,EAAG,CAAC,CAAC,EAECQ,EAAOF,MAAkB,CAC7BH,EAAU,EAAK,EACXN,EAAY,SACd,OAAO,cAAcA,EAAY,OAAO,EAE1C,EAAY,QAAU,IACxB,EAAG,CAAC,CAAC,EAECY,EAASH,MAAkB,CAC/BH,EAAW,GACLO,GACEb,EAAY,SACd,OAAO,cAAcA,EAAY,OAAO,EAE1C,EAAY,QAAU,KACf,KAET,AACEA,EAAY,UAAU,OAAO,YAAYE,EAAM,QAAUC,EAAiB,OAAO,EAE5E,GACR,CACH,EAAG,CAAC,CAAC,EAgBL,OAbAW,OACE,EAAM,QAAUC,EAChBV,GAAUG,EAAM,EACTG,GACN,CAACI,EAAIV,EAAQD,EAAUI,EAAOG,CAAI,CAAC,EAGtCG,MAAgB,CACVE,GACFR,EAAM,CAEV,EAAG,CAACA,CAAK,CAAC,EAEH,CAAE,QAAO,OAAM,SAAQ,QAAO,CACvC"}
@@ -1,9 +1,15 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  //#region src/hooks/use-local-storage.d.ts
3
3
  export type UseLocalStorageOptions<T> = {
4
+ /** Value used when nothing is stored for the key. */
4
5
  defaultValue?: T;
6
+ /**
7
+ * Keeps the value in sync across tabs and components using the same key.
8
+ * @default true
9
+ */
5
10
  sync?: boolean;
6
11
  };
12
+ /** `useState` persisted in `localStorage` as JSON, synced across tabs and components by default. */
7
13
  export declare function useLocalStorage<T>(key: string, options: UseLocalStorageOptions<T> & {
8
14
  defaultValue: T;
9
15
  }): [T, React.Dispatch<React.SetStateAction<T>>];
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{useCallback as e,useEffect as t,useRef as n,useState as r}from"react";const i=`uselets-ui:local-storage`;function parseStorageValue(e){try{return JSON.parse(e)}catch{return e}}function readStorageValue(e,t){if(typeof window>`u`)return t;try{let n=window.localStorage.getItem(e);return n===null?t:parseStorageValue(n)}catch{return t}}function writeStorageValue(e,t){if(!(typeof window>`u`)){try{window.localStorage.setItem(e,String(JSON.stringify(t)))}catch{}window.dispatchEvent(new CustomEvent(i,{detail:{key:e,value:t}}))}}function useLocalStorage(a,o={}){let{defaultValue:s,sync:c=!0}=o,l=n(s),[u,d]=r(()=>readStorageValue(a,s)),f=n(u);l.current=s,f.current=u;let p=e(e=>{let t=typeof e==`function`?e(f.current):e;f.current=t,writeStorageValue(a,t),d(t)},[a]);return t(()=>{if(!c||typeof window>`u`)return;let handleStorage=e=>{if(e.storageArea!==window.localStorage||e.key!==a)return;let t=e.newValue===null?l.current:parseStorageValue(e.newValue);f.current=t,d(t)},handleLocalStorageEvent=e=>{let{key:t,value:n}=e.detail;t===a&&(f.current=n,d(n))};return window.addEventListener(`storage`,handleStorage),window.addEventListener(i,handleLocalStorageEvent),()=>{window.removeEventListener(`storage`,handleStorage),window.removeEventListener(i,handleLocalStorageEvent)}},[a,c]),[u,p]}export{useLocalStorage};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{useCallback as e,useEffect as t,useRef as n,useState as r}from"react";const i=`uselets-ui:local-storage`;function parseStorageValue(e){try{return JSON.parse(e)}catch{return e}}function readStorageValue(e,t){if(typeof window>`u`)return t;try{let n=window.localStorage.getItem(e);return n===null?t:parseStorageValue(n)}catch{return t}}function writeStorageValue(e,t){if(typeof window<`u`){try{t===void 0?window.localStorage.removeItem(e):window.localStorage.setItem(e,JSON.stringify(t))}catch{}window.dispatchEvent(new CustomEvent(i,{detail:{key:e,value:t}}))}}function useLocalStorage(a,o={}){let{defaultValue:s,sync:c=!0}=o,l=n(s),[u,d]=r(()=>readStorageValue(a,s)),f=n(u);l.current=s,f.current=u;let p=e(e=>{let t=typeof e==`function`?e(f.current):e;writeStorageValue(a,t);let n=t===void 0?l.current:t;f.current=n,d(n)},[a]);return t(()=>{if(!c||typeof window>`u`)return;let handleStorage=e=>{if(e.storageArea!==window.localStorage||e.key!==a)return;let t=e.newValue===null?l.current:parseStorageValue(e.newValue);f.current=t,d(t)},handleLocalStorageEvent=e=>{let{key:t,value:n}=e.detail;if(t!==a)return;let r=n===void 0?l.current:n;f.current=r,d(r)};return window.addEventListener(`storage`,handleStorage),window.addEventListener(i,handleLocalStorageEvent),()=>{window.removeEventListener(`storage`,handleStorage),window.removeEventListener(i,handleLocalStorageEvent)}},[a,c]),[u,p]}export{useLocalStorage};
2
2
  //# sourceMappingURL=use-local-storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-local-storage.js","names":[],"sources":["../../src/hooks/use-local-storage.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type UseLocalStorageOptions<T> = {\n defaultValue?: T\n sync?: boolean\n}\n\ntype LocalStorageEventDetail<T> = {\n key: string\n value: T | undefined\n}\n\nconst LOCAL_STORAGE_EVENT = 'uselets-ui:local-storage'\n\nfunction parseStorageValue<T>(value: string) {\n try {\n return JSON.parse(value) as T\n } catch {\n return value as T\n }\n}\n\nfunction readStorageValue<T>(key: string, defaultValue: T | undefined) {\n if (typeof window === 'undefined') {\n return defaultValue\n }\n\n try {\n const item = window.localStorage.getItem(key)\n\n if (item === null) {\n return defaultValue\n }\n\n return parseStorageValue<T>(item)\n } catch {\n return defaultValue\n }\n}\n\nfunction writeStorageValue<T>(key: string, value: T) {\n if (typeof window === 'undefined') {\n return\n }\n\n try {\n window.localStorage.setItem(key, String(JSON.stringify(value)))\n } catch {}\n\n window.dispatchEvent(new CustomEvent<LocalStorageEventDetail<T>>(LOCAL_STORAGE_EVENT, { detail: { key, value } }))\n}\n\nexport function useLocalStorage<T>(\n key: string,\n options: UseLocalStorageOptions<T> & { defaultValue: T }\n): [T, React.Dispatch<React.SetStateAction<T>>]\n\nexport function useLocalStorage<T = undefined>(\n key: string,\n options?: UseLocalStorageOptions<T>\n): [T | undefined, React.Dispatch<React.SetStateAction<T | undefined>>]\n\nexport function useLocalStorage<T>(key: string, options: UseLocalStorageOptions<T> = {}) {\n const { defaultValue, sync = true } = options\n const defaultValueRef = useRef(defaultValue)\n const [storedValue, setStoredValue] = useState<T | undefined>(() => readStorageValue<T>(key, defaultValue))\n const storedValueRef = useRef(storedValue)\n\n defaultValueRef.current = defaultValue\n storedValueRef.current = storedValue\n\n const setValue = useCallback<React.Dispatch<React.SetStateAction<T | undefined>>>(\n (value) => {\n const nextValue =\n typeof value === 'function'\n ? (value as (previousValue: T | undefined) => T | undefined)(storedValueRef.current)\n : value\n\n storedValueRef.current = nextValue\n writeStorageValue(key, nextValue)\n setStoredValue(nextValue)\n },\n [key]\n )\n\n useEffect(() => {\n if (!sync || typeof window === 'undefined') {\n return\n }\n\n const handleStorage = (event: StorageEvent) => {\n if (event.storageArea !== window.localStorage || event.key !== key) {\n return\n }\n\n const nextValue = event.newValue === null ? defaultValueRef.current : parseStorageValue<T>(event.newValue)\n\n storedValueRef.current = nextValue\n setStoredValue(nextValue)\n }\n\n const handleLocalStorageEvent = (event: Event) => {\n const { key: eventKey, value } = (event as CustomEvent<LocalStorageEventDetail<T>>).detail\n\n if (eventKey !== key) {\n return\n }\n\n storedValueRef.current = value\n setStoredValue(value)\n }\n\n window.addEventListener('storage', handleStorage)\n window.addEventListener(LOCAL_STORAGE_EVENT, handleLocalStorageEvent)\n\n return () => {\n window.removeEventListener('storage', handleStorage)\n window.removeEventListener(LOCAL_STORAGE_EVENT, handleLocalStorageEvent)\n }\n }, [key, sync])\n\n return [storedValue, setValue]\n}\n\nexport namespace useLocalStorage {\n export type Options<T> = UseLocalStorageOptions<T>\n}\n"],"mappings":"qHAYA,MAAM,EAAsB,2BAE5B,SAAS,kBAAqB,EAAe,CAC3C,GAAI,CACF,OAAO,KAAK,MAAM,CAAK,CACzB,MAAQ,CACN,OAAO,CACT,CACF,CAEA,SAAS,iBAAoB,EAAa,EAA6B,CACrE,GAAI,OAAO,OAAW,IACpB,OAAO,EAGT,GAAI,CACF,IAAM,EAAO,OAAO,aAAa,QAAQ,CAAG,EAM5C,OAJI,IAAS,KACJ,EAGF,kBAAqB,CAAI,CAClC,MAAQ,CACN,OAAO,CACT,CACF,CAEA,SAAS,kBAAqB,EAAa,EAAU,CAC/C,YAAO,OAAW,KAItB,IAAI,CACF,OAAO,aAAa,QAAQ,EAAK,OAAO,KAAK,UAAU,CAAK,CAAC,CAAC,CAChE,MAAQ,CAAC,CAET,OAAO,cAAc,IAAI,YAAwC,EAAqB,CAAE,OAAQ,CAAE,MAAK,OAAM,CAAE,CAAC,CAAC,CAFxG,CAGX,CAYA,SAAgB,gBAAmB,EAAa,EAAqC,CAAC,EAAG,CACvF,GAAM,CAAE,eAAc,OAAO,IAAS,EAChC,EAAkB,EAAO,CAAY,EACrC,CAAC,EAAa,GAAkB,MAA8B,iBAAoB,EAAK,CAAY,CAAC,EACpG,EAAiB,EAAO,CAAW,EAEzC,EAAgB,QAAU,EAC1B,EAAe,QAAU,EAEzB,IAAM,EAAW,EACd,GAAU,CACT,IAAM,EACJ,OAAO,GAAU,WACZ,EAA0D,EAAe,OAAO,EACjF,EAEN,EAAe,QAAU,EACzB,kBAAkB,EAAK,CAAS,EAChC,EAAe,CAAS,CAC1B,EACA,CAAC,CAAG,CACN,EAsCA,OApCA,MAAgB,CACd,GAAI,CAAC,GAAQ,OAAO,OAAW,IAC7B,OAGF,IAAM,cAAiB,GAAwB,CAC7C,GAAI,EAAM,cAAgB,OAAO,cAAgB,EAAM,MAAQ,EAC7D,OAGF,IAAM,EAAY,EAAM,WAAa,KAAO,EAAgB,QAAU,kBAAqB,EAAM,QAAQ,EAEzG,EAAe,QAAU,EACzB,EAAe,CAAS,CAC1B,EAEM,wBAA2B,GAAiB,CAChD,GAAM,CAAE,IAAK,EAAU,SAAW,EAAkD,OAEhF,IAAa,IAIjB,EAAe,QAAU,EACzB,EAAe,CAAK,EACtB,EAKA,OAHA,OAAO,iBAAiB,UAAW,aAAa,EAChD,OAAO,iBAAiB,EAAqB,uBAAuB,MAEvD,CACX,OAAO,oBAAoB,UAAW,aAAa,EACnD,OAAO,oBAAoB,EAAqB,uBAAuB,CACzE,CACF,EAAG,CAAC,EAAK,CAAI,CAAC,EAEP,CAAC,EAAa,CAAQ,CAC/B"}
1
+ {"version":3,"file":"use-local-storage.js","names":["LOCAL_STORAGE_EVENT","value","defaultValue","item","key","options","defaultValueRef","useRef","storedValue","setStoredValue","useState","storedValueRef","setValue","useCallback","nextValue","resolvedValue","useEffect","sync","event","eventKey"],"sources":["../../src/hooks/use-local-storage.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type UseLocalStorageOptions<T> = {\n /** Value used when nothing is stored for the key. */\n defaultValue?: T\n /**\n * Keeps the value in sync across tabs and components using the same key.\n * @default true\n */\n sync?: boolean\n}\n\ntype LocalStorageEventDetail<T> = {\n key: string\n value: T | undefined\n}\n\nconst LOCAL_STORAGE_EVENT = 'uselets-ui:local-storage'\n\nfunction parseStorageValue<T>(value: string) {\n try {\n return JSON.parse(value) as T\n } catch {\n return value as T\n }\n}\n\nfunction readStorageValue<T>(key: string, defaultValue: T | undefined) {\n if (typeof window === 'undefined') {\n return defaultValue\n }\n\n try {\n const item = window.localStorage.getItem(key)\n\n if (item === null) {\n return defaultValue\n }\n\n return parseStorageValue<T>(item)\n } catch {\n return defaultValue\n }\n}\n\nfunction writeStorageValue<T>(key: string, value: T) {\n if (typeof window === 'undefined') {\n return\n }\n\n try {\n // `undefined` has no JSON form (it would be stored as the string \"undefined\"), so it clears the key instead.\n if (value === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(value))\n }\n } catch {}\n\n window.dispatchEvent(new CustomEvent<LocalStorageEventDetail<T>>(LOCAL_STORAGE_EVENT, { detail: { key, value } }))\n}\n\n/** `useState` persisted in `localStorage` as JSON, synced across tabs and components by default. */\nexport function useLocalStorage<T>(\n key: string,\n options: UseLocalStorageOptions<T> & { defaultValue: T }\n): [T, React.Dispatch<React.SetStateAction<T>>]\n\nexport function useLocalStorage<T = undefined>(\n key: string,\n options?: UseLocalStorageOptions<T>\n): [T | undefined, React.Dispatch<React.SetStateAction<T | undefined>>]\n\nexport function useLocalStorage<T>(key: string, options: UseLocalStorageOptions<T> = {}) {\n const { defaultValue, sync = true } = options\n const defaultValueRef = useRef(defaultValue)\n const [storedValue, setStoredValue] = useState<T | undefined>(() => readStorageValue<T>(key, defaultValue))\n const storedValueRef = useRef(storedValue)\n\n defaultValueRef.current = defaultValue\n storedValueRef.current = storedValue\n\n const setValue = useCallback<React.Dispatch<React.SetStateAction<T | undefined>>>(\n (value) => {\n const nextValue =\n typeof value === 'function'\n ? (value as (previousValue: T | undefined) => T | undefined)(storedValueRef.current)\n : value\n\n writeStorageValue(key, nextValue)\n const resolvedValue = nextValue === undefined ? defaultValueRef.current : nextValue\n storedValueRef.current = resolvedValue\n setStoredValue(resolvedValue)\n },\n [key]\n )\n\n useEffect(() => {\n if (!sync || typeof window === 'undefined') {\n return\n }\n\n const handleStorage = (event: StorageEvent) => {\n if (event.storageArea !== window.localStorage || event.key !== key) {\n return\n }\n\n const nextValue = event.newValue === null ? defaultValueRef.current : parseStorageValue<T>(event.newValue)\n\n storedValueRef.current = nextValue\n setStoredValue(nextValue)\n }\n\n const handleLocalStorageEvent = (event: Event) => {\n const { key: eventKey, value } = (event as CustomEvent<LocalStorageEventDetail<T>>).detail\n\n if (eventKey !== key) {\n return\n }\n\n const nextValue = value === undefined ? defaultValueRef.current : value\n\n storedValueRef.current = nextValue\n setStoredValue(nextValue)\n }\n\n window.addEventListener('storage', handleStorage)\n window.addEventListener(LOCAL_STORAGE_EVENT, handleLocalStorageEvent)\n\n return () => {\n window.removeEventListener('storage', handleStorage)\n window.removeEventListener(LOCAL_STORAGE_EVENT, handleLocalStorageEvent)\n }\n }, [key, sync])\n\n return [storedValue, setValue]\n}\n\nexport namespace useLocalStorage {\n export type Options<T> = UseLocalStorageOptions<T>\n}\n"],"mappings":"qHAiBA,MAAMA,EAAsB,2BAE5B,SAAS,kBAAqB,EAAe,CAC3C,GAAI,CACF,OAAO,KAAK,MAAMC,CAAK,CACzB,MAAQ,CACN,OAAOA,CACT,CACF,CAEA,SAAS,iBAAoB,EAAa,EAA6B,CACrE,GAAI,OAAO,OAAW,IACpB,OAAOC,EAGT,GAAI,CACF,IAAMC,EAAO,OAAO,aAAa,QAAQC,CAAG,EAM5C,OAJID,IAAS,KACJD,EAGF,kBAAqBC,CAAI,CAClC,MAAQ,CACN,OAAOD,CACT,CACF,CAEA,SAAS,kBAAqB,EAAa,EAAU,CACnD,GAAI,OAAO,OAAW,IAItB,IAAI,CAEED,IAAU,IAAA,GACZ,OAAO,aAAa,WAAWG,CAAG,EAElC,OAAO,aAAa,QAAQA,EAAK,KAAK,UAAUH,CAAK,CAAC,CAE1D,MAAQ,CAAC,CAET,OAAO,cAAc,IAAI,YAAwCD,EAAqB,CAAE,OAAQ,CAAE,MAAK,OAAM,CAAE,CAAC,CAAC,CAFxG,CAGX,CAaA,SAAgB,gBAAmB,EAAa,EAAqC,CAAC,EAAG,CACvF,GAAM,CAAE,eAAc,OAAO,IAASK,EAChCC,EAAkBC,EAAOL,CAAY,EACrC,CAACM,EAAaC,GAAkBC,MAA8B,iBAAoBN,EAAKF,CAAY,CAAC,EACpGS,EAAiBJ,EAAOC,CAAW,EAEzC,EAAgB,QAAUN,EAC1B,EAAe,QAAUM,EAEzB,IAAMI,EAAWC,EACd,GAAU,CACT,IAAMC,EACJ,OAAOb,GAAU,WACZA,EAA0DU,EAAe,OAAO,EACjFV,EAEN,kBAAkBG,EAAKU,CAAS,EAChC,IAAMC,EAAgBD,IAAc,IAAA,GAAYR,EAAgB,QAAUQ,EAC1E,EAAe,QAAUC,EACzBN,EAAeM,CAAa,CAC9B,EACA,CAACX,CAAG,CACN,EAwCA,OAtCAY,MAAgB,CACd,GAAI,CAACC,GAAQ,OAAO,OAAW,IAC7B,OAGF,IAAM,cAAiB,GAAwB,CAC7C,GAAIC,EAAM,cAAgB,OAAO,cAAgBA,EAAM,MAAQd,EAC7D,OAGF,IAAMU,EAAYI,EAAM,WAAa,KAAOZ,EAAgB,QAAU,kBAAqBY,EAAM,QAAQ,EAEzG,EAAe,QAAUJ,EACzBL,EAAeK,CAAS,CAC1B,EAEM,wBAA2B,GAAiB,CAChD,GAAM,CAAE,IAAKK,EAAU,SAAWD,EAAkD,OAEpF,GAAIC,IAAaf,EACf,OAGF,IAAMU,EAAYb,IAAU,IAAA,GAAYK,EAAgB,QAAUL,EAElE,EAAe,QAAUa,EACzBL,EAAeK,CAAS,CAC1B,EAKA,OAHA,OAAO,iBAAiB,UAAW,aAAa,EAChD,OAAO,iBAAiBd,EAAqB,uBAAuB,MAEvD,CACX,OAAO,oBAAoB,UAAW,aAAa,EACnD,OAAO,oBAAoBA,EAAqB,uBAAuB,CACzE,CACF,EAAG,CAACI,EAAKa,CAAI,CAAC,EAEP,CAACT,EAAaI,CAAQ,CAC/B"}
@@ -2,6 +2,7 @@ import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  import { MaskOptions, MaskOptions as MaskOptions$1, ModifiedData, Modify, Replacement, Track, TrackingData } from "@react-input/mask";
3
3
  //#region src/hooks/use-mask.d.ts
4
4
  export type UseMaskOptions = MaskOptions$1;
5
+ /** Masks the value of your own input. Returns a ref for the `<input>`. Default tokens: `_` digit, `#` letter, `*` any. */
5
6
  export declare function useMask(options?: UseMaskOptions): import("react").MutableRefObject<HTMLInputElement>;
6
7
  //#endregion
7
8
  export type { MaskOptions, ModifiedData, Modify, Replacement, Track, TrackingData };
@@ -1 +1 @@
1
- {"version":3,"file":"use-mask.js","names":["useReactInputMask"],"sources":["../../src/hooks/use-mask.ts"],"sourcesContent":["import type { MaskOptions, Replacement } from '@react-input/mask'\nimport { useMask as useReactInputMask } from '@react-input/mask'\n\nexport type { MaskOptions, ModifiedData, Modify, Replacement, Track, TrackingData } from '@react-input/mask'\n\nconst DEFAULT_REPLACEMENT: Replacement = {\n _: /\\d/,\n '#': /[A-Za-z]/,\n '*': /./\n}\n\nexport type UseMaskOptions = MaskOptions\n\nexport function useMask(options: UseMaskOptions = {}) {\n const { replacement, mask, ...rest } = options\n\n // Legacy default tokens (9/a) collided with typed digits/letters; rewrite them to the safe tokens (_/#) when the default replacement is in effect.\n const safeMask = !replacement && mask ? mask.replace(/[9a]/g, (token) => (token === '9' ? '_' : '#')) : mask\n\n return useReactInputMask({\n mask: safeMask,\n ...rest,\n replacement: replacement ?? DEFAULT_REPLACEMENT\n })\n}\n"],"mappings":"oFAKA,MAAM,EAAmC,CACvC,EAAG,KACH,IAAK,WACL,IAAK,GACP,EAIA,SAAgB,QAAQ,EAA0B,CAAC,EAAG,CACpD,GAAM,CAAE,cAAa,OAAM,GAAG,GAAS,EAGjC,EAAW,CAAC,GAAe,EAAO,EAAK,QAAQ,QAAU,GAAW,IAAU,IAAM,IAAM,GAAI,EAAI,EAExG,OAAOA,EAAkB,CACvB,KAAM,EACN,GAAG,EACH,YAAa,GAAe,CAC9B,CAAC,CACH"}
1
+ {"version":3,"file":"use-mask.js","names":["useReactInputMask","useMask$1","DEFAULT_REPLACEMENT","rest","options","safeMask","replacement","mask","token"],"sources":["../../src/hooks/use-mask.ts"],"sourcesContent":["import type { MaskOptions, Replacement } from '@react-input/mask'\nimport { useMask as useReactInputMask } from '@react-input/mask'\n\nexport type { MaskOptions, ModifiedData, Modify, Replacement, Track, TrackingData } from '@react-input/mask'\n\nconst DEFAULT_REPLACEMENT: Replacement = {\n _: /\\d/,\n '#': /[A-Za-z]/,\n '*': /./\n}\n\nexport type UseMaskOptions = MaskOptions\n\n/** Masks the value of your own input. Returns a ref for the `<input>`. Default tokens: `_` digit, `#` letter, `*` any. */\nexport function useMask(options: UseMaskOptions = {}) {\n const { replacement, mask, ...rest } = options\n\n // Legacy default tokens (9/a) collided with typed digits/letters; rewrite them to the safe tokens (_/#) when the default replacement is in effect.\n const safeMask = !replacement && mask ? mask.replace(/[9a]/g, (token) => (token === '9' ? '_' : '#')) : mask\n\n return useReactInputMask({\n mask: safeMask,\n ...rest,\n replacement: replacement ?? DEFAULT_REPLACEMENT\n })\n}\n"],"mappings":"oFAKA,MAAME,EAAmC,CACvC,EAAG,KACH,IAAK,WACL,IAAK,GACP,EAKA,SAAgB,QAAQ,EAA0B,CAAC,EAAG,CACpD,GAAM,CAAE,cAAa,OAAM,GAAGC,GAASC,EAGjCC,EAAW,CAACC,GAAeC,EAAOA,EAAK,QAAQ,QAAU,GAAWC,IAAU,IAAM,IAAM,GAAI,EAAID,EAExG,OAAOP,EAAkB,CACvB,KAAMK,EACN,GAAGF,EACH,YAAaG,GAAeJ,CAC9B,CAAC,CACH"}
@@ -1,5 +1,6 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  //#region src/hooks/use-mobile.d.ts
3
+ /** Returns whether the viewport is narrower than `768px`. */
3
4
  export declare function useIsMobile(): boolean;
4
5
  //#endregion
5
6
  //# sourceMappingURL=use-mobile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-mobile.js","names":[],"sources":["../../src/hooks/use-mobile.ts"],"sourcesContent":["import * as React from 'react'\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener('change', onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener('change', onChange)\n }, [])\n\n return !!isMobile\n}\n"],"mappings":"gEAIA,SAAgB,aAAc,CAC5B,GAAM,CAAC,EAAU,GAAe,EAAM,SAA8B,IAAA,EAAS,EAY7E,OAVA,EAAM,cAAgB,CACpB,IAAM,EAAM,OAAO,WAAW,oBAAyC,EACjE,aAAiB,CACrB,EAAY,OAAO,WAAa,GAAiB,CACnD,EAGA,OAFA,EAAI,iBAAiB,SAAU,QAAQ,EACvC,EAAY,OAAO,WAAa,GAAiB,MACpC,EAAI,oBAAoB,SAAU,QAAQ,CACzD,EAAG,CAAC,CAAC,EAEE,CAAC,CAAC,CACX"}
1
+ {"version":3,"file":"use-mobile.js","names":["React","isMobile","setIsMobile","mql"],"sources":["../../src/hooks/use-mobile.ts"],"sourcesContent":["import * as React from 'react'\n\nconst MOBILE_BREAKPOINT = 768\n\n/** Returns whether the viewport is narrower than `768px`. */\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener('change', onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener('change', onChange)\n }, [])\n\n return !!isMobile\n}\n"],"mappings":"gEAKA,SAAgB,aAAc,CAC5B,GAAM,CAACC,EAAUC,GAAeF,EAAM,SAA8B,IAAA,EAAS,EAY7E,OAVAA,EAAM,cAAgB,CACpB,IAAMG,EAAM,OAAO,WAAW,oBAAyC,EACjE,aAAiB,CACrBD,EAAY,OAAO,WAAa,GAAiB,CACnD,EAGA,OAFAC,EAAI,iBAAiB,SAAU,QAAQ,EACvCD,EAAY,OAAO,WAAa,GAAiB,MACpCC,EAAI,oBAAoB,SAAU,QAAQ,CACzD,EAAG,CAAC,CAAC,EAEE,CAAC,CAACF,CACX"}