@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.
Files changed (215) hide show
  1. package/README.md +45 -24
  2. package/agent/README.md +20 -0
  3. package/agent/init-agent.mjs +61 -0
  4. package/agent/mieweb-ui.instructions.md +169 -0
  5. package/dist/ag-grid.cjs +11 -0
  6. package/dist/ag-grid.cjs.map +1 -1
  7. package/dist/ag-grid.d.cts +4 -0
  8. package/dist/ag-grid.d.ts +4 -0
  9. package/dist/ag-grid.js +11 -0
  10. package/dist/ag-grid.js.map +1 -1
  11. package/dist/brands/index.cjs +17 -17
  12. package/dist/brands/index.js +4 -4
  13. package/dist/chunk-3IMM2PM4.js +259 -0
  14. package/dist/chunk-3IMM2PM4.js.map +1 -0
  15. package/dist/{chunk-CVZYOMEW.js → chunk-3Z7CLG4U.js} +184 -3
  16. package/dist/chunk-3Z7CLG4U.js.map +1 -0
  17. package/dist/{chunk-Z4PECE5S.js → chunk-4PJ24GQ4.js} +2 -2
  18. package/dist/{chunk-Z4PECE5S.js.map → chunk-4PJ24GQ4.js.map} +1 -1
  19. package/dist/{chunk-ZBI52NP2.cjs → chunk-56QJHQ5C.cjs} +156 -39
  20. package/dist/chunk-56QJHQ5C.cjs.map +1 -0
  21. package/dist/{chunk-KRGKPUJH.js → chunk-5D253OQS.js} +7 -7
  22. package/dist/{chunk-KRGKPUJH.js.map → chunk-5D253OQS.js.map} +1 -1
  23. package/dist/chunk-6NZXWKUE.js +3 -0
  24. package/dist/chunk-6NZXWKUE.js.map +1 -0
  25. package/dist/{chunk-KFLDXJEE.js → chunk-753Z3NXL.js} +46 -15
  26. package/dist/chunk-753Z3NXL.js.map +1 -0
  27. package/dist/{chunk-S3MKIDYG.cjs → chunk-7AECNMYV.cjs} +46 -15
  28. package/dist/chunk-7AECNMYV.cjs.map +1 -0
  29. package/dist/{chunk-LC7YHZXM.js → chunk-A5YOIJKL.js} +5 -5
  30. package/dist/{chunk-LC7YHZXM.js.map → chunk-A5YOIJKL.js.map} +1 -1
  31. package/dist/{chunk-RBS3GHDZ.cjs → chunk-BOW7ZGI2.cjs} +4 -4
  32. package/dist/{chunk-RBS3GHDZ.cjs.map → chunk-BOW7ZGI2.cjs.map} +1 -1
  33. package/dist/{chunk-WUNWHOLA.cjs → chunk-BSDBI6H7.cjs} +116 -26
  34. package/dist/chunk-BSDBI6H7.cjs.map +1 -0
  35. package/dist/chunk-ELYGV32O.cjs +230 -0
  36. package/dist/chunk-ELYGV32O.cjs.map +1 -0
  37. package/dist/{chunk-QUUBTNMH.js → chunk-EPSB4WTL.js} +45 -15
  38. package/dist/chunk-EPSB4WTL.js.map +1 -0
  39. package/dist/chunk-F57VRLKP.js +708 -0
  40. package/dist/chunk-F57VRLKP.js.map +1 -0
  41. package/dist/{chunk-5IDYOJHO.cjs → chunk-G7EQ3JPX.cjs} +45 -15
  42. package/dist/chunk-G7EQ3JPX.cjs.map +1 -0
  43. package/dist/{chunk-FKLUSYFP.cjs → chunk-GQVL2JKQ.cjs} +4 -4
  44. package/dist/{chunk-FKLUSYFP.cjs.map → chunk-GQVL2JKQ.cjs.map} +1 -1
  45. package/dist/{chunk-3D4ITDLO.js → chunk-GXODR6V4.js} +3 -3
  46. package/dist/{chunk-3D4ITDLO.js.map → chunk-GXODR6V4.js.map} +1 -1
  47. package/dist/{chunk-AFGADE3B.js → chunk-H3YO5GBM.js} +117 -27
  48. package/dist/chunk-H3YO5GBM.js.map +1 -0
  49. package/dist/chunk-I44YNYI6.cjs +4 -0
  50. package/dist/chunk-I44YNYI6.cjs.map +1 -0
  51. package/dist/{chunk-EGWWTIWS.js → chunk-IILJGFI5.js} +125 -95
  52. package/dist/chunk-IILJGFI5.js.map +1 -0
  53. package/dist/{chunk-6J7UGYT5.cjs → chunk-JHGMZX4I.cjs} +47 -7
  54. package/dist/chunk-JHGMZX4I.cjs.map +1 -0
  55. package/dist/{chunk-JDHIBJ5K.cjs → chunk-JWTCEWQ4.cjs} +2 -2
  56. package/dist/{chunk-JDHIBJ5K.cjs.map → chunk-JWTCEWQ4.cjs.map} +1 -1
  57. package/dist/{chunk-GTHNWP4P.js → chunk-KGS7BL5T.js} +2 -2
  58. package/dist/{chunk-GTHNWP4P.js.map → chunk-KGS7BL5T.js.map} +1 -1
  59. package/dist/{chunk-URHXR5SC.cjs → chunk-KVE7PQ5P.cjs} +7 -7
  60. package/dist/{chunk-URHXR5SC.cjs.map → chunk-KVE7PQ5P.cjs.map} +1 -1
  61. package/dist/{chunk-LJBWCUKP.cjs → chunk-LGYGKLJL.cjs} +2 -2
  62. package/dist/{chunk-LJBWCUKP.cjs.map → chunk-LGYGKLJL.cjs.map} +1 -1
  63. package/dist/{chunk-SYIFEJSF.cjs → chunk-LQHI44OZ.cjs} +13 -13
  64. package/dist/{chunk-SYIFEJSF.cjs.map → chunk-LQHI44OZ.cjs.map} +1 -1
  65. package/dist/{chunk-HIDV32ZX.js → chunk-LZU7YBXG.js} +3 -3
  66. package/dist/{chunk-HIDV32ZX.js.map → chunk-LZU7YBXG.js.map} +1 -1
  67. package/dist/chunk-NMBYU7D7.cjs +31 -0
  68. package/dist/chunk-NMBYU7D7.cjs.map +1 -0
  69. package/dist/{chunk-P6L74SKG.js → chunk-QGZC43L7.js} +47 -7
  70. package/dist/chunk-QGZC43L7.js.map +1 -0
  71. package/dist/{chunk-FTRGZOVJ.js → chunk-QHTDWIED.js} +3 -3
  72. package/dist/{chunk-FTRGZOVJ.js.map → chunk-QHTDWIED.js.map} +1 -1
  73. package/dist/chunk-RUGHNFQG.js +28 -0
  74. package/dist/chunk-RUGHNFQG.js.map +1 -0
  75. package/dist/{chunk-MO65V64I.js → chunk-TXRQQMG5.js} +2 -2
  76. package/dist/{chunk-MO65V64I.js.map → chunk-TXRQQMG5.js.map} +1 -1
  77. package/dist/{chunk-OAHORW4N.cjs → chunk-U5TTXN45.cjs} +127 -97
  78. package/dist/chunk-U5TTXN45.cjs.map +1 -0
  79. package/dist/{chunk-MJFF4AXH.cjs → chunk-VNNFI5DQ.cjs} +184 -3
  80. package/dist/chunk-VNNFI5DQ.cjs.map +1 -0
  81. package/dist/{chunk-XB54G7WS.cjs → chunk-WG6MPHWK.cjs} +2 -2
  82. package/dist/{chunk-XB54G7WS.cjs.map → chunk-WG6MPHWK.cjs.map} +1 -1
  83. package/dist/{chunk-NQ2D2V6O.cjs → chunk-X5OS45WZ.cjs} +36 -36
  84. package/dist/{chunk-NQ2D2V6O.cjs.map → chunk-X5OS45WZ.cjs.map} +1 -1
  85. package/dist/{chunk-DLBV42JD.js → chunk-XBKOZRDO.js} +156 -39
  86. package/dist/chunk-XBKOZRDO.js.map +1 -0
  87. package/dist/chunk-XMECP2MD.js +208 -0
  88. package/dist/chunk-XMECP2MD.js.map +1 -0
  89. package/dist/chunk-YVIH26FG.cjs +736 -0
  90. package/dist/chunk-YVIH26FG.cjs.map +1 -0
  91. package/dist/chunk-Z5S5JEJD.cjs +286 -0
  92. package/dist/chunk-Z5S5JEJD.cjs.map +1 -0
  93. package/dist/{collabKit-QZL4P5T5.js → collabKit-A643VH2I.js} +7 -3
  94. package/dist/collabKit-A643VH2I.js.map +1 -0
  95. package/dist/{collabKit-UF7E6V3N.cjs → collabKit-Q4A36LDA.cjs} +7 -3
  96. package/dist/collabKit-Q4A36LDA.cjs.map +1 -0
  97. package/dist/components/Alert/index.d.cts +1 -1
  98. package/dist/components/Alert/index.d.ts +1 -1
  99. package/dist/components/Autocomplete/index.cjs +4 -3
  100. package/dist/components/Autocomplete/index.d.cts +20 -3
  101. package/dist/components/Autocomplete/index.d.ts +20 -3
  102. package/dist/components/Autocomplete/index.js +3 -2
  103. package/dist/components/Badge/index.d.cts +1 -1
  104. package/dist/components/Badge/index.d.ts +1 -1
  105. package/dist/components/Card/index.d.cts +1 -1
  106. package/dist/components/Card/index.d.ts +1 -1
  107. package/dist/components/Checkbox/index.cjs +5 -4
  108. package/dist/components/Checkbox/index.d.cts +9 -1
  109. package/dist/components/Checkbox/index.d.ts +9 -1
  110. package/dist/components/Checkbox/index.js +2 -1
  111. package/dist/components/CustomizableDashboard/index.cjs +43 -0
  112. package/dist/components/CustomizableDashboard/index.cjs.map +1 -0
  113. package/dist/components/CustomizableDashboard/index.d.cts +195 -0
  114. package/dist/components/CustomizableDashboard/index.d.ts +195 -0
  115. package/dist/components/CustomizableDashboard/index.js +10 -0
  116. package/dist/components/CustomizableDashboard/index.js.map +1 -0
  117. package/dist/components/DateInput/index.cjs +4 -3
  118. package/dist/components/DateInput/index.d.cts +1 -0
  119. package/dist/components/DateInput/index.d.ts +1 -0
  120. package/dist/components/DateInput/index.js +3 -2
  121. package/dist/components/Dropdown/index.cjs +9 -8
  122. package/dist/components/Dropdown/index.js +3 -2
  123. package/dist/components/Input/index.cjs +20 -3
  124. package/dist/components/Input/index.d.cts +37 -2
  125. package/dist/components/Input/index.d.ts +37 -2
  126. package/dist/components/Input/index.js +2 -1
  127. package/dist/components/Markdown/index.cjs +10 -10
  128. package/dist/components/Markdown/index.js +2 -2
  129. package/dist/components/MediaEditor/index.cjs +10 -9
  130. package/dist/components/MediaEditor/index.js +5 -4
  131. package/dist/components/PhoneInput/index.cjs +5 -4
  132. package/dist/components/PhoneInput/index.js +3 -2
  133. package/dist/components/Progress/index.d.cts +1 -1
  134. package/dist/components/Progress/index.d.ts +1 -1
  135. package/dist/components/Radio/index.cjs +5 -4
  136. package/dist/components/Radio/index.d.cts +9 -1
  137. package/dist/components/Radio/index.d.ts +9 -1
  138. package/dist/components/Radio/index.js +2 -1
  139. package/dist/components/RichTextEditor/index.cjs +7 -6
  140. package/dist/components/RichTextEditor/index.js +4 -3
  141. package/dist/components/Select/index.cjs +5 -3
  142. package/dist/components/Select/index.d.cts +56 -9
  143. package/dist/components/Select/index.d.ts +56 -9
  144. package/dist/components/Select/index.js +3 -1
  145. package/dist/components/Slider/index.d.cts +2 -2
  146. package/dist/components/Slider/index.d.ts +2 -2
  147. package/dist/components/SourceTip/index.cjs +15 -0
  148. package/dist/components/SourceTip/index.cjs.map +1 -0
  149. package/dist/components/SourceTip/index.d.cts +58 -0
  150. package/dist/components/SourceTip/index.d.ts +58 -0
  151. package/dist/components/SourceTip/index.js +6 -0
  152. package/dist/components/SourceTip/index.js.map +1 -0
  153. package/dist/components/Spinner/index.d.cts +1 -1
  154. package/dist/components/Spinner/index.d.ts +1 -1
  155. package/dist/components/SuperChat/index.cjs +7 -6
  156. package/dist/components/SuperChat/index.cjs.map +1 -1
  157. package/dist/components/SuperChat/index.js +3 -2
  158. package/dist/components/SuperChat/index.js.map +1 -1
  159. package/dist/components/SuperChat/plugins/index.cjs +2 -22
  160. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  161. package/dist/components/SuperChat/plugins/index.js +1 -21
  162. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  163. package/dist/components/Text/index.d.cts +1 -1
  164. package/dist/components/Text/index.d.ts +1 -1
  165. package/dist/components/Textarea/index.cjs +5 -3
  166. package/dist/components/Textarea/index.d.cts +19 -1
  167. package/dist/components/Textarea/index.d.ts +19 -1
  168. package/dist/components/Textarea/index.js +3 -1
  169. package/dist/esheet.cjs +10 -9
  170. package/dist/esheet.cjs.map +1 -1
  171. package/dist/esheet.js +7 -6
  172. package/dist/esheet.js.map +1 -1
  173. package/dist/hooks/index.cjs +23 -14
  174. package/dist/hooks/index.d.cts +16 -1
  175. package/dist/hooks/index.d.ts +16 -1
  176. package/dist/hooks/index.js +2 -1
  177. package/dist/index.cjs +753 -445
  178. package/dist/index.cjs.map +1 -1
  179. package/dist/index.d.cts +73 -10
  180. package/dist/index.d.ts +73 -10
  181. package/dist/index.js +291 -40
  182. package/dist/index.js.map +1 -1
  183. package/dist/kerebron.cjs +200 -68
  184. package/dist/kerebron.cjs.map +1 -1
  185. package/dist/kerebron.css +129 -0
  186. package/dist/kerebron.d.cts +52 -3
  187. package/dist/kerebron.d.ts +52 -3
  188. package/dist/kerebron.js +201 -69
  189. package/dist/kerebron.js.map +1 -1
  190. package/dist/styles.css +1 -1
  191. package/dist/tailwind-preset.cjs +4 -4
  192. package/dist/tailwind-preset.js +1 -1
  193. package/dist/utils/index.cjs +9 -9
  194. package/dist/utils/index.js +1 -1
  195. package/package.json +11 -4
  196. package/dist/chunk-5IDYOJHO.cjs.map +0 -1
  197. package/dist/chunk-6ECKH4DJ.cjs +0 -147
  198. package/dist/chunk-6ECKH4DJ.cjs.map +0 -1
  199. package/dist/chunk-6J7UGYT5.cjs.map +0 -1
  200. package/dist/chunk-AFGADE3B.js.map +0 -1
  201. package/dist/chunk-CVZYOMEW.js.map +0 -1
  202. package/dist/chunk-DLBV42JD.js.map +0 -1
  203. package/dist/chunk-EGWWTIWS.js.map +0 -1
  204. package/dist/chunk-KFLDXJEE.js.map +0 -1
  205. package/dist/chunk-MJFF4AXH.cjs.map +0 -1
  206. package/dist/chunk-OAHORW4N.cjs.map +0 -1
  207. package/dist/chunk-P6L74SKG.js.map +0 -1
  208. package/dist/chunk-QUUBTNMH.js.map +0 -1
  209. package/dist/chunk-S3MKIDYG.cjs.map +0 -1
  210. package/dist/chunk-WUNWHOLA.cjs.map +0 -1
  211. package/dist/chunk-YXCE2HSK.js +0 -124
  212. package/dist/chunk-YXCE2HSK.js.map +0 -1
  213. package/dist/chunk-ZBI52NP2.cjs.map +0 -1
  214. package/dist/collabKit-QZL4P5T5.js.map +0 -1
  215. 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 { jsxs, jsx } from 'react/jsx-runtime';
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__ */ jsx(
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: label
202
+ children: [
203
+ label,
204
+ requiredMark
205
+ ]
111
206
  }
112
207
  ),
113
- /* @__PURE__ */ jsx(
114
- "textarea",
115
- {
116
- "data-slot": "textarea",
117
- ref: internalRef,
118
- id: textareaId,
119
- value,
120
- defaultValue: value === void 0 ? defaultValue : void 0,
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
- className
132
- ),
133
- ...props
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-AFGADE3B.js.map
188
- //# sourceMappingURL=chunk-AFGADE3B.js.map
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":"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","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,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=chunk-I44YNYI6.cjs.map
4
+ //# sourceMappingURL=chunk-I44YNYI6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-I44YNYI6.cjs"}
@@ -1,4 +1,4 @@
1
- import { Input } from './chunk-YXCE2HSK.js';
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 { label, helperText, hideLabel, required, size, ...inputProps } = props;
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
- return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-1.5", widthClasses[width]), children: [
664
- label && /* @__PURE__ */ jsxs(
665
- "label",
666
- {
667
- htmlFor: inputId,
668
- className: cn(
669
- "text-foreground text-sm font-medium",
670
- hideLabel && "sr-only"
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
- label,
674
- required && /* @__PURE__ */ jsx(
675
- "span",
691
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
692
+ /* @__PURE__ */ jsx(
693
+ "input",
676
694
  {
677
- className: "ml-1",
678
- style: { color: "#ef4444" },
679
- "aria-hidden": "true",
680
- children: "*"
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
- ...inputProps
720
- }
721
- ),
722
- /* @__PURE__ */ jsx(
723
- "button",
724
- {
725
- ref: buttonRef,
726
- type: "button",
727
- onClick: () => setIsCalendarOpen(!isCalendarOpen),
728
- className: cn(
729
- "absolute top-1/2 right-3 -translate-y-1/2",
730
- "text-muted-foreground hover:text-foreground",
731
- "focus:text-foreground focus:outline-none",
732
- "transition-colors"
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
- "aria-label": inputType === "time" ? "Open time picker" : "Open calendar",
735
- "aria-expanded": isCalendarOpen,
736
- "aria-haspopup": "dialog",
737
- children: inputType === "time" ? /* @__PURE__ */ jsx(Clock, { size: 18 }) : /* @__PURE__ */ jsx(Calendar, { size: 18 })
738
- }
739
- )
740
- ] }),
741
- isCalendarOpen && createPortal(renderCalendar(), document.body),
742
- errorMessage && /* @__PURE__ */ jsx(
743
- "p",
744
- {
745
- id: errorId,
746
- className: "text-sm",
747
- style: { color: "#ef4444" },
748
- role: "alert",
749
- children: errorMessage
750
- }
751
- ),
752
- helperText && !errorMessage && /* @__PURE__ */ jsx("p", { id: helperId, className: "text-muted-foreground text-sm", children: helperText })
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-EGWWTIWS.js.map
812
- //# sourceMappingURL=chunk-EGWWTIWS.js.map
841
+ //# sourceMappingURL=chunk-IILJGFI5.js.map
842
+ //# sourceMappingURL=chunk-IILJGFI5.js.map