@uselets/ui 1.2.2 → 1.4.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 (218) hide show
  1. package/README.md +96 -5
  2. package/dist/chart-DHS2QeM8.d.ts +80 -0
  3. package/dist/cli/uselets.mjs.map +1 -1
  4. package/dist/components/accordion.d.ts +4 -5
  5. package/dist/components/accordion.js.map +1 -1
  6. package/dist/components/alert-dialog.d.ts +12 -13
  7. package/dist/components/alert-dialog.js.map +1 -1
  8. package/dist/components/alert.d.ts +5 -7
  9. package/dist/components/alert.js.map +1 -1
  10. package/dist/components/anchor.d.ts +2 -4
  11. package/dist/components/anchor.js.map +1 -1
  12. package/dist/components/area-chart.d.ts +58 -0
  13. package/dist/components/area-chart.js +2 -0
  14. package/dist/components/area-chart.js.map +1 -0
  15. package/dist/components/avatar.d.ts +6 -7
  16. package/dist/components/avatar.js.map +1 -1
  17. package/dist/components/badge.d.ts +2 -4
  18. package/dist/components/badge.js.map +1 -1
  19. package/dist/components/bar-chart.d.ts +54 -0
  20. package/dist/components/bar-chart.js +2 -0
  21. package/dist/components/bar-chart.js.map +1 -0
  22. package/dist/components/breadcrumb.d.ts +7 -8
  23. package/dist/components/breadcrumb.js.map +1 -1
  24. package/dist/components/button-group.d.ts +4 -6
  25. package/dist/components/button-group.js.map +1 -1
  26. package/dist/components/button.d.ts +2 -4
  27. package/dist/components/button.js.map +1 -1
  28. package/dist/components/calendar.d.ts +2 -3
  29. package/dist/components/calendar.js.map +1 -1
  30. package/dist/components/card.d.ts +7 -8
  31. package/dist/components/card.js.map +1 -1
  32. package/dist/components/carousel.d.ts +17 -7
  33. package/dist/components/carousel.js +1 -1
  34. package/dist/components/carousel.js.map +1 -1
  35. package/dist/components/carousel.spec.d.ts +1 -0
  36. package/dist/components/carousel.spec.js +2 -0
  37. package/dist/components/carousel.spec.js.map +1 -0
  38. package/dist/components/center.d.ts +2 -4
  39. package/dist/components/center.js.map +1 -1
  40. package/dist/components/chart.d.ts +2 -263
  41. package/dist/components/chart.js +1 -1
  42. package/dist/components/chart.js.map +1 -1
  43. package/dist/components/checkbox.d.ts +2 -4
  44. package/dist/components/checkbox.js +1 -1
  45. package/dist/components/checkbox.js.map +1 -1
  46. package/dist/components/code.d.ts +1 -2
  47. package/dist/components/code.js.map +1 -1
  48. package/dist/components/collapsible.d.ts +3 -4
  49. package/dist/components/collapsible.js.map +1 -1
  50. package/dist/components/combobox.d.ts +15 -16
  51. package/dist/components/combobox.js.map +1 -1
  52. package/dist/components/command.d.ts +9 -10
  53. package/dist/components/command.js.map +1 -1
  54. package/dist/components/container.d.ts +2 -4
  55. package/dist/components/container.js.map +1 -1
  56. package/dist/components/data-table.d.ts +164 -0
  57. package/dist/components/data-table.js +2 -0
  58. package/dist/components/data-table.js.map +1 -0
  59. package/dist/components/date-range-picker.d.ts +11 -12
  60. package/dist/components/date-range-picker.js.map +1 -1
  61. package/dist/components/dialog.d.ts +11 -13
  62. package/dist/components/dialog.js.map +1 -1
  63. package/dist/components/donut-chart.d.ts +22 -0
  64. package/dist/components/donut-chart.js +2 -0
  65. package/dist/components/donut-chart.js.map +1 -0
  66. package/dist/components/drawer.d.ts +12 -14
  67. package/dist/components/drawer.js.map +1 -1
  68. package/dist/components/dropdown-menu.d.ts +15 -16
  69. package/dist/components/dropdown-menu.js.map +1 -1
  70. package/dist/components/dropzone.d.ts +1 -2
  71. package/dist/components/dropzone.js.map +1 -1
  72. package/dist/components/empty.d.ts +7 -9
  73. package/dist/components/empty.js.map +1 -1
  74. package/dist/components/field.d.ts +11 -13
  75. package/dist/components/field.js.map +1 -1
  76. package/dist/components/field.spec.js +1 -1
  77. package/dist/components/field.spec.js.map +1 -1
  78. package/dist/components/flex.d.ts +25 -0
  79. package/dist/components/flex.js +2 -0
  80. package/dist/components/flex.js.map +1 -0
  81. package/dist/components/grid.d.ts +2 -3
  82. package/dist/components/grid.js +1 -1
  83. package/dist/components/grid.js.map +1 -1
  84. package/dist/components/group.d.ts +6 -4
  85. package/dist/components/group.js +1 -1
  86. package/dist/components/group.js.map +1 -1
  87. package/dist/components/heading.d.ts +2 -4
  88. package/dist/components/heading.js.map +1 -1
  89. package/dist/components/hover-card.d.ts +3 -4
  90. package/dist/components/hover-card.js.map +1 -1
  91. package/dist/components/input-group.d.ts +8 -10
  92. package/dist/components/input-group.js.map +1 -1
  93. package/dist/components/input-otp.d.ts +4 -5
  94. package/dist/components/input-otp.js.map +1 -1
  95. package/dist/components/input.d.ts +1 -2
  96. package/dist/components/input.js.map +1 -1
  97. package/dist/components/kbd.d.ts +2 -3
  98. package/dist/components/kbd.js.map +1 -1
  99. package/dist/components/label.d.ts +1 -2
  100. package/dist/components/label.js.map +1 -1
  101. package/dist/components/list.d.ts +4 -6
  102. package/dist/components/list.js.map +1 -1
  103. package/dist/components/mask-input.d.ts +25 -0
  104. package/dist/components/mask-input.js +2 -0
  105. package/dist/components/mask-input.js.map +1 -0
  106. package/dist/components/native-select.d.ts +3 -4
  107. package/dist/components/native-select.js.map +1 -1
  108. package/dist/components/navigation-menu.d.ts +9 -11
  109. package/dist/components/navigation-menu.js.map +1 -1
  110. package/dist/components/pagination.d.ts +7 -8
  111. package/dist/components/pagination.js.map +1 -1
  112. package/dist/components/pie-chart.d.ts +58 -0
  113. package/dist/components/pie-chart.js +2 -0
  114. package/dist/components/pie-chart.js.map +1 -0
  115. package/dist/components/popover.d.ts +7 -8
  116. package/dist/components/popover.js.map +1 -1
  117. package/dist/components/progress.d.ts +1 -2
  118. package/dist/components/progress.js.map +1 -1
  119. package/dist/components/radio-group.d.ts +3 -5
  120. package/dist/components/radio-group.js.map +1 -1
  121. package/dist/components/resizable.d.ts +3 -4
  122. package/dist/components/resizable.js.map +1 -1
  123. package/dist/components/scroll-area.d.ts +2 -3
  124. package/dist/components/scroll-area.js.map +1 -1
  125. package/dist/components/select.d.ts +10 -11
  126. package/dist/components/select.js.map +1 -1
  127. package/dist/components/separator.d.ts +1 -2
  128. package/dist/components/separator.js.map +1 -1
  129. package/dist/components/sidebar.d.ts +24 -26
  130. package/dist/components/sidebar.js.map +1 -1
  131. package/dist/components/simple-grid.d.ts +1 -2
  132. package/dist/components/simple-grid.js +1 -1
  133. package/dist/components/simple-grid.js.map +1 -1
  134. package/dist/components/skeleton.d.ts +1 -2
  135. package/dist/components/skeleton.js.map +1 -1
  136. package/dist/components/skeleton.spec.js +1 -1
  137. package/dist/components/skeleton.spec.js.map +1 -1
  138. package/dist/components/slider.d.ts +1 -2
  139. package/dist/components/slider.js.map +1 -1
  140. package/dist/components/sonner.d.ts +1 -2
  141. package/dist/components/sonner.js.map +1 -1
  142. package/dist/components/spinner.d.ts +2 -4
  143. package/dist/components/spinner.js.map +1 -1
  144. package/dist/components/stack.d.ts +6 -4
  145. package/dist/components/stack.js +1 -1
  146. package/dist/components/stack.js.map +1 -1
  147. package/dist/components/switch.d.ts +1 -2
  148. package/dist/components/switch.js.map +1 -1
  149. package/dist/components/table.d.ts +29 -11
  150. package/dist/components/table.js +1 -1
  151. package/dist/components/table.js.map +1 -1
  152. package/dist/components/tabs.d.ts +5 -7
  153. package/dist/components/tabs.js.map +1 -1
  154. package/dist/components/text.d.ts +2 -4
  155. package/dist/components/text.js.map +1 -1
  156. package/dist/components/textarea.d.ts +1 -2
  157. package/dist/components/textarea.js.map +1 -1
  158. package/dist/components/theme.d.ts +2 -3
  159. package/dist/components/theme.js +1 -1
  160. package/dist/components/theme.js.map +1 -1
  161. package/dist/components/timeline.d.ts +3 -4
  162. package/dist/components/timeline.js.map +1 -1
  163. package/dist/components/toggle-group.d.ts +2 -3
  164. package/dist/components/toggle-group.js.map +1 -1
  165. package/dist/components/toggle.d.ts +2 -4
  166. package/dist/components/toggle.js.map +1 -1
  167. package/dist/components/tooltip.d.ts +5 -6
  168. package/dist/components/tooltip.js.map +1 -1
  169. package/dist/components/unstyled-button.d.ts +1 -2
  170. package/dist/components/unstyled-button.js.map +1 -1
  171. package/dist/components/visibility.d.ts +2 -3
  172. package/dist/components/visibility.js.map +1 -1
  173. package/dist/dist-C35vdEt2.js +129 -0
  174. package/dist/dist-C35vdEt2.js.map +1 -0
  175. package/dist/hooks/use-breakpoint-value.js.map +1 -1
  176. package/dist/hooks/use-breakpoint-value.spec.js +1 -14
  177. package/dist/hooks/use-breakpoint-value.spec.js.map +1 -1
  178. package/dist/hooks/use-breakpoint.js.map +1 -1
  179. package/dist/hooks/use-breakpoint.spec.js +1 -1
  180. package/dist/hooks/use-breakpoint.spec.js.map +1 -1
  181. package/dist/hooks/use-disclosure.js.map +1 -1
  182. package/dist/hooks/use-disclosure.spec.js +1 -1
  183. package/dist/hooks/use-disclosure.spec.js.map +1 -1
  184. package/dist/hooks/use-document-visibility.js.map +1 -1
  185. package/dist/hooks/use-document-visibility.spec.js +1 -1
  186. package/dist/hooks/use-document-visibility.spec.js.map +1 -1
  187. package/dist/hooks/use-idle.js.map +1 -1
  188. package/dist/hooks/use-idle.spec.js +1 -1
  189. package/dist/hooks/use-idle.spec.js.map +1 -1
  190. package/dist/hooks/use-interval.js.map +1 -1
  191. package/dist/hooks/use-interval.spec.js +1 -1
  192. package/dist/hooks/use-interval.spec.js.map +1 -1
  193. package/dist/hooks/use-local-storage.js.map +1 -1
  194. package/dist/hooks/use-local-storage.spec.js +1 -1
  195. package/dist/hooks/use-local-storage.spec.js.map +1 -1
  196. package/dist/hooks/use-mask.d.ts +9 -0
  197. package/dist/hooks/use-mask.js +2 -0
  198. package/dist/hooks/use-mask.js.map +1 -0
  199. package/dist/hooks/use-mobile.js.map +1 -1
  200. package/dist/hooks/use-mobile.spec.js +1 -1
  201. package/dist/hooks/use-mobile.spec.js.map +1 -1
  202. package/dist/index.d.ts +12 -4
  203. package/dist/index.js +1 -1
  204. package/dist/lib/button.js.map +1 -1
  205. package/dist/lib/color.js.map +1 -1
  206. package/dist/lib/utils.js.map +1 -1
  207. package/dist/magic-string.es-C-uSEkg2.js +15 -0
  208. package/dist/magic-string.es-C-uSEkg2.js.map +1 -0
  209. package/dist/postcss.config.js.map +1 -1
  210. package/dist/{react.esm-B3a5z6DL.js → react.esm-BagSCtI3.js} +12 -3
  211. package/dist/{react.esm-B3a5z6DL.js.map → react.esm-BagSCtI3.js.map} +1 -1
  212. package/dist/skills/uselets-ui/SKILL.md +1 -0
  213. package/dist/skills/uselets-ui/references/component-catalog.md +37 -7
  214. package/dist/skills/uselets-ui/references/package-guide.md +139 -2
  215. package/package.json +15 -13
  216. package/skills/uselets-ui/SKILL.md +1 -0
  217. package/skills/uselets-ui/references/component-catalog.md +37 -7
  218. package/skills/uselets-ui/references/package-guide.md +139 -2
package/README.md CHANGED
@@ -122,6 +122,7 @@ export function Example() {
122
122
 
123
123
  ```tsx
124
124
  import { Button } from '@uselets/ui/button'
125
+ import { DataTable, DataTableColumnHeader, createDataTableSelectColumn } from '@uselets/ui/data-table'
125
126
  import { useBreakpointValue } from '@uselets/ui/hooks/use-breakpoint-value'
126
127
  import { useIsMobile } from '@uselets/ui/hooks/use-mobile'
127
128
  import { useDisclosure } from '@uselets/ui/hooks/use-disclosure'
@@ -129,6 +130,93 @@ import { useLocalStorage } from '@uselets/ui/hooks/use-local-storage'
129
130
  import { randomId } from '@uselets/ui/utils'
130
131
  ```
131
132
 
133
+ ### Data tables
134
+
135
+ Use `DataTable` for client-side tables. The default render is intentionally bare — just a header and the empty
136
+ state — and every additional feature is opt-in: `filterColumns`, `enableSorting`, `showPagination`,
137
+ `showColumnVisibility`, `toolbarActions`, and `enableRowSelection`. When `enableRowSelection` is `true` the selection checkbox column
138
+ is prepended automatically (use the exported `createDataTableSelectColumn` only when you need to place it
139
+ elsewhere). `filterColumns` accepts a single column id (`"customer"`) or an array (`["customer", "email"]`);
140
+ when there are two or more, a select rendered with `InputGroup` appears at the left of the input to pick the
141
+ target column. `toolbarActions` always renders at the right of the toolbar, even without a filter. All
142
+ user-facing labels default to Portuguese (pt-BR) and can be overridden through the `labels` prop.
143
+
144
+ The underlying `Table` component renders only the `<table>` element (no auto wrapper) and is striped by default
145
+ (pass `striped={false}` to disable). Use `variant` to control the outer chrome: `"line"` (default) renders only
146
+ horizontal separators between rows; `"outline"` adds a rounded outer border. The outline chrome works in two
147
+ modes: standalone (no `TableContainer`), the border lives on the `<table>` itself; wrapped in a `TableContainer`,
148
+ the container detects the outline variant via `:has()`, applies the chrome on itself, and removes it from the
149
+ `<table>` — this keeps the border sticky-safe (sticky headers can no longer paint over it) without changing
150
+ the visible result. `DataTable` accepts the same `variant` prop and forwards it to its internal `Table`. Wrap `Table` in `TableContainer` to
151
+ control horizontal scroll — use the `minWidth` prop (number in px or any CSS length) on `TableContainer` to
152
+ force horizontal scroll when the parent is narrower. Combine `stickyHeader` on `Table` with `max-h` +
153
+ `overflow-y-auto` on `TableContainer` (via `className` or `style`) to keep `<thead>` visible while the body
154
+ scrolls vertically. `DataTable` already wraps its `Table` in a `TableContainer`.
155
+
156
+ ```tsx
157
+ import type { ColumnDef } from '@tanstack/react-table'
158
+ import { DataTable, DataTableColumnHeader } from '@uselets/ui/data-table'
159
+
160
+ type Payment = {
161
+ id: string
162
+ customer: string
163
+ amount: number
164
+ }
165
+
166
+ const columns: ColumnDef<Payment>[] = [
167
+ {
168
+ accessorKey: 'customer',
169
+ header: ({ column }) => <DataTableColumnHeader column={column} title="Customer" />
170
+ },
171
+ {
172
+ accessorKey: 'amount',
173
+ header: ({ column }) => <DataTableColumnHeader column={column} title="Amount" />,
174
+ cell: ({ row }) => new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(row.original.amount)
175
+ }
176
+ ]
177
+
178
+ export function PaymentsTable({ payments }: { payments: Payment[] }) {
179
+ return (
180
+ <DataTable
181
+ columns={columns}
182
+ data={payments}
183
+ getRowId={(row) => row.id}
184
+ filterColumns={['customer', 'email']}
185
+ enableRowSelection
186
+ enableSorting
187
+ showPagination
188
+ variant="outline"
189
+ labels={{
190
+ filterPlaceholder: 'Buscar cliente…',
191
+ pageOf: (current, total) => `${current} / ${total}`
192
+ }}
193
+ />
194
+ )
195
+ }
196
+ ```
197
+
198
+ Override any subset of `DataTableLabels`; remaining keys fall back to the pt-BR defaults exported as
199
+ `defaultDataTableLabels`.
200
+
201
+ #### Compound API and virtualization
202
+
203
+ `DataTable` also exposes a compound API for cases that need finer control — chiefly virtualization, but also
204
+ custom layout (toolbar inside a card header, pagination in a footer slot) or sharing the `table` instance with
205
+ code outside the table subtree. The high-level `DataTable` shown above is itself implemented in terms of these
206
+ parts, so behavior never diverges.
207
+
208
+ Exports: `DataTableRoot`, `DataTableToolbar`, `DataTableHeader`, `DataTableBody`, `DataTablePagination`,
209
+ `useDataTable`, `useDataTableContext`. `DataTableRoot` accepts either `{ columns, data, ...options }` or
210
+ `{ table }` (instance created via `useDataTable`).
211
+
212
+ For virtualization, `@uselets/ui` is intentionally **virtualizer-agnostic** — no runtime dependency on
213
+ `@tanstack/react-virtual`, `react-window`, `virtua`, or any other library. Bring your own: instantiate it next
214
+ to `useDataTable`, then render your virtual `<tbody>` in place of `<DataTableBody />`. Set
215
+ `enablePagination: false` on `useDataTable` so `table.getRowModel()` returns the full filtered dataset.
216
+
217
+ A complete TanStack Virtual example lives in `apps/web/src/stories/data-table-virtualized.stories.tsx` and the
218
+ recipe is documented in the `uselets-ui` skill (`packages/ui/skills/uselets-ui/references/package-guide.md`).
219
+
132
220
  ## Theme tokens
133
221
 
134
222
  The package ships brand theme entrypoints:
@@ -244,10 +332,12 @@ You can import from the package root (`@uselets/ui`) or by subpath (`@uselets/ui
244
332
  | `dropdown-menu` | `DropdownMenu`, `DropdownMenuTrigger`, `DropdownMenuContent`, `DropdownMenuItem`, `DropdownMenuCheckboxItem`, `DropdownMenuRadioGroup`, `DropdownMenuRadioItem`, `DropdownMenuSub`, `DropdownMenuSubTrigger`, `DropdownMenuSubContent`, `DropdownMenuSeparator`, `DropdownMenuShortcut` | `DropdownMenuContent` supports `side`, `sideOffset`, `align`, `alignOffset`; items support `inset`, and `DropdownMenuItem` supports `variant: 'default' \| 'destructive'`. |
245
333
  | `empty` | `Empty`, `EmptyHeader`, `EmptyMedia`, `EmptyTitle`, `EmptyDescription`, `EmptyContent` | `EmptyMedia` supports `variant: 'default' \| 'icon'` (default: `default`). |
246
334
  | `field` | `FieldSet`, `FieldLegend`, `FieldGroup`, `Field`, `FieldContent`, `FieldLabel`, `FieldTitle`, `FieldDescription`, `FieldSeparator`, `FieldError`, `useFieldControlId` | `Field.orientation: 'vertical' \| 'horizontal' \| 'responsive'` (default: `vertical`); `FieldLegend.variant: 'legend' \| 'label'`; `FieldError.errors` accepts an array of error objects. When a labelable control is rendered inside `Field` without an explicit `id`, `Field` provides a generated id and `FieldLabel` uses it automatically. |
247
- | `grid` | `Grid`, `GridItem` | `Grid` is a 12-column CSS grid by default and supports `gap`, `rowGap`, `columnGap`, `templateRows`, and `templateColumns`. `GridItem` defaults to `colSpan={12}` and supports numeric `colSpan` and `rowSpan`; use `useBreakpointValue` when spans or templates need responsive values. |
335
+ | `flex` | `Flex`, `flexVariants` | Flexbox layout primitive with `direction: 'row' \| 'row-reverse' \| 'column' \| 'column-reverse'` (default: `row`), `align: 'start' \| 'end' \| 'center' \| 'baseline' \| 'stretch'`, `justify: 'start' \| 'end' \| 'center' \| 'between' \| 'around' \| 'evenly'`, `wrap?: boolean`, and `gap: 'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` (`4/8/16/24/32px`). |
336
+ | `grid` | `Grid`, `GridItem` | `Grid` is a 12-column CSS grid by default and supports `gap`, `rowGap`, `columnGap`, `templateRows`, and `templateColumns`; spacing uses the `xs` to `xl` scale (`4/8/16/24/32px`). `GridItem` defaults to `colSpan={12}` and supports numeric `colSpan` and `rowSpan`; use `useBreakpointValue` when spans or templates need responsive values. |
248
337
  | `heading` | `Heading`, `headingVariants` | Heading primitive with `size: 'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` (default: `md`) and `asChild`. |
249
338
  | `input` | `Input` | Wrapper for Base UI Input with all native `<input>` props. |
250
339
  | `input-otp` | `InputOTP`, `InputOTPGroup`, `InputOTPSlot`, `InputOTPSeparator`, `REGEXP_ONLY_CHARS`, `REGEXP_ONLY_DIGITS`, `REGEXP_ONLY_DIGITS_AND_CHARS` | `InputOTP` supports all `input-otp` props plus `containerClassName`; use `maxLength` and `pattern` for validation. |
340
+ | `mask-input` | `MaskInput` | Formatted input backed by `@react-input/mask`. Accepts `mask` plus optional `replacement`, `showMask`, `separate`, `track`, `modify`. Default replacement tokens: `9` (digit), `a` (letter), `*` (any). The `useMask` hook is also exported from `@uselets/ui/hooks/use-mask` for custom inputs. |
251
341
  | `kbd` | `Kbd`, `KbdGroup` | Keyboard shortcut presentation primitives. |
252
342
  | `label` | `Label` | Styled `<label>` wrapper. |
253
343
  | `list` | `List`, `ListItem`, `ListIcon`, `listVariants` | `List.type: 'unordered' \| 'ordered'`; `size` and `spacing` use the `xs` to `xl` scale; `ListIcon` can use `asChild` and replaces the default marker with a primary-colored icon. |
@@ -256,7 +346,7 @@ You can import from the package root (`@uselets/ui`) or by subpath (`@uselets/ui
256
346
  | `radio-group` | `RadioGroup`, `RadioGroupItem` | `RadioGroup` supports `color: UIColor` (default: `primary`) for the group. `RadioGroupItem` supports `size: 'sm' \| 'md' \| 'lg'` (default: `md`), optional `color: UIColor` item overrides, `label?: React.ReactNode`, and `labelProps` for the composed `Label`. When `label` is provided without `id`, it generates an id and wires `htmlFor` automatically. Label text follows item size: `sm` 12px, `md` 14px, `lg` 20px. |
257
347
  | `select` | `Select`, `SelectTrigger`, `SelectValue`, `SelectContent`, `SelectGroup`, `SelectItem`, `SelectLabel`, `SelectSeparator`, `SelectScrollUpButton`, `SelectScrollDownButton` | `SelectTrigger.size: 'sm' \| 'md'`; `SelectContent` supports positioning props (`side`, `sideOffset`, `align`, `alignOffset`, `alignItemWithTrigger`). |
258
348
  | `separator` | `Separator` | `orientation: 'horizontal' \| 'vertical'` (default: `horizontal`). |
259
- | `simple-grid` | `SimpleGrid` | Simple grid with `cols`, `gap`, `rowGap`, and `columnGap`. `cols` accepts a number; spacing uses the `xs` to `xl` scale. Use `useBreakpointValue` when column count needs responsive values. |
349
+ | `simple-grid` | `SimpleGrid` | Simple grid with `cols`, `gap`, `rowGap`, and `columnGap`. `cols` accepts a number; spacing uses the `xs` to `xl` scale (`4/8/16/24/32px`). Use `useBreakpointValue` when column count needs responsive values. |
260
350
  | `skeleton` | `Skeleton` | Generic loading placeholder block. Supports `visible?: boolean` (default: `true`) and can wrap `children` to reserve their size while the placeholder is shown. |
261
351
  | `spinner` | `Spinner` | Loader icon (`role="status"`), accepts SVG props and supports `size: 'sm' \| 'md' \| 'lg'` (default: `md`). |
262
352
  | `switch` | `Switch` | `Switch` supports `size: 'sm' \| 'md' \| 'lg'` (default: `md`), `color: UIColor` (default: `green`), `label?: React.ReactNode`, and `labelProps` for the composed `Label`. When `label` is provided without `id`, it generates an id and wires `htmlFor` automatically. Track size is `sm` 34x16px, `md` 42x20px, and `lg` 48x22px; the thumb and internal indicator scale with the switch. Label text follows switch size: `sm` 12px, `md` 14px, `lg` 20px. |
@@ -271,14 +361,14 @@ You can import from the package root (`@uselets/ui`) or by subpath (`@uselets/ui
271
361
 
272
362
  The package also exports the following modules through the root entrypoint and subpaths:
273
363
 
274
- - Layout and disclosure: `Accordion`, `Carousel`, `Center`, `Collapsible`, `Container`, `Group`, `Resizable`, `ScrollArea`, `Sidebar`, `Stack`, `Tabs`
364
+ - Layout and disclosure: `Accordion`, `Carousel`, `Center`, `Collapsible`, `Container`, `Flex`, `Group`, `Resizable`, `ScrollArea`, `Sidebar`, `Stack`, `Tabs`
275
365
  - Inputs and selection: `Calendar`, `DateRangePicker`, `InputGroup`, `RadioGroup`, `Slider`, `Switch`, `Textarea`, `Toggle`, `ToggleGroup`
276
366
  - Navigation and feedback: `AlertDialog`, `Breadcrumb`, `NavigationMenu`, `Pagination`, `Progress`
277
367
  - Data display and utilities: `Badge`, `ButtonGroup`, `Chart`, `Command`, `HoverCard`, `Table`, `ThemeProvider`, `useTheme`, `ModeToggle`
278
368
 
279
- Each module exports its public composition parts and prop types from the same import path, for example `@uselets/ui/accordion` or `@uselets/ui`.
369
+ Each module exports its public composition parts and prop types from the same import path, for example `@uselets/ui/accordion` or `@uselets/ui`. `Carousel` includes the composed `CarouselIndicators` subcomponent for opt-in slide indicators.
280
370
 
281
- Layout primitives follow the same pattern: `Stack` and `Group` support `gap: 'xs' | 'sm' | 'md' | 'lg' | 'xl'`; `Group` also supports `wrap`; `Center` supports `size: 'xs' | 'sm' | 'md' | 'lg' | 'xl'` and `direction: 'horizontal' | 'vertical'`; and `Container` supports `size: 'sm' | 'md' | 'lg' | 'full'`. `SimpleGrid`, `Grid`, and `GridItem` accept direct layout values; use `useBreakpointValue` to derive responsive values when needed. `HiddenFrom` and `VisibleFrom` provide breakpoint-based visibility wrappers.
371
+ Layout primitives follow the same pattern: `Stack`, `Group`, and `Flex` support `gap: 'xs' | 'sm' | 'md' | 'lg' | 'xl'`, mapping to `4/8/16/24/32px`, plus typed `align: 'start' | 'end' | 'center' | 'baseline' | 'stretch'` and `justify: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly'` props; `Group` also supports `wrap` (and defaults `align` to `center`); `Flex` additionally supports typed `direction` and `wrap`; `Center` supports `size: 'xs' | 'sm' | 'md' | 'lg' | 'xl'` and `direction: 'horizontal' | 'vertical'`; and `Container` supports `size: 'sm' | 'md' | 'lg' | 'full'`. `SimpleGrid`, `Grid`, and `GridItem` accept direct layout values; use `useBreakpointValue` to derive responsive values when needed. `HiddenFrom` and `VisibleFrom` provide breakpoint-based visibility wrappers.
282
372
 
283
373
  Public hooks are exported from the package root and from the `@uselets/ui/hooks/*` namespace:
284
374
 
@@ -289,6 +379,7 @@ Public hooks are exported from the package root and from the `@uselets/ui/hooks/
289
379
  - `useIdle` from `@uselets/ui/hooks/use-idle`
290
380
  - `useDocumentVisibility` from `@uselets/ui/hooks/use-document-visibility`
291
381
  - `useLocalStorage` from `@uselets/ui/hooks/use-local-storage`
382
+ - `useMask` from `@uselets/ui/hooks/use-mask`
292
383
  - `useIsMobile` from `@uselets/ui/hooks/use-mobile`
293
384
 
294
385
  Legacy hook subpaths such as `@uselets/ui/use-mobile` are not public entrypoints.
@@ -0,0 +1,80 @@
1
+ import { n as __name } from "./chunk-CHh1Zzun.js";
2
+ import * as React from "react";
3
+ import * as RechartsPrimitive from "recharts";
4
+
5
+ //#region src/components/chart.d.ts
6
+ declare const THEMES: {
7
+ readonly light: "";
8
+ readonly dark: ".dark";
9
+ };
10
+ type ChartConfig = { [k in string]: {
11
+ label?: React.ReactNode;
12
+ icon?: React.ComponentType;
13
+ } & ({
14
+ color?: string;
15
+ theme?: never;
16
+ } | {
17
+ color?: never;
18
+ theme: Record<keyof typeof THEMES, string>;
19
+ }) };
20
+ type ChartContainerProps = React.ComponentProps<'div'> & {
21
+ config: ChartConfig;
22
+ children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];
23
+ };
24
+ type ChartStyleProps = {
25
+ id: string;
26
+ config: ChartConfig;
27
+ };
28
+ type ChartTooltipProps = React.ComponentProps<typeof RechartsPrimitive.Tooltip>;
29
+ type ChartTooltipContentProps = Partial<RechartsPrimitive.DefaultTooltipContentProps<number | string | Array<number | string>, number | string>> & Omit<React.ComponentProps<'div'>, 'formatter'> & {
30
+ active?: boolean;
31
+ color?: string;
32
+ hideLabel?: boolean;
33
+ hideIndicator?: boolean;
34
+ indicator?: 'line' | 'dot' | 'dashed';
35
+ nameKey?: string;
36
+ labelKey?: string;
37
+ };
38
+ type ChartLegendProps = React.ComponentProps<typeof RechartsPrimitive.Legend>;
39
+ type ChartLegendContentProps = React.ComponentProps<'div'> & Pick<RechartsPrimitive.DefaultLegendContentProps, 'payload' | 'verticalAlign'> & {
40
+ hideIcon?: boolean;
41
+ nameKey?: string;
42
+ };
43
+ declare function ChartContainer({
44
+ id,
45
+ className,
46
+ children,
47
+ config,
48
+ ...props
49
+ }: ChartContainerProps): import("react/jsx-runtime").JSX.Element;
50
+ declare const ChartStyle: ({
51
+ id,
52
+ config
53
+ }: ChartStyleProps) => import("react/jsx-runtime").JSX.Element | null;
54
+ declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
55
+ declare function ChartTooltipContent({
56
+ active,
57
+ payload,
58
+ className,
59
+ indicator,
60
+ hideLabel,
61
+ hideIndicator,
62
+ label,
63
+ labelFormatter,
64
+ labelClassName,
65
+ formatter,
66
+ color,
67
+ nameKey,
68
+ labelKey
69
+ }: ChartTooltipContentProps): import("react/jsx-runtime").JSX.Element | null;
70
+ declare const ChartLegend: React.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => React.ReactPortal | null>;
71
+ declare function ChartLegendContent({
72
+ className,
73
+ hideIcon,
74
+ payload,
75
+ verticalAlign,
76
+ nameKey
77
+ }: ChartLegendContentProps): import("react/jsx-runtime").JSX.Element | null;
78
+ //#endregion
79
+ export { ChartLegendContent as a, ChartStyle as c, ChartTooltipContent as d, ChartTooltipContentProps as f, ChartLegend as i, ChartStyleProps as l, ChartContainer as n, ChartLegendContentProps as o, ChartTooltipProps as p, ChartContainerProps as r, ChartLegendProps as s, ChartConfig as t, ChartTooltip as u };
80
+ //# sourceMappingURL=chart-DHS2QeM8.d.ts.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 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 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, '@fontsource-variable/inter')) {\n runtimeDependencies.push(\n `@fontsource-variable/inter@${getPackageVersion(packageJson, '@fontsource-variable/inter')}`\n )\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 hasFont = /@import\\s+['\"]@fontsource-variable\\/inter['\"]/.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 (!hasFont) {\n imports.push(\"@import '@fontsource-variable/inter';\")\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 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 shouldInstallSkill = options.installSkill ?? (await promptInstallSkill())\n\n await installMissingDependencies(projectRoot, projectPackageJson)\n await ensurePostcssConfig(projectRoot)\n await ensureGlobalCss(projectRoot, cssPath, theme)\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('--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":[],"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 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 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, '@fontsource-variable/inter')) {\n runtimeDependencies.push(\n `@fontsource-variable/inter@${getPackageVersion(packageJson, '@fontsource-variable/inter')}`\n )\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 hasFont = /@import\\s+['\"]@fontsource-variable\\/inter['\"]/.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 (!hasFont) {\n imports.push(\"@import '@fontsource-variable/inter';\")\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 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 shouldInstallSkill = options.installSkill ?? (await promptInstallSkill())\n\n await installMissingDependencies(projectRoot, projectPackageJson)\n await ensurePostcssConfig(projectRoot)\n await ensureGlobalCss(projectRoot, cssPath, theme)\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('--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,6 +1,5 @@
1
1
  import { n as __name } from "../chunk-CHh1Zzun.js";
2
2
  import { Accordion as Accordion$1 } from "radix-ui";
3
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
3
  import * as React from "react";
5
4
 
6
5
  //#region src/components/accordion.d.ts
@@ -11,21 +10,21 @@ type AccordionContentProps = React.ComponentProps<typeof Accordion$1.Content>;
11
10
  declare function Accordion({
12
11
  className,
13
12
  ...props
14
- }: AccordionProps): _$react_jsx_runtime0.JSX.Element;
13
+ }: AccordionProps): import("react/jsx-runtime").JSX.Element;
15
14
  declare function AccordionItem({
16
15
  className,
17
16
  ...props
18
- }: AccordionItemProps): _$react_jsx_runtime0.JSX.Element;
17
+ }: AccordionItemProps): import("react/jsx-runtime").JSX.Element;
19
18
  declare function AccordionTrigger({
20
19
  className,
21
20
  children,
22
21
  ...props
23
- }: AccordionTriggerProps): _$react_jsx_runtime0.JSX.Element;
22
+ }: AccordionTriggerProps): import("react/jsx-runtime").JSX.Element;
24
23
  declare function AccordionContent({
25
24
  className,
26
25
  children,
27
26
  ...props
28
- }: AccordionContentProps): _$react_jsx_runtime0.JSX.Element;
27
+ }: AccordionContentProps): import("react/jsx-runtime").JSX.Element;
29
28
  //#endregion
30
29
  export { Accordion, AccordionContent, AccordionContentProps, AccordionItem, AccordionItemProps, AccordionProps, AccordionTrigger, AccordionTriggerProps };
31
30
  //# sourceMappingURL=accordion.d.ts.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 <AccordionPrimitive.Root data-slot=\"accordion\" className={cn('flex w-full flex-col', className)} {...props} />\n}\n\nfunction AccordionItem({ className, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item data-slot=\"accordion-item\" className={cn('not-last:border-b', className)} {...props} />\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=\"overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up\"\n {...props}\n >\n <div\n className={cn(\n 'h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',\n className\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\n"],"mappings":"kOAeA,SAAS,UAAU,CAAE,YAAW,GAAG,GAAyB,CAC1D,OAAO,EAACA,EAAmB,KAApB,CAAyB,YAAU,YAAY,UAAW,EAAG,uBAAwB,EAAU,CAAE,GAAI,EAAS,CAAA,CAGvH,SAAS,cAAc,CAAE,YAAW,GAAG,GAA6B,CAClE,OACE,EAACA,EAAmB,KAApB,CAAyB,YAAU,iBAAiB,UAAW,EAAG,oBAAqB,EAAU,CAAE,GAAI,EAAS,CAAA,CAIpH,SAAS,iBAAiB,CAAE,YAAW,WAAU,GAAG,GAAgC,CAClF,OACE,EAACA,EAAmB,OAApB,CAA2B,UAAU,gBACnC,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAW,EACT,mfACA,EACD,CACD,GAAI,WANN,CAQG,EACD,EAAC,EAAD,CACE,YAAU,yBACV,UAAU,4EACV,CAAA,CACF,EAAC,EAAD,CACE,YAAU,yBACV,UAAU,mFACV,CAAA,CACyB,GACH,CAAA,CAIhC,SAAS,iBAAiB,CAAE,YAAW,WAAU,GAAG,GAAgC,CAClF,OACE,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAU,4FACV,GAAI,WAEJ,EAAC,MAAD,CACE,UAAW,EACT,oJACA,EACD,CAEA,WACG,CAAA,CACqB,CAAA"}
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 <AccordionPrimitive.Root data-slot=\"accordion\" className={cn('flex w-full flex-col', className)} {...props} />\n}\n\nfunction AccordionItem({ className, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item data-slot=\"accordion-item\" className={cn('not-last:border-b', className)} {...props} />\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=\"overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up\"\n {...props}\n >\n <div\n className={cn(\n 'h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',\n className\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\n"],"mappings":"kOAeA,SAAS,UAAU,CAAE,YAAW,GAAG,GAAyB,CAC1D,OAAO,EAACA,EAAmB,KAApB,CAAyB,YAAU,YAAY,UAAW,EAAG,uBAAwB,CAAS,EAAG,GAAI,CAAQ,CAAA,CACtH,CAEA,SAAS,cAAc,CAAE,YAAW,GAAG,GAA6B,CAClE,OACE,EAACA,EAAmB,KAApB,CAAyB,YAAU,iBAAiB,UAAW,EAAG,oBAAqB,CAAS,EAAG,GAAI,CAAQ,CAAA,CAEnH,CAEA,SAAS,iBAAiB,CAAE,YAAW,WAAU,GAAG,GAAgC,CAClF,OACE,EAACA,EAAmB,OAApB,CAA2B,UAAU,gBACnC,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAW,EACT,mfACA,CACF,EACA,GAAI,WANN,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,4FACV,GAAI,WAEJ,EAAC,MAAD,CACE,UAAW,EACT,oJACA,CACF,EAEC,UACE,CAAA,CACqB,CAAA,CAEhC"}
@@ -1,7 +1,6 @@
1
1
  import { n as __name } from "../chunk-CHh1Zzun.js";
2
2
  import { Button } from "./button.js";
3
3
  import { AlertDialog as AlertDialog$1 } from "radix-ui";
4
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
4
  import * as React from "react";
6
5
 
7
6
  //#region src/components/alert-dialog.d.ts
@@ -21,56 +20,56 @@ type AlertDialogActionProps = React.ComponentProps<typeof AlertDialog$1.Action>
21
20
  type AlertDialogCancelProps = React.ComponentProps<typeof AlertDialog$1.Cancel> & Pick<React.ComponentProps<typeof Button>, 'variant' | 'color' | 'size'>;
22
21
  declare function AlertDialog({
23
22
  ...props
24
- }: AlertDialogProps): _$react_jsx_runtime0.JSX.Element;
23
+ }: AlertDialogProps): import("react/jsx-runtime").JSX.Element;
25
24
  declare function AlertDialogTrigger({
26
25
  ...props
27
- }: AlertDialogTriggerProps): _$react_jsx_runtime0.JSX.Element;
26
+ }: AlertDialogTriggerProps): import("react/jsx-runtime").JSX.Element;
28
27
  declare function AlertDialogPortal({
29
28
  ...props
30
- }: AlertDialogPortalProps): _$react_jsx_runtime0.JSX.Element;
29
+ }: AlertDialogPortalProps): import("react/jsx-runtime").JSX.Element;
31
30
  declare function AlertDialogOverlay({
32
31
  className,
33
32
  ...props
34
- }: AlertDialogOverlayProps): _$react_jsx_runtime0.JSX.Element;
33
+ }: AlertDialogOverlayProps): import("react/jsx-runtime").JSX.Element;
35
34
  declare function AlertDialogContent({
36
35
  className,
37
36
  size,
38
37
  ...props
39
- }: AlertDialogContentProps): _$react_jsx_runtime0.JSX.Element;
38
+ }: AlertDialogContentProps): import("react/jsx-runtime").JSX.Element;
40
39
  declare function AlertDialogHeader({
41
40
  className,
42
41
  ...props
43
- }: AlertDialogHeaderProps): _$react_jsx_runtime0.JSX.Element;
42
+ }: AlertDialogHeaderProps): import("react/jsx-runtime").JSX.Element;
44
43
  declare function AlertDialogFooter({
45
44
  className,
46
45
  ...props
47
- }: AlertDialogFooterProps): _$react_jsx_runtime0.JSX.Element;
46
+ }: AlertDialogFooterProps): import("react/jsx-runtime").JSX.Element;
48
47
  declare function AlertDialogMedia({
49
48
  className,
50
49
  ...props
51
- }: AlertDialogMediaProps): _$react_jsx_runtime0.JSX.Element;
50
+ }: AlertDialogMediaProps): import("react/jsx-runtime").JSX.Element;
52
51
  declare function AlertDialogTitle({
53
52
  className,
54
53
  ...props
55
- }: AlertDialogTitleProps): _$react_jsx_runtime0.JSX.Element;
54
+ }: AlertDialogTitleProps): import("react/jsx-runtime").JSX.Element;
56
55
  declare function AlertDialogDescription({
57
56
  className,
58
57
  ...props
59
- }: AlertDialogDescriptionProps): _$react_jsx_runtime0.JSX.Element;
58
+ }: AlertDialogDescriptionProps): import("react/jsx-runtime").JSX.Element;
60
59
  declare function AlertDialogAction({
61
60
  className,
62
61
  variant,
63
62
  color,
64
63
  size,
65
64
  ...props
66
- }: AlertDialogActionProps): _$react_jsx_runtime0.JSX.Element;
65
+ }: AlertDialogActionProps): import("react/jsx-runtime").JSX.Element;
67
66
  declare function AlertDialogCancel({
68
67
  className,
69
68
  variant,
70
69
  color,
71
70
  size,
72
71
  ...props
73
- }: AlertDialogCancelProps): _$react_jsx_runtime0.JSX.Element;
72
+ }: AlertDialogCancelProps): import("react/jsx-runtime").JSX.Element;
74
73
  //#endregion
75
74
  export { AlertDialog, AlertDialogAction, AlertDialogActionProps, AlertDialogCancel, AlertDialogCancelProps, AlertDialogContent, AlertDialogContentProps, AlertDialogDescription, AlertDialogDescriptionProps, AlertDialogFooter, AlertDialogFooterProps, AlertDialogHeader, AlertDialogHeaderProps, AlertDialogMedia, AlertDialogMediaProps, AlertDialogOverlay, AlertDialogOverlayProps, AlertDialogPortal, AlertDialogPortalProps, AlertDialogProps, AlertDialogTitle, AlertDialogTitleProps, AlertDialogTrigger, AlertDialogTriggerProps };
76
75
  //# sourceMappingURL=alert-dialog.d.ts.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":"gMAmCA,SAAS,YAAY,CAAE,GAAG,GAA2B,CACnD,OAAO,EAACA,EAAqB,KAAtB,CAA2B,YAAU,eAAe,GAAI,EAAS,CAAA,CAG1E,SAAS,mBAAmB,CAAE,GAAG,GAAkC,CACjE,OAAO,EAACA,EAAqB,QAAtB,CAA8B,YAAU,uBAAuB,GAAI,EAAS,CAAA,CAGrF,SAAS,kBAAkB,CAAE,GAAG,GAAiC,CAC/D,OAAO,EAACA,EAAqB,OAAtB,CAA6B,YAAU,sBAAsB,GAAI,EAAS,CAAA,CAGnF,SAAS,mBAAmB,CAAE,YAAW,GAAG,GAAkC,CAC5E,OACE,EAACA,EAAqB,QAAtB,CACE,YAAU,uBACV,UAAW,EACT,gLACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,mBAAmB,CAAE,YAAW,OAAO,KAAM,GAAG,GAAkC,CACzF,OACE,EAAC,kBAAD,CAAA,SAAA,CACE,EAAC,mBAAD,EAAsB,CAAA,CACtB,EAACA,EAAqB,QAAtB,CACE,YAAU,uBACV,YAAW,EACX,UAAW,EACT,8YACA,EACD,CACD,GAAI,EACJ,CAAA,CACgB,CAAA,CAAA,CAIxB,SAAS,kBAAkB,CAAE,YAAW,GAAG,GAAiC,CAC1E,OACE,EAAC,MAAD,CACE,YAAU,sBACV,UAAW,EACT,sYACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,kBAAkB,CAAE,YAAW,GAAG,GAAiC,CAC1E,OACE,EAAC,MAAD,CACE,YAAU,sBACV,UAAW,EACT,gNACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,iBAAiB,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAAC,MAAD,CACE,YAAU,qBACV,UAAW,EACT,wKACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,iBAAiB,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAACA,EAAqB,MAAtB,CACE,YAAU,qBACV,UAAW,EACT,+IACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,uBAAuB,CAAE,YAAW,GAAG,GAAsC,CACpF,OACE,EAACA,EAAqB,YAAtB,CACE,YAAU,2BACV,UAAW,EACT,iIACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,kBAAkB,CACzB,YACA,UAAU,QACV,QAAQ,UACR,OAAO,KACP,GAAG,GACsB,CACzB,OACE,EAAC,EAAD,CAAiB,UAAgB,QAAa,OAAM,QAAA,YAClD,EAACA,EAAqB,OAAtB,CAA6B,YAAU,sBAAsB,UAAW,EAAG,EAAU,CAAE,GAAI,EAAS,CAAA,CAC7F,CAAA,CAIb,SAAS,kBAAkB,CACzB,YACA,UAAU,UACV,QAAQ,UACR,OAAO,KACP,GAAG,GACsB,CACzB,OACE,EAAC,EAAD,CAAiB,UAAgB,QAAa,OAAM,QAAA,YAClD,EAACA,EAAqB,OAAtB,CAA6B,YAAU,sBAAsB,UAAW,EAAG,EAAU,CAAE,GAAI,EAAS,CAAA,CAC7F,CAAA"}
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":"gMAmCA,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,YAClD,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,YAClD,EAACA,EAAqB,OAAtB,CAA6B,YAAU,sBAAsB,UAAW,EAAG,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC7F,CAAA,CAEZ"}
@@ -1,13 +1,11 @@
1
1
  import { n as __name } from "../chunk-CHh1Zzun.js";
2
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
2
  import { VariantProps } from "class-variance-authority";
4
3
  import * as React from "react";
5
- import * as _$class_variance_authority_types0 from "class-variance-authority/types";
6
4
 
7
5
  //#region src/components/alert.d.ts
8
6
  declare const alertVariants: (props?: ({
9
7
  variant?: "default" | "destructive" | null | undefined;
10
- } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
8
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
9
  type AlertProps = React.ComponentProps<'div'> & VariantProps<typeof alertVariants>;
12
10
  type AlertTitleProps = React.ComponentProps<'div'>;
13
11
  type AlertDescriptionProps = React.ComponentProps<'div'>;
@@ -16,19 +14,19 @@ declare function Alert({
16
14
  className,
17
15
  variant,
18
16
  ...props
19
- }: AlertProps): _$react_jsx_runtime0.JSX.Element;
17
+ }: AlertProps): import("react/jsx-runtime").JSX.Element;
20
18
  declare function AlertTitle({
21
19
  className,
22
20
  ...props
23
- }: AlertTitleProps): _$react_jsx_runtime0.JSX.Element;
21
+ }: AlertTitleProps): import("react/jsx-runtime").JSX.Element;
24
22
  declare function AlertDescription({
25
23
  className,
26
24
  ...props
27
- }: AlertDescriptionProps): _$react_jsx_runtime0.JSX.Element;
25
+ }: AlertDescriptionProps): import("react/jsx-runtime").JSX.Element;
28
26
  declare function AlertAction({
29
27
  className,
30
28
  ...props
31
- }: AlertActionProps): _$react_jsx_runtime0.JSX.Element;
29
+ }: AlertActionProps): import("react/jsx-runtime").JSX.Element;
32
30
  //#endregion
33
31
  export { Alert, AlertAction, AlertActionProps, AlertDescription, AlertDescriptionProps, AlertProps, AlertTitle, AlertTitleProps };
34
32
  //# sourceMappingURL=alert.d.ts.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":"yJAMA,MAAM,EAAgB,EACpB,4TACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,+BACT,YAAa,oGACd,CACF,CACD,gBAAiB,CACf,QAAS,UACV,CACF,CACF,CAUD,SAAS,MAAM,CAAE,YAAW,UAAS,GAAG,GAAqB,CAC3D,OAAO,EAAC,MAAD,CAAK,YAAU,QAAQ,KAAK,QAAQ,UAAW,EAAG,EAAc,CAAE,UAAS,CAAC,CAAE,EAAU,CAAE,GAAI,EAAS,CAAA,CAGhH,SAAS,WAAW,CAAE,YAAW,GAAG,GAA0B,CAC5D,OACE,EAAC,MAAD,CACE,YAAU,cACV,UAAW,EACT,iDACA,uEACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,iBAAiB,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAAC,MAAD,CACE,YAAU,oBACV,UAAW,EACT,wFACA,uEACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OAAO,EAAC,MAAD,CAAK,YAAU,eAAe,UAAW,EAAG,yBAA0B,EAAU,CAAE,GAAI,EAAS,CAAA"}
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":"yJAMA,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,14 +1,12 @@
1
1
  import { n as __name } from "../chunk-CHh1Zzun.js";
2
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
2
  import { VariantProps } from "class-variance-authority";
4
3
  import * as React from "react";
5
- import * as _$class_variance_authority_types0 from "class-variance-authority/types";
6
4
 
7
5
  //#region src/components/anchor.d.ts
8
6
  declare const anchorVariants: (props?: ({
9
7
  size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
10
8
  underline?: "always" | "hover" | "never" | "not-hover" | null | undefined;
11
- } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
10
  type AnchorProps = React.ComponentProps<'a'> & VariantProps<typeof anchorVariants> & {
13
11
  asChild?: boolean;
14
12
  };
@@ -18,7 +16,7 @@ declare function Anchor({
18
16
  underline,
19
17
  asChild,
20
18
  ...props
21
- }: AnchorProps): _$react_jsx_runtime0.JSX.Element;
19
+ }: AnchorProps): import("react/jsx-runtime").JSX.Element;
22
20
  //#endregion
23
21
  export { Anchor, AnchorProps, anchorVariants };
24
22
  //# sourceMappingURL=anchor.d.ts.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":"yLAOA,MAAM,EAAiB,EACrB,4KACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,UACJ,GAAI,UACJ,GAAI,YACJ,GAAI,UACJ,GAAI,UACL,CACD,UAAW,CACT,OAAQ,YACR,MAAO,+BACP,MAAO,eACP,YAAa,+BACd,CACF,CACD,gBAAiB,CACf,KAAM,KACN,UAAW,QACZ,CACF,CACF,CAOD,SAAS,OAAO,CAAE,YAAW,OAAO,KAAM,YAAY,QAAS,UAAU,GAAO,GAAG,GAAsB,CAGvG,OACE,EAHW,EAAU,EAAK,KAAO,IAGjC,CACE,YAAU,SACV,YAAW,EACX,iBAAgB,EAChB,UAAW,EAAG,EAAe,CAAE,OAAM,YAAW,CAAC,CAAE,EAAU,CAC7D,GAAI,EACJ,CAAA"}
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":"yLAOA,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,CAGvG,OACE,EAHW,EAAU,EAAK,KAAO,IAGjC,CACE,YAAU,SACV,YAAW,EACX,iBAAgB,EAChB,UAAW,EAAG,EAAe,CAAE,OAAM,WAAU,CAAC,EAAG,CAAS,EAC5D,GAAI,CACL,CAAA,CAEL"}