intelicoreact 1.8.6 → 1.8.8

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 (130) hide show
  1. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.jsx +1 -18
  2. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.jsx +1 -121
  3. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.jsx +1 -507
  4. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.jsx +1 -46
  5. package/dist/Atomic/FormElements/NumericInput/NumericInput.jsx +1 -337
  6. package/dist/Atomic/FormElements/RadioGroup/RadioGroup.jsx +1 -66
  7. package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.jsx +1 -78
  8. package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.jsx +1 -54
  9. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.jsx +1 -183
  10. package/dist/Atomic/FormElements/RangeList/RangeList.jsx +1 -181
  11. package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.jsx +1 -41
  12. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.jsx +1 -449
  13. package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.jsx +1 -865
  14. package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.jsx +1 -37
  15. package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.jsx +1 -48
  16. package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.jsx +1 -62
  17. package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.jsx +1 -175
  18. package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.jsx +1 -65
  19. package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.jsx +1 -118
  20. package/dist/Atomic/FormElements/Text/Text.jsx +1 -126
  21. package/dist/Atomic/FormElements/Textarea/Textarea.jsx +1 -61
  22. package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.jsx +1 -181
  23. package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.jsx +1 -60
  24. package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.jsx +1 -83
  25. package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.jsx +1 -80
  26. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.jsx +1 -103
  27. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.jsx +1 -115
  28. package/dist/Atomic/Layout/Header/Header.jsx +1 -86
  29. package/dist/Atomic/Layout/MainMenu/MainMenu.jsx +1 -164
  30. package/dist/Atomic/UI/AccordionTable/AccordionTable.jsx +1 -250
  31. package/dist/Atomic/UI/AccordionText/AccordionText.jsx +1 -68
  32. package/dist/Atomic/UI/Arrow/Arrow.jsx +1 -134
  33. package/dist/Atomic/UI/Box/Box.jsx +1 -53
  34. package/dist/Atomic/UI/Chart/Chart.jsx +1 -178
  35. package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.jsx +1 -78
  36. package/dist/Atomic/UI/Chart/partial/optionsConstructor.jsx +1 -334
  37. package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.jsx +1 -111
  38. package/dist/Atomic/UI/DateTime/DateTime.jsx +1 -57
  39. package/dist/Atomic/UI/DebugContainer/DebugContainer.jsx +1 -44
  40. package/dist/Atomic/UI/DebugContainer/useDebugContainer.jsx +1 -15
  41. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.jsx +1 -223
  42. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.jsx +1 -75
  43. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.jsx +1 -86
  44. package/dist/Atomic/UI/PieChart/PieChart.jsx +1 -41
  45. package/dist/Atomic/UI/Table/Partials/TdCell.jsx +1 -87
  46. package/dist/Atomic/UI/Table/Partials/TdHeader.jsx +1 -36
  47. package/dist/Atomic/UI/Table/Partials/TdRow.jsx +1 -103
  48. package/dist/Atomic/UI/Table/Partials/TdTitle.jsx +1 -55
  49. package/dist/Atomic/UI/Table/Table.jsx +1 -63
  50. package/dist/Atomic/UI/Table/TdTypes/TdActions.jsx +1 -80
  51. package/dist/Atomic/UI/Table/TdTypes/TdPriority.jsx +1 -26
  52. package/dist/Atomic/UI/Table/TdTypes/TdRange.jsx +1 -13
  53. package/dist/Atomic/UI/Table/TdTypes/TdWeight.jsx +1 -56
  54. package/dist/Atomic/UI/TagList/TagList.jsx +1 -256
  55. package/dist/Atomic/UI/WizardStepper/constructor.jsx +1 -86
  56. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.jsx +1 -254
  57. package/dist/Functions/customEventListener.jsx +1 -96
  58. package/dist/Functions/operations.jsx +1 -138
  59. package/dist/Functions/useFormTools/functions/RenderFields.jsx +1 -108
  60. package/dist/Functions/useFormTools/index.jsx +1 -777
  61. package/dist/Functions/usePasswordChecker.jsx +1 -128
  62. package/dist/Functions/utils.jsx +1 -492
  63. package/dist/Molecular/CustomIcons/components/AffiliateNetworks.jsx +1 -22
  64. package/dist/Molecular/CustomIcons/components/AlertCircle.jsx +1 -24
  65. package/dist/Molecular/CustomIcons/components/AppStore.jsx +1 -30
  66. package/dist/Molecular/CustomIcons/components/Arrow.jsx +1 -33
  67. package/dist/Molecular/CustomIcons/components/ArrowDown.jsx +1 -18
  68. package/dist/Molecular/CustomIcons/components/ArrowLeft.jsx +1 -23
  69. package/dist/Molecular/CustomIcons/components/ArrowRight.jsx +1 -23
  70. package/dist/Molecular/CustomIcons/components/ArrowUp.jsx +1 -18
  71. package/dist/Molecular/CustomIcons/components/Bell.jsx +1 -16
  72. package/dist/Molecular/CustomIcons/components/Button.jsx +1 -13
  73. package/dist/Molecular/CustomIcons/components/Campaigns.jsx +1 -17
  74. package/dist/Molecular/CustomIcons/components/Check.jsx +1 -15
  75. package/dist/Molecular/CustomIcons/components/Check2.jsx +1 -13
  76. package/dist/Molecular/CustomIcons/components/ChevronDown.jsx +1 -13
  77. package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.jsx +1 -12
  78. package/dist/Molecular/CustomIcons/components/ChevronLeft.jsx +1 -12
  79. package/dist/Molecular/CustomIcons/components/ChevronRight.jsx +1 -12
  80. package/dist/Molecular/CustomIcons/components/ChevronUp.jsx +1 -12
  81. package/dist/Molecular/CustomIcons/components/ChevronUpDown.jsx +1 -28
  82. package/dist/Molecular/CustomIcons/components/Close.jsx +1 -15
  83. package/dist/Molecular/CustomIcons/components/ColumnsOrder.jsx +1 -18
  84. package/dist/Molecular/CustomIcons/components/Delete.jsx +1 -17
  85. package/dist/Molecular/CustomIcons/components/Edit.jsx +1 -16
  86. package/dist/Molecular/CustomIcons/components/Email.jsx +1 -32
  87. package/dist/Molecular/CustomIcons/components/FinturfLogo.jsx +1 -19
  88. package/dist/Molecular/CustomIcons/components/FinturfLogo2.jsx +1 -36
  89. package/dist/Molecular/CustomIcons/components/Flows.jsx +1 -16
  90. package/dist/Molecular/CustomIcons/components/Gift.jsx +1 -26
  91. package/dist/Molecular/CustomIcons/components/GoogleAuth.jsx +1 -30
  92. package/dist/Molecular/CustomIcons/components/GooglePlay.jsx +1 -30
  93. package/dist/Molecular/CustomIcons/components/HelpCircle.jsx +1 -20
  94. package/dist/Molecular/CustomIcons/components/HelpCircle2.jsx +1 -21
  95. package/dist/Molecular/CustomIcons/components/HelpCircleFilled.jsx +1 -20
  96. package/dist/Molecular/CustomIcons/components/Home.jsx +1 -17
  97. package/dist/Molecular/CustomIcons/components/Home2.jsx +1 -23
  98. package/dist/Molecular/CustomIcons/components/Key.jsx +1 -24
  99. package/dist/Molecular/CustomIcons/components/Landers.jsx +1 -21
  100. package/dist/Molecular/CustomIcons/components/Lock.jsx +1 -16
  101. package/dist/Molecular/CustomIcons/components/Mail.jsx +1 -27
  102. package/dist/Molecular/CustomIcons/components/Mastercard.jsx +1 -74
  103. package/dist/Molecular/CustomIcons/components/Minus.jsx +1 -26
  104. package/dist/Molecular/CustomIcons/components/Offers.jsx +1 -17
  105. package/dist/Molecular/CustomIcons/components/Pause.jsx +1 -29
  106. package/dist/Molecular/CustomIcons/components/PayPal.jsx +1 -42
  107. package/dist/Molecular/CustomIcons/components/PayPalLightLarge.jsx +1 -29
  108. package/dist/Molecular/CustomIcons/components/Phone.jsx +1 -31
  109. package/dist/Molecular/CustomIcons/components/Play.jsx +1 -26
  110. package/dist/Molecular/CustomIcons/components/Plus.jsx +1 -26
  111. package/dist/Molecular/CustomIcons/components/Profile.jsx +1 -17
  112. package/dist/Molecular/CustomIcons/components/QRCode.jsx +1 -30
  113. package/dist/Molecular/CustomIcons/components/Rectangle.jsx +1 -13
  114. package/dist/Molecular/CustomIcons/components/Revert.jsx +1 -14
  115. package/dist/Molecular/CustomIcons/components/Star.jsx +1 -15
  116. package/dist/Molecular/CustomIcons/components/Star2.jsx +1 -17
  117. package/dist/Molecular/CustomIcons/components/TrafficSources.jsx +1 -15
  118. package/dist/Molecular/CustomIcons/components/Trash.jsx +1 -16
  119. package/dist/Molecular/CustomIcons/components/TrashRed.jsx +1 -16
  120. package/dist/Molecular/CustomIcons/components/Triggers.jsx +1 -16
  121. package/dist/Molecular/CustomIcons/components/User.jsx +1 -26
  122. package/dist/Molecular/CustomIcons/components/Visa.jsx +1 -32
  123. package/dist/Molecular/CustomIcons/components/X.jsx +1 -13
  124. package/dist/Molecular/FormElement/FormElement.jsx +1 -52
  125. package/dist/Molecular/FormWithDependOn/FormWithDependOn.jsx +1 -161
  126. package/dist/Molecular/InputAddress/InputAddress.jsx +1 -641
  127. package/dist/Molecular/InputPassword/InputPassword.jsx +1 -50
  128. package/package.json +1 -1
  129. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.d.ts +0 -5
  130. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js.map +0 -1
@@ -1,777 +1 @@
1
- import { createRef, useEffect, useState } from 'react';
2
-
3
- import ArrayWithObjects from './form-drivers/ArrayWithObjects';
4
- import ObjectWithIterableObjects from './form-drivers/ObjectWithIterableObjects';
5
- import ObjectWithNamedKeyObjects from './form-drivers/ObjectWithNamedKeyObjects';
6
- import General from './functions/General';
7
- import RenderFields from './functions/RenderFields';
8
-
9
- const DefaultFocusControllerProps = {
10
- setAutoFocus: true,
11
- onlyEmptyFieldAutoFocus: false,
12
- };
13
-
14
- export default function useFormTools({
15
- form,
16
- setForm,
17
- FormType,
18
- FormFields,
19
- FormDataDriverName = 'ArrayWithObjects'
20
- || 'ObjectWithIterableObjects'
21
- || 'ObjectWithNamedKeyObjects',
22
- FormDataDriver = null,
23
- FocusControllerProps = DefaultFocusControllerProps,
24
- goToNextFieldOnEnterPressed = true,
25
- } = {}) {
26
- FocusControllerProps = {
27
- ...DefaultFocusControllerProps,
28
- ...FocusControllerProps,
29
- };
30
-
31
- const FormDataDrivers = {
32
- ArrayWithObjects: {
33
- handlers: ArrayWithObjects,
34
- default: true,
35
- },
36
- ObjectWithIterableObjects: {
37
- handlers: ObjectWithIterableObjects,
38
- },
39
- ObjectWithNamedKeyObjects: {
40
- handlers: ObjectWithNamedKeyObjects,
41
- },
42
- };
43
-
44
- const getFormDataDriver = (name) => {
45
- return (
46
- FormDataDriver
47
- || FormDataDrivers[name]?.handlers
48
- || Object.values(FormDataDrivers).find(df => df.default === true)?.handlers
49
- || (() => ({}))
50
- );
51
- };
52
- const getFormDataDriverInstance = (name, ...args) => {
53
- return getFormDataDriver(name)(...args);
54
- };
55
-
56
- const { getFieldClassName, updateFormField } = General();
57
-
58
- const {
59
- getFieldData,
60
- getFormField,
61
- setFormFields,
62
- setFormField,
63
- getFormFieldsAsArray,
64
- getFormFieldsKeys,
65
- removeAllFormFields,
66
- removeFormField,
67
- removeFormFields,
68
- } = getFormDataDriverInstance(FormDataDriverName, {
69
- form,
70
- setForm,
71
- FormFields,
72
- });
73
-
74
- ///////////////////////////////////////////////////////////////
75
- // --- OnChange Observer ---//--- START ---//
76
- const [onChangeObservers, setOnChangeObservers] = useState({});
77
- const addOnChangeObserver = (key, cb) => {
78
- let observerId = null;
79
-
80
- setOnChangeObservers((state) => {
81
- // Set Default Value
82
- if (!state[key]) state[key] = {};
83
-
84
- observerId = state[key].length;
85
-
86
- state[key][observerId] = cb;
87
-
88
- return state;
89
- });
90
-
91
- return observerId;
92
- };
93
- const removeOnChangeObserver = (key, id) => {
94
- setOnChangeObservers((state) => {
95
- // Set Default Value
96
- if (!state[key]) return state;
97
-
98
- state[key] = Object.keys(state)
99
- .filter(cbId => cbId !== id)
100
- .map(cbId => state[key][cbId]);
101
-
102
- return state;
103
- });
104
- };
105
- const onChangeObserver = (key, value) => {
106
- if (!onChangeObservers[key] || typeof onChangeObservers[key] !== 'object')
107
- return;
108
-
109
- const Observers = onChangeObservers[key];
110
-
111
- Object.values(Observers).map((cb) => {
112
- cb({ value, form });
113
- return null;
114
- });
115
- };
116
- const onFieldChange = (key, value) => {
117
- if (value === getFormField(key)?.value) return false;
118
-
119
- onChangeObserver(key, value);
120
- setFormField(
121
- field => ({
122
- ...field,
123
- error: '',
124
- value,
125
- }),
126
- key,
127
- );
128
- };
129
- // --- OnChange Observer ---//--- END ---//
130
-
131
- ///////////////////////////////////////////////////////////////
132
- ///////////////////////////////////////////////////////////////
133
-
134
- // --- Form Submit Blocker ---//--- START ---//
135
- const [formSubmitBlockers, setFormSubmitBlockers] = useState([]);
136
- const toggleFormSubmitBlock = (key, value) => {
137
- setFormSubmitBlockers(state =>
138
- state.includes(key) || !value
139
- ? [...state.filter(k => k !== key)]
140
- : [...state, key],
141
- );
142
- };
143
- const clearFormSubmitBlockers = () => setFormSubmitBlockers([]);
144
- // --- Form Submit Blocker ---//--- END ---//
145
-
146
- ///////////////////////////////////////////////////////////////
147
- ///////////////////////////////////////////////////////////////
148
-
149
- // --- Property Observer Blocker ---//--- START ---//
150
- // const [propertyObservers, setPropertyObservers] = useState({});
151
- // function addPropertyObserver () {
152
- // };
153
- // --- Property Observer Blocker ---//--- END ---//
154
-
155
- ///////////////////////////////////////////////////////////////
156
- ///////////////////////////////////////////////////////////////
157
-
158
- // --- Render Fields Controller ---//--- START ---//
159
- const [isFormFieldsAdded, setIsFormFieldsAdded] = useState(false);
160
- const [renderFormFields, setRenderFormFieldsState] = useState([]);
161
- const setRenderFormFields = (data) => {
162
- setIsFormFieldsAdded(true);
163
- // eslint-disable-next-line no-use-before-define
164
- removeRenderFields(renderFormFields);
165
- // eslint-disable-next-line no-use-before-define
166
- resetIsInitFocused();
167
- setRenderFormFieldsState(data);
168
- };
169
- const addRenderFields = (fields) => {
170
- setRenderFormFieldsState(state => [...state, ...fields]);
171
- };
172
- const removeRenderFields = (fields) => {
173
- setRenderFormFieldsState(state =>
174
- state.filter(field => !fields.includes(field)),
175
- );
176
- };
177
-
178
- const [isFormRendered, setIsFormRendered] = useState(false);
179
- const submitIsFormRendered = () => setIsFormRendered(true);
180
- const resetIsFormRendered = () => setIsFormRendered(false);
181
-
182
- const onEnterDown = async (e) => {
183
- if (!goToNextFieldOnEnterPressed) return false;
184
-
185
- const focusable = document.querySelectorAll(
186
- 'a, button, input, [tabindex]:not([tabindex="-1"])',
187
- );
188
- const currentIndex = await new Promise((resolve) => {
189
- focusable.forEach((node, i) => {
190
- if (node === e.target) resolve(i);
191
- });
192
- });
193
-
194
- if (!currentIndex) return false;
195
-
196
- const nextIndex = currentIndex + 1;
197
-
198
- if (nextIndex >= focusable.length) return false;
199
-
200
- const nextItem = focusable[nextIndex];
201
-
202
- nextItem.focus();
203
- };
204
-
205
- const onKeyDown = (...args) => {
206
- const event = args.reduce((e, item) => {
207
- if (item?.nativeEvent instanceof KeyboardEvent) return item;
208
- return e;
209
- }, null);
210
-
211
- if (!event) return false;
212
-
213
- const { keyCode } = event;
214
-
215
- switch (keyCode) {
216
- // OnEnterDown
217
- case 13:
218
- onEnterDown(event);
219
- break;
220
-
221
- default:
222
- break;
223
- }
224
- };
225
-
226
- // On Type Change
227
- useEffect(() => {
228
- resetIsFormRendered();
229
- }, [FormType]);
230
-
231
- // On Render Fields Change
232
- useEffect(() => {
233
- if (isFormFieldsAdded) resetIsFormRendered(false);
234
-
235
- // Add Form Fields
236
- if (renderFormFields.length !== 0) {
237
- setFormFields((fields) => {
238
- return renderFormFields.reduce((result, key) => {
239
- const fieldData = getFieldData(key);
240
- const field = getFormField(key) ? getFormField(key) : fieldData;
241
-
242
- if (
243
- !field?.className
244
- || field?.className?.indexOf(getFieldClassName(key, FormType)) === -1
245
- ) {
246
- field.className = `${field?.className} ${getFieldClassName(key, FormType)}`;
247
- }
248
-
249
- if (typeof fieldData?.label === 'object') {
250
- field.label = fieldData.label[FormType] || fieldData.label.default;
251
- }
252
-
253
- field.ref = createRef();
254
- field.wrapperRef = createRef();
255
-
256
- field.isValueChangedByUser = false;
257
-
258
- if (goToNextFieldOnEnterPressed) {
259
- const onKeyDownProp = field.onKeyDown || (() => {});
260
- field.onKeyDown = (...args) => {
261
- onKeyDown(...args);
262
- onKeyDownProp(...args);
263
- };
264
- }
265
-
266
- // Is Field Value Changed By USER
267
- // eslint-disable-next-line no-use-before-define
268
- addOnFieldRenderedObserver(
269
- key,
270
- () => {
271
- const element = getFormField(key)?.ref?.current?.querySelector(
272
- field?.focusSelector || 'input',
273
- );
274
- const handler = () =>
275
- setFormField({ isValueChangedByUser: true }, key);
276
-
277
- element?.addEventListener('paste', handler, { once: true });
278
- element?.addEventListener('keypress', handler, { once: true });
279
- },
280
- true,
281
- );
282
-
283
- return updateFormField(result, field, key);
284
- }, fields);
285
- });
286
- }
287
- }, [renderFormFields]);
288
-
289
- const [onFormRenderObservers, setOnFormRenderObservers] = useState([]);
290
- const addOnFormRenderObserver = (cb, { once = false } = {}) => {
291
- setOnFormRenderObservers(state => [
292
- ...state,
293
- { cb, once, isWorkedOut: false },
294
- ]);
295
- };
296
-
297
- const updateOnFormRenderObserver = (key, data) => {
298
- setOnFormRenderObservers((state) => {
299
- const copy = [...state];
300
- copy[key] = { ...state[key], ...data };
301
-
302
- return copy;
303
- });
304
- };
305
- const removeOnFormRenderObserver = (key) => {
306
- setOnFormRenderObservers(state =>
307
- state.slice().filter((v, i) => i !== key),
308
- );
309
- };
310
- const onFormRenderWorker = () => {
311
- onFormRenderObservers.map(
312
- ({ once, isWorkedOut, cb = () => {} } = {}, key) => {
313
- if (once && isWorkedOut) return null;
314
-
315
- cb(form);
316
- if (once) removeOnFormRenderObserver(key);
317
- else updateOnFormRenderObserver(key, { isWorkedOut: true });
318
- return null;
319
- },
320
- );
321
- };
322
-
323
- // On Form Rendered
324
- useEffect(() => {
325
- if (!isFormRendered && onFormRenderObservers.length) {
326
- const formFieldsKeys = getFormFieldsKeys(form);
327
- const isAllFieldsRendered = renderFormFields.reduce((result, key) => {
328
- if (!formFieldsKeys.includes(key)) result = false;
329
-
330
- return result;
331
- }, true);
332
-
333
- if (isAllFieldsRendered) {
334
- submitIsFormRendered(true);
335
- onFormRenderWorker();
336
- }
337
- }
338
- }, [form, renderFormFields, onFormRenderObservers]);
339
- // --- Render Fields Controller ---//--- END ---//
340
-
341
- ///////////////////////////////////////////////////////////////
342
- ///////////////////////////////////////////////////////////////
343
-
344
- // --- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- START ---//
345
- const hightliteErrorLabels = () => {
346
- const fields = getFormFieldsAsArray();
347
-
348
- const filtered = fields?.reduce((result, field) => {
349
- if (field?.errorLabelHightlite) {
350
- result.push({
351
- ...field,
352
- className: getFieldClassName(field?.key, FormType),
353
- });
354
- }
355
-
356
- return result;
357
- }, []);
358
-
359
- filtered?.map((field) => {
360
- const formField = document.querySelector(`.${field?.className}`);
361
-
362
- if (!formField) return null;
363
-
364
- formField.classList.remove('errorLabelHightlite');
365
-
366
- if (field?.error) {
367
- formField.classList.add('errorLabelHightlite');
368
- }
369
-
370
- return null;
371
- });
372
- };
373
- useEffect(() => {
374
- hightliteErrorLabels();
375
- }, [form]);
376
- // --- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- END ---//
377
-
378
- ///////////////////////////////////////////////////////////////
379
- ///////////////////////////////////////////////////////////////
380
-
381
- // --- Fields Focus Controller ---//--- START ---//
382
- const [isInitFocused, setIsInitFocused] = useState(false);
383
- const [autoFocusedField, setAutoFocusedField] = useState(null);
384
-
385
- const setFirstFieldInitFocused = () => setIsInitFocused(true);
386
- const resetIsInitFocused = () => setIsInitFocused(false);
387
-
388
- const toggleFieldFocus = (
389
- { key, cb = () => {}, form: argForm, field },
390
- action = 'focus',
391
- ) => {
392
- if (!key && !field) return null;
393
-
394
- if (!argForm) argForm = form;
395
-
396
- const formField = field || getFormField(key, argForm);
397
-
398
- if (!formField || !formField.ref) {
399
- return false;
400
- }
401
-
402
- if (
403
- action === 'focus'
404
- && FocusControllerProps.onlyEmptyFieldAutoFocus
405
- && Boolean(formField?.value)
406
- ) {
407
- return null;
408
- }
409
-
410
- setTimeout(() => {
411
- formField.ref.current
412
- ?.querySelector(formField?.focusSelector || 'input')
413
- ?.[action]();
414
- cb();
415
- }, 50);
416
- };
417
-
418
- const setFieldFocus = ({ key, cb = () => {}, form: argForm, field }) =>
419
- toggleFieldFocus({ key, cb, form: argForm, field }, 'focus');
420
- const setFieldBlur = ({ key, cb = () => {}, form: argForm, field }) =>
421
- toggleFieldFocus({ key, cb, form: argForm, field }, 'blur');
422
-
423
- const setFirstFieldFocus = () => {
424
- let field = null;
425
-
426
- for (let i = 0; i < renderFormFields.length && !field; ++i) {
427
- const key = renderFormFields[i];
428
- const tmpField = getFormField(key);
429
- if (tmpField && !tmpField?.disabled) field = tmpField;
430
- }
431
-
432
- if (!field) return false;
433
-
434
- if (FocusControllerProps.onlyEmptyFieldAutoFocus && Boolean(field?.value)) {
435
- setFirstFieldInitFocused();
436
- return false;
437
- }
438
-
439
- setAutoFocusedField(field.key);
440
-
441
- const callback = () => {
442
- setFormField({ value: field.value }, field.key);
443
- setFirstFieldInitFocused();
444
- };
445
-
446
- setTimeout(() => setFieldFocus({ key: field.key, cb: callback, form }), 50);
447
- };
448
-
449
- const [onFieldFocusCallbacks, setOnFieldFocusCallbacks] = useState({});
450
- const addOnFieldFocusCallback = (key, cb) => {
451
- setOnFieldFocusCallbacks((state) => {
452
- const stateCopy = { ...state };
453
-
454
- if (!state[key]) stateCopy[key] = [];
455
-
456
- stateCopy[key].push(cb);
457
-
458
- return stateCopy;
459
- });
460
- };
461
- const callOnFieldFocusCallbacks = (key) => {
462
- if (!Array.isArray(onFieldFocusCallbacks[key])) return null;
463
-
464
- onFieldFocusCallbacks[key]?.map(cb => cb());
465
- };
466
-
467
- const [focusOnRenderFields, setFocusOnRenderFields] = useState([]);
468
- const addFocusFieldOnRender = (key, cb) => {
469
- setFocusOnRenderFields(state => [...state, key]);
470
-
471
- if (cb) addOnFieldFocusCallback(key, cb);
472
- };
473
- const removeFocusFieldOnRender = (key) => {
474
- setFocusOnRenderFields(state => state.filter(field => field !== key));
475
- };
476
-
477
- useEffect(() => {
478
- if (
479
- FocusControllerProps.setAutoFocus
480
- && !isInitFocused
481
- && !autoFocusedField
482
- && isFormRendered
483
- ) {
484
- setFirstFieldFocus();
485
- }
486
-
487
- if (focusOnRenderFields.length) {
488
- getFormFieldsKeys(form)?.map((key) => {
489
- if (
490
- focusOnRenderFields.includes(key)
491
- && getFormField(key)?.value?.length === 0
492
- ) {
493
- const cb = () => {
494
- removeFocusFieldOnRender(key);
495
- callOnFieldFocusCallbacks(key);
496
- };
497
-
498
- setFieldFocus({ key, form, cb });
499
- }
500
- return null;
501
- });
502
- }
503
- }, [form, focusOnRenderFields, isInitFocused, isFormRendered]);
504
-
505
- useEffect(() => {
506
- setAutoFocusedField(null);
507
- }, [isInitFocused]);
508
-
509
- useEffect(() => {
510
- resetIsInitFocused();
511
- }, [FormType]);
512
-
513
- // Remove Focus From Autocomplete field !!! TODO
514
- // useEffect(() => {
515
- // if (!autoFocusedField) return null;
516
- // const field = getFormField(autoFocusedField);
517
-
518
- // if (field?.value !== '' && !field?.isValueChangedByUser) {
519
- // setFieldBlur({key: autoFocusedField, form});
520
- // }
521
- // }, [autoFocusedField, form]);
522
- // --- Fields Focus Controller ---//--- END ---//
523
-
524
- ///////////////////////////////////////////////////////////////
525
- ///////////////////////////////////////////////////////////////
526
-
527
- // --- OnFieldRendered Observer ---//--- START ---//
528
- const [onFieldRenderedObservers, setOnFieldRenderedObservers] = useState({});
529
- const [isFieldObserversReset, setIsFieldObserversReset] = useState(false);
530
-
531
- const resetOnFieldRenderObserversWorkedOut = () => {
532
- if (!isFieldObserversReset && renderFormFields.length) {
533
- renderFormFields.map((key) => {
534
- setFormField({ isOnRenderObserversWorkedOut: false }, key);
535
- return key;
536
- });
537
- setIsFieldObserversReset(true);
538
- }
539
- };
540
- const addOnFieldRenderedObserver = (key, cb, isOnceCallable = true) => {
541
- let observerId = null;
542
-
543
- setOnFieldRenderedObservers((state) => {
544
- // Set Default Value
545
- if (!state[key]) state[key] = {};
546
-
547
- observerId = Object.keys(state[key]).length || 0;
548
-
549
- state[key][observerId] = {
550
- f: cb,
551
- isOnceCallable,
552
- };
553
-
554
- return state;
555
- });
556
-
557
- return observerId;
558
- };
559
- const updateOnFieldRenderedObserver = (key, id, data) => {
560
- setOnFieldRenderedObservers((state) => {
561
- // Set Default Value
562
- if (!state[key]) return state;
563
-
564
- state[key][id] = {
565
- ...state[key][id],
566
- ...data,
567
- };
568
-
569
- return state;
570
- });
571
- };
572
- const removeOnFieldRenderedObserver = (key, id) => {
573
- setOnFieldRenderedObservers((state) => {
574
- // Set Default Value
575
- if (!state[key]) return state;
576
-
577
- state[key] = Object.keys(state)
578
- .filter(cbId => cbId !== id)
579
- .map(cbId => state[key][cbId]);
580
-
581
- return state;
582
- });
583
- };
584
- const onFieldRenderedObserver = (key, data) => {
585
- if (
586
- !onFieldRenderedObservers[key]
587
- || typeof onFieldRenderedObservers[key] !== 'object'
588
- ) {
589
- return;
590
- }
591
-
592
- const Observers = onFieldRenderedObservers[key];
593
- const FilteredObservers = Object.values(Observers).filter(
594
- observer => !observer?.isObserverWorkedOut,
595
- );
596
-
597
- if (FilteredObservers.length === 0) return null;
598
-
599
- setFormField({ isOnRenderObserversWorkedOut: true }, key);
600
-
601
- FilteredObservers.map(({ f, isOnceCallable }, id) => {
602
- f(data);
603
- if (isOnceCallable)
604
- updateOnFieldRenderedObserver(key, id, { isObserverWorkedOut: true });
605
- return null;
606
- });
607
- };
608
- const onRenderObserverWorker = () => {
609
- return getFormFieldsKeys(form)?.map((key) => {
610
- // OnFieldRendered
611
- const fieldData = getFormField(key);
612
- if (!fieldData?.isOnRenderObserversWorkedOut) {
613
- onFieldRenderedObserver(key, fieldData);
614
- return { key, isWorkedOut: true };
615
- }
616
-
617
- return { key, isWorkedOut: false };
618
- });
619
- };
620
-
621
- useEffect(() => {
622
- resetOnFieldRenderObserversWorkedOut();
623
- onRenderObserverWorker();
624
- }, [form]);
625
-
626
- useEffect(() => {
627
- setIsFieldObserversReset(false);
628
- }, [FormType]);
629
- // --- OnFieldRendered Observer ---//--- END ---//
630
-
631
- ///////////////////////////////////////////////////////////////
632
- ///////////////////////////////////////////////////////////////
633
-
634
- // Detect What Changed || TRY TO DO
635
- // const compare = async (prev, current) => {
636
- // if (!prev) return current;
637
-
638
- // return new Promise((resolve) => {
639
- // Object.keys(current).reduce((result, key, i, arr) => {
640
- // //If PROPERTY is NOT EXISTS BEFORE
641
- // if ([null, undefined].includes(prev[key])) {
642
- // result[key] = current[key];
643
- // }
644
- // //If PROPERTY is AN OBJECT
645
- // else if (typeof current[key] === 'object') {
646
- // //If PROPERTY is EXISTS BEFORE
647
- // const innerCompare = compare(prev[key], current[key]);
648
- // // //If SOMETHING CHANGED
649
- // if (innerCompare?.length) result[key] = innerCompare;
650
- // }
651
- // //If PROPERTY is AN SIMPLE VALUE and PROPERTY CHANGED
652
- // else if (prev[key] !== current[key]) {
653
- // result[key] = current[key];
654
- // }
655
-
656
- // if (i === arr.length-1) {
657
- // resolve(result);
658
- // }
659
-
660
- // return result;
661
- // }, {});
662
- // });
663
- // };
664
-
665
- ///////////////////////////////////////////////////////////////
666
- ///////////////////////////////////////////////////////////////
667
-
668
- // --- WindowScrollController ---//--- START ---//
669
- const scrollToField = ({ key = null, field = null, form: argForm }) => {
670
- if (!key && !field) return false;
671
- if (!argForm) argForm = form;
672
-
673
- if (!field) field = getFormField(key, argForm);
674
-
675
- const wrapperRef = field?.wrapperRef || field?.ref;
676
-
677
- const { top: topOffset } = wrapperRef?.current?.getBoundingClientRect();
678
- const scrollTop
679
- = Math.abs(Math.abs(topOffset) - Math.abs(window.scrollY)) - 16;
680
- window.scrollTo({ top: scrollTop });
681
- };
682
-
683
- // --- WindowScrollController ---//--- END ---//
684
-
685
- ///////////////////////////////////////////////////////////////
686
- ///////////////////////////////////////////////////////////////
687
-
688
- const addErrorsToForm = (errors, argForm = form) => {
689
- if (!argForm) argForm = form;
690
-
691
- setFormFields((fields) => {
692
- return errors.reduce(
693
- (fields, { message: error, propertyPath: errKey }) => {
694
- return updateFormField(fields, { error }, errKey);
695
- },
696
- fields,
697
- );
698
- });
699
- };
700
-
701
- return {
702
- FormDataDrivers,
703
-
704
- // OnChangeObserver
705
- addOnChangeObserver,
706
- removeOnChangeObserver,
707
- onChangeObservers,
708
-
709
- // OnChangeHandler
710
- onFieldChange,
711
-
712
- // Form Submit Blocker
713
- toggleFormSubmitBlock,
714
- clearFormSubmitBlockers,
715
- isFormSubmitBlocked: Boolean(formSubmitBlockers.length),
716
-
717
- // Property Observers
718
- // addPropertyObserver,
719
-
720
- // Render Fields
721
- renderFormFields,
722
- setRenderFormFields,
723
- addRenderFields,
724
- removeRenderFields,
725
-
726
- getFieldClassName,
727
-
728
- // Field Focus Controller
729
- isInitFocused,
730
- setFirstFieldInitFocused,
731
- resetIsInitFocused,
732
- setFieldFocus,
733
- setFieldBlur,
734
- setFirstFieldFocus,
735
- autoFocusedField,
736
-
737
- addFocusFieldOnRender,
738
- removeFocusFieldOnRender,
739
-
740
- // Field Render Controller
741
- addOnFieldRenderedObserver,
742
- removeOnFieldRenderedObserver,
743
- onFieldRenderedObservers,
744
-
745
- updateFormField,
746
- addOnFormRenderObserver,
747
- submitIsFormRendered,
748
- resetIsFormRendered,
749
- renderFields: ({
750
- form: argForm = form,
751
- fields: argFields = renderFormFields,
752
- cols: argCols = 1,
753
- RenderFieldComponent,
754
- }) =>
755
- RenderFields({
756
- form: argForm,
757
- fields: argFields,
758
- cols: argCols,
759
- RenderFieldComponent,
760
- onFieldChange,
761
- FormDataDriver: getFormDataDriver(FormDataDriverName),
762
- }),
763
-
764
- scrollToField,
765
-
766
- getFieldData,
767
- getFormField,
768
- setFormFields,
769
- setFormField: (data, key) => setFormField(data, key),
770
- getFormFieldsAsArray,
771
- getFormFieldsKeys,
772
- removeAllFormFields,
773
- removeFormField,
774
- removeFormFields,
775
- addErrorsToForm,
776
- };
777
- }
1
+ function e(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=Array(r);n<r;n++)t[n]=e[n];return t}function r(e,r,n,t,o,u,i){try{var l=e[u](i),c=l.value}catch(e){n(e);return}l.done?r(c):Promise.resolve(c).then(t,o)}function n(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.forEach(function(r){var t;t=n[r],r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t})}return e}function t(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):(function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n.push.apply(n,t)}return n})(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}),e}function o(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var n,t,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var u=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(u.push(n.value),!r||u.length!==r);i=!0);}catch(e){l=!0,t=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw t}}return u}}(e,r)||l(e,r)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(r){return function(r){if(Array.isArray(r))return e(r)}(r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||l(r)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function l(r,n){if(r){if("string"==typeof r)return e(r,n);var t=Object.prototype.toString.call(r).slice(8,-1);if("Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return e(r,n)}}import{createRef as c,useEffect as a,useState as f}from"react";import s from"./form-drivers/ArrayWithObjects";import d from"./form-drivers/ObjectWithIterableObjects";import v from"./form-drivers/ObjectWithNamedKeyObjects";import m from"./functions/General";import b from"./functions/RenderFields";var y={setAutoFocus:!0,onlyEmptyFieldAutoFocus:!1};export default function p(){var e,l,p=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},F=p.form,h=p.setForm,O=p.FormType,g=p.FormFields,j=p.FormDataDriverName,k=void 0===j?"ArrayWithObjects":j,w=p.FormDataDriver,A=void 0===w?null:w,S=p.FocusControllerProps,R=void 0===S?y:S,C=p.goToNextFieldOnEnterPressed,I=void 0===C||C,P=this;R=n({},y,R);var W={ArrayWithObjects:{handlers:s,default:!0},ObjectWithIterableObjects:{handlers:d},ObjectWithNamedKeyObjects:{handlers:v}},D=function(e){var r,n;return A||(null==(r=W[e])?void 0:r.handlers)||(null==(n=Object.values(W).find(function(e){return!0===e.default}))?void 0:n.handlers)||function(){return{}}},E=m(),N=E.getFieldClassName,x=E.updateFormField,T=function(e){for(var r=arguments.length,n=Array(r>1?r-1:0),t=1;t<r;t++)n[t-1]=arguments[t];return D(e).apply(P,u(n))}(k,{form:F,setForm:h,FormFields:g}),B=T.getFieldData,K=T.getFormField,L=T.setFormFields,q=T.setFormField,M=T.getFormFieldsAsArray,H=T.getFormFieldsKeys,U=T.removeAllFormFields,G=T.removeFormField,V=T.removeFormFields,Y=o(f({}),2),$=Y[0],z=Y[1],J=function(e,r){$[e]&&"object"===i($[e])&&Object.values($[e]).map(function(e){return e({value:r,form:F}),null})},Q=function(e,r){var o;if(r===(null==(o=K(e))?void 0:o.value))return!1;J(e,r),q(function(e){return t(n({},e),{error:"",value:r})},e)},X=o(f([]),2),Z=X[0],_=X[1],ee=o(f(!1),2),er=ee[0],en=ee[1],et=o(f([]),2),eo=et[0],eu=et[1],ei=function(e){eu(function(r){return r.filter(function(r){return!e.includes(r)})})},el=o(f(!1),2),ec=el[0],ea=el[1],ef=function(){return ea(!0)},es=function(){return ea(!1)},ed=(e=function(e){var r,n,t;return function(e,r){var n,t,o,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(c){var a=[l,c];if(n)throw TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(u=0)),u;)try{if(n=1,t&&(o=2&a[0]?t.return:a[0]?t.throw||((o=t.return)&&o.call(t),0):t.next)&&!(o=o.call(t,a[1])).done)return o;switch(t=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return u.label++,{value:a[1],done:!1};case 5:u.label++,t=a[1],a=[0];continue;case 7:a=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){u=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){u.label=a[1];break}if(6===a[0]&&u.label<o[1]){u.label=o[1],o=a;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(a);break}o[2]&&u.ops.pop(),u.trys.pop();continue}a=r.call(e,u)}catch(e){a=[6,e],t=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}}}(this,function(o){switch(o.label){case 0:if(!I)return[2,!1];return r=document.querySelectorAll('a, button, input, [tabindex]:not([tabindex="-1"])'),[4,new Promise(function(n){r.forEach(function(r,t){r===e.target&&n(t)})})];case 1:if(!(n=o.sent())||(t=n+1)>=r.length)return[2,!1];return r[t].focus(),[2]}})},l=function(){var n=this,t=arguments;return new Promise(function(o,u){var i=e.apply(n,t);function l(e){r(i,o,u,l,c,"next",e)}function c(e){r(i,o,u,l,c,"throw",e)}l(void 0)})},function(e){return l.apply(this,arguments)}),ev=function(){for(var e=arguments.length,r=Array(e),n=0;n<e;n++)r[n]=arguments[n];var t=r.reduce(function(e,r){var n,t;return(n=null==r?void 0:r.nativeEvent,null!=(t=KeyboardEvent)&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](n):n instanceof t)?r:e},null);if(!t)return!1;13===t.keyCode&&ed(t)};a(function(){es()},[O]),a(function(){er&&es(!1),0!==eo.length&&L(function(e){return eo.reduce(function(e,r){var n,t=B(r),o=K(r)?K(r):t;if((null==o?void 0:o.className)&&(null==o||null==(n=o.className)?void 0:n.indexOf(N(r,O)))!==-1||(o.className="".concat(null==o?void 0:o.className," ").concat(N(r,O))),"object"===i(null==t?void 0:t.label)&&(o.label=t.label[O]||t.label.default),o.ref=c(),o.wrapperRef=c(),o.isValueChangedByUser=!1,I){var l=o.onKeyDown||function(){};o.onKeyDown=function(){for(var e=arguments.length,r=Array(e),n=0;n<e;n++)r[n]=arguments[n];ev.apply(void 0,u(r)),l.apply(void 0,u(r))}}return ez(r,function(){var e,n,t,u=null==(t=K(r))||null==(n=t.ref)||null==(e=n.current)?void 0:e.querySelector((null==o?void 0:o.focusSelector)||"input"),i=function(){return q({isValueChangedByUser:!0},r)};null==u||u.addEventListener("paste",i,{once:!0}),null==u||u.addEventListener("keypress",i,{once:!0})},!0),x(e,o,r)},e)})},[eo]);var em=o(f([]),2),eb=em[0],ey=em[1],ep=function(e,r){ey(function(t){var o=u(t);return o[e]=n({},t[e],r),o})},eF=function(e){ey(function(r){return r.slice().filter(function(r,n){return n!==e})})},eh=function(){eb.map(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.once,n=e.isWorkedOut,t=e.cb,o=arguments.length>1?arguments[1]:void 0;return r&&n||((void 0===t?function(){}:t)(F),r?eF(o):ep(o,{isWorkedOut:!0})),null})};a(function(){if(!ec&&eb.length){var e=H(F);eo.reduce(function(r,n){return e.includes(n)||(r=!1),r},!0)&&(ef(!0),eh())}},[F,eo,eb]);var eO=function(){var e=M(),r=null==e?void 0:e.reduce(function(e,r){return(null==r?void 0:r.errorLabelHightlite)&&e.push(t(n({},r),{className:N(null==r?void 0:r.key,O)})),e},[]);null==r||r.map(function(e){var r=document.querySelector(".".concat(null==e?void 0:e.className));return r&&(r.classList.remove("errorLabelHightlite"),(null==e?void 0:e.error)&&r.classList.add("errorLabelHightlite")),null})};a(function(){eO()},[F]);var eg=o(f(!1),2),ej=eg[0],ek=eg[1],ew=o(f(null),2),eA=ew[0],eS=ew[1],eR=function(){return ek(!0)},eC=function(){return ek(!1)},eI=function(e){var r=e.key,n=e.cb,t=void 0===n?function(){}:n,o=e.form,u=e.field,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"focus";if(!r&&!u)return null;o||(o=F);var l=u||K(r,o);return!!l&&!!l.ref&&("focus"===i&&R.onlyEmptyFieldAutoFocus&&(null==l?void 0:l.value)?null:void setTimeout(function(){var e,r;null==(r=l.ref.current)||null==(e=r.querySelector((null==l?void 0:l.focusSelector)||"input"))||e[i](),t()},50))},eP=function(e){var r=e.key,n=e.cb;return eI({key:r,cb:void 0===n?function(){}:n,form:e.form,field:e.field},"focus")},eW=function(){for(var e=null,r=0;r<eo.length&&!e;++r){var n=K(eo[r]);!n||(null==n?void 0:n.disabled)||(e=n)}if(!e)return!1;if(R.onlyEmptyFieldAutoFocus&&(null==e?void 0:e.value))return eR(),!1;eS(e.key);var t=function(){q({value:e.value},e.key),eR()};setTimeout(function(){return eP({key:e.key,cb:t,form:F})},50)},eD=o(f({}),2),eE=eD[0],eN=eD[1],ex=function(e,r){eN(function(t){var o=n({},t);return t[e]||(o[e]=[]),o[e].push(r),o})},eT=function(e){var r;if(!Array.isArray(eE[e]))return null;null==(r=eE[e])||r.map(function(e){return e()})},eB=o(f([]),2),eK=eB[0],eL=eB[1],eq=function(e){eL(function(r){return r.filter(function(r){return r!==e})})};a(function(){if(R.setAutoFocus&&!ej&&!eA&&ec&&eW(),eK.length){var e;null==(e=H(F))||e.map(function(e){var r,n;return eK.includes(e)&&(null==(n=K(e))||null==(r=n.value)?void 0:r.length)===0&&eP({key:e,form:F,cb:function(){eq(e),eT(e)}}),null})}},[F,eK,ej,ec]),a(function(){eS(null)},[ej]),a(function(){eC()},[O]);var eM=o(f({}),2),eH=eM[0],eU=eM[1],eG=o(f(!1),2),eV=eG[0],eY=eG[1],e$=function(){!eV&&eo.length&&(eo.map(function(e){return q({isOnRenderObserversWorkedOut:!1},e),e}),eY(!0))},ez=function(e,r){var n=!(arguments.length>2)||void 0===arguments[2]||arguments[2],t=null;return eU(function(o){return o[e]||(o[e]={}),t=Object.keys(o[e]).length||0,o[e][t]={f:r,isOnceCallable:n},o}),t},eJ=function(e,r,t){eU(function(o){return o[e]&&(o[e][r]=n({},o[e][r],t)),o})},eQ=function(e,r){if(eH[e]&&"object"===i(eH[e])){var n=Object.values(eH[e]).filter(function(e){return!(null==e?void 0:e.isObserverWorkedOut)});if(0===n.length)return null;q({isOnRenderObserversWorkedOut:!0},e),n.map(function(n,t){var o=n.f,u=n.isOnceCallable;return o(r),u&&eJ(e,t,{isObserverWorkedOut:!0}),null})}},eX=function(){var e;return null==(e=H(F))?void 0:e.map(function(e){var r=K(e);return(null==r?void 0:r.isOnRenderObserversWorkedOut)?{key:e,isWorkedOut:!1}:(eQ(e,r),{key:e,isWorkedOut:!0})})};return a(function(){e$(),eX()},[F]),a(function(){eY(!1)},[O]),{FormDataDrivers:W,addOnChangeObserver:function(e,r){var n=null;return z(function(t){return t[e]||(t[e]={}),n=t[e].length,t[e][n]=r,t}),n},removeOnChangeObserver:function(e,r){z(function(n){return n[e]&&(n[e]=Object.keys(n).filter(function(e){return e!==r}).map(function(r){return n[e][r]})),n})},onChangeObservers:$,onFieldChange:Q,toggleFormSubmitBlock:function(e,r){_(function(n){return n.includes(e)||!r?u(n.filter(function(r){return r!==e})):u(n).concat([e])})},clearFormSubmitBlockers:function(){return _([])},isFormSubmitBlocked:!!Z.length,renderFormFields:eo,setRenderFormFields:function(e){en(!0),ei(eo),eC(),eu(e)},addRenderFields:function(e){eu(function(r){return u(r).concat(u(e))})},removeRenderFields:ei,getFieldClassName:N,isInitFocused:ej,setFirstFieldInitFocused:eR,resetIsInitFocused:eC,setFieldFocus:eP,setFieldBlur:function(e){var r=e.key,n=e.cb;return eI({key:r,cb:void 0===n?function(){}:n,form:e.form,field:e.field},"blur")},setFirstFieldFocus:eW,autoFocusedField:eA,addFocusFieldOnRender:function(e,r){eL(function(r){return u(r).concat([e])}),r&&ex(e,r)},removeFocusFieldOnRender:eq,addOnFieldRenderedObserver:ez,removeOnFieldRenderedObserver:function(e,r){eU(function(n){return n[e]&&(n[e]=Object.keys(n).filter(function(e){return e!==r}).map(function(r){return n[e][r]})),n})},onFieldRenderedObservers:eH,updateFormField:x,addOnFormRenderObserver:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.once,t=void 0!==n&&n;ey(function(r){return u(r).concat([{cb:e,once:t,isWorkedOut:!1}])})},submitIsFormRendered:ef,resetIsFormRendered:es,renderFields:function(e){var r=e.form,n=void 0===r?F:r,t=e.fields,o=void 0===t?eo:t,u=e.cols;return b({form:n,fields:o,cols:void 0===u?1:u,RenderFieldComponent:e.RenderFieldComponent,onFieldChange:Q,FormDataDriver:D(k)})},scrollToField:function(e){var r,n=e.key,t=void 0===n?null:n,o=e.field,u=void 0===o?null:o,i=e.form;if(!t&&!u)return!1;i||(i=F),u||(u=K(t,i));var l=(null==u?void 0:u.wrapperRef)||(null==u?void 0:u.ref),c=Math.abs(Math.abs((null==l||null==(r=l.current)?void 0:r.getBoundingClientRect()).top)-Math.abs(window.scrollY))-16;window.scrollTo({top:c})},getFieldData:B,getFormField:K,setFormFields:L,setFormField:function(e,r){return q(e,r)},getFormFieldsAsArray:M,getFormFieldsKeys:H,removeAllFormFields:U,removeFormField:G,removeFormFields:V,addErrorsToForm:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:F;r||(r=F),L(function(r){return e.reduce(function(e,r){return x(e,{error:r.message},r.propertyPath)},r)})}}}