@algolia/satellite 1.0.0 → 1.1.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 (134) hide show
  1. package/dist/cjs/AutoComplete/AutoComplete.d.ts +1 -1
  2. package/dist/cjs/AutoComplete/AutoComplete.js +49 -26
  3. package/dist/cjs/AutoComplete/AutoComplete.tailwind.js +9 -1
  4. package/dist/cjs/AutoComplete/types.d.ts +1 -0
  5. package/dist/cjs/Checkbox/Checkbox.d.ts +1 -1
  6. package/dist/cjs/Checkbox/Checkbox.js +21 -13
  7. package/dist/cjs/Checkbox/Checkbox.tailwind.js +8 -2
  8. package/dist/cjs/DatePicker/DatePicker/DatePicker.d.ts +4 -2
  9. package/dist/cjs/DatePicker/DatePicker/DatePicker.js +18 -7
  10. package/dist/cjs/DatePicker/components/Display.d.ts +3 -3
  11. package/dist/cjs/DatePicker/components/Display.js +16 -5
  12. package/dist/cjs/Dropzone/Dropzone.d.ts +4 -2
  13. package/dist/cjs/Dropzone/Dropzone.js +23 -12
  14. package/dist/cjs/Field/Field.d.ts +1 -0
  15. package/dist/cjs/Field/Field.js +63 -11
  16. package/dist/cjs/Field/FieldContext.d.ts +3 -0
  17. package/dist/cjs/Field/useField.d.ts +4 -1
  18. package/dist/cjs/Field/useField.js +17 -1
  19. package/dist/cjs/Form/Form.d.ts +16 -0
  20. package/dist/cjs/Form/Form.js +140 -0
  21. package/dist/cjs/Form/FormContext.d.ts +13 -0
  22. package/dist/cjs/Form/FormContext.js +8 -0
  23. package/dist/cjs/Form/index.d.ts +3 -0
  24. package/dist/cjs/Form/index.js +27 -0
  25. package/dist/cjs/Form/stories/AsynchronousValidation.js +396 -0
  26. package/dist/cjs/Form/stories/Complex.js +928 -0
  27. package/dist/cjs/Form/stories/DependentFieldsValidation.js +249 -0
  28. package/dist/cjs/Form/stories/DirtyFields.js +339 -0
  29. package/dist/cjs/Form/stories/DynamicFieldsValidation.js +425 -0
  30. package/dist/cjs/Form/stories/FieldArrays.js +549 -0
  31. package/dist/cjs/Form/stories/ValidationStrategies.js +455 -0
  32. package/dist/cjs/Form/stories/utils/useFormikAutoFocusOnError.js +22 -0
  33. package/dist/cjs/Form/useForm.d.ts +1 -0
  34. package/dist/cjs/Form/useForm.js +11 -0
  35. package/dist/cjs/Input/Input.js +22 -9
  36. package/dist/cjs/Input/Input.tailwind.js +7 -2
  37. package/dist/cjs/Pagination/DotPagination/DotPagination.d.ts +1 -1
  38. package/dist/cjs/RadioGroup/RadioButton.d.ts +1 -1
  39. package/dist/cjs/RadioGroup/RadioButton.js +16 -3
  40. package/dist/cjs/RadioGroup/RadioButton.tailwind.js +23 -0
  41. package/dist/cjs/RadioGroup/RadioGroup.d.ts +7 -5
  42. package/dist/cjs/RadioGroup/RadioGroup.js +78 -16
  43. package/dist/cjs/RadioGroup/{RadiogroupContext.d.ts → RadioGroupContext.d.ts} +8 -1
  44. package/dist/cjs/RangeSlider/RangeSlider.d.ts +2 -3
  45. package/dist/cjs/RangeSlider/RangeSlider.js +27 -10
  46. package/dist/cjs/Satellite/locale.d.ts +2 -0
  47. package/dist/cjs/Select/Select.js +39 -6
  48. package/dist/cjs/Select/Select.tailwind.js +19 -0
  49. package/dist/cjs/Stepper/Step.js +2 -2
  50. package/dist/cjs/Switch/Switch.js +2 -2
  51. package/dist/cjs/Switch/SwitchOption.js +3 -3
  52. package/dist/cjs/Tables/DataTable/DataTable.d.ts +1 -1
  53. package/dist/cjs/Tag/Tag.d.ts +1 -1
  54. package/dist/cjs/TextArea/TextArea.d.ts +1 -0
  55. package/dist/cjs/TextArea/TextArea.js +47 -8
  56. package/dist/cjs/TextArea/TextArea.tailwind.js +41 -4
  57. package/dist/cjs/Toggle/Toggle.d.ts +1 -1
  58. package/dist/cjs/Toggle/Toggle.js +23 -6
  59. package/dist/cjs/Toggle/Toggle.tailwind.js +9 -0
  60. package/dist/cjs/Tooltip/Tooltip.d.ts +1 -1
  61. package/dist/cjs/index.d.ts +1 -0
  62. package/dist/cjs/index.js +12 -0
  63. package/dist/cjs/utils/isCssPropertySupported.d.ts +1 -1
  64. package/dist/cjs/utils/mergeRefs.d.ts +2 -0
  65. package/dist/cjs/utils/mergeRefs.js +17 -0
  66. package/dist/esm/AutoComplete/AutoComplete.d.ts +1 -1
  67. package/dist/esm/AutoComplete/AutoComplete.js +52 -27
  68. package/dist/esm/AutoComplete/AutoComplete.tailwind.js +9 -1
  69. package/dist/esm/AutoComplete/types.d.ts +1 -0
  70. package/dist/esm/Checkbox/Checkbox.d.ts +1 -1
  71. package/dist/esm/Checkbox/Checkbox.js +21 -13
  72. package/dist/esm/Checkbox/Checkbox.tailwind.js +8 -2
  73. package/dist/esm/DatePicker/DatePicker/DatePicker.d.ts +4 -2
  74. package/dist/esm/DatePicker/DatePicker/DatePicker.js +19 -8
  75. package/dist/esm/DatePicker/components/Display.d.ts +3 -3
  76. package/dist/esm/DatePicker/components/Display.js +15 -5
  77. package/dist/esm/Dropzone/Dropzone.d.ts +4 -2
  78. package/dist/esm/Dropzone/Dropzone.js +24 -13
  79. package/dist/esm/Field/Field.d.ts +1 -0
  80. package/dist/esm/Field/Field.js +64 -12
  81. package/dist/esm/Field/FieldContext.d.ts +3 -0
  82. package/dist/esm/Field/useField.d.ts +4 -1
  83. package/dist/esm/Field/useField.js +17 -2
  84. package/dist/esm/Form/Form.d.ts +16 -0
  85. package/dist/esm/Form/Form.js +135 -0
  86. package/dist/esm/Form/FormContext.d.ts +13 -0
  87. package/dist/esm/Form/FormContext.js +2 -0
  88. package/dist/esm/Form/index.d.ts +3 -0
  89. package/dist/esm/Form/index.js +3 -0
  90. package/dist/esm/Form/stories/AsynchronousValidation.js +387 -0
  91. package/dist/esm/Form/stories/Complex.js +919 -0
  92. package/dist/esm/Form/stories/DependentFieldsValidation.js +240 -0
  93. package/dist/esm/Form/stories/DirtyFields.js +330 -0
  94. package/dist/esm/Form/stories/DynamicFieldsValidation.js +416 -0
  95. package/dist/esm/Form/stories/FieldArrays.js +544 -0
  96. package/dist/esm/Form/stories/ValidationStrategies.js +446 -0
  97. package/dist/esm/Form/stories/utils/useFormikAutoFocusOnError.js +16 -0
  98. package/dist/esm/Form/useForm.d.ts +1 -0
  99. package/dist/esm/Form/useForm.js +5 -0
  100. package/dist/esm/Input/Input.js +22 -9
  101. package/dist/esm/Input/Input.tailwind.js +7 -2
  102. package/dist/esm/Pagination/DotPagination/DotPagination.d.ts +1 -1
  103. package/dist/esm/RadioGroup/RadioButton.d.ts +1 -1
  104. package/dist/esm/RadioGroup/RadioButton.js +16 -3
  105. package/dist/esm/RadioGroup/RadioButton.tailwind.js +23 -0
  106. package/dist/esm/RadioGroup/RadioGroup.d.ts +7 -5
  107. package/dist/esm/RadioGroup/RadioGroup.js +77 -15
  108. package/dist/esm/RadioGroup/{RadiogroupContext.d.ts → RadioGroupContext.d.ts} +8 -1
  109. package/dist/esm/RangeSlider/RangeSlider.d.ts +2 -3
  110. package/dist/esm/RangeSlider/RangeSlider.js +27 -10
  111. package/dist/esm/Satellite/locale.d.ts +2 -0
  112. package/dist/esm/Select/Select.js +41 -7
  113. package/dist/esm/Select/Select.tailwind.js +19 -0
  114. package/dist/esm/Stepper/Step.js +2 -2
  115. package/dist/esm/Switch/Switch.js +1 -1
  116. package/dist/esm/Switch/SwitchOption.js +2 -2
  117. package/dist/esm/Tables/DataTable/DataTable.d.ts +1 -1
  118. package/dist/esm/Tag/Tag.d.ts +1 -1
  119. package/dist/esm/TextArea/TextArea.d.ts +1 -0
  120. package/dist/esm/TextArea/TextArea.js +49 -9
  121. package/dist/esm/TextArea/TextArea.tailwind.js +41 -4
  122. package/dist/esm/Toggle/Toggle.d.ts +1 -1
  123. package/dist/esm/Toggle/Toggle.js +23 -6
  124. package/dist/esm/Toggle/Toggle.tailwind.js +9 -0
  125. package/dist/esm/Tooltip/Tooltip.d.ts +1 -1
  126. package/dist/esm/index.d.ts +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/utils/isCssPropertySupported.d.ts +1 -1
  129. package/dist/esm/utils/mergeRefs.d.ts +2 -0
  130. package/dist/esm/utils/mergeRefs.js +11 -0
  131. package/dist/satellite.min.css +1 -1
  132. package/package.json +13 -7
  133. /package/dist/cjs/RadioGroup/{RadiogroupContext.js → RadioGroupContext.js} +0 -0
  134. /package/dist/esm/RadioGroup/{RadiogroupContext.js → RadioGroupContext.js} +0 -0
@@ -0,0 +1,240 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14;
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
+ import { zodResolver } from "@hookform/resolvers/zod";
8
+ import { useFormik } from "formik";
9
+ import { useState } from "react";
10
+ import { Controller, useForm } from "react-hook-form";
11
+ import * as yup from "yup";
12
+ import { z } from "zod";
13
+ import { Field } from "../../Field";
14
+ import { Input } from "../../Input";
15
+ import stl from "../../styles/helpers/satellitePrefixer";
16
+ import { ExperimentalForm, ExperimentalFormErrorMessage, ExperimentalFormReset, ExperimentalFormSubmit } from "../Form";
17
+ import { useFormikAutoFocusOnError } from "./utils/useFormikAutoFocusOnError";
18
+ import { jsx as _jsx } from "react/jsx-runtime";
19
+ import { jsxs as _jsxs } from "react/jsx-runtime";
20
+ var initialFormData = {
21
+ password: "",
22
+ confirmPassword: ""
23
+ };
24
+ var zodSchema = z.object({
25
+ password: z.string().min(1, {
26
+ message: "You must specify a password"
27
+ }).min(5, "Password must be at least 5 characters long"),
28
+ confirmPassword: z.string().min(1, {
29
+ message: "You must confirm your password"
30
+ })
31
+ }).refine(function (schema) {
32
+ return schema.password === schema.confirmPassword;
33
+ }, {
34
+ message: "Passwords must match",
35
+ path: ["confirmPassword"]
36
+ });
37
+ export var RHFDependentFieldsValidationComponent = function RHFDependentFieldsValidationComponent() {
38
+ var _useState = useState(initialFormData),
39
+ _useState2 = _slicedToArray(_useState, 2),
40
+ formData = _useState2[0],
41
+ setFormData = _useState2[1];
42
+ var _useForm = useForm({
43
+ defaultValues: initialFormData,
44
+ reValidateMode: "onChange",
45
+ resolver: zodResolver(zodSchema)
46
+ }),
47
+ control = _useForm.control,
48
+ handleSubmit = _useForm.handleSubmit,
49
+ getFieldStateFromReactHookForm = _useForm.getFieldState,
50
+ formState = _useForm.formState,
51
+ reset = _useForm.reset;
52
+ var getFieldState = function getFieldState(fieldName) {
53
+ var _fieldState$error;
54
+ var fieldState = getFieldStateFromReactHookForm(fieldName, formState);
55
+ if ((_fieldState$error = fieldState.error) !== null && _fieldState$error !== void 0 && _fieldState$error.message) {
56
+ return {
57
+ status: "invalid",
58
+ errors: [fieldState.error.message]
59
+ };
60
+ } else if (!fieldState.invalid && formState.isSubmitted) {
61
+ return {
62
+ status: "validated"
63
+ };
64
+ } else {
65
+ return {
66
+ status: "default"
67
+ };
68
+ }
69
+ };
70
+ return /*#__PURE__*/_jsxs("div", {
71
+ className: stl(_templateObject || (_templateObject = _taggedTemplateLiteral(["flex flex-col gap-8 w-3/5"]))),
72
+ children: [/*#__PURE__*/_jsxs(ExperimentalForm, {
73
+ onSubmit: handleSubmit(function (data) {
74
+ return setFormData(data);
75
+ }),
76
+ onReset: function onReset() {
77
+ return setFormData(initialFormData);
78
+ },
79
+ className: stl(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["flex flex-col items-start gap-4 min-w-72"]))),
80
+ children: [/*#__PURE__*/_jsx(ExperimentalFormErrorMessage, {}), /*#__PURE__*/_jsx(Controller, {
81
+ name: "password",
82
+ control: control,
83
+ render: function render(_ref) {
84
+ var field = _ref.field;
85
+ return /*#__PURE__*/_jsx(Field, {
86
+ label: "Password",
87
+ labelFor: "password",
88
+ description: "Please enter your password",
89
+ state: getFieldState("password"),
90
+ className: stl(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["w-full"]))),
91
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
92
+ id: "password",
93
+ placeholder: "Password",
94
+ type: "password",
95
+ required: true
96
+ }, field))
97
+ });
98
+ }
99
+ }), /*#__PURE__*/_jsx(Controller, {
100
+ name: "confirmPassword",
101
+ control: control,
102
+ render: function render(_ref2) {
103
+ var field = _ref2.field;
104
+ return /*#__PURE__*/_jsx(Field, {
105
+ label: "Confirm Password",
106
+ labelFor: "confirmPassword",
107
+ description: "Please confirm your password",
108
+ state: getFieldState("confirmPassword"),
109
+ className: stl(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["w-full"]))),
110
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
111
+ id: "confirmPassword",
112
+ placeholder: "Confirm password",
113
+ type: "password",
114
+ required: true
115
+ }, field))
116
+ });
117
+ }
118
+ }), /*#__PURE__*/_jsxs("div", {
119
+ className: stl(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["flex gap-2"]))),
120
+ children: [/*#__PURE__*/_jsx(ExperimentalFormSubmit, {
121
+ variant: "primary",
122
+ "aria-label": "Save the form",
123
+ children: "Save"
124
+ }), /*#__PURE__*/_jsx(ExperimentalFormReset, {
125
+ "aria-label": "Reset the form",
126
+ onClick: function onClick() {
127
+ return reset();
128
+ },
129
+ children: "Reset"
130
+ })]
131
+ })]
132
+ }), /*#__PURE__*/_jsx("hr", {
133
+ className: stl(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["text-grey-500"])))
134
+ }), /*#__PURE__*/_jsx("code", {
135
+ className: stl(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["whitespace-pre"]))),
136
+ children: JSON.stringify(formData, null, 2)
137
+ })]
138
+ });
139
+ };
140
+ var yupSchema = yup.object({
141
+ password: yup.string().min(5, "Password must be at least 5 characters long").required("You must specify a password"),
142
+ confirmPassword: yup.string().oneOf([yup.ref("password")], "Passwords must match").required("You must confirm your password")
143
+ });
144
+ export var FormikDependentFieldsValidationComponent = function FormikDependentFieldsValidationComponent() {
145
+ var _useState3 = useState(initialFormData),
146
+ _useState4 = _slicedToArray(_useState3, 2),
147
+ formData = _useState4[0],
148
+ setFormData = _useState4[1];
149
+ var _useState5 = useState(false),
150
+ _useState6 = _slicedToArray(_useState5, 2),
151
+ revalidationEnabled = _useState6[0],
152
+ setRevalidationEnabled = _useState6[1];
153
+ var formik = useFormik({
154
+ initialValues: initialFormData,
155
+ validateOnChange: revalidationEnabled,
156
+ validateOnBlur: revalidationEnabled,
157
+ validationSchema: yupSchema,
158
+ onSubmit: function onSubmit(values) {
159
+ return setFormData(values);
160
+ },
161
+ onReset: function onReset() {
162
+ return setFormData(initialFormData);
163
+ }
164
+ });
165
+ var getFieldState = function getFieldState(fieldName) {
166
+ var fieldMeta = formik.getFieldMeta(fieldName);
167
+ if (fieldMeta.error) {
168
+ return {
169
+ status: "invalid",
170
+ errors: [fieldMeta.error]
171
+ };
172
+ } else if (formik.isSubmitting && fieldMeta.touched) {
173
+ return {
174
+ status: "validated"
175
+ };
176
+ } else {
177
+ return {
178
+ status: "default"
179
+ };
180
+ }
181
+ };
182
+ useFormikAutoFocusOnError(formik);
183
+ return /*#__PURE__*/_jsxs("div", {
184
+ className: stl(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["flex flex-col gap-8 w-3/5"]))),
185
+ children: [/*#__PURE__*/_jsxs(ExperimentalForm, {
186
+ onSubmit: function onSubmit(e) {
187
+ setRevalidationEnabled(true);
188
+ formik.handleSubmit(e);
189
+ },
190
+ onReset: function onReset(e) {
191
+ setRevalidationEnabled(false);
192
+ formik.handleReset(e);
193
+ },
194
+ className: stl(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["flex flex-col items-start gap-4 min-w-72"]))),
195
+ children: [/*#__PURE__*/_jsx(ExperimentalFormErrorMessage, {}), /*#__PURE__*/_jsx(Field, {
196
+ label: "Password",
197
+ labelFor: "password",
198
+ description: "Please enter your password",
199
+ state: getFieldState("password"),
200
+ className: stl(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["w-full"]))),
201
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
202
+ id: "password",
203
+ placeholder: "Password",
204
+ type: "password",
205
+ required: true
206
+ }, formik.getFieldProps("password")))
207
+ }), /*#__PURE__*/_jsx(Field, {
208
+ label: "Confirm Password",
209
+ labelFor: "confirmPassword",
210
+ description: "Please confirm your password",
211
+ state: getFieldState("confirmPassword"),
212
+ className: stl(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["w-full"]))),
213
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
214
+ id: "confirmPassword",
215
+ placeholder: "Confirm password",
216
+ type: "password",
217
+ required: true
218
+ }, formik.getFieldProps("confirmPassword")))
219
+ }), /*#__PURE__*/_jsxs("div", {
220
+ className: stl(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["flex gap-2"]))),
221
+ children: [/*#__PURE__*/_jsx(ExperimentalFormSubmit, {
222
+ variant: "primary",
223
+ "aria-label": "Save the form",
224
+ children: "Save"
225
+ }), /*#__PURE__*/_jsx(ExperimentalFormReset, {
226
+ "aria-label": "Reset the form",
227
+ onClick: function onClick() {
228
+ return formik.resetForm();
229
+ },
230
+ children: "Reset"
231
+ })]
232
+ })]
233
+ }), /*#__PURE__*/_jsx("hr", {
234
+ className: stl(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["text-grey-500"])))
235
+ }), /*#__PURE__*/_jsx("code", {
236
+ className: stl(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["whitespace-pre"]))),
237
+ children: JSON.stringify(formData, null, 2)
238
+ })]
239
+ });
240
+ };
@@ -0,0 +1,330 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26, _templateObject27, _templateObject28;
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
+ import { zodResolver } from "@hookform/resolvers/zod";
8
+ import cx from "clsx";
9
+ import { useFormik } from "formik";
10
+ import { useState } from "react";
11
+ import { Controller, useForm } from "react-hook-form";
12
+ import * as yup from "yup";
13
+ import { z } from "zod";
14
+ import { Alert } from "../../Banners";
15
+ import { Field } from "../../Field";
16
+ import { InfoIcon } from "../../Icons";
17
+ import { Input } from "../../Input";
18
+ import stl from "../../styles/helpers/satellitePrefixer";
19
+ import { ExperimentalForm, ExperimentalFormErrorMessage, ExperimentalFormReset, ExperimentalFormSubmit } from "../Form";
20
+ import { useFormikAutoFocusOnError } from "./utils/useFormikAutoFocusOnError";
21
+ import { jsx as _jsx } from "react/jsx-runtime";
22
+ import { jsxs as _jsxs } from "react/jsx-runtime";
23
+ var initialFormData = {
24
+ name: "John Doe",
25
+ email: "jdoe@example.com",
26
+ company: "Doe Company",
27
+ phoneNumber: "(800) 555-0175"
28
+ };
29
+ var zodSchema = z.object({
30
+ name: z.string().min(1, {
31
+ message: "You must specify a name"
32
+ }),
33
+ email: z.string().email({
34
+ message: "You must specify a valid email"
35
+ }),
36
+ company: z.string().min(1, {
37
+ message: "You must specify a company"
38
+ }),
39
+ phoneNumber: z.string().min(1, {
40
+ message: "You must specify a phone number"
41
+ })
42
+ });
43
+ export var RHFDirtyFieldsComponent = function RHFDirtyFieldsComponent() {
44
+ var _useState = useState(initialFormData),
45
+ _useState2 = _slicedToArray(_useState, 2),
46
+ formData = _useState2[0],
47
+ setFormData = _useState2[1];
48
+ var _useForm = useForm({
49
+ defaultValues: initialFormData,
50
+ reValidateMode: "onChange",
51
+ resolver: zodResolver(zodSchema)
52
+ }),
53
+ control = _useForm.control,
54
+ handleSubmit = _useForm.handleSubmit,
55
+ getFieldStateFromReactHookForm = _useForm.getFieldState,
56
+ formState = _useForm.formState,
57
+ reset = _useForm.reset;
58
+ var getFieldState = function getFieldState(fieldName) {
59
+ var _fieldState$error;
60
+ var fieldState = getFieldStateFromReactHookForm(fieldName, formState);
61
+ if ((_fieldState$error = fieldState.error) !== null && _fieldState$error !== void 0 && _fieldState$error.message) {
62
+ return {
63
+ status: "invalid",
64
+ errors: [fieldState.error.message]
65
+ };
66
+ } else if (!fieldState.invalid && formState.isSubmitted) {
67
+ return {
68
+ status: "validated"
69
+ };
70
+ } else {
71
+ return {
72
+ status: "default"
73
+ };
74
+ }
75
+ };
76
+ var isFieldDirty = function isFieldDirty(fieldName) {
77
+ return getFieldStateFromReactHookForm(fieldName, formState).isDirty;
78
+ };
79
+ var dirtyFieldsNb = Object.keys(formState.dirtyFields).length;
80
+ return /*#__PURE__*/_jsxs("div", {
81
+ className: stl(_templateObject || (_templateObject = _taggedTemplateLiteral(["flex flex-col gap-8 w-3/5"]))),
82
+ children: [/*#__PURE__*/_jsxs(ExperimentalForm, {
83
+ onSubmit: handleSubmit(function (data) {
84
+ return setFormData(data);
85
+ }),
86
+ onReset: function onReset() {
87
+ return setFormData(initialFormData);
88
+ },
89
+ className: stl(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["flex flex-col items-start gap-4 min-w-72"]))),
90
+ children: [/*#__PURE__*/_jsx(ExperimentalFormErrorMessage, {}), /*#__PURE__*/_jsx(Controller, {
91
+ name: "name",
92
+ control: control,
93
+ render: function render(_ref) {
94
+ var field = _ref.field;
95
+ return /*#__PURE__*/_jsx(Field, {
96
+ label: "Name",
97
+ labelFor: "name",
98
+ description: "Please enter your name",
99
+ state: getFieldState("name"),
100
+ className: cx(stl(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("name") && stl(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["text-xenon-500"])))),
101
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
102
+ id: "name",
103
+ placeholder: "Name",
104
+ required: true
105
+ }, field))
106
+ });
107
+ }
108
+ }), /*#__PURE__*/_jsx(Controller, {
109
+ name: "email",
110
+ control: control,
111
+ render: function render(_ref2) {
112
+ var field = _ref2.field;
113
+ return /*#__PURE__*/_jsx(Field, {
114
+ label: "Email",
115
+ labelFor: "email",
116
+ description: "Please enter your email",
117
+ state: getFieldState("email"),
118
+ className: cx(stl(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("email") && stl(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["text-xenon-500"])))),
119
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
120
+ id: "email",
121
+ placeholder: "Email",
122
+ required: true
123
+ }, field))
124
+ });
125
+ }
126
+ }), /*#__PURE__*/_jsx(Controller, {
127
+ name: "company",
128
+ control: control,
129
+ render: function render(_ref3) {
130
+ var field = _ref3.field;
131
+ return /*#__PURE__*/_jsx(Field, {
132
+ label: "Company",
133
+ labelFor: "company",
134
+ description: "Please enter your company",
135
+ state: getFieldState("company"),
136
+ className: cx(stl(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("company") && stl(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["text-xenon-500"])))),
137
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
138
+ id: "company",
139
+ placeholder: "Company",
140
+ required: true
141
+ }, field))
142
+ });
143
+ }
144
+ }), /*#__PURE__*/_jsx(Controller, {
145
+ name: "phoneNumber",
146
+ control: control,
147
+ render: function render(_ref4) {
148
+ var field = _ref4.field;
149
+ return /*#__PURE__*/_jsx(Field, {
150
+ label: "Phone Number",
151
+ labelFor: "phoneNumber",
152
+ description: "Please enter your phone number",
153
+ state: getFieldState("phoneNumber"),
154
+ className: cx(stl(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("phoneNumber") && stl(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["text-xenon-500"])))),
155
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
156
+ id: "phoneNumber",
157
+ placeholder: "Phone number",
158
+ required: true
159
+ }, field))
160
+ });
161
+ }
162
+ }), /*#__PURE__*/_jsxs("div", {
163
+ className: stl(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["flex gap-2"]))),
164
+ children: [/*#__PURE__*/_jsx(ExperimentalFormSubmit, {
165
+ variant: "primary",
166
+ "aria-label": "Save updated changes",
167
+ disabled: !formState.isDirty,
168
+ children: "Save changes"
169
+ }), /*#__PURE__*/_jsx(ExperimentalFormReset, {
170
+ "aria-label": "Reset the form",
171
+ disabled: !formState.isDirty,
172
+ onClick: function onClick() {
173
+ return reset();
174
+ },
175
+ children: "Reset"
176
+ })]
177
+ }), dirtyFieldsNb > 0 && /*#__PURE__*/_jsxs(Alert, {
178
+ variant: "accent",
179
+ icon: InfoIcon,
180
+ className: stl(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["w-full"]))),
181
+ children: [dirtyFieldsNb, " updated fields"]
182
+ })]
183
+ }), /*#__PURE__*/_jsx("hr", {
184
+ className: stl(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["text-grey-500"])))
185
+ }), /*#__PURE__*/_jsx("code", {
186
+ className: stl(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["whitespace-pre"]))),
187
+ children: JSON.stringify(formData, null, 2)
188
+ })]
189
+ });
190
+ };
191
+ var yupSchema = yup.object({
192
+ name: yup.string().required("You must specify a name"),
193
+ email: yup.string().email("You must specify a valid email"),
194
+ company: yup.string().required("You must specify a company"),
195
+ phoneNumber: yup.string().required("You must specify a phone number")
196
+ });
197
+ export var FormikDirtyFieldsComponent = function FormikDirtyFieldsComponent() {
198
+ var _useState3 = useState(initialFormData),
199
+ _useState4 = _slicedToArray(_useState3, 2),
200
+ formData = _useState4[0],
201
+ setFormData = _useState4[1];
202
+ var _useState5 = useState(false),
203
+ _useState6 = _slicedToArray(_useState5, 2),
204
+ revalidationEnabled = _useState6[0],
205
+ setRevalidationEnabled = _useState6[1];
206
+ var formik = useFormik({
207
+ initialValues: initialFormData,
208
+ validateOnChange: revalidationEnabled,
209
+ validateOnBlur: revalidationEnabled,
210
+ validationSchema: yupSchema,
211
+ onSubmit: function onSubmit(values) {
212
+ return setFormData(values);
213
+ },
214
+ onReset: function onReset() {
215
+ return setFormData(initialFormData);
216
+ }
217
+ });
218
+ var getFieldState = function getFieldState(fieldName) {
219
+ var fieldMeta = formik.getFieldMeta(fieldName);
220
+ if (fieldMeta.error) {
221
+ return {
222
+ status: "invalid",
223
+ errors: [fieldMeta.error]
224
+ };
225
+ } else if (formik.isSubmitting && fieldMeta.touched) {
226
+ return {
227
+ status: "validated"
228
+ };
229
+ } else {
230
+ return {
231
+ status: "default"
232
+ };
233
+ }
234
+ };
235
+ var isFieldDirty = function isFieldDirty(fieldName) {
236
+ var fieldMeta = formik.getFieldMeta(fieldName);
237
+ return fieldMeta.value !== fieldMeta.initialValue;
238
+ };
239
+ var dirtyFieldsNb = Object.keys(formik.values).reduce(function (acc, fieldName) {
240
+ if (isFieldDirty(fieldName)) {
241
+ acc++;
242
+ }
243
+ return acc;
244
+ }, 0);
245
+ useFormikAutoFocusOnError(formik);
246
+ return /*#__PURE__*/_jsxs("div", {
247
+ className: stl(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["flex flex-col gap-8 w-3/5"]))),
248
+ children: [/*#__PURE__*/_jsxs(ExperimentalForm, {
249
+ onSubmit: function onSubmit(e) {
250
+ setRevalidationEnabled(true);
251
+ formik.handleSubmit(e);
252
+ },
253
+ onReset: function onReset(e) {
254
+ setRevalidationEnabled(false);
255
+ formik.handleReset(e);
256
+ },
257
+ className: stl(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["flex flex-col items-start gap-4 min-w-72"]))),
258
+ children: [/*#__PURE__*/_jsx(ExperimentalFormErrorMessage, {}), /*#__PURE__*/_jsx(Field, {
259
+ label: "Name",
260
+ labelFor: "name",
261
+ description: "Please enter your name",
262
+ state: getFieldState("name"),
263
+ className: cx(stl(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("name") && stl(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["text-xenon-500"])))),
264
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
265
+ id: "name",
266
+ placeholder: "Name",
267
+ required: true
268
+ }, formik.getFieldProps("name")))
269
+ }), /*#__PURE__*/_jsx(Field, {
270
+ label: "Email",
271
+ labelFor: "email",
272
+ description: "Please enter your email",
273
+ state: getFieldState("email"),
274
+ className: cx(stl(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("email") && stl(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["text-xenon-500"])))),
275
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
276
+ id: "email",
277
+ placeholder: "Email",
278
+ required: true
279
+ }, formik.getFieldProps("email")))
280
+ }), /*#__PURE__*/_jsx(Field, {
281
+ label: "Company",
282
+ labelFor: "company",
283
+ description: "Please enter your company",
284
+ state: getFieldState("company"),
285
+ className: cx(stl(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("company") && stl(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["text-xenon-500"])))),
286
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
287
+ id: "company",
288
+ placeholder: "Company",
289
+ required: true
290
+ }, formik.getFieldProps("company")))
291
+ }), /*#__PURE__*/_jsx(Field, {
292
+ label: "Phone Number",
293
+ labelFor: "phoneNumber",
294
+ description: "Please enter your phone number",
295
+ state: getFieldState("phoneNumber"),
296
+ className: cx(stl(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("phoneNumber") && stl(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["text-xenon-500"])))),
297
+ children: /*#__PURE__*/_jsx(Input, _objectSpread({
298
+ id: "phoneNumber",
299
+ placeholder: "Phone number",
300
+ required: true
301
+ }, formik.getFieldProps("phoneNumber")))
302
+ }), /*#__PURE__*/_jsxs("div", {
303
+ className: stl(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["flex gap-2"]))),
304
+ children: [/*#__PURE__*/_jsx(ExperimentalFormSubmit, {
305
+ variant: "primary",
306
+ "aria-label": "Save updated changes",
307
+ disabled: !formik.dirty,
308
+ children: "Save changes"
309
+ }), /*#__PURE__*/_jsx(ExperimentalFormReset, {
310
+ "aria-label": "Reset the form",
311
+ disabled: !formik.dirty,
312
+ onClick: function onClick() {
313
+ return formik.resetForm();
314
+ },
315
+ children: "Reset"
316
+ })]
317
+ }), dirtyFieldsNb > 0 && /*#__PURE__*/_jsxs(Alert, {
318
+ variant: "accent",
319
+ icon: InfoIcon,
320
+ className: stl(_templateObject26 || (_templateObject26 = _taggedTemplateLiteral(["w-full"]))),
321
+ children: [dirtyFieldsNb, " updated fields"]
322
+ })]
323
+ }), /*#__PURE__*/_jsx("hr", {
324
+ className: stl(_templateObject27 || (_templateObject27 = _taggedTemplateLiteral(["text-grey-500"])))
325
+ }), /*#__PURE__*/_jsx("code", {
326
+ className: stl(_templateObject28 || (_templateObject28 = _taggedTemplateLiteral(["whitespace-pre"]))),
327
+ children: JSON.stringify(formData, null, 2)
328
+ })]
329
+ });
330
+ };