@mieweb/ui 0.7.3-dev.2 → 0.7.3-dev.21

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 (231) 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 +12 -12
  12. package/dist/brands/index.js +3 -3
  13. package/dist/chunk-3IMM2PM4.js +259 -0
  14. package/dist/chunk-3IMM2PM4.js.map +1 -0
  15. package/dist/{chunk-ZBI52NP2.cjs → chunk-56QJHQ5C.cjs} +156 -39
  16. package/dist/chunk-56QJHQ5C.cjs.map +1 -0
  17. package/dist/{chunk-KRGKPUJH.js → chunk-5D253OQS.js} +7 -7
  18. package/dist/{chunk-KRGKPUJH.js.map → chunk-5D253OQS.js.map} +1 -1
  19. package/dist/chunk-5JZIDILK.cjs +164 -0
  20. package/dist/chunk-5JZIDILK.cjs.map +1 -0
  21. package/dist/chunk-6NZXWKUE.js +3 -0
  22. package/dist/chunk-6NZXWKUE.js.map +1 -0
  23. package/dist/{chunk-Z4PECE5S.js → chunk-6XTHO63C.js} +2 -2
  24. package/dist/{chunk-Z4PECE5S.js.map → chunk-6XTHO63C.js.map} +1 -1
  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-7IKLGH3Z.cjs +92 -0
  30. package/dist/chunk-7IKLGH3Z.cjs.map +1 -0
  31. package/dist/{chunk-LC7YHZXM.js → chunk-A5YOIJKL.js} +5 -5
  32. package/dist/{chunk-LC7YHZXM.js.map → chunk-A5YOIJKL.js.map} +1 -1
  33. package/dist/{chunk-RBS3GHDZ.cjs → chunk-BOW7ZGI2.cjs} +4 -4
  34. package/dist/{chunk-RBS3GHDZ.cjs.map → chunk-BOW7ZGI2.cjs.map} +1 -1
  35. package/dist/{chunk-WUNWHOLA.cjs → chunk-BSDBI6H7.cjs} +116 -26
  36. package/dist/chunk-BSDBI6H7.cjs.map +1 -0
  37. package/dist/chunk-ELYGV32O.cjs +230 -0
  38. package/dist/chunk-ELYGV32O.cjs.map +1 -0
  39. package/dist/{chunk-QUUBTNMH.js → chunk-EPSB4WTL.js} +45 -15
  40. package/dist/chunk-EPSB4WTL.js.map +1 -0
  41. package/dist/chunk-F57VRLKP.js +708 -0
  42. package/dist/chunk-F57VRLKP.js.map +1 -0
  43. package/dist/{chunk-5IDYOJHO.cjs → chunk-G7EQ3JPX.cjs} +45 -15
  44. package/dist/chunk-G7EQ3JPX.cjs.map +1 -0
  45. package/dist/{chunk-FKLUSYFP.cjs → chunk-GQVL2JKQ.cjs} +4 -4
  46. package/dist/{chunk-FKLUSYFP.cjs.map → chunk-GQVL2JKQ.cjs.map} +1 -1
  47. package/dist/{chunk-3D4ITDLO.js → chunk-GXODR6V4.js} +3 -3
  48. package/dist/{chunk-3D4ITDLO.js.map → chunk-GXODR6V4.js.map} +1 -1
  49. package/dist/{chunk-AFGADE3B.js → chunk-H3YO5GBM.js} +117 -27
  50. package/dist/chunk-H3YO5GBM.js.map +1 -0
  51. package/dist/chunk-I44YNYI6.cjs +4 -0
  52. package/dist/chunk-I44YNYI6.cjs.map +1 -0
  53. package/dist/{chunk-EGWWTIWS.js → chunk-IILJGFI5.js} +125 -95
  54. package/dist/chunk-IILJGFI5.js.map +1 -0
  55. package/dist/{chunk-6J7UGYT5.cjs → chunk-JHGMZX4I.cjs} +47 -7
  56. package/dist/chunk-JHGMZX4I.cjs.map +1 -0
  57. package/dist/chunk-JHZW3Y62.js +142 -0
  58. package/dist/chunk-JHZW3Y62.js.map +1 -0
  59. package/dist/{chunk-JDHIBJ5K.cjs → chunk-JWTCEWQ4.cjs} +2 -2
  60. package/dist/{chunk-JDHIBJ5K.cjs.map → chunk-JWTCEWQ4.cjs.map} +1 -1
  61. package/dist/{chunk-URHXR5SC.cjs → chunk-KVE7PQ5P.cjs} +7 -7
  62. package/dist/{chunk-URHXR5SC.cjs.map → chunk-KVE7PQ5P.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-WBGUYSWY.js +90 -0
  80. package/dist/chunk-WBGUYSWY.js.map +1 -0
  81. package/dist/{chunk-CVZYOMEW.js → chunk-WBTCOX5T.js} +209 -3
  82. package/dist/chunk-WBTCOX5T.js.map +1 -0
  83. package/dist/{chunk-LJBWCUKP.cjs → chunk-WKCNNYHN.cjs} +2 -2
  84. package/dist/{chunk-LJBWCUKP.cjs.map → chunk-WKCNNYHN.cjs.map} +1 -1
  85. package/dist/{chunk-MJFF4AXH.cjs → chunk-X5FQ2LFF.cjs} +209 -3
  86. package/dist/chunk-X5FQ2LFF.cjs.map +1 -0
  87. package/dist/{chunk-NQ2D2V6O.cjs → chunk-X5OS45WZ.cjs} +36 -36
  88. package/dist/{chunk-NQ2D2V6O.cjs.map → chunk-X5OS45WZ.cjs.map} +1 -1
  89. package/dist/{chunk-DLBV42JD.js → chunk-XBKOZRDO.js} +156 -39
  90. package/dist/chunk-XBKOZRDO.js.map +1 -0
  91. package/dist/{chunk-XB54G7WS.cjs → chunk-XJTFZLWH.cjs} +2 -86
  92. package/dist/chunk-XJTFZLWH.cjs.map +1 -0
  93. package/dist/chunk-XMECP2MD.js +208 -0
  94. package/dist/chunk-XMECP2MD.js.map +1 -0
  95. package/dist/{chunk-GTHNWP4P.js → chunk-XUVEF2RQ.js} +4 -87
  96. package/dist/chunk-XUVEF2RQ.js.map +1 -0
  97. package/dist/chunk-YVIH26FG.cjs +736 -0
  98. package/dist/chunk-YVIH26FG.cjs.map +1 -0
  99. package/dist/chunk-Z5S5JEJD.cjs +286 -0
  100. package/dist/chunk-Z5S5JEJD.cjs.map +1 -0
  101. package/dist/{collabKit-QZL4P5T5.js → collabKit-A643VH2I.js} +7 -3
  102. package/dist/collabKit-A643VH2I.js.map +1 -0
  103. package/dist/{collabKit-UF7E6V3N.cjs → collabKit-Q4A36LDA.cjs} +7 -3
  104. package/dist/collabKit-Q4A36LDA.cjs.map +1 -0
  105. package/dist/components/Alert/index.d.cts +1 -1
  106. package/dist/components/Alert/index.d.ts +1 -1
  107. package/dist/components/Autocomplete/index.cjs +4 -3
  108. package/dist/components/Autocomplete/index.d.cts +20 -3
  109. package/dist/components/Autocomplete/index.d.ts +20 -3
  110. package/dist/components/Autocomplete/index.js +3 -2
  111. package/dist/components/Badge/index.d.cts +1 -1
  112. package/dist/components/Badge/index.d.ts +1 -1
  113. package/dist/components/Card/index.d.cts +1 -1
  114. package/dist/components/Card/index.d.ts +1 -1
  115. package/dist/components/Checkbox/index.cjs +5 -4
  116. package/dist/components/Checkbox/index.d.cts +9 -1
  117. package/dist/components/Checkbox/index.d.ts +9 -1
  118. package/dist/components/Checkbox/index.js +2 -1
  119. package/dist/components/CustomizableDashboard/index.cjs +43 -0
  120. package/dist/components/CustomizableDashboard/index.cjs.map +1 -0
  121. package/dist/components/CustomizableDashboard/index.d.cts +195 -0
  122. package/dist/components/CustomizableDashboard/index.d.ts +195 -0
  123. package/dist/components/CustomizableDashboard/index.js +10 -0
  124. package/dist/components/CustomizableDashboard/index.js.map +1 -0
  125. package/dist/components/DateInput/index.cjs +4 -3
  126. package/dist/components/DateInput/index.d.cts +1 -0
  127. package/dist/components/DateInput/index.d.ts +1 -0
  128. package/dist/components/DateInput/index.js +3 -2
  129. package/dist/components/Dropdown/index.cjs +9 -8
  130. package/dist/components/Dropdown/index.js +3 -2
  131. package/dist/components/Input/index.cjs +20 -3
  132. package/dist/components/Input/index.d.cts +37 -2
  133. package/dist/components/Input/index.d.ts +37 -2
  134. package/dist/components/Input/index.js +2 -1
  135. package/dist/components/Markdown/index.cjs +15 -15
  136. package/dist/components/Markdown/index.js +3 -3
  137. package/dist/components/MediaEditor/index.cjs +10 -9
  138. package/dist/components/MediaEditor/index.js +5 -4
  139. package/dist/components/PhoneInput/index.cjs +5 -4
  140. package/dist/components/PhoneInput/index.js +3 -2
  141. package/dist/components/Progress/index.d.cts +1 -1
  142. package/dist/components/Progress/index.d.ts +1 -1
  143. package/dist/components/Radio/index.cjs +5 -4
  144. package/dist/components/Radio/index.d.cts +9 -1
  145. package/dist/components/Radio/index.d.ts +9 -1
  146. package/dist/components/Radio/index.js +2 -1
  147. package/dist/components/RichTextEditor/index.cjs +7 -6
  148. package/dist/components/RichTextEditor/index.js +4 -3
  149. package/dist/components/SectionSpyNav/index.cjs +15 -0
  150. package/dist/components/SectionSpyNav/index.cjs.map +1 -0
  151. package/dist/components/SectionSpyNav/index.d.cts +63 -0
  152. package/dist/components/SectionSpyNav/index.d.ts +63 -0
  153. package/dist/components/SectionSpyNav/index.js +6 -0
  154. package/dist/components/SectionSpyNav/index.js.map +1 -0
  155. package/dist/components/Select/index.cjs +5 -3
  156. package/dist/components/Select/index.d.cts +56 -9
  157. package/dist/components/Select/index.d.ts +56 -9
  158. package/dist/components/Select/index.js +3 -1
  159. package/dist/components/Slider/index.d.cts +2 -2
  160. package/dist/components/Slider/index.d.ts +2 -2
  161. package/dist/components/SourceTip/index.cjs +15 -0
  162. package/dist/components/SourceTip/index.cjs.map +1 -0
  163. package/dist/components/SourceTip/index.d.cts +58 -0
  164. package/dist/components/SourceTip/index.d.ts +58 -0
  165. package/dist/components/SourceTip/index.js +6 -0
  166. package/dist/components/SourceTip/index.js.map +1 -0
  167. package/dist/components/Spinner/index.d.cts +1 -1
  168. package/dist/components/Spinner/index.d.ts +1 -1
  169. package/dist/components/SuperChat/index.cjs +7 -6
  170. package/dist/components/SuperChat/index.cjs.map +1 -1
  171. package/dist/components/SuperChat/index.js +3 -2
  172. package/dist/components/SuperChat/index.js.map +1 -1
  173. package/dist/components/SuperChat/plugins/index.cjs +2 -22
  174. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  175. package/dist/components/SuperChat/plugins/index.js +1 -21
  176. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  177. package/dist/components/Text/index.d.cts +1 -1
  178. package/dist/components/Text/index.d.ts +1 -1
  179. package/dist/components/Textarea/index.cjs +5 -3
  180. package/dist/components/Textarea/index.d.cts +19 -1
  181. package/dist/components/Textarea/index.d.ts +19 -1
  182. package/dist/components/Textarea/index.js +3 -1
  183. package/dist/esheet.cjs +10 -9
  184. package/dist/esheet.cjs.map +1 -1
  185. package/dist/esheet.js +7 -6
  186. package/dist/esheet.js.map +1 -1
  187. package/dist/hooks/index.cjs +27 -17
  188. package/dist/hooks/index.d.cts +16 -1
  189. package/dist/hooks/index.d.ts +16 -1
  190. package/dist/hooks/index.js +3 -1
  191. package/dist/index.cjs +777 -463
  192. package/dist/index.cjs.map +1 -1
  193. package/dist/index.d.cts +74 -10
  194. package/dist/index.d.ts +74 -10
  195. package/dist/index.js +296 -42
  196. package/dist/index.js.map +1 -1
  197. package/dist/kerebron.cjs +200 -68
  198. package/dist/kerebron.cjs.map +1 -1
  199. package/dist/kerebron.css +129 -0
  200. package/dist/kerebron.d.cts +52 -3
  201. package/dist/kerebron.d.ts +52 -3
  202. package/dist/kerebron.js +201 -69
  203. package/dist/kerebron.js.map +1 -1
  204. package/dist/styles.css +1 -1
  205. package/dist/tailwind-preset.cjs +4 -4
  206. package/dist/tailwind-preset.js +1 -1
  207. package/dist/utils/index.cjs +9 -9
  208. package/dist/utils/index.js +1 -1
  209. package/package.json +11 -4
  210. package/dist/chunk-5IDYOJHO.cjs.map +0 -1
  211. package/dist/chunk-6ECKH4DJ.cjs +0 -147
  212. package/dist/chunk-6ECKH4DJ.cjs.map +0 -1
  213. package/dist/chunk-6J7UGYT5.cjs.map +0 -1
  214. package/dist/chunk-AFGADE3B.js.map +0 -1
  215. package/dist/chunk-CVZYOMEW.js.map +0 -1
  216. package/dist/chunk-DLBV42JD.js.map +0 -1
  217. package/dist/chunk-EGWWTIWS.js.map +0 -1
  218. package/dist/chunk-GTHNWP4P.js.map +0 -1
  219. package/dist/chunk-KFLDXJEE.js.map +0 -1
  220. package/dist/chunk-MJFF4AXH.cjs.map +0 -1
  221. package/dist/chunk-OAHORW4N.cjs.map +0 -1
  222. package/dist/chunk-P6L74SKG.js.map +0 -1
  223. package/dist/chunk-QUUBTNMH.js.map +0 -1
  224. package/dist/chunk-S3MKIDYG.cjs.map +0 -1
  225. package/dist/chunk-WUNWHOLA.cjs.map +0 -1
  226. package/dist/chunk-XB54G7WS.cjs.map +0 -1
  227. package/dist/chunk-YXCE2HSK.js +0 -124
  228. package/dist/chunk-YXCE2HSK.js.map +0 -1
  229. package/dist/chunk-ZBI52NP2.cjs.map +0 -1
  230. package/dist/collabKit-QZL4P5T5.js.map +0 -1
  231. 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