@mivabyte/ui 26.9.21 → 26.10.3

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 (147) hide show
  1. package/README.md +130 -39
  2. package/dist/components/ui/alert-dialog.cjs +4 -4
  3. package/dist/components/ui/alert-dialog.cjs.map +1 -1
  4. package/dist/components/ui/alert-dialog.js +4 -4
  5. package/dist/components/ui/alert-dialog.js.map +1 -1
  6. package/dist/components/ui/alert.cjs +2 -2
  7. package/dist/components/ui/alert.cjs.map +1 -1
  8. package/dist/components/ui/alert.js +2 -2
  9. package/dist/components/ui/alert.js.map +1 -1
  10. package/dist/components/ui/button-group.cjs.map +1 -1
  11. package/dist/components/ui/button-group.d.ts.map +1 -1
  12. package/dist/components/ui/button-group.js.map +1 -1
  13. package/dist/components/ui/button.cjs +4 -4
  14. package/dist/components/ui/button.cjs.map +1 -1
  15. package/dist/components/ui/button.js +4 -4
  16. package/dist/components/ui/button.js.map +1 -1
  17. package/dist/components/ui/calendar.cjs +36 -25
  18. package/dist/components/ui/calendar.cjs.map +1 -1
  19. package/dist/components/ui/calendar.d.cts +5 -3
  20. package/dist/components/ui/calendar.d.ts +5 -3
  21. package/dist/components/ui/calendar.d.ts.map +1 -1
  22. package/dist/components/ui/calendar.js +36 -25
  23. package/dist/components/ui/calendar.js.map +1 -1
  24. package/dist/components/ui/carousel.cjs +4 -4
  25. package/dist/components/ui/carousel.cjs.map +1 -1
  26. package/dist/components/ui/carousel.js +4 -4
  27. package/dist/components/ui/carousel.js.map +1 -1
  28. package/dist/components/ui/checkbox.cjs +1 -1
  29. package/dist/components/ui/checkbox.cjs.map +1 -1
  30. package/dist/components/ui/checkbox.js +1 -1
  31. package/dist/components/ui/checkbox.js.map +1 -1
  32. package/dist/components/ui/combobox.cjs +4 -4
  33. package/dist/components/ui/combobox.cjs.map +1 -1
  34. package/dist/components/ui/combobox.js +4 -4
  35. package/dist/components/ui/combobox.js.map +1 -1
  36. package/dist/components/ui/command.cjs +25 -27
  37. package/dist/components/ui/command.cjs.map +1 -1
  38. package/dist/components/ui/command.js +24 -26
  39. package/dist/components/ui/command.js.map +1 -1
  40. package/dist/components/ui/date-picker.cjs +36 -24
  41. package/dist/components/ui/date-picker.cjs.map +1 -1
  42. package/dist/components/ui/date-picker.js +36 -24
  43. package/dist/components/ui/date-picker.js.map +1 -1
  44. package/dist/components/ui/dialog.cjs +18 -20
  45. package/dist/components/ui/dialog.cjs.map +1 -1
  46. package/dist/components/ui/dialog.d.ts.map +1 -1
  47. package/dist/components/ui/dialog.js +17 -19
  48. package/dist/components/ui/dialog.js.map +1 -1
  49. package/dist/components/ui/empty.cjs +1 -1
  50. package/dist/components/ui/empty.cjs.map +1 -1
  51. package/dist/components/ui/empty.js +1 -1
  52. package/dist/components/ui/empty.js.map +1 -1
  53. package/dist/components/ui/field.cjs +2 -2
  54. package/dist/components/ui/field.cjs.map +1 -1
  55. package/dist/components/ui/field.js +2 -2
  56. package/dist/components/ui/field.js.map +1 -1
  57. package/dist/components/ui/form.cjs +158 -0
  58. package/dist/components/ui/form.cjs.map +1 -0
  59. package/dist/components/ui/form.d.cts +24 -0
  60. package/dist/components/ui/form.d.ts +25 -0
  61. package/dist/components/ui/form.d.ts.map +1 -0
  62. package/dist/components/ui/form.js +128 -0
  63. package/dist/components/ui/form.js.map +1 -0
  64. package/dist/components/ui/input-group.cjs.map +1 -1
  65. package/dist/components/ui/input-group.d.ts.map +1 -1
  66. package/dist/components/ui/input-group.js.map +1 -1
  67. package/dist/components/ui/message.cjs +5 -2
  68. package/dist/components/ui/message.cjs.map +1 -1
  69. package/dist/components/ui/message.d.cts +1 -1
  70. package/dist/components/ui/message.d.ts +1 -1
  71. package/dist/components/ui/message.d.ts.map +1 -1
  72. package/dist/components/ui/message.js +6 -3
  73. package/dist/components/ui/message.js.map +1 -1
  74. package/dist/components/ui/pagination.cjs +4 -4
  75. package/dist/components/ui/pagination.cjs.map +1 -1
  76. package/dist/components/ui/pagination.js +4 -4
  77. package/dist/components/ui/pagination.js.map +1 -1
  78. package/dist/components/ui/progress.cjs +3 -2
  79. package/dist/components/ui/progress.cjs.map +1 -1
  80. package/dist/components/ui/progress.d.ts.map +1 -1
  81. package/dist/components/ui/progress.js +3 -2
  82. package/dist/components/ui/progress.js.map +1 -1
  83. package/dist/components/ui/radio-group.cjs +2 -2
  84. package/dist/components/ui/radio-group.cjs.map +1 -1
  85. package/dist/components/ui/radio-group.js +2 -2
  86. package/dist/components/ui/radio-group.js.map +1 -1
  87. package/dist/components/ui/sheet.cjs +18 -20
  88. package/dist/components/ui/sheet.cjs.map +1 -1
  89. package/dist/components/ui/sheet.d.ts.map +1 -1
  90. package/dist/components/ui/sheet.js +17 -19
  91. package/dist/components/ui/sheet.js.map +1 -1
  92. package/dist/components/ui/sidebar.cjs +61 -63
  93. package/dist/components/ui/sidebar.cjs.map +1 -1
  94. package/dist/components/ui/sidebar.js +60 -62
  95. package/dist/components/ui/sidebar.js.map +1 -1
  96. package/dist/components/ui/slider.cjs +2 -2
  97. package/dist/components/ui/slider.cjs.map +1 -1
  98. package/dist/components/ui/slider.js +2 -2
  99. package/dist/components/ui/slider.js.map +1 -1
  100. package/dist/components/ui/sonner.cjs +53 -0
  101. package/dist/components/ui/sonner.cjs.map +1 -0
  102. package/dist/components/ui/sonner.d.cts +4 -0
  103. package/dist/components/ui/sonner.d.ts +5 -0
  104. package/dist/components/ui/sonner.d.ts.map +1 -0
  105. package/dist/components/ui/sonner.js +51 -0
  106. package/dist/components/ui/sonner.js.map +1 -0
  107. package/dist/components/ui/switch.cjs +2 -2
  108. package/dist/components/ui/switch.cjs.map +1 -1
  109. package/dist/components/ui/switch.js +2 -2
  110. package/dist/components/ui/switch.js.map +1 -1
  111. package/dist/components/ui/toast.cjs +301 -9
  112. package/dist/components/ui/toast.cjs.map +1 -1
  113. package/dist/components/ui/toast.d.cts +16 -2
  114. package/dist/components/ui/toast.d.ts +16 -2
  115. package/dist/components/ui/toast.d.ts.map +1 -1
  116. package/dist/components/ui/toast.js +272 -1
  117. package/dist/components/ui/toast.js.map +1 -1
  118. package/dist/index.cjs +3 -2
  119. package/dist/index.cjs.map +1 -1
  120. package/dist/index.d.cts +3 -5
  121. package/dist/index.d.ts +3 -5
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +2 -2
  124. package/dist/index.js.map +1 -1
  125. package/dist/lib/render-child.cjs +37 -0
  126. package/dist/lib/render-child.cjs.map +1 -0
  127. package/dist/lib/render-child.d.cts +22 -0
  128. package/dist/lib/render-child.d.ts +23 -0
  129. package/dist/lib/render-child.d.ts.map +1 -0
  130. package/dist/lib/render-child.js +15 -0
  131. package/dist/lib/render-child.js.map +1 -0
  132. package/dist/styles.css +1 -1
  133. package/package.json +49 -47
  134. package/dist/components/ui/container.cjs +0 -69
  135. package/dist/components/ui/container.cjs.map +0 -1
  136. package/dist/components/ui/container.d.cts +0 -11
  137. package/dist/components/ui/container.d.ts +0 -12
  138. package/dist/components/ui/container.d.ts.map +0 -1
  139. package/dist/components/ui/container.js +0 -46
  140. package/dist/components/ui/container.js.map +0 -1
  141. package/dist/components/ui/kbd-group.cjs +0 -74
  142. package/dist/components/ui/kbd-group.cjs.map +0 -1
  143. package/dist/components/ui/kbd-group.d.cts +0 -9
  144. package/dist/components/ui/kbd-group.d.ts +0 -10
  145. package/dist/components/ui/kbd-group.d.ts.map +0 -1
  146. package/dist/components/ui/kbd-group.js +0 -51
  147. package/dist/components/ui/kbd-group.js.map +0 -1
@@ -0,0 +1,158 @@
1
+ 'use strict';
2
+
3
+ var React2 = require('react');
4
+ var reactSlot = require('@radix-ui/react-slot');
5
+ var reactHookForm = require('react-hook-form');
6
+ var clsx = require('clsx');
7
+ var tailwindMerge = require('tailwind-merge');
8
+ var LabelPrimitive = require('@radix-ui/react-label');
9
+ var classVarianceAuthority = require('class-variance-authority');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+
12
+ function _interopNamespace(e) {
13
+ if (e && e.__esModule) return e;
14
+ var n = Object.create(null);
15
+ if (e) {
16
+ Object.keys(e).forEach(function (k) {
17
+ if (k !== 'default') {
18
+ var d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: function () { return e[k]; }
22
+ });
23
+ }
24
+ });
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+
30
+ var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
31
+ var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
32
+
33
+ function cn(...inputs) {
34
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
35
+ }
36
+ var labelVariants = classVarianceAuthority.cva(
37
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
38
+ );
39
+ var Label = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
40
+ LabelPrimitive__namespace.Root,
41
+ {
42
+ ref,
43
+ className: cn(labelVariants(), className),
44
+ ...props
45
+ }
46
+ ));
47
+ Label.displayName = LabelPrimitive__namespace.Root.displayName;
48
+ var Form = reactHookForm.FormProvider;
49
+ var FormFieldContext = React2__namespace.createContext(
50
+ {}
51
+ );
52
+ var FormField = ({
53
+ ...props
54
+ }) => {
55
+ return /* @__PURE__ */ jsxRuntime.jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsxRuntime.jsx(reactHookForm.Controller, { ...props }) });
56
+ };
57
+ var useFormField = () => {
58
+ const fieldContext = React2__namespace.useContext(FormFieldContext);
59
+ const itemContext = React2__namespace.useContext(FormItemContext);
60
+ if (!fieldContext?.name) {
61
+ throw new Error("useFormField should be used within <FormField>");
62
+ }
63
+ const { getFieldState } = reactHookForm.useFormContext();
64
+ const formState = reactHookForm.useFormState({ name: fieldContext.name });
65
+ const fieldState = getFieldState(fieldContext.name, formState);
66
+ const { id } = itemContext;
67
+ return {
68
+ id,
69
+ name: fieldContext.name,
70
+ formItemId: `${id}-form-item`,
71
+ formDescriptionId: `${id}-form-item-description`,
72
+ formMessageId: `${id}-form-item-message`,
73
+ ...fieldState
74
+ };
75
+ };
76
+ var FormItemContext = React2__namespace.createContext(
77
+ {}
78
+ );
79
+ function FormItem({ className, ...props }) {
80
+ const id = React2__namespace.useId();
81
+ return /* @__PURE__ */ jsxRuntime.jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsxRuntime.jsx(
82
+ "div",
83
+ {
84
+ "data-slot": "form-item",
85
+ className: cn("grid gap-2", className),
86
+ ...props
87
+ }
88
+ ) });
89
+ }
90
+ function FormLabel({
91
+ className,
92
+ ...props
93
+ }) {
94
+ const { error, formItemId } = useFormField();
95
+ return /* @__PURE__ */ jsxRuntime.jsx(
96
+ Label,
97
+ {
98
+ "data-slot": "form-label",
99
+ "data-error": !!error,
100
+ className: cn("data-[error=true]:text-destructive", className),
101
+ htmlFor: formItemId,
102
+ ...props
103
+ }
104
+ );
105
+ }
106
+ function FormControl({ ...props }) {
107
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
108
+ return /* @__PURE__ */ jsxRuntime.jsx(
109
+ reactSlot.Slot,
110
+ {
111
+ "data-slot": "form-control",
112
+ id: formItemId,
113
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
114
+ "aria-invalid": !!error,
115
+ ...props
116
+ }
117
+ );
118
+ }
119
+ function FormDescription({ className, ...props }) {
120
+ const { formDescriptionId } = useFormField();
121
+ return /* @__PURE__ */ jsxRuntime.jsx(
122
+ "p",
123
+ {
124
+ "data-slot": "form-description",
125
+ id: formDescriptionId,
126
+ className: cn("text-muted-foreground text-sm", className),
127
+ ...props
128
+ }
129
+ );
130
+ }
131
+ function FormMessage({ className, ...props }) {
132
+ const { error, formMessageId } = useFormField();
133
+ const body = error ? String(error?.message ?? "") : props.children;
134
+ if (!body) {
135
+ return null;
136
+ }
137
+ return /* @__PURE__ */ jsxRuntime.jsx(
138
+ "p",
139
+ {
140
+ "data-slot": "form-message",
141
+ id: formMessageId,
142
+ className: cn("text-destructive text-sm", className),
143
+ ...props,
144
+ children: body
145
+ }
146
+ );
147
+ }
148
+
149
+ exports.Form = Form;
150
+ exports.FormControl = FormControl;
151
+ exports.FormDescription = FormDescription;
152
+ exports.FormField = FormField;
153
+ exports.FormItem = FormItem;
154
+ exports.FormLabel = FormLabel;
155
+ exports.FormMessage = FormMessage;
156
+ exports.useFormField = useFormField;
157
+ //# sourceMappingURL=form.cjs.map
158
+ //# sourceMappingURL=form.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/label.tsx","../../../src/components/ui/form.tsx"],"names":["twMerge","clsx","cva","React","jsx","LabelPrimitive","FormProvider","React2","Controller","useFormContext","useFormState","Slot"],"mappings":"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","file":"form.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n\n // Upstream guards with `if (!fieldContext)`, but the default context value is\n // `{}`, which is always truthy, so that check can never fire. Test for the\n // field name it actually needs instead, so misuse fails loudly.\n //\n // This guard must stay ABOVE the `useFormContext`/`useFormState` calls below.\n // Upstream places its dead guard after them, which means react-hook-form is\n // called with `name: undefined` on the misuse path before anything rejects it.\n // Hoisting it is the fix; moving it back down silently undoes that.\n if (!fieldContext?.name) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ import * as LabelPrimitive from "@radix-ui/react-label";
3
+ import { Slot } from "@radix-ui/react-slot";
4
+ import { type ControllerProps, type FieldPath, type FieldValues } from "react-hook-form";
5
+ declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>({ children, watch, getValues, getErrors, getFieldState, setError, clearErrors, setValue, setValues, trigger, formState, resetField, reset, resetDefaultValues, handleSubmit, unregister, control, register, setFocus, subscribe, }: import("react-hook-form").FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React.JSX.Element;
6
+ declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => React.JSX.Element;
7
+ declare const useFormField: () => {
8
+ invalid: boolean;
9
+ isDirty: boolean;
10
+ isTouched: boolean;
11
+ isValidating: boolean;
12
+ error?: import("react-hook-form").FieldError | undefined;
13
+ id: string;
14
+ name: string;
15
+ formItemId: string;
16
+ formDescriptionId: string;
17
+ formMessageId: string;
18
+ };
19
+ declare function FormItem({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
20
+ declare function FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): React.JSX.Element;
21
+ declare function FormControl({ ...props }: React.ComponentProps<typeof Slot>): React.JSX.Element;
22
+ declare function FormDescription({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
23
+ declare function FormMessage({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element | null;
24
+ export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField, };
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ import * as LabelPrimitive from "@radix-ui/react-label";
3
+ import { Slot } from "@radix-ui/react-slot";
4
+ import { type ControllerProps, type FieldPath, type FieldValues } from "react-hook-form";
5
+ declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>({ children, watch, getValues, getErrors, getFieldState, setError, clearErrors, setValue, setValues, trigger, formState, resetField, reset, resetDefaultValues, handleSubmit, unregister, control, register, setFocus, subscribe, }: import("react-hook-form").FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React.JSX.Element;
6
+ declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => React.JSX.Element;
7
+ declare const useFormField: () => {
8
+ invalid: boolean;
9
+ isDirty: boolean;
10
+ isTouched: boolean;
11
+ isValidating: boolean;
12
+ error?: import("react-hook-form").FieldError | undefined;
13
+ id: string;
14
+ name: string;
15
+ formItemId: string;
16
+ formDescriptionId: string;
17
+ formMessageId: string;
18
+ };
19
+ declare function FormItem({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
20
+ declare function FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): React.JSX.Element;
21
+ declare function FormControl({ ...props }: React.ComponentProps<typeof Slot>): React.JSX.Element;
22
+ declare function FormDescription({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
23
+ declare function FormMessage({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element | null;
24
+ export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField, };
25
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/components/ui/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAA;AAKxB,QAAA,MAAM,IAAI,yaAAe,CAAA;AAazB,QAAA,MAAM,SAAS,GACb,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAC/D,cAEC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,sBAMtC,CAAA;AAED,QAAA,MAAM,YAAY;;;;;;;;;;;CA8BjB,CAAA;AAUD,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAYrE;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,qBAYlD;AAED,iBAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,qBAgBnE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAW1E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,4BAkBtE;AAED,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,GACV,CAAA"}
@@ -0,0 +1,128 @@
1
+ import * as React2 from 'react';
2
+ import { Slot } from '@radix-ui/react-slot';
3
+ import { FormProvider, Controller, useFormContext, useFormState } from 'react-hook-form';
4
+ import { clsx } from 'clsx';
5
+ import { twMerge } from 'tailwind-merge';
6
+ import * as LabelPrimitive from '@radix-ui/react-label';
7
+ import { cva } from 'class-variance-authority';
8
+ import { jsx } from 'react/jsx-runtime';
9
+
10
+ function cn(...inputs) {
11
+ return twMerge(clsx(inputs));
12
+ }
13
+ var labelVariants = cva(
14
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
15
+ );
16
+ var Label = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
17
+ LabelPrimitive.Root,
18
+ {
19
+ ref,
20
+ className: cn(labelVariants(), className),
21
+ ...props
22
+ }
23
+ ));
24
+ Label.displayName = LabelPrimitive.Root.displayName;
25
+ var Form = FormProvider;
26
+ var FormFieldContext = React2.createContext(
27
+ {}
28
+ );
29
+ var FormField = ({
30
+ ...props
31
+ }) => {
32
+ return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
33
+ };
34
+ var useFormField = () => {
35
+ const fieldContext = React2.useContext(FormFieldContext);
36
+ const itemContext = React2.useContext(FormItemContext);
37
+ if (!fieldContext?.name) {
38
+ throw new Error("useFormField should be used within <FormField>");
39
+ }
40
+ const { getFieldState } = useFormContext();
41
+ const formState = useFormState({ name: fieldContext.name });
42
+ const fieldState = getFieldState(fieldContext.name, formState);
43
+ const { id } = itemContext;
44
+ return {
45
+ id,
46
+ name: fieldContext.name,
47
+ formItemId: `${id}-form-item`,
48
+ formDescriptionId: `${id}-form-item-description`,
49
+ formMessageId: `${id}-form-item-message`,
50
+ ...fieldState
51
+ };
52
+ };
53
+ var FormItemContext = React2.createContext(
54
+ {}
55
+ );
56
+ function FormItem({ className, ...props }) {
57
+ const id = React2.useId();
58
+ return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
59
+ "div",
60
+ {
61
+ "data-slot": "form-item",
62
+ className: cn("grid gap-2", className),
63
+ ...props
64
+ }
65
+ ) });
66
+ }
67
+ function FormLabel({
68
+ className,
69
+ ...props
70
+ }) {
71
+ const { error, formItemId } = useFormField();
72
+ return /* @__PURE__ */ jsx(
73
+ Label,
74
+ {
75
+ "data-slot": "form-label",
76
+ "data-error": !!error,
77
+ className: cn("data-[error=true]:text-destructive", className),
78
+ htmlFor: formItemId,
79
+ ...props
80
+ }
81
+ );
82
+ }
83
+ function FormControl({ ...props }) {
84
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
85
+ return /* @__PURE__ */ jsx(
86
+ Slot,
87
+ {
88
+ "data-slot": "form-control",
89
+ id: formItemId,
90
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
91
+ "aria-invalid": !!error,
92
+ ...props
93
+ }
94
+ );
95
+ }
96
+ function FormDescription({ className, ...props }) {
97
+ const { formDescriptionId } = useFormField();
98
+ return /* @__PURE__ */ jsx(
99
+ "p",
100
+ {
101
+ "data-slot": "form-description",
102
+ id: formDescriptionId,
103
+ className: cn("text-muted-foreground text-sm", className),
104
+ ...props
105
+ }
106
+ );
107
+ }
108
+ function FormMessage({ className, ...props }) {
109
+ const { error, formMessageId } = useFormField();
110
+ const body = error ? String(error?.message ?? "") : props.children;
111
+ if (!body) {
112
+ return null;
113
+ }
114
+ return /* @__PURE__ */ jsx(
115
+ "p",
116
+ {
117
+ "data-slot": "form-message",
118
+ id: formMessageId,
119
+ className: cn("text-destructive text-sm", className),
120
+ ...props,
121
+ children: body
122
+ }
123
+ );
124
+ }
125
+
126
+ export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
127
+ //# sourceMappingURL=form.js.map
128
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/label.tsx","../../../src/components/ui/form.tsx"],"names":["React","jsx"],"mappings":"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","file":"form.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n\n // Upstream guards with `if (!fieldContext)`, but the default context value is\n // `{}`, which is always truthy, so that check can never fire. Test for the\n // field name it actually needs instead, so misuse fails loudly.\n //\n // This guard must stay ABOVE the `useFormContext`/`useFormState` calls below.\n // Upstream places its dead guard after them, which means react-hook-form is\n // called with `name: undefined` on the misuse path before anything rejects it.\n // Hoisting it is the fix; moving it back down silently undoes that.\n if (!fieldContext?.name) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/input-group.tsx"],"names":["twMerge","clsx","jsx"],"mappings":";;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AACnE,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"input-group.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { Input } from \"./input\"\nimport { Label } from \"./label\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface InputGroupProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport function InputGroup({ className, ...props }: InputGroupProps) {\n return (\n <div\n className={cn(\n \"flex w-full rounded-md border border-input bg-background shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/input-group.tsx"],"names":["twMerge","clsx","jsx"],"mappings":";;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACAO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AACnE,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"input-group.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface InputGroupProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport function InputGroup({ className, ...props }: InputGroupProps) {\n return (\n <div\n className={cn(\n \"flex w-full rounded-md border border-input bg-background shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"input-group.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAEhF,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,qBAUlE"}
1
+ {"version":3,"file":"input-group.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAEhF,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,qBAUlE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/input-group.tsx"],"names":[],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AACnE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"input-group.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { Input } from \"./input\"\nimport { Label } from \"./label\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface InputGroupProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport function InputGroup({ className, ...props }: InputGroupProps) {\n return (\n <div\n className={cn(\n \"flex w-full rounded-md border border-input bg-background shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/input-group.tsx"],"names":[],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACAO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AACnE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"input-group.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface InputGroupProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport function InputGroup({ className, ...props }: InputGroupProps) {\n return (\n <div\n className={cn(\n \"flex w-full rounded-md border border-input bg-background shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n"]}
@@ -8,8 +8,11 @@ var jsxRuntime = require('react/jsx-runtime');
8
8
  function cn(...inputs) {
9
9
  return tailwindMerge.twMerge(clsx.clsx(inputs));
10
10
  }
11
- function Message({ className, date, ...props }) {
12
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("group relative flex py-3", className), ...props, children: date && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex items-center gap-2 text-xs text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: new Date(date).toLocaleDateString() }) }) });
11
+ function Message({ className, date, children, ...props }) {
12
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("group relative flex py-3", className), ...props, children: [
13
+ children,
14
+ date && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex items-center gap-2 text-xs text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: new Date(date).toLocaleDateString() }) })
15
+ ] });
13
16
  }
14
17
 
15
18
  exports.Message = Message;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/message.tsx"],"names":["twMerge","clsx","jsx"],"mappings":";;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEO,SAAS,QAAQ,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAAiB;AACnE,EAAA,uBACEC,cAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,4BAA4B,SAAS,CAAA,EAAI,GAAG,KAAA,EAC5D,QAAA,EAAA,IAAA,oBACCA,cAAA,CAAC,SAAI,SAAA,EAAU,4DAAA,EACb,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAI,IAAA,CAAK,IAAI,CAAA,CAAE,kBAAA,EAAmB,EAAE,CAAA,EAC7C,CAAA,EAEJ,CAAA;AAEJ","file":"message.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\ninterface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n date?: Date | string\n}\n\nexport function Message({ className, date, ...props }: MessageProps) {\n return (\n <div className={cn(\"group relative flex py-3\", className)} {...props}>\n {date && (\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <span>{new Date(date).toLocaleDateString()}</span>\n </div>\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/message.tsx"],"names":["twMerge","clsx","jsxs","jsx"],"mappings":";;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEO,SAAS,QAAQ,EAAE,SAAA,EAAW,MAAM,QAAA,EAAU,GAAG,OAAM,EAAiB;AAC7E,EAAA,uBACEC,eAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,4BAA4B,SAAS,CAAA,EAAI,GAAG,KAAA,EAC5D,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,IAAA,oBACCC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAI,IAAA,CAAK,IAAI,CAAA,CAAE,kBAAA,IAAqB,CAAA,EAC7C;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"message.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\ninterface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n date?: Date | string\n}\n\nexport function Message({ className, date, children, ...props }: MessageProps) {\n return (\n <div className={cn(\"group relative flex py-3\", className)} {...props}>\n {children}\n {date && (\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <span>{new Date(date).toLocaleDateString()}</span>\n </div>\n )}\n </div>\n )\n}\n"]}
@@ -2,5 +2,5 @@ import * as React from "react";
2
2
  interface MessageProps extends React.HTMLAttributes<HTMLDivElement> {
3
3
  date?: Date | string;
4
4
  }
5
- export declare function Message({ className, date, ...props }: MessageProps): React.JSX.Element;
5
+ export declare function Message({ className, date, children, ...props }: MessageProps): React.JSX.Element;
6
6
  export {};
@@ -2,6 +2,6 @@ import * as React from "react";
2
2
  interface MessageProps extends React.HTMLAttributes<HTMLDivElement> {
3
3
  date?: Date | string;
4
4
  }
5
- export declare function Message({ className, date, ...props }: MessageProps): React.JSX.Element;
5
+ export declare function Message({ className, date, children, ...props }: MessageProps): React.JSX.Element;
6
6
  export {};
7
7
  //# sourceMappingURL=message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/components/ui/message.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,UAAU,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CACrB;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,qBAUlE"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/components/ui/message.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,UAAU,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CACrB;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,qBAW5E"}
@@ -1,13 +1,16 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
- import { jsx } from 'react/jsx-runtime';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
5
5
  // src/lib/utils.ts
6
6
  function cn(...inputs) {
7
7
  return twMerge(clsx(inputs));
8
8
  }
9
- function Message({ className, date, ...props }) {
10
- return /* @__PURE__ */ jsx("div", { className: cn("group relative flex py-3", className), ...props, children: date && /* @__PURE__ */ jsx("div", { className: "mt-1 flex items-center gap-2 text-xs text-muted-foreground", children: /* @__PURE__ */ jsx("span", { children: new Date(date).toLocaleDateString() }) }) });
9
+ function Message({ className, date, children, ...props }) {
10
+ return /* @__PURE__ */ jsxs("div", { className: cn("group relative flex py-3", className), ...props, children: [
11
+ children,
12
+ date && /* @__PURE__ */ jsx("div", { className: "mt-1 flex items-center gap-2 text-xs text-muted-foreground", children: /* @__PURE__ */ jsx("span", { children: new Date(date).toLocaleDateString() }) })
13
+ ] });
11
14
  }
12
15
 
13
16
  export { Message };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/message.tsx"],"names":[],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEO,SAAS,QAAQ,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAAiB;AACnE,EAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,4BAA4B,SAAS,CAAA,EAAI,GAAG,KAAA,EAC5D,QAAA,EAAA,IAAA,oBACC,GAAA,CAAC,SAAI,SAAA,EAAU,4DAAA,EACb,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAI,IAAA,CAAK,IAAI,CAAA,CAAE,kBAAA,EAAmB,EAAE,CAAA,EAC7C,CAAA,EAEJ,CAAA;AAEJ","file":"message.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\ninterface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n date?: Date | string\n}\n\nexport function Message({ className, date, ...props }: MessageProps) {\n return (\n <div className={cn(\"group relative flex py-3\", className)} {...props}>\n {date && (\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <span>{new Date(date).toLocaleDateString()}</span>\n </div>\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/message.tsx"],"names":[],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEO,SAAS,QAAQ,EAAE,SAAA,EAAW,MAAM,QAAA,EAAU,GAAG,OAAM,EAAiB;AAC7E,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,4BAA4B,SAAS,CAAA,EAAI,GAAG,KAAA,EAC5D,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,IAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAI,IAAA,CAAK,IAAI,CAAA,CAAE,kBAAA,IAAqB,CAAA,EAC7C;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"message.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\ninterface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n date?: Date | string\n}\n\nexport function Message({ className, date, children, ...props }: MessageProps) {\n return (\n <div className={cn(\"group relative flex py-3\", className)} {...props}>\n {children}\n {date && (\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <span>{new Date(date).toLocaleDateString()}</span>\n </div>\n )}\n </div>\n )\n}\n"]}
@@ -37,17 +37,17 @@ var buttonVariants = classVarianceAuthority.cva(
37
37
  {
38
38
  variants: {
39
39
  variant: {
40
- default: "bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover",
41
- primary: "bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover",
40
+ default: "border border-primary-border bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover",
41
+ primary: "border border-primary-border bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover",
42
42
  destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
43
43
  outline: "border border-input bg-surface shadow-surface hover:bg-accent hover:text-accent-foreground",
44
- secondary: "bg-secondary text-secondary-foreground shadow-surface hover:bg-surface-interactive",
44
+ secondary: "border border-secondary-border bg-secondary text-secondary-foreground shadow-surface hover:bg-secondary-hover",
45
45
  accent: "bg-accent-muted text-accent-foreground hover:bg-accent shadow-surface",
46
46
  subtle: "bg-accent text-accent-foreground hover:bg-accent-muted",
47
47
  inverse: "bg-foreground text-background shadow-sm hover:bg-foreground/90",
48
48
  ghost: "hover:bg-accent hover:text-accent-foreground",
49
49
  navigation: "hover:bg-accent hover:text-accent-foreground",
50
- link: "text-primary underline-offset-4 hover:underline"
50
+ link: "text-link underline-offset-4 hover:underline"
51
51
  },
52
52
  size: {
53
53
  default: "h-[var(--control-height)] px-4 py-2",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/button.tsx","../../../src/components/ui/pagination.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","jsxs","ChevronLeft","ChevronRight","MoreHorizontal"],"mappings":"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","file":"pagination.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"ui-button ui-focus inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium select-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover\",\n primary:\n \"bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-surface shadow-surface hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-surface hover:bg-surface-interactive\",\n accent:\n \"bg-accent-muted text-accent-foreground hover:bg-accent shadow-surface\",\n subtle: \"bg-accent text-accent-foreground hover:bg-accent-muted\",\n inverse:\n \"bg-foreground text-background shadow-sm hover:bg-foreground/90\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n navigation: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-[var(--control-height)] px-4 py-2\",\n compact: \"h-8 px-3 text-xs\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-12 rounded-md px-6\",\n xs: \"h-7 rounded px-2 text-xs\",\n icon: \"size-[var(--control-height)]\",\n \"icon-xs\": \"h-7 w-7\",\n \"icon-lg\": \"size-12\",\n },\n wrap: {\n true: \"whitespace-normal text-wrap\",\n false: \"whitespace-nowrap\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n wrap?: boolean\n loading?: boolean\n render?: React.ReactElement\n \"data-slot\"?: string\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n wrap,\n asChild = false,\n loading = false,\n render,\n disabled,\n children,\n onClickCapture,\n tabIndex,\n type,\n ...props\n },\n ref\n ) => {\n const isDisabled = Boolean(disabled || loading)\n const slotted = asChild || Boolean(render)\n const Comp = slotted ? Slot : \"button\"\n const content = render\n ? React.cloneElement(\n render as React.ReactElement<{ children?: React.ReactNode }>,\n undefined,\n children ?? (render.props as { children?: React.ReactNode }).children\n )\n : children\n return (\n <Comp\n {...props}\n ref={ref}\n data-slot={props[\"data-slot\"] ?? \"button\"}\n className={cn(buttonVariants({ variant, size, wrap, className }))}\n type={type}\n disabled={isDisabled}\n aria-disabled={isDisabled || undefined}\n aria-busy={loading || props[\"aria-busy\"]}\n tabIndex={isDisabled && slotted ? -1 : tabIndex}\n {...(isDisabled\n ? {\n onClickCapture: (event: React.MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n },\n }\n : onClickCapture\n ? { onClickCapture }\n : {})}\n >\n {content}\n </Comp>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { ButtonProps, buttonVariants } from \"@/components/ui/button\"\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n)\nPagination.displayName = \"Pagination\"\n\nconst PaginationContent = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n))\nPaginationContent.displayName = \"PaginationContent\"\n\nconst PaginationItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n <li ref={ref} className={cn(\"\", className)} {...props} />\n))\nPaginationItem.displayName = \"PaginationItem\"\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & React.ComponentProps<\"a\">\n\nconst PaginationLink = ({\n className,\n isActive,\n ...props\n}: PaginationLinkProps) => (\n <a\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size: \"default\",\n }),\n className\n )}\n {...props}\n />\n)\nPaginationLink.displayName = \"PaginationLink\"\n\nconst PaginationPrevious = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to previous page\"\n className={cn(\"gap-1 pl-2.5\", className)}\n {...props}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span>Previous</span>\n </PaginationLink>\n)\nPaginationPrevious.displayName = \"PaginationPrevious\"\n\nconst PaginationNext = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to next page\"\n className={cn(\"gap-1 pr-2.5\", className)}\n {...props}\n >\n <span>Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </PaginationLink>\n)\nPaginationNext.displayName = \"PaginationNext\"\n\nconst PaginationEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n aria-hidden\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n)\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\nexport type { PaginationLinkProps }\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/button.tsx","../../../src/components/ui/pagination.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","jsxs","ChevronLeft","ChevronRight","MoreHorizontal"],"mappings":"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","file":"pagination.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"ui-button ui-focus inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium select-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"border border-primary-border bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover\",\n primary:\n \"border border-primary-border bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-surface shadow-surface hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"border border-secondary-border bg-secondary text-secondary-foreground shadow-surface hover:bg-secondary-hover\",\n accent:\n \"bg-accent-muted text-accent-foreground hover:bg-accent shadow-surface\",\n subtle: \"bg-accent text-accent-foreground hover:bg-accent-muted\",\n inverse:\n \"bg-foreground text-background shadow-sm hover:bg-foreground/90\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n navigation: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-link underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-[var(--control-height)] px-4 py-2\",\n compact: \"h-8 px-3 text-xs\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-12 rounded-md px-6\",\n xs: \"h-7 rounded px-2 text-xs\",\n icon: \"size-[var(--control-height)]\",\n \"icon-xs\": \"h-7 w-7\",\n \"icon-lg\": \"size-12\",\n },\n wrap: {\n true: \"whitespace-normal text-wrap\",\n false: \"whitespace-nowrap\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n wrap?: boolean\n loading?: boolean\n render?: React.ReactElement\n \"data-slot\"?: string\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n wrap,\n asChild = false,\n loading = false,\n render,\n disabled,\n children,\n onClickCapture,\n tabIndex,\n type,\n ...props\n },\n ref\n ) => {\n const isDisabled = Boolean(disabled || loading)\n const slotted = asChild || Boolean(render)\n const Comp = slotted ? Slot : \"button\"\n const content = render\n ? React.cloneElement(\n render as React.ReactElement<{ children?: React.ReactNode }>,\n undefined,\n children ?? (render.props as { children?: React.ReactNode }).children\n )\n : children\n return (\n <Comp\n {...props}\n ref={ref}\n data-slot={props[\"data-slot\"] ?? \"button\"}\n className={cn(buttonVariants({ variant, size, wrap, className }))}\n type={type}\n disabled={isDisabled}\n aria-disabled={isDisabled || undefined}\n aria-busy={loading || props[\"aria-busy\"]}\n tabIndex={isDisabled && slotted ? -1 : tabIndex}\n {...(isDisabled\n ? {\n onClickCapture: (event: React.MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n },\n }\n : onClickCapture\n ? { onClickCapture }\n : {})}\n >\n {content}\n </Comp>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n)\nPagination.displayName = \"Pagination\"\n\nconst PaginationContent = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n))\nPaginationContent.displayName = \"PaginationContent\"\n\nconst PaginationItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n <li ref={ref} className={cn(\"\", className)} {...props} />\n))\nPaginationItem.displayName = \"PaginationItem\"\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & React.ComponentProps<\"a\">\n\nconst PaginationLink = ({\n className,\n isActive,\n ...props\n}: PaginationLinkProps) => (\n <a\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size: \"default\",\n }),\n className\n )}\n {...props}\n />\n)\nPaginationLink.displayName = \"PaginationLink\"\n\nconst PaginationPrevious = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to previous page\"\n className={cn(\"gap-1 pl-2.5\", className)}\n {...props}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span>Previous</span>\n </PaginationLink>\n)\nPaginationPrevious.displayName = \"PaginationPrevious\"\n\nconst PaginationNext = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to next page\"\n className={cn(\"gap-1 pr-2.5\", className)}\n {...props}\n >\n <span>Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </PaginationLink>\n)\nPaginationNext.displayName = \"PaginationNext\"\n\nconst PaginationEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n aria-hidden\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n)\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\nexport type { PaginationLinkProps }\n"]}
@@ -15,17 +15,17 @@ var buttonVariants = cva(
15
15
  {
16
16
  variants: {
17
17
  variant: {
18
- default: "bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover",
19
- primary: "bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover",
18
+ default: "border border-primary-border bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover",
19
+ primary: "border border-primary-border bg-primary text-primary-foreground shadow-surface hover:bg-primary-hover",
20
20
  destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
21
21
  outline: "border border-input bg-surface shadow-surface hover:bg-accent hover:text-accent-foreground",
22
- secondary: "bg-secondary text-secondary-foreground shadow-surface hover:bg-surface-interactive",
22
+ secondary: "border border-secondary-border bg-secondary text-secondary-foreground shadow-surface hover:bg-secondary-hover",
23
23
  accent: "bg-accent-muted text-accent-foreground hover:bg-accent shadow-surface",
24
24
  subtle: "bg-accent text-accent-foreground hover:bg-accent-muted",
25
25
  inverse: "bg-foreground text-background shadow-sm hover:bg-foreground/90",
26
26
  ghost: "hover:bg-accent hover:text-accent-foreground",
27
27
  navigation: "hover:bg-accent hover:text-accent-foreground",
28
- link: "text-primary underline-offset-4 hover:underline"
28
+ link: "text-link underline-offset-4 hover:underline"
29
29
  },
30
30
  size: {
31
31
  default: "h-[var(--control-height)] px-4 py-2",