@arquimedes.co/eureka-forms 3.0.29-test → 3.0.31-test

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 (41) hide show
  1. package/dist/App/AppHooks.js +21 -6
  2. package/dist/Form/Form.js +2 -6
  3. package/dist/Form/FormHooks.js +0 -1
  4. package/dist/Form/FormTypes/ColumnForm/ColumnForm.js +0 -2
  5. package/dist/Form/FormTypes/StepperForm/StepperForm.js +0 -2
  6. package/dist/FormSteps/@Construction/CBRIncidentsStep/MaterialCBRIncidentsStep/MaterialCBRIncidentsStep.js +0 -1
  7. package/dist/FormSteps/ClassifierSelectorStep/MaterialClassifierSelectorStep/MaterialClassifierSelectorStep.js +1 -5
  8. package/dist/FormSteps/CollapsibleStep/MaterialTitleStep/MaterialCollapsibleStep.js +1 -3
  9. package/dist/FormSteps/EntityValueStep/MaterialEntityValuePickerStep/MaterialEntityValuePickerStep.js +0 -1
  10. package/dist/FormSteps/FileUploadStep/MaterialFileUploadStep/MaterialFileUploadStep.js +0 -1
  11. package/dist/FormSteps/MapperStep/MaterialMapperStep/Element/MapperElementComponent.js +0 -1
  12. package/dist/FormSteps/MapperStep/MaterialMapperStep/Element/PagedMapperElement/PagedMapperElement.js +1 -5
  13. package/dist/FormSteps/MapperStep/MaterialMapperStep/MaterialMapperStep.js +3 -12
  14. package/dist/FormSteps/SelectorStep/MaterialSelectorStep/MaterialSelectorStep.js +1 -5
  15. package/dist/FormSteps/SmartSelectStep/MaterialSmartSelectStep/MaterialSmartSelectStep.js +2 -9
  16. package/dist/FormSteps/StepHooks.js +3 -11
  17. package/dist/FormSteps/TextAreaStep/MaterialTextAreaStep/DraftEditor.css +2 -2
  18. package/dist/FormSteps/TextAreaStep/MaterialTextAreaStep/MaterialTextAreaEditorStep.js +1 -3
  19. package/dist/FormSteps/Utils/@StepFiller/StepFiller.js +0 -1
  20. package/dist/Shared/CustomBtn/CustomBtn.js +0 -1
  21. package/dist/Shared/ErkButton/ErkButton.stories.d.ts +2 -1
  22. package/dist/Shared/ErkButton/ErkButton.stories.js +2 -0
  23. package/dist/Shared/ErkCheckbox/ErkCheckBox.stories.d.ts +1 -1
  24. package/dist/Shared/ErkDatePicker/ErkDatePicker.stories.d.ts +1 -1
  25. package/dist/Shared/ErkDatePicker/ErkDatePicker.stories.js +6 -11
  26. package/dist/Shared/ErkSelect/ErkSelect.stories.d.ts +5 -2
  27. package/dist/Shared/ErkSelect/ErkSelect.stories.js +28 -5
  28. package/dist/Shared/ErkSmartSelect/ErkSmartSelect.stories.d.ts +1 -1
  29. package/dist/Shared/ErkSmartSelect/ErkSmartSelect.stories.js +10 -18
  30. package/dist/Shared/ErkTextField/ErkTextField.stories.d.ts +1 -1
  31. package/dist/Shared/ErkTextField/ErkTextField.stories.js +5 -11
  32. package/dist/Shared/Navbar/Navbar.stories.d.ts +1 -1
  33. package/dist/Shared/Rating/Rating.stories.d.ts +1 -1
  34. package/dist/Shared/Toggle/Toggle.js +1 -1
  35. package/dist/Utils/AxiosAPI.js +1 -1
  36. package/dist/Utils/LocaleUtils.js +1 -1
  37. package/dist/Utils/MaterialProviders.js +2 -2
  38. package/dist/Utils/store.d.ts +1 -10
  39. package/dist/index.css +1 -0
  40. package/dist/main.js +7 -5
  41. package/package.json +45 -57
@@ -1,4 +1,4 @@
1
- import { useCallback, useEffect, useState } from 'react';
1
+ import { useCallback, useEffect, useMemo, useState } from 'react';
2
2
  import { reset } from '../States/GlobalSlice';
3
3
  import { fetchOrganization } from '../Services/OrganizationService';
4
4
  import { fetchForm } from '../Services/FormService';
@@ -15,6 +15,9 @@ export const useSetupApp = (isEmbedded, props) => {
15
15
  const [form, setForm] = useState(undefined);
16
16
  const [organization, setOrganization] = useState(undefined);
17
17
  const dispatch = useAppDispatch();
18
+ // Create stable stringified versions that only change when content changes
19
+ const valuesDataKey = useMemo(() => JSON.stringify(valuesData), [valuesData]);
20
+ const formDataKey = useMemo(() => JSON.stringify(formData), [formData]);
18
21
  const loadOrg = async (idOrganization) => {
19
22
  const organization = await fetchOrganization(idOrganization);
20
23
  if (organization) {
@@ -115,12 +118,26 @@ export const useSetupApp = (isEmbedded, props) => {
115
118
  useEffect(() => {
116
119
  void loadData();
117
120
  // eslint-disable-next-line no-console
118
- console.log('Changed!');
121
+ console.log('Form props Changed!');
119
122
  return () => {
120
123
  dispatch({ type: 'CLEAR' });
121
124
  };
122
- // eslint-disable-next-line react-hooks/exhaustive-deps
123
- }, [props.formData, props.valuesData]);
125
+ // Use stringified keys for stable comparison - only changes when content changes
126
+ // Other object/function props (classifiers) are still
127
+ // intentionally excluded to prevent re-renders when parent re-creates these objects
128
+ }, [
129
+ apiKey,
130
+ partial,
131
+ preview,
132
+ internal,
133
+ postview,
134
+ editable,
135
+ customSteps,
136
+ formDataKey,
137
+ valuesDataKey,
138
+ idCurrentAgent,
139
+ handleConfirmed,
140
+ ]);
124
141
  const reload = useCallback(() => {
125
142
  if (!form)
126
143
  return;
@@ -132,7 +149,6 @@ export const useSetupApp = (isEmbedded, props) => {
132
149
  if (handleConfirmed) {
133
150
  handleConfirmed();
134
151
  }
135
- // eslint-disable-next-line react-hooks/exhaustive-deps
136
152
  }, [form]);
137
153
  return {
138
154
  form,
@@ -158,6 +174,5 @@ export const useLogRocket = (organization, form, { apiKey, internal, postview, p
158
174
  };
159
175
  useEffect(() => {
160
176
  void loadLogRocket();
161
- // eslint-disable-next-line react-hooks/exhaustive-deps
162
177
  }, [organization, form]);
163
178
  };
package/dist/Form/Form.js CHANGED
@@ -34,14 +34,12 @@ function FormComponent({ form, apiKey, reload, isWidget, branding, setSubmit, sc
34
34
  formMethods.setFocus(idFocusStep);
35
35
  dispatch(focusStep(undefined));
36
36
  }
37
- // eslint-disable-next-line react-hooks/exhaustive-deps
38
37
  }, [idFocusStep]);
39
38
  const onSubmit = useCallback(async (values) => {
40
39
  let token = null;
41
40
  if (form.hasCaptcha && !internal && !customSubmit) {
42
41
  token = recaptchaRef.current?.getValue();
43
- if (!token)
44
- token = await recaptchaRef?.current.executeAsync();
42
+ token ?? (token = await recaptchaRef?.current.executeAsync());
45
43
  }
46
44
  const ApiKey = internal ? form.apiKey : apiKey;
47
45
  if (!ApiKey && !customSubmit && !customSubmitBtns)
@@ -78,9 +76,7 @@ function FormComponent({ form, apiKey, reload, isWidget, branding, setSubmit, sc
78
76
  catch (error) {
79
77
  console.error(error);
80
78
  }
81
- },
82
- // eslint-disable-next-line react-hooks/exhaustive-deps
83
- [customSteps, internal, customSubmit, idOrganization, idForm]);
79
+ }, [customSteps, internal, customSubmit, idOrganization, idForm]);
84
80
  useWidthStats(containerRef, form, postview, internal);
85
81
  const isResponsive = useAppSelector((state) => state.widthStats.isResponsive);
86
82
  const renderForm = () => {
@@ -30,6 +30,5 @@ export function useWidthStats(containerRef, form, postview, internal) {
30
30
  return () => {
31
31
  window.removeEventListener('resize', handleResize);
32
32
  };
33
- // eslint-disable-next-line react-hooks/exhaustive-deps
34
33
  }, []);
35
34
  }
@@ -25,7 +25,6 @@ function ColumnForm({ onSubmit, customSubmitBtns, ...props }) {
25
25
  useEffect(() => {
26
26
  if (props.setSubmit)
27
27
  props.setSubmit(submit);
28
- // eslint-disable-next-line react-hooks/exhaustive-deps
29
28
  }, [props.setSubmit]);
30
29
  /** Esto se usa para no tener que escuchar todo el tiempo los errores del formulario */
31
30
  const handleErrors = handleSubmit(() => { }, (errors) => {
@@ -47,7 +46,6 @@ function ColumnForm({ onSubmit, customSubmitBtns, ...props }) {
47
46
  values = await onSubmit(values);
48
47
  setLoading(false);
49
48
  return values;
50
- // eslint-disable-next-line react-hooks/exhaustive-deps
51
49
  }, [form]);
52
50
  return (_jsxs("div", { className: styles.container, style: { color: formStyle.textColor }, children: [loading && _jsx("div", { className: styles.curtain }), previous.map((idSection) => (_jsx(Section, { idSection: idSection }, idSection))), next.map((idSection) => (_jsx(Section, { idSection: idSection }, idSection))), _jsx(Terms, {}), !postview && editable && (_jsxs(React.Fragment, { children: [customSubmitBtns === undefined && (_jsx("div", { className: styles.submitBtnContainer, children: _jsx(CustomBtn, { onClick: () => void submit(), width: "calc(100% - 70px)", label: sendLabel ?? 'Enviar', backgroundColor: formStyle.primaryColor, color: formStyle.primaryContrastColor, loading: loading, "data-testid": "form__submit" }) })), customSubmitBtns?.(submit, loading)] }))] }));
53
51
  }
@@ -29,7 +29,6 @@ function StepperForm({ onSubmit, scrollToTop }) {
29
29
  const handlePrevious = useCallback(() => {
30
30
  dispatch(SiteReducer.handlePrevious({ values: getValues(), form }));
31
31
  scrollToTop?.();
32
- // eslint-disable-next-line react-hooks/exhaustive-deps
33
32
  }, []);
34
33
  const handleNext = useCallback(async () => {
35
34
  setLoading('NEXT');
@@ -58,7 +57,6 @@ function StepperForm({ onSubmit, scrollToTop }) {
58
57
  const response = await onSubmit(values);
59
58
  setLoading(undefined);
60
59
  return response;
61
- // eslint-disable-next-line react-hooks/exhaustive-deps
62
60
  }, [next]);
63
61
  if (!idCurrent)
64
62
  return _jsx(_Fragment, {});
@@ -34,7 +34,6 @@ function CBRIncidentsStep({ step, editable, ...others }) {
34
34
  if (firstRender && value.length === 0 && !postview && editable) {
35
35
  handleAddIncident();
36
36
  }
37
- // eslint-disable-next-line react-hooks/exhaustive-deps
38
37
  }, [firstRender]);
39
38
  const handleAddIncident = () => {
40
39
  const current = value.filter((incident) => !incident.deleted);
@@ -25,7 +25,6 @@ function ClassifierSelectorStep({ step, editable }) {
25
25
  }
26
26
  }
27
27
  return dependencies;
28
- // eslint-disable-next-line react-hooks/exhaustive-deps
29
28
  }, []);
30
29
  const dependencies = useAppSelector((state) => selectDependencies(state, idDependencies));
31
30
  const { postview, preview } = useAppSelector((state) => state.global);
@@ -47,14 +46,11 @@ function ClassifierSelectorStep({ step, editable }) {
47
46
  label: classifier?.clientName?.trim?.() && preview ? classifier?.clientName : classifier?.name,
48
47
  };
49
48
  });
50
- },
51
- // eslint-disable-next-line react-hooks/exhaustive-deps
52
- idDependencies.map((id) => dependencies[id].value));
49
+ }, idDependencies.map((id) => dependencies[id].value));
53
50
  useEffect(() => {
54
51
  if (value && !options?.find((option) => option.value === value?.value)) {
55
52
  onChange('');
56
53
  }
57
- // eslint-disable-next-line react-hooks/exhaustive-deps
58
54
  }, [options]);
59
55
  if (!step.idClassifier || !classifier)
60
56
  return _jsx(_Fragment, {});
@@ -18,9 +18,7 @@ function Collapsible({ step, open, setOpen, ...others }) {
18
18
  if (!open && step.dependencies?.find((dep) => !!errors[dep])) {
19
19
  setOpen(true);
20
20
  }
21
- },
22
- // eslint-disable-next-line react-hooks/exhaustive-deps
23
- step.dependencies?.map((dep) => errors[dep]) ?? []);
21
+ }, step.dependencies?.map((dep) => errors[dep]) ?? []);
24
22
  return (_jsxs("div", { style: { maxWidth: '100%' }, children: [_jsxs("div", { className: styles.container, style: {
25
23
  color: formStyle.textColor,
26
24
  borderColor: formStyle.primaryColor,
@@ -22,7 +22,6 @@ function EntityValuePickerStep({ step, editable }) {
22
22
  ids.push(...recursivelyCalcConditionSteps(dialog.condition));
23
23
  }
24
24
  return ids;
25
- // eslint-disable-next-line react-hooks/exhaustive-deps
26
25
  }, []);
27
26
  const dialogDeps = useAppSelector((state) => selectDependencies(state, dialogsIdStepDeps));
28
27
  const handleCloseDialog = useCallback(() => {
@@ -64,7 +64,6 @@ function FileUploadStep({ step, editable }) {
64
64
  void getLinks(filesToFetchLink);
65
65
  onChange([...value, ...filesToFetchLink]);
66
66
  }
67
- // eslint-disable-next-line react-hooks/exhaustive-deps
68
67
  }, [fileChange]);
69
68
  async function getLinks(pFiles) {
70
69
  try {
@@ -19,7 +19,6 @@ function MapperElementComponent(props) {
19
19
  ...customContext,
20
20
  customStepProps: props.calcCustomStepProps(element, customContext.customStepProps),
21
21
  };
22
- // eslint-disable-next-line react-hooks/exhaustive-deps
23
22
  }, [element, customContext]);
24
23
  if (element.deleted)
25
24
  return _jsx(_Fragment, {});
@@ -29,7 +29,6 @@ function PagedMapperElement({ step, num, loading, element, children, editable, o
29
29
  }
30
30
  }
31
31
  return null;
32
- // eslint-disable-next-line react-hooks/exhaustive-deps
33
32
  }, [value]);
34
33
  const prevIndex = useMemo(() => {
35
34
  for (let i = page - 1; i >= 0; i--) {
@@ -39,7 +38,6 @@ function PagedMapperElement({ step, num, loading, element, children, editable, o
39
38
  }
40
39
  }
41
40
  return null;
42
- // eslint-disable-next-line react-hooks/exhaustive-deps
43
41
  }, [value]);
44
42
  /** Esto se usa para no tener que escuchar todo el tiempo los errores del formulario */
45
43
  const handleErrors = handleSubmit(() => { }, (errors) => {
@@ -70,9 +68,7 @@ function PagedMapperElement({ step, num, loading, element, children, editable, o
70
68
  page: index,
71
69
  });
72
70
  return;
73
- },
74
- // eslint-disable-next-line react-hooks/exhaustive-deps
75
- [elements]);
71
+ }, [elements]);
76
72
  const widthStats = useAppSelector((state) => state.widthStats);
77
73
  const { calcName } = customElementModifiers ?? {};
78
74
  const name = calcName ? calcName(element) : step.unitLabel ? step.unitLabel + ' ' + (num + 1) : '';
@@ -33,9 +33,7 @@ function MapperComponent({ form, step, error, value, loading, inputRef, editable
33
33
  elements: tempElements,
34
34
  page: page === index ? newPage : page,
35
35
  });
36
- },
37
- // eslint-disable-next-line react-hooks/exhaustive-deps
38
- [elements, onChange]);
36
+ }, [elements, onChange]);
39
37
  const inputValue = useMemo(() => JSON.stringify(elements), [elements]);
40
38
  const { formStyle, postview } = useAppSelector((state) => state.global);
41
39
  const { container } = useMemo(() => {
@@ -89,7 +87,6 @@ function MapperStep(props) {
89
87
  if (!customAdd)
90
88
  handleAddElement();
91
89
  }
92
- // eslint-disable-next-line react-hooks/exhaustive-deps
93
90
  }, []);
94
91
  const handleAddElement = useCallback((elementValue) => {
95
92
  const { element, steps, mappers } = addMapperStep(step, customSteps);
@@ -109,10 +106,7 @@ function MapperStep(props) {
109
106
  customSteps,
110
107
  allSteps: { ...form.steps, ...steps },
111
108
  }));
112
- },
113
- // eslint-disable-next-line react-hooks/exhaustive-deps
114
- [step, form, customSteps, value, onChange]);
115
- // eslint-disable-next-line react-hooks/exhaustive-deps
109
+ }, [step, form, customSteps, value, onChange]);
116
110
  const subForm = useMemo(() => ({ ...form, steps: { ...form.steps, ...localSteps } }), [localSteps]);
117
111
  return (_jsx(MapperComponent, { ...props, error: error, inputRef: ref, onChange: onChange, value: value, handleAddElement: handleAddElement, form: subForm }));
118
112
  }
@@ -142,10 +136,7 @@ export function CustomMapperStep(props) {
142
136
  customSteps,
143
137
  allSteps: { ...form.steps, ...steps },
144
138
  }));
145
- },
146
- // eslint-disable-next-line react-hooks/exhaustive-deps
147
- [step, form, customSteps, elements, onChange]);
148
- // eslint-disable-next-line react-hooks/exhaustive-deps
139
+ }, [step, form, customSteps, elements, onChange]);
149
140
  const subForm = useMemo(() => ({ ...form, steps: { ...form.steps, ...localSteps } }), [localSteps]);
150
141
  return _jsx(MapperComponent, { ...props, form: subForm, onChange: onChange, handleAddElement: handleAddElement });
151
142
  }
@@ -27,7 +27,6 @@ function SelectorStep({ step, editable }) {
27
27
  }
28
28
  }
29
29
  return dependencies;
30
- // eslint-disable-next-line react-hooks/exhaustive-deps
31
30
  }, []);
32
31
  const dependencies = useAppSelector((state) => selectDependencies(state, idDependencies));
33
32
  const mapNestedOption = () => {
@@ -54,14 +53,11 @@ function SelectorStep({ step, editable }) {
54
53
  return true;
55
54
  return false;
56
55
  });
57
- },
58
- // eslint-disable-next-line react-hooks/exhaustive-deps
59
- idDependencies.map((id) => dependencies[id].value));
56
+ }, idDependencies.map((id) => dependencies[id].value));
60
57
  useEffect(() => {
61
58
  if (value && !filteredOptions.find((option) => option.value === value?.value)) {
62
59
  onChange('');
63
60
  }
64
- // eslint-disable-next-line react-hooks/exhaustive-deps
65
61
  }, [filteredOptions]);
66
62
  return (_jsxs(React.Fragment, { children: [_jsx(MaterialInputContainer, { step: step, editable: editable, children: _jsx(ErkSmartSelect, { ...field, value: value, inputRef: ref, error: !!error, label: step.label, onChange: onChange, required: step.required, options: filteredOptions, searchable: step.searchable, readOnly: !editable || postview, helperText: error?.message?.toString() ?? step.description, getOptionSelected: (option, value) => option?.value === value?.value }) }), value && mapNestedOption()] }));
67
63
  }
@@ -32,9 +32,7 @@ function SmartSelectStep({ step, editable, getOptions, calcDepError, defaultValu
32
32
  const idDependencies = useMemo(() => getOptionsConditionsIdSteps(step), [getOptionsConditionsIdSteps, step]);
33
33
  const dependencies = useAppSelector((state) => selectDependencies(state, allDeps));
34
34
  const deps = useAppSelector((state) => selectDependencies(state, idDependencies));
35
- const conditionDependencies = useMemo(() => deps,
36
- // eslint-disable-next-line react-hooks/exhaustive-deps
37
- idDependencies.map((id) => deps[id]));
35
+ const conditionDependencies = useMemo(() => deps, idDependencies.map((id) => deps[id]));
38
36
  const { emptyDep, invalids } = useAppSelector((state) => selectStepDependencies(state, step, form));
39
37
  const { getValues, setFocus } = useFormContext();
40
38
  const isEmpty = useAppSelector((state) => state.site.dependencies[step.id]?.empty);
@@ -47,9 +45,7 @@ function SmartSelectStep({ step, editable, getOptions, calcDepError, defaultValu
47
45
  else if (value && !step.searchable) {
48
46
  setOptions([value]);
49
47
  }
50
- },
51
- // eslint-disable-next-line react-hooks/exhaustive-deps
52
- allDeps.map((dep) => dependencies[dep]?.value) ?? []);
48
+ }, allDeps.map((dep) => dependencies[dep]?.value) ?? []);
53
49
  const calcOptions = async (firstTime) => {
54
50
  if (!firstTime)
55
51
  setOptions(undefined);
@@ -114,13 +110,11 @@ function SmartSelectStep({ step, editable, getOptions, calcDepError, defaultValu
114
110
  }
115
111
  if (!touched)
116
112
  setTouched(true);
117
- // eslint-disable-next-line react-hooks/exhaustive-deps
118
113
  }, [options, emptyDep, postview, editable, invalids, touched]);
119
114
  const filteredOptions = useMemo(() => {
120
115
  if (!options || !filterOptions)
121
116
  return options;
122
117
  return filterOptions(options, conditionDependencies);
123
- // eslint-disable-next-line react-hooks/exhaustive-deps
124
118
  }, [options, conditionDependencies]);
125
119
  const errorMsg = useMemo(() => {
126
120
  if (postview || loading)
@@ -138,7 +132,6 @@ function SmartSelectStep({ step, editable, getOptions, calcDepError, defaultValu
138
132
  return 'Error al cargar las opciones';
139
133
  }
140
134
  return undefined;
141
- // eslint-disable-next-line react-hooks/exhaustive-deps
142
135
  }, [invalids, touched, value, filteredOptions]);
143
136
  return (_jsxs(React.Fragment, { children: [_jsx(MaterialInputContainer, { step: step, onClick: onFocus, editable: editable, children: _jsx(ErkSmartSelect, { ...field, value: value, inputRef: ref, onFocus: onFocus, loading: loading, label: step.label, onChange: onChange, required: step.required, searchable: step.searchable, getValueString: getValueString, disabled: emptyDep, getOptionSelected: getOptionSelected, options: filteredOptions ?? undefined, IconComponent: step.showIcon ? IconComponent : undefined, error: !!errorMsg || !!warning || !!error, readOnly: !editable || postview || emptyDep || filteredOptions === null, helperText: errorMsg ?? warning ?? error?.message?.toString() ?? step.description ?? undefined }) }), renderNestedSteps?.(value)] }));
144
137
  }
@@ -28,7 +28,6 @@ export const useStepDependency = (step, defaultValue) => {
28
28
  return () => {
29
29
  dispatch(clearDependency(step));
30
30
  };
31
- // eslint-disable-next-line react-hooks/exhaustive-deps
32
31
  }, [isDependency]);
33
32
  const handleStepDep = useCallback((value) => {
34
33
  if (!isDependency)
@@ -37,9 +36,7 @@ export const useStepDependency = (step, defaultValue) => {
37
36
  step,
38
37
  value: value ?? null,
39
38
  }));
40
- },
41
- // eslint-disable-next-line react-hooks/exhaustive-deps
42
- [step.id, step.type, isDependency]);
39
+ }, [step.id, step.type, isDependency]);
43
40
  return {
44
41
  handleStepDep,
45
42
  isDependency,
@@ -105,9 +102,7 @@ export const useFormStep = (step, { rules, debounce, sizeChange, defaultValue })
105
102
  fieldOnChange(value);
106
103
  if (sizeChange)
107
104
  handleSizeChange?.();
108
- },
109
- // eslint-disable-next-line react-hooks/exhaustive-deps
110
- [handleStepDep, isDependency, fieldOnChange]);
105
+ }, [handleStepDep, isDependency, fieldOnChange]);
111
106
  return {
112
107
  ref,
113
108
  value,
@@ -125,14 +120,11 @@ export const selectDependencies = createSelector([
125
120
  [idDep]: dependencies[idDep],
126
121
  }), {}));
127
122
  export const useCondition = (condition) => {
128
- // eslint-disable-next-line react-hooks/exhaustive-deps
129
123
  const ids = useMemo(() => recursivelyCalcConditionSteps(condition), []);
130
124
  const dependencies = useAppSelector((state) => selectDependencies(state, ids));
131
125
  return useMemo(() => {
132
126
  return !condition || evaluateCondition(condition, dependencies);
133
- },
134
- // eslint-disable-next-line react-hooks/exhaustive-deps
135
- ids.map((id) => dependencies[id].value));
127
+ }, ids.map((id) => dependencies[id].value));
136
128
  };
137
129
  export const calcStepDeps = (step) => {
138
130
  const dependencies = [...(step.dependencies ?? [])];
@@ -63,7 +63,7 @@
63
63
  margin-left: -5px;
64
64
  }
65
65
  .Erk-DraftContainer .rdw-editing-image {
66
- border: 1px solid var(--secondary);
66
+ border: 1px solid var(--eureka-primary);
67
67
  }
68
68
 
69
69
  .Erk-DraftContainer .DraftEditor-root figure {
@@ -80,7 +80,7 @@
80
80
  display: flex;
81
81
  align-items: center;
82
82
  justify-content: center;
83
- border: 1px solid var(--light-grey);
83
+ border: 1px solid var(--eureka-outline);
84
84
  }
85
85
 
86
86
  .Erk-DraftContainer .rdw-image-alignment-options-popup {
@@ -35,9 +35,7 @@ function TextAreaStep({ step, editable }) {
35
35
  }, 1000));
36
36
  }
37
37
  onChange(value);
38
- },
39
- // eslint-disable-next-line react-hooks/exhaustive-deps
40
- [handleStepDep, isDependency, onChange]);
38
+ }, [handleStepDep, isDependency, onChange]);
41
39
  const calcStyle = () => {
42
40
  const backgroundColor = formStyle.stepBackgroundColor;
43
41
  if (focus) {
@@ -13,7 +13,6 @@ function StepFiller({ step, children }) {
13
13
  const currentBreakPoint = useAppSelector(selectBreakPoint);
14
14
  const handleSizeChange = useCallback(() => {
15
15
  setFillerSize(calcFillerSize(step, form.steps, getValues(), form.size));
16
- // eslint-disable-next-line react-hooks/exhaustive-deps
17
16
  }, []);
18
17
  if (step.maxSize && step.maxSize < form.size.blockNum) {
19
18
  return (_jsxs("div", { className: styles.firstLvlContainer, style: {
@@ -9,7 +9,6 @@ function CustomBtn({ label, onClick, backgroundColor, color, loading = false, di
9
9
  if (coords)
10
10
  setCoords(undefined);
11
11
  return () => setMounted(false);
12
- // eslint-disable-next-line react-hooks/exhaustive-deps
13
12
  }, [label]);
14
13
  return (_jsxs("button", { className: styles.customBtn, style: {
15
14
  width,
@@ -1,4 +1,4 @@
1
- import type { StoryObj } from '@storybook/react';
1
+ import type { StoryObj } from '@storybook/react-vite';
2
2
  import ErkButton from './ErkButton';
3
3
  declare const meta: {
4
4
  component: typeof ErkButton;
@@ -6,6 +6,7 @@ declare const meta: {
6
6
  args: {
7
7
  text: string;
8
8
  disabled: false;
9
+ onClick: import("vitest").Mock<(...args: any[]) => any>;
9
10
  };
10
11
  };
11
12
  export default meta;
@@ -1,3 +1,4 @@
1
+ import { fn } from 'storybook/test';
1
2
  import ErkButton from './ErkButton';
2
3
  const meta = {
3
4
  component: ErkButton,
@@ -5,6 +6,7 @@ const meta = {
5
6
  args: {
6
7
  text: 'Label',
7
8
  disabled: false,
9
+ onClick: fn(),
8
10
  },
9
11
  };
10
12
  export default meta;
@@ -1,4 +1,4 @@
1
- import type { StoryObj } from '@storybook/react';
1
+ import type { StoryObj } from '@storybook/react-vite';
2
2
  import ErkCheckBox from './ErkCheckBox';
3
3
  declare const meta: {
4
4
  component: typeof ErkCheckBox;
@@ -1,4 +1,4 @@
1
- import type { StoryObj } from '@storybook/react';
1
+ import type { StoryObj } from '@storybook/react-vite';
2
2
  import ErkDatePicker from './ErkDatePicker';
3
3
  declare const meta: {
4
4
  component: typeof ErkDatePicker;
@@ -1,8 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useArgs } from '@storybook/preview-api';
3
2
  import ErkDatePicker from './ErkDatePicker';
4
- import { within, screen } from '@storybook/testing-library';
5
- import { userEvent } from '@storybook/testing-library';
3
+ import { useArgs } from 'storybook/internal/preview-api';
6
4
  const meta = {
7
5
  component: ErkDatePicker,
8
6
  tags: ['autodocs'],
@@ -36,7 +34,7 @@ export const ValueAndLabel = {
36
34
  args.onChange?.(value);
37
35
  setArgs({ value });
38
36
  };
39
- return _jsx(ErkDatePicker, { ...args, ref: args, onChange: onValueChange });
37
+ return _jsx(ErkDatePicker, { ...args, onChange: onValueChange });
40
38
  },
41
39
  };
42
40
  export const Full = {
@@ -67,8 +65,7 @@ export const Menu = {
67
65
  label: 'Label',
68
66
  value: null,
69
67
  },
70
- play: async ({ canvasElement }) => {
71
- const canvas = within(canvasElement);
68
+ play: async ({ canvas, userEvent }) => {
72
69
  const selector = canvas.getByTestId('date-picker');
73
70
  await userEvent.click(selector);
74
71
  },
@@ -79,8 +76,7 @@ export const DateTimeDateMenu = {
79
76
  value: null,
80
77
  pickTime: true,
81
78
  },
82
- play: async ({ canvasElement }) => {
83
- const canvas = within(canvasElement);
79
+ play: async ({ canvas, userEvent }) => {
84
80
  const selector = canvas.getByTestId('date-picker');
85
81
  await userEvent.click(selector);
86
82
  },
@@ -91,11 +87,10 @@ export const DateTimeTimeMenu = {
91
87
  value: null,
92
88
  pickTime: true,
93
89
  },
94
- play: async ({ canvasElement }) => {
95
- const canvas = within(canvasElement);
90
+ play: async ({ canvas, userEvent }) => {
96
91
  const selector = canvas.getByTestId('date-picker');
97
92
  await userEvent.click(selector);
98
- const time = screen.getByText('12', {
93
+ const time = canvas.getByText('12', {
99
94
  selector: 'h3',
100
95
  });
101
96
  await userEvent.click(time);
@@ -1,16 +1,19 @@
1
- import type { StoryObj } from '@storybook/react';
1
+ import type { StoryObj } from '@storybook/react-vite';
2
2
  import ErkSelect from './ErkSelect';
3
3
  declare const meta: {
4
4
  component: typeof ErkSelect;
5
5
  tags: string[];
6
6
  args: {
7
7
  readOnly: false;
8
+ MenuProps: {
9
+ disablePortal: false;
10
+ };
8
11
  };
9
12
  };
10
13
  export default meta;
11
14
  type Story = StoryObj<typeof meta>;
12
- export declare const Empty: Story;
13
15
  export declare const Default: Story;
16
+ export declare const Empty: Story;
14
17
  export declare const ValueAndLabel: Story;
15
18
  export declare const Full: Story;
16
19
  export declare const Error: Story;
@@ -1,22 +1,36 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useArgs } from '@storybook/preview-api';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
2
  import ErkSelect from './ErkSelect';
4
3
  import { MenuItem } from '@mui/material';
4
+ import { useArgs } from 'storybook/internal/preview-api';
5
5
  const meta = {
6
6
  component: ErkSelect,
7
7
  tags: ['autodocs'],
8
8
  args: {
9
9
  readOnly: false,
10
+ MenuProps: {
11
+ disablePortal: false,
12
+ },
10
13
  },
11
14
  };
12
15
  export default meta;
13
- export const Empty = {
14
- args: {},
15
- };
16
16
  export const Default = {
17
17
  args: {
18
18
  label: 'Label',
19
19
  },
20
+ render: function Component(args) {
21
+ const [, setArgs] = useArgs();
22
+ const onValueChange = (value) => {
23
+ args.onChange?.(value);
24
+ setArgs({ value });
25
+ };
26
+ return (_jsxs(ErkSelect, { ...args, onChange: onValueChange, children: [_jsx(MenuItem, { value: 'option1', children: "Option 1" }), _jsx(MenuItem, { value: 'option2', children: "Option 2" }), _jsx(MenuItem, { value: 'option3', children: "Option 3" })] }));
27
+ },
28
+ };
29
+ export const Empty = {
30
+ args: {},
31
+ render: function Component(args) {
32
+ return _jsx(ErkSelect, { ...args });
33
+ },
20
34
  };
21
35
  export const ValueAndLabel = {
22
36
  args: {
@@ -37,6 +51,9 @@ export const Full = {
37
51
  label: 'Label',
38
52
  helperText: 'Helper text',
39
53
  },
54
+ render: function Component(args) {
55
+ return (_jsxs(ErkSelect, { ...args, children: [_jsx(MenuItem, { value: 'option1', children: "Option 1" }), _jsx(MenuItem, { value: 'option2', children: "Option 2" }), _jsx(MenuItem, { value: 'option3', children: "Option 3" })] }));
56
+ },
40
57
  };
41
58
  export const Error = {
42
59
  args: {
@@ -44,6 +61,9 @@ export const Error = {
44
61
  helperText: 'Helper text',
45
62
  error: true,
46
63
  },
64
+ render: function Component(args) {
65
+ return (_jsxs(ErkSelect, { ...args, children: [_jsx(MenuItem, { value: 'option1', children: "Option 1" }), _jsx(MenuItem, { value: 'option2', children: "Option 2" }), _jsx(MenuItem, { value: 'option3', children: "Option 3" })] }));
66
+ },
47
67
  };
48
68
  export const ErrorColor = {
49
69
  args: {
@@ -51,6 +71,9 @@ export const ErrorColor = {
51
71
  helperText: 'Helper text',
52
72
  error: true,
53
73
  },
74
+ render: function Component(args) {
75
+ return (_jsxs(ErkSelect, { ...args, children: [_jsx(MenuItem, { value: 'option1', children: "Option 1" }), _jsx(MenuItem, { value: 'option2', children: "Option 2" }), _jsx(MenuItem, { value: 'option3', children: "Option 3" })] }));
76
+ },
54
77
  };
55
78
  export const DifferentColors = {
56
79
  args: {
@@ -1,4 +1,4 @@
1
- import type { StoryObj } from '@storybook/react';
1
+ import type { StoryObj } from '@storybook/react-vite';
2
2
  import ErkSmartSelect from './ErkSmartSelect';
3
3
  declare const meta: {
4
4
  component: typeof ErkSmartSelect;
@@ -1,7 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useArgs } from '@storybook/preview-api';
3
2
  import ErkSmartSelect from './ErkSmartSelect';
4
- import { within, userEvent, screen } from '@storybook/testing-library';
3
+ import { useArgs } from 'storybook/internal/preview-api';
5
4
  const meta = {
6
5
  component: ErkSmartSelect,
7
6
  tags: ['autodocs'],
@@ -26,11 +25,10 @@ export const Default = {
26
25
  },
27
26
  ],
28
27
  },
29
- play: async ({ canvasElement }) => {
30
- const canvas = within(canvasElement);
28
+ play: async ({ canvas, userEvent }) => {
31
29
  const selector = canvas.getByTestId('smart-select');
32
30
  await userEvent.click(selector);
33
- const option = screen.getByTestId('smart-select-option');
31
+ const option = canvas.getByTestId('smart-select-option');
34
32
  await userEvent.click(option);
35
33
  },
36
34
  render: function Component(args) {
@@ -46,11 +44,10 @@ export const Focused = {
46
44
  args: {
47
45
  label: 'Label',
48
46
  },
49
- play: async ({ canvasElement }) => {
50
- const canvas = within(canvasElement);
47
+ play: async ({ canvas, userEvent }) => {
51
48
  const selector = canvas.getByTestId('smart-select');
52
49
  await userEvent.click(selector);
53
- const option = screen.getByTestId('smart-select-empty');
50
+ const option = canvas.getByTestId('smart-select-empty');
54
51
  await userEvent.click(option);
55
52
  },
56
53
  };
@@ -59,8 +56,7 @@ export const FocusedSearchable = {
59
56
  label: 'Label',
60
57
  searchable: true,
61
58
  },
62
- play: async ({ canvasElement }) => {
63
- const canvas = within(canvasElement);
59
+ play: async ({ canvas, userEvent }) => {
64
60
  const selector = canvas.getByTestId('smart-select');
65
61
  await userEvent.click(selector);
66
62
  },
@@ -76,8 +72,7 @@ export const SearchableWithOptions = {
76
72
  },
77
73
  ],
78
74
  },
79
- play: async ({ canvasElement }) => {
80
- const canvas = within(canvasElement);
75
+ play: async ({ canvas, userEvent }) => {
81
76
  const selector = canvas.getByTestId('smart-select');
82
77
  await userEvent.click(selector);
83
78
  },
@@ -94,8 +89,7 @@ export const SearchableWithSearchAndOptions = {
94
89
  },
95
90
  ],
96
91
  },
97
- play: async ({ canvasElement }) => {
98
- const canvas = within(canvasElement);
92
+ play: async ({ canvas, userEvent }) => {
99
93
  const selector = canvas.getByTestId('smart-select');
100
94
  await userEvent.click(selector);
101
95
  },
@@ -111,8 +105,7 @@ export const LoadingOpened = {
111
105
  label: 'Label',
112
106
  loading: true,
113
107
  },
114
- play: async ({ canvasElement }) => {
115
- const canvas = within(canvasElement);
108
+ play: async ({ canvas, userEvent }) => {
116
109
  const selector = canvas.getByTestId('smart-select');
117
110
  await userEvent.click(selector);
118
111
  },
@@ -123,8 +116,7 @@ export const SearchableLoadingOpened = {
123
116
  searchable: true,
124
117
  loading: true,
125
118
  },
126
- play: async ({ canvasElement }) => {
127
- const canvas = within(canvasElement);
119
+ play: async ({ canvas, userEvent }) => {
128
120
  const selector = canvas.getByTestId('smart-select');
129
121
  await userEvent.click(selector);
130
122
  },
@@ -1,4 +1,4 @@
1
- import type { StoryObj } from '@storybook/react';
1
+ import type { StoryObj } from '@storybook/react-vite';
2
2
  import ErkTextField from './ErkTextField';
3
3
  declare const meta: {
4
4
  component: typeof ErkTextField;
@@ -1,7 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useArgs } from '@storybook/preview-api';
3
2
  import ErkTextField from './ErkTextField';
4
- import { within, userEvent } from '@storybook/testing-library';
3
+ import { useArgs } from 'storybook/internal/preview-api';
5
4
  const meta = {
6
5
  component: ErkTextField,
7
6
  tags: ['autodocs'],
@@ -23,13 +22,10 @@ export const Default = {
23
22
  args: {
24
23
  label: 'Label',
25
24
  },
26
- play: async ({ canvasElement }) => {
27
- const canvas = within(canvasElement);
25
+ play: async ({ canvas, userEvent }) => {
28
26
  const emailInput = canvas.getByRole('textbox');
29
27
  await userEvent.click(emailInput);
30
- await userEvent.type(emailInput, 'example-email@email.com', {
31
- delay: 100,
32
- });
28
+ await userEvent.type(emailInput, 'example-email@email.com', { initialSelectionStart: 100 });
33
29
  },
34
30
  render: function Component(args) {
35
31
  const [, setArgs] = useArgs();
@@ -44,16 +40,14 @@ export const Focused = {
44
40
  args: {
45
41
  label: 'Label',
46
42
  },
47
- play: async ({ canvasElement }) => {
48
- const canvas = within(canvasElement);
43
+ play: async ({ canvas, userEvent }) => {
49
44
  const emailInput = canvas.getByRole('textbox');
50
45
  await userEvent.click(emailInput);
51
46
  },
52
47
  };
53
48
  export const FocusedNoLabel = {
54
49
  args: {},
55
- play: async ({ canvasElement }) => {
56
- const canvas = within(canvasElement);
50
+ play: async ({ canvas, userEvent }) => {
57
51
  const emailInput = canvas.getByRole('textbox');
58
52
  await userEvent.click(emailInput);
59
53
  },
@@ -1,4 +1,4 @@
1
- import type { StoryObj } from '@storybook/react';
1
+ import type { StoryObj } from '@storybook/react-vite';
2
2
  import Navbar from './Navbar';
3
3
  declare const meta: {
4
4
  component: typeof Navbar;
@@ -1,4 +1,4 @@
1
- import type { StoryObj } from '@storybook/react';
1
+ import type { StoryObj } from '@storybook/react-vite';
2
2
  import Rating from './Rating';
3
3
  declare const meta: {
4
4
  component: typeof Rating;
@@ -7,7 +7,7 @@ const Styled = styled(MuiSwitch)(({ theme, checked, size }) => ({
7
7
  '& .Erk-MuiSwitch-switchBase': {
8
8
  marginTop: size === 'small' ? -5 : undefined,
9
9
  transform: size === 'small' ? 'translateX(-5px)' : undefined,
10
- color: 'var(--outlineGrey)',
10
+ color: '#b8b8b8',
11
11
  '&.Mui-checked': {
12
12
  transform: size === 'small' ? 'translateX(12px)' : undefined,
13
13
  '& .Erk-MuiSwitch-thumb': {
@@ -23,7 +23,7 @@ export const axiosBaseQuery = () => async ({ url, method, body, params, timeout,
23
23
  return {
24
24
  error: {
25
25
  status: err.response?.status,
26
- data: err.response?.data || err.message,
26
+ data: err.response?.data ?? err.message,
27
27
  },
28
28
  };
29
29
  }
@@ -8,5 +8,5 @@ const localeMap = {
8
8
  export const getLocale = () => {
9
9
  return (localeMap[navigator.languages?.length
10
10
  ? navigator.languages[0]
11
- : navigator.userLanguage || navigator.language || navigator.browserLanguage] ?? localeMap.es);
11
+ : (navigator.userLanguage ?? navigator.language ?? navigator.browserLanguage)] ?? localeMap.es);
12
12
  };
@@ -4,8 +4,8 @@ import { createTheme, ThemeProvider } from '@mui/material';
4
4
  import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
5
5
  import { LocalizationProvider } from '@mui/x-date-pickers';
6
6
  import { getLocale } from './LocaleUtils';
7
- // stepBackgroundColor: string;
8
- function MaterialProviders({ children, formStyle }) {
7
+ import InternalFormStyle from '../constants/InternalFormStyle';
8
+ function MaterialProviders({ children, formStyle = InternalFormStyle }) {
9
9
  return (_jsx(ThemeProvider, { theme: createTheme({
10
10
  typography: {
11
11
  fontFamily: 'inherit',
@@ -24,13 +24,4 @@ export type AppStore = typeof store;
24
24
  export type AppState = ReturnType<typeof store.getState>;
25
25
  export declare const getAppState: import("@reduxjs/toolkit").AsyncThunk<RootState, {
26
26
  idForm: string;
27
- }, {
28
- state?: unknown;
29
- dispatch?: import("redux-thunk").ThunkDispatch<unknown, unknown, import("redux").UnknownAction>;
30
- extra?: unknown;
31
- rejectValue?: unknown;
32
- serializedErrorType?: unknown;
33
- pendingMeta?: unknown;
34
- fulfilledMeta?: unknown;
35
- rejectedMeta?: unknown;
36
- }>;
27
+ }, import("@reduxjs/toolkit").AsyncThunkConfig>;
package/dist/index.css CHANGED
@@ -1,6 +1,7 @@
1
1
  body {
2
2
  margin: 0;
3
3
  font-size: 16px;
4
+ font-family: 'Nunito', sans-serif;
4
5
  }
5
6
 
6
7
  .ErkIcon {
package/dist/main.js CHANGED
@@ -16,8 +16,10 @@ if (values) {
16
16
  console.error('Invalid data-values JSON', error);
17
17
  }
18
18
  }
19
- ReactDOM.createRoot(document.getElementById('eureka-root')).render(_jsx("div", { className: styles.eurekaForm, children: _jsx(App, { isWidget: false, idOrganization: urlParams.get('idOrganization') ?? undefined, apiKey: window.location.pathname.replace('/', ''), valuesData: dataValues, scrollToTop: () => {
20
- location.href = '#';
21
- location.href = '#eureka-root';
22
- location.href = '#';
23
- } }) }));
19
+ const idOrganization = urlParams.get('idOrganization') ?? undefined;
20
+ const scrollToTop = () => {
21
+ location.href = '#';
22
+ location.href = '#eureka-root';
23
+ location.href = '#';
24
+ };
25
+ ReactDOM.createRoot(document.getElementById('eureka-root')).render(_jsx("div", { className: styles.eurekaForm, children: _jsx(App, { isWidget: false, idOrganization: idOrganization, apiKey: window.location.pathname.replace('/', ''), valuesData: dataValues, scrollToTop: scrollToTop }) }));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@arquimedes.co/eureka-forms",
3
3
  "repository": "git://github.com/Arquimede5/Eureka-Forms.git",
4
- "version":"3.0.29-test",
4
+ "version":"3.0.31-test",
5
5
  "scripts": {
6
6
  "watch": "tsc --noEmit --watch --project tsconfig.app.json",
7
7
  "start": "vite",
@@ -11,25 +11,25 @@
11
11
  "preview": "vite preview",
12
12
  "test": "vitest",
13
13
  "tsc-build": "tsc --p tsconfig.app.json --noEmit false --outDir ./dist --composite false --declaration true --allowImportingTsExtensions false",
14
+ "cypress": "DISPLAY=:0 cypress open",
14
15
  "storybook": "storybook dev -p 6006",
15
- "build-storybook": "storybook build",
16
- "cypress": "DISPLAY=:0 cypress open"
16
+ "build-storybook": "storybook build"
17
17
  },
18
18
  "dependencies": {
19
- "@reduxjs/toolkit": "^2.8.1",
20
- "axios": "^1.9.0",
19
+ "@reduxjs/toolkit": "^2.9.0",
20
+ "axios": "^1.12.2",
21
21
  "date-fns": "^4.1.0",
22
22
  "draft-js": "^0.11.7",
23
23
  "i18n-iso-countries": "^7.14.0",
24
- "libphonenumber-js": "^1.12.8",
25
- "logrocket": "^10.0.0",
26
- "nanoid": "^5.1.5",
24
+ "libphonenumber-js": "^1.12.23",
25
+ "logrocket": "^10.1.0",
26
+ "nanoid": "^5.1.6",
27
27
  "react-draft-wysiwyg": "^1.15.0",
28
28
  "react-google-recaptcha": "^3.1.0",
29
- "react-hook-form": "^7.56.3",
30
- "react-international-phone": "^4.5.0",
29
+ "react-hook-form": "^7.64.0",
30
+ "react-international-phone": "^4.6.0",
31
31
  "react-redux": "^9.2.0",
32
- "typescript": "^5.7.2"
32
+ "typescript": "^5.9.3"
33
33
  },
34
34
  "eslintConfig": {},
35
35
  "browserslist": {
@@ -45,61 +45,49 @@
45
45
  ]
46
46
  },
47
47
  "devDependencies": {
48
- "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
49
- "@babel/preset-env": "^7.26.9",
50
- "@babel/preset-react": "^7.26.3",
51
- "@babel/preset-typescript": "^7.26.0",
52
- "@eslint/compat": "^1.2.7",
53
- "@eslint/eslintrc": "^3.3.0",
54
- "@eslint/js": "^9.21.0",
55
- "@faker-js/faker": "^9.5.1",
56
- "@mui/material": "^7.1.0",
57
- "@mui/x-data-grid-pro": "^8.3.0",
48
+ "@eslint/compat": "^1.4.0",
49
+ "@eslint/eslintrc": "^3.3.1",
50
+ "@eslint/js": "^9.37.0",
51
+ "@faker-js/faker": "^10.0.0",
52
+ "@mui/material": "^7.3.4",
53
+ "@mui/x-data-grid-pro": "^8.13.1",
58
54
  "@mui/x-date-pickers": "^8.3.0",
59
- "@mui/x-date-pickers-pro": "^8.3.0",
60
- "@storybook/addon-coverage": "^1.0.5",
61
- "@storybook/addon-essentials": "^8.6.4",
62
- "@storybook/addon-interactions": "^8.6.4",
63
- "@storybook/addon-links": "^8.6.4",
64
- "@storybook/addon-onboarding": "^8.6.4",
65
- "@storybook/addon-themes": "^8.6.4",
66
- "@storybook/blocks": "^8.6.4",
67
- "@storybook/react": "^8.6.4",
68
- "@storybook/react-webpack5": "^8.6.4",
69
- "@storybook/test": "^8.6.4",
70
- "@storybook/testing-library": "^0.2.2",
71
- "@testing-library/dom": "^10.4.0",
72
- "@testing-library/jest-dom": "^6.6.3",
73
- "@testing-library/react": "^16.2.0",
55
+ "@mui/x-date-pickers-pro": "^8.12.0",
56
+ "@storybook/addon-docs": "^9.1.10",
57
+ "@storybook/addon-onboarding": "^9.1.10",
58
+ "@storybook/addon-themes": "^9.1.10",
59
+ "@storybook/react-vite": "^9.1.10",
60
+ "@testing-library/dom": "^10.4.1",
61
+ "@testing-library/jest-dom": "^6.9.1",
62
+ "@testing-library/react": "^16.3.0",
74
63
  "@testing-library/user-event": "^14.6.1",
75
64
  "@types/draft-js": "^0.11.18",
76
65
  "@types/react": "^18.3.18",
77
66
  "@types/react-dom": "^18.3.5",
78
67
  "@types/react-draft-wysiwyg": "^1.13.8",
79
68
  "@types/react-google-recaptcha": "^2.1.9",
80
- "@typescript-eslint/eslint-plugin": "^8.26.0",
69
+ "@typescript-eslint/eslint-plugin": "^8.46.0",
81
70
  "@typescript-eslint/parser": "^8.26.0",
82
- "@vitejs/plugin-react-swc": "^3.9.0",
83
- "chromatic": "^11.27.0",
84
- "cypress": "^14.1.0",
85
- "dotenv-webpack": "^8.1.0",
86
- "eslint": "^9.26.0",
87
- "eslint-config-prettier": "^10.0.2",
88
- "eslint-plugin-react": "^7.37.4",
89
- "eslint-plugin-react-hooks": "^5.2.0",
90
- "eslint-plugin-react-refresh": "^0.4.19",
91
- "eslint-plugin-storybook": "^0.11.4",
92
- "globals": "^16.1.0",
71
+ "@vitejs/plugin-react-swc": "^4.1.0",
72
+ "css-loader": "^7.1.2",
73
+ "cypress": "^15.3.0",
74
+ "dotenv-webpack": "^8.1.1",
75
+ "eslint": "^9.37.0",
76
+ "eslint-config-prettier": "^10.1.8",
77
+ "eslint-plugin-react": "^7.37.5",
78
+ "eslint-plugin-react-hooks": "^6.1.1",
79
+ "eslint-plugin-react-refresh": "^0.4.23",
80
+ "eslint-plugin-storybook": "^9.1.10",
81
+ "globals": "^16.4.0",
93
82
  "identity-obj-proxy": "^3.0.0",
94
- "jsdom": "^26.0.0",
95
- "prettier": "3.5.3",
96
- "react-docgen-typescript": "^2.2.2",
97
- "react-refresh": "^0.16.0",
98
- "storybook": "^8.6.4",
99
- "storybook-mock-date-decorator": "^2.0.6",
100
- "vite": "^6.3.5",
101
- "vite-plugin-svgr": "^4.3.0",
102
- "vitest": "^3.1.3"
83
+ "jsdom": "^27.0.0",
84
+ "prettier": "3.6.2",
85
+ "react-refresh": "^0.18.0",
86
+ "storybook": "^9.1.10",
87
+ "style-loader": "^4.0.0",
88
+ "vite": "^7.1.9",
89
+ "vite-plugin-svgr": "^4.5.0",
90
+ "vitest": "^3.2.4"
103
91
  },
104
92
  "peerDependencies": {
105
93
  "@emotion/react": "^11.x.x",