@axenstudio/axen-form 0.1.1

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 (210) hide show
  1. package/README.md +665 -0
  2. package/dist/adapters/yupAdapter.cjs +61 -0
  3. package/dist/adapters/yupAdapter.d.ts +21 -0
  4. package/dist/adapters/yupAdapter.d.ts.map +1 -0
  5. package/dist/adapters/yupAdapter.js +61 -0
  6. package/dist/adapters/zodAdapter.cjs +59 -0
  7. package/dist/adapters/zodAdapter.d.ts +22 -0
  8. package/dist/adapters/zodAdapter.d.ts.map +1 -0
  9. package/dist/adapters/zodAdapter.js +59 -0
  10. package/dist/core/dateUtils.cjs +69 -0
  11. package/dist/core/dateUtils.d.ts +28 -0
  12. package/dist/core/dateUtils.d.ts.map +1 -0
  13. package/dist/core/dateUtils.js +69 -0
  14. package/dist/core/formStore.cjs +184 -0
  15. package/dist/core/formStore.d.ts +39 -0
  16. package/dist/core/formStore.d.ts.map +1 -0
  17. package/dist/core/formStore.js +184 -0
  18. package/dist/core/numberUtils.cjs +59 -0
  19. package/dist/core/numberUtils.d.ts +26 -0
  20. package/dist/core/numberUtils.d.ts.map +1 -0
  21. package/dist/core/numberUtils.js +59 -0
  22. package/dist/core/pathUtils.cjs +44 -0
  23. package/dist/core/pathUtils.d.ts +15 -0
  24. package/dist/core/pathUtils.d.ts.map +1 -0
  25. package/dist/core/pathUtils.js +44 -0
  26. package/dist/core/payloadUtils.cjs +26 -0
  27. package/dist/core/payloadUtils.d.ts +22 -0
  28. package/dist/core/payloadUtils.d.ts.map +1 -0
  29. package/dist/core/payloadUtils.js +26 -0
  30. package/dist/core/validation.cjs +41 -0
  31. package/dist/core/validation.d.ts +7 -0
  32. package/dist/core/validation.d.ts.map +1 -0
  33. package/dist/core/validation.js +41 -0
  34. package/dist/fields/AutocompleteField/AutocompleteField.cjs +242 -0
  35. package/dist/fields/AutocompleteField/AutocompleteField.d.ts +6 -0
  36. package/dist/fields/AutocompleteField/AutocompleteField.d.ts.map +1 -0
  37. package/dist/fields/AutocompleteField/AutocompleteField.js +242 -0
  38. package/dist/fields/AutocompleteField/AutocompleteField.module.css +168 -0
  39. package/dist/fields/AutocompleteField/AutocompleteField.module.css.cjs +44 -0
  40. package/dist/fields/AutocompleteField/AutocompleteField.module.css.js +44 -0
  41. package/dist/fields/AutocompleteMultiField/AutocompleteMultiField.cjs +286 -0
  42. package/dist/fields/AutocompleteMultiField/AutocompleteMultiField.d.ts +6 -0
  43. package/dist/fields/AutocompleteMultiField/AutocompleteMultiField.d.ts.map +1 -0
  44. package/dist/fields/AutocompleteMultiField/AutocompleteMultiField.js +286 -0
  45. package/dist/fields/AutocompletePredictField/AutocompletePredictField.cjs +289 -0
  46. package/dist/fields/AutocompletePredictField/AutocompletePredictField.d.ts +10 -0
  47. package/dist/fields/AutocompletePredictField/AutocompletePredictField.d.ts.map +1 -0
  48. package/dist/fields/AutocompletePredictField/AutocompletePredictField.js +289 -0
  49. package/dist/fields/CheckboxField/CheckboxField.cjs +60 -0
  50. package/dist/fields/CheckboxField/CheckboxField.d.ts +3 -0
  51. package/dist/fields/CheckboxField/CheckboxField.d.ts.map +1 -0
  52. package/dist/fields/CheckboxField/CheckboxField.js +60 -0
  53. package/dist/fields/CheckboxField/CheckboxField.module.css +29 -0
  54. package/dist/fields/CheckboxField/CheckboxField.module.css.cjs +11 -0
  55. package/dist/fields/CheckboxField/CheckboxField.module.css.js +11 -0
  56. package/dist/fields/ColorField/ColorField.cjs +69 -0
  57. package/dist/fields/ColorField/ColorField.d.ts +3 -0
  58. package/dist/fields/ColorField/ColorField.d.ts.map +1 -0
  59. package/dist/fields/ColorField/ColorField.js +69 -0
  60. package/dist/fields/ColorField/ColorField.module.css +33 -0
  61. package/dist/fields/ColorField/ColorField.module.css.cjs +14 -0
  62. package/dist/fields/ColorField/ColorField.module.css.js +14 -0
  63. package/dist/fields/CurrencyField/CurrencyField.cjs +120 -0
  64. package/dist/fields/CurrencyField/CurrencyField.d.ts +10 -0
  65. package/dist/fields/CurrencyField/CurrencyField.d.ts.map +1 -0
  66. package/dist/fields/CurrencyField/CurrencyField.js +120 -0
  67. package/dist/fields/DateField/DateField.cjs +70 -0
  68. package/dist/fields/DateField/DateField.d.ts +7 -0
  69. package/dist/fields/DateField/DateField.d.ts.map +1 -0
  70. package/dist/fields/DateField/DateField.js +70 -0
  71. package/dist/fields/DateTimeField/DateTimeField.cjs +71 -0
  72. package/dist/fields/DateTimeField/DateTimeField.d.ts +8 -0
  73. package/dist/fields/DateTimeField/DateTimeField.d.ts.map +1 -0
  74. package/dist/fields/DateTimeField/DateTimeField.js +71 -0
  75. package/dist/fields/EmailField/EmailField.cjs +57 -0
  76. package/dist/fields/EmailField/EmailField.d.ts +3 -0
  77. package/dist/fields/EmailField/EmailField.d.ts.map +1 -0
  78. package/dist/fields/EmailField/EmailField.js +57 -0
  79. package/dist/fields/NumberField/NumberField.cjs +110 -0
  80. package/dist/fields/NumberField/NumberField.d.ts +10 -0
  81. package/dist/fields/NumberField/NumberField.d.ts.map +1 -0
  82. package/dist/fields/NumberField/NumberField.js +110 -0
  83. package/dist/fields/PasswordField/PasswordField.cjs +77 -0
  84. package/dist/fields/PasswordField/PasswordField.d.ts +3 -0
  85. package/dist/fields/PasswordField/PasswordField.d.ts.map +1 -0
  86. package/dist/fields/PasswordField/PasswordField.js +77 -0
  87. package/dist/fields/PasswordField/PasswordField.module.css +41 -0
  88. package/dist/fields/PasswordField/PasswordField.module.css.cjs +14 -0
  89. package/dist/fields/PasswordField/PasswordField.module.css.js +14 -0
  90. package/dist/fields/PhoneField/PhoneField.cjs +58 -0
  91. package/dist/fields/PhoneField/PhoneField.d.ts +3 -0
  92. package/dist/fields/PhoneField/PhoneField.d.ts.map +1 -0
  93. package/dist/fields/PhoneField/PhoneField.js +58 -0
  94. package/dist/fields/RadioField/RadioField.cjs +66 -0
  95. package/dist/fields/RadioField/RadioField.d.ts +3 -0
  96. package/dist/fields/RadioField/RadioField.d.ts.map +1 -0
  97. package/dist/fields/RadioField/RadioField.js +66 -0
  98. package/dist/fields/RadioField/RadioField.module.css +34 -0
  99. package/dist/fields/RadioField/RadioField.module.css.cjs +14 -0
  100. package/dist/fields/RadioField/RadioField.module.css.js +14 -0
  101. package/dist/fields/SelectField/SelectField.cjs +58 -0
  102. package/dist/fields/SelectField/SelectField.d.ts +3 -0
  103. package/dist/fields/SelectField/SelectField.d.ts.map +1 -0
  104. package/dist/fields/SelectField/SelectField.js +58 -0
  105. package/dist/fields/SliderField/SliderField.cjs +79 -0
  106. package/dist/fields/SliderField/SliderField.d.ts +7 -0
  107. package/dist/fields/SliderField/SliderField.d.ts.map +1 -0
  108. package/dist/fields/SliderField/SliderField.js +79 -0
  109. package/dist/fields/SliderField/SliderField.module.css +76 -0
  110. package/dist/fields/SliderField/SliderField.module.css.cjs +14 -0
  111. package/dist/fields/SliderField/SliderField.module.css.js +14 -0
  112. package/dist/fields/SwitchField/SwitchField.cjs +65 -0
  113. package/dist/fields/SwitchField/SwitchField.d.ts +3 -0
  114. package/dist/fields/SwitchField/SwitchField.d.ts.map +1 -0
  115. package/dist/fields/SwitchField/SwitchField.js +65 -0
  116. package/dist/fields/SwitchField/SwitchField.module.css +79 -0
  117. package/dist/fields/SwitchField/SwitchField.module.css.cjs +17 -0
  118. package/dist/fields/SwitchField/SwitchField.module.css.js +17 -0
  119. package/dist/fields/TextField/TextField.cjs +56 -0
  120. package/dist/fields/TextField/TextField.d.ts +3 -0
  121. package/dist/fields/TextField/TextField.d.ts.map +1 -0
  122. package/dist/fields/TextField/TextField.js +56 -0
  123. package/dist/fields/TextareaField/TextareaField.cjs +57 -0
  124. package/dist/fields/TextareaField/TextareaField.d.ts +5 -0
  125. package/dist/fields/TextareaField/TextareaField.d.ts.map +1 -0
  126. package/dist/fields/TextareaField/TextareaField.js +57 -0
  127. package/dist/fields/TimeField/TimeField.cjs +67 -0
  128. package/dist/fields/TimeField/TimeField.d.ts +6 -0
  129. package/dist/fields/TimeField/TimeField.d.ts.map +1 -0
  130. package/dist/fields/TimeField/TimeField.js +67 -0
  131. package/dist/fields/defaultComponentMap.cjs +43 -0
  132. package/dist/fields/defaultComponentMap.d.ts +7 -0
  133. package/dist/fields/defaultComponentMap.d.ts.map +1 -0
  134. package/dist/fields/defaultComponentMap.js +43 -0
  135. package/dist/fields/fieldBase.module.css +201 -0
  136. package/dist/fields/fieldBase.module.css.cjs +50 -0
  137. package/dist/fields/fieldBase.module.css.js +50 -0
  138. package/dist/fields/fieldUtils.cjs +26 -0
  139. package/dist/fields/fieldUtils.d.ts +24 -0
  140. package/dist/fields/fieldUtils.d.ts.map +1 -0
  141. package/dist/fields/fieldUtils.js +26 -0
  142. package/dist/index.cjs +99 -0
  143. package/dist/index.d.ts +42 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +99 -0
  146. package/dist/layout/Box/Box.cjs +70 -0
  147. package/dist/layout/Box/Box.d.ts +6 -0
  148. package/dist/layout/Box/Box.d.ts.map +1 -0
  149. package/dist/layout/Box/Box.js +70 -0
  150. package/dist/layout/Box/Box.module.css +3 -0
  151. package/dist/layout/Box/Box.module.css.cjs +8 -0
  152. package/dist/layout/Box/Box.module.css.js +8 -0
  153. package/dist/layout/Divider/Divider.cjs +20 -0
  154. package/dist/layout/Divider/Divider.d.ts +6 -0
  155. package/dist/layout/Divider/Divider.d.ts.map +1 -0
  156. package/dist/layout/Divider/Divider.js +20 -0
  157. package/dist/layout/Divider/Divider.module.css +25 -0
  158. package/dist/layout/Divider/Divider.module.css.cjs +14 -0
  159. package/dist/layout/Divider/Divider.module.css.js +14 -0
  160. package/dist/layout/Grid/Grid.cjs +106 -0
  161. package/dist/layout/Grid/Grid.d.ts +7 -0
  162. package/dist/layout/Grid/Grid.d.ts.map +1 -0
  163. package/dist/layout/Grid/Grid.js +106 -0
  164. package/dist/layout/Grid/Grid.module.css +43 -0
  165. package/dist/layout/Grid/Grid.module.css.cjs +23 -0
  166. package/dist/layout/Grid/Grid.module.css.js +23 -0
  167. package/dist/layout/Spacer/Spacer.cjs +30 -0
  168. package/dist/layout/Spacer/Spacer.d.ts +21 -0
  169. package/dist/layout/Spacer/Spacer.d.ts.map +1 -0
  170. package/dist/layout/Spacer/Spacer.js +30 -0
  171. package/dist/layout/Stack/Stack.cjs +52 -0
  172. package/dist/layout/Stack/Stack.d.ts +7 -0
  173. package/dist/layout/Stack/Stack.d.ts.map +1 -0
  174. package/dist/layout/Stack/Stack.js +52 -0
  175. package/dist/layout/Stack/Stack.module.css +3 -0
  176. package/dist/layout/Stack/Stack.module.css.cjs +8 -0
  177. package/dist/layout/Stack/Stack.module.css.js +8 -0
  178. package/dist/layout/index.d.ts +6 -0
  179. package/dist/layout/index.d.ts.map +1 -0
  180. package/dist/react/AxenArrayField.cjs +80 -0
  181. package/dist/react/AxenArrayField.d.ts +15 -0
  182. package/dist/react/AxenArrayField.d.ts.map +1 -0
  183. package/dist/react/AxenArrayField.js +80 -0
  184. package/dist/react/AxenField.cjs +62 -0
  185. package/dist/react/AxenField.d.ts +13 -0
  186. package/dist/react/AxenField.d.ts.map +1 -0
  187. package/dist/react/AxenField.js +62 -0
  188. package/dist/react/AxenForm.cjs +134 -0
  189. package/dist/react/AxenForm.d.ts +7 -0
  190. package/dist/react/AxenForm.d.ts.map +1 -0
  191. package/dist/react/AxenForm.js +134 -0
  192. package/dist/react/FormContext.cjs +13 -0
  193. package/dist/react/FormContext.d.ts +11 -0
  194. package/dist/react/FormContext.d.ts.map +1 -0
  195. package/dist/react/FormContext.js +13 -0
  196. package/dist/react/useAxenForm.cjs +88 -0
  197. package/dist/react/useAxenForm.d.ts +8 -0
  198. package/dist/react/useAxenForm.d.ts.map +1 -0
  199. package/dist/react/useAxenForm.js +88 -0
  200. package/dist/react/useField.cjs +41 -0
  201. package/dist/react/useField.d.ts +13 -0
  202. package/dist/react/useField.d.ts.map +1 -0
  203. package/dist/react/useField.js +41 -0
  204. package/dist/react/useFieldArray.cjs +74 -0
  205. package/dist/react/useFieldArray.d.ts +5 -0
  206. package/dist/react/useFieldArray.d.ts.map +1 -0
  207. package/dist/react/useFieldArray.js +74 -0
  208. package/dist/types.d.ts +226 -0
  209. package/dist/types.d.ts.map +1 -0
  210. package/package.json +87 -0
@@ -0,0 +1,88 @@
1
+ import { useRef, useMemo } from "react";
2
+ import { createFormStore } from "../core/formStore.js";
3
+ import { simpleValidator } from "../core/validation.js";
4
+ function useAxenForm(props) {
5
+ const {
6
+ config,
7
+ onSubmit,
8
+ validationAdapter,
9
+ validateOnChange = true,
10
+ validateOnBlur = true
11
+ } = props;
12
+ const adapter = validationAdapter ?? simpleValidator;
13
+ const storeRef = useRef(null);
14
+ storeRef.current ?? (storeRef.current = createFormStore({
15
+ initialValues: config.initialValues,
16
+ validationAdapter: adapter,
17
+ fields: config.fields,
18
+ validateOnChange,
19
+ validateOnBlur,
20
+ onSubmit: async (values) => {
21
+ await onSubmit(values, {
22
+ isUpdate: config.isUpdate ?? false,
23
+ resetForm: () => {
24
+ var _a;
25
+ return (_a = storeRef.current) == null ? void 0 : _a.resetForm();
26
+ }
27
+ });
28
+ }
29
+ }));
30
+ const store = storeRef.current;
31
+ const formApi = useMemo(() => {
32
+ const handleChange = (e) => {
33
+ const { name, type, value } = e.target;
34
+ const newValue = type === "checkbox" ? e.target.checked : value;
35
+ store.setFieldValue(name, newValue);
36
+ };
37
+ const handleBlur = (e) => {
38
+ const name = e.target.name;
39
+ if (name) store.setFieldTouched(name, true);
40
+ };
41
+ const handleSubmit = (e) => {
42
+ if (e) {
43
+ e.preventDefault();
44
+ e.stopPropagation();
45
+ }
46
+ store.submitForm();
47
+ };
48
+ return {
49
+ get values() {
50
+ return store.getState().values;
51
+ },
52
+ get errors() {
53
+ return store.getState().errors;
54
+ },
55
+ get touched() {
56
+ return store.getState().touched;
57
+ },
58
+ get dirty() {
59
+ return store.getState().dirty;
60
+ },
61
+ get isSubmitting() {
62
+ return store.getState().isSubmitting;
63
+ },
64
+ get isValid() {
65
+ return Object.keys(store.getState().errors).length === 0;
66
+ },
67
+ get submitCount() {
68
+ return store.getState().submitCount;
69
+ },
70
+ setFieldValue: store.setFieldValue,
71
+ setFieldTouched: store.setFieldTouched,
72
+ setFieldError: store.setFieldError,
73
+ setValues: store.setValues,
74
+ setErrors: store.setErrors,
75
+ handleChange,
76
+ handleBlur,
77
+ handleSubmit,
78
+ resetForm: store.resetForm,
79
+ submitForm: () => store.submitForm(),
80
+ validateForm: store.validateForm,
81
+ validateField: store.validateField
82
+ };
83
+ }, [store]);
84
+ return { store, formApi };
85
+ }
86
+ export {
87
+ useAxenForm
88
+ };
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const FormContext = require("./FormContext.cjs");
5
+ function useField(name) {
6
+ const { store } = FormContext.useFormContext();
7
+ const value = react.useSyncExternalStore(
8
+ (cb) => store.subscribeField(name, cb),
9
+ () => store.getFieldValue(name)
10
+ );
11
+ const error = react.useSyncExternalStore(
12
+ (cb) => store.subscribeField(name, cb),
13
+ () => store.getFieldError(name)
14
+ );
15
+ const touched = react.useSyncExternalStore(
16
+ (cb) => store.subscribeField(name, cb),
17
+ () => store.getFieldTouched(name)
18
+ );
19
+ const onChange = react.useCallback(
20
+ (e) => {
21
+ const target = e.target;
22
+ const newValue = target.type === "checkbox" ? target.checked : target.value;
23
+ store.setFieldValue(name, newValue);
24
+ },
25
+ [store, name]
26
+ );
27
+ const onBlur = react.useCallback(
28
+ (_e) => {
29
+ store.setFieldTouched(name, true);
30
+ },
31
+ [store, name]
32
+ );
33
+ const setValue = react.useCallback((v) => store.setFieldValue(name, v), [store, name]);
34
+ const setTouched = react.useCallback((t) => store.setFieldTouched(name, t), [store, name]);
35
+ const setError = react.useCallback(
36
+ (e) => store.setFieldError(name, e),
37
+ [store, name]
38
+ );
39
+ return { value, error, touched, onChange, onBlur, setValue, setTouched, setError };
40
+ }
41
+ exports.useField = useField;
@@ -0,0 +1,13 @@
1
+ import { ChangeEvent, FocusEvent } from 'react';
2
+ export interface UseFieldReturn {
3
+ value: unknown;
4
+ error: string | undefined;
5
+ touched: boolean;
6
+ onChange: (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;
7
+ onBlur: (e: FocusEvent<HTMLElement>) => void;
8
+ setValue: (value: unknown) => void;
9
+ setTouched: (touched?: boolean) => void;
10
+ setError: (error: string | undefined) => void;
11
+ }
12
+ export declare function useField(name: string): UseFieldReturn;
13
+ //# sourceMappingURL=useField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useField.d.ts","sourceRoot":"","sources":["../../src/react/useField.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAG7F,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC/F,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC/C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CA6CrD"}
@@ -0,0 +1,41 @@
1
+ import { useSyncExternalStore, useCallback } from "react";
2
+ import { useFormContext } from "./FormContext.js";
3
+ function useField(name) {
4
+ const { store } = useFormContext();
5
+ const value = useSyncExternalStore(
6
+ (cb) => store.subscribeField(name, cb),
7
+ () => store.getFieldValue(name)
8
+ );
9
+ const error = useSyncExternalStore(
10
+ (cb) => store.subscribeField(name, cb),
11
+ () => store.getFieldError(name)
12
+ );
13
+ const touched = useSyncExternalStore(
14
+ (cb) => store.subscribeField(name, cb),
15
+ () => store.getFieldTouched(name)
16
+ );
17
+ const onChange = useCallback(
18
+ (e) => {
19
+ const target = e.target;
20
+ const newValue = target.type === "checkbox" ? target.checked : target.value;
21
+ store.setFieldValue(name, newValue);
22
+ },
23
+ [store, name]
24
+ );
25
+ const onBlur = useCallback(
26
+ (_e) => {
27
+ store.setFieldTouched(name, true);
28
+ },
29
+ [store, name]
30
+ );
31
+ const setValue = useCallback((v) => store.setFieldValue(name, v), [store, name]);
32
+ const setTouched = useCallback((t) => store.setFieldTouched(name, t), [store, name]);
33
+ const setError = useCallback(
34
+ (e) => store.setFieldError(name, e),
35
+ [store, name]
36
+ );
37
+ return { value, error, touched, onChange, onBlur, setValue, setTouched, setError };
38
+ }
39
+ export {
40
+ useField
41
+ };
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const FormContext = require("./FormContext.cjs");
5
+ function useFieldArray(name) {
6
+ const { store } = FormContext.useFormContext();
7
+ const fields = react.useSyncExternalStore(
8
+ (cb) => store.subscribeField(name, cb),
9
+ () => store.getFieldValue(name) ?? []
10
+ );
11
+ const push = react.useCallback(
12
+ (value) => {
13
+ const current = store.getFieldValue(name) ?? [];
14
+ store.setFieldValue(name, [...current, value]);
15
+ },
16
+ [store, name]
17
+ );
18
+ const remove = react.useCallback(
19
+ (index) => {
20
+ const current = store.getFieldValue(name) ?? [];
21
+ store.setFieldValue(
22
+ name,
23
+ current.filter((_, i) => i !== index)
24
+ );
25
+ },
26
+ [store, name]
27
+ );
28
+ const swap = react.useCallback(
29
+ (indexA, indexB) => {
30
+ const current = [...store.getFieldValue(name) ?? []];
31
+ [current[indexA], current[indexB]] = [current[indexB], current[indexA]];
32
+ store.setFieldValue(name, current);
33
+ },
34
+ [store, name]
35
+ );
36
+ const insert = react.useCallback(
37
+ (index, value) => {
38
+ const current = [...store.getFieldValue(name) ?? []];
39
+ current.splice(index, 0, value);
40
+ store.setFieldValue(name, current);
41
+ },
42
+ [store, name]
43
+ );
44
+ const replace = react.useCallback(
45
+ (index, value) => {
46
+ const current = [...store.getFieldValue(name) ?? []];
47
+ current[index] = value;
48
+ store.setFieldValue(name, current);
49
+ },
50
+ [store, name]
51
+ );
52
+ const move = react.useCallback(
53
+ (from, to) => {
54
+ const current = [...store.getFieldValue(name) ?? []];
55
+ const [item] = current.splice(from, 1);
56
+ current.splice(to, 0, item);
57
+ store.setFieldValue(name, current);
58
+ },
59
+ [store, name]
60
+ );
61
+ return {
62
+ fields,
63
+ push,
64
+ remove,
65
+ swap,
66
+ insert,
67
+ replace,
68
+ move,
69
+ get length() {
70
+ return fields.length;
71
+ }
72
+ };
73
+ }
74
+ exports.useFieldArray = useFieldArray;
@@ -0,0 +1,5 @@
1
+ import { ArrayHelpers } from '../types';
2
+ export declare function useFieldArray(name: string): ArrayHelpers & {
3
+ fields: unknown[];
4
+ };
5
+ //# sourceMappingURL=useFieldArray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFieldArray.d.ts","sourceRoot":"","sources":["../../src/react/useFieldArray.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG;IAAE,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CA4EhF"}
@@ -0,0 +1,74 @@
1
+ import { useSyncExternalStore, useCallback } from "react";
2
+ import { useFormContext } from "./FormContext.js";
3
+ function useFieldArray(name) {
4
+ const { store } = useFormContext();
5
+ const fields = useSyncExternalStore(
6
+ (cb) => store.subscribeField(name, cb),
7
+ () => store.getFieldValue(name) ?? []
8
+ );
9
+ const push = useCallback(
10
+ (value) => {
11
+ const current = store.getFieldValue(name) ?? [];
12
+ store.setFieldValue(name, [...current, value]);
13
+ },
14
+ [store, name]
15
+ );
16
+ const remove = useCallback(
17
+ (index) => {
18
+ const current = store.getFieldValue(name) ?? [];
19
+ store.setFieldValue(
20
+ name,
21
+ current.filter((_, i) => i !== index)
22
+ );
23
+ },
24
+ [store, name]
25
+ );
26
+ const swap = useCallback(
27
+ (indexA, indexB) => {
28
+ const current = [...store.getFieldValue(name) ?? []];
29
+ [current[indexA], current[indexB]] = [current[indexB], current[indexA]];
30
+ store.setFieldValue(name, current);
31
+ },
32
+ [store, name]
33
+ );
34
+ const insert = useCallback(
35
+ (index, value) => {
36
+ const current = [...store.getFieldValue(name) ?? []];
37
+ current.splice(index, 0, value);
38
+ store.setFieldValue(name, current);
39
+ },
40
+ [store, name]
41
+ );
42
+ const replace = useCallback(
43
+ (index, value) => {
44
+ const current = [...store.getFieldValue(name) ?? []];
45
+ current[index] = value;
46
+ store.setFieldValue(name, current);
47
+ },
48
+ [store, name]
49
+ );
50
+ const move = useCallback(
51
+ (from, to) => {
52
+ const current = [...store.getFieldValue(name) ?? []];
53
+ const [item] = current.splice(from, 1);
54
+ current.splice(to, 0, item);
55
+ store.setFieldValue(name, current);
56
+ },
57
+ [store, name]
58
+ );
59
+ return {
60
+ fields,
61
+ push,
62
+ remove,
63
+ swap,
64
+ insert,
65
+ replace,
66
+ move,
67
+ get length() {
68
+ return fields.length;
69
+ }
70
+ };
71
+ }
72
+ export {
73
+ useFieldArray
74
+ };
@@ -0,0 +1,226 @@
1
+ import { ChangeEvent, ComponentType, CSSProperties, FocusEvent, RefObject, SyntheticEvent } from 'react';
2
+ /** Built-in field type identifiers (20 types) */
3
+ export type BuiltInFieldType = 'text' | 'email' | 'password' | 'phone' | 'textarea' | 'number' | 'currency' | 'slider' | 'date' | 'time' | 'datetime' | 'select' | 'checkbox' | 'radio' | 'switch' | 'autocomplete' | 'autocomplete-multi' | 'autocomplete-predict' | 'color';
4
+ /** Option item for select/radio/autocomplete fields */
5
+ export interface FieldOption {
6
+ value: string | number;
7
+ label: string;
8
+ disabled?: boolean;
9
+ [key: string]: unknown;
10
+ }
11
+ /** Autocomplete-specific option */
12
+ export interface AutocompleteOption extends FieldOption {
13
+ [key: string]: unknown;
14
+ }
15
+ /** Base field configuration */
16
+ export interface FieldConfig<TValues extends Record<string, unknown> = Record<string, unknown>> {
17
+ name: string;
18
+ label?: string;
19
+ type: BuiltInFieldType | (string & {});
20
+ placeholder?: string;
21
+ disabled?: boolean;
22
+ readOnly?: boolean;
23
+ required?: boolean;
24
+ requiredMessage?: string;
25
+ /** Custom validation schema (overrides auto-validation) */
26
+ validation?: unknown;
27
+ /** Conditional hiding */
28
+ hidden?: boolean | ((values: TValues) => boolean);
29
+ /** Custom component override for this specific field */
30
+ component?: ComponentType<FieldComponentProps>;
31
+ /** Options for select/radio/autocomplete types */
32
+ options?: FieldOption[];
33
+ min?: number;
34
+ max?: number;
35
+ step?: number;
36
+ prefix?: string;
37
+ suffix?: string;
38
+ locale?: string;
39
+ currency?: string;
40
+ format?: string;
41
+ ampm?: boolean;
42
+ minDate?: string;
43
+ maxDate?: string;
44
+ rows?: number;
45
+ fetchOptions?: (query: string, signal?: AbortSignal) => Promise<AutocompleteOption[]>;
46
+ optionLabel?: string;
47
+ multiple?: boolean;
48
+ /** Helper text shown below field */
49
+ helperText?: string;
50
+ /** Layout: CSS grid column span */
51
+ colSpan?: number | Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', number>>;
52
+ /** Additional CSS class for the field wrapper */
53
+ className?: string;
54
+ /** Extra props forwarded to the field component */
55
+ fieldProps?: Record<string, unknown>;
56
+ }
57
+ /** Array field configuration */
58
+ export interface ArrayFieldConfig<TValues extends Record<string, unknown> = Record<string, unknown>> extends FieldConfig<TValues> {
59
+ isArray: true;
60
+ fields: FieldConfig<TValues>[];
61
+ minItems?: number;
62
+ maxItems?: number;
63
+ addLabel?: string;
64
+ removeLabel?: string;
65
+ arrayRef?: RefObject<ArrayHelpers | null>;
66
+ }
67
+ export interface FormConfig<TValues extends Record<string, unknown> = Record<string, unknown>> {
68
+ fields: (FieldConfig<TValues> | ArrayFieldConfig<TValues>)[];
69
+ initialValues: TValues;
70
+ isUpdate?: boolean;
71
+ }
72
+ export interface FieldComponentProps {
73
+ name: string;
74
+ value: unknown;
75
+ onChange: (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;
76
+ onBlur: (e: FocusEvent<HTMLElement>) => void;
77
+ error: boolean;
78
+ helperText?: string;
79
+ label?: string;
80
+ placeholder?: string;
81
+ disabled?: boolean;
82
+ readOnly?: boolean;
83
+ required?: boolean;
84
+ options?: FieldOption[];
85
+ form: FormApi;
86
+ [key: string]: unknown;
87
+ }
88
+ export interface FormApi<TValues extends Record<string, unknown> = Record<string, unknown>> {
89
+ values: TValues;
90
+ errors: Record<string, string>;
91
+ touched: Record<string, boolean>;
92
+ dirty: boolean;
93
+ isSubmitting: boolean;
94
+ isValid: boolean;
95
+ submitCount: number;
96
+ setFieldValue: (name: string, value: unknown) => void;
97
+ setFieldTouched: (name: string, touched?: boolean) => void;
98
+ setFieldError: (name: string, error: string | undefined) => void;
99
+ setValues: (values: TValues) => void;
100
+ setErrors: (errors: Record<string, string>) => void;
101
+ handleChange: (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;
102
+ handleBlur: (e: FocusEvent<HTMLElement>) => void;
103
+ handleSubmit: (e?: SyntheticEvent<HTMLFormElement>) => void;
104
+ resetForm: (nextValues?: Partial<TValues>) => void;
105
+ submitForm: () => Promise<void>;
106
+ validateForm: () => Promise<Record<string, string>>;
107
+ validateField: (name: string) => Promise<string | undefined>;
108
+ }
109
+ /** Ref handle exposed by AxenForm */
110
+ export interface AxenFormRef {
111
+ submit: () => void;
112
+ resetForm: (nextValues?: Record<string, unknown>) => void;
113
+ getValues: () => Record<string, unknown>;
114
+ getErrors: () => Record<string, string>;
115
+ isValid: () => boolean;
116
+ isDirty: () => boolean;
117
+ }
118
+ export type FieldTypeComponentMap = Partial<Record<BuiltInFieldType, ComponentType<FieldComponentProps>>> & Record<string, ComponentType<FieldComponentProps>>;
119
+ export interface AxenFormProps<TValues extends Record<string, unknown> = Record<string, unknown>> {
120
+ config: FormConfig<TValues>;
121
+ onSubmit: (values: TValues, meta: {
122
+ isUpdate: boolean;
123
+ resetForm: () => void;
124
+ }) => void | Promise<void>;
125
+ components?: Partial<FieldTypeComponentMap>;
126
+ validationAdapter?: ValidationAdapter;
127
+ /** Payload whitelist — static or dynamic per discriminator value */
128
+ payloadFields?: string[] | Record<string, string[]>;
129
+ /** Discriminator field name for dynamic payloadFields */
130
+ payloadDiscriminator?: keyof TValues & string;
131
+ /** Grid columns (default: 12) */
132
+ columns?: number;
133
+ /** Grid gap */
134
+ gap?: string | number;
135
+ /** Additional CSS class */
136
+ className?: string;
137
+ /** Disable all fields */
138
+ disabled?: boolean;
139
+ /** Validate on change (default: true) */
140
+ validateOnChange?: boolean;
141
+ /** Validate on blur (default: true) */
142
+ validateOnBlur?: boolean;
143
+ }
144
+ export interface ValidationAdapter {
145
+ buildSchema: (fields: FieldConfig[]) => unknown;
146
+ validate: (schema: unknown, values: Record<string, unknown>) => Promise<Record<string, string>>;
147
+ validateField?: (schema: unknown, name: string, value: unknown) => Promise<string | undefined>;
148
+ }
149
+ export interface ArrayHelpers {
150
+ push: (value: unknown) => void;
151
+ remove: (index: number) => void;
152
+ swap: (indexA: number, indexB: number) => void;
153
+ insert: (index: number, value: unknown) => void;
154
+ replace: (index: number, value: unknown) => void;
155
+ move: (from: number, to: number) => void;
156
+ length: number;
157
+ }
158
+ export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
159
+ export type GridSize = number | 'auto' | 'grow';
160
+ export interface GridProps {
161
+ children: React.ReactNode;
162
+ container?: boolean;
163
+ columns?: number;
164
+ spacing?: number | string;
165
+ rowSpacing?: number | string;
166
+ columnSpacing?: number | string;
167
+ size?: GridSize;
168
+ xs?: GridSize;
169
+ sm?: GridSize;
170
+ md?: GridSize;
171
+ lg?: GridSize;
172
+ xl?: GridSize;
173
+ offset?: number | Partial<Record<Breakpoint, number>>;
174
+ className?: string;
175
+ style?: CSSProperties;
176
+ }
177
+ export interface BoxProps {
178
+ children?: React.ReactNode;
179
+ component?: React.ElementType;
180
+ display?: 'flex' | 'block' | 'inline-flex' | 'inline-block' | 'none';
181
+ flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
182
+ justifyContent?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around';
183
+ alignItems?: 'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline';
184
+ flexWrap?: 'wrap' | 'nowrap';
185
+ gap?: number | string;
186
+ p?: number;
187
+ px?: number;
188
+ py?: number;
189
+ m?: number;
190
+ mx?: number;
191
+ my?: number;
192
+ className?: string;
193
+ style?: CSSProperties;
194
+ }
195
+ export interface StackProps {
196
+ children: React.ReactNode;
197
+ direction?: 'row' | 'column';
198
+ spacing?: number | string;
199
+ alignItems?: 'flex-start' | 'center' | 'flex-end' | 'stretch';
200
+ justifyContent?: 'flex-start' | 'center' | 'flex-end' | 'space-between';
201
+ divider?: React.ReactNode;
202
+ className?: string;
203
+ style?: CSSProperties;
204
+ }
205
+ export interface DividerProps {
206
+ orientation?: 'horizontal' | 'vertical';
207
+ className?: string;
208
+ style?: CSSProperties;
209
+ }
210
+ export interface SpacerProps {
211
+ /** Horizontal spacing multiplier (width = x × 8px) */
212
+ x?: number;
213
+ /** Vertical spacing multiplier (height = y × 8px) */
214
+ y?: number;
215
+ /** Flex basis multiplier (basis = basis × 8px) — useful inside flex containers */
216
+ basis?: number;
217
+ /** Grow to fill remaining space (default: false) */
218
+ grow?: boolean;
219
+ className?: string;
220
+ style?: CSSProperties;
221
+ }
222
+ export interface PayloadConfig<TValues extends Record<string, unknown> = Record<string, unknown>> {
223
+ fields?: string[] | Record<string, string[]>;
224
+ discriminator?: keyof TValues & string;
225
+ }
226
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@axenstudio/axen-form",
3
+ "version": "0.1.1",
4
+ "description": "Lightweight, config-driven, enterprise-grade React form library. Zero UI dependency. CSS Modules. A11y-aware.",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./tokens": "./dist/tokens/tokens.css",
16
+ "./reset": "./dist/tokens/reset.css",
17
+ "./adapters/yup": {
18
+ "types": "./dist/adapters/yupAdapter.d.ts",
19
+ "import": "./dist/adapters/yupAdapter.js",
20
+ "require": "./dist/adapters/yupAdapter.cjs"
21
+ },
22
+ "./adapters/zod": {
23
+ "types": "./dist/adapters/zodAdapter.d.ts",
24
+ "import": "./dist/adapters/zodAdapter.js",
25
+ "require": "./dist/adapters/zodAdapter.cjs"
26
+ }
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "README.md"
31
+ ],
32
+ "sideEffects": [
33
+ "**/*.css"
34
+ ],
35
+ "scripts": {
36
+ "dev": "vite build --watch",
37
+ "build": "tsc -p tsconfig.build.json && vite build",
38
+ "test": "vitest run",
39
+ "test:watch": "vitest",
40
+ "lint": "eslint src/",
41
+ "typecheck": "tsc --noEmit"
42
+ },
43
+ "peerDependencies": {
44
+ "react": ">=19.0.0",
45
+ "react-dom": ">=19.0.0"
46
+ },
47
+ "peerDependenciesMeta": {
48
+ "yup": {
49
+ "optional": true
50
+ },
51
+ "zod": {
52
+ "optional": true
53
+ }
54
+ },
55
+ "devDependencies": {
56
+ "@testing-library/jest-dom": "^6.6.3",
57
+ "@testing-library/react": "^16.1.0",
58
+ "@types/node": "^25.3.5",
59
+ "@types/react": "^19.0.0",
60
+ "@types/react-dom": "^19.0.0",
61
+ "jsdom": "^25.0.0",
62
+ "react": "^19.0.0",
63
+ "react-dom": "^19.0.0",
64
+ "typescript": "^5.7.0",
65
+ "vite": "^6.0.0",
66
+ "vite-plugin-css-injected-by-js": "^3.5.0",
67
+ "vite-plugin-dts": "^4.3.0",
68
+ "vitest": "^3.0.0"
69
+ },
70
+ "keywords": [
71
+ "react",
72
+ "form",
73
+ "config-driven",
74
+ "css-modules",
75
+ "a11y",
76
+ "enterprise",
77
+ "typescript",
78
+ "validation",
79
+ "yup",
80
+ "zod"
81
+ ],
82
+ "license": "MIT",
83
+ "repository": {
84
+ "type": "git",
85
+ "url": "https://github.com/axenstudio/axen-form"
86
+ }
87
+ }