@seedgrid/fe-components 0.2.4

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 (270) hide show
  1. package/dist/blocked-email-domains.json +41 -0
  2. package/dist/buttons/SgButton.d.ts +43 -0
  3. package/dist/buttons/SgButton.d.ts.map +1 -0
  4. package/dist/buttons/SgButton.js +123 -0
  5. package/dist/buttons/SgFloatActionButton.d.ts +60 -0
  6. package/dist/buttons/SgFloatActionButton.d.ts.map +1 -0
  7. package/dist/buttons/SgFloatActionButton.js +532 -0
  8. package/dist/buttons/SgSpeedDial.d.ts +40 -0
  9. package/dist/buttons/SgSpeedDial.d.ts.map +1 -0
  10. package/dist/buttons/SgSpeedDial.js +149 -0
  11. package/dist/buttons/SgSplitButton.d.ts +32 -0
  12. package/dist/buttons/SgSplitButton.d.ts.map +1 -0
  13. package/dist/buttons/SgSplitButton.js +81 -0
  14. package/dist/clock/SgClock.d.ts +28 -0
  15. package/dist/clock/SgClock.d.ts.map +1 -0
  16. package/dist/clock/SgClock.js +280 -0
  17. package/dist/clock/SgTimeProvider.d.ts +13 -0
  18. package/dist/clock/SgTimeProvider.d.ts.map +1 -0
  19. package/dist/clock/SgTimeProvider.js +44 -0
  20. package/dist/clock/themes/SgClockThemePicker.d.ts +14 -0
  21. package/dist/clock/themes/SgClockThemePicker.d.ts.map +1 -0
  22. package/dist/clock/themes/SgClockThemePicker.js +71 -0
  23. package/dist/clock/themes/SgClockThemePreview.d.ts +7 -0
  24. package/dist/clock/themes/SgClockThemePreview.d.ts.map +1 -0
  25. package/dist/clock/themes/SgClockThemePreview.js +11 -0
  26. package/dist/clock/themes/builtins.d.ts +3 -0
  27. package/dist/clock/themes/builtins.d.ts.map +1 -0
  28. package/dist/clock/themes/builtins.js +241 -0
  29. package/dist/clock/themes/index.d.ts +9 -0
  30. package/dist/clock/themes/index.d.ts.map +1 -0
  31. package/dist/clock/themes/index.js +7 -0
  32. package/dist/clock/themes/provider.d.ts +19 -0
  33. package/dist/clock/themes/provider.d.ts.map +1 -0
  34. package/dist/clock/themes/provider.js +54 -0
  35. package/dist/clock/themes/registry.d.ts +9 -0
  36. package/dist/clock/themes/registry.d.ts.map +1 -0
  37. package/dist/clock/themes/registry.js +25 -0
  38. package/dist/clock/themes/renderTheme.d.ts +7 -0
  39. package/dist/clock/themes/renderTheme.d.ts.map +1 -0
  40. package/dist/clock/themes/renderTheme.js +41 -0
  41. package/dist/clock/themes/types.d.ts +21 -0
  42. package/dist/clock/themes/types.d.ts.map +1 -0
  43. package/dist/clock/themes/types.js +1 -0
  44. package/dist/clock/themes/urlThemeCache.d.ts +2 -0
  45. package/dist/clock/themes/urlThemeCache.d.ts.map +1 -0
  46. package/dist/clock/themes/urlThemeCache.js +11 -0
  47. package/dist/clock/themes/useDarkFlag.d.ts +2 -0
  48. package/dist/clock/themes/useDarkFlag.d.ts.map +1 -0
  49. package/dist/clock/themes/useDarkFlag.js +14 -0
  50. package/dist/commons/SgBadge.d.ts +51 -0
  51. package/dist/commons/SgBadge.d.ts.map +1 -0
  52. package/dist/commons/SgBadge.js +141 -0
  53. package/dist/commons/SgBadgeOverlay.d.ts +13 -0
  54. package/dist/commons/SgBadgeOverlay.d.ts.map +1 -0
  55. package/dist/commons/SgBadgeOverlay.js +20 -0
  56. package/dist/commons/SgButton.d.ts +39 -0
  57. package/dist/commons/SgButton.d.ts.map +1 -0
  58. package/dist/commons/SgButton.js +116 -0
  59. package/dist/commons/SgPopup.d.ts +42 -0
  60. package/dist/commons/SgPopup.d.ts.map +1 -0
  61. package/dist/commons/SgPopup.js +218 -0
  62. package/dist/commons/SgToast.d.ts +44 -0
  63. package/dist/commons/SgToast.d.ts.map +1 -0
  64. package/dist/commons/SgToast.js +97 -0
  65. package/dist/commons/SgToaster.d.ts +11 -0
  66. package/dist/commons/SgToaster.d.ts.map +1 -0
  67. package/dist/commons/SgToaster.js +85 -0
  68. package/dist/commons/common-passwords.d.ts +2 -0
  69. package/dist/commons/common-passwords.d.ts.map +1 -0
  70. package/dist/commons/common-passwords.js +167 -0
  71. package/dist/environment/SgEnvironmentProvider.d.ts +31 -0
  72. package/dist/environment/SgEnvironmentProvider.d.ts.map +1 -0
  73. package/dist/environment/SgEnvironmentProvider.js +120 -0
  74. package/dist/environment/persistence.d.ts +44 -0
  75. package/dist/environment/persistence.d.ts.map +1 -0
  76. package/dist/environment/persistence.js +149 -0
  77. package/dist/gadgets/clock/SgClock.d.ts +18 -0
  78. package/dist/gadgets/clock/SgClock.d.ts.map +1 -0
  79. package/dist/gadgets/clock/SgClock.js +407 -0
  80. package/dist/gadgets/clock/SgTimeProvider.d.ts +13 -0
  81. package/dist/gadgets/clock/SgTimeProvider.d.ts.map +1 -0
  82. package/dist/gadgets/clock/SgTimeProvider.js +44 -0
  83. package/dist/gadgets/clock/themes/SgClockThemePicker.d.ts +14 -0
  84. package/dist/gadgets/clock/themes/SgClockThemePicker.d.ts.map +1 -0
  85. package/dist/gadgets/clock/themes/SgClockThemePicker.js +71 -0
  86. package/dist/gadgets/clock/themes/SgClockThemePreview.d.ts +7 -0
  87. package/dist/gadgets/clock/themes/SgClockThemePreview.d.ts.map +1 -0
  88. package/dist/gadgets/clock/themes/SgClockThemePreview.js +11 -0
  89. package/dist/gadgets/clock/themes/builtins.d.ts +3 -0
  90. package/dist/gadgets/clock/themes/builtins.d.ts.map +1 -0
  91. package/dist/gadgets/clock/themes/builtins.js +241 -0
  92. package/dist/gadgets/clock/themes/index.d.ts +9 -0
  93. package/dist/gadgets/clock/themes/index.d.ts.map +1 -0
  94. package/dist/gadgets/clock/themes/index.js +7 -0
  95. package/dist/gadgets/clock/themes/provider.d.ts +19 -0
  96. package/dist/gadgets/clock/themes/provider.d.ts.map +1 -0
  97. package/dist/gadgets/clock/themes/provider.js +54 -0
  98. package/dist/gadgets/clock/themes/registry.d.ts +9 -0
  99. package/dist/gadgets/clock/themes/registry.d.ts.map +1 -0
  100. package/dist/gadgets/clock/themes/registry.js +25 -0
  101. package/dist/gadgets/clock/themes/renderTheme.d.ts +7 -0
  102. package/dist/gadgets/clock/themes/renderTheme.d.ts.map +1 -0
  103. package/dist/gadgets/clock/themes/renderTheme.js +41 -0
  104. package/dist/gadgets/clock/themes/types.d.ts +21 -0
  105. package/dist/gadgets/clock/themes/types.d.ts.map +1 -0
  106. package/dist/gadgets/clock/themes/types.js +1 -0
  107. package/dist/gadgets/clock/themes/urlThemeCache.d.ts +2 -0
  108. package/dist/gadgets/clock/themes/urlThemeCache.d.ts.map +1 -0
  109. package/dist/gadgets/clock/themes/urlThemeCache.js +11 -0
  110. package/dist/gadgets/clock/themes/useDarkFlag.d.ts +2 -0
  111. package/dist/gadgets/clock/themes/useDarkFlag.d.ts.map +1 -0
  112. package/dist/gadgets/clock/themes/useDarkFlag.js +14 -0
  113. package/dist/gadgets/flip-digit/SgFlipDigit.d.ts +23 -0
  114. package/dist/gadgets/flip-digit/SgFlipDigit.d.ts.map +1 -0
  115. package/dist/gadgets/flip-digit/SgFlipDigit.js +118 -0
  116. package/dist/gadgets/flip-digit/index.d.ts +3 -0
  117. package/dist/gadgets/flip-digit/index.d.ts.map +1 -0
  118. package/dist/gadgets/flip-digit/index.js +1 -0
  119. package/dist/i18n/en-US.json +76 -0
  120. package/dist/i18n/es.json +76 -0
  121. package/dist/i18n/index.d.ts +328 -0
  122. package/dist/i18n/index.d.ts.map +1 -0
  123. package/dist/i18n/index.js +87 -0
  124. package/dist/i18n/pt-BR.json +76 -0
  125. package/dist/i18n/pt-PT.json +76 -0
  126. package/dist/index.d.ts +88 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +46 -0
  129. package/dist/inputs/FloatingInput.d.ts +13 -0
  130. package/dist/inputs/FloatingInput.d.ts.map +1 -0
  131. package/dist/inputs/FloatingInput.js +53 -0
  132. package/dist/inputs/FloatingSelect.d.ts +15 -0
  133. package/dist/inputs/FloatingSelect.d.ts.map +1 -0
  134. package/dist/inputs/FloatingSelect.js +52 -0
  135. package/dist/inputs/FloatingTextArea.d.ts +11 -0
  136. package/dist/inputs/FloatingTextArea.d.ts.map +1 -0
  137. package/dist/inputs/FloatingTextArea.js +34 -0
  138. package/dist/inputs/InputBirthDate.d.ts +13 -0
  139. package/dist/inputs/InputBirthDate.d.ts.map +1 -0
  140. package/dist/inputs/InputBirthDate.js +46 -0
  141. package/dist/inputs/InputDate.d.ts +8 -0
  142. package/dist/inputs/InputDate.d.ts.map +1 -0
  143. package/dist/inputs/InputDate.js +23 -0
  144. package/dist/inputs/InputEmail.d.ts +14 -0
  145. package/dist/inputs/InputEmail.d.ts.map +1 -0
  146. package/dist/inputs/InputEmail.js +43 -0
  147. package/dist/inputs/InputPassword.d.ts +12 -0
  148. package/dist/inputs/InputPassword.d.ts.map +1 -0
  149. package/dist/inputs/InputPassword.js +42 -0
  150. package/dist/inputs/MaskedInputs.d.ts +27 -0
  151. package/dist/inputs/MaskedInputs.d.ts.map +1 -0
  152. package/dist/inputs/MaskedInputs.js +161 -0
  153. package/dist/inputs/SgAutocomplete.d.ts +42 -0
  154. package/dist/inputs/SgAutocomplete.d.ts.map +1 -0
  155. package/dist/inputs/SgAutocomplete.js +241 -0
  156. package/dist/inputs/SgCurrencyEdit.d.ts +56 -0
  157. package/dist/inputs/SgCurrencyEdit.d.ts.map +1 -0
  158. package/dist/inputs/SgCurrencyEdit.js +496 -0
  159. package/dist/inputs/SgInputBirthDate.d.ts +13 -0
  160. package/dist/inputs/SgInputBirthDate.d.ts.map +1 -0
  161. package/dist/inputs/SgInputBirthDate.js +48 -0
  162. package/dist/inputs/SgInputCEP.d.ts +33 -0
  163. package/dist/inputs/SgInputCEP.d.ts.map +1 -0
  164. package/dist/inputs/SgInputCEP.js +117 -0
  165. package/dist/inputs/SgInputCNPJ.d.ts +20 -0
  166. package/dist/inputs/SgInputCNPJ.d.ts.map +1 -0
  167. package/dist/inputs/SgInputCNPJ.js +133 -0
  168. package/dist/inputs/SgInputCPF.d.ts +15 -0
  169. package/dist/inputs/SgInputCPF.d.ts.map +1 -0
  170. package/dist/inputs/SgInputCPF.js +70 -0
  171. package/dist/inputs/SgInputCPFCNPJ.d.ts +15 -0
  172. package/dist/inputs/SgInputCPFCNPJ.d.ts.map +1 -0
  173. package/dist/inputs/SgInputCPFCNPJ.js +92 -0
  174. package/dist/inputs/SgInputDate.d.ts +8 -0
  175. package/dist/inputs/SgInputDate.d.ts.map +1 -0
  176. package/dist/inputs/SgInputDate.js +120 -0
  177. package/dist/inputs/SgInputEmail.d.ts +16 -0
  178. package/dist/inputs/SgInputEmail.d.ts.map +1 -0
  179. package/dist/inputs/SgInputEmail.js +74 -0
  180. package/dist/inputs/SgInputFone.d.ts +15 -0
  181. package/dist/inputs/SgInputFone.d.ts.map +1 -0
  182. package/dist/inputs/SgInputFone.js +60 -0
  183. package/dist/inputs/SgInputMasked.d.ts +27 -0
  184. package/dist/inputs/SgInputMasked.d.ts.map +1 -0
  185. package/dist/inputs/SgInputMasked.js +161 -0
  186. package/dist/inputs/SgInputNumber.d.ts +49 -0
  187. package/dist/inputs/SgInputNumber.d.ts.map +1 -0
  188. package/dist/inputs/SgInputNumber.js +438 -0
  189. package/dist/inputs/SgInputPassword.d.ts +26 -0
  190. package/dist/inputs/SgInputPassword.d.ts.map +1 -0
  191. package/dist/inputs/SgInputPassword.js +278 -0
  192. package/dist/inputs/SgInputPhone.d.ts +15 -0
  193. package/dist/inputs/SgInputPhone.d.ts.map +1 -0
  194. package/dist/inputs/SgInputPhone.js +66 -0
  195. package/dist/inputs/SgInputPostalCode.d.ts +37 -0
  196. package/dist/inputs/SgInputPostalCode.d.ts.map +1 -0
  197. package/dist/inputs/SgInputPostalCode.js +193 -0
  198. package/dist/inputs/SgInputSelect.d.ts +16 -0
  199. package/dist/inputs/SgInputSelect.d.ts.map +1 -0
  200. package/dist/inputs/SgInputSelect.js +104 -0
  201. package/dist/inputs/SgInputText.d.ts +49 -0
  202. package/dist/inputs/SgInputText.d.ts.map +1 -0
  203. package/dist/inputs/SgInputText.js +336 -0
  204. package/dist/inputs/SgInputTextArea.d.ts +41 -0
  205. package/dist/inputs/SgInputTextArea.d.ts.map +1 -0
  206. package/dist/inputs/SgInputTextArea.js +216 -0
  207. package/dist/inputs/SgTextEditor.d.ts +27 -0
  208. package/dist/inputs/SgTextEditor.d.ts.map +1 -0
  209. package/dist/inputs/SgTextEditor.js +201 -0
  210. package/dist/integration/module.d.ts +39 -0
  211. package/dist/integration/module.d.ts.map +1 -0
  212. package/dist/integration/module.js +1 -0
  213. package/dist/layout/GroupBox.d.ts +10 -0
  214. package/dist/layout/GroupBox.d.ts.map +1 -0
  215. package/dist/layout/GroupBox.js +14 -0
  216. package/dist/layout/SgCard.d.ts +35 -0
  217. package/dist/layout/SgCard.d.ts.map +1 -0
  218. package/dist/layout/SgCard.js +106 -0
  219. package/dist/layout/SgDockLayout.d.ts +37 -0
  220. package/dist/layout/SgDockLayout.d.ts.map +1 -0
  221. package/dist/layout/SgDockLayout.js +101 -0
  222. package/dist/layout/SgDockZone.d.ts +12 -0
  223. package/dist/layout/SgDockZone.d.ts.map +1 -0
  224. package/dist/layout/SgDockZone.js +20 -0
  225. package/dist/layout/SgGrid.d.ts +18 -0
  226. package/dist/layout/SgGrid.d.ts.map +1 -0
  227. package/dist/layout/SgGrid.js +101 -0
  228. package/dist/layout/SgGroupBox.d.ts +10 -0
  229. package/dist/layout/SgGroupBox.d.ts.map +1 -0
  230. package/dist/layout/SgGroupBox.js +14 -0
  231. package/dist/layout/SgMainPanel.d.ts +11 -0
  232. package/dist/layout/SgMainPanel.d.ts.map +1 -0
  233. package/dist/layout/SgMainPanel.js +70 -0
  234. package/dist/layout/SgPanel.d.ts +22 -0
  235. package/dist/layout/SgPanel.d.ts.map +1 -0
  236. package/dist/layout/SgPanel.js +33 -0
  237. package/dist/layout/SgScreen.d.ts +11 -0
  238. package/dist/layout/SgScreen.d.ts.map +1 -0
  239. package/dist/layout/SgScreen.js +18 -0
  240. package/dist/layout/SgStack.d.ts +15 -0
  241. package/dist/layout/SgStack.d.ts.map +1 -0
  242. package/dist/layout/SgStack.js +32 -0
  243. package/dist/layout/SgToolBar.d.ts +46 -0
  244. package/dist/layout/SgToolBar.d.ts.map +1 -0
  245. package/dist/layout/SgToolBar.js +199 -0
  246. package/dist/layout/SgTreeView.d.ts +80 -0
  247. package/dist/layout/SgTreeView.d.ts.map +1 -0
  248. package/dist/layout/SgTreeView.js +338 -0
  249. package/dist/manifest.d.ts +3 -0
  250. package/dist/manifest.d.ts.map +1 -0
  251. package/dist/manifest.js +19 -0
  252. package/dist/masks.d.ts +14 -0
  253. package/dist/masks.d.ts.map +1 -0
  254. package/dist/masks.js +91 -0
  255. package/dist/overlay/SgDialog.d.ts +39 -0
  256. package/dist/overlay/SgDialog.d.ts.map +1 -0
  257. package/dist/overlay/SgDialog.js +177 -0
  258. package/dist/overlay/SgPopup.d.ts +42 -0
  259. package/dist/overlay/SgPopup.d.ts.map +1 -0
  260. package/dist/overlay/SgPopup.js +218 -0
  261. package/dist/rhf.d.ts +6 -0
  262. package/dist/rhf.d.ts.map +1 -0
  263. package/dist/rhf.js +1 -0
  264. package/dist/validators.d.ts +27 -0
  265. package/dist/validators.d.ts.map +1 -0
  266. package/dist/validators.js +218 -0
  267. package/dist/wizard/SGWizard.d.ts +28 -0
  268. package/dist/wizard/SGWizard.d.ts.map +1 -0
  269. package/dist/wizard/SGWizard.js +124 -0
  270. package/package.json +53 -0
@@ -0,0 +1,104 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React from "react";
4
+ import { Controller } from "react-hook-form";
5
+ function ErrorText(props) {
6
+ if (!props.message)
7
+ return null;
8
+ return _jsx("p", { "data-sg-error": true, className: "text-xs text-red-600", children: props.message });
9
+ }
10
+ function mergeSelectPropsWithField(selectProps, field) {
11
+ const resolvedValue = typeof field.value === "string" || typeof field.value === "number" || Array.isArray(field.value)
12
+ ? field.value
13
+ : field.value == null
14
+ ? ""
15
+ : String(field.value);
16
+ return {
17
+ ...selectProps,
18
+ value: resolvedValue,
19
+ onChange: (event) => {
20
+ field.onChange(event);
21
+ selectProps?.onChange?.(event);
22
+ },
23
+ onBlur: (event) => {
24
+ field.onBlur();
25
+ selectProps?.onBlur?.(event);
26
+ },
27
+ ref: (node) => {
28
+ field.ref(node);
29
+ const ref = selectProps?.ref;
30
+ if (!ref)
31
+ return;
32
+ if (typeof ref === "function") {
33
+ ref(node);
34
+ }
35
+ else if (ref && typeof ref === "object" && "current" in ref) {
36
+ ref.current = node;
37
+ }
38
+ }
39
+ };
40
+ }
41
+ function SgInputSelectBase(props) {
42
+ const selectRef = React.useRef(null);
43
+ const [isFilled, setIsFilled] = React.useState(() => {
44
+ const value = props.selectProps.value ?? props.selectProps.defaultValue ?? "";
45
+ return String(value).length > 0;
46
+ });
47
+ React.useEffect(() => {
48
+ const next = (selectRef.current?.value ?? "").length > 0;
49
+ if (next !== isFilled)
50
+ setIsFilled(next);
51
+ });
52
+ React.useEffect(() => {
53
+ if (props.selectProps.value === undefined)
54
+ return;
55
+ setIsFilled(String(props.selectProps.value ?? "").length > 0);
56
+ }, [props.selectProps.value]);
57
+ const setRefs = React.useCallback((node) => {
58
+ selectRef.current = node;
59
+ const ref = props.selectProps.ref;
60
+ if (!ref)
61
+ return;
62
+ if (typeof ref === "function") {
63
+ ref(node);
64
+ }
65
+ else if (typeof ref === "object") {
66
+ ref.current = node;
67
+ }
68
+ }, [props.selectProps]);
69
+ const handleChange = (event) => {
70
+ setIsFilled(event.currentTarget.value.length > 0);
71
+ props.selectProps.onChange?.(event);
72
+ };
73
+ const handleBlur = (event) => {
74
+ setIsFilled(event.currentTarget.value.length > 0);
75
+ props.selectProps.onBlur?.(event);
76
+ };
77
+ const alwaysFloat = props.alwaysFloat ?? (props.selectProps?.["data-floating"] === "always");
78
+ return (_jsxs("div", { children: [_jsxs("div", { className: "relative", children: [alwaysFloat ? (_jsx("label", { htmlFor: props.id, className: [
79
+ "pointer-events-none absolute left-3 top-0 z-10 -translate-y-1/2 bg-white px-1 text-[11px] font-medium leading-none",
80
+ props.error ? "text-[hsl(var(--destructive))]" : "text-foreground/70"
81
+ ].join(" "), children: props.label })) : null, (() => {
82
+ const hasError = Boolean(props.error);
83
+ const baseClass = "peer h-11 w-full rounded-md bg-white px-3 pt-4 text-sm shadow-sm focus:outline-none";
84
+ const borderClass = hasError
85
+ ? "border border-[hsl(var(--destructive))] focus:border-[hsl(var(--destructive))] focus:ring-2 focus:ring-[hsl(var(--destructive)/0.25)]"
86
+ : "border border-border focus:border-[hsl(var(--primary))] focus:ring-2 focus:ring-[hsl(var(--primary)/0.25)]";
87
+ const resolvedClassName = props.className ?? [baseClass, borderClass].join(" ");
88
+ return (_jsxs("select", { id: props.id, className: resolvedClassName, ...props.selectProps, ref: setRefs, onChange: handleChange, onBlur: handleBlur, children: [_jsx("option", { value: "", children: "Selecione" }), props.options.map((opt) => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }));
89
+ })(), alwaysFloat ? (_jsx("label", { htmlFor: props.id, className: "sr-only", children: props.label })) : (_jsx("label", { htmlFor: props.id, className: [
90
+ "absolute left-3 bg-white px-1 transition-all",
91
+ isFilled ? "-top-2 text-xs" : "top-3 text-sm",
92
+ props.error ? "text-[hsl(var(--destructive))]" : isFilled ? "text-[hsl(var(--primary))]" : "text-foreground/60",
93
+ props.error
94
+ ? "peer-focus:-top-2 peer-focus:text-xs peer-focus:text-[hsl(var(--destructive))]"
95
+ : "peer-focus:-top-2 peer-focus:text-xs peer-focus:text-[hsl(var(--primary))]"
96
+ ].join(" "), children: props.label }))] }), _jsx(ErrorText, { message: props.error })] }));
97
+ }
98
+ export function SgInputSelect(props) {
99
+ const { control, name, ...rest } = props;
100
+ if (control && name) {
101
+ return (_jsx(Controller, { name: name, control: control, render: ({ field, fieldState }) => (_jsx(SgInputSelectBase, { ...rest, error: rest.error ?? fieldState.error?.message, selectProps: mergeSelectPropsWithField(rest.selectProps, field) })) }));
102
+ }
103
+ return _jsx(SgInputSelectBase, { ...rest });
104
+ }
@@ -0,0 +1,49 @@
1
+ import React from "react";
2
+ import type { FieldValues, RegisterOptions, UseFormRegister } from "react-hook-form";
3
+ import type { RhfFieldProps } from "../rhf";
4
+ export type SgInputTextProps = {
5
+ id: string;
6
+ label?: string;
7
+ labelText?: string;
8
+ hintText?: string;
9
+ prefixText?: string;
10
+ suffixText?: string;
11
+ error?: string;
12
+ type?: React.HTMLInputTypeAttribute;
13
+ placeholder?: string;
14
+ className?: string;
15
+ labelClassName?: string;
16
+ inputProps?: (React.InputHTMLAttributes<HTMLInputElement> & {
17
+ ref?: React.Ref<HTMLInputElement>;
18
+ });
19
+ maxLength?: number;
20
+ maxLengthMessage?: string;
21
+ minLength?: number;
22
+ minLengthMessage?: string;
23
+ minNumberOfWords?: number;
24
+ minNumberOfWordsMessage?: string;
25
+ prefixIcon?: React.ReactNode;
26
+ width?: number | string;
27
+ clearButton?: boolean;
28
+ filled?: boolean;
29
+ enabled?: boolean;
30
+ textInputType?: React.InputHTMLAttributes<HTMLInputElement>["inputMode"];
31
+ onEnter?: () => void;
32
+ onExit?: () => void;
33
+ onChange?: (value: string) => void;
34
+ onClear?: () => void;
35
+ withBorder?: boolean;
36
+ borderRadius?: number | string;
37
+ required?: boolean;
38
+ requiredMessage?: string;
39
+ showCharCounter?: boolean;
40
+ iconButtons?: React.ReactNode[];
41
+ readOnly?: boolean;
42
+ validation?: (value: string) => string | null;
43
+ validateOnBlur?: boolean;
44
+ onValidation?: (message: string | null) => void;
45
+ register?: UseFormRegister<FieldValues>;
46
+ rules?: RegisterOptions<FieldValues>;
47
+ } & RhfFieldProps;
48
+ export declare function SgInputText(props: SgInputTextProps): import("react/jsx-runtime").JSX.Element;
49
+ //# sourceMappingURL=SgInputText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SgInputText.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputText.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAGV,WAAW,EACX,eAAe,EACf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GAAG;QAC1D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;IACzE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;CACtC,GAAG,aAAa,CAAC;AAyYlB,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA8DlD"}
@@ -0,0 +1,336 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React from "react";
4
+ import { X } from "lucide-react";
5
+ import { Controller } from "react-hook-form";
6
+ import { t, useComponentsI18n } from "../i18n";
7
+ function ErrorText(props) {
8
+ if (!props.message)
9
+ return null;
10
+ return _jsx("p", { "data-sg-error": true, className: "text-xs text-red-600", children: props.message });
11
+ }
12
+ function mergeRefs(...refs) {
13
+ return (node) => {
14
+ for (const ref of refs) {
15
+ if (!ref)
16
+ continue;
17
+ if (typeof ref === "function") {
18
+ ref(node);
19
+ }
20
+ else if (typeof ref === "object" && "current" in ref) {
21
+ ref.current = node;
22
+ }
23
+ }
24
+ };
25
+ }
26
+ function mergeInputPropsWithField(inputProps, field, options) {
27
+ const resolvedValue = options?.normalizeValue
28
+ ? options.normalizeValue(field.value)
29
+ : typeof field.value === "string" ||
30
+ typeof field.value === "number" ||
31
+ Array.isArray(field.value)
32
+ ? field.value
33
+ : field.value == null
34
+ ? ""
35
+ : String(field.value);
36
+ return {
37
+ ...inputProps,
38
+ value: resolvedValue,
39
+ onChange: (event) => {
40
+ if (options?.toFieldValue) {
41
+ field.onChange(options.toFieldValue(event.currentTarget.value));
42
+ }
43
+ else {
44
+ field.onChange(event);
45
+ }
46
+ inputProps?.onChange?.(event);
47
+ },
48
+ onBlur: (event) => {
49
+ field.onBlur();
50
+ inputProps?.onBlur?.(event);
51
+ },
52
+ ref: (node) => {
53
+ field.ref(node);
54
+ const ref = inputProps?.ref;
55
+ if (!ref)
56
+ return;
57
+ if (typeof ref === "function") {
58
+ ref(node);
59
+ }
60
+ else if (ref && typeof ref === "object" && "current" in ref) {
61
+ ref.current = node;
62
+ }
63
+ }
64
+ };
65
+ }
66
+ function SgInputTextBase(props) {
67
+ const i18n = useComponentsI18n();
68
+ const inputProps = props.inputProps ?? {};
69
+ const prefixText = props.prefixText ?? "";
70
+ const suffixText = props.suffixText ?? "";
71
+ const stripAffixes = React.useCallback((value) => {
72
+ if (value == null)
73
+ return "";
74
+ let text = String(value);
75
+ if (!text)
76
+ return "";
77
+ if (prefixText && text.startsWith(prefixText)) {
78
+ text = text.slice(prefixText.length);
79
+ }
80
+ if (suffixText && text.endsWith(suffixText)) {
81
+ text = text.slice(0, -suffixText.length);
82
+ }
83
+ return text;
84
+ }, [prefixText, suffixText]);
85
+ const buildFullValue = React.useCallback((raw) => {
86
+ if (!raw)
87
+ return "";
88
+ return `${prefixText}${raw}${suffixText}`;
89
+ }, [prefixText, suffixText]);
90
+ const resolvedInputProps = React.useMemo(() => {
91
+ const next = {
92
+ ...inputProps
93
+ };
94
+ if (inputProps.value !== undefined) {
95
+ next.value = stripAffixes(inputProps.value);
96
+ }
97
+ return next;
98
+ }, [inputProps, stripAffixes]);
99
+ const labelText = props.labelText ?? props.label ?? "";
100
+ const placeholder = props.placeholder ?? props.hintText ?? labelText;
101
+ const inputRef = React.useRef(null);
102
+ const prefixRef = React.useRef(null);
103
+ const suffixRef = React.useRef(null);
104
+ const [prefixWidth, setPrefixWidth] = React.useState(0);
105
+ const [suffixWidth, setSuffixWidth] = React.useState(0);
106
+ const [internalError, setInternalError] = React.useState(null);
107
+ const [hasInteracted, setHasInteracted] = React.useState(false);
108
+ const [isFilled, setIsFilled] = React.useState(() => {
109
+ const value = stripAffixes(inputProps.value ?? inputProps.defaultValue ?? "");
110
+ return value.length > 0;
111
+ });
112
+ const [valueLength, setValueLength] = React.useState(() => {
113
+ const value = stripAffixes(inputProps.value ?? inputProps.defaultValue ?? "");
114
+ return value.length;
115
+ });
116
+ React.useEffect(() => {
117
+ const next = (inputRef.current?.value ?? "").length > 0;
118
+ if (next !== isFilled)
119
+ setIsFilled(next);
120
+ const nextLength = (inputRef.current?.value ?? "").length;
121
+ setValueLength((prev) => (prev === nextLength ? prev : nextLength));
122
+ }, [isFilled]);
123
+ React.useEffect(() => {
124
+ if (inputProps.value === undefined)
125
+ return;
126
+ const raw = stripAffixes(inputProps.value ?? "");
127
+ setIsFilled(raw.length > 0);
128
+ setValueLength(raw.length);
129
+ }, [inputProps.value, stripAffixes]);
130
+ React.useLayoutEffect(() => {
131
+ if (prefixRef.current) {
132
+ const next = prefixRef.current.offsetWidth;
133
+ if (next !== prefixWidth)
134
+ setPrefixWidth(next);
135
+ }
136
+ else if (prefixWidth !== 0) {
137
+ setPrefixWidth(0);
138
+ }
139
+ if (suffixRef.current) {
140
+ const next = suffixRef.current.offsetWidth;
141
+ if (next !== suffixWidth)
142
+ setSuffixWidth(next);
143
+ }
144
+ else if (suffixWidth !== 0) {
145
+ setSuffixWidth(0);
146
+ }
147
+ }, [prefixText, suffixText, prefixWidth, suffixWidth]);
148
+ const setRefs = React.useCallback((node) => {
149
+ inputRef.current = node;
150
+ const ref = resolvedInputProps.ref;
151
+ if (!ref)
152
+ return;
153
+ if (typeof ref === "function") {
154
+ ref(node);
155
+ }
156
+ else if (typeof ref === "object") {
157
+ ref.current = node;
158
+ }
159
+ }, [inputProps]);
160
+ const runValidation = React.useCallback((value) => {
161
+ const required = props.required ?? false;
162
+ if (!value && required) {
163
+ const message = props.requiredMessage ?? t(i18n, "components.inputs.required");
164
+ setInternalError(message);
165
+ props.onValidation?.(message);
166
+ return;
167
+ }
168
+ if (props.maxLength && value.length > props.maxLength) {
169
+ const message = props.maxLengthMessage ??
170
+ t(i18n, "components.inputs.maxLength", { max: props.maxLength });
171
+ setInternalError(message);
172
+ props.onValidation?.(message);
173
+ return;
174
+ }
175
+ if (props.minLength && value.length < props.minLength) {
176
+ const message = props.minLengthMessage ??
177
+ t(i18n, "components.inputs.minLength", { min: props.minLength });
178
+ setInternalError(message);
179
+ props.onValidation?.(message);
180
+ return;
181
+ }
182
+ if (props.minNumberOfWords && wordCount(value) < props.minNumberOfWords) {
183
+ const message = props.minNumberOfWordsMessage ??
184
+ t(i18n, "components.inputs.minWords", { min: props.minNumberOfWords });
185
+ setInternalError(message);
186
+ props.onValidation?.(message);
187
+ return;
188
+ }
189
+ if (props.validation) {
190
+ const message = props.validation(value);
191
+ setInternalError(message);
192
+ props.onValidation?.(message ?? null);
193
+ return;
194
+ }
195
+ setInternalError(null);
196
+ props.onValidation?.(null);
197
+ }, [i18n, props]);
198
+ const handleChange = (event) => {
199
+ resolvedInputProps.onChange?.(event);
200
+ const rawValue = event.currentTarget.value;
201
+ setIsFilled(rawValue.length > 0);
202
+ setValueLength(rawValue.length);
203
+ setHasInteracted(true);
204
+ if (props.validateOnBlur === false) {
205
+ runValidation(rawValue);
206
+ }
207
+ props.onChange?.(buildFullValue(rawValue));
208
+ };
209
+ const handleBlur = (event) => {
210
+ setIsFilled(event.currentTarget.value.length > 0);
211
+ if ((props.validateOnBlur ?? true) || hasInteracted) {
212
+ runValidation(event.currentTarget.value);
213
+ }
214
+ resolvedInputProps.onBlur?.(event);
215
+ props.onExit?.();
216
+ };
217
+ const handleFocus = () => {
218
+ props.onEnter?.();
219
+ };
220
+ const handleClear = () => {
221
+ if (!inputRef.current)
222
+ return;
223
+ inputRef.current.value = "";
224
+ setIsFilled(false);
225
+ setValueLength(0);
226
+ const event = {
227
+ target: inputRef.current,
228
+ currentTarget: inputRef.current
229
+ };
230
+ resolvedInputProps.onChange?.(event);
231
+ props.onChange?.("");
232
+ props.onClear?.();
233
+ };
234
+ const isDisabled = props.enabled === false || props.readOnly || resolvedInputProps.readOnly;
235
+ const canShowClear = (props.clearButton ?? true) && !isDisabled;
236
+ const hasSuffix = canShowClear || (props.iconButtons?.length ?? 0) > 0;
237
+ const paddingLeft = props.prefixIcon ? "pl-10" : "px-3";
238
+ const paddingRight = hasSuffix ? "pr-10" : "pr-3";
239
+ const baseClass = "peer h-11 w-full rounded-md text-sm placeholder-transparent focus:outline-none";
240
+ const hasError = Boolean(props.error ?? internalError);
241
+ const borderClass = (props.withBorder ?? true) || hasError
242
+ ? hasError
243
+ ? "border border-[hsl(var(--destructive))] shadow-sm focus:border-[hsl(var(--destructive))] focus:ring-2 focus:ring-[hsl(var(--destructive)/0.25)]"
244
+ : "border border-border shadow-sm focus:border-[hsl(var(--primary))] focus:ring-2 focus:ring-[hsl(var(--primary)/0.25)]"
245
+ : "border border-transparent";
246
+ const bgClass = props.filled ? "bg-muted/40" : "bg-white";
247
+ const finalClass = [
248
+ baseClass,
249
+ borderClass,
250
+ bgClass,
251
+ paddingLeft,
252
+ paddingRight,
253
+ "py-2",
254
+ "leading-[1.2]",
255
+ prefixText && suffixText ? "text-center" : suffixText ? "text-right" : "text-left"
256
+ ].join(" ");
257
+ let resolvedBorderRadius;
258
+ if (props.borderRadius !== undefined) {
259
+ resolvedBorderRadius =
260
+ typeof props.borderRadius === "number"
261
+ ? `${props.borderRadius}px`
262
+ : props.borderRadius;
263
+ }
264
+ const prefixPaddingStyle = prefixText
265
+ ? `calc(${prefixWidth}px + 0.75rem${props.prefixIcon ? " + 0.75rem" : ""})`
266
+ : undefined;
267
+ const suffixPaddingStyle = suffixText
268
+ ? `calc(${suffixWidth}px + ${canShowClear ? "2rem" : "0.75rem"})`
269
+ : undefined;
270
+ const clearRightStyle = suffixText && suffixWidth
271
+ ? `${suffixWidth}px`
272
+ : undefined;
273
+ return (_jsxs("div", { style: { width: props.width ?? "100%" }, children: [_jsxs("div", { className: "relative", children: [prefixText ? (_jsx("span", { ref: prefixRef, className: "pointer-events-none absolute left-0 top-0 z-10 flex h-11 items-center rounded-l-md border border-border bg-muted/40 px-3 text-xs leading-none text-foreground/70", children: prefixText })) : null, props.prefixIcon ? (_jsx("span", { className: "pointer-events-none absolute left-3 top-1/2 z-10 -translate-y-1/2 text-foreground/60", children: props.prefixIcon })) : null, _jsx("input", { id: props.id, type: props.type ?? "text", placeholder: placeholder, className: props.className ?? finalClass, style: {
274
+ borderRadius: resolvedBorderRadius,
275
+ paddingLeft: prefixPaddingStyle,
276
+ paddingRight: suffixPaddingStyle,
277
+ ...(prefixText ? { borderTopLeftRadius: 0, borderBottomLeftRadius: 0, borderLeftWidth: 0 } : {}),
278
+ ...(suffixText ? { borderTopRightRadius: 0, borderBottomRightRadius: 0, borderRightWidth: 0 } : {}),
279
+ ...(resolvedInputProps.style ?? {})
280
+ }, maxLength: props.maxLength, readOnly: props.readOnly, disabled: props.enabled === false, inputMode: props.textInputType ?? resolvedInputProps.inputMode, ...resolvedInputProps, ref: setRefs, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus }), suffixText ? (_jsx("span", { ref: suffixRef, className: "pointer-events-none absolute right-0 top-0 z-10 flex h-11 items-center rounded-r-md border border-border bg-muted/40 px-3 text-xs leading-none text-foreground/70", children: suffixText })) : null, _jsxs("label", { htmlFor: props.id, className: [
281
+ "absolute bg-white px-1 transition-all",
282
+ isFilled
283
+ ? "-top-2 left-3 text-xs"
284
+ : `top-3 text-sm ${props.prefixIcon ? "left-10" : "left-3"}`,
285
+ hasError ? "text-[hsl(var(--destructive))]" : isFilled ? "text-[hsl(var(--primary))]" : "text-foreground/60",
286
+ hasError
287
+ ? "peer-focus:-top-2 peer-focus:left-3 peer-focus:text-xs peer-focus:text-[hsl(var(--destructive))]"
288
+ : "peer-focus:-top-2 peer-focus:left-3 peer-focus:text-xs peer-focus:text-[hsl(var(--primary))]",
289
+ props.labelClassName ?? ""
290
+ ].join(" "), style: prefixPaddingStyle ? { left: prefixPaddingStyle } : undefined, children: [_jsx("span", { children: labelText }), props.required ? (_jsx("span", { className: "ml-1 text-[hsl(var(--destructive))]", "aria-hidden": "true", children: "*" })) : null] }), hasSuffix ? (_jsxs("span", { className: "absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-1", style: clearRightStyle ? { right: clearRightStyle } : undefined, children: [canShowClear ? (_jsx("button", { type: "button", onClick: handleClear, className: "rounded px-1 text-xs text-foreground/60 hover:text-foreground", "aria-label": t(i18n, "components.actions.clear"), children: _jsx(X, { size: 16 }) })) : null, props.iconButtons?.map((node, index) => (_jsx("span", { children: node }, index)))] })) : null] }), _jsxs("div", { className: "mt-1 flex items-center justify-between gap-2", children: [_jsx(ErrorText, { message: props.error ?? internalError ?? undefined }), props.showCharCounter ? (_jsxs("span", { className: "text-[11px] text-foreground/50", children: [valueLength, props.maxLength ? `/${props.maxLength}` : ""] })) : null] })] }));
291
+ }
292
+ export function SgInputText(props) {
293
+ const { control, name, register, rules, ...rest } = props;
294
+ if (name && register) {
295
+ const reg = register(name, rules);
296
+ return (_jsx(SgInputTextBase, { ...rest, inputProps: {
297
+ ...rest.inputProps,
298
+ name,
299
+ onChange: (event) => {
300
+ reg.onChange(event);
301
+ rest.inputProps?.onChange?.(event);
302
+ },
303
+ onBlur: (event) => {
304
+ reg.onBlur(event);
305
+ rest.inputProps?.onBlur?.(event);
306
+ },
307
+ ref: mergeRefs(reg.ref, rest.inputProps?.ref)
308
+ } }));
309
+ }
310
+ if (control && name) {
311
+ const prefixText = rest.prefixText ?? "";
312
+ const suffixText = rest.suffixText ?? "";
313
+ const normalizeValue = (value) => {
314
+ if (value == null)
315
+ return "";
316
+ let text = String(value);
317
+ if (prefixText && text.startsWith(prefixText)) {
318
+ text = text.slice(prefixText.length);
319
+ }
320
+ if (suffixText && text.endsWith(suffixText)) {
321
+ text = text.slice(0, -suffixText.length);
322
+ }
323
+ return text;
324
+ };
325
+ const toFieldValue = (raw) => {
326
+ if (!raw)
327
+ return "";
328
+ return `${prefixText}${raw}${suffixText}`;
329
+ };
330
+ return (_jsx(Controller, { name: name, control: control, render: ({ field, fieldState }) => (_jsx(SgInputTextBase, { ...rest, error: rest.error ?? fieldState.error?.message, inputProps: mergeInputPropsWithField(rest.inputProps, field, { normalizeValue, toFieldValue }) })) }));
331
+ }
332
+ return _jsx(SgInputTextBase, { ...rest });
333
+ }
334
+ function wordCount(value) {
335
+ return value.trim().split(/\s+/).filter(Boolean).length;
336
+ }
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import type { RhfFieldProps } from "../rhf";
3
+ export type SgInputTextAreaProps = {
4
+ id: string;
5
+ label?: string;
6
+ labelText?: string;
7
+ hintText?: string;
8
+ error?: string;
9
+ className?: string;
10
+ labelClassName?: string;
11
+ textareaProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;
12
+ maxLength?: number;
13
+ maxLengthMessage?: string;
14
+ maxLines?: number;
15
+ minLines?: number;
16
+ minLinesMessage?: string;
17
+ minLength?: number;
18
+ minLengthMessage?: string;
19
+ minNumberOfWords?: number;
20
+ minNumberOfWordsMessage?: string;
21
+ required?: boolean;
22
+ requiredMessage?: string;
23
+ prefixIcon?: React.ReactNode;
24
+ width?: number | string;
25
+ height?: number | string;
26
+ clearButton?: boolean;
27
+ filled?: boolean;
28
+ enabled?: boolean;
29
+ showCharCounter?: boolean;
30
+ onEnter?: () => void;
31
+ onExit?: () => void;
32
+ onChange?: (value: string) => void;
33
+ onClear?: () => void;
34
+ withBorder?: boolean;
35
+ borderRadius?: number | string;
36
+ validation?: (value: string) => string | null;
37
+ validateOnBlur?: boolean;
38
+ onValidation?: (message: string | null) => void;
39
+ } & RhfFieldProps;
40
+ export declare function SgInputTextArea(props: Readonly<SgInputTextAreaProps>): import("react/jsx-runtime").JSX.Element;
41
+ //# sourceMappingURL=SgInputTextArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SgInputTextArea.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputTextArea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD,GAAG,aAAa,CAAC;AA+QlB,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,2CAwBpE"}