@mieweb/ui 0.7.3-dev.2 → 0.7.3-dev.20
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/README.md +45 -24
- package/agent/README.md +20 -0
- package/agent/init-agent.mjs +61 -0
- package/agent/mieweb-ui.instructions.md +169 -0
- package/dist/ag-grid.cjs +11 -0
- package/dist/ag-grid.cjs.map +1 -1
- package/dist/ag-grid.d.cts +4 -0
- package/dist/ag-grid.d.ts +4 -0
- package/dist/ag-grid.js +11 -0
- package/dist/ag-grid.js.map +1 -1
- package/dist/brands/index.cjs +17 -17
- package/dist/brands/index.js +4 -4
- package/dist/chunk-3IMM2PM4.js +259 -0
- package/dist/chunk-3IMM2PM4.js.map +1 -0
- package/dist/{chunk-CVZYOMEW.js → chunk-3Z7CLG4U.js} +184 -3
- package/dist/chunk-3Z7CLG4U.js.map +1 -0
- package/dist/{chunk-Z4PECE5S.js → chunk-4PJ24GQ4.js} +2 -2
- package/dist/{chunk-Z4PECE5S.js.map → chunk-4PJ24GQ4.js.map} +1 -1
- package/dist/{chunk-ZBI52NP2.cjs → chunk-56QJHQ5C.cjs} +156 -39
- package/dist/chunk-56QJHQ5C.cjs.map +1 -0
- package/dist/{chunk-KRGKPUJH.js → chunk-5D253OQS.js} +7 -7
- package/dist/{chunk-KRGKPUJH.js.map → chunk-5D253OQS.js.map} +1 -1
- package/dist/chunk-6NZXWKUE.js +3 -0
- package/dist/chunk-6NZXWKUE.js.map +1 -0
- package/dist/{chunk-KFLDXJEE.js → chunk-753Z3NXL.js} +46 -15
- package/dist/chunk-753Z3NXL.js.map +1 -0
- package/dist/{chunk-S3MKIDYG.cjs → chunk-7AECNMYV.cjs} +46 -15
- package/dist/chunk-7AECNMYV.cjs.map +1 -0
- package/dist/{chunk-LC7YHZXM.js → chunk-A5YOIJKL.js} +5 -5
- package/dist/{chunk-LC7YHZXM.js.map → chunk-A5YOIJKL.js.map} +1 -1
- package/dist/{chunk-RBS3GHDZ.cjs → chunk-BOW7ZGI2.cjs} +4 -4
- package/dist/{chunk-RBS3GHDZ.cjs.map → chunk-BOW7ZGI2.cjs.map} +1 -1
- package/dist/{chunk-WUNWHOLA.cjs → chunk-BSDBI6H7.cjs} +116 -26
- package/dist/chunk-BSDBI6H7.cjs.map +1 -0
- package/dist/chunk-ELYGV32O.cjs +230 -0
- package/dist/chunk-ELYGV32O.cjs.map +1 -0
- package/dist/{chunk-QUUBTNMH.js → chunk-EPSB4WTL.js} +45 -15
- package/dist/chunk-EPSB4WTL.js.map +1 -0
- package/dist/chunk-F57VRLKP.js +708 -0
- package/dist/chunk-F57VRLKP.js.map +1 -0
- package/dist/{chunk-5IDYOJHO.cjs → chunk-G7EQ3JPX.cjs} +45 -15
- package/dist/chunk-G7EQ3JPX.cjs.map +1 -0
- package/dist/{chunk-FKLUSYFP.cjs → chunk-GQVL2JKQ.cjs} +4 -4
- package/dist/{chunk-FKLUSYFP.cjs.map → chunk-GQVL2JKQ.cjs.map} +1 -1
- package/dist/{chunk-3D4ITDLO.js → chunk-GXODR6V4.js} +3 -3
- package/dist/{chunk-3D4ITDLO.js.map → chunk-GXODR6V4.js.map} +1 -1
- package/dist/{chunk-AFGADE3B.js → chunk-H3YO5GBM.js} +117 -27
- package/dist/chunk-H3YO5GBM.js.map +1 -0
- package/dist/chunk-I44YNYI6.cjs +4 -0
- package/dist/chunk-I44YNYI6.cjs.map +1 -0
- package/dist/{chunk-EGWWTIWS.js → chunk-IILJGFI5.js} +125 -95
- package/dist/chunk-IILJGFI5.js.map +1 -0
- package/dist/{chunk-6J7UGYT5.cjs → chunk-JHGMZX4I.cjs} +47 -7
- package/dist/chunk-JHGMZX4I.cjs.map +1 -0
- package/dist/{chunk-JDHIBJ5K.cjs → chunk-JWTCEWQ4.cjs} +2 -2
- package/dist/{chunk-JDHIBJ5K.cjs.map → chunk-JWTCEWQ4.cjs.map} +1 -1
- package/dist/{chunk-GTHNWP4P.js → chunk-KGS7BL5T.js} +2 -2
- package/dist/{chunk-GTHNWP4P.js.map → chunk-KGS7BL5T.js.map} +1 -1
- package/dist/{chunk-URHXR5SC.cjs → chunk-KVE7PQ5P.cjs} +7 -7
- package/dist/{chunk-URHXR5SC.cjs.map → chunk-KVE7PQ5P.cjs.map} +1 -1
- package/dist/{chunk-LJBWCUKP.cjs → chunk-LGYGKLJL.cjs} +2 -2
- package/dist/{chunk-LJBWCUKP.cjs.map → chunk-LGYGKLJL.cjs.map} +1 -1
- package/dist/{chunk-SYIFEJSF.cjs → chunk-LQHI44OZ.cjs} +13 -13
- package/dist/{chunk-SYIFEJSF.cjs.map → chunk-LQHI44OZ.cjs.map} +1 -1
- package/dist/{chunk-HIDV32ZX.js → chunk-LZU7YBXG.js} +3 -3
- package/dist/{chunk-HIDV32ZX.js.map → chunk-LZU7YBXG.js.map} +1 -1
- package/dist/chunk-NMBYU7D7.cjs +31 -0
- package/dist/chunk-NMBYU7D7.cjs.map +1 -0
- package/dist/{chunk-P6L74SKG.js → chunk-QGZC43L7.js} +47 -7
- package/dist/chunk-QGZC43L7.js.map +1 -0
- package/dist/{chunk-FTRGZOVJ.js → chunk-QHTDWIED.js} +3 -3
- package/dist/{chunk-FTRGZOVJ.js.map → chunk-QHTDWIED.js.map} +1 -1
- package/dist/chunk-RUGHNFQG.js +28 -0
- package/dist/chunk-RUGHNFQG.js.map +1 -0
- package/dist/{chunk-MO65V64I.js → chunk-TXRQQMG5.js} +2 -2
- package/dist/{chunk-MO65V64I.js.map → chunk-TXRQQMG5.js.map} +1 -1
- package/dist/{chunk-OAHORW4N.cjs → chunk-U5TTXN45.cjs} +127 -97
- package/dist/chunk-U5TTXN45.cjs.map +1 -0
- package/dist/{chunk-MJFF4AXH.cjs → chunk-VNNFI5DQ.cjs} +184 -3
- package/dist/chunk-VNNFI5DQ.cjs.map +1 -0
- package/dist/{chunk-XB54G7WS.cjs → chunk-WG6MPHWK.cjs} +2 -2
- package/dist/{chunk-XB54G7WS.cjs.map → chunk-WG6MPHWK.cjs.map} +1 -1
- package/dist/{chunk-NQ2D2V6O.cjs → chunk-X5OS45WZ.cjs} +36 -36
- package/dist/{chunk-NQ2D2V6O.cjs.map → chunk-X5OS45WZ.cjs.map} +1 -1
- package/dist/{chunk-DLBV42JD.js → chunk-XBKOZRDO.js} +156 -39
- package/dist/chunk-XBKOZRDO.js.map +1 -0
- package/dist/chunk-XMECP2MD.js +208 -0
- package/dist/chunk-XMECP2MD.js.map +1 -0
- package/dist/chunk-YVIH26FG.cjs +736 -0
- package/dist/chunk-YVIH26FG.cjs.map +1 -0
- package/dist/chunk-Z5S5JEJD.cjs +286 -0
- package/dist/chunk-Z5S5JEJD.cjs.map +1 -0
- package/dist/{collabKit-QZL4P5T5.js → collabKit-A643VH2I.js} +7 -3
- package/dist/collabKit-A643VH2I.js.map +1 -0
- package/dist/{collabKit-UF7E6V3N.cjs → collabKit-Q4A36LDA.cjs} +7 -3
- package/dist/collabKit-Q4A36LDA.cjs.map +1 -0
- package/dist/components/Alert/index.d.cts +1 -1
- package/dist/components/Alert/index.d.ts +1 -1
- package/dist/components/Autocomplete/index.cjs +4 -3
- package/dist/components/Autocomplete/index.d.cts +20 -3
- package/dist/components/Autocomplete/index.d.ts +20 -3
- package/dist/components/Autocomplete/index.js +3 -2
- package/dist/components/Badge/index.d.cts +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/Card/index.d.cts +1 -1
- package/dist/components/Card/index.d.ts +1 -1
- package/dist/components/Checkbox/index.cjs +5 -4
- package/dist/components/Checkbox/index.d.cts +9 -1
- package/dist/components/Checkbox/index.d.ts +9 -1
- package/dist/components/Checkbox/index.js +2 -1
- package/dist/components/CustomizableDashboard/index.cjs +43 -0
- package/dist/components/CustomizableDashboard/index.cjs.map +1 -0
- package/dist/components/CustomizableDashboard/index.d.cts +195 -0
- package/dist/components/CustomizableDashboard/index.d.ts +195 -0
- package/dist/components/CustomizableDashboard/index.js +10 -0
- package/dist/components/CustomizableDashboard/index.js.map +1 -0
- package/dist/components/DateInput/index.cjs +4 -3
- package/dist/components/DateInput/index.d.cts +1 -0
- package/dist/components/DateInput/index.d.ts +1 -0
- package/dist/components/DateInput/index.js +3 -2
- package/dist/components/Dropdown/index.cjs +9 -8
- package/dist/components/Dropdown/index.js +3 -2
- package/dist/components/Input/index.cjs +20 -3
- package/dist/components/Input/index.d.cts +37 -2
- package/dist/components/Input/index.d.ts +37 -2
- package/dist/components/Input/index.js +2 -1
- package/dist/components/Markdown/index.cjs +10 -10
- package/dist/components/Markdown/index.js +2 -2
- package/dist/components/MediaEditor/index.cjs +10 -9
- package/dist/components/MediaEditor/index.js +5 -4
- package/dist/components/PhoneInput/index.cjs +5 -4
- package/dist/components/PhoneInput/index.js +3 -2
- package/dist/components/Progress/index.d.cts +1 -1
- package/dist/components/Progress/index.d.ts +1 -1
- package/dist/components/Radio/index.cjs +5 -4
- package/dist/components/Radio/index.d.cts +9 -1
- package/dist/components/Radio/index.d.ts +9 -1
- package/dist/components/Radio/index.js +2 -1
- package/dist/components/RichTextEditor/index.cjs +7 -6
- package/dist/components/RichTextEditor/index.js +4 -3
- package/dist/components/Select/index.cjs +5 -3
- package/dist/components/Select/index.d.cts +56 -9
- package/dist/components/Select/index.d.ts +56 -9
- package/dist/components/Select/index.js +3 -1
- package/dist/components/Slider/index.d.cts +2 -2
- package/dist/components/Slider/index.d.ts +2 -2
- package/dist/components/SourceTip/index.cjs +15 -0
- package/dist/components/SourceTip/index.cjs.map +1 -0
- package/dist/components/SourceTip/index.d.cts +58 -0
- package/dist/components/SourceTip/index.d.ts +58 -0
- package/dist/components/SourceTip/index.js +6 -0
- package/dist/components/SourceTip/index.js.map +1 -0
- package/dist/components/Spinner/index.d.cts +1 -1
- package/dist/components/Spinner/index.d.ts +1 -1
- package/dist/components/SuperChat/index.cjs +7 -6
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.js +3 -2
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +2 -22
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
- package/dist/components/SuperChat/plugins/index.js +1 -21
- package/dist/components/SuperChat/plugins/index.js.map +1 -1
- package/dist/components/Text/index.d.cts +1 -1
- package/dist/components/Text/index.d.ts +1 -1
- package/dist/components/Textarea/index.cjs +5 -3
- package/dist/components/Textarea/index.d.cts +19 -1
- package/dist/components/Textarea/index.d.ts +19 -1
- package/dist/components/Textarea/index.js +3 -1
- package/dist/esheet.cjs +10 -9
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +7 -6
- package/dist/esheet.js.map +1 -1
- package/dist/hooks/index.cjs +23 -14
- package/dist/hooks/index.d.cts +16 -1
- package/dist/hooks/index.d.ts +16 -1
- package/dist/hooks/index.js +2 -1
- package/dist/index.cjs +753 -445
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +73 -10
- package/dist/index.d.ts +73 -10
- package/dist/index.js +291 -40
- package/dist/index.js.map +1 -1
- package/dist/kerebron.cjs +200 -68
- package/dist/kerebron.cjs.map +1 -1
- package/dist/kerebron.css +129 -0
- package/dist/kerebron.d.cts +52 -3
- package/dist/kerebron.d.ts +52 -3
- package/dist/kerebron.js +201 -69
- package/dist/kerebron.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/utils/index.cjs +9 -9
- package/dist/utils/index.js +1 -1
- package/package.json +11 -4
- package/dist/chunk-5IDYOJHO.cjs.map +0 -1
- package/dist/chunk-6ECKH4DJ.cjs +0 -147
- package/dist/chunk-6ECKH4DJ.cjs.map +0 -1
- package/dist/chunk-6J7UGYT5.cjs.map +0 -1
- package/dist/chunk-AFGADE3B.js.map +0 -1
- package/dist/chunk-CVZYOMEW.js.map +0 -1
- package/dist/chunk-DLBV42JD.js.map +0 -1
- package/dist/chunk-EGWWTIWS.js.map +0 -1
- package/dist/chunk-KFLDXJEE.js.map +0 -1
- package/dist/chunk-MJFF4AXH.cjs.map +0 -1
- package/dist/chunk-OAHORW4N.cjs.map +0 -1
- package/dist/chunk-P6L74SKG.js.map +0 -1
- package/dist/chunk-QUUBTNMH.js.map +0 -1
- package/dist/chunk-S3MKIDYG.cjs.map +0 -1
- package/dist/chunk-WUNWHOLA.cjs.map +0 -1
- package/dist/chunk-YXCE2HSK.js +0 -124
- package/dist/chunk-YXCE2HSK.js.map +0 -1
- package/dist/chunk-ZBI52NP2.cjs.map +0 -1
- package/dist/collabKit-QZL4P5T5.js.map +0 -1
- package/dist/collabKit-UF7E6V3N.cjs.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { RequiredMark } from './chunk-3IMM2PM4.js';
|
|
1
2
|
import { cn } from './chunk-TQONQSJO.js';
|
|
2
3
|
import * as React from 'react';
|
|
3
4
|
import { cva } from 'class-variance-authority';
|
|
4
|
-
import {
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
6
|
|
|
6
7
|
var textareaVariants = cva(
|
|
7
8
|
[
|
|
@@ -30,12 +31,71 @@ var textareaVariants = cva(
|
|
|
30
31
|
vertical: "resize-y",
|
|
31
32
|
horizontal: "resize-x",
|
|
32
33
|
both: "resize"
|
|
34
|
+
},
|
|
35
|
+
labelVariant: {
|
|
36
|
+
stacked: "",
|
|
37
|
+
floating: "peer placeholder:text-transparent"
|
|
33
38
|
}
|
|
34
39
|
},
|
|
40
|
+
compoundVariants: [
|
|
41
|
+
// Floating labels reserve top padding so entered text always starts
|
|
42
|
+
// below the floated label, plus a little extra min-height.
|
|
43
|
+
{
|
|
44
|
+
labelVariant: "floating",
|
|
45
|
+
size: "sm",
|
|
46
|
+
className: "pt-5 min-h-[76px]"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
labelVariant: "floating",
|
|
50
|
+
size: "md",
|
|
51
|
+
className: "pt-6 min-h-[96px]"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
labelVariant: "floating",
|
|
55
|
+
size: "lg",
|
|
56
|
+
className: "pt-7 min-h-[120px]"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
35
59
|
defaultVariants: {
|
|
36
60
|
size: "md",
|
|
37
61
|
hasError: false,
|
|
38
|
-
resize: "vertical"
|
|
62
|
+
resize: "vertical",
|
|
63
|
+
labelVariant: "stacked"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
var floatingLabelVariants = cva(
|
|
68
|
+
[
|
|
69
|
+
"absolute start-3 pointer-events-none select-none",
|
|
70
|
+
"transition-all duration-200 ease-out"
|
|
71
|
+
],
|
|
72
|
+
{
|
|
73
|
+
variants: {
|
|
74
|
+
size: {
|
|
75
|
+
sm: [
|
|
76
|
+
"text-sm top-3",
|
|
77
|
+
"peer-focus:top-1 peer-[:not(:placeholder-shown)]:top-1 peer-autofill:top-1",
|
|
78
|
+
"peer-focus:text-[0.65rem] peer-[:not(:placeholder-shown)]:text-[0.65rem] peer-autofill:text-[0.65rem]"
|
|
79
|
+
],
|
|
80
|
+
md: [
|
|
81
|
+
"text-base top-4",
|
|
82
|
+
"peer-focus:top-1.5 peer-[:not(:placeholder-shown)]:top-1.5 peer-autofill:top-1.5",
|
|
83
|
+
"peer-focus:text-xs peer-[:not(:placeholder-shown)]:text-xs peer-autofill:text-xs"
|
|
84
|
+
],
|
|
85
|
+
lg: [
|
|
86
|
+
"text-lg top-5",
|
|
87
|
+
"peer-focus:top-2 peer-[:not(:placeholder-shown)]:top-2 peer-autofill:top-2",
|
|
88
|
+
"peer-focus:text-sm peer-[:not(:placeholder-shown)]:text-sm peer-autofill:text-sm"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
hasError: {
|
|
92
|
+
true: "text-destructive",
|
|
93
|
+
false: "text-muted-foreground"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
defaultVariants: {
|
|
97
|
+
size: "md",
|
|
98
|
+
hasError: false
|
|
39
99
|
}
|
|
40
100
|
}
|
|
41
101
|
);
|
|
@@ -46,16 +106,20 @@ var Textarea = React.forwardRef(
|
|
|
46
106
|
hasError,
|
|
47
107
|
resize,
|
|
48
108
|
label,
|
|
109
|
+
labelVariant = "stacked",
|
|
49
110
|
hideLabel,
|
|
50
111
|
error,
|
|
51
112
|
helperText,
|
|
52
113
|
maxLength,
|
|
53
114
|
showCount = false,
|
|
54
115
|
autoResize = false,
|
|
116
|
+
required = false,
|
|
117
|
+
requiredVariant,
|
|
55
118
|
id,
|
|
56
119
|
value,
|
|
57
120
|
defaultValue,
|
|
58
121
|
onChange,
|
|
122
|
+
placeholder,
|
|
59
123
|
"aria-describedby": ariaDescribedBy,
|
|
60
124
|
...props
|
|
61
125
|
}, ref) => {
|
|
@@ -97,8 +161,36 @@ var Textarea = React.forwardRef(
|
|
|
97
161
|
showCount ? countId : null,
|
|
98
162
|
ariaDescribedBy
|
|
99
163
|
].filter(Boolean).join(" ");
|
|
164
|
+
const isFloating = labelVariant === "floating" && !!label && !hideLabel;
|
|
165
|
+
const requiredMark = required && /* @__PURE__ */ jsx(RequiredMark, { variant: requiredVariant });
|
|
166
|
+
const textareaElement = /* @__PURE__ */ jsx(
|
|
167
|
+
"textarea",
|
|
168
|
+
{
|
|
169
|
+
"data-slot": "textarea",
|
|
170
|
+
ref: internalRef,
|
|
171
|
+
id: textareaId,
|
|
172
|
+
value,
|
|
173
|
+
defaultValue: value === void 0 ? defaultValue : void 0,
|
|
174
|
+
onChange: handleChange,
|
|
175
|
+
maxLength,
|
|
176
|
+
"aria-invalid": hasError || !!error,
|
|
177
|
+
"aria-describedby": describedByIds || void 0,
|
|
178
|
+
required,
|
|
179
|
+
placeholder: isFloating ? " " : placeholder,
|
|
180
|
+
className: cn(
|
|
181
|
+
textareaVariants({
|
|
182
|
+
size,
|
|
183
|
+
hasError: hasError || !!error,
|
|
184
|
+
resize: autoResize ? "none" : resize,
|
|
185
|
+
labelVariant: isFloating ? "floating" : "stacked"
|
|
186
|
+
}),
|
|
187
|
+
className
|
|
188
|
+
),
|
|
189
|
+
...props
|
|
190
|
+
}
|
|
191
|
+
);
|
|
100
192
|
return /* @__PURE__ */ jsxs("div", { "data-slot": "textarea-wrapper", className: "flex flex-col gap-1.5", children: [
|
|
101
|
-
label && /* @__PURE__ */
|
|
193
|
+
label && !isFloating && /* @__PURE__ */ jsxs(
|
|
102
194
|
"label",
|
|
103
195
|
{
|
|
104
196
|
"data-slot": "textarea-label",
|
|
@@ -107,32 +199,30 @@ var Textarea = React.forwardRef(
|
|
|
107
199
|
"text-foreground text-sm font-medium",
|
|
108
200
|
hideLabel && "sr-only"
|
|
109
201
|
),
|
|
110
|
-
children:
|
|
202
|
+
children: [
|
|
203
|
+
label,
|
|
204
|
+
requiredMark
|
|
205
|
+
]
|
|
111
206
|
}
|
|
112
207
|
),
|
|
113
|
-
/* @__PURE__ */
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
"
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
onChange: handleChange,
|
|
122
|
-
maxLength,
|
|
123
|
-
"aria-invalid": hasError || !!error,
|
|
124
|
-
"aria-describedby": describedByIds || void 0,
|
|
125
|
-
className: cn(
|
|
126
|
-
textareaVariants({
|
|
208
|
+
isFloating ? /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
209
|
+
textareaElement,
|
|
210
|
+
/* @__PURE__ */ jsxs(
|
|
211
|
+
"label",
|
|
212
|
+
{
|
|
213
|
+
"data-slot": "textarea-label",
|
|
214
|
+
htmlFor: textareaId,
|
|
215
|
+
className: floatingLabelVariants({
|
|
127
216
|
size,
|
|
128
|
-
hasError: hasError || !!error
|
|
129
|
-
resize: autoResize ? "none" : resize
|
|
217
|
+
hasError: hasError || !!error
|
|
130
218
|
}),
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
219
|
+
children: [
|
|
220
|
+
label,
|
|
221
|
+
requiredMark
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
)
|
|
225
|
+
] }) : textareaElement,
|
|
136
226
|
/* @__PURE__ */ jsxs(
|
|
137
227
|
"div",
|
|
138
228
|
{
|
|
@@ -184,5 +274,5 @@ var Textarea = React.forwardRef(
|
|
|
184
274
|
Textarea.displayName = "Textarea";
|
|
185
275
|
|
|
186
276
|
export { Textarea, textareaVariants };
|
|
187
|
-
//# sourceMappingURL=chunk-
|
|
188
|
-
//# sourceMappingURL=chunk-
|
|
277
|
+
//# sourceMappingURL=chunk-H3YO5GBM.js.map
|
|
278
|
+
//# sourceMappingURL=chunk-H3YO5GBM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":";;;;;;AAKA,IAAM,gBAAA,GAAmB,GAAA;AAAA,EACvB;AAAA,IACE,kBAAA;AAAA,IACA,gCAAA;AAAA,IACA,+BAAA;AAAA,IACA,mCAAA;AAAA,IACA,gCAAA;AAAA,IACA,0EAAA;AAAA,IACA,iDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,sBAAA;AAAA,QACJ,EAAA,EAAI,wBAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,2CAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,aAAA;AAAA,QACN,QAAA,EAAU,UAAA;AAAA,QACV,UAAA,EAAY,UAAA;AAAA,QACZ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,OAAA,EAAS,EAAA;AAAA,QACT,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA;AAAA;AAAA,MAGhB;AAAA,QACE,YAAA,EAAc,UAAA;AAAA,QACd,IAAA,EAAM,IAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACb;AAAA,MACA;AAAA,QACE,YAAA,EAAc,UAAA;AAAA,QACd,IAAA,EAAM,IAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACb;AAAA,MACA;AAAA,QACE,YAAA,EAAc,UAAA;AAAA,QACd,IAAA,EAAM,IAAA;AAAA,QACN,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,UAAA;AAAA,MACR,YAAA,EAAc;AAAA;AAChB;AAEJ;AAEA,IAAM,qBAAA,GAAwB,GAAA;AAAA,EAC5B;AAAA,IACE,kDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI;AAAA,UACF,eAAA;AAAA,UACA,4EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,EAAA,EAAI;AAAA,UACF,iBAAA;AAAA,UACA,kFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,EAAA,EAAI;AAAA,UACF,eAAA;AAAA,UACA,4EAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,kBAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;AAmDA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CACE;AAAA,IACE,SAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA,GAAe,SAAA;AAAA,IACf,SAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,UAAA,GAAa,KAAA;AAAA,IACb,QAAA,GAAW,KAAA;AAAA,IACX,eAAA;AAAA,IACA,EAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA,EAAoB,eAAA;AAAA,IACpB,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAoB,aAA4B,IAAI,CAAA;AAC1D,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,MAC7C,YAAA,IAA2B;AAAA,KAC9B;AAEA,IAAA,MAAM,cAAoB,KAAA,CAAA,KAAA,EAAM;AAChC,IAAA,MAAM,aAAa,EAAA,IAAM,WAAA;AACzB,IAAA,MAAM,OAAA,GAAU,GAAG,UAAU,CAAA,MAAA,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,GAAG,UAAU,CAAA,OAAA,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,GAAG,UAAU,CAAA,MAAA,CAAA;AAG7B,IAAM,KAAA,CAAA,mBAAA,CAAoB,GAAA,EAAK,MAAM,WAAA,CAAY,OAAQ,CAAA;AAGzD,IAAA,MAAM,YAAA,GAAe,KAAA,KAAU,MAAA,GAAY,MAAA,CAAO,KAAK,CAAA,GAAI,aAAA;AAC3D,IAAA,MAAM,iBAAiB,YAAA,CAAa,MAAA;AAGpC,IAAA,MAAM,YAAA,GAAqB,kBAAY,MAAM;AAC3C,MAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,MAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,QAAA,QAAA,CAAS,MAAM,MAAA,GAAS,MAAA;AACxB,QAAA,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,QAAA,CAAS,YAAY,CAAA,EAAA,CAAA;AAAA,MAClD;AAAA,IACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,IAAM,gBAAU,MAAM;AACpB,MAAA,YAAA,EAAa;AAAA,IACf,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAG/B,IAAA,MAAM,YAAA,GAAqB,KAAA,CAAA,WAAA;AAAA,MACzB,CAAC,CAAA,KAA8C;AAC7C,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,gBAAA,CAAiB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACjC;AACA,QAAA,QAAA,GAAW,CAAC,CAAA;AACZ,QAAA,YAAA,EAAa;AAAA,MACf,CAAA;AAAA,MACA,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY;AAAA,KAChC;AAGA,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,QAAQ,OAAA,GAAU,IAAA;AAAA,MAClB,UAAA,IAAc,CAAC,KAAA,GAAQ,QAAA,GAAW,IAAA;AAAA,MAClC,YAAY,OAAA,GAAU,IAAA;AAAA,MACtB;AAAA,KACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,IAAA,MAAM,aAAa,YAAA,KAAiB,UAAA,IAAc,CAAC,CAAC,SAAS,CAAC,SAAA;AAE9D,IAAA,MAAM,YAAA,GAAe,QAAA,oBAAY,GAAA,CAAC,YAAA,EAAA,EAAa,SAAS,eAAA,EAAiB,CAAA;AAEzE,IAAA,MAAM,eAAA,mBACJ,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,UAAA;AAAA,QACV,GAAA,EAAK,WAAA;AAAA,QACL,EAAA,EAAI,UAAA;AAAA,QACJ,KAAA;AAAA,QACA,YAAA,EAAc,KAAA,KAAU,MAAA,GAAY,YAAA,GAAe,MAAA;AAAA,QACnD,QAAA,EAAU,YAAA;AAAA,QACV,SAAA;AAAA,QACA,cAAA,EAAc,QAAA,IAAY,CAAC,CAAC,KAAA;AAAA,QAC5B,oBAAkB,cAAA,IAAkB,MAAA;AAAA,QACpC,QAAA;AAAA,QAGA,WAAA,EAAa,aAAa,GAAA,GAAM,WAAA;AAAA,QAChC,SAAA,EAAW,EAAA;AAAA,UACT,gBAAA,CAAiB;AAAA,YACf,IAAA;AAAA,YACA,QAAA,EAAU,QAAA,IAAY,CAAC,CAAC,KAAA;AAAA,YACxB,MAAA,EAAQ,aAAa,MAAA,GAAS,MAAA;AAAA,YAC9B,YAAA,EAAc,aAAa,UAAA,GAAa;AAAA,WACzC,CAAA;AAAA,UACD;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAGF,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,kBAAA,EAAmB,WAAU,uBAAA,EACzC,QAAA,EAAA;AAAA,MAAA,KAAA,IAAS,CAAC,UAAA,oBACT,IAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,gBAAA;AAAA,UACV,OAAA,EAAS,UAAA;AAAA,UACT,SAAA,EAAW,EAAA;AAAA,YACT,qCAAA;AAAA,YACA,SAAA,IAAa;AAAA,WACf;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,YACA;AAAA;AAAA;AAAA,OACH;AAAA,MAED,UAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA;AAAA,QAAA,eAAA;AAAA,wBACD,IAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,gBAAA;AAAA,YACV,OAAA,EAAS,UAAA;AAAA,YACT,WAAW,qBAAA,CAAsB;AAAA,cAC/B,IAAA;AAAA,cACA,QAAA,EAAU,QAAA,IAAY,CAAC,CAAC;AAAA,aACzB,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,cAAA,KAAA;AAAA,cACA;AAAA;AAAA;AAAA;AACH,OAAA,EACF,CAAA,GAEA,eAAA;AAAA,sBAEF,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,iBAAA;AAAA,UACV,SAAA,EAAU,yCAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,QAAA,EACZ,QAAA,EAAA;AAAA,cAAA,KAAA,oBACC,GAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAI,OAAA;AAAA,kBACJ,WAAA,EAAU,gBAAA;AAAA,kBACV,SAAA,EAAU,wDAAA;AAAA,kBACV,IAAA,EAAK,OAAA;AAAA,kBAEJ,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cAED,UAAA,IAAc,CAAC,KAAA,oBACd,GAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAI,QAAA;AAAA,kBACJ,WAAA,EAAU,iBAAA;AAAA,kBACV,SAAA,EAAU,+BAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA;AACH,aAAA,EAEJ,CAAA;AAAA,YACC,SAAA,oBACC,IAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,OAAA;AAAA,gBACJ,WAAA,EAAU,gBAAA;AAAA,gBACV,SAAA,EAAW,EAAA;AAAA,kBACT,wCAAA;AAAA,kBACA,SAAA,IAAa,kBAAkB,SAAA,IAAa;AAAA,iBAC9C;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,cAAA;AAAA,kBACA,SAAA,IAAa,IAAI,SAAS,CAAA;AAAA;AAAA;AAAA;AAC7B;AAAA;AAAA;AAEJ,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-H3YO5GBM.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { RequiredMark, type RequiredMarkVariant } from '../Input';\n\nconst textareaVariants = cva(\n [\n 'w-full px-3 py-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'placeholder:text-muted-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'resize-y',\n ],\n {\n variants: {\n size: {\n sm: 'text-sm min-h-[60px]',\n md: 'text-base min-h-[80px]',\n lg: 'text-lg min-h-[100px]',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n resize: {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n },\n labelVariant: {\n stacked: '',\n floating: 'peer placeholder:text-transparent',\n },\n },\n compoundVariants: [\n // Floating labels reserve top padding so entered text always starts\n // below the floated label, plus a little extra min-height.\n {\n labelVariant: 'floating',\n size: 'sm',\n className: 'pt-5 min-h-[76px]',\n },\n {\n labelVariant: 'floating',\n size: 'md',\n className: 'pt-6 min-h-[96px]',\n },\n {\n labelVariant: 'floating',\n size: 'lg',\n className: 'pt-7 min-h-[120px]',\n },\n ],\n defaultVariants: {\n size: 'md',\n hasError: false,\n resize: 'vertical',\n labelVariant: 'stacked',\n },\n }\n);\n\nconst floatingLabelVariants = cva(\n [\n 'absolute start-3 pointer-events-none select-none',\n 'transition-all duration-200 ease-out',\n ],\n {\n variants: {\n size: {\n sm: [\n 'text-sm top-3',\n 'peer-focus:top-1 peer-[:not(:placeholder-shown)]:top-1 peer-autofill:top-1',\n 'peer-focus:text-[0.65rem] peer-[:not(:placeholder-shown)]:text-[0.65rem] peer-autofill:text-[0.65rem]',\n ],\n md: [\n 'text-base top-4',\n 'peer-focus:top-1.5 peer-[:not(:placeholder-shown)]:top-1.5 peer-autofill:top-1.5',\n 'peer-focus:text-xs peer-[:not(:placeholder-shown)]:text-xs peer-autofill:text-xs',\n ],\n lg: [\n 'text-lg top-5',\n 'peer-focus:top-2 peer-[:not(:placeholder-shown)]:top-2 peer-autofill:top-2',\n 'peer-focus:text-sm peer-[:not(:placeholder-shown)]:text-sm peer-autofill:text-sm',\n ],\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\nexport interface TextareaProps\n extends\n Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'>,\n Omit<VariantProps<typeof textareaVariants>, 'labelVariant'> {\n /** Label for the textarea */\n label?: string;\n /**\n * How the label is rendered.\n * - `stacked` (default): label above the textarea.\n * - `floating`: label rests inside the textarea like a placeholder and\n * floats to the top (staying inside it) when focused or filled.\n * Ignores `placeholder`; when `hideLabel` is set, falls back to a\n * visually-hidden stacked label.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Whether the label should be visually hidden */\n hideLabel?: boolean;\n /** Error message to display */\n error?: string;\n /** Helper text to display */\n helperText?: string;\n /** Maximum character count */\n maxLength?: number;\n /** Show character count */\n showCount?: boolean;\n /** Auto-resize based on content */\n autoResize?: boolean;\n /**\n * Color of the required asterisk.\n * - `default`: destructive (hard requirement).\n * - `warning`: warning color (soft requirement / recommended).\n */\n requiredVariant?: RequiredMarkVariant;\n}\n\n/**\n * A multi-line text input component with character count and auto-resize.\n *\n * @example\n * ```tsx\n * <Textarea label=\"Description\" placeholder=\"Enter a description...\" />\n * <Textarea\n * label=\"Bio\"\n * maxLength={280}\n * showCount\n * helperText=\"Tell us about yourself\"\n * />\n * ```\n */\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n size,\n hasError,\n resize,\n label,\n labelVariant = 'stacked',\n hideLabel,\n error,\n helperText,\n maxLength,\n showCount = false,\n autoResize = false,\n required = false,\n requiredVariant,\n id,\n value,\n defaultValue,\n onChange,\n placeholder,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) => {\n const internalRef = React.useRef<HTMLTextAreaElement>(null);\n const [internalValue, setInternalValue] = React.useState(\n (defaultValue as string) || ''\n );\n\n const generatedId = React.useId();\n const textareaId = id || generatedId;\n const errorId = `${textareaId}-error`;\n const helperId = `${textareaId}-helper`;\n const countId = `${textareaId}-count`;\n\n // Combine refs\n React.useImperativeHandle(ref, () => internalRef.current!);\n\n // Get current value\n const currentValue = value !== undefined ? String(value) : internalValue;\n const characterCount = currentValue.length;\n\n // Auto-resize logic\n const adjustHeight = React.useCallback(() => {\n const textarea = internalRef.current;\n if (textarea && autoResize) {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [autoResize]);\n\n React.useEffect(() => {\n adjustHeight();\n }, [currentValue, adjustHeight]);\n\n // Handle change\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n adjustHeight();\n },\n [value, onChange, adjustHeight]\n );\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n showCount ? countId : null,\n ariaDescribedBy,\n ]\n .filter(Boolean)\n .join(' ');\n\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n\n const requiredMark = required && <RequiredMark variant={requiredVariant} />;\n\n const textareaElement = (\n <textarea\n data-slot=\"textarea\"\n ref={internalRef}\n id={textareaId}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n onChange={handleChange}\n maxLength={maxLength}\n aria-invalid={hasError || !!error}\n aria-describedby={describedByIds || undefined}\n required={required}\n // A single-space placeholder keeps :placeholder-shown reliable so the\n // label can float via CSS alone.\n placeholder={isFloating ? ' ' : placeholder}\n className={cn(\n textareaVariants({\n size,\n hasError: hasError || !!error,\n resize: autoResize ? 'none' : resize,\n labelVariant: isFloating ? 'floating' : 'stacked',\n }),\n className\n )}\n {...props}\n />\n );\n\n return (\n <div data-slot=\"textarea-wrapper\" className=\"flex flex-col gap-1.5\">\n {label && !isFloating && (\n <label\n data-slot=\"textarea-label\"\n htmlFor={textareaId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {requiredMark}\n </label>\n )}\n {isFloating ? (\n <div className=\"relative\">\n {textareaElement}\n <label\n data-slot=\"textarea-label\"\n htmlFor={textareaId}\n className={floatingLabelVariants({\n size,\n hasError: hasError || !!error,\n })}\n >\n {label}\n {requiredMark}\n </label>\n </div>\n ) : (\n textareaElement\n )}\n <div\n data-slot=\"textarea-footer\"\n className=\"flex items-center justify-between gap-2\"\n >\n <div className=\"flex-1\">\n {error && (\n <p\n id={errorId}\n data-slot=\"textarea-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"textarea-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n {showCount && (\n <p\n id={countId}\n data-slot=\"textarea-count\"\n className={cn(\n 'text-muted-foreground shrink-0 text-xs',\n maxLength && characterCount >= maxLength && 'text-destructive'\n )}\n >\n {characterCount}\n {maxLength && `/${maxLength}`}\n </p>\n )}\n </div>\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n\nexport { Textarea, textareaVariants };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-I44YNYI6.cjs"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Input } from './chunk-
|
|
1
|
+
import { Input, inputVariants, floatingLabelVariants, RequiredMark } from './chunk-3IMM2PM4.js';
|
|
2
2
|
import { useAnchoredPosition } from './chunk-BOOJDRJO.js';
|
|
3
3
|
import { formatDateValue, parseDateValue, isValidDate, isDateInFuture, isDateInPast, calculateAge } from './chunk-RC2YMOMS.js';
|
|
4
4
|
import { cn } from './chunk-TQONQSJO.js';
|
|
@@ -13,11 +13,6 @@ var widthClasses = {
|
|
|
13
13
|
fixed: "w-44"
|
|
14
14
|
// ~176px - enough for MM/DD/YYYY + calendar icon
|
|
15
15
|
};
|
|
16
|
-
var sizeClasses = {
|
|
17
|
-
sm: "h-8 text-sm",
|
|
18
|
-
md: "h-10 text-base",
|
|
19
|
-
lg: "h-12 text-lg"
|
|
20
|
-
};
|
|
21
16
|
var MONTH_NAMES = [
|
|
22
17
|
"January",
|
|
23
18
|
"February",
|
|
@@ -653,104 +648,139 @@ var DateInput = React.forwardRef(
|
|
|
653
648
|
);
|
|
654
649
|
}
|
|
655
650
|
if (showCalendar || inputType !== "date") {
|
|
656
|
-
const {
|
|
651
|
+
const {
|
|
652
|
+
label,
|
|
653
|
+
labelVariant,
|
|
654
|
+
helperText,
|
|
655
|
+
hideLabel,
|
|
656
|
+
required,
|
|
657
|
+
requiredVariant,
|
|
658
|
+
size,
|
|
659
|
+
placeholder: placeholderProp,
|
|
660
|
+
...inputProps
|
|
661
|
+
} = props;
|
|
657
662
|
const resolvedSize = size ?? "md";
|
|
658
663
|
const inputId = inputProps.id || generatedId;
|
|
659
664
|
const errorId = `${inputId}-error`;
|
|
660
665
|
const helperId = `${inputId}-helper`;
|
|
661
666
|
const showError = hasError || !!localError;
|
|
662
667
|
const errorMessage = error || localError;
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
668
|
+
const isFloating = labelVariant === "floating" && !!label && !hideLabel;
|
|
669
|
+
const requiredMark = required && /* @__PURE__ */ jsx(RequiredMark, { variant: requiredVariant });
|
|
670
|
+
return /* @__PURE__ */ jsxs(
|
|
671
|
+
"div",
|
|
672
|
+
{
|
|
673
|
+
"data-slot": "input-wrapper",
|
|
674
|
+
className: cn("flex flex-col gap-1.5", widthClasses[width]),
|
|
675
|
+
children: [
|
|
676
|
+
label && !isFloating && /* @__PURE__ */ jsxs(
|
|
677
|
+
"label",
|
|
678
|
+
{
|
|
679
|
+
"data-slot": "input-label",
|
|
680
|
+
htmlFor: inputId,
|
|
681
|
+
className: cn(
|
|
682
|
+
"text-foreground text-sm font-medium",
|
|
683
|
+
hideLabel && "sr-only"
|
|
684
|
+
),
|
|
685
|
+
children: [
|
|
686
|
+
label,
|
|
687
|
+
requiredMark
|
|
688
|
+
]
|
|
689
|
+
}
|
|
671
690
|
),
|
|
672
|
-
children: [
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
"span",
|
|
691
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
692
|
+
/* @__PURE__ */ jsx(
|
|
693
|
+
"input",
|
|
676
694
|
{
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
695
|
+
"data-slot": "input",
|
|
696
|
+
ref,
|
|
697
|
+
id: inputId,
|
|
698
|
+
type: "text",
|
|
699
|
+
inputMode: inputType === "date" ? "numeric" : void 0,
|
|
700
|
+
autoComplete,
|
|
701
|
+
placeholder: isFloating ? " " : placeholderProp ?? (inputType === "month" ? "Select month" : inputType === "time" ? "Select time" : inputType === "datetime-local" ? "Select date and time" : placeholder),
|
|
702
|
+
value: formatPickerValue(displayValue, inputType, timeFormat),
|
|
703
|
+
onChange: handleChange,
|
|
704
|
+
onBlur: inputType === "date" ? handleBlur : onBlur,
|
|
705
|
+
onClick: (event) => {
|
|
706
|
+
onClick?.(event);
|
|
707
|
+
setIsCalendarOpen(true);
|
|
708
|
+
},
|
|
709
|
+
readOnly: !isFormattedDate,
|
|
710
|
+
required,
|
|
711
|
+
"aria-invalid": showError,
|
|
712
|
+
"aria-describedby": [errorMessage ? errorId : null, helperText ? helperId : null].filter(Boolean).join(" ") || void 0,
|
|
713
|
+
className: cn(
|
|
714
|
+
inputVariants({
|
|
715
|
+
size: resolvedSize,
|
|
716
|
+
hasError: showError,
|
|
717
|
+
labelVariant: isFloating ? "floating" : "stacked"
|
|
718
|
+
}),
|
|
719
|
+
"pr-10",
|
|
720
|
+
className
|
|
721
|
+
),
|
|
722
|
+
...inputProps
|
|
681
723
|
}
|
|
682
|
-
)
|
|
683
|
-
]
|
|
684
|
-
}
|
|
685
|
-
),
|
|
686
|
-
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
687
|
-
/* @__PURE__ */ jsx(
|
|
688
|
-
"input",
|
|
689
|
-
{
|
|
690
|
-
ref,
|
|
691
|
-
id: inputId,
|
|
692
|
-
type: "text",
|
|
693
|
-
inputMode: inputType === "date" ? "numeric" : void 0,
|
|
694
|
-
autoComplete,
|
|
695
|
-
placeholder: inputType === "month" ? "Select month" : inputType === "time" ? "Select time" : inputType === "datetime-local" ? "Select date and time" : placeholder,
|
|
696
|
-
value: formatPickerValue(displayValue, inputType, timeFormat),
|
|
697
|
-
onChange: handleChange,
|
|
698
|
-
onBlur: inputType === "date" ? handleBlur : onBlur,
|
|
699
|
-
onClick: (event) => {
|
|
700
|
-
onClick?.(event);
|
|
701
|
-
setIsCalendarOpen(true);
|
|
702
|
-
},
|
|
703
|
-
readOnly: !isFormattedDate,
|
|
704
|
-
"aria-invalid": showError,
|
|
705
|
-
"aria-describedby": [errorMessage ? errorId : null, helperText ? helperId : null].filter(Boolean).join(" ") || void 0,
|
|
706
|
-
className: cn(
|
|
707
|
-
"w-full px-3 py-2",
|
|
708
|
-
"rounded-lg border",
|
|
709
|
-
"bg-background text-foreground",
|
|
710
|
-
"placeholder:text-muted-foreground",
|
|
711
|
-
"transition-colors duration-200",
|
|
712
|
-
"focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none",
|
|
713
|
-
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
714
|
-
sizeClasses[resolvedSize],
|
|
715
|
-
showError ? "border-destructive focus:ring-destructive" : "border-input",
|
|
716
|
-
"pr-10",
|
|
717
|
-
className
|
|
718
724
|
),
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
725
|
+
isFloating && /* @__PURE__ */ jsxs(
|
|
726
|
+
"label",
|
|
727
|
+
{
|
|
728
|
+
"data-slot": "input-label",
|
|
729
|
+
htmlFor: inputId,
|
|
730
|
+
className: floatingLabelVariants({
|
|
731
|
+
size: resolvedSize,
|
|
732
|
+
hasError: showError
|
|
733
|
+
}),
|
|
734
|
+
children: [
|
|
735
|
+
label,
|
|
736
|
+
requiredMark
|
|
737
|
+
]
|
|
738
|
+
}
|
|
733
739
|
),
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
740
|
+
/* @__PURE__ */ jsx(
|
|
741
|
+
"button",
|
|
742
|
+
{
|
|
743
|
+
"data-slot": "date-input-trigger",
|
|
744
|
+
ref: buttonRef,
|
|
745
|
+
type: "button",
|
|
746
|
+
onClick: () => setIsCalendarOpen(!isCalendarOpen),
|
|
747
|
+
className: cn(
|
|
748
|
+
"absolute top-1/2 right-3 -translate-y-1/2",
|
|
749
|
+
"text-muted-foreground hover:text-foreground",
|
|
750
|
+
"focus:text-foreground focus:outline-none",
|
|
751
|
+
"transition-colors"
|
|
752
|
+
),
|
|
753
|
+
"aria-label": inputType === "time" ? "Open time picker" : "Open calendar",
|
|
754
|
+
"aria-expanded": isCalendarOpen,
|
|
755
|
+
"aria-haspopup": "dialog",
|
|
756
|
+
children: inputType === "time" ? /* @__PURE__ */ jsx(Clock, { size: 18 }) : /* @__PURE__ */ jsx(Calendar, { size: 18 })
|
|
757
|
+
}
|
|
758
|
+
)
|
|
759
|
+
] }),
|
|
760
|
+
isCalendarOpen && createPortal(renderCalendar(), document.body),
|
|
761
|
+
errorMessage && /* @__PURE__ */ jsx(
|
|
762
|
+
"p",
|
|
763
|
+
{
|
|
764
|
+
id: errorId,
|
|
765
|
+
"data-slot": "input-error",
|
|
766
|
+
className: "text-sm",
|
|
767
|
+
style: { color: "#ef4444" },
|
|
768
|
+
role: "alert",
|
|
769
|
+
children: errorMessage
|
|
770
|
+
}
|
|
771
|
+
),
|
|
772
|
+
helperText && !errorMessage && /* @__PURE__ */ jsx(
|
|
773
|
+
"p",
|
|
774
|
+
{
|
|
775
|
+
id: helperId,
|
|
776
|
+
"data-slot": "input-helper",
|
|
777
|
+
className: "text-muted-foreground text-sm",
|
|
778
|
+
children: helperText
|
|
779
|
+
}
|
|
780
|
+
)
|
|
781
|
+
]
|
|
782
|
+
}
|
|
783
|
+
);
|
|
754
784
|
}
|
|
755
785
|
return /* @__PURE__ */ jsx(
|
|
756
786
|
Input,
|
|
@@ -808,5 +838,5 @@ function ChevronRightIcon() {
|
|
|
808
838
|
}
|
|
809
839
|
|
|
810
840
|
export { DateInput };
|
|
811
|
-
//# sourceMappingURL=chunk-
|
|
812
|
-
//# sourceMappingURL=chunk-
|
|
841
|
+
//# sourceMappingURL=chunk-IILJGFI5.js.map
|
|
842
|
+
//# sourceMappingURL=chunk-IILJGFI5.js.map
|