@os-design/form 1.0.85 → 1.0.87

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.
package/README.md CHANGED
@@ -544,11 +544,10 @@ const Form: React.FC = () => {
544
544
 
545
545
  ## 🎛️ Changing another fields
546
546
 
547
- In my practice, this came in handy in the following cases:
547
+ In my practice, this came in handy in 2 cases:
548
548
 
549
549
  1. To generate a field value by specific field. For example, to generate a meta title of a blog post by its title.
550
- 2. To aggregate multiple field values. For example, to sum them up.
551
- 3. To reset some field values if a specific field is changed.
550
+ 2. To reset some field values if a specific field is changed.
552
551
 
553
552
  Let's consider the first case. To implement it, use the `useTransformer` hook.
554
553
 
@@ -568,11 +567,10 @@ const Form: React.FC = () => {
568
567
  console.log(form.values.getAll());
569
568
  }, []);
570
569
 
571
- // Note the first argument is a tuple
572
- useTransformer(['title'] as const, ([title]) => ({
570
+ useTransformer('title', (value) => ({
573
571
  // Update any number of fields, not just one.
574
572
  // You can use a path (e.g. `'options.min': 0`).
575
- metaTitle: `The length of the title is ${title.length}`,
573
+ metaTitle: `The length of the title is ${value.length}`,
576
574
  }));
577
575
 
578
576
  return (
package/dist/cjs/index.js CHANGED
@@ -117,32 +117,9 @@ var createUseErrorHook = function createUseErrorHook(form) {
117
117
  };
118
118
  };
119
119
  var createUseTransformerHook = function createUseTransformerHook(form) {
120
- return function (names, transformer) {
121
- var _useState5 = (0, _react.useState)(Array(names.length).fill(undefined).map(function (_, index) {
122
- return form.values.get(names[index]);
123
- })),
124
- _useState6 = _slicedToArray(_useState5, 2),
125
- values = _useState6[0],
126
- setValues = _useState6[1];
127
- (0, _react.useEffect)(function () {
128
- var subscriptions = names.map(function (key, index) {
129
- return form.values.subscribe(key, function (value) {
130
- return (
131
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
- setValues(function (prev) {
133
- var next = prev.slice();
134
- next[index] = value;
135
- return next;
136
- })
137
- );
138
- });
139
- });
140
- return function () {
141
- subscriptions.forEach(function (subcription) {
142
- subcription.unsubscribe();
143
- });
144
- };
145
- }, [names]);
120
+ var useValue = createUseValueHook(form);
121
+ return function (name, transformer) {
122
+ var value = useValue(name);
146
123
  var shouldTransformRef = (0, _react.useRef)(false);
147
124
  var transformerRef = (0, _react.useRef)(transformer);
148
125
  (0, _react.useEffect)(function () {
@@ -150,7 +127,7 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
150
127
  }, [transformer]);
151
128
  (0, _react.useEffect)(function () {
152
129
  if (shouldTransformRef.current) {
153
- var partialValues = transformerRef.current(values);
130
+ var partialValues = transformerRef.current(value);
154
131
  Object.entries(partialValues).forEach(function (_ref) {
155
132
  var _ref2 = _slicedToArray(_ref, 2),
156
133
  n = _ref2[0],
@@ -161,7 +138,7 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
161
138
  } else {
162
139
  shouldTransformRef.current = true;
163
140
  }
164
- }, [values]);
141
+ }, [value]);
165
142
  };
166
143
  };
167
144
  var createFieldComponent = function createFieldComponent(form) {
@@ -224,10 +201,10 @@ var createFieldComponent = function createFieldComponent(form) {
224
201
  };
225
202
  };
226
203
  var useModifiedFields = function useModifiedFields(form) {
227
- var _useState7 = (0, _react.useState)([]),
228
- _useState8 = _slicedToArray(_useState7, 2),
229
- modifiedFields = _useState8[0],
230
- setModifiedFields = _useState8[1];
204
+ var _useState5 = (0, _react.useState)([]),
205
+ _useState6 = _slicedToArray(_useState5, 2),
206
+ modifiedFields = _useState6[0],
207
+ setModifiedFields = _useState6[1];
231
208
  var modifiedFieldsRef = (0, _react.useRef)(modifiedFields);
232
209
  (0, _react.useEffect)(function () {
233
210
  modifiedFieldsRef.current = modifiedFields;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","require","_Form","_interopRequireDefault","_useFormContext","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_isEqual","_path","_useDeepEqualMemo","_BroadcastObserverManager","_ErrorObserverManager","_types","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","_typeof","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","obj","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","iter","Symbol","iterator","Array","from","isArray","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","o","minLen","toString","slice","constructor","name","test","len","length","arr2","l","f","next","done","push","value","createUseValueHook","form","_useState","useState","values","_useState2","setValue","useEffect","subscription","subscribe","v","unsubscribe","createUseErrorHook","_useState3","errors","_useState4","createUseTransformerHook","names","transformer","_useState5","fill","undefined","map","_","index","_useState6","setValues","subscriptions","prev","subcription","shouldTransformRef","useRef","transformerRef","current","partialValues","entries","_ref","_ref2","createFieldComponent","useValue","useError","props","data","_props$transformer","render","error","initValue","useMemo","initValues","modified","isEqual","reset","useCallback","onChange","renderRef","inputProps","fieldState","memoizedData","useDeepEqualMemo","useModifiedFields","_useState7","_useState8","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","concat","useFormResponse","Field","useTransformer","useForm","memoizedInitValues","formRef","Form","useExistingForm","useFormContext","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { Path, PathArrayReturn, PathReturn, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<\n TValues extends Values,\n TNames extends Path<TValues>[],\n> = (values: PathArrayReturn<TValues, TNames>) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TNames extends Path<TValues>[]>(\n names: TNames,\n transformer: Transformer<TValues, TNames>\n ) => {\n const [values, setValues] = useState(\n Array(names.length)\n .fill(undefined)\n .map((_, index) => form.values.get(names[index])) as PathArrayReturn<\n TValues,\n TNames\n >\n );\n\n useEffect(() => {\n const subscriptions = names.map((key, index) =>\n form.values.subscribe(key, (value) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setValues((prev: any) => {\n const next = prev.slice();\n next[index] = value;\n return next;\n })\n )\n );\n return () => {\n subscriptions.forEach((subcription) => {\n subcription.unsubscribe();\n });\n };\n }, [names]);\n\n const shouldTransformRef = useRef(false);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n if (shouldTransformRef.current) {\n const partialValues = transformerRef.current(values);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n } else {\n shouldTransformRef.current = true;\n }\n }, [values]);\n };\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue, TData> {\n name: TName;\n data?: TData;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState,\n data: TData\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>, TData>(\n props: FieldProps<TName, PathReturn<TValues, TName>, TData>\n ) => {\n const { name, data, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n },\n [name]\n );\n\n // Reset the error when the value was changed\n useEffect(() => {\n form.errors.set(name, undefined);\n }, [name, value]);\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n const memoizedData = useDeepEqualMemo(() => data as TData, [data]);\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState, memoizedData),\n [fieldState, inputProps, memoizedData]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_react","require","_Form","_interopRequireDefault","_useFormContext","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_isEqual","_path","_useDeepEqualMemo","_BroadcastObserverManager","_ErrorObserverManager","_types","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","_typeof","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","obj","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","iter","Symbol","iterator","Array","from","isArray","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","o","minLen","toString","slice","constructor","name","test","len","length","arr2","l","f","next","done","push","value","createUseValueHook","form","_useState","useState","values","_useState2","setValue","useEffect","subscription","subscribe","v","unsubscribe","createUseErrorHook","_useState3","errors","_useState4","createUseTransformerHook","useValue","transformer","shouldTransformRef","useRef","transformerRef","current","partialValues","entries","_ref","_ref2","createFieldComponent","useError","props","data","_props$transformer","render","error","initValue","useMemo","initValues","modified","isEqual","reset","useCallback","onChange","undefined","renderRef","inputProps","fieldState","memoizedData","useDeepEqualMemo","useModifiedFields","_useState5","_useState6","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","concat","useFormResponse","Field","useTransformer","useForm","memoizedInitValues","formRef","Form","useExistingForm","useFormContext","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { Path, PathReturn, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<TValues extends Values, TName extends Path<TValues>> = (\n value: PathReturn<TValues, TName>\n) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n const shouldTransformRef = useRef(false);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n if (shouldTransformRef.current) {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n } else {\n shouldTransformRef.current = true;\n }\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue, TData> {\n name: TName;\n data?: TData;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState,\n data: TData\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>, TData>(\n props: FieldProps<TName, PathReturn<TValues, TName>, TData>\n ) => {\n const { name, data, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n },\n [name]\n );\n\n // Reset the error when the value was changed\n useEffect(() => {\n form.errors.set(name, undefined);\n }, [name, value]);\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n const memoizedData = useDeepEqualMemo(() => data as TData, [data]);\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState, memoizedData),\n [fieldState, inputProps, memoizedData]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAQA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,IAAAG,eAAA,GAAAC,uBAAA,CAAAJ,OAAA;AASAK,MAAA,CAAAC,IAAA,CAAAH,eAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,eAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAb,eAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AARA,IAAAS,QAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,KAAA,GAAAlB,OAAA;AACA,IAAAmB,iBAAA,GAAAjB,sBAAA,CAAAF,OAAA;AAEA,IAAAoB,yBAAA,GAAApB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAc,yBAAA,EAAAb,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAY,yBAAA,CAAAZ,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAI,yBAAA,CAAAZ,GAAA;IAAA;EAAA;AAAA;AACA,IAAAa,qBAAA,GAAArB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAe,qBAAA,EAAAd,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAa,qBAAA,CAAAb,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAK,qBAAA,CAAAb,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAc,MAAA,GAAAtB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAgB,MAAA,EAAAf,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAc,MAAA,CAAAd,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAM,MAAA,CAAAd,GAAA;IAAA;EAAA;AAAA;AAAwB,SAAAe,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAApB,wBAAAoB,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,sBAAAA,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAX,GAAA,CAAAQ,CAAA,OAAAO,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAA5B,MAAA,CAAAS,cAAA,IAAAT,MAAA,CAAA6B,wBAAA,WAAAC,CAAA,IAAAX,CAAA,oBAAAW,CAAA,OAAAzB,cAAA,CAAAC,IAAA,CAAAa,CAAA,EAAAW,CAAA,SAAAC,CAAA,GAAAH,CAAA,GAAA5B,MAAA,CAAA6B,wBAAA,CAAAV,CAAA,EAAAW,CAAA,UAAAC,CAAA,KAAAA,CAAA,CAAApB,GAAA,IAAAoB,CAAA,CAAAC,GAAA,IAAAhC,MAAA,CAAAS,cAAA,CAAAiB,CAAA,EAAAI,CAAA,EAAAC,CAAA,IAAAL,CAAA,CAAAI,CAAA,IAAAX,CAAA,CAAAW,CAAA,YAAAJ,CAAA,cAAAP,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAU,GAAA,CAAAb,CAAA,EAAAO,CAAA,GAAAA,CAAA;AAAA,SAAA7B,uBAAAoC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAV,UAAA,GAAAU,GAAA,gBAAAA,GAAA;AAAA,SAAAC,mBAAAC,GAAA,WAAAC,kBAAA,CAAAD,GAAA,KAAAE,gBAAA,CAAAF,GAAA,KAAAG,2BAAA,CAAAH,GAAA,KAAAI,kBAAA;AAAA,SAAAA,mBAAA,cAAAC,SAAA;AAAA,SAAAH,iBAAAI,IAAA,eAAAC,MAAA,oBAAAD,IAAA,CAAAC,MAAA,CAAAC,QAAA,aAAAF,IAAA,+BAAAG,KAAA,CAAAC,IAAA,CAAAJ,IAAA;AAAA,SAAAL,mBAAAD,GAAA,QAAAS,KAAA,CAAAE,OAAA,CAAAX,GAAA,UAAAY,iBAAA,CAAAZ,GAAA;AAAA,SAAAa,eAAAb,GAAA,EAAAJ,CAAA,WAAAkB,eAAA,CAAAd,GAAA,KAAAe,qBAAA,CAAAf,GAAA,EAAAJ,CAAA,KAAAO,2BAAA,CAAAH,GAAA,EAAAJ,CAAA,KAAAoB,gBAAA;AAAA,SAAAA,iBAAA,cAAAX,SAAA;AAAA,SAAAF,4BAAAc,CAAA,EAAAC,MAAA,SAAAD,CAAA,qBAAAA,CAAA,sBAAAL,iBAAA,CAAAK,CAAA,EAAAC,MAAA,OAAA3B,CAAA,GAAA1B,MAAA,CAAAI,SAAA,CAAAkD,QAAA,CAAAhD,IAAA,CAAA8C,CAAA,EAAAG,KAAA,aAAA7B,CAAA,iBAAA0B,CAAA,CAAAI,WAAA,EAAA9B,CAAA,GAAA0B,CAAA,CAAAI,WAAA,CAAAC,IAAA,MAAA/B,CAAA,cAAAA,CAAA,mBAAAkB,KAAA,CAAAC,IAAA,CAAAO,CAAA,OAAA1B,CAAA,+DAAAgC,IAAA,CAAAhC,CAAA,UAAAqB,iBAAA,CAAAK,CAAA,EAAAC,MAAA;AAAA,SAAAN,kBAAAZ,GAAA,EAAAwB,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAxB,GAAA,CAAAyB,MAAA,EAAAD,GAAA,GAAAxB,GAAA,CAAAyB,MAAA,WAAA7B,CAAA,MAAA8B,IAAA,OAAAjB,KAAA,CAAAe,GAAA,GAAA5B,CAAA,GAAA4B,GAAA,EAAA5B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAAI,GAAA,CAAAJ,CAAA,UAAA8B,IAAA;AAAA,SAAAX,sBAAA7B,CAAA,EAAAyC,CAAA,QAAAxC,CAAA,WAAAD,CAAA,gCAAAqB,MAAA,IAAArB,CAAA,CAAAqB,MAAA,CAAAC,QAAA,KAAAtB,CAAA,4BAAAC,CAAA,QAAAH,CAAA,EAAAO,CAAA,EAAAK,CAAA,EAAAD,CAAA,EAAAF,CAAA,OAAAmC,CAAA,OAAAX,CAAA,iBAAArB,CAAA,IAAAT,CAAA,GAAAA,CAAA,CAAAhB,IAAA,CAAAe,CAAA,GAAA2C,IAAA,QAAAF,CAAA,QAAA9D,MAAA,CAAAsB,CAAA,MAAAA,CAAA,UAAAyC,CAAA,uBAAAA,CAAA,IAAA5C,CAAA,GAAAY,CAAA,CAAAzB,IAAA,CAAAgB,CAAA,GAAA2C,IAAA,MAAArC,CAAA,CAAAsC,IAAA,CAAA/C,CAAA,CAAAgD,KAAA,GAAAvC,CAAA,CAAAgC,MAAA,KAAAE,CAAA,GAAAC,CAAA,iBAAA1C,CAAA,IAAA+B,CAAA,OAAA1B,CAAA,GAAAL,CAAA,yBAAA0C,CAAA,YAAAzC,CAAA,eAAAQ,CAAA,GAAAR,CAAA,cAAAtB,MAAA,CAAA8B,CAAA,MAAAA,CAAA,2BAAAsB,CAAA,QAAA1B,CAAA,aAAAE,CAAA;AAAA,SAAAqB,gBAAAd,GAAA,QAAAS,KAAA,CAAAE,OAAA,CAAAX,GAAA,UAAAA,GAAA;AAGxB,IAAMiC,kBAAkB,GACtB,SADIA,kBAAkBA,CACGC,IAAmB;EAAA,OAC5C,UAA8BZ,IAAW,EAAK;IAC5C,IAAAa,SAAA,GAA0B,IAAAC,eAAQ,EAChCF,IAAI,CAACG,MAAM,CAAC7D,GAAG,CAAC8C,IAAI,CACtB,CAAC;MAAAgB,UAAA,GAAAzB,cAAA,CAAAsB,SAAA;MAFMH,KAAK,GAAAM,UAAA;MAAEC,QAAQ,GAAAD,UAAA;IAItB,IAAAE,gBAAS,EAAC,YAAM;MACd,IAAMC,YAAY,GAAGP,IAAI,CAACG,MAAM,CAACK,SAAS,CAACpB,IAAI,EAAE,UAACqB,CAAC,EAAK;QACtDJ,QAAQ,CAACI,CAAC,CAAC;MACb,CAAC,CAAC;MACF,OAAO;QAAA,OAAMF,YAAY,CAACG,WAAW,CAAC,CAAC;MAAA;IACzC,CAAC,EAAE,CAACtB,IAAI,CAAC,CAAC;IAEV,OAAOU,KAAK;EACd,CAAC;AAAA;AAEH,IAAMa,kBAAkB,GACtB,SADIA,kBAAkBA,CACGX,IAAmB;EAAA,OAC5C,UAA8BZ,IAAW,EAAK;IAC5C,IAAAwB,UAAA,GAA0B,IAAAV,eAAQ,EAChCF,IAAI,CAACa,MAAM,CAACvE,GAAG,CAAC8C,IAAI,CACtB,CAAC;MAAA0B,UAAA,GAAAnC,cAAA,CAAAiC,UAAA;MAFMd,KAAK,GAAAgB,UAAA;MAAET,QAAQ,GAAAS,UAAA;IAItB,IAAAR,gBAAS,EAAC,YAAM;MACd,IAAMC,YAAY,GAAGP,IAAI,CAACa,MAAM,CAACL,SAAS,CAACpB,IAAI,EAAE,UAACqB,CAAC,EAAK;QACtDJ,QAAQ,CAACI,CAAC,CAAC;MACb,CAAC,CAAC;MACF,OAAO;QAAA,OAAMF,YAAY,CAACG,WAAW,CAAC,CAAC;MAAA;IACzC,CAAC,EAAE,CAACtB,IAAI,CAAC,CAAC;IAEV,OAAOU,KAAK;EACd,CAAC;AAAA;AAQH,IAAMiB,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAC5Bf,IAAmB,EAChB;EACH,IAAMgB,QAAQ,GAAGjB,kBAAkB,CAACC,IAAI,CAAC;EACzC,OAAO,UACLZ,IAAW,EACX6B,WAAwC,EACrC;IACH,IAAMnB,KAAK,GAAGkB,QAAQ,CAAC5B,IAAI,CAAC;IAC5B,IAAM8B,kBAAkB,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;IAExC,IAAMC,cAAc,GAAG,IAAAD,aAAM,EAACF,WAAW,CAAC;IAC1C,IAAAX,gBAAS,EAAC,YAAM;MACdc,cAAc,CAACC,OAAO,GAAGJ,WAAW;IACtC,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;IAEjB,IAAAX,gBAAS,EAAC,YAAM;MACd,IAAIY,kBAAkB,CAACG,OAAO,EAAE;QAC9B,IAAMC,aAAa,GAAGF,cAAc,CAACC,OAAO,CAACvB,KAAK,CAAC;QACnDnE,MAAM,CAAC4F,OAAO,CAACD,aAAa,CAAC,CAACzF,OAAO,CAAC,UAAA2F,IAAA,EAAY;UAAA,IAAAC,KAAA,GAAA9C,cAAA,CAAA6C,IAAA;YAAVnE,CAAC,GAAAoE,KAAA;YAAEhB,CAAC,GAAAgB,KAAA;UAC1C;UACAzB,IAAI,CAACG,MAAM,CAACxC,GAAG,CAACN,CAAC,EAAmBoD,CAAQ,CAAC;QAC/C,CAAC,CAAC;MACJ,CAAC,MAAM;QACLS,kBAAkB,CAACG,OAAO,GAAG,IAAI;MACnC;IACF,CAAC,EAAE,CAACvB,KAAK,CAAC,CAAC;EACb,CAAC;AACH,CAAC;AAsBD,IAAM4B,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAA4B1B,IAAmB,EAAK;EAC5E,IAAMgB,QAAQ,GAAGjB,kBAAkB,CAACC,IAAI,CAAC;EACzC,IAAM2B,QAAQ,GAAGhB,kBAAkB,CAACX,IAAI,CAAC;EACzC,OAAO,UACL4B,KAA2D,EACxD;IACH,IAAQxC,IAAI,GAA2CwC,KAAK,CAApDxC,IAAI;MAAEyC,IAAI,GAAqCD,KAAK,CAA9CC,IAAI;MAAAC,kBAAA,GAAqCF,KAAK,CAAxCX,WAAW;MAAXA,WAAW,GAAAa,kBAAA,cAAG,UAACrB,CAAC;QAAA,OAAKA,CAAC;MAAA,IAAAqB,kBAAA;MAAEC,MAAM,GAAKH,KAAK,CAAhBG,MAAM;IAElD,IAAMjC,KAAK,GAAGkB,QAAQ,CAAC5B,IAAI,CAAC;IAC5B,IAAM4C,KAAK,GAAGL,QAAQ,CAACvC,IAAI,CAAC;IAE5B,IAAM6C,SAAS,GAAG,IAAAC,cAAO,EAAC;MAAA,OAAM,IAAA5F,SAAG,EAAC0D,IAAI,CAACmC,UAAU,EAAE/C,IAAI,CAAC;IAAA,GAAE,CAACA,IAAI,CAAC,CAAC;IACnE,IAAMgD,QAAQ,GAAG,IAAAF,cAAO,EACtB;MAAA,OAAM,CAAC,IAAAG,mBAAO,EAACvC,KAAK,EAAEmC,SAAS,CAAC;IAAA,GAChC,CAACA,SAAS,EAAEnC,KAAK,CACnB,CAAC;IACD,IAAMwC,KAAK,GAAG,IAAAC,kBAAW,EACvB;MAAA,OAAMvC,IAAI,CAACG,MAAM,CAACxC,GAAG,CAACyB,IAAI,EAAE6C,SAAS,CAAC;IAAA,GACtC,CAACA,SAAS,EAAE7C,IAAI,CAClB,CAAC;IAED,IAAMgC,cAAc,GAAG,IAAAD,aAAM,EAACF,WAAW,CAAC;IAC1C,IAAAX,gBAAS,EAAC,YAAM;MACdc,cAAc,CAACC,OAAO,GAAGJ,WAAW;IACtC,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;IAEjB,IAAMuB,QAAQ,GAAG,IAAAD,kBAAW,EAC1B,UAAC9B,CAA6B,EAAK;MACjCT,IAAI,CAACG,MAAM,CAACxC,GAAG,CAACyB,IAAI,EAAEgC,cAAc,CAACC,OAAO,CAACZ,CAAC,CAAC,CAAC;IAClD,CAAC,EACD,CAACrB,IAAI,CACP,CAAC;;IAED;IACA,IAAAkB,gBAAS,EAAC,YAAM;MACdN,IAAI,CAACa,MAAM,CAAClD,GAAG,CAACyB,IAAI,EAAEqD,SAAS,CAAC;IAClC,CAAC,EAAE,CAACrD,IAAI,EAAEU,KAAK,CAAC,CAAC;IAEjB,IAAM4C,SAAS,GAAG,IAAAvB,aAAM,EAACY,MAAM,CAAC;IAChC,IAAAzB,gBAAS,EAAC,YAAM;MACdoC,SAAS,CAACrB,OAAO,GAAGU,MAAM;IAC5B,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;IAEZ,IAAMY,UAAU,GAAG,IAAAT,cAAO,EAAC;MAAA,OAAO;QAAEpC,KAAK,EAALA,KAAK;QAAE0C,QAAQ,EAARA;MAAS,CAAC;IAAA,CAAC,EAAE,CAACA,QAAQ,EAAE1C,KAAK,CAAC,CAAC;IAC1E,IAAM8C,UAAU,GAAG,IAAAV,cAAO,EACxB;MAAA,OAAO;QAAEF,KAAK,EAALA,KAAK;QAAEI,QAAQ,EAARA,QAAQ;QAAEE,KAAK,EAALA;MAAM,CAAC;IAAA,CAAC,EAClC,CAACN,KAAK,EAAEI,QAAQ,EAAEE,KAAK,CACzB,CAAC;IAED,IAAMO,YAAY,GAAG,IAAAC,4BAAgB,EAAC;MAAA,OAAMjB,IAAI;IAAA,CAAS,EAAE,CAACA,IAAI,CAAC,CAAC;IAElE,OAAO,IAAAK,cAAO,EACZ;MAAA,OAAMQ,SAAS,CAACrB,OAAO,CAACsB,UAAU,EAAEC,UAAU,EAAEC,YAAY,CAAC;IAAA,GAC7D,CAACD,UAAU,EAAED,UAAU,EAAEE,YAAY,CACvC,CAAC;EACH,CAAC;AACH,CAAC;AAED,IAAME,iBAAiB,GAAG,SAApBA,iBAAiBA,CAA4B/C,IAAmB,EAAK;EACzE,IAAAgD,UAAA,GAA4C,IAAA9C,eAAQ,EAClD,EACF,CAAC;IAAA+C,UAAA,GAAAtE,cAAA,CAAAqE,UAAA;IAFME,cAAc,GAAAD,UAAA;IAAEE,iBAAiB,GAAAF,UAAA;EAIxC,IAAMG,iBAAiB,GAAG,IAAAjC,aAAM,EAAC+B,cAAc,CAAC;EAChD,IAAA5C,gBAAS,EAAC,YAAM;IACd8C,iBAAiB,CAAC/B,OAAO,GAAG6B,cAAc;EAC5C,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEpB,IAAMG,aAAa,GAAG,IAAAlC,aAAM,EAACnB,IAAI,CAACmC,UAAU,CAAC;EAC7C,IAAA7B,gBAAS,EAAC,YAAM;IACd+C,aAAa,CAAChC,OAAO,GAAGrB,IAAI,CAACmC,UAAU;EACzC,CAAC,EAAE,CAACnC,IAAI,CAACmC,UAAU,CAAC,CAAC;EAErB,IAAA7B,gBAAS,EAAC,YAAM;IACd,IAAMC,YAAY,GAAGP,IAAI,CAACG,MAAM,CAACmD,cAAc,CAAC,UAAClE,IAAI,EAAEU,KAAK,EAAK;MAC/D,IAAMyD,WAAW,GAAG,IAAAlB,mBAAO,EAACvC,KAAK,EAAE,IAAAxD,SAAG,EAAC+G,aAAa,CAAChC,OAAO,EAAEjC,IAAI,CAAC,CAAC;MACpE,IAAMoE,MAAM,GAAGJ,iBAAiB,CAAC/B,OAAO;MAExC,IAAImC,MAAM,CAACC,QAAQ,CAACrE,IAAI,CAAC,EAAE;QACzB,IAAImE,WAAW,EAAE;UACfJ,iBAAiB,CAACK,MAAM,CAACE,MAAM,CAAC,UAACC,KAAK;YAAA,OAAKA,KAAK,KAAKvE,IAAI;UAAA,EAAC,CAAC;QAC7D;MACF,CAAC,MAAM,IAAI,CAACmE,WAAW,EAAE;QACvBJ,iBAAiB,IAAAS,MAAA,CAAA/F,kBAAA,CAAK2F,MAAM,IAAEpE,IAAI,EAAC,CAAC;MACtC;IACF,CAAC,CAAC;IACF,OAAO;MAAA,OAAMmB,YAAY,CAACG,WAAW,CAAC,CAAC;IAAA;EACzC,CAAC,EAAE,CAACV,IAAI,CAACG,MAAM,CAAC,CAAC;EAEjB,OAAO+C,cAAc;AACvB,CAAC;AAED,IAAMW,eAAe,GAAG,SAAlBA,eAAeA,CAA4B7D,IAAmB,EAAK;EACvE,IAAM8D,KAAK,GAAG,IAAA5B,cAAO,EAAC;IAAA,OAAMR,oBAAoB,CAAC1B,IAAI,CAAC;EAAA,GAAE,CAACA,IAAI,CAAC,CAAC;EAC/D,IAAMgB,QAAQ,GAAG,IAAAkB,cAAO,EAAC;IAAA,OAAMnC,kBAAkB,CAACC,IAAI,CAAC;EAAA,GAAE,CAACA,IAAI,CAAC,CAAC;EAChE,IAAM2B,QAAQ,GAAG,IAAAO,cAAO,EAAC;IAAA,OAAMvB,kBAAkB,CAACX,IAAI,CAAC;EAAA,GAAE,CAACA,IAAI,CAAC,CAAC;EAChE,IAAM+D,cAAc,GAAG,IAAA7B,cAAO,EAAC;IAAA,OAAMnB,wBAAwB,CAACf,IAAI,CAAC;EAAA,GAAE,CAACA,IAAI,CAAC,CAAC;EAE5E,IAAMkD,cAAc,GAAGH,iBAAiB,CAAC/C,IAAI,CAAC;EAC9C,IAAMoC,QAAQ,GAAG,IAAAF,cAAO,EACtB;IAAA,OAAMgB,cAAc,CAAC3D,MAAM,GAAG,CAAC;EAAA,GAC/B,CAAC2D,cAAc,CAAC3D,MAAM,CACxB,CAAC;EAED,OAAO,IAAA2C,cAAO,EACZ;IAAA,OAAO;MACLlC,IAAI,EAAJA,IAAI;MACJ8D,KAAK,EAALA,KAAK;MACL9C,QAAQ,EAARA,QAAQ;MACRW,QAAQ,EAARA,QAAQ;MACRoC,cAAc,EAAdA,cAAc;MACdb,cAAc,EAAdA,cAAc;MACdd,QAAQ,EAARA;IACF,CAAC;EAAA,CAAC,EACF,CAAC0B,KAAK,EAAE9D,IAAI,EAAEoC,QAAQ,EAAEc,cAAc,EAAEvB,QAAQ,EAAEoC,cAAc,EAAE/C,QAAQ,CAC5E,CAAC;AACH,CAAC;AAEM,IAAMgD,OAAO,GAAA7H,OAAA,CAAA6H,OAAA,GAAG,SAAVA,OAAOA,CAClB7B,UAAmB,EAChB;EACH,IAAM8B,kBAAkB,GAAG,IAAAnB,4BAAgB,EACzC;IAAA,OAAMX,UAAU;EAAA,GAChB,CAACA,UAAU,CACb,CAAC;EAED,IAAM+B,OAAO,GAAG,IAAA/C,aAAM,EAAC,IAAIgD,gBAAI,CAAUF,kBAAkB,CAAC,CAAC;EAC7D,IAAA3D,gBAAS,EAAC,YAAM;IACd4D,OAAO,CAAC7C,OAAO,CAACc,UAAU,GAAG8B,kBAAkB;IAC/CC,OAAO,CAAC7C,OAAO,CAACiB,KAAK,CAAC,CAAC;EACzB,CAAC,EAAE,CAAC2B,kBAAkB,CAAC,CAAC;EAExB,OAAOJ,eAAe,CAACK,OAAO,CAAC7C,OAAO,CAAC;AACzC,CAAC;AAEM,IAAM+C,eAAe,GAAAjI,OAAA,CAAAiI,eAAA,GAAG,SAAlBA,eAAeA,CAAA,EAA0C;EACpE,IAAMpE,IAAI,GAAG,IAAAqE,0BAAc,EAAuB,CAAC;EACnD,IAAI,CAACrE,IAAI,EAAE,MAAM,IAAIsE,KAAK,CAAC,kCAAkC,CAAC;EAC9D,OAAOT,eAAe,CAAC7D,IAAI,CAAC;AAC9B,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> =\n IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type PathArrayReturn<T, K> = K extends []\n ? []\n : K extends [infer U, ...infer R]\n ? [PathReturn<T, U>, ...PathArrayReturn<T, R>]\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> =\n IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":"","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -29,38 +29,27 @@ const createUseErrorHook = form => name => {
29
29
  }, [name]);
30
30
  return value;
31
31
  };
32
- const createUseTransformerHook = form => (names, transformer) => {
33
- const [values, setValues] = useState(Array(names.length).fill(undefined).map((_, index) => form.values.get(names[index])));
34
- useEffect(() => {
35
- const subscriptions = names.map((key, index) => form.values.subscribe(key, value =>
36
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
- setValues(prev => {
38
- const next = prev.slice();
39
- next[index] = value;
40
- return next;
41
- })));
42
- return () => {
43
- subscriptions.forEach(subcription => {
44
- subcription.unsubscribe();
45
- });
46
- };
47
- }, [names]);
48
- const shouldTransformRef = useRef(false);
49
- const transformerRef = useRef(transformer);
50
- useEffect(() => {
51
- transformerRef.current = transformer;
52
- }, [transformer]);
53
- useEffect(() => {
54
- if (shouldTransformRef.current) {
55
- const partialValues = transformerRef.current(values);
56
- Object.entries(partialValues).forEach(([n, v]) => {
57
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
- form.values.set(n, v);
59
- });
60
- } else {
61
- shouldTransformRef.current = true;
62
- }
63
- }, [values]);
32
+ const createUseTransformerHook = form => {
33
+ const useValue = createUseValueHook(form);
34
+ return (name, transformer) => {
35
+ const value = useValue(name);
36
+ const shouldTransformRef = useRef(false);
37
+ const transformerRef = useRef(transformer);
38
+ useEffect(() => {
39
+ transformerRef.current = transformer;
40
+ }, [transformer]);
41
+ useEffect(() => {
42
+ if (shouldTransformRef.current) {
43
+ const partialValues = transformerRef.current(value);
44
+ Object.entries(partialValues).forEach(([n, v]) => {
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ form.values.set(n, v);
47
+ });
48
+ } else {
49
+ shouldTransformRef.current = true;
50
+ }
51
+ }, [value]);
52
+ };
64
53
  };
65
54
  const createFieldComponent = form => {
66
55
  const useValue = createUseValueHook(form);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","Form","useFormContext","isEqual","get","useDeepEqualMemo","default","createUseValueHook","form","name","value","setValue","values","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","names","transformer","setValues","Array","length","fill","undefined","map","_","index","subscriptions","key","prev","next","slice","forEach","subcription","shouldTransformRef","transformerRef","current","partialValues","Object","entries","n","set","createFieldComponent","useValue","useError","props","data","render","error","initValue","initValues","modified","reset","onChange","renderRef","inputProps","fieldState","memoizedData","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","useForm","memoizedInitValues","formRef","useExistingForm","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { Path, PathArrayReturn, PathReturn, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<\n TValues extends Values,\n TNames extends Path<TValues>[],\n> = (values: PathArrayReturn<TValues, TNames>) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TNames extends Path<TValues>[]>(\n names: TNames,\n transformer: Transformer<TValues, TNames>\n ) => {\n const [values, setValues] = useState(\n Array(names.length)\n .fill(undefined)\n .map((_, index) => form.values.get(names[index])) as PathArrayReturn<\n TValues,\n TNames\n >\n );\n\n useEffect(() => {\n const subscriptions = names.map((key, index) =>\n form.values.subscribe(key, (value) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setValues((prev: any) => {\n const next = prev.slice();\n next[index] = value;\n return next;\n })\n )\n );\n return () => {\n subscriptions.forEach((subcription) => {\n subcription.unsubscribe();\n });\n };\n }, [names]);\n\n const shouldTransformRef = useRef(false);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n if (shouldTransformRef.current) {\n const partialValues = transformerRef.current(values);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n } else {\n shouldTransformRef.current = true;\n }\n }, [values]);\n };\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue, TData> {\n name: TName;\n data?: TData;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState,\n data: TData\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>, TData>(\n props: FieldProps<TName, PathReturn<TValues, TName>, TData>\n ) => {\n const { name, data, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n },\n [name]\n );\n\n // Reset the error when the value was changed\n useEffect(() => {\n form.errors.set(name, undefined);\n }, [name, value]);\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n const memoizedData = useDeepEqualMemo(() => data as TData, [data]);\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState, memoizedData),\n [fieldState, inputProps, memoizedData]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","Form","useFormContext","isEqual","get","useDeepEqualMemo","default","createUseValueHook","form","name","value","setValue","values","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","useValue","transformer","shouldTransformRef","transformerRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","useError","props","data","render","error","initValue","initValues","modified","reset","onChange","undefined","renderRef","inputProps","fieldState","memoizedData","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","length","useForm","memoizedInitValues","formRef","useExistingForm","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { Path, PathReturn, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<TValues extends Values, TName extends Path<TValues>> = (\n value: PathReturn<TValues, TName>\n) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n const shouldTransformRef = useRef(false);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n if (shouldTransformRef.current) {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n } else {\n shouldTransformRef.current = true;\n }\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue, TData> {\n name: TName;\n data?: TData;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState,\n data: TData\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>, TData>(\n props: FieldProps<TName, PathReturn<TValues, TName>, TData>\n ) => {\n const { name, data, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n },\n [name]\n );\n\n // Reset the error when the value was changed\n useEffect(() => {\n form.errors.set(name, undefined);\n }, [name, value]);\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n const memoizedData = useDeepEqualMemo(() => data as TData, [data]);\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState, memoizedData),\n [fieldState, inputProps, memoizedData]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> =\n IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type PathArrayReturn<T, K> = K extends []\n ? []\n : K extends [infer U, ...infer R]\n ? [PathReturn<T, U>, ...PathArrayReturn<T, R>]\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> =\n IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,12 +1,12 @@
1
1
  import { ReactElement } from 'react';
2
2
  import Form from './Form';
3
- import { Path, PathArrayReturn, PathReturn, Values } from './types';
3
+ import { Path, PathReturn, Values } from './types';
4
4
  export * from './BroadcastObserverManager';
5
5
  export * from './ErrorObserverManager';
6
6
  export { default as Form } from './Form';
7
7
  export * from './types';
8
8
  export * from './useFormContext';
9
- export type Transformer<TValues extends Values, TNames extends Path<TValues>[]> = (values: PathArrayReturn<TValues, TNames>) => {
9
+ export type Transformer<TValues extends Values, TName extends Path<TValues>> = (value: PathReturn<TValues, TName>) => {
10
10
  [K in Path<TValues>]?: PathReturn<TValues, K>;
11
11
  };
12
12
  interface InputProps<TValue> {
@@ -29,7 +29,7 @@ export declare const useForm: <TValues extends Values = Values>(initValues: TVal
29
29
  Field: <TName extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>, TData>(props: FieldProps<TName, PathReturn<TValues, TName>, TData>) => ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
30
30
  useValue: <TName_1 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_1) => PathReturn<TValues, TName_1>;
31
31
  useError: <TName_2 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_2) => string | undefined;
32
- useTransformer: <TNames extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>[]>(names: TNames, transformer: Transformer<TValues, TNames>) => void;
32
+ useTransformer: <TName_3 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_3, transformer: Transformer<TValues, TName_3>) => void;
33
33
  modifiedFields: Path<TValues, Exclude<keyof TValues, keyof any[]> & string>[];
34
34
  modified: boolean;
35
35
  };
@@ -38,7 +38,7 @@ export declare const useExistingForm: <TValues extends Values = Values>() => {
38
38
  Field: <TName extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>, TData>(props: FieldProps<TName, PathReturn<TValues, TName>, TData>) => ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
39
39
  useValue: <TName_1 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_1) => PathReturn<TValues, TName_1>;
40
40
  useError: <TName_2 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_2) => string | undefined;
41
- useTransformer: <TNames extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>[]>(names: TNames, transformer: Transformer<TValues, TNames>) => void;
41
+ useTransformer: <TName_3 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_3, transformer: Transformer<TValues, TName_3>) => void;
42
42
  modifiedFields: Path<TValues, Exclude<keyof TValues, keyof any[]> & string>[];
43
43
  modified: boolean;
44
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAMb,MAAM,OAAO,CAAC;AACf,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMpE,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AAoCjC,MAAM,MAAM,WAAW,CACrB,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,IAC5B,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK;KAC/C,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;CAC9C,CAAC;AAuDF,UAAU,UAAU,CAAC,MAAM;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AACD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AACD,UAAU,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK;IACvC,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,MAAM,EAAE,CACN,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAC9B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,KAAK,KACR,YAAY,GAAG,IAAI,CAAC;CAC1B;AAwHD,eAAO,MAAM,OAAO,gDACN,OAAO;;;;;;;;CAcpB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;CAI3B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAMb,MAAM,OAAO,CAAC;AACf,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AAoCjC,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAC7E,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,KAC9B;KACF,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;CAC9C,CAAC;AAgCF,UAAU,UAAU,CAAC,MAAM;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AACD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AACD,UAAU,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK;IACvC,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,MAAM,EAAE,CACN,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAC9B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,KAAK,KACR,YAAY,GAAG,IAAI,CAAC;CAC1B;AAwHD,eAAO,MAAM,OAAO,gDACN,OAAO;;;;;;;;CAcpB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;CAI3B,CAAC"}
@@ -4,7 +4,6 @@ type OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;
4
4
  type IsAny<T> = unknown extends T & string ? true : false;
5
5
  export type Path<T, K = OwnKeyOf<T>> = IsAny<T> extends true ? string : T extends object ? K | (K extends keyof T ? T[K] extends object ? KeysWithSeparator<K, Path<T[K]>> : never : never) : never;
6
6
  export type PathReturn<T, K> = K extends keyof T ? T[K] : K extends `${infer U}${Separator}${infer R}` ? U extends keyof T ? PathReturn<T[U], R> : never : never;
7
- export type PathArrayReturn<T, K> = K extends [] ? [] : K extends [infer U, ...infer R] ? [PathReturn<T, U>, ...PathArrayReturn<T, R>] : never;
8
7
  export type Values<T = any> = Record<string, T>;
9
8
  export type Errors<T = any> = Record<Path<T>, string | undefined>;
10
9
  export type Observer<V = any> = (value: V) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG,GAAG,CAAC;AACrB,KAAK,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;AAE5E,KAAK,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;AAC1D,KAAK,KAAK,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAE1D,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IACjC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GACjB,MAAM,GACN,CAAC,SAAS,MAAM,GAEV,CAAC,GACD,CAAC,CAAC,SAAS,MAAM,CAAC,GACd,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAChC,KAAK,GACP,KAAK,CAAC,GACd,KAAK,CAAC;AAEd,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAC5C,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,EAAE,GAC1C,CAAC,SAAS,MAAM,CAAC,GACf,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,KAAK,GACP,KAAK,CAAC;AAEZ,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAC5C,EAAE,GACF,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAC7B,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC5C,KAAK,CAAC;AAEZ,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AACnD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG,GAAG,CAAC;AACrB,KAAK,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;AAE5E,KAAK,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;AAC1D,KAAK,KAAK,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAE1D,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IACjC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GACjB,MAAM,GACN,CAAC,SAAS,MAAM,GAEV,CAAC,GACD,CAAC,CAAC,SAAS,MAAM,CAAC,GACd,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAChC,KAAK,GACP,KAAK,CAAC,GACd,KAAK,CAAC;AAEd,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAC5C,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,EAAE,GAC1C,CAAC,SAAS,MAAM,CAAC,GACf,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,KAAK,GACP,KAAK,CAAC;AAEZ,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AACnD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@os-design/form",
3
- "version": "1.0.85",
3
+ "version": "1.0.87",
4
4
  "license": "UNLICENSED",
5
5
  "repository": "git@gitlab.com:os-team/libs/os-design.git",
6
6
  "main": "dist/cjs/index.js",
@@ -30,11 +30,11 @@
30
30
  "access": "public"
31
31
  },
32
32
  "devDependencies": {
33
- "@os-design/core": "^1.0.251",
33
+ "@os-design/core": "^1.0.252",
34
34
  "@os-design/icons": "^1.0.59"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "react": ">=18"
38
38
  },
39
- "gitHead": "a64ba37aaaab0b6b9b4ed522c166635391437a90"
39
+ "gitHead": "61aeade8e93442219e06e7bbf6a63e5fd06e887d"
40
40
  }
package/src/index.tsx CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  useState,
8
8
  } from 'react';
9
9
  import Form from './Form';
10
- import { Path, PathArrayReturn, PathReturn, Values } from './types';
10
+ import { Path, PathReturn, Values } from './types';
11
11
  import useFormContext from './useFormContext';
12
12
  import isEqual from './utils/isEqual';
13
13
  import { get } from './utils/path';
@@ -53,46 +53,21 @@ const createUseErrorHook =
53
53
  return value;
54
54
  };
55
55
 
56
- export type Transformer<
57
- TValues extends Values,
58
- TNames extends Path<TValues>[],
59
- > = (values: PathArrayReturn<TValues, TNames>) => {
56
+ export type Transformer<TValues extends Values, TName extends Path<TValues>> = (
57
+ value: PathReturn<TValues, TName>
58
+ ) => {
60
59
  [K in Path<TValues>]?: PathReturn<TValues, K>;
61
60
  };
62
61
 
63
- const createUseTransformerHook =
64
- <TValues extends Values>(form: Form<TValues>) =>
65
- <TNames extends Path<TValues>[]>(
66
- names: TNames,
67
- transformer: Transformer<TValues, TNames>
62
+ const createUseTransformerHook = <TValues extends Values>(
63
+ form: Form<TValues>
64
+ ) => {
65
+ const useValue = createUseValueHook(form);
66
+ return <TName extends Path<TValues>>(
67
+ name: TName,
68
+ transformer: Transformer<TValues, TName>
68
69
  ) => {
69
- const [values, setValues] = useState(
70
- Array(names.length)
71
- .fill(undefined)
72
- .map((_, index) => form.values.get(names[index])) as PathArrayReturn<
73
- TValues,
74
- TNames
75
- >
76
- );
77
-
78
- useEffect(() => {
79
- const subscriptions = names.map((key, index) =>
80
- form.values.subscribe(key, (value) =>
81
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
- setValues((prev: any) => {
83
- const next = prev.slice();
84
- next[index] = value;
85
- return next;
86
- })
87
- )
88
- );
89
- return () => {
90
- subscriptions.forEach((subcription) => {
91
- subcription.unsubscribe();
92
- });
93
- };
94
- }, [names]);
95
-
70
+ const value = useValue(name);
96
71
  const shouldTransformRef = useRef(false);
97
72
 
98
73
  const transformerRef = useRef(transformer);
@@ -102,7 +77,7 @@ const createUseTransformerHook =
102
77
 
103
78
  useEffect(() => {
104
79
  if (shouldTransformRef.current) {
105
- const partialValues = transformerRef.current(values);
80
+ const partialValues = transformerRef.current(value);
106
81
  Object.entries(partialValues).forEach(([n, v]) => {
107
82
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
83
  form.values.set(n as Path<TValues>, v as any);
@@ -110,8 +85,9 @@ const createUseTransformerHook =
110
85
  } else {
111
86
  shouldTransformRef.current = true;
112
87
  }
113
- }, [values]);
88
+ }, [value]);
114
89
  };
90
+ };
115
91
 
116
92
  interface InputProps<TValue> {
117
93
  value: TValue;
package/src/types.ts CHANGED
@@ -27,12 +27,6 @@ export type PathReturn<T, K> = K extends keyof T
27
27
  : never
28
28
  : never;
29
29
 
30
- export type PathArrayReturn<T, K> = K extends []
31
- ? []
32
- : K extends [infer U, ...infer R]
33
- ? [PathReturn<T, U>, ...PathArrayReturn<T, R>]
34
- : never;
35
-
36
30
  export type Values<T = any> = Record<string, T>;
37
31
  export type Errors<T = any> = Record<Path<T>, string | undefined>;
38
32