@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
@@ -0,0 +1,41 @@
1
+ import { t as __name } from "./rolldown-runtime-BhWHdk3m.js";
2
+ import * as React from "react";
3
+ //#region src/lib/as-child.d.ts
4
+ type AsChildTag = keyof React.JSX.IntrinsicElements;
5
+ type AsChildProps<Tag extends AsChildTag> = React.ComponentProps<Tag> & {
6
+ /** Renders the child element instead of the default one, passing this component's props and behavior to it. */
7
+ asChild?: boolean;
8
+ };
9
+ /**
10
+ * Public props of a component built on a Base UI part: Base UI's own `render` prop is stripped, so
11
+ * `asChild` stays the only polymorphism API exposed by this package.
12
+ */
13
+ type AsChildPrimitiveProps<Component extends React.ElementType> = Omit<React.ComponentProps<Component>, 'render'> & {
14
+ /** Renders the child element instead of the default one, passing this component's props and behavior to it. */
15
+ asChild?: boolean;
16
+ };
17
+ type UseAsChildProps<Tag extends AsChildTag> = Record<string, unknown> & {
18
+ asChild?: boolean;
19
+ children?: React.ReactNode;
20
+ ref?: React.Ref<React.ComponentRef<Tag>>;
21
+ };
22
+ /**
23
+ * Drop-in replacement for the `const Comp = asChild ? Slot.Root : 'tag'` idiom, for components
24
+ * with no Base UI primitive underneath. `asChild` stays the only public polymorphism API — Base
25
+ * UI's own `render` prop never leaks out of this package.
26
+ */
27
+ declare function useAsChild<Tag extends AsChildTag>(defaultTagName: Tag, props: UseAsChildProps<Tag>): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
28
+ /**
29
+ * For a component that wraps a real Base UI part (which natively accepts `render`) but exposes
30
+ * `asChild` instead. Spread the result after the component's own props so it always wins.
31
+ *
32
+ * With `asChild`, the single child element becomes the rendered element and replaces the part's
33
+ * content. Parts must not render their own content in that case (the child element is `children`).
34
+ */
35
+ declare function toAsChildRenderProps<Children>(asChild: boolean | undefined, children: Children): {
36
+ render?: React.ReactElement;
37
+ children?: Children;
38
+ };
39
+ //#endregion
40
+ export { useAsChild as i, AsChildProps as n, toAsChildRenderProps as r, AsChildPrimitiveProps as t };
41
+ //# sourceMappingURL=as-child-Dxg3Xo1G.d.ts.map
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import{spawn as e}from"node:child_process";import t from"node:fs/promises";import n from"node:path";import r from"node:readline/promises";import{fileURLToPath as i}from"node:url";import{Command as a,Option as o}from"commander";const s=`uselets-ui`,c=`@fontsource-variable/inter`,l=[`app/layout.tsx`,`app/layout.jsx`,`pages/_app.tsx`,`pages/_app.jsx`,`src/main.tsx`,`src/main.jsx`,`src/index.tsx`,`src/index.jsx`],u={codex:n.join(`.agents`,`skills`,s),claude:n.join(`.claude`,`skills`,s)},d=Object.keys(u);async function f(e){try{return await t.access(e),!0}catch{return!1}}async function p(e){return JSON.parse(await t.readFile(e,`utf8`))}async function m(){let e=i(new URL(`.`,import.meta.url));for(;;)try{return await t.access(n.join(e,`package.json`)),e}catch{let t=n.dirname(e);if(t===e)throw Error(`Unable to resolve @uselets/ui package root`);e=t}}function h(e){return e===`all`?d:[e]}function g(e,t){return!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t])}async function _(e,t){let r=t.packageManager?.split(`@`)[0];return r===`bun`||r===`pnpm`||r===`yarn`||r===`npm`?r:await f(n.join(e,`bun.lock`))?`bun`:await f(n.join(e,`pnpm-lock.yaml`))?`pnpm`:await f(n.join(e,`yarn.lock`))?`yarn`:(await f(n.join(e,`package-lock.json`)),`npm`)}function v(e,t,n){switch(e){case`bun`:return[`bun`,`add`,...n?[`-d`]:[],...t];case`pnpm`:return[`pnpm`,`add`,...n?[`-D`]:[],...t];case`yarn`:return[`yarn`,`add`,...n?[`-D`]:[],...t];case`npm`:return[`npm`,`install`,...n?[`-D`]:[],...t]}}async function y(t,n){let[r,...i]=t;if(!r)throw Error(`Missing command`);console.log(`Running: ${t.join(` `)}`),await new Promise((t,a)=>{let o=e(r,i,{cwd:n,stdio:`inherit`});o.on(`error`,a),o.on(`close`,e=>{if(e===0){t();return}a(Error(`${r} exited with code ${e}`))})})}function b(e,t){let n=e.dependencies?.[t]??e.devDependencies?.[t];if(!n)throw Error(`Unable to find ${t} version in @uselets/ui package metadata`);return n}async function x(e,t){let r=await m(),i=await p(n.join(r,`package.json`)),a=await _(e,t),o=[],s=[];if(!i.name||!i.version)throw Error(`Unable to resolve @uselets/ui package name and version`);g(t,i.name)||o.push(`${i.name}@${i.version}`),g(t,c)||o.push(`${c}@${b(i,c)}`),g(t,`tailwindcss`)||s.push(`tailwindcss@${b(i,`tailwindcss`)}`),g(t,`@tailwindcss/postcss`)||s.push(`@tailwindcss/postcss@${b(i,`@tailwindcss/postcss`)}`),o.length>0?await y(v(a,o,!1),e):console.log(`Runtime dependencies already declared.`),s.length>0?await y(v(a,s,!0),e):console.log(`Tailwind dependencies already declared.`)}async function S(e){let r=await m(),i=n.join(r,`skills`,s);try{await t.access(i)}catch{throw Error(`Bundled skill not found at ${i}`)}let a=[];for(let r of e){let e=n.join(process.cwd(),u[r]);await t.rm(e,{recursive:!0,force:!0}),await t.mkdir(n.dirname(e),{recursive:!0}),await t.cp(i,e,{recursive:!0}),a.push(e)}console.log(`Installed ${s} skill:`);for(let e of a)console.log(`- ${e}`)}async function C(){return r.createInterface({input:process.stdin,output:process.stdout})}async function w(e){if(!process.stdin.isTTY)return e;let t=await C();try{for(;;){let n=(await t.question(`Theme (max/gomax) [${e}]: `)).trim().toLowerCase();if(!n)return e;if(n===`max`||n===`gomax`)return n;console.log(`Please choose "max" or "gomax".`)}}finally{t.close()}}async function T(e){if(!process.stdin.isTTY)return e;let t=await C();try{return(await t.question(`Global CSS path [${e}]: `)).trim()||e}finally{t.close()}}async function E(){if(!process.stdin.isTTY)return!1;let e=await C();try{for(;;){let t=(await e.question(`Install agent skill? (y/N): `)).trim().toLowerCase();if(!t||t===`n`||t===`no`)return!1;if(t===`y`||t===`yes`)return!0;console.log(`Please answer "y" or "n".`)}}finally{e.close()}}async function D(e){let r=n.join(e,`postcss.config.mjs`);if(await f(r)){console.log(`Preserved existing postcss.config.mjs.`);return}await t.writeFile(r,`export { default } from '@uselets/ui/postcss.config'
3
- `),console.log(`Created postcss.config.mjs.`)}function O(e){let t=n.posix.dirname(e.replaceAll(n.sep,n.posix.sep)),r=n.posix.relative(t,`node_modules/@uselets/ui/dist`);return r.startsWith(`.`)?r:`./${r}`}function k(e,t,n){let r=[],i=/@import\s+['"]tailwindcss['"]/.test(e),a=/@import\s+['"]@uselets\/ui\/themes\/(?:max|gomax)\.css['"]/.test(e),o=/@source\s+['"][^'"]*@uselets\/ui\/dist['"]/.test(e);return i||r.push(`@import 'tailwindcss';`),a||r.push(`@import '@uselets/ui/themes/${t}.css';`),o||r.push(`@source '${O(n)}';`),{imports:r,hasTheme:a}}async function A(e,r,i){let a=n.resolve(e,r),o=await f(a)?await t.readFile(a,`utf8`):``,{imports:s,hasTheme:c}=k(o,i,r);if(c&&console.log(`Preserved existing @uselets/ui theme import.`),s.length===0){console.log(`Global CSS already configured at ${r}.`);return}let l=o.length>0&&!o.startsWith(`
2
+ import{spawn as e}from"node:child_process";import t from"node:fs/promises";import n from"node:path";import r from"node:readline/promises";import{fileURLToPath as i}from"node:url";import{Command as a,Option as o}from"commander";const s=[`app/layout.tsx`,`app/layout.jsx`,`src/app/layout.tsx`,`src/app/layout.jsx`,`pages/_app.tsx`,`pages/_app.jsx`,`src/pages/_app.tsx`,`src/pages/_app.jsx`,`src/main.tsx`,`src/main.jsx`,`src/index.tsx`,`src/index.jsx`],c=/^[ \t]*@import\s+['"]tailwindcss['"][^\n]*$/m,l=/@import\s+['"]@uselets\/ui\/themes\/(?:max|gomax)\.css['"]/,u=/@source\s+['"][^'"]*@uselets\/ui\/dist['"]/;function d(e){let t=n.posix.dirname(e.replaceAll(n.sep,n.posix.sep)),r=n.posix.relative(t,`node_modules/@uselets/ui/dist`);return r.startsWith(`.`)?r:`./${r}`}function f(e,t,n){let r=c.exec(e),i=l.exec(e),a=i!==null,o=a&&r!==null&&i.index<r.index,s=[];if(a||s.push(`@import '@uselets/ui/themes/${t}.css';`),u.test(e)||s.push(`@source '${d(n)}';`),!r){let t=[`@import 'tailwindcss';`,...s],n=e.length>0&&!e.startsWith(`
4
3
  `)?`
5
- `:``,u=`${s.join(`
6
- `)}${l}${o}`;await t.mkdir(n.dirname(a),{recursive:!0}),await t.writeFile(a,u),console.log(`Updated global CSS at ${r}.`)}async function j(e){for(let t of l)if(await f(n.join(e,t)))return t}async function M(){if(!process.stdin.isTTY)return;let e=await C();try{return(await e.question(`App entry file to import the font in (leave empty to skip): `)).trim()||void 0}finally{e.close()}}async function N(e,t){return t||await j(e)||M()}function P(e){console.log(`${e} Add \`import '${c}'\` to your app's entry file (for example app/layout.tsx or src/main.tsx) to load the font.`)}async function F(e,r){if(!r){P(`Could not detect an app entry file.`);return}let i=n.resolve(e,r);if(!await f(i)){P(`Entry file ${r} not found.`);return}let a=await t.readFile(i,`utf8`);if(RegExp(`import\\s+['"]${c}['"]`).test(a)){console.log(`Font import already present in ${r}.`);return}let o=a.match(/^(['"])use (?:client|server)\1;?\r?\n/),s=`import '${c}'\n`,l=o?a.slice(0,o[0].length)+s+a.slice(o[0].length):s+a;await t.writeFile(i,l),console.log(`Added font import to ${r}.`)}async function I(e){let t=process.cwd(),r=n.join(t,`package.json`);if(!await f(r))throw Error(`No package.json found in the current directory. Run uselets init from your project root.`);let i=await p(r),a=e.theme??await w(`max`),o=e.css??await T(`src/styles/globals.css`),s=await N(t,e.entry),c=e.installSkill??await E();await x(t,i),await D(t),await A(t,o,a),await F(t,s),c&&await S(d)}async function L(){let e=new a;if(e.name(`uselets`).description(`CLI for @uselets/ui`).showHelpAfterError(),e.command(`skill`).description(`Reinstall the ${s} agent skill`).addOption(new o(`--agent <agent>`,`Target agent directory`).choices([`codex`,`claude`,`all`]).default(`all`)).action(async e=>{await S(h(e.agent))}),e.command(`init`).description(`Set up @uselets/ui in this project`).addOption(new o(`--theme <theme>`,`Theme to import`).choices([`max`,`gomax`])).option(`--css <path>`,`Global CSS file path`).option(`--entry <path>`,`App entry file to import the font in (for example app/layout.tsx or src/main.tsx)`).option(`--install-skill`,`Install the agent skill without prompting`).option(`--no-install-skill`,`Skip the agent skill prompt and installation`).action(async e=>{await I(e)}),process.argv.length<=2){e.outputHelp();return}await e.parseAsync()}L().catch(e=>{console.error(e instanceof Error?e.message:e),process.exitCode=1});export{};
4
+ `:``;return{source:`${t.join(`
5
+ `)}${n}${e}`,hasTheme:a,themeBeforeTailwind:o}}if(s.length===0)return{source:null,hasTheme:a,themeBeforeTailwind:o};let f=r.index+r[0].length;return{source:`${e.slice(0,f)}\n${s.join(`
6
+ `)}${e.slice(f)}`,hasTheme:a,themeBeforeTailwind:o}}const p=`uselets-ui`,m=`@fontsource-variable/inter`,h={codex:n.join(`.agents`,`skills`,p),claude:n.join(`.claude`,`skills`,p)},g=Object.keys(h);async function _(e){try{return await t.access(e),!0}catch{return!1}}async function v(e){return JSON.parse(await t.readFile(e,`utf8`))}async function y(){let e=i(new URL(`.`,import.meta.url));for(;;)try{return await t.access(n.join(e,`package.json`)),e}catch{let t=n.dirname(e);if(t===e)throw Error(`Unable to resolve @uselets/ui package root`);e=t}}function b(e){return e===`all`?g:[e]}function x(e,t){return!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t])}async function S(e,t){let r=t.packageManager?.split(`@`)[0];return r===`bun`||r===`pnpm`||r===`yarn`||r===`npm`?r:await _(n.join(e,`bun.lock`))?`bun`:await _(n.join(e,`pnpm-lock.yaml`))?`pnpm`:await _(n.join(e,`yarn.lock`))?`yarn`:(await _(n.join(e,`package-lock.json`)),`npm`)}function C(e,t,n){switch(e){case`bun`:return[`bun`,`add`,...n?[`-d`]:[],...t];case`pnpm`:return[`pnpm`,`add`,...n?[`-D`]:[],...t];case`yarn`:return[`yarn`,`add`,...n?[`-D`]:[],...t];case`npm`:return[`npm`,`install`,...n?[`-D`]:[],...t]}}async function w(t,n){let[r,...i]=t;if(!r)throw Error(`Missing command`);console.log(`Running: ${t.join(` `)}`),await new Promise((t,a)=>{let o=e(r,i,{cwd:n,stdio:`inherit`});o.on(`error`,a),o.on(`close`,e=>{e===0?t():a(/* @__PURE__ */ Error(`${r} exited with code ${e}`))})})}function T(e,t){let n=e.dependencies?.[t]??e.devDependencies?.[t];if(!n)throw Error(`Unable to find ${t} version in @uselets/ui package metadata`);return n}async function E(e,t){let r=await y(),i=await v(n.join(r,`package.json`)),a=await S(e,t),o=[],s=[];if(!i.name||!i.version)throw Error(`Unable to resolve @uselets/ui package name and version`);x(t,i.name)||o.push(`${i.name}@${i.version}`),x(t,m)||o.push(`${m}@${T(i,m)}`),x(t,`tailwindcss`)||s.push(`tailwindcss@${T(i,`tailwindcss`)}`),x(t,`@tailwindcss/postcss`)||s.push(`@tailwindcss/postcss@${T(i,`@tailwindcss/postcss`)}`),o.length>0?await w(C(a,o,!1),e):console.log(`Runtime dependencies already declared.`),s.length>0?await w(C(a,s,!0),e):console.log(`Tailwind dependencies already declared.`)}async function D(e){let r=await y(),i=n.join(r,`skills`,p);try{await t.access(i)}catch{throw Error(`Bundled skill not found at ${i}`)}let a=[];for(let r of e){let e=n.join(process.cwd(),h[r]);await t.rm(e,{recursive:!0,force:!0}),await t.mkdir(n.dirname(e),{recursive:!0}),await t.cp(i,e,{recursive:!0}),a.push(e)}console.log(`Installed ${p} skill:`);for(let e of a)console.log(`- ${e}`)}async function O(){return r.createInterface({input:process.stdin,output:process.stdout})}async function k(e){if(!process.stdin.isTTY)return e;let t=await O();try{for(;;){let n=(await t.question(`Theme (max/gomax) [${e}]: `)).trim().toLowerCase();if(!n)return e;if(n===`max`||n===`gomax`)return n;console.log(`Please choose "max" or "gomax".`)}}finally{t.close()}}async function A(e){if(!process.stdin.isTTY)return e;let t=await O();try{return(await t.question(`Global CSS path [${e}]: `)).trim()||e}finally{t.close()}}async function j(){if(!process.stdin.isTTY)return!1;let e=await O();try{for(;;){let t=(await e.question(`Install agent skill? (y/N): `)).trim().toLowerCase();if(!t||t===`n`||t===`no`)return!1;if(t===`y`||t===`yes`)return!0;console.log(`Please answer "y" or "n".`)}}finally{e.close()}}async function M(e){let r=n.join(e,`postcss.config.mjs`);await _(r)?console.log(`Preserved existing postcss.config.mjs.`):(await t.writeFile(r,`export { default } from '@uselets/ui/postcss.config'
7
+ `),console.log(`Created postcss.config.mjs.`))}async function N(e,r,i){let a=n.resolve(e,r),{source:o,hasTheme:s,themeBeforeTailwind:c}=f(await _(a)?await t.readFile(a,`utf8`):``,i,r);s&&console.log(`Preserved existing @uselets/ui theme import.`),c&&console.warn(`Warning: the @uselets/ui theme import comes before @import 'tailwindcss' in ${r}. Move it below so Tailwind's preflight doesn't override the theme's base styles.`),o===null?console.log(`Global CSS already configured at ${r}.`):(await t.mkdir(n.dirname(a),{recursive:!0}),await t.writeFile(a,o),console.log(`Updated global CSS at ${r}.`))}async function P(e){for(let t of s)if(await _(n.join(e,t)))return t}async function F(){if(!process.stdin.isTTY)return;let e=await O();try{return(await e.question(`App entry file to import the font in (leave empty to skip): `)).trim()||void 0}finally{e.close()}}async function I(e,t){return t||await P(e)||F()}function L(e){console.log(`${e} Add \`import '${m}'\` to your app's entry file (for example app/layout.tsx or src/main.tsx) to load the font.`)}async function R(e,r){if(!r){L(`Could not detect an app entry file.`);return}let i=n.resolve(e,r);if(!await _(i)){L(`Entry file ${r} not found.`);return}let a=await t.readFile(i,`utf8`);if(RegExp(`import\\s+['"]${m}['"]`).test(a)){console.log(`Font import already present in ${r}.`);return}let o=a.match(/^(['"])use (?:client|server)\1;?\r?\n/),s=`import '${m}'\n`,c=o?a.slice(0,o[0].length)+s+a.slice(o[0].length):s+a;await t.writeFile(i,c),console.log(`Added font import to ${r}.`)}async function z(e){let t=process.cwd(),r=n.join(t,`package.json`);if(!await _(r))throw Error(`No package.json found in the current directory. Run uselets init from your project root.`);let i=await v(r),a=e.theme??await k(`max`),o=e.css??await A(`src/styles/globals.css`),s=await I(t,e.entry),c=e.installSkill??await j();await E(t,i),await M(t),await N(t,o,a),await R(t,s),c&&await D(g)}async function B(){let e=new a;e.name(`uselets`).description(`CLI for @uselets/ui`).showHelpAfterError(),e.command(`skill`).description(`Reinstall the ${p} agent skill`).addOption(new o(`--agent <agent>`,`Target agent directory`).choices([`codex`,`claude`,`all`]).default(`all`)).action(async e=>{await D(b(e.agent))}),e.command(`init`).description(`Set up @uselets/ui in this project`).addOption(new o(`--theme <theme>`,`Theme to import`).choices([`max`,`gomax`])).option(`--css <path>`,`Global CSS file path`).option(`--entry <path>`,`App entry file to import the font in (for example app/layout.tsx or src/main.tsx)`).option(`--install-skill`,`Install the agent skill without prompting`).option(`--no-install-skill`,`Skip the agent skill prompt and installation`).action(async e=>{await z(e)}),process.argv.length<=2?e.outputHelp():await e.parseAsync()}B().catch(e=>{console.error(e instanceof Error?e.message:e),process.exitCode=1});export{};
7
8
  //# sourceMappingURL=uselets.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"uselets.mjs","names":[],"sources":["../../src/cli/uselets.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { spawn } from 'node:child_process'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport readline from 'node:readline/promises'\nimport { fileURLToPath } from 'node:url'\n\nimport { Command, Option } from 'commander'\n\nconst SKILL_NAME = 'uselets-ui'\nconst DEFAULT_CSS_PATH = 'src/styles/globals.css'\nconst FONT_PACKAGE = '@fontsource-variable/inter'\nconst ENTRY_FILE_CANDIDATES = [\n 'app/layout.tsx',\n 'app/layout.jsx',\n 'pages/_app.tsx',\n 'pages/_app.jsx',\n 'src/main.tsx',\n 'src/main.jsx',\n 'src/index.tsx',\n 'src/index.jsx'\n]\nconst POSTCSS_CONFIG = \"export { default } from '@uselets/ui/postcss.config'\\n\"\nconst AGENT_TARGETS = {\n codex: path.join('.agents', 'skills', SKILL_NAME),\n claude: path.join('.claude', 'skills', SKILL_NAME)\n} as const\n\ntype AgentTarget = keyof typeof AGENT_TARGETS\ntype AgentOption = AgentTarget | 'all'\ntype ThemeOption = 'max' | 'gomax'\ntype PackageManager = 'bun' | 'pnpm' | 'yarn' | 'npm'\ntype PackageJson = {\n name?: string\n version?: string\n packageManager?: string\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n}\ntype InitOptions = {\n theme?: ThemeOption\n css?: string\n entry?: string\n installSkill?: boolean\n}\n\nconst ALL_AGENT_TARGETS = Object.keys(AGENT_TARGETS) as AgentTarget[]\n\nasync function pathExists(targetPath: string) {\n try {\n await fs.access(targetPath)\n return true\n } catch {\n return false\n }\n}\n\nasync function readJsonFile<T>(filePath: string) {\n return JSON.parse(await fs.readFile(filePath, 'utf8')) as T\n}\n\nasync function findPackageRoot() {\n let currentDir = fileURLToPath(new URL('.', import.meta.url))\n\n while (true) {\n try {\n await fs.access(path.join(currentDir, 'package.json'))\n return currentDir\n } catch {\n const parentDir = path.dirname(currentDir)\n\n if (parentDir === currentDir) {\n throw new Error('Unable to resolve @uselets/ui package root')\n }\n\n currentDir = parentDir\n }\n }\n}\n\nfunction resolveTargets(agent: AgentOption) {\n return agent === 'all' ? ALL_AGENT_TARGETS : [agent]\n}\n\nfunction hasDependency(packageJson: PackageJson, dependencyName: string) {\n return Boolean(\n packageJson.dependencies?.[dependencyName] ||\n packageJson.devDependencies?.[dependencyName] ||\n packageJson.peerDependencies?.[dependencyName] ||\n packageJson.optionalDependencies?.[dependencyName]\n )\n}\n\nasync function detectPackageManager(projectRoot: string, packageJson: PackageJson): Promise<PackageManager> {\n const declaredManager = packageJson.packageManager?.split('@')[0]\n\n if (\n declaredManager === 'bun' ||\n declaredManager === 'pnpm' ||\n declaredManager === 'yarn' ||\n declaredManager === 'npm'\n ) {\n return declaredManager\n }\n\n if (await pathExists(path.join(projectRoot, 'bun.lock'))) {\n return 'bun'\n }\n\n if (await pathExists(path.join(projectRoot, 'pnpm-lock.yaml'))) {\n return 'pnpm'\n }\n\n if (await pathExists(path.join(projectRoot, 'yarn.lock'))) {\n return 'yarn'\n }\n\n if (await pathExists(path.join(projectRoot, 'package-lock.json'))) {\n return 'npm'\n }\n\n return 'npm'\n}\n\nfunction buildAddCommand(packageManager: PackageManager, dependencies: string[], dev: boolean) {\n switch (packageManager) {\n case 'bun':\n return ['bun', 'add', ...(dev ? ['-d'] : []), ...dependencies]\n case 'pnpm':\n return ['pnpm', 'add', ...(dev ? ['-D'] : []), ...dependencies]\n case 'yarn':\n return ['yarn', 'add', ...(dev ? ['-D'] : []), ...dependencies]\n case 'npm':\n return ['npm', 'install', ...(dev ? ['-D'] : []), ...dependencies]\n }\n}\n\nasync function runCommand(commandParts: string[], cwd: string) {\n const [command, ...args] = commandParts\n\n if (!command) {\n throw new Error('Missing command')\n }\n\n console.log(`Running: ${commandParts.join(' ')}`)\n\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command, args, { cwd, stdio: 'inherit' })\n\n child.on('error', reject)\n child.on('close', (code) => {\n if (code === 0) {\n resolve()\n return\n }\n\n reject(new Error(`${command} exited with code ${code}`))\n })\n })\n}\n\nfunction getPackageVersion(packageJson: PackageJson, dependencyName: string) {\n const version = packageJson.dependencies?.[dependencyName] ?? packageJson.devDependencies?.[dependencyName]\n\n if (!version) {\n throw new Error(`Unable to find ${dependencyName} version in @uselets/ui package metadata`)\n }\n\n return version\n}\n\nasync function installMissingDependencies(projectRoot: string, projectPackageJson: PackageJson) {\n const packageRoot = await findPackageRoot()\n const packageJson = await readJsonFile<PackageJson>(path.join(packageRoot, 'package.json'))\n const packageManager = await detectPackageManager(projectRoot, projectPackageJson)\n const runtimeDependencies = []\n const devDependencies = []\n\n if (!packageJson.name || !packageJson.version) {\n throw new Error('Unable to resolve @uselets/ui package name and version')\n }\n\n if (!hasDependency(projectPackageJson, packageJson.name)) {\n runtimeDependencies.push(`${packageJson.name}@${packageJson.version}`)\n }\n\n if (!hasDependency(projectPackageJson, FONT_PACKAGE)) {\n runtimeDependencies.push(`${FONT_PACKAGE}@${getPackageVersion(packageJson, FONT_PACKAGE)}`)\n }\n\n if (!hasDependency(projectPackageJson, 'tailwindcss')) {\n devDependencies.push(`tailwindcss@${getPackageVersion(packageJson, 'tailwindcss')}`)\n }\n\n if (!hasDependency(projectPackageJson, '@tailwindcss/postcss')) {\n devDependencies.push(`@tailwindcss/postcss@${getPackageVersion(packageJson, '@tailwindcss/postcss')}`)\n }\n\n if (runtimeDependencies.length > 0) {\n await runCommand(buildAddCommand(packageManager, runtimeDependencies, false), projectRoot)\n } else {\n console.log('Runtime dependencies already declared.')\n }\n\n if (devDependencies.length > 0) {\n await runCommand(buildAddCommand(packageManager, devDependencies, true), projectRoot)\n } else {\n console.log('Tailwind dependencies already declared.')\n }\n}\n\nasync function installSkill(targets: AgentTarget[]) {\n const packageRoot = await findPackageRoot()\n const sourcePath = path.join(packageRoot, 'skills', SKILL_NAME)\n\n try {\n await fs.access(sourcePath)\n } catch {\n throw new Error(`Bundled skill not found at ${sourcePath}`)\n }\n\n const installedPaths = []\n\n for (const target of targets) {\n const targetPath = path.join(process.cwd(), AGENT_TARGETS[target])\n\n await fs.rm(targetPath, { recursive: true, force: true })\n await fs.mkdir(path.dirname(targetPath), { recursive: true })\n await fs.cp(sourcePath, targetPath, { recursive: true })\n\n installedPaths.push(targetPath)\n }\n\n console.log(`Installed ${SKILL_NAME} skill:`)\n\n for (const installedPath of installedPaths) {\n console.log(`- ${installedPath}`)\n }\n}\n\nasync function createPrompt() {\n return readline.createInterface({ input: process.stdin, output: process.stdout })\n}\n\nasync function promptTheme(defaultTheme: ThemeOption) {\n if (!process.stdin.isTTY) {\n return defaultTheme\n }\n\n const prompt = await createPrompt()\n\n try {\n while (true) {\n const answer = (await prompt.question(`Theme (max/gomax) [${defaultTheme}]: `)).trim().toLowerCase()\n\n if (!answer) {\n return defaultTheme\n }\n\n if (answer === 'max' || answer === 'gomax') {\n return answer\n }\n\n console.log('Please choose \"max\" or \"gomax\".')\n }\n } finally {\n prompt.close()\n }\n}\n\nasync function promptCssPath(defaultCssPath: string) {\n if (!process.stdin.isTTY) {\n return defaultCssPath\n }\n\n const prompt = await createPrompt()\n\n try {\n const answer = (await prompt.question(`Global CSS path [${defaultCssPath}]: `)).trim()\n return answer || defaultCssPath\n } finally {\n prompt.close()\n }\n}\n\nasync function promptInstallSkill() {\n if (!process.stdin.isTTY) {\n return false\n }\n\n const prompt = await createPrompt()\n\n try {\n while (true) {\n const answer = (await prompt.question('Install agent skill? (y/N): ')).trim().toLowerCase()\n\n if (!answer || answer === 'n' || answer === 'no') {\n return false\n }\n\n if (answer === 'y' || answer === 'yes') {\n return true\n }\n\n console.log('Please answer \"y\" or \"n\".')\n }\n } finally {\n prompt.close()\n }\n}\n\nasync function ensurePostcssConfig(projectRoot: string) {\n const postcssPath = path.join(projectRoot, 'postcss.config.mjs')\n\n if (await pathExists(postcssPath)) {\n console.log('Preserved existing postcss.config.mjs.')\n return\n }\n\n await fs.writeFile(postcssPath, POSTCSS_CONFIG)\n console.log('Created postcss.config.mjs.')\n}\n\nfunction buildPackageSource(cssPath: string) {\n const cssDir = path.posix.dirname(cssPath.replaceAll(path.sep, path.posix.sep))\n const relativeSource = path.posix.relative(cssDir, 'node_modules/@uselets/ui/dist')\n\n return relativeSource.startsWith('.') ? relativeSource : `./${relativeSource}`\n}\n\nfunction buildCssImports(source: string, theme: ThemeOption, cssPath: string) {\n const imports = []\n const hasTailwind = /@import\\s+['\"]tailwindcss['\"]/.test(source)\n const hasTheme = /@import\\s+['\"]@uselets\\/ui\\/themes\\/(?:max|gomax)\\.css['\"]/.test(source)\n const hasPackageSource = /@source\\s+['\"][^'\"]*@uselets\\/ui\\/dist['\"]/.test(source)\n\n if (!hasTailwind) {\n imports.push(\"@import 'tailwindcss';\")\n }\n\n if (!hasTheme) {\n imports.push(`@import '@uselets/ui/themes/${theme}.css';`)\n }\n\n if (!hasPackageSource) {\n imports.push(`@source '${buildPackageSource(cssPath)}';`)\n }\n\n return { imports, hasTheme }\n}\n\nasync function ensureGlobalCss(projectRoot: string, cssPath: string, theme: ThemeOption) {\n const absoluteCssPath = path.resolve(projectRoot, cssPath)\n const existingSource = (await pathExists(absoluteCssPath)) ? await fs.readFile(absoluteCssPath, 'utf8') : ''\n const { imports, hasTheme } = buildCssImports(existingSource, theme, cssPath)\n\n if (hasTheme) {\n console.log('Preserved existing @uselets/ui theme import.')\n }\n\n if (imports.length === 0) {\n console.log(`Global CSS already configured at ${cssPath}.`)\n return\n }\n\n const separator = existingSource.length > 0 && !existingSource.startsWith('\\n') ? '\\n' : ''\n const updatedSource = `${imports.join('\\n')}${separator}${existingSource}`\n\n await fs.mkdir(path.dirname(absoluteCssPath), { recursive: true })\n await fs.writeFile(absoluteCssPath, updatedSource)\n console.log(`Updated global CSS at ${cssPath}.`)\n}\n\nasync function detectEntryFile(projectRoot: string) {\n for (const candidate of ENTRY_FILE_CANDIDATES) {\n if (await pathExists(path.join(projectRoot, candidate))) {\n return candidate\n }\n }\n\n return undefined\n}\n\nasync function promptEntryPath() {\n if (!process.stdin.isTTY) {\n return undefined\n }\n\n const prompt = await createPrompt()\n\n try {\n const answer = (await prompt.question('App entry file to import the font in (leave empty to skip): ')).trim()\n return answer || undefined\n } finally {\n prompt.close()\n }\n}\n\nasync function resolveEntryPath(projectRoot: string, entryOption?: string) {\n if (entryOption) {\n return entryOption\n }\n\n const detected = await detectEntryFile(projectRoot)\n\n if (detected) {\n return detected\n }\n\n return promptEntryPath()\n}\n\nfunction logManualFontImportInstructions(reason: string) {\n console.log(\n `${reason} Add \\`import '${FONT_PACKAGE}'\\` to your app's entry file (for example app/layout.tsx or src/main.tsx) to load the font.`\n )\n}\n\nasync function ensureFontImport(projectRoot: string, entryPath?: string) {\n if (!entryPath) {\n logManualFontImportInstructions('Could not detect an app entry file.')\n return\n }\n\n const absoluteEntryPath = path.resolve(projectRoot, entryPath)\n\n if (!(await pathExists(absoluteEntryPath))) {\n logManualFontImportInstructions(`Entry file ${entryPath} not found.`)\n return\n }\n\n const source = await fs.readFile(absoluteEntryPath, 'utf8')\n const importPattern = new RegExp(`import\\\\s+['\"]${FONT_PACKAGE}['\"]`)\n\n if (importPattern.test(source)) {\n console.log(`Font import already present in ${entryPath}.`)\n return\n }\n\n const directiveMatch = source.match(/^(['\"])use (?:client|server)\\1;?\\r?\\n/)\n const insertion = `import '${FONT_PACKAGE}'\\n`\n const updatedSource = directiveMatch\n ? source.slice(0, directiveMatch[0].length) + insertion + source.slice(directiveMatch[0].length)\n : insertion + source\n\n await fs.writeFile(absoluteEntryPath, updatedSource)\n console.log(`Added font import to ${entryPath}.`)\n}\n\nasync function initProject(options: InitOptions) {\n const projectRoot = process.cwd()\n const packageJsonPath = path.join(projectRoot, 'package.json')\n\n if (!(await pathExists(packageJsonPath))) {\n throw new Error('No package.json found in the current directory. Run uselets init from your project root.')\n }\n\n const projectPackageJson = await readJsonFile<PackageJson>(packageJsonPath)\n const theme = options.theme ?? (await promptTheme('max'))\n const cssPath = options.css ?? (await promptCssPath(DEFAULT_CSS_PATH))\n const entryPath = await resolveEntryPath(projectRoot, options.entry)\n const shouldInstallSkill = options.installSkill ?? (await promptInstallSkill())\n\n await installMissingDependencies(projectRoot, projectPackageJson)\n await ensurePostcssConfig(projectRoot)\n await ensureGlobalCss(projectRoot, cssPath, theme)\n await ensureFontImport(projectRoot, entryPath)\n\n if (shouldInstallSkill) {\n await installSkill(ALL_AGENT_TARGETS)\n }\n}\n\nasync function main() {\n const program = new Command()\n\n program.name('uselets').description('CLI for @uselets/ui').showHelpAfterError()\n\n program\n .command('skill')\n .description(`Reinstall the ${SKILL_NAME} agent skill`)\n .addOption(\n new Option('--agent <agent>', 'Target agent directory').choices(['codex', 'claude', 'all']).default('all')\n )\n .action(async (options: { agent: AgentOption }) => {\n await installSkill(resolveTargets(options.agent))\n })\n\n program\n .command('init')\n .description('Set up @uselets/ui in this project')\n .addOption(new Option('--theme <theme>', 'Theme to import').choices(['max', 'gomax']))\n .option('--css <path>', 'Global CSS file path')\n .option('--entry <path>', 'App entry file to import the font in (for example app/layout.tsx or src/main.tsx)')\n .option('--install-skill', 'Install the agent skill without prompting')\n .option('--no-install-skill', 'Skip the agent skill prompt and installation')\n .action(async (options: InitOptions) => {\n await initProject(options)\n })\n\n if (process.argv.length <= 2) {\n program.outputHelp()\n return\n }\n\n await program.parseAsync()\n}\n\nmain().catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : error)\n process.exitCode = 1\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"uselets.mjs","names":["fs","path","readline","ENTRY_FILE_CANDIDATES","TAILWIND_IMPORT_PATTERN","THEME_IMPORT_PATTERN","PACKAGE_SOURCE_PATTERN","buildPackageSource","cssDir","cssPath","relativeSource","updateGlobalCss","tailwindMatch","source","themeMatch","hasTheme","themeBeforeTailwind","imports","theme","lines","separator","insertAt","SKILL_NAME","FONT_PACKAGE","AGENT_TARGETS","ALL_AGENT_TARGETS","pathExists","targetPath","readJsonFile","filePath","findPackageRoot","currentDir","fileURLToPath","parentDir","resolveTargets","agent","hasDependency","packageJson","dependencyName","detectPackageManager","declaredManager","projectRoot","buildAddCommand","packageManager","dev","dependencies","runCommand","command","args","commandParts","child","spawn","reject","code","resolve","getPackageVersion","version","installMissingDependencies","packageRoot","projectPackageJson","runtimeDependencies","devDependencies","installSkill","sourcePath","installedPaths","target","targets","installedPath","createPrompt","promptTheme","defaultTheme","prompt","answer","promptCssPath","defaultCssPath","promptInstallSkill","ensurePostcssConfig","postcssPath","ensureGlobalCss","absoluteCssPath","updatedSource","detectEntryFile","candidate","promptEntryPath","resolveEntryPath","entryOption","logManualFontImportInstructions","reason","ensureFontImport","entryPath","absoluteEntryPath","directiveMatch","insertion","initProject","packageJsonPath","options","shouldInstallSkill","main","program","Command","Option","error"],"sources":["../../src/cli/init.ts","../../src/cli/uselets.ts"],"sourcesContent":["import path from 'node:path'\n\nexport type ThemeOption = 'max' | 'gomax'\n\nexport const ENTRY_FILE_CANDIDATES = [\n 'app/layout.tsx',\n 'app/layout.jsx',\n 'src/app/layout.tsx',\n 'src/app/layout.jsx',\n 'pages/_app.tsx',\n 'pages/_app.jsx',\n 'src/pages/_app.tsx',\n 'src/pages/_app.jsx',\n 'src/main.tsx',\n 'src/main.jsx',\n 'src/index.tsx',\n 'src/index.jsx'\n]\n\nconst TAILWIND_IMPORT_PATTERN = /^[ \\t]*@import\\s+['\"]tailwindcss['\"][^\\n]*$/m\nconst THEME_IMPORT_PATTERN = /@import\\s+['\"]@uselets\\/ui\\/themes\\/(?:max|gomax)\\.css['\"]/\nconst PACKAGE_SOURCE_PATTERN = /@source\\s+['\"][^'\"]*@uselets\\/ui\\/dist['\"]/\n\nexport function buildPackageSource(cssPath: string) {\n const cssDir = path.posix.dirname(cssPath.replaceAll(path.sep, path.posix.sep))\n const relativeSource = path.posix.relative(cssDir, 'node_modules/@uselets/ui/dist')\n\n return relativeSource.startsWith('.') ? relativeSource : `./${relativeSource}`\n}\n\nexport type GlobalCssUpdate = {\n // `null` when the file already has every import.\n source: string | null\n hasTheme: boolean\n // An existing theme import placed before `@import 'tailwindcss'` lets Tailwind's preflight override the theme's\n // base styles; the file is left as is, so the caller should warn about it.\n themeBeforeTailwind: boolean\n}\n\nexport function updateGlobalCss(source: string, theme: ThemeOption, cssPath: string): GlobalCssUpdate {\n const tailwindMatch = TAILWIND_IMPORT_PATTERN.exec(source)\n const themeMatch = THEME_IMPORT_PATTERN.exec(source)\n const hasTheme = themeMatch !== null\n const themeBeforeTailwind = hasTheme && tailwindMatch !== null && themeMatch.index < tailwindMatch.index\n const imports = []\n\n if (!hasTheme) {\n imports.push(`@import '@uselets/ui/themes/${theme}.css';`)\n }\n\n if (!PACKAGE_SOURCE_PATTERN.test(source)) {\n imports.push(`@source '${buildPackageSource(cssPath)}';`)\n }\n\n if (!tailwindMatch) {\n // The theme must come after Tailwind so its base layer wins over the preflight reset.\n const lines = [\"@import 'tailwindcss';\", ...imports]\n const separator = source.length > 0 && !source.startsWith('\\n') ? '\\n' : ''\n\n return { source: `${lines.join('\\n')}${separator}${source}`, hasTheme, themeBeforeTailwind }\n }\n\n if (imports.length === 0) {\n return { source: null, hasTheme, themeBeforeTailwind }\n }\n\n const insertAt = tailwindMatch.index + tailwindMatch[0].length\n\n return {\n source: `${source.slice(0, insertAt)}\\n${imports.join('\\n')}${source.slice(insertAt)}`,\n hasTheme,\n themeBeforeTailwind\n }\n}\n","#!/usr/bin/env node\n\nimport { spawn } from 'node:child_process'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport readline from 'node:readline/promises'\nimport { fileURLToPath } from 'node:url'\n\nimport { Command, Option } from 'commander'\n\nimport { ENTRY_FILE_CANDIDATES, type ThemeOption, updateGlobalCss } from './init'\n\nconst SKILL_NAME = 'uselets-ui'\nconst DEFAULT_CSS_PATH = 'src/styles/globals.css'\nconst FONT_PACKAGE = '@fontsource-variable/inter'\nconst POSTCSS_CONFIG = \"export { default } from '@uselets/ui/postcss.config'\\n\"\nconst AGENT_TARGETS = {\n codex: path.join('.agents', 'skills', SKILL_NAME),\n claude: path.join('.claude', 'skills', SKILL_NAME)\n} as const\n\ntype AgentTarget = keyof typeof AGENT_TARGETS\ntype AgentOption = AgentTarget | 'all'\ntype PackageManager = 'bun' | 'pnpm' | 'yarn' | 'npm'\ntype PackageJson = {\n name?: string\n version?: string\n packageManager?: string\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n}\ntype InitOptions = {\n theme?: ThemeOption\n css?: string\n entry?: string\n installSkill?: boolean\n}\n\nconst ALL_AGENT_TARGETS = Object.keys(AGENT_TARGETS) as AgentTarget[]\n\nasync function pathExists(targetPath: string) {\n try {\n await fs.access(targetPath)\n return true\n } catch {\n return false\n }\n}\n\nasync function readJsonFile<T>(filePath: string) {\n return JSON.parse(await fs.readFile(filePath, 'utf8')) as T\n}\n\nasync function findPackageRoot() {\n let currentDir = fileURLToPath(new URL('.', import.meta.url))\n\n while (true) {\n try {\n await fs.access(path.join(currentDir, 'package.json'))\n return currentDir\n } catch {\n const parentDir = path.dirname(currentDir)\n\n if (parentDir === currentDir) {\n throw new Error('Unable to resolve @uselets/ui package root')\n }\n\n currentDir = parentDir\n }\n }\n}\n\nfunction resolveTargets(agent: AgentOption) {\n return agent === 'all' ? ALL_AGENT_TARGETS : [agent]\n}\n\nfunction hasDependency(packageJson: PackageJson, dependencyName: string) {\n return Boolean(\n packageJson.dependencies?.[dependencyName] ||\n packageJson.devDependencies?.[dependencyName] ||\n packageJson.peerDependencies?.[dependencyName] ||\n packageJson.optionalDependencies?.[dependencyName]\n )\n}\n\nasync function detectPackageManager(projectRoot: string, packageJson: PackageJson): Promise<PackageManager> {\n const declaredManager = packageJson.packageManager?.split('@')[0]\n\n if (\n declaredManager === 'bun' ||\n declaredManager === 'pnpm' ||\n declaredManager === 'yarn' ||\n declaredManager === 'npm'\n ) {\n return declaredManager\n }\n\n if (await pathExists(path.join(projectRoot, 'bun.lock'))) {\n return 'bun'\n }\n\n if (await pathExists(path.join(projectRoot, 'pnpm-lock.yaml'))) {\n return 'pnpm'\n }\n\n if (await pathExists(path.join(projectRoot, 'yarn.lock'))) {\n return 'yarn'\n }\n\n if (await pathExists(path.join(projectRoot, 'package-lock.json'))) {\n return 'npm'\n }\n\n return 'npm'\n}\n\nfunction buildAddCommand(packageManager: PackageManager, dependencies: string[], dev: boolean) {\n switch (packageManager) {\n case 'bun':\n return ['bun', 'add', ...(dev ? ['-d'] : []), ...dependencies]\n case 'pnpm':\n return ['pnpm', 'add', ...(dev ? ['-D'] : []), ...dependencies]\n case 'yarn':\n return ['yarn', 'add', ...(dev ? ['-D'] : []), ...dependencies]\n case 'npm':\n return ['npm', 'install', ...(dev ? ['-D'] : []), ...dependencies]\n }\n}\n\nasync function runCommand(commandParts: string[], cwd: string) {\n const [command, ...args] = commandParts\n\n if (!command) {\n throw new Error('Missing command')\n }\n\n console.log(`Running: ${commandParts.join(' ')}`)\n\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command, args, { cwd, stdio: 'inherit' })\n\n child.on('error', reject)\n child.on('close', (code) => {\n if (code === 0) {\n resolve()\n return\n }\n\n reject(new Error(`${command} exited with code ${code}`))\n })\n })\n}\n\nfunction getPackageVersion(packageJson: PackageJson, dependencyName: string) {\n const version = packageJson.dependencies?.[dependencyName] ?? packageJson.devDependencies?.[dependencyName]\n\n if (!version) {\n throw new Error(`Unable to find ${dependencyName} version in @uselets/ui package metadata`)\n }\n\n return version\n}\n\nasync function installMissingDependencies(projectRoot: string, projectPackageJson: PackageJson) {\n const packageRoot = await findPackageRoot()\n const packageJson = await readJsonFile<PackageJson>(path.join(packageRoot, 'package.json'))\n const packageManager = await detectPackageManager(projectRoot, projectPackageJson)\n const runtimeDependencies = []\n const devDependencies = []\n\n if (!packageJson.name || !packageJson.version) {\n throw new Error('Unable to resolve @uselets/ui package name and version')\n }\n\n if (!hasDependency(projectPackageJson, packageJson.name)) {\n runtimeDependencies.push(`${packageJson.name}@${packageJson.version}`)\n }\n\n if (!hasDependency(projectPackageJson, FONT_PACKAGE)) {\n runtimeDependencies.push(`${FONT_PACKAGE}@${getPackageVersion(packageJson, FONT_PACKAGE)}`)\n }\n\n if (!hasDependency(projectPackageJson, 'tailwindcss')) {\n devDependencies.push(`tailwindcss@${getPackageVersion(packageJson, 'tailwindcss')}`)\n }\n\n if (!hasDependency(projectPackageJson, '@tailwindcss/postcss')) {\n devDependencies.push(`@tailwindcss/postcss@${getPackageVersion(packageJson, '@tailwindcss/postcss')}`)\n }\n\n if (runtimeDependencies.length > 0) {\n await runCommand(buildAddCommand(packageManager, runtimeDependencies, false), projectRoot)\n } else {\n console.log('Runtime dependencies already declared.')\n }\n\n if (devDependencies.length > 0) {\n await runCommand(buildAddCommand(packageManager, devDependencies, true), projectRoot)\n } else {\n console.log('Tailwind dependencies already declared.')\n }\n}\n\nasync function installSkill(targets: AgentTarget[]) {\n const packageRoot = await findPackageRoot()\n const sourcePath = path.join(packageRoot, 'skills', SKILL_NAME)\n\n try {\n await fs.access(sourcePath)\n } catch {\n throw new Error(`Bundled skill not found at ${sourcePath}`)\n }\n\n const installedPaths = []\n\n for (const target of targets) {\n const targetPath = path.join(process.cwd(), AGENT_TARGETS[target])\n\n await fs.rm(targetPath, { recursive: true, force: true })\n await fs.mkdir(path.dirname(targetPath), { recursive: true })\n await fs.cp(sourcePath, targetPath, { recursive: true })\n\n installedPaths.push(targetPath)\n }\n\n console.log(`Installed ${SKILL_NAME} skill:`)\n\n for (const installedPath of installedPaths) {\n console.log(`- ${installedPath}`)\n }\n}\n\nasync function createPrompt() {\n return readline.createInterface({ input: process.stdin, output: process.stdout })\n}\n\nasync function promptTheme(defaultTheme: ThemeOption) {\n if (!process.stdin.isTTY) {\n return defaultTheme\n }\n\n const prompt = await createPrompt()\n\n try {\n while (true) {\n const answer = (await prompt.question(`Theme (max/gomax) [${defaultTheme}]: `)).trim().toLowerCase()\n\n if (!answer) {\n return defaultTheme\n }\n\n if (answer === 'max' || answer === 'gomax') {\n return answer\n }\n\n console.log('Please choose \"max\" or \"gomax\".')\n }\n } finally {\n prompt.close()\n }\n}\n\nasync function promptCssPath(defaultCssPath: string) {\n if (!process.stdin.isTTY) {\n return defaultCssPath\n }\n\n const prompt = await createPrompt()\n\n try {\n const answer = (await prompt.question(`Global CSS path [${defaultCssPath}]: `)).trim()\n return answer || defaultCssPath\n } finally {\n prompt.close()\n }\n}\n\nasync function promptInstallSkill() {\n if (!process.stdin.isTTY) {\n return false\n }\n\n const prompt = await createPrompt()\n\n try {\n while (true) {\n const answer = (await prompt.question('Install agent skill? (y/N): ')).trim().toLowerCase()\n\n if (!answer || answer === 'n' || answer === 'no') {\n return false\n }\n\n if (answer === 'y' || answer === 'yes') {\n return true\n }\n\n console.log('Please answer \"y\" or \"n\".')\n }\n } finally {\n prompt.close()\n }\n}\n\nasync function ensurePostcssConfig(projectRoot: string) {\n const postcssPath = path.join(projectRoot, 'postcss.config.mjs')\n\n if (await pathExists(postcssPath)) {\n console.log('Preserved existing postcss.config.mjs.')\n return\n }\n\n await fs.writeFile(postcssPath, POSTCSS_CONFIG)\n console.log('Created postcss.config.mjs.')\n}\n\nasync function ensureGlobalCss(projectRoot: string, cssPath: string, theme: ThemeOption) {\n const absoluteCssPath = path.resolve(projectRoot, cssPath)\n const existingSource = (await pathExists(absoluteCssPath)) ? await fs.readFile(absoluteCssPath, 'utf8') : ''\n const { source: updatedSource, hasTheme, themeBeforeTailwind } = updateGlobalCss(existingSource, theme, cssPath)\n\n if (hasTheme) {\n console.log('Preserved existing @uselets/ui theme import.')\n }\n\n if (themeBeforeTailwind) {\n console.warn(\n `Warning: the @uselets/ui theme import comes before @import 'tailwindcss' in ${cssPath}. Move it below so Tailwind's preflight doesn't override the theme's base styles.`\n )\n }\n\n if (updatedSource === null) {\n console.log(`Global CSS already configured at ${cssPath}.`)\n return\n }\n\n await fs.mkdir(path.dirname(absoluteCssPath), { recursive: true })\n await fs.writeFile(absoluteCssPath, updatedSource)\n console.log(`Updated global CSS at ${cssPath}.`)\n}\n\nasync function detectEntryFile(projectRoot: string) {\n for (const candidate of ENTRY_FILE_CANDIDATES) {\n if (await pathExists(path.join(projectRoot, candidate))) {\n return candidate\n }\n }\n\n return undefined\n}\n\nasync function promptEntryPath() {\n if (!process.stdin.isTTY) {\n return undefined\n }\n\n const prompt = await createPrompt()\n\n try {\n const answer = (await prompt.question('App entry file to import the font in (leave empty to skip): ')).trim()\n return answer || undefined\n } finally {\n prompt.close()\n }\n}\n\nasync function resolveEntryPath(projectRoot: string, entryOption?: string) {\n if (entryOption) {\n return entryOption\n }\n\n const detected = await detectEntryFile(projectRoot)\n\n if (detected) {\n return detected\n }\n\n return promptEntryPath()\n}\n\nfunction logManualFontImportInstructions(reason: string) {\n console.log(\n `${reason} Add \\`import '${FONT_PACKAGE}'\\` to your app's entry file (for example app/layout.tsx or src/main.tsx) to load the font.`\n )\n}\n\nasync function ensureFontImport(projectRoot: string, entryPath?: string) {\n if (!entryPath) {\n logManualFontImportInstructions('Could not detect an app entry file.')\n return\n }\n\n const absoluteEntryPath = path.resolve(projectRoot, entryPath)\n\n if (!(await pathExists(absoluteEntryPath))) {\n logManualFontImportInstructions(`Entry file ${entryPath} not found.`)\n return\n }\n\n const source = await fs.readFile(absoluteEntryPath, 'utf8')\n const importPattern = new RegExp(`import\\\\s+['\"]${FONT_PACKAGE}['\"]`)\n\n if (importPattern.test(source)) {\n console.log(`Font import already present in ${entryPath}.`)\n return\n }\n\n const directiveMatch = source.match(/^(['\"])use (?:client|server)\\1;?\\r?\\n/)\n const insertion = `import '${FONT_PACKAGE}'\\n`\n const updatedSource = directiveMatch\n ? source.slice(0, directiveMatch[0].length) + insertion + source.slice(directiveMatch[0].length)\n : insertion + source\n\n await fs.writeFile(absoluteEntryPath, updatedSource)\n console.log(`Added font import to ${entryPath}.`)\n}\n\nasync function initProject(options: InitOptions) {\n const projectRoot = process.cwd()\n const packageJsonPath = path.join(projectRoot, 'package.json')\n\n if (!(await pathExists(packageJsonPath))) {\n throw new Error('No package.json found in the current directory. Run uselets init from your project root.')\n }\n\n const projectPackageJson = await readJsonFile<PackageJson>(packageJsonPath)\n const theme = options.theme ?? (await promptTheme('max'))\n const cssPath = options.css ?? (await promptCssPath(DEFAULT_CSS_PATH))\n const entryPath = await resolveEntryPath(projectRoot, options.entry)\n const shouldInstallSkill = options.installSkill ?? (await promptInstallSkill())\n\n await installMissingDependencies(projectRoot, projectPackageJson)\n await ensurePostcssConfig(projectRoot)\n await ensureGlobalCss(projectRoot, cssPath, theme)\n await ensureFontImport(projectRoot, entryPath)\n\n if (shouldInstallSkill) {\n await installSkill(ALL_AGENT_TARGETS)\n }\n}\n\nasync function main() {\n const program = new Command()\n\n program.name('uselets').description('CLI for @uselets/ui').showHelpAfterError()\n\n program\n .command('skill')\n .description(`Reinstall the ${SKILL_NAME} agent skill`)\n .addOption(\n new Option('--agent <agent>', 'Target agent directory').choices(['codex', 'claude', 'all']).default('all')\n )\n .action(async (options: { agent: AgentOption }) => {\n await installSkill(resolveTargets(options.agent))\n })\n\n program\n .command('init')\n .description('Set up @uselets/ui in this project')\n .addOption(new Option('--theme <theme>', 'Theme to import').choices(['max', 'gomax']))\n .option('--css <path>', 'Global CSS file path')\n .option('--entry <path>', 'App entry file to import the font in (for example app/layout.tsx or src/main.tsx)')\n .option('--install-skill', 'Install the agent skill without prompting')\n .option('--no-install-skill', 'Skip the agent skill prompt and installation')\n .action(async (options: InitOptions) => {\n await initProject(options)\n })\n\n if (process.argv.length <= 2) {\n program.outputHelp()\n return\n }\n\n await program.parseAsync()\n}\n\nmain().catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : error)\n process.exitCode = 1\n})\n"],"mappings":"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"}
@@ -1,14 +1,18 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
- import { Accordion as Accordion$1 } from "radix-ui";
2
+ import { t as AsChildPrimitiveProps } from "../as-child-Dxg3Xo1G.js";
3
+ import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
3
4
  import * as React from "react";
4
5
  //#region src/components/accordion.d.ts
5
- export type AccordionProps = React.ComponentProps<typeof Accordion$1.Root>;
6
- export type AccordionItemProps = React.ComponentProps<typeof Accordion$1.Item>;
7
- export type AccordionTriggerProps = React.ComponentProps<typeof Accordion$1.Trigger>;
8
- export type AccordionContentProps = React.ComponentProps<typeof Accordion$1.Content>;
9
- declare function Accordion({ className, ...props }: AccordionProps): React.JSX.Element;
10
- declare function AccordionItem({ className, ...props }: AccordionItemProps): React.JSX.Element;
11
- declare function AccordionTrigger({ className, children, ...props }: AccordionTriggerProps): React.JSX.Element;
6
+ export type AccordionProps = AsChildPrimitiveProps<typeof Accordion$1.Root>;
7
+ export type AccordionItemProps = AsChildPrimitiveProps<typeof Accordion$1.Item>;
8
+ export type AccordionTriggerProps = AsChildPrimitiveProps<typeof Accordion$1.Trigger>;
9
+ export type AccordionContentProps = Omit<React.ComponentProps<typeof Accordion$1.Panel>, 'render' | 'className'> & {
10
+ /** Classes for the content wrapper inside the panel. */
11
+ className?: string;
12
+ };
13
+ declare function Accordion({ className, asChild, children, ...props }: AccordionProps): React.JSX.Element;
14
+ declare function AccordionItem({ className, asChild, children, ...props }: AccordionItemProps): React.JSX.Element;
15
+ declare function AccordionTrigger({ className, children, asChild, ...props }: AccordionTriggerProps): React.JSX.Element;
12
16
  declare function AccordionContent({ className, children, ...props }: AccordionContentProps): React.JSX.Element;
13
17
  //#endregion
14
18
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{IconChevronDown as t,IconChevronUp as n}from"@tabler/icons-react";import{Accordion as r}from"radix-ui";import{jsx as i,jsxs as a}from"react/jsx-runtime";function Accordion({className:t,...n}){return i(r.Root,{"data-slot":`accordion`,className:e(`flex w-full flex-col border rounded-sm`,t),...n})}function AccordionItem({className:t,...n}){return i(r.Item,{"data-slot":`accordion-item`,className:e(`not-last:border-b px-4`,t),...n})}function AccordionTrigger({className:o,children:s,...c}){return i(r.Header,{className:`flex`,children:a(r.Trigger,{"data-slot":`accordion-trigger`,className:e(`group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground`,o),...c,children:[s,i(t,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden`}),i(n,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline`})]})})}function AccordionContent({className:t,children:n,...a}){return i(r.Content,{"data-slot":`accordion-content`,className:`wrap-break-word data-closed:overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up`,...a,children:i(`div`,{className:e(`h-(--radix-accordion-content-height) pt-0 pb-2.5`,t),children:n})})}export{Accordion,AccordionContent,AccordionItem,AccordionTrigger};
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{Accordion as r}from"@base-ui/react/accordion";import{IconChevronDown as i,IconChevronUp as a}from"@tabler/icons-react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";function Accordion({className:i,asChild:a,children:o,...c}){return/* @__PURE__ */ s(r.Root,{"data-slot":`accordion`,className:e=>t(`flex w-full flex-col border rounded-sm`,n(i,e)),...c,...e(a,o)})}function AccordionItem({className:i,asChild:a,children:o,...c}){return/* @__PURE__ */ s(r.Item,{"data-slot":`accordion-item`,className:e=>t(`not-last:border-b px-4`,n(i,e)),...c,...e(a,o)})}function AccordionTrigger({className:l,children:u,asChild:d,...f}){return/* @__PURE__ */ s(r.Header,{className:`flex`,children:/* @__PURE__ */ c(r.Trigger,{"data-slot":`accordion-trigger`,className:e=>t(`group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring data-disabled:pointer-events-none data-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground`,n(l,e)),...f,...e(d,u),children:[!d&&u,!d&&/* @__PURE__ */ c(o,{children:[/* @__PURE__ */ s(i,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden`}),/* @__PURE__ */ s(a,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline`})]})]})})}function AccordionContent({className:e,children:n,...i}){return/* @__PURE__ */ s(r.Panel,{"data-slot":`accordion-content`,className:`wrap-break-word overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up`,...i,children:/* @__PURE__ */ s(`div`,{className:t(`h-(--accordion-panel-height) pt-0 pb-2.5`,`data-starting-style:h-0 data-ending-style:h-0`,e),children:n})})}export{Accordion,AccordionContent,AccordionItem,AccordionTrigger};
2
2
  //# sourceMappingURL=accordion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":["AccordionPrimitive"],"sources":["../../src/components/accordion.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { IconChevronDown, IconChevronUp } from '@tabler/icons-react'\nimport { Accordion as AccordionPrimitive } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\n\nexport type AccordionProps = React.ComponentProps<typeof AccordionPrimitive.Root>\n\nexport type AccordionItemProps = React.ComponentProps<typeof AccordionPrimitive.Item>\n\nexport type AccordionTriggerProps = React.ComponentProps<typeof AccordionPrimitive.Trigger>\n\nexport type AccordionContentProps = React.ComponentProps<typeof AccordionPrimitive.Content>\n\nfunction Accordion({ className, ...props }: AccordionProps) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n className={cn('flex w-full flex-col border rounded-sm', className)}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('not-last:border-b px-4', className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({ className, children, ...props }: AccordionTriggerProps) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground',\n className\n )}\n {...props}\n >\n {children}\n <IconChevronDown\n data-slot=\"accordion-trigger-icon\"\n className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\"\n />\n <IconChevronUp\n data-slot=\"accordion-trigger-icon\"\n className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({ className, children, ...props }: AccordionContentProps) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"wrap-break-word data-closed:overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up\"\n {...props}\n >\n <div className={cn('h-(--radix-accordion-content-height) pt-0 pb-2.5', className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\n"],"mappings":"6OAeA,SAAS,UAAU,CAAE,YAAW,GAAG,GAAyB,CAC1D,OACE,EAACA,EAAmB,KAApB,CACE,YAAU,YACV,UAAW,EAAG,yCAA0C,CAAS,EACjE,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,cAAc,CAAE,YAAW,GAAG,GAA6B,CAClE,OACE,EAACA,EAAmB,KAApB,CACE,YAAU,iBACV,UAAW,EAAG,yBAA0B,CAAS,EACjD,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,iBAAiB,CAAE,YAAW,WAAU,GAAG,GAAgC,CAClF,OACE,EAACA,EAAmB,OAApB,CAA2B,UAAU,OACnC,SAAA,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAW,EACT,mfACA,CACF,EACA,GAAI,EANN,SAAA,CAQG,EACD,EAAC,EAAD,CACE,YAAU,yBACV,UAAU,2EACX,CAAA,EACD,EAAC,EAAD,CACE,YAAU,yBACV,UAAU,kFACX,CAAA,CACyB,GACH,CAAA,CAE/B,CAEA,SAAS,iBAAiB,CAAE,YAAW,WAAU,GAAG,GAAgC,CAClF,OACE,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAU,wHACV,GAAI,EAEJ,SAAA,EAAC,MAAD,CAAK,UAAW,EAAG,mDAAoD,CAAS,EAAI,UAAc,CAAA,CACxE,CAAA,CAEhC"}
1
+ {"version":3,"file":"accordion.js","names":["AccordionPrimitive","resolveClassName","Accordion$1","props","cn","className","state","toAsChildRenderProps","asChild","children","Fragment","IconChevronDown","IconChevronUp"],"sources":["../../src/components/accordion.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'\nimport { IconChevronDown, IconChevronUp } from '@tabler/icons-react'\n\nimport { type AsChildPrimitiveProps, toAsChildRenderProps } from '../lib/as-child'\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\n\nexport type AccordionProps = AsChildPrimitiveProps<typeof AccordionPrimitive.Root>\n\nexport type AccordionItemProps = AsChildPrimitiveProps<typeof AccordionPrimitive.Item>\n\nexport type AccordionTriggerProps = AsChildPrimitiveProps<typeof AccordionPrimitive.Trigger>\n\nexport type AccordionContentProps = Omit<\n React.ComponentProps<typeof AccordionPrimitive.Panel>,\n 'render' | 'className'\n> & {\n /** Classes for the content wrapper inside the panel. */\n className?: string\n}\n\nfunction Accordion({ className, asChild, children, ...props }: AccordionProps) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n className={(state) => cn('flex w-full flex-col border rounded-sm', resolveClassName(className, state))}\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n />\n )\n}\n\nfunction AccordionItem({ className, asChild, children, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={(state) => cn('not-last:border-b px-4', resolveClassName(className, state))}\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n />\n )\n}\n\nfunction AccordionTrigger({ className, children, asChild, ...props }: AccordionTriggerProps) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={(state) =>\n cn(\n 'group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring data-disabled:pointer-events-none data-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground',\n resolveClassName(className, state)\n )\n }\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n >\n {!asChild && children}\n {!asChild && (\n <>\n <IconChevronDown\n data-slot=\"accordion-trigger-icon\"\n className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\"\n />\n <IconChevronUp\n data-slot=\"accordion-trigger-icon\"\n className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\"\n />\n </>\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({ className, children, ...props }: AccordionContentProps) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className=\"wrap-break-word overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up\"\n {...props}\n >\n <div\n className={cn(\n 'h-(--accordion-panel-height) pt-0 pb-2.5',\n 'data-starting-style:h-0 data-ending-style:h-0',\n className\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\n"],"mappings":"2XAuBA,SAAS,UAAU,CAAE,YAAW,UAAS,WAAU,GAAGG,GAAyB,CAC7E,MACE,kBAACH,EAAmB,KAApB,CACE,YAAU,YACV,UAAY,GAAUI,EAAG,yCAA0CH,EAAiBI,EAAWC,CAAK,CAAC,EACrG,GAAIH,EACJ,GAAII,EAAqBC,EAASC,CAAQ,CAC3C,CAAA,CAEL,CAEA,SAAS,cAAc,CAAE,YAAW,UAAS,WAAU,GAAGN,GAA6B,CACrF,MACE,kBAACH,EAAmB,KAApB,CACE,YAAU,iBACV,UAAY,GAAUI,EAAG,yBAA0BH,EAAiBI,EAAWC,CAAK,CAAC,EACrF,GAAIH,EACJ,GAAII,EAAqBC,EAASC,CAAQ,CAC3C,CAAA,CAEL,CAEA,SAAS,iBAAiB,CAAE,YAAW,WAAU,UAAS,GAAGN,GAAgC,CAC3F,MACE,kBAACH,EAAmB,OAApB,CAA2B,UAAU,OACnC,SAAA,kBAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAY,GACVI,EACE,6fACAH,EAAiBI,EAAWC,CAAK,CACnC,EAEF,GAAIH,EACJ,GAAII,EAAqBC,EAASC,CAAQ,EAT5C,SAAA,CAWG,CAACD,GAAWC,EACZ,CAACD,GACA,kBAAAE,EAAA,CAAA,SAAA,CACE,kBAACC,EAAD,CACE,YAAU,yBACV,UAAU,2EACX,CAAA,EACD,kBAACC,EAAD,CACE,YAAU,yBACV,UAAU,kFACX,CAAA,CACD,CAAA,CAAA,CAEsB,GACH,CAAA,CAE/B,CAEA,SAAS,iBAAiB,CAAE,YAAW,WAAU,GAAGT,GAAgC,CAClF,MACE,kBAACH,EAAmB,MAApB,CACE,YAAU,oBACV,UAAU,4GACV,GAAIG,EAEJ,SAAA,kBAAC,MAAD,CACE,UAAWC,EACT,2CACA,gDACAC,CACF,EAEC,UACE,CAAA,CACmB,CAAA,CAE9B"}
@@ -1,34 +1,39 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
+ import { t as AsChildPrimitiveProps } from "../as-child-Dxg3Xo1G.js";
2
3
  import { Button } from "./button.js";
3
- import { AlertDialog as AlertDialog$1 } from "radix-ui";
4
4
  import * as React from "react";
5
+ import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
5
6
  //#region src/components/alert-dialog.d.ts
6
7
  export type AlertDialogProps = React.ComponentProps<typeof AlertDialog$1.Root>;
7
- export type AlertDialogTriggerProps = React.ComponentProps<typeof AlertDialog$1.Trigger>;
8
+ export type AlertDialogTriggerProps = AsChildPrimitiveProps<typeof AlertDialog$1.Trigger>;
8
9
  export type AlertDialogPortalProps = React.ComponentProps<typeof AlertDialog$1.Portal>;
9
- export type AlertDialogOverlayProps = React.ComponentProps<typeof AlertDialog$1.Overlay>;
10
- export type AlertDialogContentProps = React.ComponentProps<typeof AlertDialog$1.Content> & {
10
+ export type AlertDialogOverlayProps = AsChildPrimitiveProps<typeof AlertDialog$1.Backdrop>;
11
+ export type AlertDialogContentProps = AsChildPrimitiveProps<typeof AlertDialog$1.Popup> & Pick<AlertDialogPortalProps, 'keepMounted'> & {
12
+ /**
13
+ * Width of the dialog; `md` also places `AlertDialogMedia` next to the text on larger screens.
14
+ * @default 'md'
15
+ */
11
16
  size?: 'sm' | 'md';
12
17
  };
13
18
  export type AlertDialogHeaderProps = React.ComponentProps<'div'>;
14
19
  export type AlertDialogFooterProps = React.ComponentProps<'div'>;
15
20
  export type AlertDialogMediaProps = React.ComponentProps<'div'>;
16
- export type AlertDialogTitleProps = React.ComponentProps<typeof AlertDialog$1.Title>;
17
- export type AlertDialogDescriptionProps = React.ComponentProps<typeof AlertDialog$1.Description>;
18
- export type AlertDialogActionProps = React.ComponentProps<typeof AlertDialog$1.Action> & Pick<React.ComponentProps<typeof Button>, 'variant' | 'color' | 'size'>;
19
- export type AlertDialogCancelProps = React.ComponentProps<typeof AlertDialog$1.Cancel> & Pick<React.ComponentProps<typeof Button>, 'variant' | 'color' | 'size'>;
21
+ export type AlertDialogTitleProps = AsChildPrimitiveProps<typeof AlertDialog$1.Title>;
22
+ export type AlertDialogDescriptionProps = AsChildPrimitiveProps<typeof AlertDialog$1.Description>;
23
+ export type AlertDialogActionProps = Omit<AsChildPrimitiveProps<typeof AlertDialog$1.Close>, 'className'> & Pick<React.ComponentProps<typeof Button>, 'className' | 'variant' | 'color' | 'size'>;
24
+ export type AlertDialogCancelProps = Omit<AsChildPrimitiveProps<typeof AlertDialog$1.Close>, 'className'> & Pick<React.ComponentProps<typeof Button>, 'className' | 'variant' | 'color' | 'size'>;
20
25
  declare function AlertDialog({ ...props }: AlertDialogProps): React.JSX.Element;
21
- declare function AlertDialogTrigger({ ...props }: AlertDialogTriggerProps): React.JSX.Element;
26
+ declare function AlertDialogTrigger({ asChild, children, ...props }: AlertDialogTriggerProps): React.JSX.Element;
22
27
  declare function AlertDialogPortal({ ...props }: AlertDialogPortalProps): React.JSX.Element;
23
- declare function AlertDialogOverlay({ className, ...props }: AlertDialogOverlayProps): React.JSX.Element;
24
- declare function AlertDialogContent({ className, size, ...props }: AlertDialogContentProps): React.JSX.Element;
28
+ declare function AlertDialogOverlay({ className, asChild, children, ...props }: AlertDialogOverlayProps): React.JSX.Element;
29
+ declare function AlertDialogContent({ className, size, keepMounted, asChild, children, ...props }: AlertDialogContentProps): React.JSX.Element;
25
30
  declare function AlertDialogHeader({ className, ...props }: AlertDialogHeaderProps): React.JSX.Element;
26
31
  declare function AlertDialogFooter({ className, ...props }: AlertDialogFooterProps): React.JSX.Element;
27
32
  declare function AlertDialogMedia({ className, ...props }: AlertDialogMediaProps): React.JSX.Element;
28
- declare function AlertDialogTitle({ className, ...props }: AlertDialogTitleProps): React.JSX.Element;
29
- declare function AlertDialogDescription({ className, ...props }: AlertDialogDescriptionProps): React.JSX.Element;
30
- declare function AlertDialogAction({ className, variant, color, size, ...props }: AlertDialogActionProps): React.JSX.Element;
31
- declare function AlertDialogCancel({ className, variant, color, size, ...props }: AlertDialogCancelProps): React.JSX.Element;
33
+ declare function AlertDialogTitle({ className, asChild, children, ...props }: AlertDialogTitleProps): React.JSX.Element;
34
+ declare function AlertDialogDescription({ className, asChild, children, ...props }: AlertDialogDescriptionProps): React.JSX.Element;
35
+ declare function AlertDialogAction({ className, variant, color, size, asChild, children, ...props }: AlertDialogActionProps): React.JSX.Element;
36
+ declare function AlertDialogCancel({ className, variant, color, size, asChild, children, ...props }: AlertDialogCancelProps): React.JSX.Element;
32
37
  //#endregion
33
38
  export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
34
39
  //# sourceMappingURL=alert-dialog.d.ts.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{AlertDialog as n}from"radix-ui";import{jsx as r,jsxs as i}from"react/jsx-runtime";function AlertDialog({...e}){return r(n.Root,{"data-slot":`alert-dialog`,...e})}function AlertDialogTrigger({...e}){return r(n.Trigger,{"data-slot":`alert-dialog-trigger`,...e})}function AlertDialogPortal({...e}){return r(n.Portal,{"data-slot":`alert-dialog-portal`,...e})}function AlertDialogOverlay({className:t,...i}){return r(n.Overlay,{"data-slot":`alert-dialog-overlay`,className:e(`fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,t),...i})}function AlertDialogContent({className:t,size:a=`md`,...o}){return i(AlertDialogPortal,{children:[r(AlertDialogOverlay,{}),r(n.Content,{"data-slot":`alert-dialog-content`,"data-size":a,className:e(`group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-background p-4 ring-1 ring-foreground/10 duration-100 outline-none data-[size=md]:max-w-xs data-[size=sm]:max-w-xs data-[size=md]:sm:max-w-sm 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`,t),...o})]})}function AlertDialogHeader({className:t,...n}){return r(`div`,{"data-slot":`alert-dialog-header`,className:e(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=md]/alert-dialog-content:place-items-start sm:group-data-[size=md]/alert-dialog-content:text-left sm:group-data-[size=md]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,t),...n})}function AlertDialogFooter({className:t,...n}){return r(`div`,{"data-slot":`alert-dialog-footer`,className:e(`-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,t),...n})}function AlertDialogMedia({className:t,...n}){return r(`div`,{"data-slot":`alert-dialog-media`,className:e(`mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=md]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6`,t),...n})}function AlertDialogTitle({className:t,...i}){return r(n.Title,{"data-slot":`alert-dialog-title`,className:e(`text-base font-medium sm:group-data-[size=md]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,t),...i})}function AlertDialogDescription({className:t,...i}){return r(n.Description,{"data-slot":`alert-dialog-description`,className:e(`text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,t),...i})}function AlertDialogAction({className:i,variant:a=`solid`,color:o=`primary`,size:s=`md`,...c}){return r(t,{variant:a,color:o,size:s,asChild:!0,children:r(n.Action,{"data-slot":`alert-dialog-action`,className:e(i),...c})})}function AlertDialogCancel({className:i,variant:a=`outline`,color:o=`primary`,size:s=`md`,...c}){return r(t,{variant:a,color:o,size:s,asChild:!0,children:r(n.Cancel,{"data-slot":`alert-dialog-cancel`,className:e(i),...c})})}export{AlertDialog,AlertDialogAction,AlertDialogCancel,AlertDialogContent,AlertDialogDescription,AlertDialogFooter,AlertDialogHeader,AlertDialogMedia,AlertDialogOverlay,AlertDialogPortal,AlertDialogTitle,AlertDialogTrigger};
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{Button as r}from"./button.js";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{AlertDialog as o}from"@base-ui/react/alert-dialog";function AlertDialog({...e}){return/* @__PURE__ */ i(o.Root,{"data-slot":`alert-dialog`,...e})}function AlertDialogTrigger({asChild:t,children:n,...r}){return/* @__PURE__ */ i(o.Trigger,{"data-slot":`alert-dialog-trigger`,...r,...e(t,n)})}function AlertDialogPortal({...e}){return/* @__PURE__ */ i(o.Portal,{"data-slot":`alert-dialog-portal`,...e})}function AlertDialogOverlay({className:r,asChild:a,children:s,...c}){return/* @__PURE__ */ i(o.Backdrop,{"data-slot":`alert-dialog-overlay`,className:e=>t(`fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,n(r,e)),...c,...e(a,s)})}function AlertDialogContent({className:r,size:s=`md`,keepMounted:c,asChild:l,children:u,...d}){return/* @__PURE__ */ a(AlertDialogPortal,{keepMounted:c,children:[/* @__PURE__ */ i(AlertDialogOverlay,{}),/* @__PURE__ */ i(o.Popup,{"data-slot":`alert-dialog-content`,"data-size":s,className:e=>t(`group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-background p-4 ring-1 ring-foreground/10 duration-100 outline-none data-[size=md]:max-w-xs data-[size=sm]:max-w-xs data-[size=md]:sm:max-w-sm 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`,n(r,e)),...d,...e(l,u)})]})}function AlertDialogHeader({className:e,...n}){return/* @__PURE__ */ i(`div`,{"data-slot":`alert-dialog-header`,className:t(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=md]/alert-dialog-content:place-items-start sm:group-data-[size=md]/alert-dialog-content:text-left sm:group-data-[size=md]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,e),...n})}function AlertDialogFooter({className:e,...n}){return/* @__PURE__ */ i(`div`,{"data-slot":`alert-dialog-footer`,className:t(`-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,e),...n})}function AlertDialogMedia({className:e,...n}){return/* @__PURE__ */ i(`div`,{"data-slot":`alert-dialog-media`,className:t(`mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=md]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6`,e),...n})}function AlertDialogTitle({className:r,asChild:a,children:s,...c}){return/* @__PURE__ */ i(o.Title,{"data-slot":`alert-dialog-title`,className:e=>t(`text-base font-medium sm:group-data-[size=md]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,n(r,e)),...c,...e(a,s)})}function AlertDialogDescription({className:r,asChild:a,children:s,...c}){return/* @__PURE__ */ i(o.Description,{"data-slot":`alert-dialog-description`,className:e=>t(`text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,n(r,e)),...c,...e(a,s)})}function AlertDialogAction({className:e,variant:n=`solid`,color:a=`primary`,size:s=`md`,asChild:c,children:l,...u}){let d={variant:n,color:a,size:s,className:t(e)};return/* @__PURE__ */ i(o.Close,{"data-slot":`alert-dialog-action`,render:c?/* @__PURE__ */ i(r,{...d,asChild:!0,children:l}):/* @__PURE__ */ i(r,{...d}),...u,children:c?void 0:l})}function AlertDialogCancel({className:e,variant:n=`outline`,color:a=`primary`,size:s=`md`,asChild:c,children:l,...u}){let d={variant:n,color:a,size:s,className:t(e)};return/* @__PURE__ */ i(o.Close,{"data-slot":`alert-dialog-cancel`,render:c?/* @__PURE__ */ i(r,{...d,asChild:!0,children:l}):/* @__PURE__ */ i(r,{...d}),...u,children:c?void 0:l})}export{AlertDialog,AlertDialogAction,AlertDialogCancel,AlertDialogContent,AlertDialogDescription,AlertDialogFooter,AlertDialogHeader,AlertDialogMedia,AlertDialogOverlay,AlertDialogPortal,AlertDialogTitle,AlertDialogTrigger};
2
2
  //# sourceMappingURL=alert-dialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.js","names":["AlertDialogPrimitive"],"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\nexport type AlertDialogProps = React.ComponentProps<typeof AlertDialogPrimitive.Root>\n\nexport type AlertDialogTriggerProps = React.ComponentProps<typeof AlertDialogPrimitive.Trigger>\n\nexport type AlertDialogPortalProps = React.ComponentProps<typeof AlertDialogPrimitive.Portal>\n\nexport type AlertDialogOverlayProps = React.ComponentProps<typeof AlertDialogPrimitive.Overlay>\n\nexport type AlertDialogContentProps = React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: 'sm' | 'md'\n}\n\nexport type AlertDialogHeaderProps = React.ComponentProps<'div'>\n\nexport type AlertDialogFooterProps = React.ComponentProps<'div'>\n\nexport type AlertDialogMediaProps = React.ComponentProps<'div'>\n\nexport type AlertDialogTitleProps = React.ComponentProps<typeof AlertDialogPrimitive.Title>\n\nexport type AlertDialogDescriptionProps = React.ComponentProps<typeof AlertDialogPrimitive.Description>\n\nexport type AlertDialogActionProps = React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, 'variant' | 'color' | 'size'>\n\nexport type AlertDialogCancelProps = React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, 'variant' | 'color' | 'size'>\n\nfunction AlertDialog({ ...props }: AlertDialogProps) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({ ...props }: AlertDialogTriggerProps) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n}\n\nfunction AlertDialogPortal({ ...props }: AlertDialogPortalProps) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n}\n\nfunction AlertDialogOverlay({ className, ...props }: AlertDialogOverlayProps) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({ className, size = 'md', ...props }: AlertDialogContentProps) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-background p-4 ring-1 ring-foreground/10 duration-100 outline-none data-[size=md]:max-w-xs data-[size=sm]:max-w-xs data-[size=md]:sm:max-w-sm 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',\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({ className, ...props }: AlertDialogHeaderProps) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=md]/alert-dialog-content:place-items-start sm:group-data-[size=md]/alert-dialog-content:text-left sm:group-data-[size=md]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({ className, ...props }: AlertDialogFooterProps) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n '-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({ className, ...props }: AlertDialogMediaProps) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=md]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({ className, ...props }: AlertDialogTitleProps) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'text-base font-medium sm:group-data-[size=md]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({ className, ...props }: AlertDialogDescriptionProps) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\n 'text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = 'solid',\n color = 'primary',\n size = 'md',\n ...props\n}: AlertDialogActionProps) {\n return (\n <Button variant={variant} color={color} size={size} asChild>\n <AlertDialogPrimitive.Action data-slot=\"alert-dialog-action\" className={cn(className)} {...props} />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = 'outline',\n color = 'primary',\n size = 'md',\n ...props\n}: AlertDialogCancelProps) {\n return (\n <Button variant={variant} color={color} size={size} asChild>\n <AlertDialogPrimitive.Cancel data-slot=\"alert-dialog-cancel\" className={cn(className)} {...props} />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger\n}\n"],"mappings":"2MAmCA,SAAS,YAAY,CAAE,GAAG,GAA2B,CACnD,OAAO,EAACA,EAAqB,KAAtB,CAA2B,YAAU,eAAe,GAAI,CAAQ,CAAA,CACzE,CAEA,SAAS,mBAAmB,CAAE,GAAG,GAAkC,CACjE,OAAO,EAACA,EAAqB,QAAtB,CAA8B,YAAU,uBAAuB,GAAI,CAAQ,CAAA,CACpF,CAEA,SAAS,kBAAkB,CAAE,GAAG,GAAiC,CAC/D,OAAO,EAACA,EAAqB,OAAtB,CAA6B,YAAU,sBAAsB,GAAI,CAAQ,CAAA,CAClF,CAEA,SAAS,mBAAmB,CAAE,YAAW,GAAG,GAAkC,CAC5E,OACE,EAACA,EAAqB,QAAtB,CACE,YAAU,uBACV,UAAW,EACT,gLACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,mBAAmB,CAAE,YAAW,OAAO,KAAM,GAAG,GAAkC,CACzF,OACE,EAAC,kBAAD,CAAA,SAAA,CACE,EAAC,mBAAD,CAAqB,CAAA,EACrB,EAACA,EAAqB,QAAtB,CACE,YAAU,uBACV,YAAW,EACX,UAAW,EACT,8YACA,CACF,EACA,GAAI,CACL,CAAA,CACgB,CAAA,CAAA,CAEvB,CAEA,SAAS,kBAAkB,CAAE,YAAW,GAAG,GAAiC,CAC1E,OACE,EAAC,MAAD,CACE,YAAU,sBACV,UAAW,EACT,sYACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,kBAAkB,CAAE,YAAW,GAAG,GAAiC,CAC1E,OACE,EAAC,MAAD,CACE,YAAU,sBACV,UAAW,EACT,gNACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,iBAAiB,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAAC,MAAD,CACE,YAAU,qBACV,UAAW,EACT,wKACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,iBAAiB,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAACA,EAAqB,MAAtB,CACE,YAAU,qBACV,UAAW,EACT,+IACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,uBAAuB,CAAE,YAAW,GAAG,GAAsC,CACpF,OACE,EAACA,EAAqB,YAAtB,CACE,YAAU,2BACV,UAAW,EACT,iIACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,kBAAkB,CACzB,YACA,UAAU,QACV,QAAQ,UACR,OAAO,KACP,GAAG,GACsB,CACzB,OACE,EAAC,EAAD,CAAiB,UAAgB,QAAa,OAAM,QAAA,GAClD,SAAA,EAACA,EAAqB,OAAtB,CAA6B,YAAU,sBAAsB,UAAW,EAAG,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC7F,CAAA,CAEZ,CAEA,SAAS,kBAAkB,CACzB,YACA,UAAU,UACV,QAAQ,UACR,OAAO,KACP,GAAG,GACsB,CACzB,OACE,EAAC,EAAD,CAAiB,UAAgB,QAAa,OAAM,QAAA,GAClD,SAAA,EAACA,EAAqB,OAAtB,CAA6B,YAAU,sBAAsB,UAAW,EAAG,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC7F,CAAA,CAEZ"}
1
+ {"version":3,"file":"alert-dialog.js","names":["AlertDialogPrimitive","resolveClassName","AlertDialog$1","props","toAsChildRenderProps","asChild","children","cn","className","state","size","buttonProps","Button"],"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog'\n\nimport { type AsChildPrimitiveProps, toAsChildRenderProps } from '../lib/as-child'\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\nimport { Button } from './button'\n\nexport type AlertDialogProps = React.ComponentProps<typeof AlertDialogPrimitive.Root>\n\nexport type AlertDialogTriggerProps = AsChildPrimitiveProps<typeof AlertDialogPrimitive.Trigger>\n\nexport type AlertDialogPortalProps = React.ComponentProps<typeof AlertDialogPrimitive.Portal>\n\nexport type AlertDialogOverlayProps = AsChildPrimitiveProps<typeof AlertDialogPrimitive.Backdrop>\n\nexport type AlertDialogContentProps = AsChildPrimitiveProps<typeof AlertDialogPrimitive.Popup> &\n Pick<AlertDialogPortalProps, 'keepMounted'> & {\n /**\n * Width of the dialog; `md` also places `AlertDialogMedia` next to the text on larger screens.\n * @default 'md'\n */\n size?: 'sm' | 'md'\n }\n\nexport type AlertDialogHeaderProps = React.ComponentProps<'div'>\n\nexport type AlertDialogFooterProps = React.ComponentProps<'div'>\n\nexport type AlertDialogMediaProps = React.ComponentProps<'div'>\n\nexport type AlertDialogTitleProps = AsChildPrimitiveProps<typeof AlertDialogPrimitive.Title>\n\nexport type AlertDialogDescriptionProps = AsChildPrimitiveProps<typeof AlertDialogPrimitive.Description>\n\nexport type AlertDialogActionProps = Omit<AsChildPrimitiveProps<typeof AlertDialogPrimitive.Close>, 'className'> &\n Pick<React.ComponentProps<typeof Button>, 'className' | 'variant' | 'color' | 'size'>\n\nexport type AlertDialogCancelProps = Omit<AsChildPrimitiveProps<typeof AlertDialogPrimitive.Close>, 'className'> &\n Pick<React.ComponentProps<typeof Button>, 'className' | 'variant' | 'color' | 'size'>\n\nfunction AlertDialog({ ...props }: AlertDialogProps) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({ asChild, children, ...props }: AlertDialogTriggerProps) {\n return (\n <AlertDialogPrimitive.Trigger\n data-slot=\"alert-dialog-trigger\"\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n />\n )\n}\n\nfunction AlertDialogPortal({ ...props }: AlertDialogPortalProps) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n}\n\nfunction AlertDialogOverlay({ className, asChild, children, ...props }: AlertDialogOverlayProps) {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={(state) =>\n cn(\n 'fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n resolveClassName(className, state)\n )\n }\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = 'md',\n keepMounted,\n asChild,\n children,\n ...props\n}: AlertDialogContentProps) {\n return (\n <AlertDialogPortal keepMounted={keepMounted}>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={(state) =>\n cn(\n 'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-background p-4 ring-1 ring-foreground/10 duration-100 outline-none data-[size=md]:max-w-xs data-[size=sm]:max-w-xs data-[size=md]:sm:max-w-sm 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',\n resolveClassName(className, state)\n )\n }\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({ className, ...props }: AlertDialogHeaderProps) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=md]/alert-dialog-content:place-items-start sm:group-data-[size=md]/alert-dialog-content:text-left sm:group-data-[size=md]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({ className, ...props }: AlertDialogFooterProps) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n '-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({ className, ...props }: AlertDialogMediaProps) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=md]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({ className, asChild, children, ...props }: AlertDialogTitleProps) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={(state) =>\n cn(\n 'text-base font-medium sm:group-data-[size=md]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n resolveClassName(className, state)\n )\n }\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n />\n )\n}\n\nfunction AlertDialogDescription({ className, asChild, children, ...props }: AlertDialogDescriptionProps) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={(state) =>\n cn(\n 'text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',\n resolveClassName(className, state)\n )\n }\n {...props}\n {...toAsChildRenderProps(asChild, children)}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = 'solid',\n color = 'primary',\n size = 'md',\n asChild,\n children,\n ...props\n}: AlertDialogActionProps) {\n const buttonProps = { variant, color, size, className: cn(className) }\n\n // With `asChild`, the Button merges the close behavior into the consumer's element instead of a <button>.\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-action\"\n render={\n asChild ? (\n <Button {...buttonProps} asChild>\n {children}\n </Button>\n ) : (\n <Button {...buttonProps} />\n )\n }\n {...props}\n >\n {asChild ? undefined : children}\n </AlertDialogPrimitive.Close>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = 'outline',\n color = 'primary',\n size = 'md',\n asChild,\n children,\n ...props\n}: AlertDialogCancelProps) {\n const buttonProps = { variant, color, size, className: cn(className) }\n\n // With `asChild`, the Button merges the close behavior into the consumer's element instead of a <button>.\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n render={\n asChild ? (\n <Button {...buttonProps} asChild>\n {children}\n </Button>\n ) : (\n <Button {...buttonProps} />\n )\n }\n {...props}\n >\n {asChild ? undefined : children}\n </AlertDialogPrimitive.Close>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
- import { VariantProps } from "class-variance-authority";
3
2
  import * as React from "react";
3
+ import { VariantProps } from "class-variance-authority";
4
4
  //#region src/components/alert.d.ts
5
5
  declare const alertVariants: (props?: ({
6
6
  variant?: "default" | "destructive" | null | undefined;
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{jsx as t}from"react/jsx-runtime";import{cva as n}from"class-variance-authority";const r=n(`grid gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4 w-full relative group/alert`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current`}},defaultVariants:{variant:`default`}});function Alert({className:n,variant:i,...a}){return t(`div`,{"data-slot":`alert`,role:`alert`,className:e(r({variant:i}),n),...a})}function AlertTitle({className:n,...r}){return t(`div`,{"data-slot":`alert-title`,className:e(`font-medium group-has-[>svg]/alert:col-start-2`,`[&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground`,n),...r})}function AlertDescription({className:n,...r}){return t(`div`,{"data-slot":`alert-description`,className:e(`text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4`,`[&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground`,n),...r})}function AlertAction({className:n,...r}){return t(`div`,{"data-slot":`alert-action`,className:e(`absolute top-2 right-2`,n),...r})}export{Alert,AlertAction,AlertDescription,AlertTitle};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{jsx as t}from"react/jsx-runtime";import{cva as n}from"class-variance-authority";const r=n(`grid gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4 w-full relative group/alert`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current`}},defaultVariants:{variant:`default`}});function Alert({className:n,variant:i,...a}){return/* @__PURE__ */ t(`div`,{"data-slot":`alert`,role:`alert`,className:e(r({variant:i}),n),...a})}function AlertTitle({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`alert-title`,className:e(`font-medium group-has-[>svg]/alert:col-start-2`,`[&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground`,n),...r})}function AlertDescription({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`alert-description`,className:e(`text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4`,`[&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground`,n),...r})}function AlertAction({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`alert-action`,className:e(`absolute top-2 right-2`,n),...r})}export{Alert,AlertAction,AlertDescription,AlertTitle};
2
2
  //# sourceMappingURL=alert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","names":[],"sources":["../../src/components/alert.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst alertVariants = cva(\n \"grid gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4 w-full relative group/alert\",\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive: 'text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current'\n }\n },\n defaultVariants: {\n variant: 'default'\n }\n }\n)\n\nexport type AlertProps = React.ComponentProps<'div'> & VariantProps<typeof alertVariants>\n\nexport type AlertTitleProps = React.ComponentProps<'div'>\n\nexport type AlertDescriptionProps = React.ComponentProps<'div'>\n\nexport type AlertActionProps = React.ComponentProps<'div'>\n\nfunction Alert({ className, variant, ...props }: AlertProps) {\n return <div data-slot=\"alert\" role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n}\n\nfunction AlertTitle({ className, ...props }: AlertTitleProps) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n 'font-medium group-has-[>svg]/alert:col-start-2',\n '[&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({ className, ...props }: AlertDescriptionProps) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4',\n '[&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: AlertActionProps) {\n return <div data-slot=\"alert-action\" className={cn('absolute top-2 right-2', className)} {...props} />\n}\n\nexport { Alert, AlertAction, AlertDescription, AlertTitle }\n"],"mappings":"oKAMA,MAAM,EAAgB,EACpB,4TACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,+BACT,YAAa,mGACf,CACF,EACA,gBAAiB,CACf,QAAS,SACX,CACF,CACF,EAUA,SAAS,MAAM,CAAE,YAAW,UAAS,GAAG,GAAqB,CAC3D,OAAO,EAAC,MAAD,CAAK,YAAU,QAAQ,KAAK,QAAQ,UAAW,EAAG,EAAc,CAAE,SAAQ,CAAC,EAAG,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC/G,CAEA,SAAS,WAAW,CAAE,YAAW,GAAG,GAA0B,CAC5D,OACE,EAAC,MAAD,CACE,YAAU,cACV,UAAW,EACT,iDACA,uEACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,iBAAiB,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAAC,MAAD,CACE,YAAU,oBACV,UAAW,EACT,wFACA,uEACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OAAO,EAAC,MAAD,CAAK,YAAU,eAAe,UAAW,EAAG,yBAA0B,CAAS,EAAG,GAAI,CAAQ,CAAA,CACvG"}
1
+ {"version":3,"file":"alert.js","names":["alertVariants","cva","props","cn","className"],"sources":["../../src/components/alert.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst alertVariants = cva(\n \"grid gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4 w-full relative group/alert\",\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive: 'text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current'\n }\n },\n defaultVariants: {\n variant: 'default'\n }\n }\n)\n\nexport type AlertProps = React.ComponentProps<'div'> & VariantProps<typeof alertVariants>\n\nexport type AlertTitleProps = React.ComponentProps<'div'>\n\nexport type AlertDescriptionProps = React.ComponentProps<'div'>\n\nexport type AlertActionProps = React.ComponentProps<'div'>\n\nfunction Alert({ className, variant, ...props }: AlertProps) {\n return <div data-slot=\"alert\" role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n}\n\nfunction AlertTitle({ className, ...props }: AlertTitleProps) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n 'font-medium group-has-[>svg]/alert:col-start-2',\n '[&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({ className, ...props }: AlertDescriptionProps) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4',\n '[&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: AlertActionProps) {\n return <div data-slot=\"alert-action\" className={cn('absolute top-2 right-2', className)} {...props} />\n}\n\nexport { Alert, AlertAction, AlertDescription, AlertTitle }\n"],"mappings":"oKAMA,MAAMA,EAAgBC,EACpB,4TACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,+BACT,YAAa,mGACf,CACF,EACA,gBAAiB,CACf,QAAS,SACX,CACF,CACF,EAUA,SAAS,MAAM,CAAE,YAAW,UAAS,GAAGC,GAAqB,CAC3D,MAAO,kBAAC,MAAD,CAAK,YAAU,QAAQ,KAAK,QAAQ,UAAWC,EAAGH,EAAc,CAAE,SAAQ,CAAC,EAAGI,CAAS,EAAG,GAAIF,CAAQ,CAAA,CAC/G,CAEA,SAAS,WAAW,CAAE,YAAW,GAAGA,GAA0B,CAC5D,MACE,kBAAC,MAAD,CACE,YAAU,cACV,UAAWC,EACT,iDACA,uEACAC,CACF,EACA,GAAIF,CACL,CAAA,CAEL,CAEA,SAAS,iBAAiB,CAAE,YAAW,GAAGA,GAAgC,CACxE,MACE,kBAAC,MAAD,CACE,YAAU,oBACV,UAAWC,EACT,wFACA,uEACAC,CACF,EACA,GAAIF,CACL,CAAA,CAEL,CAEA,SAAS,YAAY,CAAE,YAAW,GAAGA,GAA2B,CAC9D,MAAO,kBAAC,MAAD,CAAK,YAAU,eAAe,UAAWC,EAAG,yBAA0BC,CAAS,EAAG,GAAIF,CAAQ,CAAA,CACvG"}
@@ -1,15 +1,13 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
+ import { n as AsChildProps } from "../as-child-Dxg3Xo1G.js";
2
3
  import { VariantProps } from "class-variance-authority";
3
- import * as React from "react";
4
4
  //#region src/components/anchor.d.ts
5
5
  declare const anchorVariants: (props?: ({
6
6
  size?: "lg" | "md" | "sm" | "xl" | "xs" | null | undefined;
7
7
  underline?: "always" | "hover" | "never" | "not-hover" | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
- export type AnchorProps = React.ComponentProps<'a'> & VariantProps<typeof anchorVariants> & {
10
- asChild?: boolean;
11
- };
12
- declare function Anchor({ className, size, underline, asChild, ...props }: AnchorProps): React.JSX.Element;
9
+ export type AnchorProps = AsChildProps<'a'> & VariantProps<typeof anchorVariants>;
10
+ declare function Anchor({ className, size, underline, ...props }: AnchorProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
13
11
  //#endregion
14
12
  export { Anchor, anchorVariants };
15
13
  //# sourceMappingURL=anchor.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";import{cva as r}from"class-variance-authority";const i=r(`text-primary rounded-sm underline-offset-4 transition-colors outline-none hover:text-primary/80 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},underline:{always:`underline`,hover:`no-underline hover:underline`,never:`no-underline`,"not-hover":`underline hover:no-underline`}},defaultVariants:{size:`md`,underline:`hover`}});function Anchor({className:r,size:a=`md`,underline:o=`hover`,asChild:s=!1,...c}){let l=s?t.Root:`a`;return n(l,{"data-slot":`anchor`,"data-size":a,"data-underline":o,className:e(i({size:a,underline:o}),r),...c})}export{Anchor,i as anchorVariants};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{useAsChild as e}from"../lib/as-child.js";import{cn as t}from"../lib/utils.js";import{cva as n}from"class-variance-authority";const r=n(`text-primary rounded-sm underline-offset-4 transition-colors outline-none hover:text-primary/80 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},underline:{always:`underline`,hover:`no-underline hover:underline`,never:`no-underline`,"not-hover":`underline hover:no-underline`}},defaultVariants:{size:`md`,underline:`hover`}});function Anchor({className:n,size:i=`md`,underline:a=`hover`,...o}){return e(`a`,{"data-slot":`anchor`,"data-size":i,"data-underline":a,className:t(r({size:i,underline:a}),n),...o})}export{Anchor,r as anchorVariants};
2
2
  //# sourceMappingURL=anchor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"anchor.js","names":[],"sources":["../../src/components/anchor.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Slot } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\n\nconst anchorVariants = cva(\n 'text-primary rounded-sm underline-offset-4 transition-colors outline-none hover:text-primary/80 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3',\n {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl'\n },\n underline: {\n always: 'underline',\n hover: 'no-underline hover:underline',\n never: 'no-underline',\n 'not-hover': 'underline hover:no-underline'\n }\n },\n defaultVariants: {\n size: 'md',\n underline: 'hover'\n }\n }\n)\n\nexport type AnchorProps = React.ComponentProps<'a'> &\n VariantProps<typeof anchorVariants> & {\n asChild?: boolean\n }\n\nfunction Anchor({ className, size = 'md', underline = 'hover', asChild = false, ...props }: AnchorProps) {\n const Comp = asChild ? Slot.Root : 'a'\n\n return (\n <Comp\n data-slot=\"anchor\"\n data-size={size}\n data-underline={underline}\n className={cn(anchorVariants({ size, underline }), className)}\n {...props}\n />\n )\n}\n\nexport { Anchor, anchorVariants }\n"],"mappings":"oMAOA,MAAM,EAAiB,EACrB,4KACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,UACJ,GAAI,UACJ,GAAI,YACJ,GAAI,UACJ,GAAI,SACN,EACA,UAAW,CACT,OAAQ,YACR,MAAO,+BACP,MAAO,eACP,YAAa,8BACf,CACF,EACA,gBAAiB,CACf,KAAM,KACN,UAAW,OACb,CACF,CACF,EAOA,SAAS,OAAO,CAAE,YAAW,OAAO,KAAM,YAAY,QAAS,UAAU,GAAO,GAAG,GAAsB,CACvG,IAAM,EAAO,EAAU,EAAK,KAAO,IAEnC,OACE,EAAC,EAAD,CACE,YAAU,SACV,YAAW,EACX,iBAAgB,EAChB,UAAW,EAAG,EAAe,CAAE,OAAM,WAAU,CAAC,EAAG,CAAS,EAC5D,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"anchor.js","names":["anchorVariants","cva","props","useAsChild","size","underline","cn","className"],"sources":["../../src/components/anchor.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority'\n\nimport { type AsChildProps, useAsChild } from '../lib/as-child'\nimport { cn } from '../lib/utils'\n\nconst anchorVariants = cva(\n 'text-primary rounded-sm underline-offset-4 transition-colors outline-none hover:text-primary/80 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3',\n {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl'\n },\n underline: {\n always: 'underline',\n hover: 'no-underline hover:underline',\n never: 'no-underline',\n 'not-hover': 'underline hover:no-underline'\n }\n },\n defaultVariants: {\n size: 'md',\n underline: 'hover'\n }\n }\n)\n\nexport type AnchorProps = AsChildProps<'a'> & VariantProps<typeof anchorVariants>\n\nfunction Anchor({ className, size = 'md', underline = 'hover', ...props }: AnchorProps) {\n return useAsChild('a', {\n 'data-slot': 'anchor',\n 'data-size': size,\n 'data-underline': underline,\n className: cn(anchorVariants({ size, underline }), className),\n ...props\n })\n}\n\nexport { Anchor, anchorVariants }\n"],"mappings":"4KAKA,MAAMA,EAAiBC,EACrB,4KACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,UACJ,GAAI,UACJ,GAAI,YACJ,GAAI,UACJ,GAAI,SACN,EACA,UAAW,CACT,OAAQ,YACR,MAAO,+BACP,MAAO,eACP,YAAa,8BACf,CACF,EACA,gBAAiB,CACf,KAAM,KACN,UAAW,OACb,CACF,CACF,EAIA,SAAS,OAAO,CAAE,YAAW,OAAO,KAAM,YAAY,QAAS,GAAGC,GAAsB,CACtF,OAAOC,EAAW,IAAK,CACrB,YAAa,SACb,YAAaC,EACb,iBAAkBC,EAClB,UAAWC,EAAGN,EAAe,CAAE,OAAM,WAAU,CAAC,EAAGO,CAAS,EAC5D,GAAGL,CACL,CAAC,CACH"}