@kubetail/ui 2.7.1 → 3.0.0-rc2
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.
- package/dist/elements/alert.cjs +1 -1
- package/dist/elements/alert.cjs.map +1 -1
- package/dist/elements/alert.d.ts +2 -2
- package/dist/elements/alert.js +6 -12
- package/dist/elements/alert.js.map +1 -1
- package/dist/elements/avatar.cjs +1 -1
- package/dist/elements/avatar.cjs.map +1 -1
- package/dist/elements/avatar.d.ts +1 -1
- package/dist/elements/avatar.js +1 -1
- package/dist/elements/avatar.js.map +1 -1
- package/dist/elements/button.cjs +1 -1
- package/dist/elements/button.cjs.map +1 -1
- package/dist/elements/button.d.ts +5 -13
- package/dist/elements/button.js +24 -18
- package/dist/elements/button.js.map +1 -1
- package/dist/elements/card.cjs +1 -1
- package/dist/elements/card.cjs.map +1 -1
- package/dist/elements/card.d.ts +3 -1
- package/dist/elements/card.js +9 -8
- package/dist/elements/card.js.map +1 -1
- package/dist/elements/checkbox.cjs +1 -1
- package/dist/elements/checkbox.cjs.map +1 -1
- package/dist/elements/checkbox.d.ts +2 -2
- package/dist/elements/checkbox.js +4 -4
- package/dist/elements/checkbox.js.map +1 -1
- package/dist/elements/context-menu.cjs +1 -1
- package/dist/elements/context-menu.cjs.map +1 -1
- package/dist/elements/context-menu.d.ts +16 -18
- package/dist/elements/context-menu.js +52 -44
- package/dist/elements/context-menu.js.map +1 -1
- package/dist/elements/dialog.cjs +1 -1
- package/dist/elements/dialog.cjs.map +1 -1
- package/dist/elements/dialog.d.ts +12 -11
- package/dist/elements/dialog.js +47 -42
- package/dist/elements/dialog.js.map +1 -1
- package/dist/elements/dropdown-menu.cjs +1 -1
- package/dist/elements/dropdown-menu.cjs.map +1 -1
- package/dist/elements/dropdown-menu.d.ts +20 -17
- package/dist/elements/dropdown-menu.js +86 -72
- package/dist/elements/dropdown-menu.js.map +1 -1
- package/dist/elements/field.cjs +2 -0
- package/dist/elements/field.cjs.map +1 -0
- package/dist/elements/field.d.ts +24 -0
- package/dist/elements/field.js +110 -0
- package/dist/elements/field.js.map +1 -0
- package/dist/elements/form.cjs +1 -1
- package/dist/elements/form.cjs.map +1 -1
- package/dist/elements/form.d.ts +5 -4
- package/dist/elements/form.js +39 -42
- package/dist/elements/form.js.map +1 -1
- package/dist/elements/input-group.cjs +2 -0
- package/dist/elements/input-group.cjs.map +1 -0
- package/dist/elements/input-group.d.ts +18 -0
- package/dist/elements/input-group.js +80 -0
- package/dist/elements/input-group.js.map +1 -0
- package/dist/elements/input.cjs +1 -1
- package/dist/elements/input.cjs.map +1 -1
- package/dist/elements/input.js +7 -6
- package/dist/elements/input.js.map +1 -1
- package/dist/elements/label.cjs +1 -1
- package/dist/elements/label.cjs.map +1 -1
- package/dist/elements/label.d.ts +2 -2
- package/dist/elements/label.js +6 -6
- package/dist/elements/label.js.map +1 -1
- package/dist/elements/link.cjs +1 -1
- package/dist/elements/link.cjs.map +1 -1
- package/dist/elements/link.d.ts +6 -5
- package/dist/elements/link.js +18 -13
- package/dist/elements/link.js.map +1 -1
- package/dist/elements/pagination.cjs +1 -1
- package/dist/elements/pagination.cjs.map +1 -1
- package/dist/elements/pagination.d.ts +8 -5
- package/dist/elements/pagination.js +32 -26
- package/dist/elements/pagination.js.map +1 -1
- package/dist/elements/popover.cjs +1 -1
- package/dist/elements/popover.cjs.map +1 -1
- package/dist/elements/popover.d.ts +8 -5
- package/dist/elements/popover.js +13 -19
- package/dist/elements/popover.js.map +1 -1
- package/dist/elements/search-box.cjs +1 -1
- package/dist/elements/search-box.cjs.map +1 -1
- package/dist/elements/search-box.js +5 -5
- package/dist/elements/select.cjs +1 -1
- package/dist/elements/select.cjs.map +1 -1
- package/dist/elements/select.d.ts +11 -11
- package/dist/elements/select.js +49 -51
- package/dist/elements/select.js.map +1 -1
- package/dist/elements/separator.cjs +1 -1
- package/dist/elements/separator.cjs.map +1 -1
- package/dist/elements/separator.d.ts +2 -2
- package/dist/elements/separator.js +7 -6
- package/dist/elements/separator.js.map +1 -1
- package/dist/elements/sheet.cjs +1 -1
- package/dist/elements/sheet.cjs.map +1 -1
- package/dist/elements/sheet.d.ts +8 -7
- package/dist/elements/sheet.js +44 -37
- package/dist/elements/sheet.js.map +1 -1
- package/dist/elements/sidebar.cjs +1 -1
- package/dist/elements/sidebar.cjs.map +1 -1
- package/dist/elements/sidebar.d.ts +11 -16
- package/dist/elements/sidebar.js +178 -166
- package/dist/elements/sidebar.js.map +1 -1
- package/dist/elements/skeleton.cjs +1 -1
- package/dist/elements/skeleton.cjs.map +1 -1
- package/dist/elements/skeleton.js +1 -1
- package/dist/elements/skeleton.js.map +1 -1
- package/dist/elements/spinner.cjs.map +1 -1
- package/dist/elements/spinner.js.map +1 -1
- package/dist/elements/switch.cjs +1 -1
- package/dist/elements/switch.cjs.map +1 -1
- package/dist/elements/switch.d.ts +2 -2
- package/dist/elements/switch.js +3 -3
- package/dist/elements/switch.js.map +1 -1
- package/dist/elements/table.cjs +1 -1
- package/dist/elements/table.cjs.map +1 -1
- package/dist/elements/table.d.ts +1 -1
- package/dist/elements/table.js +6 -5
- package/dist/elements/table.js.map +1 -1
- package/dist/elements/tabs.cjs +1 -1
- package/dist/elements/tabs.cjs.map +1 -1
- package/dist/elements/tabs.d.ts +10 -6
- package/dist/elements/tabs.js +28 -16
- package/dist/elements/tabs.js.map +1 -1
- package/dist/elements/textarea.cjs +2 -0
- package/dist/elements/textarea.cjs.map +1 -0
- package/dist/elements/textarea.d.ts +3 -0
- package/dist/elements/textarea.js +15 -0
- package/dist/elements/textarea.js.map +1 -0
- package/dist/elements/toggle.cjs +1 -1
- package/dist/elements/toggle.cjs.map +1 -1
- package/dist/elements/toggle.d.ts +2 -2
- package/dist/elements/toggle.js +8 -8
- package/dist/elements/toggle.js.map +1 -1
- package/dist/elements/tooltip.cjs +1 -1
- package/dist/elements/tooltip.cjs.map +1 -1
- package/dist/elements/tooltip.d.ts +5 -5
- package/dist/elements/tooltip.js +18 -12
- package/dist/elements/tooltip.js.map +1 -1
- package/package.json +3 -71
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn as e } from "../lib/utils.js";
|
|
3
|
+
import { Separator as t } from "./separator.js";
|
|
4
|
+
import { Label as n } from "./label.js";
|
|
5
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
6
|
+
import { cva as a } from "class-variance-authority";
|
|
7
|
+
import { useMemo as o } from "react";
|
|
8
|
+
//#region src/elements/field.tsx
|
|
9
|
+
function s({ className: t, ...n }) {
|
|
10
|
+
return /* @__PURE__ */ r("fieldset", {
|
|
11
|
+
"data-slot": "field-set",
|
|
12
|
+
className: e("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", t),
|
|
13
|
+
...n
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function c({ className: t, variant: n = "legend", ...i }) {
|
|
17
|
+
return /* @__PURE__ */ r("legend", {
|
|
18
|
+
"data-slot": "field-legend",
|
|
19
|
+
"data-variant": n,
|
|
20
|
+
className: e("mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base", t),
|
|
21
|
+
...i
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function l({ className: t, ...n }) {
|
|
25
|
+
return /* @__PURE__ */ r("div", {
|
|
26
|
+
"data-slot": "field-group",
|
|
27
|
+
className: e("group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", t),
|
|
28
|
+
...n
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
var u = a("group/field flex w-full gap-2 data-[invalid=true]:text-destructive", {
|
|
32
|
+
variants: { orientation: {
|
|
33
|
+
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
34
|
+
horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
|
|
35
|
+
responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
36
|
+
} },
|
|
37
|
+
defaultVariants: { orientation: "vertical" }
|
|
38
|
+
});
|
|
39
|
+
function d({ className: t, orientation: n = "vertical", ...i }) {
|
|
40
|
+
return /* @__PURE__ */ r("div", {
|
|
41
|
+
role: "group",
|
|
42
|
+
"data-slot": "field",
|
|
43
|
+
"data-orientation": n,
|
|
44
|
+
className: e(u({ orientation: n }), t),
|
|
45
|
+
...i
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function f({ className: t, ...n }) {
|
|
49
|
+
return /* @__PURE__ */ r("div", {
|
|
50
|
+
"data-slot": "field-content",
|
|
51
|
+
className: e("group/field-content flex flex-1 flex-col gap-0.5 leading-snug", t),
|
|
52
|
+
...n
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function p({ className: t, ...i }) {
|
|
56
|
+
return /* @__PURE__ */ r(n, {
|
|
57
|
+
"data-slot": "field-label",
|
|
58
|
+
className: e("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", t),
|
|
59
|
+
...i
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function m({ className: t, ...n }) {
|
|
63
|
+
return /* @__PURE__ */ r("div", {
|
|
64
|
+
"data-slot": "field-label",
|
|
65
|
+
className: e("flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50", t),
|
|
66
|
+
...n
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function h({ className: t, ...n }) {
|
|
70
|
+
return /* @__PURE__ */ r("p", {
|
|
71
|
+
"data-slot": "field-description",
|
|
72
|
+
className: e("text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5", "last:mt-0 nth-last-2:-mt-1", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", t),
|
|
73
|
+
...n
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function g({ children: n, className: a, ...o }) {
|
|
77
|
+
return /* @__PURE__ */ i("div", {
|
|
78
|
+
"data-slot": "field-separator",
|
|
79
|
+
"data-content": !!n,
|
|
80
|
+
className: e("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", a),
|
|
81
|
+
...o,
|
|
82
|
+
children: [/* @__PURE__ */ r(t, { className: "absolute inset-0 top-1/2" }), n && /* @__PURE__ */ r("span", {
|
|
83
|
+
className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
|
|
84
|
+
"data-slot": "field-separator-content",
|
|
85
|
+
children: n
|
|
86
|
+
})]
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function _({ className: t, children: n, errors: i, ...a }) {
|
|
90
|
+
let s = o(() => {
|
|
91
|
+
if (n) return n;
|
|
92
|
+
if (!i?.length) return null;
|
|
93
|
+
let e = [...new Map(i.map((e) => [e?.message, e])).values()];
|
|
94
|
+
return e?.length === 1 ? e[0]?.message : /* @__PURE__ */ r("ul", {
|
|
95
|
+
className: "ml-4 flex list-disc flex-col gap-1",
|
|
96
|
+
children: e.map((e) => e?.message && /* @__PURE__ */ r("li", { children: e.message }, e.message))
|
|
97
|
+
});
|
|
98
|
+
}, [n, i]);
|
|
99
|
+
return s ? /* @__PURE__ */ r("div", {
|
|
100
|
+
role: "alert",
|
|
101
|
+
"data-slot": "field-error",
|
|
102
|
+
className: e("text-sm font-normal text-destructive", t),
|
|
103
|
+
...a,
|
|
104
|
+
children: s
|
|
105
|
+
}) : null;
|
|
106
|
+
}
|
|
107
|
+
//#endregion
|
|
108
|
+
export { d as Field, f as FieldContent, h as FieldDescription, _ as FieldError, l as FieldGroup, p as FieldLabel, c as FieldLegend, g as FieldSeparator, s as FieldSet, m as FieldTitle };
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.js","names":[],"sources":["../../src/elements/field.tsx"],"sourcesContent":["'use client';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useMemo } from 'react';\n\nimport { Label } from '@/elements/label';\nimport { Separator } from '@/elements/separator';\nimport { cn } from '@/lib/utils';\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<'fieldset'>) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n 'flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction FieldLegend({\n className,\n variant = 'legend',\n ...props\n}: React.ComponentProps<'legend'> & { variant?: 'legend' | 'label' }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn('mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base', className)}\n {...props}\n />\n );\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n 'group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nconst fieldVariants = cva('group/field flex w-full gap-2 data-[invalid=true]:text-destructive', {\n variants: {\n orientation: {\n vertical: 'flex-col *:w-full [&>.sr-only]:w-auto',\n horizontal:\n 'flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n responsive:\n 'flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n});\n\nfunction Field({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n );\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn('group/field-content flex flex-1 flex-col gap-0.5 leading-snug', className)}\n {...props}\n />\n );\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n 'group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10',\n 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n 'flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n 'text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5',\n 'last:mt-0 nth-last-2:-mt-1',\n '[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<'div'> & {\n children?: React.ReactNode;\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn('relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2', className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"relative mx-auto block w-fit bg-background px-2 text-muted-foreground\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n );\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<'div'> & {\n errors?: ({ message?: string } | undefined)[];\n}) {\n const content = useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors?.length) {\n return null;\n }\n\n const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];\n\n if (uniqueErrors?.length === 1) {\n return uniqueErrors[0]?.message;\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map((error) => error?.message && <li key={error.message}>{error.message}</li>)}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn('text-sm font-normal text-destructive', className)}\n {...props}\n >\n {content}\n </div>\n );\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n};\n"],"mappings":";;;;;;;;AASA,SAAS,EAAS,EAAE,cAAW,GAAG,KAA2C;AAC3E,QACE,kBAAC,YAAD;EACE,aAAU;EACV,WAAW,EACT,oGACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAY,EACnB,cACA,aAAU,UACV,GAAG,KACiE;AACpE,QACE,kBAAC,UAAD;EACE,aAAU;EACV,gBAAc;EACd,WAAW,EAAG,mFAAmF,EAAU;EAC3G,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAW,EAAE,cAAW,GAAG,KAAsC;AACxE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,wIACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,IAAM,IAAgB,EAAI,sEAAsE;CAC9F,UAAU,EACR,aAAa;EACX,UAAU;EACV,YACE;EACF,YACE;EACH,EACF;CACD,iBAAiB,EACf,aAAa,YACd;CACF,CAAC;AAEF,SAAS,EAAM,EACb,cACA,iBAAc,YACd,GAAG,KACgE;AACnE,QACE,kBAAC,OAAD;EACE,MAAK;EACL,aAAU;EACV,oBAAkB;EAClB,WAAW,EAAG,EAAc,EAAE,gBAAa,CAAC,EAAE,EAAU;EACxD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAa,EAAE,cAAW,GAAG,KAAsC;AAC1E,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,iEAAiE,EAAU;EACzF,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAW,EAAE,cAAW,GAAG,KAA6C;AAC/E,QACE,kBAAC,GAAD;EACE,aAAU;EACV,WAAW,EACT,2VACA,qEACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAW,EAAE,cAAW,GAAG,KAAsC;AACxE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,iGACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAiB,EAAE,cAAW,GAAG,KAAoC;AAC5E,QACE,kBAAC,KAAD;EACE,aAAU;EACV,WAAW,EACT,qJACA,8BACA,qEACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAe,EACtB,aACA,cACA,GAAG,KAGF;AACD,QACE,kBAAC,OAAD;EACE,aAAU;EACV,gBAAc,CAAC,CAAC;EAChB,WAAW,EAAG,6EAA6E,EAAU;EACrG,GAAI;YAJN,CAME,kBAAC,GAAD,EAAW,WAAU,4BAA6B,CAAA,EACjD,KACC,kBAAC,QAAD;GACE,WAAU;GACV,aAAU;GAET;GACI,CAAA,CAEL;;;AAIV,SAAS,EAAW,EAClB,cACA,aACA,WACA,GAAG,KAGF;CACD,IAAM,IAAU,QAAc;AAC5B,MAAI,EACF,QAAO;AAGT,MAAI,CAAC,GAAQ,OACX,QAAO;EAGT,IAAM,IAAe,CAAC,GAAG,IAAI,IAAI,EAAO,KAAK,MAAU,CAAC,GAAO,SAAS,EAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAM1F,SAJI,GAAc,WAAW,IACpB,EAAa,IAAI,UAIxB,kBAAC,MAAD;GAAI,WAAU;aACX,EAAa,KAAK,MAAU,GAAO,WAAW,kBAAC,MAAD,EAAA,UAAyB,EAAM,SAAa,EAAnC,EAAM,QAA6B,CAAC;GACzF,CAAA;IAEN,CAAC,GAAU,EAAO,CAAC;AAMtB,QAJK,IAKH,kBAAC,OAAD;EACE,MAAK;EACL,aAAU;EACV,WAAW,EAAG,wCAAwC,EAAU;EAChE,GAAI;YAEH;EACG,CAAA,GAXC"}
|
package/dist/elements/form.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`})
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../lib/utils.cjs`),t=require(`./label.cjs`);let n=require(`react/jsx-runtime`),r=require(`react`),i=require(`react-hook-form`);var a=i.FormProvider,o=(0,r.createContext)({}),s=(0,r.createContext)({}),c=({...e})=>{let t=(0,r.useMemo)(()=>({name:e.name}),[e.name]);return(0,n.jsx)(o.Provider,{value:t,children:(0,n.jsx)(i.Controller,{...e})})},l=()=>{let e=(0,r.useContext)(o),t=(0,r.useContext)(s),{getFieldState:n}=(0,i.useFormContext)(),a=(0,i.useFormState)({name:e.name}),c=n(e.name,a);if(!e)throw Error(`useFormField should be used within <FormField>`);let{id:l}=t;return{id:l,name:e.name,formItemId:`${l}-form-item`,formDescriptionId:`${l}-form-item-description`,formMessageId:`${l}-form-item-message`,...c}};function u({className:t,...i}){let a=(0,r.useId)(),o=(0,r.useMemo)(()=>({id:a}),[a]);return(0,n.jsx)(s.Provider,{value:o,children:(0,n.jsx)(`div`,{"data-slot":`form-item`,className:e.cn(`grid gap-2`,t),...i})})}function d({className:r,...i}){let{error:a,formItemId:o}=l();return(0,n.jsx)(t.Label,{"data-slot":`form-label`,"data-error":!!a,className:e.cn(`data-[error=true]:text-destructive`,r),htmlFor:o,...i})}function f({children:e}){let{error:t,formItemId:i,formDescriptionId:a,formMessageId:o}=l(),s=r.Children.only(e);return(0,r.isValidElement)(s)?(0,r.cloneElement)(s,{"data-slot":`form-control`,id:i,"aria-describedby":t?`${a} ${o}`:a,"aria-invalid":!!t}):(0,n.jsx)(n.Fragment,{children:e})}function p({className:t,...r}){let{formDescriptionId:i}=l();return(0,n.jsx)(`p`,{"data-slot":`form-description`,id:i,className:e.cn(`text-muted-foreground text-sm`,t),...r})}function m({className:t,...r}){let{error:i,formMessageId:a}=l(),o=i?String(i?.message??``):r.children;return o?(0,n.jsx)(`p`,{"data-slot":`form-message`,id:a,className:e.cn(`text-destructive text-sm`,t),...r,children:o}):null}exports.Form=a,exports.FormControl=f,exports.FormDescription=p,exports.FormField=c,exports.FormItem=u,exports.FormLabel=d,exports.FormMessage=m,exports.useFormField=l;
|
|
2
2
|
//# sourceMappingURL=form.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.cjs","names":[],"sources":["../../src/elements/form.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, useId, useMemo } from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"form.cjs","names":[],"sources":["../../src/elements/form.tsx"],"sourcesContent":["'use client';\n\nimport { Children, cloneElement, createContext, isValidElement, useContext, useId, useMemo } from 'react';\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 '@/elements/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 = createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = createContext<FormItemContextValue>({} as FormItemContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n const value = useMemo(() => ({ name: props.name }), [props.name]);\n\n return (\n <FormFieldContext.Provider value={value}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = useContext(FormFieldContext);\n const itemContext = useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\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\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = useId();\n const value = useMemo(() => ({ id }), [id]);\n\n return (\n <FormItemContext.Provider value={value}>\n <div data-slot=\"form-item\" className={cn('grid gap-2', className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\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({ children }: { children: React.ReactNode }) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n const child = Children.only(children);\n\n if (!isValidElement<Record<string, unknown>>(child)) {\n return <>{children}</>;\n }\n\n return cloneElement(child, {\n 'data-slot': 'form-control',\n id: formItemId,\n 'aria-describedby': !error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`,\n 'aria-invalid': !!error,\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 data-slot=\"form-message\" id={formMessageId} className={cn('text-destructive text-sm', className)} {...props}>\n {body}\n </p>\n );\n}\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n"],"mappings":"6QAgBA,IAAM,EAAO,EAAA,aASP,GAAA,EAAA,EAAA,eAAwD,EAAE,CAA0B,CAMpF,GAAA,EAAA,EAAA,eAAsD,EAAE,CAAyB,CAEjF,GAGJ,CACA,GAAG,KACuC,CAC1C,IAAM,GAAA,EAAA,EAAA,cAAuB,CAAE,KAAM,EAAM,KAAM,EAAG,CAAC,EAAM,KAAK,CAAC,CAEjE,OACE,EAAA,EAAA,KAAC,EAAiB,SAAlB,CAAkC,kBAChC,EAAA,EAAA,KAAC,EAAA,WAAD,CAAY,GAAI,EAAS,CAAA,CACC,CAAA,EAI1B,MAAqB,CACzB,IAAM,GAAA,EAAA,EAAA,YAA0B,EAAiB,CAC3C,GAAA,EAAA,EAAA,YAAyB,EAAgB,CACzC,CAAE,kBAAA,EAAA,EAAA,iBAAkC,CACpC,GAAA,EAAA,EAAA,cAAyB,CAAE,KAAM,EAAa,KAAM,CAAC,CACrD,EAAa,EAAc,EAAa,KAAM,EAAU,CAE9D,GAAI,CAAC,EACH,MAAU,MAAM,iDAAiD,CAGnE,GAAM,CAAE,MAAO,EAEf,MAAO,CACL,KACA,KAAM,EAAa,KACnB,WAAY,GAAG,EAAG,YAClB,kBAAmB,GAAG,EAAG,wBACzB,cAAe,GAAG,EAAG,oBACrB,GAAG,EACJ,EAGH,SAAS,EAAS,CAAE,YAAW,GAAG,GAAsC,CACtE,IAAM,GAAA,EAAA,EAAA,QAAY,CACZ,GAAA,EAAA,EAAA,cAAuB,CAAE,KAAI,EAAG,CAAC,EAAG,CAAC,CAE3C,OACE,EAAA,EAAA,KAAC,EAAgB,SAAjB,CAAiC,kBAC/B,EAAA,EAAA,KAAC,MAAD,CAAK,YAAU,YAAY,UAAW,EAAA,GAAG,aAAc,EAAU,CAAE,GAAI,EAAS,CAAA,CACvD,CAAA,CAI/B,SAAS,EAAU,CAAE,YAAW,GAAG,GAA6C,CAC9E,GAAM,CAAE,QAAO,cAAe,GAAc,CAE5C,OACE,EAAA,EAAA,KAAC,EAAA,MAAD,CACE,YAAU,aACV,aAAY,CAAC,CAAC,EACd,UAAW,EAAA,GAAG,qCAAsC,EAAU,CAC9D,QAAS,EACT,GAAI,EACJ,CAAA,CAIN,SAAS,EAAY,CAAE,YAA2C,CAChE,GAAM,CAAE,QAAO,aAAY,oBAAmB,iBAAkB,GAAc,CACxE,EAAQ,EAAA,SAAS,KAAK,EAAS,CAMrC,OAJI,EAAA,EAAA,gBAAyC,EAAM,EAInD,EAAA,EAAA,cAAoB,EAAO,CACzB,YAAa,eACb,GAAI,EACJ,mBAAqB,EAA4B,GAAG,EAAkB,GAAG,IAA5C,EAC7B,eAAgB,CAAC,CAAC,EACnB,CAAC,EARO,EAAA,EAAA,KAAA,EAAA,SAAA,CAAG,WAAY,CAAA,CAW1B,SAAS,EAAgB,CAAE,YAAW,GAAG,GAAoC,CAC3E,GAAM,CAAE,qBAAsB,GAAc,CAE5C,OACE,EAAA,EAAA,KAAC,IAAD,CACE,YAAU,mBACV,GAAI,EACJ,UAAW,EAAA,GAAG,gCAAiC,EAAU,CACzD,GAAI,EACJ,CAAA,CAIN,SAAS,EAAY,CAAE,YAAW,GAAG,GAAoC,CACvE,GAAM,CAAE,QAAO,iBAAkB,GAAc,CACzC,EAAO,EAAQ,OAAO,GAAO,SAAW,GAAG,CAAG,EAAM,SAM1D,OAJK,GAKH,EAAA,EAAA,KAAC,IAAD,CAAG,YAAU,eAAe,GAAI,EAAe,UAAW,EAAA,GAAG,2BAA4B,EAAU,CAAE,GAAI,WACtG,EACC,CAAA,CANG"}
|
package/dist/elements/form.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
2
|
-
import { Slot } from '@radix-ui/react-slot';
|
|
3
1
|
import { type ControllerProps, type FieldPath, type FieldValues } from 'react-hook-form';
|
|
2
|
+
import { Label } from '@/elements/label';
|
|
4
3
|
declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>(props: import("react-hook-form").FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React.JSX.Element;
|
|
5
4
|
declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => import("react/jsx-runtime").JSX.Element;
|
|
6
5
|
declare const useFormField: () => {
|
|
@@ -16,8 +15,10 @@ declare const useFormField: () => {
|
|
|
16
15
|
formMessageId: string;
|
|
17
16
|
};
|
|
18
17
|
declare function FormItem({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
19
|
-
declare function FormLabel({ className, ...props }: React.ComponentProps<typeof
|
|
20
|
-
declare function FormControl({
|
|
18
|
+
declare function FormLabel({ className, ...props }: React.ComponentProps<typeof Label>): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
declare function FormControl({ children }: {
|
|
20
|
+
children: React.ReactNode;
|
|
21
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
21
22
|
declare function FormDescription({ className, ...props }: React.ComponentProps<'p'>): import("react/jsx-runtime").JSX.Element;
|
|
22
23
|
declare function FormMessage({ className, ...props }: React.ComponentProps<'p'>): import("react/jsx-runtime").JSX.Element | null;
|
|
23
24
|
export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };
|
package/dist/elements/form.js
CHANGED
|
@@ -1,82 +1,79 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn as e } from "../lib/utils.js";
|
|
3
3
|
import { Label as t } from "./label.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import "@radix-ui/react-label";
|
|
8
|
-
import { Controller as c, FormProvider as l, useFormContext as u, useFormState as d } from "react-hook-form";
|
|
4
|
+
import { Fragment as n, jsx as r } from "react/jsx-runtime";
|
|
5
|
+
import { Children as i, cloneElement as a, createContext as o, isValidElement as s, useContext as c, useId as l, useMemo as u } from "react";
|
|
6
|
+
import { Controller as d, FormProvider as f, useFormContext as p, useFormState as m } from "react-hook-form";
|
|
9
7
|
//#region src/elements/form.tsx
|
|
10
|
-
var
|
|
11
|
-
let t =
|
|
12
|
-
return /* @__PURE__ */
|
|
8
|
+
var h = f, g = o({}), _ = o({}), v = ({ ...e }) => {
|
|
9
|
+
let t = u(() => ({ name: e.name }), [e.name]);
|
|
10
|
+
return /* @__PURE__ */ r(g.Provider, {
|
|
13
11
|
value: t,
|
|
14
|
-
children: /* @__PURE__ */
|
|
12
|
+
children: /* @__PURE__ */ r(d, { ...e })
|
|
15
13
|
});
|
|
16
|
-
},
|
|
17
|
-
let e =
|
|
14
|
+
}, y = () => {
|
|
15
|
+
let e = c(g), t = c(_), { getFieldState: n } = p(), r = m({ name: e.name }), i = n(e.name, r);
|
|
18
16
|
if (!e) throw Error("useFormField should be used within <FormField>");
|
|
19
|
-
let { id:
|
|
17
|
+
let { id: a } = t;
|
|
20
18
|
return {
|
|
21
|
-
id:
|
|
19
|
+
id: a,
|
|
22
20
|
name: e.name,
|
|
23
|
-
formItemId: `${
|
|
24
|
-
formDescriptionId: `${
|
|
25
|
-
formMessageId: `${
|
|
21
|
+
formItemId: `${a}-form-item`,
|
|
22
|
+
formDescriptionId: `${a}-form-item-description`,
|
|
23
|
+
formMessageId: `${a}-form-item-message`,
|
|
26
24
|
...i
|
|
27
25
|
};
|
|
28
26
|
};
|
|
29
|
-
function
|
|
30
|
-
let i =
|
|
31
|
-
return /* @__PURE__ */
|
|
27
|
+
function b({ className: t, ...n }) {
|
|
28
|
+
let i = l(), a = u(() => ({ id: i }), [i]);
|
|
29
|
+
return /* @__PURE__ */ r(_.Provider, {
|
|
32
30
|
value: a,
|
|
33
|
-
children: /* @__PURE__ */
|
|
31
|
+
children: /* @__PURE__ */ r("div", {
|
|
34
32
|
"data-slot": "form-item",
|
|
35
33
|
className: e("grid gap-2", t),
|
|
36
|
-
...
|
|
34
|
+
...n
|
|
37
35
|
})
|
|
38
36
|
});
|
|
39
37
|
}
|
|
40
|
-
function
|
|
41
|
-
let { error: a, formItemId: o } =
|
|
42
|
-
return /* @__PURE__ */
|
|
38
|
+
function x({ className: n, ...i }) {
|
|
39
|
+
let { error: a, formItemId: o } = y();
|
|
40
|
+
return /* @__PURE__ */ r(t, {
|
|
43
41
|
"data-slot": "form-label",
|
|
44
42
|
"data-error": !!a,
|
|
45
|
-
className: e("data-[error=true]:text-destructive",
|
|
43
|
+
className: e("data-[error=true]:text-destructive", n),
|
|
46
44
|
htmlFor: o,
|
|
47
45
|
...i
|
|
48
46
|
});
|
|
49
47
|
}
|
|
50
|
-
function
|
|
51
|
-
let { error: t, formItemId:
|
|
52
|
-
return
|
|
48
|
+
function S({ children: e }) {
|
|
49
|
+
let { error: t, formItemId: o, formDescriptionId: c, formMessageId: l } = y(), u = i.only(e);
|
|
50
|
+
return s(u) ? a(u, {
|
|
53
51
|
"data-slot": "form-control",
|
|
54
|
-
id:
|
|
55
|
-
"aria-describedby": t ? `${
|
|
56
|
-
"aria-invalid": !!t
|
|
57
|
-
|
|
58
|
-
});
|
|
52
|
+
id: o,
|
|
53
|
+
"aria-describedby": t ? `${c} ${l}` : c,
|
|
54
|
+
"aria-invalid": !!t
|
|
55
|
+
}) : /* @__PURE__ */ r(n, { children: e });
|
|
59
56
|
}
|
|
60
|
-
function
|
|
61
|
-
let { formDescriptionId: i } =
|
|
62
|
-
return /* @__PURE__ */
|
|
57
|
+
function C({ className: t, ...n }) {
|
|
58
|
+
let { formDescriptionId: i } = y();
|
|
59
|
+
return /* @__PURE__ */ r("p", {
|
|
63
60
|
"data-slot": "form-description",
|
|
64
61
|
id: i,
|
|
65
62
|
className: e("text-muted-foreground text-sm", t),
|
|
66
|
-
...
|
|
63
|
+
...n
|
|
67
64
|
});
|
|
68
65
|
}
|
|
69
|
-
function
|
|
70
|
-
let { error: i, formMessageId: a } =
|
|
71
|
-
return o ? /* @__PURE__ */
|
|
66
|
+
function w({ className: t, ...n }) {
|
|
67
|
+
let { error: i, formMessageId: a } = y(), o = i ? String(i?.message ?? "") : n.children;
|
|
68
|
+
return o ? /* @__PURE__ */ r("p", {
|
|
72
69
|
"data-slot": "form-message",
|
|
73
70
|
id: a,
|
|
74
71
|
className: e("text-destructive text-sm", t),
|
|
75
|
-
...
|
|
72
|
+
...n,
|
|
76
73
|
children: o
|
|
77
74
|
}) : null;
|
|
78
75
|
}
|
|
79
76
|
//#endregion
|
|
80
|
-
export {
|
|
77
|
+
export { h as Form, S as FormControl, C as FormDescription, v as FormField, b as FormItem, x as FormLabel, w as FormMessage, y as useFormField };
|
|
81
78
|
|
|
82
79
|
//# sourceMappingURL=form.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.js","names":[],"sources":["../../src/elements/form.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, useId, useMemo } from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"form.js","names":[],"sources":["../../src/elements/form.tsx"],"sourcesContent":["'use client';\n\nimport { Children, cloneElement, createContext, isValidElement, useContext, useId, useMemo } from 'react';\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 '@/elements/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 = createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = createContext<FormItemContextValue>({} as FormItemContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n const value = useMemo(() => ({ name: props.name }), [props.name]);\n\n return (\n <FormFieldContext.Provider value={value}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = useContext(FormFieldContext);\n const itemContext = useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\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\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = useId();\n const value = useMemo(() => ({ id }), [id]);\n\n return (\n <FormItemContext.Provider value={value}>\n <div data-slot=\"form-item\" className={cn('grid gap-2', className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\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({ children }: { children: React.ReactNode }) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n const child = Children.only(children);\n\n if (!isValidElement<Record<string, unknown>>(child)) {\n return <>{children}</>;\n }\n\n return cloneElement(child, {\n 'data-slot': 'form-control',\n id: formItemId,\n 'aria-describedby': !error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`,\n 'aria-invalid': !!error,\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 data-slot=\"form-message\" id={formMessageId} className={cn('text-destructive text-sm', className)} {...props}>\n {body}\n </p>\n );\n}\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n"],"mappings":";;;;;;;AAgBA,IAAM,IAAO,GASP,IAAmB,EAAqC,EAAE,CAA0B,EAMpF,IAAkB,EAAoC,EAAE,CAAyB,EAEjF,KAGJ,EACA,GAAG,QACuC;CAC1C,IAAM,IAAQ,SAAe,EAAE,MAAM,EAAM,MAAM,GAAG,CAAC,EAAM,KAAK,CAAC;AAEjE,QACE,kBAAC,EAAiB,UAAlB;EAAkC;YAChC,kBAAC,GAAD,EAAY,GAAI,GAAS,CAAA;EACC,CAAA;GAI1B,UAAqB;CACzB,IAAM,IAAe,EAAW,EAAiB,EAC3C,IAAc,EAAW,EAAgB,EACzC,EAAE,qBAAkB,GAAgB,EACpC,IAAY,EAAa,EAAE,MAAM,EAAa,MAAM,CAAC,EACrD,IAAa,EAAc,EAAa,MAAM,EAAU;AAE9D,KAAI,CAAC,EACH,OAAU,MAAM,iDAAiD;CAGnE,IAAM,EAAE,UAAO;AAEf,QAAO;EACL;EACA,MAAM,EAAa;EACnB,YAAY,GAAG,EAAG;EAClB,mBAAmB,GAAG,EAAG;EACzB,eAAe,GAAG,EAAG;EACrB,GAAG;EACJ;;AAGH,SAAS,EAAS,EAAE,cAAW,GAAG,KAAsC;CACtE,IAAM,IAAK,GAAO,EACZ,IAAQ,SAAe,EAAE,OAAI,GAAG,CAAC,EAAG,CAAC;AAE3C,QACE,kBAAC,EAAgB,UAAjB;EAAiC;YAC/B,kBAAC,OAAD;GAAK,aAAU;GAAY,WAAW,EAAG,cAAc,EAAU;GAAE,GAAI;GAAS,CAAA;EACvD,CAAA;;AAI/B,SAAS,EAAU,EAAE,cAAW,GAAG,KAA6C;CAC9E,IAAM,EAAE,UAAO,kBAAe,GAAc;AAE5C,QACE,kBAAC,GAAD;EACE,aAAU;EACV,cAAY,CAAC,CAAC;EACd,WAAW,EAAG,sCAAsC,EAAU;EAC9D,SAAS;EACT,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAY,EAAE,eAA2C;CAChE,IAAM,EAAE,UAAO,eAAY,sBAAmB,qBAAkB,GAAc,EACxE,IAAQ,EAAS,KAAK,EAAS;AAMrC,QAJK,EAAwC,EAAM,GAI5C,EAAa,GAAO;EACzB,aAAa;EACb,IAAI;EACJ,oBAAqB,IAA4B,GAAG,EAAkB,GAAG,MAA5C;EAC7B,gBAAgB,CAAC,CAAC;EACnB,CAAC,GARO,kBAAA,GAAA,EAAG,aAAY,CAAA;;AAW1B,SAAS,EAAgB,EAAE,cAAW,GAAG,KAAoC;CAC3E,IAAM,EAAE,yBAAsB,GAAc;AAE5C,QACE,kBAAC,KAAD;EACE,aAAU;EACV,IAAI;EACJ,WAAW,EAAG,iCAAiC,EAAU;EACzD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAY,EAAE,cAAW,GAAG,KAAoC;CACvE,IAAM,EAAE,UAAO,qBAAkB,GAAc,EACzC,IAAO,IAAQ,OAAO,GAAO,WAAW,GAAG,GAAG,EAAM;AAM1D,QAJK,IAKH,kBAAC,KAAD;EAAG,aAAU;EAAe,IAAI;EAAe,WAAW,EAAG,4BAA4B,EAAU;EAAE,GAAI;YACtG;EACC,CAAA,GANG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../lib/utils.cjs`),n=require(`./textarea.cjs`),r=require(`./button.cjs`),i=require(`./input.cjs`);let a=require(`react/jsx-runtime`),o=require(`class-variance-authority`),s=require(`react`);s=e.__toESM(s,1);function c({className:e,...n}){return(0,a.jsx)(`div`,{"data-slot":`input-group`,role:`group`,className:t.cn(`group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5`,e),...n})}var l=(0,o.cva)(`flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4`,{variants:{align:{"inline-start":`order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]`,"inline-end":`order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]`,"block-start":`order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2`,"block-end":`order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2`}},defaultVariants:{align:`inline-start`}});function u({className:e,align:n=`inline-start`,...r}){return(0,a.jsx)(`div`,{role:`group`,"data-slot":`input-group-addon`,"data-align":n,className:t.cn(l({align:n}),e),onClick:e=>{e.target.closest(`button`)||e.currentTarget.parentElement?.querySelector(`input`)?.focus()},...r})}var d=(0,o.cva)(`flex items-center gap-2 text-sm shadow-none`,{variants:{size:{xs:`h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5`,sm:``,"icon-xs":`size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0`,"icon-sm":`size-8 p-0 has-[>svg]:p-0`}},defaultVariants:{size:`xs`}});function f({className:e,type:n=`button`,variant:i=`ghost`,size:o=`xs`,...s}){return(0,a.jsx)(r.Button,{type:n,"data-size":o,variant:i,className:t.cn(d({size:o}),e),...s})}function p({className:e,...n}){return(0,a.jsx)(`span`,{className:t.cn(`flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4`,e),...n})}function m({className:e,...n}){return(0,a.jsx)(i.Input,{"data-slot":`input-group-control`,className:t.cn(`flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent`,e),...n})}function h({className:e,...r}){return(0,a.jsx)(n.Textarea,{"data-slot":`input-group-control`,className:t.cn(`flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent`,e),...r})}exports.InputGroup=c,exports.InputGroupAddon=u,exports.InputGroupButton=f,exports.InputGroupInput=m,exports.InputGroupText=p,exports.InputGroupTextarea=h;
|
|
2
|
+
//# sourceMappingURL=input-group.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-group.cjs","names":[],"sources":["../../src/elements/input-group.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Button } from '@/elements/button';\nimport { Input } from '@/elements/input';\nimport { Textarea } from '@/elements/textarea';\nimport { cn } from '@/lib/utils';\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n 'group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n 'inline-start': 'order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]',\n 'inline-end': 'order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]',\n 'block-start':\n 'order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2',\n 'block-end': 'order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n },\n);\n\nfunction InputGroupAddon({\n className,\n align = 'inline-start',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n // The click handler is a pointer-only convenience that forwards focus to the sibling input,\n // which is itself the keyboard-accessible control — no keyboard handler is needed.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest('button')) {\n return;\n }\n e.currentTarget.parentElement?.querySelector('input')?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva('flex items-center gap-2 text-sm shadow-none', {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: '',\n 'icon-xs': 'size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0',\n 'icon-sm': 'size-8 p-0 has-[>svg]:p-0',\n },\n },\n defaultVariants: {\n size: 'xs',\n },\n});\n\nfunction InputGroupButton({\n className,\n type = 'button',\n variant = 'ghost',\n size = 'xs',\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'size' | 'type'> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: 'button' | 'submit' | 'reset';\n }) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<'input'>) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n 'flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n 'flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea };\n"],"mappings":"+VAUA,SAAS,EAAW,CAAE,YAAW,GAAG,GAAsC,CACxE,OACE,EAAA,EAAA,KAAC,MAAD,CACE,YAAU,cACV,KAAK,QACL,UAAW,EAAA,GACT,wlCACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,IAAM,GAAA,EAAA,EAAA,KACJ,0PACA,CACE,SAAU,CACR,MAAO,CACL,eAAgB,uEAChB,aAAc,sEACd,cACE,oGACF,YAAa,mGACd,CACF,CACD,gBAAiB,CACf,MAAO,eACR,CACF,CACF,CAED,SAAS,EAAgB,CACvB,YACA,QAAQ,eACR,GAAG,GAC0E,CAC7E,OAIE,EAAA,EAAA,KAAC,MAAD,CACE,KAAK,QACL,YAAU,oBACV,aAAY,EACZ,UAAW,EAAA,GAAG,EAAwB,CAAE,QAAO,CAAC,CAAE,EAAU,CAC5D,QAAU,GAAM,CACT,EAAE,OAAuB,QAAQ,SAAS,EAG/C,EAAE,cAAc,eAAe,cAAc,QAAQ,EAAE,OAAO,EAEhE,GAAI,EACJ,CAAA,CAIN,IAAM,GAAA,EAAA,EAAA,KAA+B,8CAA+C,CAClF,SAAU,CACR,KAAM,CACJ,GAAI,4FACJ,GAAI,GACJ,UAAW,8DACX,UAAW,4BACZ,CACF,CACD,gBAAiB,CACf,KAAM,KACP,CACF,CAAC,CAEF,SAAS,EAAiB,CACxB,YACA,OAAO,SACP,UAAU,QACV,OAAO,KACP,GAAG,GAIA,CACH,OACE,EAAA,EAAA,KAAC,EAAA,OAAD,CACQ,OACN,YAAW,EACF,UACT,UAAW,EAAA,GAAG,EAAyB,CAAE,OAAM,CAAC,CAAE,EAAU,CAC5D,GAAI,EACJ,CAAA,CAIN,SAAS,EAAe,CAAE,YAAW,GAAG,GAAuC,CAC7E,OACE,EAAA,EAAA,KAAC,OAAD,CACE,UAAW,EAAA,GACT,yHACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,EAAgB,CAAE,YAAW,GAAG,GAAwC,CAC/E,OACE,EAAA,EAAA,KAAC,EAAA,MAAD,CACE,YAAU,sBACV,UAAW,EAAA,GACT,mLACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,EAAmB,CAAE,YAAW,GAAG,GAA2C,CACrF,OACE,EAAA,EAAA,KAAC,EAAA,SAAD,CACE,YAAU,sBACV,UAAW,EAAA,GACT,oMACA,EACD,CACD,GAAI,EACJ,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
import { Button } from '@/elements/button';
|
|
4
|
+
declare function InputGroup({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare const inputGroupAddonVariants: (props?: ({
|
|
6
|
+
align?: "inline-end" | "inline-start" | "block-start" | "block-end" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
declare function InputGroupAddon({ className, align, ...props }: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
declare const inputGroupButtonVariants: (props?: ({
|
|
10
|
+
size?: "sm" | "xs" | "icon-xs" | "icon-sm" | null | undefined;
|
|
11
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
12
|
+
declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React.ComponentProps<typeof Button>, 'size' | 'type'> & VariantProps<typeof inputGroupButtonVariants> & {
|
|
13
|
+
type?: 'button' | 'submit' | 'reset';
|
|
14
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
declare function InputGroupText({ className, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
declare function InputGroupInput({ className, ...props }: React.ComponentProps<'input'>): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
declare function InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn as e } from "../lib/utils.js";
|
|
3
|
+
import { Textarea as t } from "./textarea.js";
|
|
4
|
+
import { Button as n } from "./button.js";
|
|
5
|
+
import { Input as r } from "./input.js";
|
|
6
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
7
|
+
import { cva as a } from "class-variance-authority";
|
|
8
|
+
import "react";
|
|
9
|
+
//#region src/elements/input-group.tsx
|
|
10
|
+
function o({ className: t, ...n }) {
|
|
11
|
+
return /* @__PURE__ */ i("div", {
|
|
12
|
+
"data-slot": "input-group",
|
|
13
|
+
role: "group",
|
|
14
|
+
className: e("group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5", t),
|
|
15
|
+
...n
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
var s = a("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4", {
|
|
19
|
+
variants: { align: {
|
|
20
|
+
"inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
|
|
21
|
+
"inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
|
|
22
|
+
"block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
|
|
23
|
+
"block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
|
|
24
|
+
} },
|
|
25
|
+
defaultVariants: { align: "inline-start" }
|
|
26
|
+
});
|
|
27
|
+
function c({ className: t, align: n = "inline-start", ...r }) {
|
|
28
|
+
return /* @__PURE__ */ i("div", {
|
|
29
|
+
role: "group",
|
|
30
|
+
"data-slot": "input-group-addon",
|
|
31
|
+
"data-align": n,
|
|
32
|
+
className: e(s({ align: n }), t),
|
|
33
|
+
onClick: (e) => {
|
|
34
|
+
e.target.closest("button") || e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
35
|
+
},
|
|
36
|
+
...r
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
var l = a("flex items-center gap-2 text-sm shadow-none", {
|
|
40
|
+
variants: { size: {
|
|
41
|
+
xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
|
|
42
|
+
sm: "",
|
|
43
|
+
"icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
|
|
44
|
+
"icon-sm": "size-8 p-0 has-[>svg]:p-0"
|
|
45
|
+
} },
|
|
46
|
+
defaultVariants: { size: "xs" }
|
|
47
|
+
});
|
|
48
|
+
function u({ className: t, type: r = "button", variant: a = "ghost", size: o = "xs", ...s }) {
|
|
49
|
+
return /* @__PURE__ */ i(n, {
|
|
50
|
+
type: r,
|
|
51
|
+
"data-size": o,
|
|
52
|
+
variant: a,
|
|
53
|
+
className: e(l({ size: o }), t),
|
|
54
|
+
...s
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function d({ className: t, ...n }) {
|
|
58
|
+
return /* @__PURE__ */ i("span", {
|
|
59
|
+
className: e("flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", t),
|
|
60
|
+
...n
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function f({ className: t, ...n }) {
|
|
64
|
+
return /* @__PURE__ */ i(r, {
|
|
65
|
+
"data-slot": "input-group-control",
|
|
66
|
+
className: e("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", t),
|
|
67
|
+
...n
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function p({ className: n, ...r }) {
|
|
71
|
+
return /* @__PURE__ */ i(t, {
|
|
72
|
+
"data-slot": "input-group-control",
|
|
73
|
+
className: e("flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", n),
|
|
74
|
+
...r
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
export { o as InputGroup, c as InputGroupAddon, u as InputGroupButton, f as InputGroupInput, d as InputGroupText, p as InputGroupTextarea };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=input-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-group.js","names":[],"sources":["../../src/elements/input-group.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Button } from '@/elements/button';\nimport { Input } from '@/elements/input';\nimport { Textarea } from '@/elements/textarea';\nimport { cn } from '@/lib/utils';\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n 'group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n 'inline-start': 'order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]',\n 'inline-end': 'order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]',\n 'block-start':\n 'order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2',\n 'block-end': 'order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n },\n);\n\nfunction InputGroupAddon({\n className,\n align = 'inline-start',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n // The click handler is a pointer-only convenience that forwards focus to the sibling input,\n // which is itself the keyboard-accessible control — no keyboard handler is needed.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest('button')) {\n return;\n }\n e.currentTarget.parentElement?.querySelector('input')?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva('flex items-center gap-2 text-sm shadow-none', {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: '',\n 'icon-xs': 'size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0',\n 'icon-sm': 'size-8 p-0 has-[>svg]:p-0',\n },\n },\n defaultVariants: {\n size: 'xs',\n },\n});\n\nfunction InputGroupButton({\n className,\n type = 'button',\n variant = 'ghost',\n size = 'xs',\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'size' | 'type'> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: 'button' | 'submit' | 'reset';\n }) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<'input'>) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n 'flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n 'flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea };\n"],"mappings":";;;;;;;;;AAUA,SAAS,EAAW,EAAE,cAAW,GAAG,KAAsC;AACxE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,WAAW,EACT,ylCACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,IAAM,IAA0B,EAC9B,2PACA;CACE,UAAU,EACR,OAAO;EACL,gBAAgB;EAChB,cAAc;EACd,eACE;EACF,aAAa;EACd,EACF;CACD,iBAAiB,EACf,OAAO,gBACR;CACF,CACF;AAED,SAAS,EAAgB,EACvB,cACA,WAAQ,gBACR,GAAG,KAC0E;AAC7E,QAIE,kBAAC,OAAD;EACE,MAAK;EACL,aAAU;EACV,cAAY;EACZ,WAAW,EAAG,EAAwB,EAAE,UAAO,CAAC,EAAE,EAAU;EAC5D,UAAU,MAAM;AACT,KAAE,OAAuB,QAAQ,SAAS,IAG/C,EAAE,cAAc,eAAe,cAAc,QAAQ,EAAE,OAAO;;EAEhE,GAAI;EACJ,CAAA;;AAIN,IAAM,IAA2B,EAAI,+CAA+C;CAClF,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,WAAW;EACX,WAAW;EACZ,EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,CAAC;AAEF,SAAS,EAAiB,EACxB,cACA,UAAO,UACP,aAAU,SACV,UAAO,MACP,GAAG,KAIA;AACH,QACE,kBAAC,GAAD;EACQ;EACN,aAAW;EACF;EACT,WAAW,EAAG,EAAyB,EAAE,SAAM,CAAC,EAAE,EAAU;EAC5D,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAe,EAAE,cAAW,GAAG,KAAuC;AAC7E,QACE,kBAAC,QAAD;EACE,WAAW,EACT,0HACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAgB,EAAE,cAAW,GAAG,KAAwC;AAC/E,QACE,kBAAC,GAAD;EACE,aAAU;EACV,WAAW,EACT,oLACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAmB,EAAE,cAAW,GAAG,KAA2C;AACrF,QACE,kBAAC,GAAD;EACE,aAAU;EACV,WAAW,EACT,qMACA,EACD;EACD,GAAI;EACJ,CAAA"}
|
package/dist/elements/input.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../lib/utils.cjs`);let t=require(`react/jsx-runtime`);function
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../lib/utils.cjs`);let t=require(`react/jsx-runtime`),n=require(`@base-ui/react/input`);function r({className:r,type:i,...a}){return(0,t.jsx)(n.Input,{type:i,"data-slot":`input`,className:e.cn(`h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,r),...a})}exports.Input=r;
|
|
2
2
|
//# sourceMappingURL=input.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.cjs","names":[],"sources":["../../src/elements/input.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <
|
|
1
|
+
{"version":3,"file":"input.cjs","names":[],"sources":["../../src/elements/input.tsx"],"sourcesContent":["import { Input as InputPrimitive } from '@base-ui/react/input';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n 'h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n"],"mappings":"yNAIA,SAAS,EAAM,CAAE,YAAW,OAAM,GAAG,GAAwC,CAC3E,OACE,EAAA,EAAA,KAAC,EAAA,MAAD,CACQ,OACN,YAAU,QACV,UAAW,EAAA,GACT,4oBACA,EACD,CACD,GAAI,EACJ,CAAA"}
|
package/dist/elements/input.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { cn as e } from "../lib/utils.js";
|
|
2
2
|
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import { Input as n } from "@base-ui/react/input";
|
|
3
4
|
//#region src/elements/input.tsx
|
|
4
|
-
function
|
|
5
|
-
return /* @__PURE__ */ t(
|
|
6
|
-
type:
|
|
5
|
+
function r({ className: r, type: i, ...a }) {
|
|
6
|
+
return /* @__PURE__ */ t(n, {
|
|
7
|
+
type: i,
|
|
7
8
|
"data-slot": "input",
|
|
8
|
-
className: e("
|
|
9
|
-
...
|
|
9
|
+
className: e("h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", r),
|
|
10
|
+
...a
|
|
10
11
|
});
|
|
11
12
|
}
|
|
12
13
|
//#endregion
|
|
13
|
-
export {
|
|
14
|
+
export { r as Input };
|
|
14
15
|
|
|
15
16
|
//# sourceMappingURL=input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","names":[],"sources":["../../src/elements/input.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <
|
|
1
|
+
{"version":3,"file":"input.js","names":[],"sources":["../../src/elements/input.tsx"],"sourcesContent":["import { Input as InputPrimitive } from '@base-ui/react/input';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n 'h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n"],"mappings":";;;;AAIA,SAAS,EAAM,EAAE,cAAW,SAAM,GAAG,KAAwC;AAC3E,QACE,kBAAC,GAAD;EACQ;EACN,aAAU;EACV,WAAW,EACT,6oBACA,EACD;EACD,GAAI;EACJ,CAAA"}
|
package/dist/elements/label.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../lib/utils.cjs`);let n=require(`react/jsx-runtime`),r=require(
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../lib/utils.cjs`);let n=require(`react/jsx-runtime`),r=require(`react`);r=e.__toESM(r,1);function i({className:e,...r}){return(0,n.jsx)(`label`,{"data-slot":`label`,className:t.cn(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...r})}exports.Label=i;
|
|
2
2
|
//# sourceMappingURL=label.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.cjs","names":[],"sources":["../../src/elements/label.tsx"],"sourcesContent":["'use client';\n\nimport * as
|
|
1
|
+
{"version":3,"file":"label.cjs","names":[],"sources":["../../src/elements/label.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Label({ className, ...props }: React.ComponentProps<'label'>) {\n return (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label\n data-slot=\"label\"\n className={cn(\n 'flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n"],"mappings":"0OAMA,SAAS,EAAM,CAAE,YAAW,GAAG,GAAwC,CACrE,OAEE,EAAA,EAAA,KAAC,QAAD,CACE,YAAU,QACV,UAAW,EAAA,GACT,sNACA,EACD,CACD,GAAI,EACJ,CAAA"}
|
package/dist/elements/label.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
declare function Label({ className, ...props }: React.ComponentProps<
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
declare function Label({ className, ...props }: React.ComponentProps<'label'>): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export { Label };
|