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