@proyecto-viviana/solid-stately 0.2.7 → 0.4.0

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 (254) hide show
  1. package/README.md +30 -283
  2. package/dist/autocomplete/createAutocompleteState.d.ts +2 -2
  3. package/dist/autocomplete/index.d.ts +1 -1
  4. package/dist/calendar/IncompleteDate.d.ts +61 -0
  5. package/dist/calendar/createCalendarState.d.ts +41 -16
  6. package/dist/calendar/createDateFieldState.d.ts +39 -9
  7. package/dist/calendar/createDatePickerState.d.ts +60 -0
  8. package/dist/calendar/createRangeCalendarState.d.ts +37 -10
  9. package/dist/calendar/createTimeFieldState.d.ts +34 -7
  10. package/dist/calendar/index.d.ts +7 -6
  11. package/dist/checkbox/createCheckboxGroupState.d.ts +6 -6
  12. package/dist/checkbox/index.d.ts +1 -1
  13. package/dist/collections/ListCollection.d.ts +1 -1
  14. package/dist/collections/createListState.d.ts +11 -8
  15. package/dist/collections/createMenuState.d.ts +7 -7
  16. package/dist/collections/createSelectionState.d.ts +22 -10
  17. package/dist/collections/getChildNodes.d.ts +11 -0
  18. package/dist/collections/index.d.ts +6 -5
  19. package/dist/collections/types.d.ts +12 -12
  20. package/dist/color/Color.d.ts +1 -1
  21. package/dist/color/createColorAreaState.d.ts +4 -2
  22. package/dist/color/createColorFieldState.d.ts +38 -12
  23. package/dist/color/createColorSliderState.d.ts +9 -2
  24. package/dist/color/createColorWheelState.d.ts +13 -2
  25. package/dist/color/getColorChannels.d.ts +1 -1
  26. package/dist/color/index.d.ts +6 -6
  27. package/dist/color/types.d.ts +4 -4
  28. package/dist/combobox/createComboBoxState.d.ts +34 -13
  29. package/dist/combobox/index.d.ts +1 -1
  30. package/dist/data/createAsyncList.d.ts +4 -4
  31. package/dist/data/createListData.d.ts +2 -2
  32. package/dist/data/createTreeData.d.ts +6 -2
  33. package/dist/data/index.d.ts +3 -3
  34. package/dist/datepicker/index.d.ts +2 -4
  35. package/dist/disclosure/createDisclosureState.d.ts +2 -2
  36. package/dist/disclosure/index.d.ts +1 -1
  37. package/dist/dnd/createDragState.d.ts +2 -2
  38. package/dist/dnd/createDraggableCollectionState.d.ts +2 -2
  39. package/dist/dnd/createDropState.d.ts +2 -2
  40. package/dist/dnd/createDroppableCollectionState.d.ts +3 -3
  41. package/dist/dnd/index.d.ts +5 -5
  42. package/dist/dnd/types.d.ts +19 -17
  43. package/dist/form/createFormValidationState.d.ts +3 -3
  44. package/dist/form/index.d.ts +1 -1
  45. package/dist/grid/createGridState.d.ts +2 -2
  46. package/dist/grid/index.d.ts +2 -2
  47. package/dist/grid/types.d.ts +27 -11
  48. package/dist/index.d.ts +31 -30
  49. package/dist/index.js +9077 -7246
  50. package/dist/index.js.map +1 -1
  51. package/dist/menu/index.d.ts +2 -2
  52. package/dist/numberfield/createNumberFieldState.d.ts +2 -2
  53. package/dist/numberfield/index.d.ts +1 -1
  54. package/dist/overlays/createOverlayTriggerState.d.ts +2 -2
  55. package/dist/overlays/index.d.ts +1 -1
  56. package/dist/radio/createRadioGroupState.d.ts +7 -7
  57. package/dist/radio/index.d.ts +1 -1
  58. package/dist/searchfield/createSearchFieldState.d.ts +2 -2
  59. package/dist/searchfield/index.d.ts +2 -2
  60. package/dist/select/createSelectState.d.ts +14 -8
  61. package/dist/select/index.d.ts +1 -1
  62. package/dist/selection/Selection.d.ts +16 -0
  63. package/dist/selection/SelectionManager.d.ts +110 -0
  64. package/dist/selection/createMultipleSelectionState.d.ts +59 -0
  65. package/dist/selection/index.d.ts +6 -5
  66. package/dist/slider/createSliderState.d.ts +3 -3
  67. package/dist/slider/index.d.ts +2 -2
  68. package/dist/steplist/createStepListState.d.ts +48 -0
  69. package/dist/steplist/index.d.ts +1 -0
  70. package/dist/table/TableCollection.d.ts +33 -3
  71. package/dist/table/createTableColumnResizeState.d.ts +54 -0
  72. package/dist/table/createTableState.d.ts +2 -2
  73. package/dist/table/createTreeGridState.d.ts +15 -0
  74. package/dist/table/index.d.ts +6 -3
  75. package/dist/table/types.d.ts +68 -10
  76. package/dist/tabs/createTabListState.d.ts +5 -5
  77. package/dist/tabs/index.d.ts +1 -1
  78. package/dist/textfield/createTextFieldState.d.ts +2 -2
  79. package/dist/textfield/index.d.ts +1 -1
  80. package/dist/toast/createToastState.d.ts +24 -2
  81. package/dist/toast/index.d.ts +1 -1
  82. package/dist/toggle/createToggleGroupState.d.ts +4 -4
  83. package/dist/toggle/createToggleState.d.ts +2 -2
  84. package/dist/toggle/index.d.ts +2 -2
  85. package/dist/tooltip/createTooltipTriggerState.d.ts +2 -2
  86. package/dist/tooltip/index.d.ts +1 -1
  87. package/dist/tree/TreeCollection.d.ts +2 -2
  88. package/dist/tree/createTreeState.d.ts +2 -2
  89. package/dist/tree/index.d.ts +3 -3
  90. package/dist/tree/types.d.ts +27 -13
  91. package/dist/utils/index.d.ts +1 -1
  92. package/dist/utils/reactivity.d.ts +1 -1
  93. package/package.json +29 -30
  94. package/src/autocomplete/createAutocompleteState.d.ts +19 -17
  95. package/src/autocomplete/createAutocompleteState.ts +24 -30
  96. package/src/autocomplete/index.d.ts +6 -2
  97. package/src/autocomplete/index.ts +1 -1
  98. package/src/calendar/IncompleteDate.ts +430 -0
  99. package/src/calendar/createCalendarState.d.ts +139 -117
  100. package/src/calendar/createCalendarState.ts +308 -94
  101. package/src/calendar/createDateFieldState.d.ts +130 -95
  102. package/src/calendar/createDateFieldState.ts +447 -334
  103. package/src/calendar/createDatePickerState.ts +347 -0
  104. package/src/calendar/createRangeCalendarState.d.ts +154 -129
  105. package/src/calendar/createRangeCalendarState.ts +411 -85
  106. package/src/calendar/createTimeFieldState.d.ts +81 -79
  107. package/src/calendar/createTimeFieldState.ts +187 -108
  108. package/src/calendar/index.d.ts +80 -7
  109. package/src/calendar/index.ts +23 -12
  110. package/src/checkbox/createCheckboxGroupState.d.ts +57 -55
  111. package/src/checkbox/createCheckboxGroupState.ts +20 -29
  112. package/src/checkbox/index.d.ts +6 -2
  113. package/src/checkbox/index.ts +1 -1
  114. package/src/collections/ListCollection.d.ts +25 -22
  115. package/src/collections/ListCollection.ts +6 -6
  116. package/src/collections/createListState.d.ts +73 -58
  117. package/src/collections/createListState.ts +67 -35
  118. package/src/collections/createMenuState.d.ts +36 -31
  119. package/src/collections/createMenuState.ts +21 -12
  120. package/src/collections/createSelectionState.d.ts +78 -65
  121. package/src/collections/createSelectionState.ts +66 -52
  122. package/src/collections/getChildNodes.ts +98 -0
  123. package/src/collections/index.d.ts +38 -6
  124. package/src/collections/index.ts +14 -10
  125. package/src/collections/types.d.ts +101 -101
  126. package/src/collections/types.ts +12 -12
  127. package/src/color/Color.d.ts +20 -5
  128. package/src/color/Color.ts +357 -254
  129. package/src/color/createColorAreaState.d.ts +67 -65
  130. package/src/color/createColorAreaState.ts +21 -13
  131. package/src/color/createColorFieldState.d.ts +46 -44
  132. package/src/color/createColorFieldState.ts +285 -149
  133. package/src/color/createColorSliderState.d.ts +58 -56
  134. package/src/color/createColorSliderState.ts +45 -14
  135. package/src/color/createColorWheelState.d.ts +42 -40
  136. package/src/color/createColorWheelState.ts +101 -64
  137. package/src/color/getColorChannels.ts +7 -5
  138. package/src/color/index.d.ts +36 -7
  139. package/src/color/index.ts +6 -9
  140. package/src/color/types.d.ts +68 -63
  141. package/src/color/types.ts +11 -19
  142. package/src/combobox/createComboBoxState.d.ts +107 -105
  143. package/src/combobox/createComboBoxState.ts +184 -89
  144. package/src/combobox/index.d.ts +10 -2
  145. package/src/combobox/index.ts +1 -1
  146. package/src/data/createAsyncList.ts +89 -63
  147. package/src/data/createListData.ts +67 -67
  148. package/src/data/createTreeData.ts +304 -91
  149. package/src/data/index.ts +3 -3
  150. package/src/datepicker/index.ts +6 -10
  151. package/src/disclosure/createDisclosureState.d.ts +47 -43
  152. package/src/disclosure/createDisclosureState.ts +7 -21
  153. package/src/disclosure/index.d.ts +10 -2
  154. package/src/disclosure/index.ts +1 -1
  155. package/src/dnd/createDragState.d.ts +51 -42
  156. package/src/dnd/createDragState.ts +12 -14
  157. package/src/dnd/createDraggableCollectionState.d.ts +52 -41
  158. package/src/dnd/createDraggableCollectionState.ts +14 -21
  159. package/src/dnd/createDropState.d.ts +64 -45
  160. package/src/dnd/createDropState.ts +22 -32
  161. package/src/dnd/createDroppableCollectionState.d.ts +88 -59
  162. package/src/dnd/createDroppableCollectionState.ts +40 -43
  163. package/src/dnd/index.d.ts +55 -6
  164. package/src/dnd/index.ts +6 -18
  165. package/src/dnd/types.d.ts +170 -157
  166. package/src/dnd/types.ts +24 -22
  167. package/src/form/createFormValidationState.d.ts +47 -45
  168. package/src/form/createFormValidationState.ts +30 -63
  169. package/src/form/index.d.ts +16 -2
  170. package/src/form/index.ts +1 -1
  171. package/src/grid/createGridState.d.ts +7 -4
  172. package/src/grid/createGridState.ts +78 -51
  173. package/src/grid/index.d.ts +3 -3
  174. package/src/grid/index.ts +2 -8
  175. package/src/grid/types.d.ts +136 -129
  176. package/src/grid/types.ts +34 -18
  177. package/src/index.d.ts +311 -26
  178. package/src/index.ts +59 -89
  179. package/src/menu/index.ts +2 -4
  180. package/src/numberfield/createNumberFieldState.d.ts +56 -54
  181. package/src/numberfield/createNumberFieldState.ts +26 -31
  182. package/src/numberfield/index.d.ts +6 -2
  183. package/src/numberfield/index.ts +1 -1
  184. package/src/overlays/createOverlayTriggerState.d.ts +22 -20
  185. package/src/overlays/createOverlayTriggerState.ts +3 -4
  186. package/src/overlays/index.d.ts +6 -2
  187. package/src/overlays/index.ts +1 -1
  188. package/src/radio/createRadioGroupState.d.ts +54 -52
  189. package/src/radio/createRadioGroupState.ts +27 -29
  190. package/src/radio/index.d.ts +7 -2
  191. package/src/radio/index.ts +1 -1
  192. package/src/searchfield/createSearchFieldState.d.ts +16 -14
  193. package/src/searchfield/createSearchFieldState.ts +5 -11
  194. package/src/searchfield/index.d.ts +3 -3
  195. package/src/searchfield/index.ts +2 -5
  196. package/src/select/createSelectState.d.ts +63 -61
  197. package/src/select/createSelectState.ts +42 -29
  198. package/src/select/index.d.ts +2 -2
  199. package/src/select/index.ts +1 -5
  200. package/src/selection/Selection.ts +28 -0
  201. package/src/selection/SelectionManager.ts +526 -0
  202. package/src/selection/createMultipleSelectionState.ts +247 -0
  203. package/src/selection/index.ts +12 -7
  204. package/src/slider/createSliderState.d.ts +60 -60
  205. package/src/slider/createSliderState.ts +55 -33
  206. package/src/slider/index.d.ts +3 -3
  207. package/src/slider/index.ts +2 -6
  208. package/src/ssr/index.d.ts +1 -1
  209. package/src/ssr/index.ts +2 -2
  210. package/src/steplist/createStepListState.ts +191 -0
  211. package/src/steplist/index.ts +5 -0
  212. package/src/table/TableCollection.d.ts +42 -40
  213. package/src/table/TableCollection.ts +266 -99
  214. package/src/table/createTableColumnResizeState.ts +242 -0
  215. package/src/table/createTableState.d.ts +7 -4
  216. package/src/table/createTableState.ts +30 -7
  217. package/src/table/createTreeGridState.ts +146 -0
  218. package/src/table/index.d.ts +14 -4
  219. package/src/table/index.ts +13 -3
  220. package/src/table/types.d.ts +98 -92
  221. package/src/table/types.ts +83 -13
  222. package/src/tabs/createTabListState.d.ts +59 -57
  223. package/src/tabs/createTabListState.ts +34 -39
  224. package/src/tabs/index.d.ts +8 -2
  225. package/src/tabs/index.ts +1 -1
  226. package/src/textfield/createTextFieldState.d.ts +16 -14
  227. package/src/textfield/createTextFieldState.ts +7 -18
  228. package/src/textfield/index.d.ts +6 -2
  229. package/src/textfield/index.ts +1 -1
  230. package/src/toast/createToastState.d.ts +92 -86
  231. package/src/toast/createToastState.ts +90 -52
  232. package/src/toast/index.d.ts +12 -2
  233. package/src/toast/index.ts +2 -1
  234. package/src/toggle/createToggleGroupState.ts +11 -21
  235. package/src/toggle/createToggleState.d.ts +19 -19
  236. package/src/toggle/createToggleState.ts +2 -16
  237. package/src/toggle/index.d.ts +2 -2
  238. package/src/toggle/index.ts +2 -6
  239. package/src/tooltip/createTooltipTriggerState.d.ts +17 -17
  240. package/src/tooltip/createTooltipTriggerState.ts +12 -11
  241. package/src/tooltip/index.d.ts +7 -2
  242. package/src/tooltip/index.ts +1 -1
  243. package/src/tree/TreeCollection.d.ts +26 -23
  244. package/src/tree/TreeCollection.ts +29 -22
  245. package/src/tree/createTreeState.d.ts +7 -4
  246. package/src/tree/createTreeState.ts +70 -41
  247. package/src/tree/index.d.ts +10 -4
  248. package/src/tree/index.ts +3 -3
  249. package/src/tree/types.d.ts +131 -126
  250. package/src/tree/types.ts +30 -13
  251. package/src/utils/index.d.ts +2 -2
  252. package/src/utils/index.ts +1 -1
  253. package/src/utils/reactivity.d.ts +2 -2
  254. package/src/utils/reactivity.ts +3 -3
@@ -6,63 +6,63 @@
6
6
  *
7
7
  * Port of react-stately's useFormValidationState.
8
8
  */
9
- import { type Accessor } from 'solid-js';
9
+ import { type Accessor } from "solid-js";
10
10
  /** Standard HTML ValidityState interface. */
11
11
  export interface ValidityState {
12
- badInput: boolean;
13
- customError: boolean;
14
- patternMismatch: boolean;
15
- rangeOverflow: boolean;
16
- rangeUnderflow: boolean;
17
- stepMismatch: boolean;
18
- tooLong: boolean;
19
- tooShort: boolean;
20
- typeMismatch: boolean;
21
- valueMissing: boolean;
22
- valid: boolean;
12
+ badInput: boolean;
13
+ customError: boolean;
14
+ patternMismatch: boolean;
15
+ rangeOverflow: boolean;
16
+ rangeUnderflow: boolean;
17
+ stepMismatch: boolean;
18
+ tooLong: boolean;
19
+ tooShort: boolean;
20
+ typeMismatch: boolean;
21
+ valueMissing: boolean;
22
+ valid: boolean;
23
23
  }
24
24
  /** Result of validation. */
25
25
  export interface ValidationResult {
26
- /** Whether the value is invalid. */
27
- isInvalid: boolean;
28
- /** Details about which validation constraints failed. */
29
- validationDetails: ValidityState;
30
- /** Error messages to display. */
31
- validationErrors: string[];
26
+ /** Whether the value is invalid. */
27
+ isInvalid: boolean;
28
+ /** Details about which validation constraints failed. */
29
+ validationDetails: ValidityState;
30
+ /** Error messages to display. */
31
+ validationErrors: string[];
32
32
  }
33
33
  /** Map of field names to their validation errors. */
34
34
  export type ValidationErrors = Record<string, string | string[]>;
35
35
  /** Validation function that returns error messages or true/false. */
36
36
  export type ValidationFunction<T> = (value: T) => boolean | string | string[] | null | undefined;
37
37
  /** Validation behavior mode. */
38
- export type ValidationBehavior = 'aria' | 'native';
38
+ export type ValidationBehavior = "aria" | "native";
39
39
  export interface FormValidationProps<T> {
40
- /** Whether the value is invalid (controlled). */
41
- isInvalid?: boolean;
42
- /** @deprecated Use isInvalid instead. */
43
- validationState?: 'valid' | 'invalid';
44
- /** Custom validation function. */
45
- validate?: ValidationFunction<T>;
46
- /** Validation behavior: 'aria' for realtime, 'native' for on submit. */
47
- validationBehavior?: ValidationBehavior;
48
- /** Built-in validation result from native input. */
49
- builtinValidation?: ValidationResult;
50
- /** Field name(s) for server error lookup. */
51
- name?: string | string[];
52
- /** Current field value. */
53
- value: T | null;
40
+ /** Whether the value is invalid (controlled). */
41
+ isInvalid?: boolean;
42
+ /** @deprecated Use isInvalid instead. */
43
+ validationState?: "valid" | "invalid";
44
+ /** Custom validation function. */
45
+ validate?: ValidationFunction<T>;
46
+ /** Validation behavior: 'aria' for realtime, 'native' for on submit. */
47
+ validationBehavior?: ValidationBehavior;
48
+ /** Built-in validation result from native input. */
49
+ builtinValidation?: ValidationResult;
50
+ /** Field name(s) for server error lookup. */
51
+ name?: string | string[];
52
+ /** Current field value. */
53
+ value: T | null;
54
54
  }
55
55
  export interface FormValidationState {
56
- /** Realtime validation results, updated as the user edits the value. */
57
- realtimeValidation: Accessor<ValidationResult>;
58
- /** Currently displayed validation results, updated when the user commits their changes. */
59
- displayValidation: Accessor<ValidationResult>;
60
- /** Updates the current validation result. Not displayed to the user until `commitValidation` is called. */
61
- updateValidation(result: ValidationResult): void;
62
- /** Resets the displayed validation state to valid when the user resets the form. */
63
- resetValidation(): void;
64
- /** Commits the realtime validation so it is displayed to the user. */
65
- commitValidation(): void;
56
+ /** Realtime validation results, updated as the user edits the value. */
57
+ realtimeValidation: Accessor<ValidationResult>;
58
+ /** Currently displayed validation results, updated when the user commits their changes. */
59
+ displayValidation: Accessor<ValidationResult>;
60
+ /** Updates the current validation result. Not displayed to the user until `commitValidation` is called. */
61
+ updateValidation(result: ValidationResult): void;
62
+ /** Resets the displayed validation state to valid when the user resets the form. */
63
+ resetValidation(): void;
64
+ /** Commits the realtime validation so it is displayed to the user. */
65
+ commitValidation(): void;
66
66
  }
67
67
  /** A valid validity state. */
68
68
  export declare const VALID_VALIDITY_STATE: ValidityState;
@@ -92,9 +92,11 @@ export declare const privateValidationStateProp: string;
92
92
  * const errors = () => validationState.displayValidation().validationErrors;
93
93
  * ```
94
94
  */
95
- export declare function createFormValidationState<T>(props: FormValidationProps<T>): FormValidationState;
95
+ export declare function createFormValidationState<T>(
96
+ props: FormValidationProps<T>,
97
+ ): FormValidationState;
96
98
  /**
97
99
  * Merges multiple validation results into one.
98
100
  */
99
101
  export declare function mergeValidation(...results: ValidationResult[]): ValidationResult;
100
- //# sourceMappingURL=createFormValidationState.d.ts.map
102
+ //# sourceMappingURL=createFormValidationState.d.ts.map
@@ -14,11 +14,7 @@ import {
14
14
  createMemo,
15
15
  createSignal,
16
16
  useContext,
17
- } from 'solid-js';
18
-
19
- // ============================================
20
- // TYPES
21
- // ============================================
17
+ } from "solid-js";
22
18
 
23
19
  /** Standard HTML ValidityState interface. */
24
20
  export interface ValidityState {
@@ -52,13 +48,13 @@ export type ValidationErrors = Record<string, string | string[]>;
52
48
  export type ValidationFunction<T> = (value: T) => boolean | string | string[] | null | undefined;
53
49
 
54
50
  /** Validation behavior mode. */
55
- export type ValidationBehavior = 'aria' | 'native';
51
+ export type ValidationBehavior = "aria" | "native";
56
52
 
57
53
  export interface FormValidationProps<T> {
58
54
  /** Whether the value is invalid (controlled). */
59
55
  isInvalid?: boolean;
60
56
  /** @deprecated Use isInvalid instead. */
61
- validationState?: 'valid' | 'invalid';
57
+ validationState?: "valid" | "invalid";
62
58
  /** Custom validation function. */
63
59
  validate?: ValidationFunction<T>;
64
60
  /** Validation behavior: 'aria' for realtime, 'native' for on submit. */
@@ -84,10 +80,6 @@ export interface FormValidationState {
84
80
  commitValidation(): void;
85
81
  }
86
82
 
87
- // ============================================
88
- // CONSTANTS
89
- // ============================================
90
-
91
83
  /** A valid validity state. */
92
84
  export const VALID_VALIDITY_STATE: ValidityState = {
93
85
  badInput: false,
@@ -117,19 +109,11 @@ export const DEFAULT_VALIDATION_RESULT: ValidationResult = {
117
109
  validationErrors: [],
118
110
  };
119
111
 
120
- // ============================================
121
- // CONTEXT
122
- // ============================================
123
-
124
112
  /** Context for server-side validation errors. */
125
113
  export const FormValidationContext = createContext<ValidationErrors>({});
126
114
 
127
115
  /** Private prop key for passing validation state to children. */
128
- export const privateValidationStateProp = '__formValidationState' + Date.now();
129
-
130
- // ============================================
131
- // HELPERS
132
- // ============================================
116
+ export const privateValidationStateProp = "__formValidationState" + Date.now();
133
117
 
134
118
  function asArray<T>(v: T | T[] | undefined): T[] {
135
119
  if (!v) {
@@ -139,9 +123,9 @@ function asArray<T>(v: T | T[] | undefined): T[] {
139
123
  }
140
124
 
141
125
  function runValidate<T>(validate: ValidationFunction<T>, value: T): string[] {
142
- if (typeof validate === 'function') {
126
+ if (typeof validate === "function") {
143
127
  const e = validate(value);
144
- if (e && typeof e !== 'boolean') {
128
+ if (e && typeof e !== "boolean") {
145
129
  return asArray(e);
146
130
  }
147
131
  }
@@ -158,10 +142,7 @@ function getValidationResult(errors: string[]): ValidationResult | null {
158
142
  : null;
159
143
  }
160
144
 
161
- function isEqualValidation(
162
- a: ValidationResult | null,
163
- b: ValidationResult | null
164
- ): boolean {
145
+ function isEqualValidation(a: ValidationResult | null, b: ValidationResult | null): boolean {
165
146
  if (a === b) {
166
147
  return true;
167
148
  }
@@ -172,15 +153,11 @@ function isEqualValidation(
172
153
  a.validationErrors.length === b.validationErrors.length &&
173
154
  a.validationErrors.every((ae, i) => ae === b.validationErrors[i]) &&
174
155
  Object.entries(a.validationDetails).every(
175
- ([k, v]) => b.validationDetails[k as keyof ValidityState] === v
156
+ ([k, v]) => b.validationDetails[k as keyof ValidityState] === v,
176
157
  )
177
158
  );
178
159
  }
179
160
 
180
- // ============================================
181
- // HOOK
182
- // ============================================
183
-
184
161
  /**
185
162
  * Creates form validation state for a field.
186
163
  *
@@ -201,21 +178,12 @@ function isEqualValidation(
201
178
  * const errors = () => validationState.displayValidation().validationErrors;
202
179
  * ```
203
180
  */
204
- export function createFormValidationState<T>(
205
- props: FormValidationProps<T>
206
- ): FormValidationState {
207
- const {
208
- isInvalid,
209
- validationState,
210
- name,
211
- builtinValidation: builtinValidationProp,
212
- validate,
213
- validationBehavior = 'aria',
214
- } = props;
181
+ export function createFormValidationState<T>(props: FormValidationProps<T>): FormValidationState {
182
+ const validationBehavior = () => props.validationBehavior ?? "aria";
215
183
 
216
184
  // Backward compatibility
217
185
  const isInvalidProp = createMemo(
218
- () => isInvalid ?? (validationState === 'invalid' ? true : undefined)
186
+ () => props.isInvalid ?? (props.validationState === "invalid" ? true : undefined),
219
187
  );
220
188
 
221
189
  // Controlled error from isInvalid prop
@@ -226,11 +194,12 @@ export function createFormValidationState<T>(
226
194
  validationErrors: [],
227
195
  validationDetails: CUSTOM_VALIDITY_STATE,
228
196
  }
229
- : null
197
+ : null,
230
198
  );
231
199
 
232
200
  // Client-side validation
233
201
  const clientError = createMemo<ValidationResult | null>(() => {
202
+ const validate = props.validate;
234
203
  if (!validate || props.value == null) {
235
204
  return null;
236
205
  }
@@ -240,6 +209,7 @@ export function createFormValidationState<T>(
240
209
 
241
210
  // Built-in validation (skip if valid)
242
211
  const builtinValidation = createMemo<ValidationResult | undefined>(() => {
212
+ const builtinValidationProp = props.builtinValidation;
243
213
  if (builtinValidationProp?.validationDetails.valid) {
244
214
  return undefined;
245
215
  }
@@ -249,6 +219,7 @@ export function createFormValidationState<T>(
249
219
  // Server errors from context
250
220
  const serverErrors = useContext(FormValidationContext);
251
221
  const serverErrorMessages = createMemo(() => {
222
+ const name = props.name;
252
223
  if (name) {
253
224
  return Array.isArray(name)
254
225
  ? name.flatMap((n) => asArray(serverErrors[n]))
@@ -269,13 +240,11 @@ export function createFormValidationState<T>(
269
240
  });
270
241
 
271
242
  const serverError = createMemo<ValidationResult | null>(() =>
272
- getValidationResult(isServerErrorCleared() ? [] : serverErrorMessages())
243
+ getValidationResult(isServerErrorCleared() ? [] : serverErrorMessages()),
273
244
  );
274
245
 
275
246
  // Track validation state
276
- const [currentValidity, setCurrentValidity] = createSignal(
277
- DEFAULT_VALIDATION_RESULT
278
- );
247
+ const [currentValidity, setCurrentValidity] = createSignal(DEFAULT_VALIDATION_RESULT);
279
248
  const [commitQueued, setCommitQueued] = createSignal(false);
280
249
 
281
250
  let nextValidation = DEFAULT_VALIDATION_RESULT;
@@ -301,15 +270,13 @@ export function createFormValidationState<T>(
301
270
  serverError() ||
302
271
  clientError() ||
303
272
  builtinValidation() ||
304
- DEFAULT_VALIDATION_RESULT
273
+ DEFAULT_VALIDATION_RESULT,
305
274
  );
306
275
 
307
276
  // Display validation (what the user sees)
308
277
  const displayValidation = createMemo<ValidationResult>(() => {
309
- if (validationBehavior === 'native') {
310
- return (
311
- controlledError() || serverError() || currentValidity()
312
- );
278
+ if (validationBehavior() === "native") {
279
+ return controlledError() || serverError() || currentValidity();
313
280
  }
314
281
  return (
315
282
  controlledError() ||
@@ -325,10 +292,7 @@ export function createFormValidationState<T>(
325
292
  displayValidation,
326
293
  updateValidation(value: ValidationResult) {
327
294
  // If validationBehavior is 'aria', update in realtime. Otherwise, store until commit.
328
- if (
329
- validationBehavior === 'aria' &&
330
- !isEqualValidation(currentValidity(), value)
331
- ) {
295
+ if (validationBehavior() === "aria" && !isEqualValidation(currentValidity(), value)) {
332
296
  setCurrentValidity(value);
333
297
  } else {
334
298
  nextValidation = value;
@@ -342,15 +306,20 @@ export function createFormValidationState<T>(
342
306
  setCurrentValidity(error);
343
307
  }
344
308
  // Do not commit validation after the next render for native behavior.
345
- if (validationBehavior === 'native') {
309
+ if (validationBehavior() === "native") {
346
310
  setCommitQueued(false);
347
311
  }
348
312
  setServerErrorCleared(true);
349
313
  },
350
314
  commitValidation() {
351
315
  // Commit validation state so the user sees it on blur/change/submit.
352
- if (validationBehavior === 'native') {
353
- setCommitQueued(true);
316
+ if (validationBehavior() === "native") {
317
+ const error = clientError() || builtinValidation() || nextValidation;
318
+ if (!isEqualValidation(error, lastError)) {
319
+ lastError = error;
320
+ setCurrentValidity(error);
321
+ }
322
+ setCommitQueued(false);
354
323
  }
355
324
  setServerErrorCleared(true);
356
325
  },
@@ -360,9 +329,7 @@ export function createFormValidationState<T>(
360
329
  /**
361
330
  * Merges multiple validation results into one.
362
331
  */
363
- export function mergeValidation(
364
- ...results: ValidationResult[]
365
- ): ValidationResult {
332
+ export function mergeValidation(...results: ValidationResult[]): ValidationResult {
366
333
  const errors = new Set<string>();
367
334
  let isInvalid = false;
368
335
  const validationDetails: ValidityState = { ...VALID_VALIDITY_STATE };
@@ -1,2 +1,16 @@
1
- export { createFormValidationState, mergeValidation, FormValidationContext, privateValidationStateProp, VALID_VALIDITY_STATE, DEFAULT_VALIDATION_RESULT, type FormValidationState, type FormValidationProps, type ValidationResult, type ValidationErrors, type ValidationFunction, type ValidationBehavior, type ValidityState, } from './createFormValidationState';
2
- //# sourceMappingURL=index.d.ts.map
1
+ export {
2
+ createFormValidationState,
3
+ mergeValidation,
4
+ FormValidationContext,
5
+ privateValidationStateProp,
6
+ VALID_VALIDITY_STATE,
7
+ DEFAULT_VALIDATION_RESULT,
8
+ type FormValidationState,
9
+ type FormValidationProps,
10
+ type ValidationResult,
11
+ type ValidationErrors,
12
+ type ValidationFunction,
13
+ type ValidationBehavior,
14
+ type ValidityState,
15
+ } from "./createFormValidationState";
16
+ //# sourceMappingURL=index.d.ts.map
package/src/form/index.ts CHANGED
@@ -12,4 +12,4 @@ export {
12
12
  type ValidationFunction,
13
13
  type ValidationBehavior,
14
14
  type ValidityState,
15
- } from './createFormValidationState';
15
+ } from "./createFormValidationState";
@@ -2,11 +2,14 @@
2
2
  * Grid state management for Table and GridList components.
3
3
  * Based on @react-stately/grid/useGridState.
4
4
  */
5
- import { type Accessor } from 'solid-js';
6
- import type { GridState, GridStateOptions, GridCollection } from './types';
5
+ import { type Accessor } from "solid-js";
6
+ import type { GridState, GridStateOptions, GridCollection } from "./types";
7
7
  /**
8
8
  * Creates state management for a grid component.
9
9
  * Handles row selection, focus management, and keyboard navigation state.
10
10
  */
11
- export declare function createGridState<T extends object, C extends GridCollection<T> = GridCollection<T>>(options: Accessor<GridStateOptions<T, C>>): GridState<T, C>;
12
- //# sourceMappingURL=createGridState.d.ts.map
11
+ export declare function createGridState<
12
+ T extends object,
13
+ C extends GridCollection<T> = GridCollection<T>,
14
+ >(options: Accessor<GridStateOptions<T, C>>): GridState<T, C>;
15
+ //# sourceMappingURL=createGridState.d.ts.map