sellmate-design-system-react 0.1.3 → 0.1.5

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 (165) hide show
  1. package/dist/components/SActionModal/SActionModal.cjs +129 -1
  2. package/dist/components/SActionModal/SActionModal.cjs.map +1 -1
  3. package/dist/components/SActionModal/SActionModal.js +129 -1
  4. package/dist/components/SActionModal/SActionModal.js.map +1 -1
  5. package/dist/components/SBarcodeInput/SBarcodeInput.cjs +157 -4
  6. package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
  7. package/dist/components/SBarcodeInput/SBarcodeInput.js +158 -5
  8. package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
  9. package/dist/components/SButton/SButton.cjs +129 -1
  10. package/dist/components/SButton/SButton.cjs.map +1 -1
  11. package/dist/components/SButton/SButton.js +129 -1
  12. package/dist/components/SButton/SButton.js.map +1 -1
  13. package/dist/components/SCalendar/SCalendar.cjs +131 -3
  14. package/dist/components/SCalendar/SCalendar.cjs.map +1 -1
  15. package/dist/components/SCalendar/SCalendar.d.ts +3 -1
  16. package/dist/components/SCalendar/SCalendar.js +131 -3
  17. package/dist/components/SCalendar/SCalendar.js.map +1 -1
  18. package/dist/components/SCallout/SCallout.cjs +129 -1
  19. package/dist/components/SCallout/SCallout.cjs.map +1 -1
  20. package/dist/components/SCallout/SCallout.js +129 -1
  21. package/dist/components/SCallout/SCallout.js.map +1 -1
  22. package/dist/components/SCheckbox/SCheckbox.cjs +130 -2
  23. package/dist/components/SCheckbox/SCheckbox.cjs.map +1 -1
  24. package/dist/components/SCheckbox/SCheckbox.js +130 -2
  25. package/dist/components/SCheckbox/SCheckbox.js.map +1 -1
  26. package/dist/components/SChip/SChip.cjs +130 -3
  27. package/dist/components/SChip/SChip.cjs.map +1 -1
  28. package/dist/components/SChip/SChip.js +130 -3
  29. package/dist/components/SChip/SChip.js.map +1 -1
  30. package/dist/components/SChipInput/SChipInput.cjs +154 -4
  31. package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
  32. package/dist/components/SChipInput/SChipInput.js +154 -4
  33. package/dist/components/SChipInput/SChipInput.js.map +1 -1
  34. package/dist/components/SConfirmModal/SConfirmModal.cjs +129 -1
  35. package/dist/components/SConfirmModal/SConfirmModal.cjs.map +1 -1
  36. package/dist/components/SConfirmModal/SConfirmModal.js +129 -1
  37. package/dist/components/SConfirmModal/SConfirmModal.js.map +1 -1
  38. package/dist/components/SDatePicker/SDatePicker.cjs +159 -6
  39. package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
  40. package/dist/components/SDatePicker/SDatePicker.js +159 -6
  41. package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
  42. package/dist/components/SDateRangePicker/SDateRangePicker.cjs +157 -4
  43. package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
  44. package/dist/components/SDateRangePicker/SDateRangePicker.js +157 -4
  45. package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
  46. package/dist/components/SDropdownButton/SDropdownButton.cjs +129 -1
  47. package/dist/components/SDropdownButton/SDropdownButton.cjs.map +1 -1
  48. package/dist/components/SDropdownButton/SDropdownButton.js +129 -1
  49. package/dist/components/SDropdownButton/SDropdownButton.js.map +1 -1
  50. package/dist/components/SField/SField.cjs +130 -2
  51. package/dist/components/SField/SField.cjs.map +1 -1
  52. package/dist/components/SField/SField.js +130 -2
  53. package/dist/components/SField/SField.js.map +1 -1
  54. package/dist/components/SFilePicker/SFilePicker.cjs +157 -4
  55. package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
  56. package/dist/components/SFilePicker/SFilePicker.js +157 -4
  57. package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
  58. package/dist/components/SForm/SForm.cjs +91 -0
  59. package/dist/components/SForm/SForm.cjs.map +1 -0
  60. package/dist/components/SForm/SForm.d.ts +33 -0
  61. package/dist/components/SForm/SForm.js +89 -0
  62. package/dist/components/SForm/SForm.js.map +1 -0
  63. package/dist/components/SForm/index.d.ts +1 -0
  64. package/dist/components/SGhostButton/SGhostButton.cjs +129 -1
  65. package/dist/components/SGhostButton/SGhostButton.cjs.map +1 -1
  66. package/dist/components/SGhostButton/SGhostButton.js +129 -1
  67. package/dist/components/SGhostButton/SGhostButton.js.map +1 -1
  68. package/dist/components/SGuide/SGuide.cjs +129 -1
  69. package/dist/components/SGuide/SGuide.cjs.map +1 -1
  70. package/dist/components/SGuide/SGuide.js +129 -1
  71. package/dist/components/SGuide/SGuide.js.map +1 -1
  72. package/dist/components/SIcon/SIcon.cjs +129 -1
  73. package/dist/components/SIcon/SIcon.cjs.map +1 -1
  74. package/dist/components/SIcon/SIcon.d.ts +3 -2
  75. package/dist/components/SIcon/SIcon.js +129 -1
  76. package/dist/components/SIcon/SIcon.js.map +1 -1
  77. package/dist/components/SInput/SInput.cjs +157 -4
  78. package/dist/components/SInput/SInput.cjs.map +1 -1
  79. package/dist/components/SInput/SInput.js +158 -5
  80. package/dist/components/SInput/SInput.js.map +1 -1
  81. package/dist/components/SKeyValueTable/SKeyValueTable.cjs +214 -7
  82. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  83. package/dist/components/SKeyValueTable/SKeyValueTable.js +214 -7
  84. package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
  85. package/dist/components/SLoadingModal/SLoadingModal.cjs +129 -1
  86. package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
  87. package/dist/components/SLoadingModal/SLoadingModal.js +129 -1
  88. package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
  89. package/dist/components/SModalContainer/SModalContainer.cjs +129 -1
  90. package/dist/components/SModalContainer/SModalContainer.cjs.map +1 -1
  91. package/dist/components/SModalContainer/SModalContainer.js +129 -1
  92. package/dist/components/SModalContainer/SModalContainer.js.map +1 -1
  93. package/dist/components/SNumberInput/SNumberInput.cjs +157 -4
  94. package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
  95. package/dist/components/SNumberInput/SNumberInput.js +157 -4
  96. package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
  97. package/dist/components/SPagination/SPagination.cjs +129 -1
  98. package/dist/components/SPagination/SPagination.cjs.map +1 -1
  99. package/dist/components/SPagination/SPagination.js +129 -1
  100. package/dist/components/SPagination/SPagination.js.map +1 -1
  101. package/dist/components/SPopover/SPopover.cjs +129 -1
  102. package/dist/components/SPopover/SPopover.cjs.map +1 -1
  103. package/dist/components/SPopover/SPopover.d.ts +3 -1
  104. package/dist/components/SPopover/SPopover.js +129 -1
  105. package/dist/components/SPopover/SPopover.js.map +1 -1
  106. package/dist/components/SPopup/SPopup.cjs +129 -1
  107. package/dist/components/SPopup/SPopup.cjs.map +1 -1
  108. package/dist/components/SPopup/SPopup.js +129 -1
  109. package/dist/components/SPopup/SPopup.js.map +1 -1
  110. package/dist/components/SSelect/SSelect.cjs +157 -4
  111. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  112. package/dist/components/SSelect/SSelect.js +158 -5
  113. package/dist/components/SSelect/SSelect.js.map +1 -1
  114. package/dist/components/STable/STable.cjs +161 -6
  115. package/dist/components/STable/STable.cjs.map +1 -1
  116. package/dist/components/STable/STable.d.ts +3 -1
  117. package/dist/components/STable/STable.js +161 -6
  118. package/dist/components/STable/STable.js.map +1 -1
  119. package/dist/components/STabs/STabs.cjs +129 -1
  120. package/dist/components/STabs/STabs.cjs.map +1 -1
  121. package/dist/components/STabs/STabs.js +129 -1
  122. package/dist/components/STabs/STabs.js.map +1 -1
  123. package/dist/components/STag/STag.cjs +129 -1
  124. package/dist/components/STag/STag.cjs.map +1 -1
  125. package/dist/components/STag/STag.js +129 -1
  126. package/dist/components/STag/STag.js.map +1 -1
  127. package/dist/components/STextLink/STextLink.cjs +129 -1
  128. package/dist/components/STextLink/STextLink.cjs.map +1 -1
  129. package/dist/components/STextLink/STextLink.d.ts +3 -2
  130. package/dist/components/STextLink/STextLink.js +129 -1
  131. package/dist/components/STextLink/STextLink.js.map +1 -1
  132. package/dist/components/STextarea/STextarea.cjs +157 -4
  133. package/dist/components/STextarea/STextarea.cjs.map +1 -1
  134. package/dist/components/STextarea/STextarea.js +158 -5
  135. package/dist/components/STextarea/STextarea.js.map +1 -1
  136. package/dist/components/SToast/SToast.cjs +129 -1
  137. package/dist/components/SToast/SToast.cjs.map +1 -1
  138. package/dist/components/SToast/SToast.js +129 -1
  139. package/dist/components/SToast/SToast.js.map +1 -1
  140. package/dist/components/SToast/SToastContainer.cjs +129 -1
  141. package/dist/components/SToast/SToastContainer.cjs.map +1 -1
  142. package/dist/components/SToast/SToastContainer.js +129 -1
  143. package/dist/components/SToast/SToastContainer.js.map +1 -1
  144. package/dist/components/STooltip/STooltip.cjs +130 -2
  145. package/dist/components/STooltip/STooltip.cjs.map +1 -1
  146. package/dist/components/STooltip/STooltip.d.ts +3 -1
  147. package/dist/components/STooltip/STooltip.js +130 -2
  148. package/dist/components/STooltip/STooltip.js.map +1 -1
  149. package/dist/index.cjs +311 -8
  150. package/dist/index.cjs.map +1 -1
  151. package/dist/index.d.ts +2 -0
  152. package/dist/index.js +308 -9
  153. package/dist/index.js.map +1 -1
  154. package/dist/lib/color.cjs +135 -0
  155. package/dist/lib/color.cjs.map +1 -0
  156. package/dist/lib/color.d.ts +28 -0
  157. package/dist/lib/color.js +131 -0
  158. package/dist/lib/color.js.map +1 -0
  159. package/dist/lib/form.cjs +23 -0
  160. package/dist/lib/form.cjs.map +1 -1
  161. package/dist/lib/form.d.ts +25 -0
  162. package/dist/lib/form.js +21 -1
  163. package/dist/lib/form.js.map +1 -1
  164. package/dist/styles.css +35 -3
  165. package/package.json +1 -1
@@ -11,6 +11,134 @@ import * as RTooltip from '@radix-ui/react-tooltip';
11
11
  function cn(...inputs) {
12
12
  return twMerge(clsx(inputs));
13
13
  }
14
+
15
+ // src/lib/color.ts
16
+ var COLOR_KEYS = [
17
+ "white",
18
+ "black",
19
+ "grey_10",
20
+ "grey_20",
21
+ "grey_25",
22
+ "grey_30",
23
+ "grey_35",
24
+ "grey_45",
25
+ "grey_50",
26
+ "grey_55",
27
+ "grey_60",
28
+ "grey_65",
29
+ "grey_70",
30
+ "grey_80",
31
+ "grey_85",
32
+ "grey_90",
33
+ "grey_95",
34
+ "grey_05",
35
+ "red_15",
36
+ "red_20",
37
+ "red_30",
38
+ "red_45",
39
+ "red_60",
40
+ "red_70",
41
+ "red_75",
42
+ "red_80",
43
+ "red_85",
44
+ "red_90",
45
+ "red_95",
46
+ "red_99",
47
+ "orange_10",
48
+ "orange_20",
49
+ "orange_35",
50
+ "orange_45",
51
+ "orange_55",
52
+ "orange_60",
53
+ "orange_65",
54
+ "orange_75",
55
+ "orange_85",
56
+ "orange_90",
57
+ "orange_95",
58
+ "orange_99",
59
+ "yellow_10",
60
+ "yellow_20",
61
+ "yellow_25",
62
+ "yellow_30",
63
+ "yellow_40",
64
+ "yellow_45",
65
+ "yellow_50",
66
+ "yellow_60",
67
+ "yellow_70",
68
+ "yellow_80",
69
+ "yellow_90",
70
+ "yellow_95",
71
+ "olive_10",
72
+ "olive_15",
73
+ "olive_20",
74
+ "olive_30",
75
+ "olive_45",
76
+ "olive_55",
77
+ "olive_65",
78
+ "olive_70",
79
+ "olive_80",
80
+ "olive_90",
81
+ "olive_95",
82
+ "olive_05",
83
+ "green_15",
84
+ "green_25",
85
+ "green_45",
86
+ "green_55",
87
+ "green_65",
88
+ "green_70",
89
+ "green_75",
90
+ "green_80",
91
+ "green_85",
92
+ "green_90",
93
+ "green_95",
94
+ "green_99",
95
+ "steelblue_10",
96
+ "steelblue_25",
97
+ "steelblue_45",
98
+ "steelblue_60",
99
+ "steelblue_65",
100
+ "steelblue_70",
101
+ "steelblue_75",
102
+ "steelblue_80",
103
+ "steelblue_85",
104
+ "steelblue_90",
105
+ "steelblue_95",
106
+ "steelblue_99",
107
+ "oceanblue_15",
108
+ "oceanblue_25",
109
+ "oceanblue_50",
110
+ "oceanblue_60",
111
+ "oceanblue_65",
112
+ "oceanblue_70",
113
+ "oceanblue_75",
114
+ "oceanblue_80",
115
+ "oceanblue_85",
116
+ "oceanblue_90",
117
+ "oceanblue_95",
118
+ "oceanblue_99",
119
+ "brilliantblue_10",
120
+ "brilliantblue_20",
121
+ "brilliantblue_25",
122
+ "brilliantblue_40",
123
+ "brilliantblue_50",
124
+ "brilliantblue_60",
125
+ "brilliantblue_70",
126
+ "brilliantblue_75",
127
+ "brilliantblue_80",
128
+ "brilliantblue_85",
129
+ "brilliantblue_90",
130
+ "brilliantblue_95",
131
+ "brilliantblue_99",
132
+ "brilliantblue_05"
133
+ ];
134
+ var KEY_SET = new Set(COLOR_KEYS);
135
+ function isColorKey(input) {
136
+ return KEY_SET.has(input);
137
+ }
138
+ function resolveColor(input, fallback) {
139
+ if (input === null || input === void 0 || input === "") return fallback;
140
+ return isColorKey(input) ? `var(--color-${input.replace(/_/g, "-")})` : input;
141
+ }
14
142
  var Icon_add = (p) => {
15
143
  const { size = 24, ...rest } = p;
16
144
  return /* @__PURE__ */ jsx(
@@ -2710,7 +2838,7 @@ var SIcon = forwardRef(function SIcon2({ name, size = 24, color, rotate, label,
2710
2838
  {
2711
2839
  ref,
2712
2840
  className: cn("inline-flex items-center justify-center", rotateClass, className),
2713
- style: { color, ...style },
2841
+ style: { color: resolveColor(color), ...style },
2714
2842
  role: label ? "img" : void 0,
2715
2843
  "aria-label": label,
2716
2844
  "aria-hidden": label ? void 0 : true,
@@ -2739,7 +2867,7 @@ var HIDE_DELAY_MS = 100;
2739
2867
  function useBody(content, message = []) {
2740
2868
  if (content != null) return content;
2741
2869
  if (message.length === 0) return null;
2742
- return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-[12px]", children: message.map((line, i) => /* @__PURE__ */ jsx("span", { children: line }, i)) });
2870
+ return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx("div", { children: line }, i)) });
2743
2871
  }
2744
2872
  var STooltip = forwardRef(function STooltip2({
2745
2873
  content,
@@ -3023,8 +3151,6 @@ var SButton = forwardRef(function SButton2({
3023
3151
  }
3024
3152
  );
3025
3153
  });
3026
-
3027
- // src/lib/form.ts
3028
3154
  function runRules(value, rules) {
3029
3155
  if (!rules || rules.length === 0) return "";
3030
3156
  for (const rule of rules) {
@@ -3033,6 +3159,24 @@ function runRules(value, rules) {
3033
3159
  }
3034
3160
  return "";
3035
3161
  }
3162
+ var FormContext = createContext(null);
3163
+ function useFormContext() {
3164
+ return useContext(FormContext);
3165
+ }
3166
+ function useFormField(field) {
3167
+ const ctx = useFormContext();
3168
+ const cbRef = useRef(field);
3169
+ cbRef.current = field;
3170
+ const name = field.name ?? "";
3171
+ useEffect(() => {
3172
+ if (!ctx) return;
3173
+ return ctx.register({
3174
+ name,
3175
+ validate: () => cbRef.current.validate(),
3176
+ resetValidation: () => cbRef.current.resetValidation()
3177
+ });
3178
+ }, [ctx, name]);
3179
+ }
3036
3180
  var FIELD_SIZE = {
3037
3181
  sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 12 },
3038
3182
  md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 12 }
@@ -3217,6 +3361,15 @@ var SInput = forwardRef(function SInput2({
3217
3361
  const isPassword = type === "password";
3218
3362
  const inputType = isPassword ? visible ? "text" : "password" : type;
3219
3363
  const hasValue = value !== void 0 && value !== null && String(value) !== "";
3364
+ useFormField({
3365
+ name: rest.name,
3366
+ validate: () => {
3367
+ const msg = runRules(value, rules);
3368
+ setRuleError(msg);
3369
+ return msg === "";
3370
+ },
3371
+ resetValidation: () => setRuleError("")
3372
+ });
3220
3373
  const resolvedError = error || ruleError !== "";
3221
3374
  const resolvedErrorMessage = ruleError !== "" ? ruleError : errorMessage;
3222
3375
  const resolvedStatus = status ?? (rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0);
@@ -3347,6 +3500,15 @@ var STextarea = forwardRef(function STextarea2({
3347
3500
  }, ref) {
3348
3501
  const p = PAD;
3349
3502
  const [ruleError, setRuleError] = useState("");
3503
+ useFormField({
3504
+ name: rest.name,
3505
+ validate: () => {
3506
+ const msg = runRules(value, rules);
3507
+ setRuleError(msg);
3508
+ return msg === "";
3509
+ },
3510
+ resetValidation: () => setRuleError("")
3511
+ });
3350
3512
  const resolvedError = error || ruleError !== "";
3351
3513
  const resolvedErrorMessage = ruleError !== "" ? ruleError : errorMessage;
3352
3514
  const resolvedStatus = status ?? (rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0);
@@ -3480,6 +3642,15 @@ var SNumberInput = forwardRef(function SNumberInput2({
3480
3642
  useEffect(() => {
3481
3643
  setDisplay(formatWithCommas(toNumber(value)));
3482
3644
  }, [value]);
3645
+ useFormField({
3646
+ name,
3647
+ validate: () => {
3648
+ const msg = runRules(numValue, rules);
3649
+ setRuleError(msg);
3650
+ return msg === "";
3651
+ },
3652
+ resetValidation: () => setRuleError("")
3653
+ });
3483
3654
  const resolvedError = error || ruleError !== "";
3484
3655
  const resolvedStatus = status ?? (rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0);
3485
3656
  const emit = (n) => {
@@ -3791,6 +3962,15 @@ var SSelect = forwardRef(function SSelect2({
3791
3962
  const arr = Array.isArray(value) ? value : [value];
3792
3963
  return arr.map((v) => v != null && typeof v === "object" ? v.value : v).filter((v) => v != null && v !== "").map(String);
3793
3964
  }, [value]);
3965
+ useFormField({
3966
+ name,
3967
+ validate: () => {
3968
+ const msg = runRules(multi ? selected : selected[0] ?? "", rules);
3969
+ setRuleError(msg);
3970
+ return msg === "";
3971
+ },
3972
+ resetValidation: () => setRuleError("")
3973
+ });
3794
3974
  const emit = (next) => {
3795
3975
  if (!onValueChange) return;
3796
3976
  const mapped = next.map(
@@ -4168,7 +4348,7 @@ function SCheckbox({
4168
4348
  onValueChange(false);
4169
4349
  }
4170
4350
  };
4171
- const boxBg = disabled ? "var(--cmp-checkbox-bg-disabled)" : isChecked && !inverse ? "var(--cmp-checkbox-checked-bg-default)" : "transparent";
4351
+ const boxBg = disabled ? "var(--cmp-checkbox-bg-disabled)" : inverse ? "transparent" : isChecked ? "var(--cmp-checkbox-checked-bg-default)" : "var(--cmp-checkbox-unchecked-bg-default)";
4172
4352
  const boxBorder = disabled ? "var(--cmp-checkbox-border-disabled)" : inverse ? "var(--cmp-checkbox-checked-border-inverse)" : isChecked ? "var(--cmp-checkbox-checked-bg-default)" : "var(--cmp-checkbox-unchecked-border-default)";
4173
4353
  const iconColor = disabled ? "var(--cmp-checkbox-checked-icon-disabled)" : "var(--cmp-checkbox-checked-icon-default)";
4174
4354
  const labelColor = disabled ? "var(--cmp-checkbox-label-disabled)" : inverse ? "var(--cmp-checkbox-label-inverse)" : "var(--cmp-checkbox-label-default)";
@@ -4568,7 +4748,7 @@ function SCalendar({
4568
4748
  "span",
4569
4749
  {
4570
4750
  className: "h-[var(--cmp-datepicker-calendar-day-dot-size)] w-[var(--cmp-datepicker-calendar-day-dot-size)] rounded-full",
4571
- style: { backgroundColor: ev.color }
4751
+ style: { backgroundColor: resolveColor(ev.color) }
4572
4752
  },
4573
4753
  i
4574
4754
  ))
@@ -4596,7 +4776,7 @@ function SCalendar({
4596
4776
  "span",
4597
4777
  {
4598
4778
  className: "h-[var(--cmp-datepicker-calendar-day-dot-size)] w-[var(--cmp-datepicker-calendar-day-dot-size)] rounded-full",
4599
- style: { backgroundColor: item.color },
4779
+ style: { backgroundColor: resolveColor(item.color) },
4600
4780
  "aria-hidden": true
4601
4781
  }
4602
4782
  ),
@@ -4640,6 +4820,15 @@ function SDatePicker({
4640
4820
  const [focused, setFocused] = useState(false);
4641
4821
  const [ruleError, setRuleError] = useState("");
4642
4822
  const hasValue = value != null && value !== "";
4823
+ useFormField({
4824
+ name,
4825
+ validate: () => {
4826
+ const msg = runRules(value, rules);
4827
+ setRuleError(msg);
4828
+ return msg === "";
4829
+ },
4830
+ resetValidation: () => setRuleError("")
4831
+ });
4643
4832
  const resolvedError = error || ruleError !== "";
4644
4833
  const resolvedStatus = status ?? (rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0);
4645
4834
  const dims = size === "md" ? { padX: 16, gap: 12, icon: 20, minW: 104, fontSize: 14, lineHeight: 24, radius: 6 } : { padX: 12, gap: 8, icon: 16, minW: 80, fontSize: 12, lineHeight: 20, radius: 4 };
@@ -4925,6 +5114,15 @@ function SDateRangePicker({
4925
5114
  const [ruleError, setRuleError] = useState("");
4926
5115
  const hasValue = value != null && value[0] !== "" && value[1] !== "";
4927
5116
  const display = hasValue ? `${value[0]} ~ ${value[1]}` : placeholder;
5117
+ useFormField({
5118
+ name,
5119
+ validate: () => {
5120
+ const msg = runRules(value, rules);
5121
+ setRuleError(msg);
5122
+ return msg === "";
5123
+ },
5124
+ resetValidation: () => setRuleError("")
5125
+ });
4928
5126
  const resolvedError = error || ruleError !== "";
4929
5127
  const resolvedStatus = status ?? (rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0);
4930
5128
  const dims = size === "md" ? { padX: 16, gap: 12, icon: 20, minW: 104, fontSize: 14, lineHeight: 24, radius: 6 } : { padX: 12, gap: 8, icon: 16, minW: 80, fontSize: 12, lineHeight: 20, radius: 4 };
@@ -5189,6 +5387,15 @@ function SFilePicker({
5189
5387
  const files = multiple ? Array.isArray(value) ? value : [] : value && !Array.isArray(value) ? value : null;
5190
5388
  const hasSingle = !multiple && !!files;
5191
5389
  const displayText = hasSingle ? files.name : placeholder;
5390
+ useFormField({
5391
+ name,
5392
+ validate: () => {
5393
+ const msg = runRules(files, rules);
5394
+ setRuleError(msg);
5395
+ return msg === "";
5396
+ },
5397
+ resetValidation: () => setRuleError("")
5398
+ });
5192
5399
  const validate = (arr, existing = 0) => {
5193
5400
  const mfs = toBytes(maxFileSize), mts = toBytes(maxTotalSize), mf = maxFiles != null ? Number(maxFiles) : void 0;
5194
5401
  if (mf != null && existing + arr.length > mf)