biblio-react 2.0.0-alpha2 → 2.0.0-alpha22
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/dist/index.js +1 -1
- package/dist/index.js.map +1 -0
- package/dist/index.modern.js +1 -1
- package/dist/index.modern.js.map +1 -0
- package/package.json +15 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/layout/AppBar.js","../node_modules/react-hook-form/dist/index.esm.mjs","../src/utils/useNuevo.js","../src/layout/contenidos/EtrGrid/NoRowsOverlay.js","../src/layout/contenidos/EtrGrid/useDeleteRowEtrGrid.js","../src/layout/contenidos/EtrGrid/useSaveRowEtrGrid.js","../src/layout/contenidos/EtrGrid/EtrGrid.js","../src/layout/contenidos/GE.js","../src/layout/ProgressContext.js","../src/utils/actions.js","../src/utils/hooks.js","../src/utils/useGetJson.js","../src/utils/useAjax.js","../src/utils/useUtils.js","../src/layout/GrillaEtriek.js","../src/utils/useInitGrilla.js","../src/utils/useInitFicha.js","../src/utils/utils.js","../src/layout/FichaContext.js","../src/layout/CreateEtriek.js","../node_modules/clsx/dist/clsx.m.js","../src/layout/DeleteButtonNoWarning.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/TabbedFormEtriek.js","../src/layout/themes.js","../node_modules/ra-language-english/dist/esm/index.js","../src/utils/i18n/en.js","../node_modules/@blackbox-vision/ra-language-spanish/dist-web/index.js","../src/utils/i18n/es.js","../src/layout/contenidos/useFieldController.js","../src/layout/contenidos/useContenidoController.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/EditEtriek.js","../src/layout/contenidos/ImageField.js","../src/layout/Layout.js","../src/layout/ListActionEtriek.js","../src/layout/contenidos/ListCheck.js","../src/layout/MultiTextField.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.js","../src/layout/ShowEtriek.js","../src/layout/TabbedGrillaEtriek.js","../src/layout/contenidos/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/TextField.js","../src/utils/useReferenceLabel.js"],"sourcesContent":["import LockIcon from '@mui/icons-material/Lock';\nimport VpnLockIcon from '@mui/icons-material/VpnLock';\nimport {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Typography,\n useMediaQuery,\n} from '@mui/material';\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport {\n AppBar,\n Logout,\n useResourceDefinitions,\n UserMenu,\n useTranslate,\n useUserMenu,\n} from 'react-admin';\nimport { Link } from 'react-router-dom';\n\nconst ConfigurationMenu = forwardRef((props, ref) => {\n const translate = useTranslate();\n const { onClose } = useUserMenu();\n const resourcesDefinitions = useResourceDefinitions();\n const existeCP = resourcesDefinitions['form_275'];\n const existePassword = resourcesDefinitions['form_59'];\n\n return [\n existeCP ? (\n <MenuItem\n component={Link}\n ref={ref}\n {...props}\n key=\"/form_275\"\n to=\"/form_275\"\n onClick={onClose}\n >\n <ListItemIcon>\n <LockIcon />\n </ListItemIcon>\n <ListItemText>{translate('pos.change_pin')}</ListItemText>\n </MenuItem>\n ) : null,\n existePassword ? (\n <MenuItem\n component={Link}\n ref={ref}\n {...props}\n key=\"/form_59\"\n to=\"/form_59\"\n onClick={onClose}\n >\n <ListItemIcon>\n <VpnLockIcon />\n </ListItemIcon>\n <ListItemText>{translate('pos.change_password')}</ListItemText>\n </MenuItem>\n ) : null,\n ];\n});\n\nconst CustomUserMenu = () => (\n <UserMenu>\n <ConfigurationMenu />\n <Logout />\n </UserMenu>\n);\n\nconst CustomAppBar = props => {\n const isLargeEnough = useMediaQuery(theme => theme.breakpoints.up('sm'));\n return (\n <AppBar {...props} color=\"secondary\" userMenu={<CustomUserMenu />}>\n <Typography\n variant=\"h6\"\n color=\"inherit\"\n sx={{\n flex: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n }}\n id=\"react-admin-title\"\n />\n {isLargeEnough && <Box component=\"span\" sx={{ flex: 1 }} />}\n </AppBar>\n );\n};\n\nexport default CustomAppBar;\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\r\nvar isObject = (value) => !isNullOrUndefined(value) &&\r\n !Array.isArray(value) &&\r\n isObjectType(value) &&\r\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\r\n ? isCheckBoxInput(event.target)\r\n ? event.target.checked\r\n : event.target.value\r\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar isUndefined = (val) => val === undefined;\n\nvar get = (obj, path, defaultValue) => {\r\n if (!path || !isObject(obj)) {\r\n return defaultValue;\r\n }\r\n const result = compact(path.split(/[,[\\].]+?/)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], obj);\r\n return isUndefined(result) || result === obj\r\n ? isUndefined(obj[path])\r\n ? defaultValue\r\n : obj[path]\r\n : result;\r\n};\n\nconst EVENTS = {\r\n BLUR: 'blur',\r\n FOCUS_OUT: 'focusout',\r\n CHANGE: 'change',\r\n};\r\nconst VALIDATION_MODE = {\r\n onBlur: 'onBlur',\r\n onChange: 'onChange',\r\n onSubmit: 'onSubmit',\r\n onTouched: 'onTouched',\r\n all: 'all',\r\n};\r\nconst INPUT_VALIDATION_RULES = {\r\n max: 'max',\r\n min: 'min',\r\n maxLength: 'maxLength',\r\n minLength: 'minLength',\r\n pattern: 'pattern',\r\n required: 'required',\r\n validate: 'validate',\r\n};\n\nconst HookFormContext = React.createContext(null);\r\n/**\r\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\r\n *\r\n * @returns return all useForm methods\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const methods = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * return (\r\n * <FormProvider {...methods} >\r\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\r\n * <NestedInput />\r\n * <input type=\"submit\" />\r\n * </form>\r\n * </FormProvider>\r\n * );\r\n * }\r\n *\r\n * function NestedInput() {\r\n * const { register } = useFormContext(); // retrieve all hook methods\r\n * return <input {...register(\"test\")} />;\r\n * }\r\n * ```\r\n */\r\nconst useFormContext = () => React.useContext(HookFormContext);\r\n/**\r\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\r\n *\r\n * @param props - all useFrom methods\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const methods = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * return (\r\n * <FormProvider {...methods} >\r\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\r\n * <NestedInput />\r\n * <input type=\"submit\" />\r\n * </form>\r\n * </FormProvider>\r\n * );\r\n * }\r\n *\r\n * function NestedInput() {\r\n * const { register } = useFormContext(); // retrieve all hook methods\r\n * return <input {...register(\"test\")} />;\r\n * }\r\n * ```\r\n */\r\nconst FormProvider = (props) => {\r\n const { children, ...data } = props;\r\n return (React.createElement(HookFormContext.Provider, { value: data }, children));\r\n};\n\nvar getProxyFormState = (formState, _proxyFormState, localProxyFormState, isRoot = true) => {\r\n const result = {};\r\n for (const key in formState) {\r\n Object.defineProperty(result, key, {\r\n get: () => {\r\n const _key = key;\r\n if (_proxyFormState[_key] !== VALIDATION_MODE.all) {\r\n _proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\r\n }\r\n localProxyFormState && (localProxyFormState[_key] = true);\r\n return formState[_key];\r\n },\r\n });\r\n }\r\n return result;\r\n};\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, isRoot) => {\r\n const { name, ...formState } = formStateData;\r\n return (isEmptyObject(formState) ||\r\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\r\n Object.keys(formState).find((key) => _proxyFormState[key] ===\r\n (!isRoot || VALIDATION_MODE.all)));\r\n};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar shouldSubscribeByName = (name, signalName, exact) => exact && signalName\r\n ? name === signalName\r\n : !name ||\r\n !signalName ||\r\n name === signalName ||\r\n convertToArrayPayload(name).some((currentName) => currentName &&\r\n (currentName.startsWith(signalName) ||\r\n signalName.startsWith(currentName)));\n\nfunction useSubscribe(props) {\r\n const _props = React.useRef(props);\r\n _props.current = props;\r\n React.useEffect(() => {\r\n const tearDown = (subscription) => {\r\n if (subscription) {\r\n subscription.unsubscribe();\r\n }\r\n };\r\n const subscription = !props.disabled &&\r\n _props.current.subject.subscribe({\r\n next: _props.current.callback,\r\n });\r\n return () => tearDown(subscription);\r\n }, [props.disabled]);\r\n}\n\n/**\r\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\r\n *\r\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, handleSubmit, control } = useForm({\r\n * defaultValues: {\r\n * firstName: \"firstName\"\r\n * }});\r\n * const { dirtyFields } = useFormState({\r\n * control\r\n * });\r\n * const onSubmit = (data) => console.log(data);\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(onSubmit)}>\r\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\r\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\r\n * <input type=\"submit\" />\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useFormState(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, disabled, name, exact } = props || {};\r\n const [formState, updateFormState] = React.useState(control._formState);\r\n const _localProxyFormState = React.useRef({\r\n isDirty: false,\r\n dirtyFields: false,\r\n touchedFields: false,\r\n isValidating: false,\r\n isValid: false,\r\n errors: false,\r\n });\r\n const _name = React.useRef(name);\r\n const _mounted = React.useRef(true);\r\n _name.current = name;\r\n const callback = React.useCallback((value) => _mounted.current &&\r\n shouldSubscribeByName(_name.current, value.name, exact) &&\r\n shouldRenderFormState(value, _localProxyFormState.current) &&\r\n updateFormState({\r\n ...control._formState,\r\n ...value,\r\n }), [control, exact]);\r\n useSubscribe({\r\n disabled,\r\n callback,\r\n subject: control._subjects.state,\r\n });\r\n React.useEffect(() => {\r\n _mounted.current = true;\r\n return () => {\r\n _mounted.current = false;\r\n };\r\n }, []);\r\n return getProxyFormState(formState, control._proxyFormState, _localProxyFormState.current, false);\r\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal) => {\r\n const isArray = Array.isArray(names);\r\n if (isString(names)) {\r\n isGlobal && _names.watch.add(names);\r\n return get(formValues, names);\r\n }\r\n if (isArray) {\r\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\r\n get(formValues, fieldName)));\r\n }\r\n isGlobal && (_names.watchAll = true);\r\n return formValues;\r\n};\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar objectHasFunction = (data) => {\r\n for (const key in data) {\r\n if (isFunction(data[key])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\n\n/**\r\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\r\n *\r\n * @remarks\r\n *\r\n * [API](https://react-hook-form.com/api/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\r\n *\r\n * @example\r\n * ```tsx\r\n * const { watch } = useForm();\r\n * const values = useWatch({\r\n * name: \"fieldName\"\r\n * control,\r\n * })\r\n * ```\r\n */\r\nfunction useWatch(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, name, defaultValue, disabled, exact, } = props || {};\r\n const _name = React.useRef(name);\r\n _name.current = name;\r\n const callback = React.useCallback((formState) => {\r\n if (shouldSubscribeByName(_name.current, formState.name, exact)) {\r\n const fieldValues = generateWatchOutput(_name.current, control._names, formState.values || control._formValues);\r\n updateValue(isUndefined(_name.current) ||\r\n (isObject(fieldValues) && !objectHasFunction(fieldValues))\r\n ? { ...fieldValues }\r\n : Array.isArray(fieldValues)\r\n ? [...fieldValues]\r\n : isUndefined(fieldValues)\r\n ? defaultValue\r\n : fieldValues);\r\n }\r\n }, [control, exact, defaultValue]);\r\n useSubscribe({\r\n disabled,\r\n subject: control._subjects.watch,\r\n callback,\r\n });\r\n const [value, updateValue] = React.useState(isUndefined(defaultValue)\r\n ? control._getWatch(name)\r\n : defaultValue);\r\n React.useEffect(() => {\r\n control._removeUnmounted();\r\n });\r\n return value;\r\n}\n\n/**\r\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\r\n *\r\n * @param props - the path name to the form field value, and validation rules.\r\n *\r\n * @returns field properties, field and form state. {@link UseControllerReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function Input(props) {\r\n * const { field, fieldState, formState } = useController(props);\r\n * return (\r\n * <div>\r\n * <input {...field} placeholder={props.name} />\r\n * <p>{fieldState.isTouched && \"Touched\"}</p>\r\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useController(props) {\r\n const methods = useFormContext();\r\n const { name, control = methods.control, shouldUnregister } = props;\r\n const isArrayField = isNameInFieldArray(control._names.array, name);\r\n const value = useWatch({\r\n control,\r\n name,\r\n defaultValue: get(control._formValues, name, get(control._defaultValues, name, props.defaultValue)),\r\n exact: true,\r\n });\r\n const formState = useFormState({\r\n control,\r\n name,\r\n });\r\n const _registerProps = React.useRef(control.register(name, {\r\n ...props.rules,\r\n value,\r\n }));\r\n React.useEffect(() => {\r\n const updateMounted = (name, value) => {\r\n const field = get(control._fields, name);\r\n if (field) {\r\n field._f.mount = value;\r\n }\r\n };\r\n updateMounted(name, true);\r\n return () => {\r\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\r\n (isArrayField\r\n ? _shouldUnregisterField && !control._stateFlags.action\r\n : _shouldUnregisterField)\r\n ? control.unregister(name)\r\n : updateMounted(name, false);\r\n };\r\n }, [name, control, isArrayField, shouldUnregister]);\r\n return {\r\n field: {\r\n name,\r\n value,\r\n onChange: React.useCallback((event) => {\r\n _registerProps.current.onChange({\r\n target: {\r\n value: getEventValue(event),\r\n name: name,\r\n },\r\n type: EVENTS.CHANGE,\r\n });\r\n }, [name]),\r\n onBlur: React.useCallback(() => {\r\n _registerProps.current.onBlur({\r\n target: {\r\n value: get(control._formValues, name),\r\n name: name,\r\n },\r\n type: EVENTS.BLUR,\r\n });\r\n }, [name, control]),\r\n ref: React.useCallback((elm) => {\r\n const field = get(control._fields, name);\r\n if (elm && field && elm.focus) {\r\n field._f.ref = {\r\n focus: () => elm.focus(),\r\n select: () => elm.select(),\r\n setCustomValidity: (message) => elm.setCustomValidity(message),\r\n reportValidity: () => elm.reportValidity(),\r\n };\r\n }\r\n }, [name, control._fields]),\r\n },\r\n formState,\r\n fieldState: Object.defineProperties({}, {\r\n invalid: {\r\n get: () => !!get(formState.errors, name),\r\n },\r\n isDirty: {\r\n get: () => !!get(formState.dirtyFields, name),\r\n },\r\n isTouched: {\r\n get: () => !!get(formState.touchedFields, name),\r\n },\r\n error: {\r\n get: () => get(formState.errors, name),\r\n },\r\n }),\r\n };\r\n}\n\n/**\r\n * Component based on `useController` hook to work with controlled component.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\r\n *\r\n * @param props - the path name to the form field value, and validation rules.\r\n *\r\n * @returns provide field handler functions, field and form state.\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { control } = useForm<FormValues>({\r\n * defaultValues: {\r\n * test: \"\"\r\n * }\r\n * });\r\n *\r\n * return (\r\n * <form>\r\n * <Controller\r\n * control={control}\r\n * name=\"test\"\r\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\r\n * <>\r\n * <input\r\n * onChange={onChange} // send value to hook form\r\n * onBlur={onBlur} // notify when input is touched\r\n * value={value} // return updated value\r\n * ref={ref} // set ref for focus management\r\n * />\r\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\r\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\r\n * </>\r\n * )}\r\n * />\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nconst Controller = (props) => props.render(useController(props));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\r\n ? {\r\n ...errors[name],\r\n types: {\r\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\r\n [type]: message || true,\r\n },\r\n }\r\n : {};\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nfunction set(object, path, value) {\r\n let index = -1;\r\n const tempPath = isKey(path) ? [path] : stringToPath(path);\r\n const length = tempPath.length;\r\n const lastIndex = length - 1;\r\n while (++index < length) {\r\n const key = tempPath[index];\r\n let newValue = value;\r\n if (index !== lastIndex) {\r\n const objValue = object[key];\r\n newValue =\r\n isObject(objValue) || Array.isArray(objValue)\r\n ? objValue\r\n : !isNaN(+tempPath[index + 1])\r\n ? []\r\n : {};\r\n }\r\n object[key] = newValue;\r\n object = object[key];\r\n }\r\n return object;\r\n}\n\nconst focusFieldBy = (fields, callback, fieldsNames) => {\r\n for (const key of fieldsNames || Object.keys(fields)) {\r\n const field = get(fields, key);\r\n if (field) {\r\n const { _f, ...currentField } = field;\r\n if (_f && callback(_f.name)) {\r\n if (_f.ref.focus && isUndefined(_f.ref.focus())) {\r\n break;\r\n }\r\n else if (_f.refs) {\r\n _f.refs[0].focus();\r\n break;\r\n }\r\n }\r\n else if (isObject(currentField)) {\r\n focusFieldBy(currentField, callback);\r\n }\r\n }\r\n }\r\n};\n\nvar generateId = () => {\r\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16 + d) % 16 | 0;\r\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\r\n });\r\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\r\n ? options.focusName ||\r\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\r\n : '';\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\r\n (_names.watchAll ||\r\n _names.watch.has(name) ||\r\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\r\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nvar updateFieldArrayRootError = (errors, error, name) => {\r\n const fieldArrayErrors = compact(get(errors, name));\r\n set(fieldArrayErrors, 'root', error[name]);\r\n set(errors, name, fieldArrayErrors);\r\n return errors;\r\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isMessage = (value) => isString(value) || React.isValidElement(value);\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRegex = (value) => value instanceof RegExp;\n\nconst defaultResult = {\r\n value: false,\r\n isValid: false,\r\n};\r\nconst validResult = { value: true, isValid: true };\r\nvar getCheckboxValue = (options) => {\r\n if (Array.isArray(options)) {\r\n if (options.length > 1) {\r\n const values = options\r\n .filter((option) => option && option.checked && !option.disabled)\r\n .map((option) => option.value);\r\n return { value: values, isValid: !!values.length };\r\n }\r\n return options[0].checked && !options[0].disabled\r\n ? // @ts-expect-error expected to work in the browser\r\n options[0].attributes && !isUndefined(options[0].attributes.value)\r\n ? isUndefined(options[0].value) || options[0].value === ''\r\n ? validResult\r\n : { value: options[0].value, isValid: true }\r\n : validResult\r\n : defaultResult;\r\n }\r\n return defaultResult;\r\n};\n\nconst defaultReturn = {\r\n isValid: false,\r\n value: null,\r\n};\r\nvar getRadioValue = (options) => Array.isArray(options)\r\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\r\n ? {\r\n isValid: true,\r\n value: option.value,\r\n }\r\n : previous, defaultReturn)\r\n : defaultReturn;\n\nfunction getValidateError(result, ref, type = 'validate') {\r\n if (isMessage(result) ||\r\n (Array.isArray(result) && result.every(isMessage)) ||\r\n (isBoolean(result) && !result)) {\r\n return {\r\n type,\r\n message: isMessage(result) ? result : '',\r\n ref,\r\n };\r\n }\r\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\r\n ? validationData\r\n : {\r\n value: validationData,\r\n message: '',\r\n };\n\nvar validateField = async (field, inputValue, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\r\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, disabled, } = field._f;\r\n if (!mount || disabled) {\r\n return {};\r\n }\r\n const inputRef = refs ? refs[0] : ref;\r\n const setCustomValidity = (message) => {\r\n if (shouldUseNativeValidation && inputRef.reportValidity) {\r\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || ' ');\r\n inputRef.reportValidity();\r\n }\r\n };\r\n const error = {};\r\n const isRadio = isRadioInput(ref);\r\n const isCheckBox = isCheckBoxInput(ref);\r\n const isRadioOrCheckbox = isRadio || isCheckBox;\r\n const isEmpty = ((valueAsNumber || isFileInput(ref)) && !ref.value) ||\r\n inputValue === '' ||\r\n (Array.isArray(inputValue) && !inputValue.length);\r\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\r\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\r\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\r\n error[name] = {\r\n type: exceedMax ? maxType : minType,\r\n message,\r\n ref,\r\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\r\n };\r\n };\r\n if (isFieldArray\r\n ? !Array.isArray(inputValue) || !inputValue.length\r\n : required &&\r\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\r\n (isBoolean(inputValue) && !inputValue) ||\r\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\r\n (isRadio && !getRadioValue(refs).isValid))) {\r\n const { value, message } = isMessage(required)\r\n ? { value: !!required, message: required }\r\n : getValueAndMessage(required);\r\n if (value) {\r\n error[name] = {\r\n type: INPUT_VALIDATION_RULES.required,\r\n message,\r\n ref: inputRef,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\r\n let exceedMax;\r\n let exceedMin;\r\n const maxOutput = getValueAndMessage(max);\r\n const minOutput = getValueAndMessage(min);\r\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\r\n const valueNumber = ref.valueAsNumber || +inputValue;\r\n if (!isNullOrUndefined(maxOutput.value)) {\r\n exceedMax = valueNumber > maxOutput.value;\r\n }\r\n if (!isNullOrUndefined(minOutput.value)) {\r\n exceedMin = valueNumber < minOutput.value;\r\n }\r\n }\r\n else {\r\n const valueDate = ref.valueAsDate || new Date(inputValue);\r\n if (isString(maxOutput.value)) {\r\n exceedMax = valueDate > new Date(maxOutput.value);\r\n }\r\n if (isString(minOutput.value)) {\r\n exceedMin = valueDate < new Date(minOutput.value);\r\n }\r\n }\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(error[name].message);\r\n return error;\r\n }\r\n }\r\n }\r\n if ((maxLength || minLength) &&\r\n !isEmpty &&\r\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\r\n const maxLengthOutput = getValueAndMessage(maxLength);\r\n const minLengthOutput = getValueAndMessage(minLength);\r\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\r\n inputValue.length > maxLengthOutput.value;\r\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\r\n inputValue.length < minLengthOutput.value;\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(error[name].message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (pattern && !isEmpty && isString(inputValue)) {\r\n const { value: patternValue, message } = getValueAndMessage(pattern);\r\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\r\n error[name] = {\r\n type: INPUT_VALIDATION_RULES.pattern,\r\n message,\r\n ref,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (validate) {\r\n if (isFunction(validate)) {\r\n const result = await validate(inputValue);\r\n const validateError = getValidateError(result, inputRef);\r\n if (validateError) {\r\n error[name] = {\r\n ...validateError,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(validateError.message);\r\n return error;\r\n }\r\n }\r\n }\r\n else if (isObject(validate)) {\r\n let validationResult = {};\r\n for (const key in validate) {\r\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\r\n break;\r\n }\r\n const validateError = getValidateError(await validate[key](inputValue), inputRef, key);\r\n if (validateError) {\r\n validationResult = {\r\n ...validateError,\r\n ...appendErrorsCurry(key, validateError.message),\r\n };\r\n setCustomValidity(validateError.message);\r\n if (validateAllFieldCriteria) {\r\n error[name] = validationResult;\r\n }\r\n }\r\n }\r\n if (!isEmptyObject(validationResult)) {\r\n error[name] = {\r\n ref: inputRef,\r\n ...validationResult,\r\n };\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n }\r\n setCustomValidity(true);\r\n return error;\r\n};\n\nfunction append(data, value) {\r\n return [...data, ...convertToArrayPayload(value)];\r\n}\n\nvar isWeb = typeof window !== 'undefined' &&\r\n typeof window.HTMLElement !== 'undefined' &&\r\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\r\n let copy;\r\n const isArray = Array.isArray(data);\r\n if (data instanceof Date) {\r\n copy = new Date(data);\r\n }\r\n else if (data instanceof Set) {\r\n copy = new Set(data);\r\n }\r\n else if (!(isWeb && (data instanceof Blob || data instanceof FileList)) &&\r\n (isArray || isObject(data))) {\r\n copy = isArray ? [] : {};\r\n for (const key in data) {\r\n if (isFunction(data[key])) {\r\n copy = data;\r\n break;\r\n }\r\n copy[key] = cloneObject(data[key]);\r\n }\r\n }\r\n else {\r\n return data;\r\n }\r\n return copy;\r\n}\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nvar getValidationModes = (mode) => ({\r\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\r\n isOnBlur: mode === VALIDATION_MODE.onBlur,\r\n isOnChange: mode === VALIDATION_MODE.onChange,\r\n isOnAll: mode === VALIDATION_MODE.all,\r\n isOnTouch: mode === VALIDATION_MODE.onTouched,\r\n});\n\nfunction insert(data, index, value) {\r\n return [\r\n ...data.slice(0, index),\r\n ...convertToArrayPayload(value),\r\n ...data.slice(index),\r\n ];\r\n}\n\nvar moveArrayAt = (data, from, to) => {\r\n if (!Array.isArray(data)) {\r\n return [];\r\n }\r\n if (isUndefined(data[to])) {\r\n data[to] = undefined;\r\n }\r\n data.splice(to, 0, data.splice(from, 1)[0]);\r\n return data;\r\n};\n\nfunction prepend(data, value) {\r\n return [...convertToArrayPayload(value), ...convertToArrayPayload(data)];\r\n}\n\nfunction removeAtIndexes(data, indexes) {\r\n let i = 0;\r\n const temp = [...data];\r\n for (const index of indexes) {\r\n temp.splice(index - i, 1);\r\n i++;\r\n }\r\n return compact(temp).length ? temp : [];\r\n}\r\nvar removeArrayAt = (data, index) => isUndefined(index)\r\n ? []\r\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\r\n data[indexA] = [data[indexB], (data[indexB] = data[indexA])][0];\r\n};\n\nfunction baseGet(object, updatePath) {\r\n const length = updatePath.slice(0, -1).length;\r\n let index = 0;\r\n while (index < length) {\r\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\r\n }\r\n return object;\r\n}\r\nfunction isEmptyArray(obj) {\r\n for (const key in obj) {\r\n if (!isUndefined(obj[key])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction unset(object, path) {\r\n const updatePath = isKey(path) ? [path] : stringToPath(path);\r\n const childObject = updatePath.length == 1 ? object : baseGet(object, updatePath);\r\n const key = updatePath[updatePath.length - 1];\r\n let previousObjRef;\r\n if (childObject) {\r\n delete childObject[key];\r\n }\r\n for (let k = 0; k < updatePath.slice(0, -1).length; k++) {\r\n let index = -1;\r\n let objectRef;\r\n const currentPaths = updatePath.slice(0, -(k + 1));\r\n const currentPathsLength = currentPaths.length - 1;\r\n if (k > 0) {\r\n previousObjRef = object;\r\n }\r\n while (++index < currentPaths.length) {\r\n const item = currentPaths[index];\r\n objectRef = objectRef ? objectRef[item] : object[item];\r\n if (currentPathsLength === index &&\r\n ((isObject(objectRef) && isEmptyObject(objectRef)) ||\r\n (Array.isArray(objectRef) && isEmptyArray(objectRef)))) {\r\n previousObjRef ? delete previousObjRef[item] : delete object[item];\r\n }\r\n previousObjRef = objectRef;\r\n }\r\n }\r\n return object;\r\n}\n\nvar updateAt = (fieldValues, index, value) => {\r\n fieldValues[index] = value;\r\n return fieldValues;\r\n};\n\n/**\r\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\r\n *\r\n * @param props - useFieldArray props\r\n *\r\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\r\n * defaultValues: {\r\n * test: []\r\n * }\r\n * });\r\n * const { fields, append } = useFieldArray({\r\n * control,\r\n * name: \"test\"\r\n * });\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(data => console.log(data))}>\r\n * {fields.map((item, index) => (\r\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\r\n * ))}\r\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\r\n * append\r\n * </button>\r\n * <input type=\"submit\" />\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useFieldArray(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;\r\n const [fields, setFields] = React.useState(control._getFieldArray(name));\r\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\r\n const _fieldIds = React.useRef(fields);\r\n const _name = React.useRef(name);\r\n const _actioned = React.useRef(false);\r\n _name.current = name;\r\n _fieldIds.current = fields;\r\n control._names.array.add(name);\r\n props.rules &&\r\n control.register(name, props.rules);\r\n const callback = React.useCallback(({ values, name: fieldArrayName, }) => {\r\n if (fieldArrayName === _name.current || !fieldArrayName) {\r\n const fieldValues = get(values, _name.current, []);\r\n setFields(fieldValues);\r\n ids.current = fieldValues.map(generateId);\r\n }\r\n }, []);\r\n useSubscribe({\r\n callback,\r\n subject: control._subjects.array,\r\n });\r\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\r\n _actioned.current = true;\r\n control._updateFieldArray(name, updatedFieldArrayValues);\r\n }, [control, name]);\r\n const append$1 = (value, options) => {\r\n const appendValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = append(control._getFieldArray(name), appendValue);\r\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\r\n ids.current = append(ids.current, appendValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, append, {\r\n argA: fillEmptyArray(value),\r\n });\r\n };\r\n const prepend$1 = (value, options) => {\r\n const prependValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = prepend(control._getFieldArray(name), prependValue);\r\n control._names.focus = getFocusFieldName(name, 0, options);\r\n ids.current = prepend(ids.current, prependValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, prepend, {\r\n argA: fillEmptyArray(value),\r\n });\r\n };\r\n const remove = (index) => {\r\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\r\n ids.current = removeArrayAt(ids.current, index);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\r\n argA: index,\r\n });\r\n };\r\n const insert$1 = (index, value, options) => {\r\n const insertValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\r\n control._names.focus = getFocusFieldName(name, index, options);\r\n ids.current = insert(ids.current, index, insertValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, insert, {\r\n argA: index,\r\n argB: fillEmptyArray(value),\r\n });\r\n };\r\n const swap = (indexA, indexB) => {\r\n const updatedFieldArrayValues = control._getFieldArray(name);\r\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\r\n swapArrayAt(ids.current, indexA, indexB);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\r\n argA: indexA,\r\n argB: indexB,\r\n }, false);\r\n };\r\n const move = (from, to) => {\r\n const updatedFieldArrayValues = control._getFieldArray(name);\r\n moveArrayAt(updatedFieldArrayValues, from, to);\r\n moveArrayAt(ids.current, from, to);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\r\n argA: from,\r\n argB: to,\r\n }, false);\r\n };\r\n const update = (index, value) => {\r\n const updateValue = cloneObject(value);\r\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\r\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\r\n updateValues(updatedFieldArrayValues);\r\n setFields([...updatedFieldArrayValues]);\r\n control._updateFieldArray(name, updatedFieldArrayValues, updateAt, {\r\n argA: index,\r\n argB: updateValue,\r\n }, true, false);\r\n };\r\n const replace = (value) => {\r\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\r\n ids.current = updatedFieldArrayValues.map(generateId);\r\n updateValues([...updatedFieldArrayValues]);\r\n setFields([...updatedFieldArrayValues]);\r\n control._updateFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\r\n };\r\n React.useEffect(() => {\r\n control._stateFlags.action = false;\r\n isWatched(name, control._names) && control._subjects.state.next({});\r\n if (_actioned.current) {\r\n if (control._options.resolver) {\r\n control._executeSchema([name]).then((result) => {\r\n const error = get(result.errors, name);\r\n const existingError = get(control._formState.errors, name);\r\n if (existingError ? !error && existingError.type : error && error.type) {\r\n error\r\n ? set(control._formState.errors, name, error)\r\n : unset(control._formState.errors, name);\r\n control._subjects.state.next({\r\n errors: control._formState.errors,\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n const field = get(control._fields, name);\r\n const validationModeBeforeSubmit = getValidationModes(control._options.mode);\r\n if ((!validationModeBeforeSubmit.isOnSubmit ||\r\n control._formState.isSubmitted) &&\r\n field &&\r\n field._f) {\r\n validateField(field, get(control._formValues, name), control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\r\n control._subjects.state.next({\r\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\r\n }));\r\n }\r\n }\r\n }\r\n control._subjects.watch.next({\r\n name,\r\n values: control._formValues,\r\n });\r\n control._names.focus &&\r\n focusFieldBy(control._fields, (key) => key.startsWith(control._names.focus));\r\n control._names.focus = '';\r\n control._proxyFormState.isValid && control._updateValid();\r\n }, [fields, name, control]);\r\n React.useEffect(() => {\r\n !get(control._formValues, name) && control._updateFieldArray(name);\r\n return () => {\r\n (control._options.shouldUnregister || shouldUnregister) &&\r\n control.unregister(name);\r\n };\r\n }, [name, control, keyName, shouldUnregister]);\r\n return {\r\n swap: React.useCallback(swap, [updateValues, name, control]),\r\n move: React.useCallback(move, [updateValues, name, control]),\r\n prepend: React.useCallback(prepend$1, [updateValues, name, control]),\r\n append: React.useCallback(append$1, [updateValues, name, control]),\r\n remove: React.useCallback(remove, [updateValues, name, control]),\r\n insert: React.useCallback(insert$1, [updateValues, name, control]),\r\n update: React.useCallback(update, [updateValues, name, control]),\r\n replace: React.useCallback(replace, [updateValues, name, control]),\r\n fields: React.useMemo(() => fields.map((field, index) => ({\r\n ...field,\r\n [keyName]: ids.current[index] || generateId(),\r\n })), [fields, keyName]),\r\n };\r\n}\n\nfunction createSubject() {\r\n let _observers = [];\r\n const next = (value) => {\r\n for (const observer of _observers) {\r\n observer.next(value);\r\n }\r\n };\r\n const subscribe = (observer) => {\r\n _observers.push(observer);\r\n return {\r\n unsubscribe: () => {\r\n _observers = _observers.filter((o) => o !== observer);\r\n },\r\n };\r\n };\r\n const unsubscribe = () => {\r\n _observers = [];\r\n };\r\n return {\r\n get observers() {\r\n return _observers;\r\n },\r\n next,\r\n subscribe,\r\n unsubscribe,\r\n };\r\n}\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2) {\r\n if (isPrimitive(object1) || isPrimitive(object2)) {\r\n return object1 === object2;\r\n }\r\n if (isDateObject(object1) && isDateObject(object2)) {\r\n return object1.getTime() === object2.getTime();\r\n }\r\n const keys1 = Object.keys(object1);\r\n const keys2 = Object.keys(object2);\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n for (const key of keys1) {\r\n const val1 = object1[key];\r\n if (!keys2.includes(key)) {\r\n return false;\r\n }\r\n if (key !== 'ref') {\r\n const val2 = object2[key];\r\n if ((isDateObject(val1) && isDateObject(val2)) ||\r\n (isObject(val1) && isObject(val2)) ||\r\n (Array.isArray(val1) && Array.isArray(val2))\r\n ? !deepEqual(val1, val2)\r\n : val1 !== val2) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\n\nvar isHTMLElement = (value) => {\r\n const owner = value ? value.ownerDocument : 0;\r\n const ElementClass = owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement;\r\n return value instanceof ElementClass;\r\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction markFieldsDirty(data, fields = {}) {\r\n const isParentNodeArray = Array.isArray(data);\r\n if (isObject(data) || isParentNodeArray) {\r\n for (const key in data) {\r\n if (Array.isArray(data[key]) ||\r\n (isObject(data[key]) && !objectHasFunction(data[key]))) {\r\n fields[key] = Array.isArray(data[key]) ? [] : {};\r\n markFieldsDirty(data[key], fields[key]);\r\n }\r\n else if (!isNullOrUndefined(data[key])) {\r\n fields[key] = true;\r\n }\r\n }\r\n }\r\n return fields;\r\n}\r\nfunction getDirtyFieldsFromDefaultValues(data, formValues, dirtyFieldsFromValues) {\r\n const isParentNodeArray = Array.isArray(data);\r\n if (isObject(data) || isParentNodeArray) {\r\n for (const key in data) {\r\n if (Array.isArray(data[key]) ||\r\n (isObject(data[key]) && !objectHasFunction(data[key]))) {\r\n if (isUndefined(formValues) ||\r\n isPrimitive(dirtyFieldsFromValues[key])) {\r\n dirtyFieldsFromValues[key] = Array.isArray(data[key])\r\n ? markFieldsDirty(data[key], [])\r\n : { ...markFieldsDirty(data[key]) };\r\n }\r\n else {\r\n getDirtyFieldsFromDefaultValues(data[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\r\n }\r\n }\r\n else {\r\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\r\n }\r\n }\r\n }\r\n return dirtyFieldsFromValues;\r\n}\r\nvar getDirtyFields = (defaultValues, formValues) => getDirtyFieldsFromDefaultValues(defaultValues, formValues, markFieldsDirty(formValues));\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\r\n ? value\r\n : valueAsNumber\r\n ? value === '' || isNullOrUndefined(value)\r\n ? NaN\r\n : +value\r\n : valueAsDate && isString(value)\r\n ? new Date(value)\r\n : setValueAs\r\n ? setValueAs(value)\r\n : value;\n\nfunction getFieldValue(_f) {\r\n const ref = _f.ref;\r\n if (_f.refs ? _f.refs.every((ref) => ref.disabled) : ref.disabled) {\r\n return;\r\n }\r\n if (isFileInput(ref)) {\r\n return ref.files;\r\n }\r\n if (isRadioInput(ref)) {\r\n return getRadioValue(_f.refs).value;\r\n }\r\n if (isMultipleSelect(ref)) {\r\n return [...ref.selectedOptions].map(({ value }) => value);\r\n }\r\n if (isCheckBoxInput(ref)) {\r\n return getCheckboxValue(_f.refs).value;\r\n }\r\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\r\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\r\n const fields = {};\r\n for (const name of fieldsNames) {\r\n const field = get(_fields, name);\r\n field && set(fields, name, field._f);\r\n }\r\n return {\r\n criteriaMode,\r\n names: [...fieldsNames],\r\n fields,\r\n shouldUseNativeValidation,\r\n };\r\n};\n\nvar getRuleValue = (rule) => isUndefined(rule)\r\n ? undefined\r\n : isRegex(rule)\r\n ? rule.source\r\n : isObject(rule)\r\n ? isRegex(rule.value)\r\n ? rule.value.source\r\n : rule.value\r\n : rule;\n\nvar hasValidation = (options) => options.mount &&\r\n (options.required ||\r\n options.min ||\r\n options.max ||\r\n options.maxLength ||\r\n options.minLength ||\r\n options.pattern ||\r\n options.validate);\n\nfunction schemaErrorLookup(errors, _fields, name) {\r\n const error = get(errors, name);\r\n if (error || isKey(name)) {\r\n return {\r\n error,\r\n name,\r\n };\r\n }\r\n const names = name.split('.');\r\n while (names.length) {\r\n const fieldName = names.join('.');\r\n const field = get(_fields, fieldName);\r\n const foundError = get(errors, fieldName);\r\n if (field && !Array.isArray(field) && name !== fieldName) {\r\n return { name };\r\n }\r\n if (foundError && foundError.type) {\r\n return {\r\n name: fieldName,\r\n error: foundError,\r\n };\r\n }\r\n names.pop();\r\n }\r\n return {\r\n name,\r\n };\r\n}\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\r\n if (mode.isOnAll) {\r\n return false;\r\n }\r\n else if (!isSubmitted && mode.isOnTouch) {\r\n return !(isTouched || isBlurEvent);\r\n }\r\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\r\n return !isBlurEvent;\r\n }\r\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\r\n return isBlurEvent;\r\n }\r\n return true;\r\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nconst defaultOptions = {\r\n mode: VALIDATION_MODE.onSubmit,\r\n reValidateMode: VALIDATION_MODE.onChange,\r\n shouldFocusError: true,\r\n};\r\nfunction createFormControl(props = {}) {\r\n let _options = {\r\n ...defaultOptions,\r\n ...props,\r\n };\r\n let _formState = {\r\n isDirty: false,\r\n isValidating: false,\r\n dirtyFields: {},\r\n isSubmitted: false,\r\n submitCount: 0,\r\n touchedFields: {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n isValid: false,\r\n errors: {},\r\n };\r\n let _fields = {};\r\n let _defaultValues = cloneObject(_options.defaultValues) || {};\r\n let _formValues = _options.shouldUnregister\r\n ? {}\r\n : cloneObject(_defaultValues);\r\n let _stateFlags = {\r\n action: false,\r\n mount: false,\r\n watch: false,\r\n };\r\n let _names = {\r\n mount: new Set(),\r\n unMount: new Set(),\r\n array: new Set(),\r\n watch: new Set(),\r\n };\r\n let delayErrorCallback;\r\n let timer = 0;\r\n let validateFields = {};\r\n const _proxyFormState = {\r\n isDirty: false,\r\n dirtyFields: false,\r\n touchedFields: false,\r\n isValidating: false,\r\n isValid: false,\r\n errors: false,\r\n };\r\n const _subjects = {\r\n watch: createSubject(),\r\n array: createSubject(),\r\n state: createSubject(),\r\n };\r\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\r\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\r\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\r\n const debounce = (callback) => (wait) => {\r\n clearTimeout(timer);\r\n timer = window.setTimeout(callback, wait);\r\n };\r\n const _updateValid = async (shouldSkipRender) => {\r\n let isValid = false;\r\n if (_proxyFormState.isValid) {\r\n isValid = _options.resolver\r\n ? isEmptyObject((await _executeSchema()).errors)\r\n : await executeBuiltInValidation(_fields, true);\r\n if (!shouldSkipRender && isValid !== _formState.isValid) {\r\n _formState.isValid = isValid;\r\n _subjects.state.next({\r\n isValid,\r\n });\r\n }\r\n }\r\n return isValid;\r\n };\r\n const _updateFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\r\n if (args && method) {\r\n _stateFlags.action = true;\r\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\r\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\r\n shouldSetValues && set(_fields, name, fieldValues);\r\n }\r\n if (_proxyFormState.errors &&\r\n shouldUpdateFieldsAndState &&\r\n Array.isArray(get(_formState.errors, name))) {\r\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\r\n shouldSetValues && set(_formState.errors, name, errors);\r\n unsetEmptyArray(_formState.errors, name);\r\n }\r\n if (_proxyFormState.touchedFields &&\r\n shouldUpdateFieldsAndState &&\r\n Array.isArray(get(_formState.touchedFields, name))) {\r\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\r\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\r\n }\r\n if (_proxyFormState.dirtyFields) {\r\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\r\n }\r\n _subjects.state.next({\r\n isDirty: _getDirty(name, values),\r\n dirtyFields: _formState.dirtyFields,\r\n errors: _formState.errors,\r\n isValid: _formState.isValid,\r\n });\r\n }\r\n else {\r\n set(_formValues, name, values);\r\n }\r\n };\r\n const updateErrors = (name, error) => {\r\n set(_formState.errors, name, error);\r\n _subjects.state.next({\r\n errors: _formState.errors,\r\n });\r\n };\r\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\r\n const field = get(_fields, name);\r\n if (field) {\r\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\r\n isUndefined(defaultValue) ||\r\n (ref && ref.defaultChecked) ||\r\n shouldSkipSetValueAs\r\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\r\n : setFieldValue(name, defaultValue);\r\n _stateFlags.mount && _updateValid();\r\n }\r\n };\r\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\r\n let isFieldDirty = false;\r\n const output = {\r\n name,\r\n };\r\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\r\n if (_proxyFormState.isDirty) {\r\n const isPreviousFormDirty = _formState.isDirty;\r\n _formState.isDirty = output.isDirty = _getDirty();\r\n isFieldDirty = isPreviousFormDirty !== output.isDirty;\r\n }\r\n if (_proxyFormState.dirtyFields && (!isBlurEvent || shouldDirty)) {\r\n const isPreviousFieldDirty = get(_formState.dirtyFields, name);\r\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\r\n isCurrentFieldPristine\r\n ? unset(_formState.dirtyFields, name)\r\n : set(_formState.dirtyFields, name, true);\r\n output.dirtyFields = _formState.dirtyFields;\r\n isFieldDirty =\r\n isFieldDirty ||\r\n isPreviousFieldDirty !== get(_formState.dirtyFields, name);\r\n }\r\n if (isBlurEvent && !isPreviousFieldTouched) {\r\n set(_formState.touchedFields, name, isBlurEvent);\r\n output.touchedFields = _formState.touchedFields;\r\n isFieldDirty =\r\n isFieldDirty ||\r\n (_proxyFormState.touchedFields &&\r\n isPreviousFieldTouched !== isBlurEvent);\r\n }\r\n isFieldDirty && shouldRender && _subjects.state.next(output);\r\n return isFieldDirty ? output : {};\r\n };\r\n const shouldRenderByError = async (name, isValid, error, fieldState) => {\r\n const previousFieldError = get(_formState.errors, name);\r\n const shouldUpdateValid = _proxyFormState.isValid && _formState.isValid !== isValid;\r\n if (props.delayError && error) {\r\n delayErrorCallback = debounce(() => updateErrors(name, error));\r\n delayErrorCallback(props.delayError);\r\n }\r\n else {\r\n clearTimeout(timer);\r\n delayErrorCallback = null;\r\n error\r\n ? set(_formState.errors, name, error)\r\n : unset(_formState.errors, name);\r\n }\r\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\r\n !isEmptyObject(fieldState) ||\r\n shouldUpdateValid) {\r\n const updatedFormState = {\r\n ...fieldState,\r\n ...(shouldUpdateValid ? { isValid } : {}),\r\n errors: _formState.errors,\r\n name,\r\n };\r\n _formState = {\r\n ..._formState,\r\n ...updatedFormState,\r\n };\r\n _subjects.state.next(updatedFormState);\r\n }\r\n validateFields[name]--;\r\n if (_proxyFormState.isValidating &&\r\n !Object.values(validateFields).some((v) => v)) {\r\n _subjects.state.next({\r\n isValidating: false,\r\n });\r\n validateFields = {};\r\n }\r\n };\r\n const _executeSchema = async (name) => _options.resolver\r\n ? await _options.resolver({ ..._formValues }, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation))\r\n : {};\r\n const executeSchemaAndUpdateState = async (names) => {\r\n const { errors } = await _executeSchema();\r\n if (names) {\r\n for (const name of names) {\r\n const error = get(errors, name);\r\n error\r\n ? set(_formState.errors, name, error)\r\n : unset(_formState.errors, name);\r\n }\r\n }\r\n else {\r\n _formState.errors = errors;\r\n }\r\n return errors;\r\n };\r\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\r\n valid: true,\r\n }) => {\r\n for (const name in fields) {\r\n const field = fields[name];\r\n if (field) {\r\n const { _f, ...fieldValue } = field;\r\n if (_f) {\r\n const isFieldArrayRoot = _names.array.has(_f.name);\r\n const fieldError = await validateField(field, get(_formValues, _f.name), shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation, isFieldArrayRoot);\r\n if (fieldError[_f.name]) {\r\n context.valid = false;\r\n if (shouldOnlyCheckValid) {\r\n break;\r\n }\r\n }\r\n !shouldOnlyCheckValid &&\r\n (get(fieldError, _f.name)\r\n ? isFieldArrayRoot\r\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\r\n : set(_formState.errors, _f.name, fieldError[_f.name])\r\n : unset(_formState.errors, _f.name));\r\n }\r\n fieldValue &&\r\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\r\n }\r\n }\r\n return context.valid;\r\n };\r\n const _removeUnmounted = () => {\r\n for (const name of _names.unMount) {\r\n const field = get(_fields, name);\r\n field &&\r\n (field._f.refs\r\n ? field._f.refs.every((ref) => !live(ref))\r\n : !live(field._f.ref)) &&\r\n unregister(name);\r\n }\r\n _names.unMount = new Set();\r\n };\r\n const _getDirty = (name, data) => (name && data && set(_formValues, name, data),\r\n !deepEqual(getValues(), _defaultValues));\r\n const _getWatch = (names, defaultValue, isGlobal) => {\r\n const fieldValues = {\r\n ...(_stateFlags.mount\r\n ? _formValues\r\n : isUndefined(defaultValue)\r\n ? _defaultValues\r\n : isString(names)\r\n ? { [names]: defaultValue }\r\n : defaultValue),\r\n };\r\n return generateWatchOutput(names, _names, fieldValues, isGlobal);\r\n };\r\n const _getFieldArray = (name) => compact(get(_stateFlags.mount ? _formValues : _defaultValues, name, props.shouldUnregister ? get(_defaultValues, name, []) : []));\r\n const setFieldValue = (name, value, options = {}) => {\r\n const field = get(_fields, name);\r\n let fieldValue = value;\r\n if (field) {\r\n const fieldReference = field._f;\r\n if (fieldReference) {\r\n !fieldReference.disabled &&\r\n set(_formValues, name, getFieldValueAs(value, fieldReference));\r\n fieldValue =\r\n isWeb && isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\r\n ? ''\r\n : value;\r\n if (isMultipleSelect(fieldReference.ref)) {\r\n [...fieldReference.ref.options].forEach((selectRef) => (selectRef.selected = fieldValue.includes(selectRef.value)));\r\n }\r\n else if (fieldReference.refs) {\r\n if (isCheckBoxInput(fieldReference.ref)) {\r\n fieldReference.refs.length > 1\r\n ? fieldReference.refs.forEach((checkboxRef) => !checkboxRef.disabled &&\r\n (checkboxRef.checked = Array.isArray(fieldValue)\r\n ? !!fieldValue.find((data) => data === checkboxRef.value)\r\n : fieldValue === checkboxRef.value))\r\n : fieldReference.refs[0] &&\r\n (fieldReference.refs[0].checked = !!fieldValue);\r\n }\r\n else {\r\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\r\n }\r\n }\r\n else if (isFileInput(fieldReference.ref)) {\r\n fieldReference.ref.value = '';\r\n }\r\n else {\r\n fieldReference.ref.value = fieldValue;\r\n if (!fieldReference.ref.type) {\r\n _subjects.watch.next({\r\n name,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n (options.shouldDirty || options.shouldTouch) &&\r\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\r\n options.shouldValidate && trigger(name);\r\n };\r\n const setValues = (name, value, options) => {\r\n for (const fieldKey in value) {\r\n const fieldValue = value[fieldKey];\r\n const fieldName = `${name}.${fieldKey}`;\r\n const field = get(_fields, fieldName);\r\n (_names.array.has(name) ||\r\n !isPrimitive(fieldValue) ||\r\n (field && !field._f)) &&\r\n !isDateObject(fieldValue)\r\n ? setValues(fieldName, fieldValue, options)\r\n : setFieldValue(fieldName, fieldValue, options);\r\n }\r\n };\r\n const setValue = (name, value, options = {}) => {\r\n const field = get(_fields, name);\r\n const isFieldArray = _names.array.has(name);\r\n const cloneValue = cloneObject(value);\r\n set(_formValues, name, cloneValue);\r\n if (isFieldArray) {\r\n _subjects.array.next({\r\n name,\r\n values: _formValues,\r\n });\r\n if ((_proxyFormState.isDirty || _proxyFormState.dirtyFields) &&\r\n options.shouldDirty) {\r\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\r\n _subjects.state.next({\r\n name,\r\n dirtyFields: _formState.dirtyFields,\r\n isDirty: _getDirty(name, cloneValue),\r\n });\r\n }\r\n }\r\n else {\r\n field && !field._f && !isNullOrUndefined(cloneValue)\r\n ? setValues(name, cloneValue, options)\r\n : setFieldValue(name, cloneValue, options);\r\n }\r\n isWatched(name, _names) && _subjects.state.next({});\r\n _subjects.watch.next({\r\n name,\r\n });\r\n };\r\n const onChange = async (event) => {\r\n const target = event.target;\r\n let name = target.name;\r\n const field = get(_fields, name);\r\n if (field) {\r\n let error;\r\n let isValid;\r\n const fieldValue = target.type\r\n ? getFieldValue(field._f)\r\n : getEventValue(event);\r\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\r\n const shouldSkipValidation = (!hasValidation(field._f) &&\r\n !_options.resolver &&\r\n !get(_formState.errors, name) &&\r\n !field._f.deps) ||\r\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\r\n const watched = isWatched(name, _names, isBlurEvent);\r\n set(_formValues, name, fieldValue);\r\n if (isBlurEvent) {\r\n field._f.onBlur && field._f.onBlur(event);\r\n delayErrorCallback && delayErrorCallback(0);\r\n }\r\n else if (field._f.onChange) {\r\n field._f.onChange(event);\r\n }\r\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent, false);\r\n const shouldRender = !isEmptyObject(fieldState) || watched;\r\n !isBlurEvent &&\r\n _subjects.watch.next({\r\n name,\r\n type: event.type,\r\n });\r\n if (shouldSkipValidation) {\r\n return (shouldRender &&\r\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\r\n }\r\n !isBlurEvent && watched && _subjects.state.next({});\r\n validateFields[name] = validateFields[name] ? +1 : 1;\r\n _subjects.state.next({\r\n isValidating: true,\r\n });\r\n if (_options.resolver) {\r\n const { errors } = await _executeSchema([name]);\r\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\r\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\r\n error = errorLookupResult.error;\r\n name = errorLookupResult.name;\r\n isValid = isEmptyObject(errors);\r\n }\r\n else {\r\n error = (await validateField(field, get(_formValues, name), shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\r\n isValid = await _updateValid(true);\r\n }\r\n field._f.deps &&\r\n trigger(field._f.deps);\r\n shouldRenderByError(name, isValid, error, fieldState);\r\n }\r\n };\r\n const trigger = async (name, options = {}) => {\r\n let isValid;\r\n let validationResult;\r\n const fieldNames = convertToArrayPayload(name);\r\n _subjects.state.next({\r\n isValidating: true,\r\n });\r\n if (_options.resolver) {\r\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\r\n isValid = isEmptyObject(errors);\r\n validationResult = name\r\n ? !fieldNames.some((name) => get(errors, name))\r\n : isValid;\r\n }\r\n else if (name) {\r\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\r\n const field = get(_fields, fieldName);\r\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\r\n }))).every(Boolean);\r\n !(!validationResult && !_formState.isValid) && _updateValid();\r\n }\r\n else {\r\n validationResult = isValid = await executeBuiltInValidation(_fields);\r\n }\r\n _subjects.state.next({\r\n ...(!isString(name) ||\r\n (_proxyFormState.isValid && isValid !== _formState.isValid)\r\n ? {}\r\n : { name }),\r\n ...(_options.resolver ? { isValid } : {}),\r\n errors: _formState.errors,\r\n isValidating: false,\r\n });\r\n options.shouldFocus &&\r\n !validationResult &&\r\n focusFieldBy(_fields, (key) => get(_formState.errors, key), name ? fieldNames : _names.mount);\r\n return validationResult;\r\n };\r\n const getValues = (fieldNames) => {\r\n const values = {\r\n ..._defaultValues,\r\n ...(_stateFlags.mount ? _formValues : {}),\r\n };\r\n return isUndefined(fieldNames)\r\n ? values\r\n : isString(fieldNames)\r\n ? get(values, fieldNames)\r\n : fieldNames.map((name) => get(values, name));\r\n };\r\n const getFieldState = (name, formState) => ({\r\n invalid: !!get((formState || _formState).errors, name),\r\n isDirty: !!get((formState || _formState).dirtyFields, name),\r\n isTouched: !!get((formState || _formState).touchedFields, name),\r\n error: get((formState || _formState).errors, name),\r\n });\r\n const clearErrors = (name) => {\r\n name\r\n ? convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName))\r\n : (_formState.errors = {});\r\n _subjects.state.next({\r\n errors: _formState.errors,\r\n });\r\n };\r\n const setError = (name, error, options) => {\r\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\r\n set(_formState.errors, name, {\r\n ...error,\r\n ref,\r\n });\r\n _subjects.state.next({\r\n name,\r\n errors: _formState.errors,\r\n isValid: false,\r\n });\r\n options && options.shouldFocus && ref && ref.focus && ref.focus();\r\n };\r\n const watch = (name, defaultValue) => isFunction(name)\r\n ? _subjects.watch.subscribe({\r\n next: (info) => name(_getWatch(undefined, defaultValue), info),\r\n })\r\n : _getWatch(name, defaultValue, true);\r\n const unregister = (name, options = {}) => {\r\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\r\n _names.mount.delete(fieldName);\r\n _names.array.delete(fieldName);\r\n if (get(_fields, fieldName)) {\r\n if (!options.keepValue) {\r\n unset(_fields, fieldName);\r\n unset(_formValues, fieldName);\r\n }\r\n !options.keepError && unset(_formState.errors, fieldName);\r\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\r\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\r\n !_options.shouldUnregister &&\r\n !options.keepDefaultValue &&\r\n unset(_defaultValues, fieldName);\r\n }\r\n }\r\n _subjects.watch.next({});\r\n _subjects.state.next({\r\n ..._formState,\r\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\r\n });\r\n !options.keepIsValid && _updateValid();\r\n };\r\n const register = (name, options = {}) => {\r\n let field = get(_fields, name);\r\n const disabledIsDefined = isBoolean(options.disabled);\r\n set(_fields, name, {\r\n _f: {\r\n ...(field && field._f ? field._f : { ref: { name } }),\r\n name,\r\n mount: true,\r\n ...options,\r\n },\r\n });\r\n _names.mount.add(name);\r\n field\r\n ? disabledIsDefined &&\r\n set(_formValues, name, options.disabled\r\n ? undefined\r\n : get(_formValues, name, getFieldValue(field._f)))\r\n : updateValidAndValue(name, true, options.value);\r\n return {\r\n ...(disabledIsDefined ? { disabled: options.disabled } : {}),\r\n ...(_options.shouldUseNativeValidation\r\n ? {\r\n required: !!options.required,\r\n min: getRuleValue(options.min),\r\n max: getRuleValue(options.max),\r\n minLength: getRuleValue(options.minLength),\r\n maxLength: getRuleValue(options.maxLength),\r\n pattern: getRuleValue(options.pattern),\r\n }\r\n : {}),\r\n name,\r\n onChange,\r\n onBlur: onChange,\r\n ref: (ref) => {\r\n if (ref) {\r\n register(name, options);\r\n field = get(_fields, name);\r\n const fieldRef = isUndefined(ref.value)\r\n ? ref.querySelectorAll\r\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\r\n : ref\r\n : ref;\r\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\r\n const refs = field._f.refs || [];\r\n if (radioOrCheckbox\r\n ? refs.find((option) => option === fieldRef)\r\n : fieldRef === field._f.ref) {\r\n return;\r\n }\r\n set(_fields, name, {\r\n _f: {\r\n ...field._f,\r\n ...(radioOrCheckbox\r\n ? {\r\n refs: [\r\n ...refs.filter(live),\r\n fieldRef,\r\n ...(!!Array.isArray(get(_defaultValues, name))\r\n ? [{}]\r\n : []),\r\n ],\r\n ref: { type: fieldRef.type, name },\r\n }\r\n : { ref: fieldRef }),\r\n },\r\n });\r\n updateValidAndValue(name, false, undefined, fieldRef);\r\n }\r\n else {\r\n field = get(_fields, name, {});\r\n if (field._f) {\r\n field._f.mount = false;\r\n }\r\n (_options.shouldUnregister || options.shouldUnregister) &&\r\n !(isNameInFieldArray(_names.array, name) && _stateFlags.action) &&\r\n _names.unMount.add(name);\r\n }\r\n },\r\n };\r\n };\r\n const handleSubmit = (onValid, onInvalid) => async (e) => {\r\n if (e) {\r\n e.preventDefault && e.preventDefault();\r\n e.persist && e.persist();\r\n }\r\n let hasNoPromiseError = true;\r\n let fieldValues = cloneObject(_formValues);\r\n _subjects.state.next({\r\n isSubmitting: true,\r\n });\r\n try {\r\n if (_options.resolver) {\r\n const { errors, values } = await _executeSchema();\r\n _formState.errors = errors;\r\n fieldValues = values;\r\n }\r\n else {\r\n await executeBuiltInValidation(_fields);\r\n }\r\n if (isEmptyObject(_formState.errors)) {\r\n _subjects.state.next({\r\n errors: {},\r\n isSubmitting: true,\r\n });\r\n await onValid(fieldValues, e);\r\n }\r\n else {\r\n if (onInvalid) {\r\n await onInvalid({ ..._formState.errors }, e);\r\n }\r\n _options.shouldFocusError &&\r\n focusFieldBy(_fields, (key) => get(_formState.errors, key), _names.mount);\r\n }\r\n }\r\n catch (err) {\r\n hasNoPromiseError = false;\r\n throw err;\r\n }\r\n finally {\r\n _formState.isSubmitted = true;\r\n _subjects.state.next({\r\n isSubmitted: true,\r\n isSubmitting: false,\r\n isSubmitSuccessful: isEmptyObject(_formState.errors) && hasNoPromiseError,\r\n submitCount: _formState.submitCount + 1,\r\n errors: _formState.errors,\r\n });\r\n }\r\n };\r\n const resetField = (name, options = {}) => {\r\n if (get(_fields, name)) {\r\n if (isUndefined(options.defaultValue)) {\r\n setValue(name, get(_defaultValues, name));\r\n }\r\n else {\r\n setValue(name, options.defaultValue);\r\n set(_defaultValues, name, options.defaultValue);\r\n }\r\n if (!options.keepTouched) {\r\n unset(_formState.touchedFields, name);\r\n }\r\n if (!options.keepDirty) {\r\n unset(_formState.dirtyFields, name);\r\n _formState.isDirty = options.defaultValue\r\n ? _getDirty(name, get(_defaultValues, name))\r\n : _getDirty();\r\n }\r\n if (!options.keepError) {\r\n unset(_formState.errors, name);\r\n _proxyFormState.isValid && _updateValid();\r\n }\r\n _subjects.state.next({ ..._formState });\r\n }\r\n };\r\n const reset = (formValues, keepStateOptions = {}) => {\r\n const updatedValues = formValues || _defaultValues;\r\n const cloneUpdatedValues = cloneObject(updatedValues);\r\n const values = formValues && !isEmptyObject(formValues)\r\n ? cloneUpdatedValues\r\n : _defaultValues;\r\n if (!keepStateOptions.keepDefaultValues) {\r\n _defaultValues = updatedValues;\r\n }\r\n if (!keepStateOptions.keepValues) {\r\n if (keepStateOptions.keepDirtyValues) {\r\n for (const fieldName of _names.mount) {\r\n get(_formState.dirtyFields, fieldName)\r\n ? set(values, fieldName, get(_formValues, fieldName))\r\n : setValue(fieldName, get(values, fieldName));\r\n }\r\n }\r\n else {\r\n if (isWeb && isUndefined(formValues)) {\r\n for (const name of _names.mount) {\r\n const field = get(_fields, name);\r\n if (field && field._f) {\r\n const fieldReference = Array.isArray(field._f.refs)\r\n ? field._f.refs[0]\r\n : field._f.ref;\r\n try {\r\n if (isHTMLElement(fieldReference)) {\r\n fieldReference.closest('form').reset();\r\n break;\r\n }\r\n }\r\n catch (_a) { }\r\n }\r\n }\r\n }\r\n _fields = {};\r\n }\r\n _formValues = props.shouldUnregister\r\n ? keepStateOptions.keepDefaultValues\r\n ? cloneObject(_defaultValues)\r\n : {}\r\n : cloneUpdatedValues;\r\n _subjects.array.next({\r\n values,\r\n });\r\n _subjects.watch.next({\r\n values,\r\n });\r\n }\r\n _names = {\r\n mount: new Set(),\r\n unMount: new Set(),\r\n array: new Set(),\r\n watch: new Set(),\r\n watchAll: false,\r\n focus: '',\r\n };\r\n _stateFlags.mount =\r\n !_proxyFormState.isValid || !!keepStateOptions.keepIsValid;\r\n _stateFlags.watch = !!props.shouldUnregister;\r\n _subjects.state.next({\r\n submitCount: keepStateOptions.keepSubmitCount\r\n ? _formState.submitCount\r\n : 0,\r\n isDirty: keepStateOptions.keepDirty || keepStateOptions.keepDirtyValues\r\n ? _formState.isDirty\r\n : !!(keepStateOptions.keepDefaultValues &&\r\n !deepEqual(formValues, _defaultValues)),\r\n isSubmitted: keepStateOptions.keepIsSubmitted\r\n ? _formState.isSubmitted\r\n : false,\r\n dirtyFields: keepStateOptions.keepDirty || keepStateOptions.keepDirtyValues\r\n ? _formState.dirtyFields\r\n : keepStateOptions.keepDefaultValues && formValues\r\n ? getDirtyFields(_defaultValues, formValues)\r\n : {},\r\n touchedFields: keepStateOptions.keepTouched\r\n ? _formState.touchedFields\r\n : {},\r\n errors: keepStateOptions.keepErrors\r\n ? _formState.errors\r\n : {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n });\r\n };\r\n const setFocus = (name, options = {}) => {\r\n const field = get(_fields, name)._f;\r\n const fieldRef = field.refs ? field.refs[0] : field.ref;\r\n fieldRef.focus();\r\n options.shouldSelect && fieldRef.select();\r\n };\r\n return {\r\n control: {\r\n register,\r\n unregister,\r\n getFieldState,\r\n _executeSchema,\r\n _getWatch,\r\n _getDirty,\r\n _updateValid,\r\n _removeUnmounted,\r\n _updateFieldArray,\r\n _getFieldArray,\r\n _subjects,\r\n _proxyFormState,\r\n get _fields() {\r\n return _fields;\r\n },\r\n get _formValues() {\r\n return _formValues;\r\n },\r\n get _stateFlags() {\r\n return _stateFlags;\r\n },\r\n set _stateFlags(value) {\r\n _stateFlags = value;\r\n },\r\n get _defaultValues() {\r\n return _defaultValues;\r\n },\r\n get _names() {\r\n return _names;\r\n },\r\n set _names(value) {\r\n _names = value;\r\n },\r\n get _formState() {\r\n return _formState;\r\n },\r\n set _formState(value) {\r\n _formState = value;\r\n },\r\n get _options() {\r\n return _options;\r\n },\r\n set _options(value) {\r\n _options = {\r\n ..._options,\r\n ...value,\r\n };\r\n },\r\n },\r\n trigger,\r\n register,\r\n handleSubmit,\r\n watch,\r\n setValue,\r\n getValues,\r\n reset,\r\n resetField,\r\n clearErrors,\r\n unregister,\r\n setError,\r\n setFocus,\r\n getFieldState,\r\n };\r\n}\n\n/**\r\n * Custom hook to manage the entire form.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\r\n *\r\n * @param props - form configuration and validation parameters.\r\n *\r\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * console.log(watch(\"example\"));\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(onSubmit)}>\r\n * <input defaultValue=\"test\" {...register(\"example\")} />\r\n * <input {...register(\"exampleRequired\", { required: true })} />\r\n * {errors.exampleRequired && <span>This field is required</span>}\r\n * <input type=\"submit\" />\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useForm(props = {}) {\r\n const _formControl = React.useRef();\r\n const [formState, updateFormState] = React.useState({\r\n isDirty: false,\r\n isValidating: false,\r\n dirtyFields: {},\r\n isSubmitted: false,\r\n submitCount: 0,\r\n touchedFields: {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n isValid: false,\r\n errors: {},\r\n });\r\n if (_formControl.current) {\r\n _formControl.current.control._options = props;\r\n }\r\n else {\r\n _formControl.current = {\r\n ...createFormControl(props),\r\n formState,\r\n };\r\n }\r\n const control = _formControl.current.control;\r\n const callback = React.useCallback((value) => {\r\n if (shouldRenderFormState(value, control._proxyFormState, true)) {\r\n control._formState = {\r\n ...control._formState,\r\n ...value,\r\n };\r\n updateFormState({ ...control._formState });\r\n }\r\n }, [control]);\r\n useSubscribe({\r\n subject: control._subjects.state,\r\n callback,\r\n });\r\n React.useEffect(() => {\r\n if (!control._stateFlags.mount) {\r\n control._proxyFormState.isValid && control._updateValid();\r\n control._stateFlags.mount = true;\r\n }\r\n if (control._stateFlags.watch) {\r\n control._stateFlags.watch = false;\r\n control._subjects.state.next({});\r\n }\r\n control._removeUnmounted();\r\n });\r\n _formControl.current.formState = getProxyFormState(formState, control._proxyFormState);\r\n return _formControl.current;\r\n}\n\nexport { Controller, FormProvider, appendErrors, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","import { useGetOne } from 'react-admin';\r\n\r\nconst useNuevo = (resource, options) =>\r\n useGetOne(resource, { id: '-1' }, options);\r\n\r\nexport default useNuevo;\r\n","import { alpha } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { GridOverlay } from '@mui/x-data-grid';\r\nimport * as React from 'react';\r\n\r\nexport const useStyles = makeStyles(\r\n theme => ({\r\n /*shadow: {\r\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\r\n },*/\r\n root: {\r\n '& .MuiDataGrid-columnsContainer': {\r\n backgroundColor:\r\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\r\n },\r\n '& .MuiDataGrid-iconSeparator': {\r\n display: 'none',\r\n },\r\n },\r\n header: {\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n rootPaper: {\r\n width: '100%',\r\n height: '40vh',\r\n borderRadius: 0,\r\n marginTop: theme.spacing(1),\r\n },\r\n rootOverlay: {\r\n flexDirection: 'column',\r\n '& .ant-empty-img-1': {\r\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\r\n },\r\n '& .ant-empty-img-2': {\r\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\r\n },\r\n '& .ant-empty-img-3': {\r\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\r\n },\r\n '& .ant-empty-img-4': {\r\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\r\n },\r\n '& .ant-empty-img-5': {\r\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\r\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\r\n },\r\n },\r\n label: {\r\n marginTop: theme.spacing(1),\r\n },\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n }),\r\n { name: 'GE' }\r\n);\r\nexport const CustomNoRowsOverlay = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <GridOverlay className={classes.rootOverlay}>\r\n <svg\r\n width=\"120\"\r\n height=\"100\"\r\n viewBox=\"0 0 184 152\"\r\n aria-hidden\r\n focusable=\"false\"\r\n >\r\n <g fill=\"none\" fillRule=\"evenodd\">\r\n <g transform=\"translate(24 31.67)\">\r\n <ellipse\r\n className=\"ant-empty-img-5\"\r\n cx=\"67.797\"\r\n cy=\"106.89\"\r\n rx=\"67.797\"\r\n ry=\"12.668\"\r\n />\r\n <path\r\n className=\"ant-empty-img-1\"\r\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-2\"\r\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\r\n />\r\n </g>\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\r\n />\r\n <g\r\n className=\"ant-empty-img-4\"\r\n transform=\"translate(149.65 15.383)\"\r\n >\r\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\r\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\r\n </g>\r\n </g>\r\n </svg>\r\n <div className={classes.label}>No hay registros</div>\r\n </GridOverlay>\r\n );\r\n};\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.createEtrRow() method, the result\r\n * of the call, and the loading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { loading: true, loaded: false }]\r\n * - success: [callback, { data: [data from response], loading: false, loaded: true }]\r\n * - error: [callback, { error: [error from response], loading: false, loaded: true }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useDeleteRowEtrGrid } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useDeleteRowEtrGrid('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (error) { return <p>ERROR</p>; }\r\n * return <button disabled={loading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useDeleteRowEtrGrid = (resource, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider.deleteEtrRow(resource, { params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useDeleteRowEtrGrid;\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.createEtrRow() method, the result\r\n * of the call, and the loading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { loading: true, loaded: false }]\r\n * - success: [callback, { data: [data from response], loading: false, loaded: true }]\r\n * - error: [callback, { error: [error from response], loading: false, loaded: true }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useSaveRowEtrGrid } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useSaveRowEtrGrid('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (error) { return <p>ERROR</p>; }\r\n * return <button disabled={loading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useSaveRowEtrGrid = (type, resource, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider[type](resource, { params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useSaveRowEtrGrid;\r\n","import AddIcon from '@mui/icons-material/Add';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport ActionDelete from '@mui/icons-material/Delete';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { alpha, createTheme, StyledEngineProvider } from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Paper from '@mui/material/Paper';\nimport { adaptV4Theme, ThemeProvider } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\nimport { DataGrid, esES } from '@mui/x-data-grid';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n Fragment,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n Confirm,\n Form,\n Loading,\n SaveButton,\n SaveContextProvider,\n useDeleteWithConfirmController,\n useGetList,\n useNotify,\n useSafeSetState,\n useTranslate,\n} from 'react-admin';\nimport { useFormState } from 'react-hook-form';\nimport useNuevo from '../../../utils/useNuevo';\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\nimport useDeleteRowEtrGrid from './useDeleteRowEtrGrid';\nimport useSaveRowEtrGrid from './useSaveRowEtrGrid';\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor:\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n },\n header: {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.light,\n },\n rootPaper: {\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: theme.spacing(1),\n },\n rootOverlay: {\n flexDirection: 'column',\n '& .ant-empty-img-1': {\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\n },\n },\n label: {\n marginTop: theme.spacing(1),\n },\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n }),\n { name: 'EtrGrid' }\n);\n\nconst styleMargin = { marginLeft: '1.6rem', fontWeight: 'bold' };\n\nconst defaultIcon = <ActionDelete />;\n\nconst EtrDeleteWithConfirmButton = props => {\n const {\n api,\n classes: classesOverride,\n className,\n confirmTitle = 'ra.message.delete_title',\n confirmContent = 'ra.message.delete_content',\n icon = defaultIcon,\n record,\n redirect = false,\n onSuccess,\n onError,\n source,\n camposClaveFila,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const notify = useNotify();\n\n const { open, isLoading, handleDialogOpen, handleDialogClose } =\n useDeleteWithConfirmController({\n record,\n redirect,\n mutationOptions: {\n onSuccess,\n onError,\n },\n });\n //const resource = useResourceContext(props);\n const resource = props.resource;\n\n const { mutate: requestFn } = useDeleteRowEtrGrid(\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n notify('ra.notification.deleted', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n }\n },\n onError: e => {\n notify(e.message, { type: 'warning' });\n },\n }\n );\n\n const clavesFila = Object.keys(record)\n .filter(key => camposClaveFila.split(',').includes(key))\n .reduce((obj, key) => {\n obj[key] = record[key];\n return obj;\n }, {});\n\n const handleDelete = useCallback(\n event => {\n requestFn({\n payload: {\n ge: source,\n clavesFila,\n },\n });\n },\n [record]\n );\n\n return (\n <Fragment>\n <Button\n key=\"button\"\n onClick={handleDialogOpen}\n className={classes.deleteButton}\n {...rest}\n >\n {icon}\n </Button>\n <Confirm\n isOpen={open}\n loading={isLoading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </Fragment>\n );\n};\n\nconst EtrDialog = props => (\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\n <DialogContentText>\n <Typography\n component=\"span\"\n display=\"block\"\n variant=\"subtitle1\"\n style={{ ...styleMargin }}\n >\n {props.msgTitle}\n </Typography>\n {props.msgDesc}\n </DialogContentText>\n <Form\n resource={props.resource}\n onSubmit={props.onSubmit}\n //validate={customValidation}\n defaultValues={props.defaultValues}\n >\n {props.children}\n </Form>\n </Dialog>\n);\n\nEtrDialog.propTypes = {\n label: PropTypes.string,\n onClick: PropTypes.func,\n icon: PropTypes.any,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n labelEstado: PropTypes.string,\n msgTitle: PropTypes.any,\n msgDesc: PropTypes.any,\n resource: PropTypes.any,\n save: PropTypes.func,\n render: PropTypes.func,\n};\n\nconst EtrDeleteButton = props => {\n const { api, camposClaveFila, resource, source, row } = props;\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n\n return (\n <EtrDeleteWithConfirmButton\n api\n confirmTitle=\"ra.action.delete\"\n source={source}\n record={row}\n resource={resource}\n camposClaveFila={camposClaveFila}\n />\n );\n};\n\nconst EtrDialogChild = props => {\n const {\n resource,\n estado,\n editors,\n recordPadre,\n camposClaveFila,\n setOpen,\n isLoading,\n } = props;\n const { isDirty, isValid } = useFormState();\n\n return (\n <>\n <DialogContent>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n initialValue: recordPadre[child.props.source],\n fullWidth: true,\n disabled:\n child.props.disabled !== undefined\n ? child.props.disabled\n : estado !== 'N' &&\n camposClaveFila.indexOf(\n child.props.source\n ) !== -1,\n InputLabelProps: {\n shrink: true,\n },\n })\n )}\n </DialogContent>\n <DialogActions>\n <SaveButton disabled={!isDirty || !isValid} />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n disabled={isLoading}\n >\n <IconCancel />\n </Button>\n </DialogActions>\n </>\n );\n};\n\nconst EtrCreateButton = props => {\n const {\n api,\n editors,\n record: recordPadre,\n clavesFila,\n camposClaveFila,\n resource,\n label,\n source,\n etrResource,\n } = props;\n const [open, setOpen] = useSafeSetState(false);\n const { data: initialValues } = useNuevo(etrResource, { enabled: open });\n const estado = 'N';\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n const { mutate: requestFn, isLoading } = useSaveRowEtrGrid(\n 'createEtrRow',\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n setOpen(false);\n notify('ra.notification.created', { type: 'info' });\n }\n },\n onError: e => {\n notify(e.message, { type: 'warning' });\n },\n }\n );\n const notify = useNotify();\n const translate = useTranslate();\n const etiqueta = translate('ra.action.create');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = values => {\n requestFn({\n payload: {\n data: { ...values, ...clavesFila },\n ge: source,\n camposClaveFila,\n estado,\n },\n });\n };\n\n const saveContext = useMemo(\n () => ({\n save: handleSubmit,\n setOnFailure: e => console.log(e),\n }),\n [handleSubmit]\n );\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <AddIcon />\n </Button>\n <SaveContextProvider value={saveContext}>\n <EtrDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={etiqueta}\n label={label}\n msgTitle={props.msgTitle}\n msgDesc={props.msgDesc}\n resource={resource}\n onSubmit={handleSubmit}\n defaultValues={initialValues}\n >\n <EtrDialogChild\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={recordPadre}\n camposClaveFila={camposClaveFila}\n isLoading={isLoading}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrDialog>\n </SaveContextProvider>\n </>\n );\n};\n\nconst EtrEditButton = props => {\n const {\n api,\n editors,\n clavesFila,\n camposClaveFila,\n resource,\n label,\n source,\n row,\n } = props;\n const notify = useNotify();\n const translate = useTranslate();\n const [open, setOpen] = useSafeSetState(false);\n const estado = 'M';\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n const { mutate: requestFn, isLoading } = useSaveRowEtrGrid(\n 'updateEtrRow',\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n setOpen(false);\n notify('ra.notification.updated', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n }\n },\n onError: e => {\n notify(e.message, { type: 'warning' });\n },\n }\n );\n const etiqueta = translate('ra.action.edit');\n const labelEstado = etiqueta;\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = values => {\n requestFn({\n payload: {\n data: { ...clavesFila, ...values },\n ge: source,\n camposClaveFila,\n estado,\n },\n });\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <EditIcon />\n </Button>\n <EtrDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n msgTitle={props.msgTitle}\n msgDesc={props.msgDesc}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={row}\n camposClaveFila={camposClaveFila}\n isLoading={isLoading}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrDialog>\n </>\n );\n};\n\nconst theme = createTheme(adaptV4Theme({}, esES));\n\nconst EtrGrid = props => {\n const {\n filterBy = '',\n claves,\n sortModel,\n columns: defColumns,\n reference,\n allowAdd = true,\n allowRemove = true,\n etrResource,\n enableLoad = true,\n ...rest\n } = props;\n const { record: recordPadre } = props;\n //const parentLoaded = useRef(false);\n const classes = useStyles(props);\n //const version = useVersion();\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n /*\n useEffect(() => {\n parentLoaded.current = true;\n }, [version]);\n */\n\n const clavesFila = Object.keys(recordPadre)\n .filter(key => claves.split(',').includes(key))\n .reduce((obj, key) => {\n obj[key] = recordPadre[key];\n return obj;\n }, {});\n\n let filter = {};\n filterBy.split(',').forEach(field => {\n if (field) {\n filter[field] = [\n {\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n },\n ];\n }\n });\n\n const { data, isLoading } = useGetList(\n reference,\n { page: 1, perPage: 200 },\n { field: sortField, order: sortDir },\n filter,\n //{ enabled: enableLoad && parentLoaded.current }\n { enabled: enableLoad }\n );\n\n const rows = useMemo(() => data.map(record => record.id), [data]);\n\n const columns = [\n allowAdd\n ? {\n field: 'BTN',\n headerName: '',\n sortable: false,\n renderHeader: params => (\n <EtrCreateButton\n {...rest}\n etrResource={etrResource}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n />\n ),\n }\n : {},\n ...defColumns,\n {\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrEditButton\n {...rest}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n row={params.row}\n />\n ),\n },\n allowRemove\n ? {\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrDeleteButton\n {...rest}\n camposClaveFila={claves}\n api={params.api}\n row={params.row}\n />\n ),\n }\n : {},\n ];\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n if (isLoading) {\n return <Loading />;\n }\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGrid\n //autoHeight\n //rowHeight={25}\n //isLoading\n className={classes.root}\n disableSelectionOnClick\n pageSize={50}\n hideFooter\n sortModel={sortModel}\n rows={rows}\n columns={finalColumns}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, StyledEngineProvider } from '@mui/material';\nimport { adaptV4Theme } from '@mui/material/styles';\nimport { ThemeProvider } from '@mui/material/styles';\nimport Paper from '@mui/material/Paper';\nimport { DataGrid, esES } from '@mui/x-data-grid';\nimport * as React from 'react';\nimport { useMemo, useState } from 'react';\nimport { Loading, useGetList } from 'react-admin';\nimport { CustomNoRowsOverlay, useStyles } from './EtrGrid/NoRowsOverlay';\n\nconst theme = createTheme(adaptV4Theme({}, esES));\n\nconst GE = props => {\n const {\n filterBy = '',\n sortModel,\n columns: defColumns,\n reference,\n filter = [],\n enableLoad = true,\n ...rest\n } = props;\n const { record: recordPadre } = props;\n const classes = useStyles(props);\n //const parentLoaded = useRef(false);\n //const version = useVersion();\n\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n const columns = useMemo(\n () => [...defColumns],\n [JSON.stringify(defColumns)]\n );\n\n /*useEffect(() => {\n parentLoaded.current = true;\n }, [version]);*/\n\n let filterGe = [];\n\n filterBy.split(',').forEach(field => {\n if (field) {\n filterGe.push({\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n });\n }\n });\n\n const finalFilter = { ...filterGe.concat(filter) };\n\n const { data, isLoading } = useGetList(\n reference,\n { page: 1, perPage: 200 },\n { field: sortField, order: sortDir },\n finalFilter,\n //{ enabled: enableLoad && parentLoaded.current }\n { enabled: enableLoad }\n );\n\n const rows = useMemo(() => data.map(record => record.id), [data]);\n\n if (isLoading) {\n return <Loading />;\n }\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGrid\n //autoHeight\n //rowHeight={25}\n //loading\n className={classes.root}\n disableSelectionOnClick\n pageSize={50}\n hideFooter\n rows={rows}\n columns={columns}\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default GE;\n","import * as React from 'react';\r\nimport { createContext, useContext, useMemo, useState } from 'react';\r\n\r\nexport const ProgressContext = createContext();\r\n\r\nexport const ProgressProvider = ({ children }) => {\r\n const [open, setOpen] = useState(false);\r\n\r\n const context = useMemo(\r\n () => ({\r\n open,\r\n show: () => setOpen(true),\r\n hide: () => setOpen(false),\r\n }),\r\n [open]\r\n );\r\n\r\n return (\r\n <ProgressContext.Provider value={context}>\r\n {children}\r\n </ProgressContext.Provider>\r\n );\r\n};\r\n\r\nconst useFormProgress = () => useContext(ProgressContext);\r\n\r\nexport default useFormProgress;\r\n","// ACTION `RELOAD_CB`\r\nexport const recargarComboBox = (id, method, params, callback) => ({\r\n type: 'RELOAD_CB',\r\n payload: {\r\n id,\r\n method,\r\n params,\r\n callback,\r\n },\r\n});\r\n\r\n// ACTION `RELOAD_CB_SUCCESS`\r\nexport const deleteRecargarComboBox = (id, callback) => ({\r\n type: 'RELOAD_CB_SUCCESS',\r\n payload: { id, callback },\r\n});\r\n\r\nexport const setHiddenAction = (id, hidden) => ({\r\n type: 'HIDE_INPUT',\r\n payload: {\r\n id,\r\n hidden,\r\n },\r\n});\r\n\r\nexport const setDisableAction = (id, disabled) => ({\r\n type: 'DISABLE_INPUT',\r\n payload: {\r\n id,\r\n disabled,\r\n },\r\n});\r\n\r\nexport const setRequireAction = (id, required) => ({\r\n type: 'REQUIRE_INPUT',\r\n payload: {\r\n id,\r\n required,\r\n },\r\n});\r\n","import { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport {\r\n recargarComboBox,\r\n setDisableAction,\r\n setHiddenAction,\r\n setRequireAction,\r\n} from './actions';\r\n\r\nexport const useRecargarComboBox = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, method, params, callback) => {\r\n dispatch(recargarComboBox(id, method, params, callback));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetHidden = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, hidden) => {\r\n dispatch(setHiddenAction(id, hidden));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetDisable = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, disable) => {\r\n dispatch(setDisableAction(id, disable));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetRequire = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, required) => {\r\n dispatch(setRequireAction(id, required));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.getJson() method, the result\r\n * of the call, and the isLoading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { isLoading: true }]\r\n * - success: [callback, { data: [data from response], loading: false, isLoading: false }]\r\n * - error: [callback, { error: [error from response], loading: false, isLoading: false }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param method string El método del formulario a llamar en el servidor\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useGetJson } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const {mutate, isLoading } = useGetJson('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (isError) { return <p>ERROR</p>; }\r\n * return <button disabled={isLoading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useGetJson = (resource, method, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider.getJson(resource, { method, params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useGetJson;\r\n","import { useCallback } from 'react';\r\nimport useGetJson from './useGetJson';\r\n\r\nconst useAjax = resource => {\r\n const { mutate: requestFn, isLoading } = useGetJson(resource);\r\n\r\n const ajax = useCallback(\r\n (method, params, callback) =>\r\n requestFn(\r\n { payload: { params, method } },\r\n {\r\n returnPromise: true,\r\n onSuccess: callback,\r\n onError: callback,\r\n }\r\n ),\r\n []\r\n );\r\n\r\n return [ajax, isLoading];\r\n};\r\n\r\nexport default useAjax;\r\n","import {\r\n useListContext,\r\n useNotify,\r\n useRedirect,\r\n useRefresh,\r\n useUnselectAll,\r\n} from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport useFormProgress from '../layout/ProgressContext';\r\nimport {\r\n useRecargarComboBox,\r\n useSetDisable,\r\n useSetHidden,\r\n useSetRequire,\r\n} from './hooks';\r\nimport useAjax from './useAjax';\r\n\r\nexport const useDefaultHook = props => ({});\r\n\r\nexport const useUtilsGrilla = props => {\r\n const data = useListContext(props);\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const refresh = useRefresh();\r\n const unselectAll = useUnselectAll(props.resource);\r\n const [ajax] = useAjax(props.resource);\r\n\r\n return { ajax, data, notify, redirect, refresh, unselectAll };\r\n};\r\n\r\nexport const useUtilsSubmit = props => {\r\n const recargarComboBox = useRecargarComboBox();\r\n const setHidden = useSetHidden();\r\n const setDisable = useSetDisable();\r\n const setRequire = useSetRequire();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const [ajax] = useAjax(props.resource);\r\n\r\n return {\r\n ajax,\r\n notify,\r\n redirect,\r\n recargarComboBox,\r\n progress,\r\n setHidden,\r\n setDisable,\r\n setRequire,\r\n };\r\n};\r\n\r\nconst useUtilsFicha = props => {\r\n const recargarComboBox = useRecargarComboBox();\r\n const setHidden = useSetHidden();\r\n const setDisable = useSetDisable();\r\n const setRequire = useSetRequire();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const form = useFormContext();\r\n const [ajax] = useAjax(props.resource);\r\n\r\n return {\r\n form,\r\n ajax,\r\n notify,\r\n redirect,\r\n recargarComboBox,\r\n progress,\r\n setHidden,\r\n setDisable,\r\n setRequire,\r\n };\r\n};\r\n\r\nexport default useUtilsFicha;\r\n","import { useMediaQuery } from '@mui/material';\nimport * as React from 'react';\nimport {\n Datagrid,\n EditButton,\n SimpleList,\n useResourceDefinition,\n} from 'react-admin';\nimport useInitGrilla from '../utils/useInitGrilla';\n\nconst esEditable = (record, isRowEditable) =>\n isRowEditable === undefined ||\n (typeof isRowEditable === 'function' && isRowEditable(record));\n\nconst EditButtonGrilla = props => {\n const { isRowEditable, ...rest } = props;\n\n return esEditable(props.record, isRowEditable) ? (\n <EditButton {...rest} />\n ) : null;\n};\n\nconst GrillaEtriek = props => {\n useInitGrilla(props);\n\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\n const {\n hasEdit,\n options: { borra },\n } = useResourceDefinition(props);\n const {\n isRowEditable,\n primaryText: pt,\n secondaryText: st,\n desktopSize = false,\n onRenderGrilla,\n onLoadGrilla,\n hasEdit: hasEditProps,\n ...rest\n } = props;\n const children = props.children;\n const count = React.Children.count(props.children);\n let primaryText = pt;\n let secondaryText = st;\n\n if (!pt) {\n if (count >= 4) {\n primaryText = record =>\n `${record[children[0].props.source]} - ${\n record[children[1].props.source]\n }`;\n } else if (count >= 3) {\n primaryText = record =>\n `${record[children[0].props.source]} - ${\n record[children[1].props.source]\n }`;\n } else if (count >= 2) {\n primaryText = record =>\n `${record[children[0].props.source]} - ${\n record[children[1].props.source]\n }`;\n } else if (count === 1) {\n primaryText = record => record[children[0].props.source];\n }\n }\n\n if (!st) {\n if (count >= 4) {\n secondaryText = record =>\n `${record[children[2].props.source]} - ${\n record[children[3].props.source]\n }`;\n } else if (count >= 3) {\n secondaryText = record => record[children[2].props.source];\n } else if (count >= 2) {\n primaryText = record =>\n `${record[children[0].props.source]} - ${\n record[children[1].props.source]\n }`;\n } else if (count === 1) {\n primaryText = record => record[children[0].props.source];\n }\n }\n\n return isSmall && desktopSize === false ? (\n <SimpleList\n linkType={record =>\n hasEdit && esEditable(record, isRowEditable) ? 'edit' : false\n }\n primaryText={primaryText}\n secondaryText={secondaryText}\n />\n ) : (\n <Datagrid\n //classes={{rowOdd: classes.rowOdd}}\n {...rest}\n >\n {React.Children.map(children, child =>\n !child.props.hidden ? child : null\n )}\n {hasEdit && <EditButtonGrilla isRowEditable={isRowEditable} />}\n {/*{borra === '1' && <DeleteButton confirmTitle=\"ra.action.delete\" mutationMode=\"pessimistic\"/>}*/}\n </Datagrid>\n );\n};\n\nexport default GrillaEtriek;\n","import { useEffect } from 'react';\r\nimport { useListContext } from 'react-admin';\r\nimport { useUtilsGrilla } from './useUtils';\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const { isLoading } = useListContext();\r\n const utils = useUtilsGrilla(props);\r\n\r\n useEffect(() => {\r\n onRenderGrilla && onRenderGrilla(utils);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n onLoadGrilla && onLoadGrilla(utils);\r\n }\r\n }, [isLoading]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from './useUtils';\r\n\r\nconst useInitFicha = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const fichaProps = useFormulario(rest);\r\n\r\n return { fichaProps };\r\n};\r\n\r\nexport default useInitFicha;\r\n","import { makeStyles } from '@mui/styles';\nimport Typography from '@mui/material/Typography';\nimport ChevronLeft from '@mui/icons-material/ChevronLeft';\nimport { isAfter } from 'date-fns';\nimport enLocale from 'date-fns/locale/en-US';\nimport esLocale from 'date-fns/locale/es';\nimport * as React from 'react';\nimport {\n ListButton,\n minValue,\n required,\n ShowButton,\n TopToolbar,\n} from 'react-admin';\n\nexport const getFormcodFromResource = resource => resource.split('_')[1];\n\nexport const useStylesContenidos = makeStyles(theme => ({\n form: {\n maxHeight: '70vh',\n overflow: 'auto',\n },\n tab: {\n display: 'block',\n maxHeight: '65vh',\n overflow: 'auto',\n },\n contenido: {\n [theme.breakpoints.up('md')]: {\n width: '20vw', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n },\n },\n}));\n\n//parse(): input -> record\n//format(): record -> input\n\nexport const dateFormat = (v, source) => {\n // v is a `Date` object\n if (!v) {\n return '';\n }\n\n if (v instanceof Date) {\n // v is a `Date` object\n return v.toString();\n } else if (v.indexOf('/') !== -1) {\n const match = v.split('/');\n const d = new Date(\n parseInt(match[2], 10),\n parseInt(match[1], 10) - 1,\n parseInt(match[0], 10)\n );\n return d.toString();\n } else {\n // v is a string of \"YYYY-MM-DD\" format\n const match = /(\\d{4})-(\\d{2})-(\\d{2})/.exec(v);\n if (match === null) {\n return;\n }\n const d = new Date(\n parseInt(match[1], 10),\n parseInt(match[2], 10) - 1,\n parseInt(match[3], 10)\n );\n if (isNaN(d)) {\n return;\n }\n return d.toString();\n }\n};\n\nexport const dateParser = (v, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!v) {\n return '';\n }\n\n const match = v.split(' ');\n let mes = '';\n switch (match[1]) {\n case 'Jan':\n mes = '01';\n break;\n case 'Feb':\n mes = '02';\n break;\n case 'Mar':\n mes = '03';\n break;\n case 'Apr':\n mes = '04';\n break;\n case 'May':\n mes = '05';\n break;\n case 'Jun':\n mes = '06';\n break;\n case 'Jul':\n mes = '07';\n break;\n case 'Aug':\n mes = '08';\n break;\n case 'Sep':\n mes = '09';\n break;\n case 'Oct':\n mes = '10';\n break;\n case 'Nov':\n mes = '11';\n break;\n case 'Dec':\n mes = '12';\n break;\n }\n\n return match[2] + '/' + mes + '/' + match[3];\n};\n\nexport const dateTimeFormat = v => {\n // v is a `Date` object\n if (!v) {\n return '';\n }\n\n if (v instanceof Date) {\n // v is a `Date` object\n return v.toString();\n } else if (v.indexOf('/') !== -1) {\n const match = v.split('/');\n const d = new Date(\n parseInt(match[2].substr(0, 4), 10),\n parseInt(match[1], 10) - 1,\n parseInt(match[0], 10),\n match[2].substr(5, 2),\n match[2].substr(8, 2)\n );\n return d.toString();\n } else {\n // v is a string of \"YYYY-MM-DD\" format\n const match = /(\\d{4})-(\\d{2})-(\\d{2})\\s(\\d{2}):(\\d{2})/.exec(v);\n if (match === null) {\n return;\n }\n const d = new Date(\n parseInt(match[1], 10),\n parseInt(match[2], 10) - 1,\n parseInt(match[3], 10),\n match[4],\n match[5]\n );\n if (isNaN(d)) {\n return;\n }\n return d.toString();\n }\n};\n\nexport const dateTimeParser = (v, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!v) {\n return '';\n }\n\n const match = v.split(' ');\n let mes = '';\n switch (match[1]) {\n case 'Jan':\n mes = '01';\n break;\n case 'Feb':\n mes = '02';\n break;\n case 'Mar':\n mes = '03';\n break;\n case 'Apr':\n mes = '04';\n break;\n case 'May':\n mes = '05';\n break;\n case 'Jun':\n mes = '06';\n break;\n case 'Jul':\n mes = '07';\n break;\n case 'Aug':\n mes = '08';\n break;\n case 'Sep':\n mes = '09';\n break;\n case 'Oct':\n mes = '10';\n break;\n case 'Nov':\n mes = '11';\n break;\n case 'Dec':\n mes = '12';\n break;\n }\n\n return match[2] + '/' + mes + '/' + match[3] + ' ' + match[4].substr(0, 5);\n};\n\nexport const timeFormat = v => {\n // v is a `Date` object\n if (!v) {\n return '';\n }\n\n if (v instanceof Date) {\n // v is a `Date` object\n return v.toString();\n } else if (v.indexOf(':') !== -1) {\n const match = v.split(':');\n let now = new Date();\n now.setHours(match[0]);\n now.setMinutes(match[1]);\n return now.toString();\n } else {\n // v is a string of \"YYYY-MM-DD\" format\n const match = /(\\d{2}):(\\d{2})/.exec(v);\n if (match === null) {\n return;\n }\n let now = new Date();\n now.setHours(match[0]);\n now.setMinutes(match[1]);\n return now.toString();\n }\n};\n\nexport const timeParser = (v, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!v) {\n return '';\n }\n\n return v.split(' ')[4].substring(0, 5);\n};\n\nconst sanitizeRestProps = ({\n className,\n record,\n hasEdit,\n hasShow,\n hasList,\n resource,\n totalPages,\n showFilter,\n setSort,\n setPerPage,\n perPage,\n defaultTitle,\n setPage,\n setFilters,\n selectedIds,\n onUnselectItems,\n onToggleItem,\n isLoading,\n exporter,\n hideFilter,\n hasCreate,\n filterValues,\n displayedFilters,\n currentSort,\n ...rest\n}) => rest;\n\nexport const Separador = props => (\n <Typography variant=\"h6\" gutterBottom>\n {props.children}\n </Typography>\n);\n\nexport const FichaActions = ({\n children,\n className,\n data,\n hasShow,\n hasList = true,\n ...rest\n}) => (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {children}\n {hasList && (\n <ListButton label=\"ra.action.back\" icon={<ChevronLeft />} />\n )}\n {hasShow && <ShowButton record={data} />}\n </TopToolbar>\n);\n\nexport const etrRequerido = required();\nexport const etrRequeridoNumerico = [etrRequerido, minValue(1)];\nexport const dateFormatOptions = { format: 'dd/MM/yyyy' };\nexport const etrFechaMayorQue = sourceFechaInicio => (value, allValues) => {\n const inicio = allValues[sourceFechaInicio];\n\n if (value && inicio) {\n const iniDate = new Date(inicio);\n const finDate = new Date(value);\n\n if (isAfter(iniDate, finDate)) {\n return {\n message: 'validation.greater_or_equal',\n args: { menor: inicio },\n };\n }\n }\n\n return undefined;\n};\n\nexport const localeOptions = (idi = 'es') => ({\n locale: idi === 'en' ? enLocale : esLocale,\n});\nexport const choicesEstado = [\n { id: '1', name: 'Aprobado' },\n { id: '2', name: 'Rechazado' },\n { id: '3', name: 'Pendiente' },\n];\nexport const descargarLink = (ruta, nombre) => {\n const fakeLink = document.createElement('a');\n fakeLink.style.display = 'none';\n document.body.appendChild(fakeLink);\n fakeLink.setAttribute('href', ruta);\n fakeLink.setAttribute('download', nombre);\n fakeLink.click();\n};\n","import { createContext } from 'react';\r\n\r\nexport const FichaContext = createContext({});\r\n","import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Create, useResourceContext } from 'react-admin';\r\nimport { useInitFicha, useNuevo } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nconst CreateEtriek = props => {\r\n const {\r\n useFormulario = useDefaultHook,\r\n enableLoad = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n\r\n const { data: initialValues, isLoading } = useNuevo(resource, {\r\n enabled: enableLoad,\r\n });\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'N', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Create {...rest} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n\r\nCreateEtriek.propTypes = {\r\n useFormulario: PropTypes.func,\r\n};\r\n\r\nexport { CreateEtriek };\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ActionDelete from '@mui/icons-material/Delete';\nimport IconButton from '@mui/material/IconButton';\nimport { alpha } from '@mui/material/styles';\nimport Tooltip from '@mui/material/Tooltip';\nimport { makeStyles } from '@mui/styles';\nimport classnames from 'clsx';\nimport * as React from 'react';\nimport { useDelete, useRecordContext, useTranslate } from 'react-admin';\n\nconst sanitizeRestProps = ({\n classes,\n filterValues,\n handleSubmit,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n redirect,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst DeleteButtonNoWarning = props => {\n const classes = useStyles(props);\n const translate = useTranslate();\n const {\n resource,\n redirect,\n className,\n icon,\n label = 'ra.action.delete',\n ...rest\n } = props;\n\n const record = useRecordContext();\n const [deleteOne, { isLoading }] = useDelete(resource, { id: record.id });\n\n return (\n <Tooltip title={translate('ra.action.delete')}>\n <IconButton\n disabled={isLoading}\n onClick={() => deleteOne()}\n label={label}\n className={classnames(\n 'ra-delete-button',\n classes.deleteButton,\n className\n )}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n size=\"large\"\n >\n {icon}\n </IconButton>\n </Tooltip>\n );\n};\n\nDeleteButtonNoWarning.defaultProps = {\n redirect: 'list',\n icon: <ActionDelete />,\n};\n\nexport default DeleteButtonNoWarning;\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n margin: theme.spacing(1),\n },\n input: {\n display: 'none',\n },\n}));\n\nconst FormDialog = React.forwardRef((props, ref) => {\n const {\n isOpen,\n onConfirm,\n onClose,\n title,\n dialogText,\n children,\n hasAccept = true,\n hasCancel = true,\n isLoading = false,\n } = props;\n const classes = useStyles(props);\n\n const handleConfirm = e => {\n onConfirm && onConfirm(e);\n };\n\n const handleClose = e => {\n onClose && onClose(e);\n };\n\n return (\n <Dialog\n ref={ref}\n open={isOpen}\n fullWidth\n onClose={handleClose}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">{title}</DialogTitle>\n <DialogContent>\n <DialogContentText>{dialogText}</DialogContentText>\n {children}\n </DialogContent>\n {(hasAccept || hasCancel) && (\n <DialogActions>\n {hasCancel && (\n <Button\n onClick={handleClose}\n variant=\"contained\"\n color=\"secondary\"\n className={classes.button}\n disabled={isLoading}\n >\n Cancelar\n </Button>\n )}\n {hasAccept && (\n <Button\n onClick={handleConfirm}\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n disabled={isLoading}\n >\n Ok\n </Button>\n )}\n </DialogActions>\n )}\n </Dialog>\n );\n});\n\nexport default FormDialog;\n","import { CircularProgress } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\nimport { useContext, useEffect } from 'react';\nimport { useResourceContext } from 'react-admin';\nimport useUtilsFicha from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\nimport useFormProgress from './ProgressContext';\nimport { Stack, CardContent } from '@mui/material';\n\nconst useStyles = makeStyles(theme => ({\n block: {\n pointerEvents: 'none',\n backgroundColor: '#ffffff',\n opacity: 0.6,\n position: 'relative',\n },\n progress: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n },\n}));\n\nconst sanitizeRestProps = ({\n children,\n className,\n component,\n defaultValues,\n onSubmit,\n record,\n resource,\n reValidateMode,\n sx,\n toolbar,\n validate,\n resolver,\n warnWhenUnsavedChanges,\n ...props\n}) => props;\n\nconst FormContainer = props => {\n const cls = useStyles(props);\n const context = useFormProgress();\n const resource = useResourceContext(props);\n const { estado, isLoading, initialValues, fichaProps } =\n useContext(FichaContext);\n const utils = useUtilsFicha({ resource });\n\n useEffect(() => {\n fichaProps.onRenderFicha && fichaProps.onRenderFicha(utils, estado);\n }, []);\n\n useEffect(() => {\n if (!isLoading) {\n fichaProps.onLoadFicha &&\n fichaProps.onLoadFicha(utils, estado, initialValues);\n }\n }, [isLoading]);\n\n return <div>Hola Mundo!</div>;\n};\n\nexport default FormContainer;\n","import * as React from 'react';\nimport { useCallback, useContext } from 'react';\nimport { Form, SimpleForm, useNotify } from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\n//import ToolbarFicha from \"./ToolbarFicha\";\n\nconst defaultSave = () => {};\n\nconst FormEtriek = props => {\n const { children, ...rest } = props;\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config = {} } = fichaProps;\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n\n const finalSave = useCallback(\n values => {\n const valid =\n onBeforeSubmitFicha &&\n onBeforeSubmitFicha({ form: { values }, ...utils }, 'N');\n if (typeof valid === 'string') {\n notify(valid, { type: 'warning' });\n return defaultSave();\n } else {\n return valid === undefined || valid\n ? props.onSubmit(values)\n : defaultSave();\n }\n },\n [onBeforeSubmitFicha, utils]\n );\n\n return (\n <Form\n {...rest}\n {...config}\n onSubmit={finalSave}\n defaultValues={initialValues}\n /*toolbar={<ToolbarFicha />}*/\n >\n <FormContainer>{children}</FormContainer>\n </Form>\n );\n};\n\nFormEtriek.propTypes = {\n ...SimpleForm.propTypes,\n};\n\nexport { FormEtriek };\n","import ExpandMore from '@mui/icons-material/ExpandMore';\nimport {\n Collapse,\n List,\n ListItemIcon,\n MenuItem,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport * as React from 'react';\nimport { useSidebarState, useTranslate } from 'react-admin';\n\nconst SubMenu = props => {\n const { handleToggle, isOpen, name, icon, children, dense } = props;\n const translate = useTranslate();\n\n const [sidebarIsOpen] = useSidebarState();\n\n const header = (\n <MenuItem dense={dense} onClick={handleToggle}>\n <ListItemIcon sx={{ minWidth: 5 }}>\n {isOpen ? <ExpandMore /> : icon}\n </ListItemIcon>\n <Typography variant=\"inherit\" color=\"textSecondary\">\n {translate(name)}\n </Typography>\n </MenuItem>\n );\n\n return (\n <div>\n {sidebarIsOpen || isOpen ? (\n header\n ) : (\n <Tooltip title={translate(name)} placement=\"right\">\n {header}\n </Tooltip>\n )}\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\n <List\n dense={dense}\n component=\"div\"\n disablePadding\n sx={{\n '& a': {\n transition:\n 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\n paddingLeft: sidebarIsOpen ? 4 : 2,\n },\n }}\n >\n {children}\n </List>\n </Collapse>\n </div>\n );\n};\n\nexport default SubMenu;\n","import SettingsIcon from '@mui/icons-material/Settings';\nimport { Box, useMediaQuery } from '@mui/material';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport {\n DashboardMenuItem,\n Menu as RaMenu,\n MenuItemLink,\n useSidebarState,\n useTranslate,\n} from 'react-admin';\nimport SubMenu from './SubMenu';\n\nconst renderMenu = props => {\n const { items: menus, translate, ...rest } = props;\n const { state, handleToggle, dense } = rest;\n\n return (\n menus && (\n <div>\n {menus.map(item => {\n const { name, menu, label, icon = 'settings' } = item;\n\n return menu ? (\n <SubMenu\n key={name}\n name={label}\n handleToggle={() => handleToggle(name)}\n isOpen={state[name]}\n icon={<SettingsIcon />}\n dense={dense}\n >\n {renderMenu({ items: menu, translate, ...rest })}\n </SubMenu>\n ) : (\n <MenuItemLink\n key={name}\n to={`/${name}`}\n //TODO: Cambiar junto con 'es.js'\n //primaryText={translate(`resources.${resource}.name`, {smart_count: 2})}\n primaryText={translate(`resources.${name}.name`, {\n _: label,\n })}\n dense={dense}\n leftIcon={<SettingsIcon />}\n //classes={{active: activeClassName, icon: iconClass}}\n //className={className}\n />\n );\n })}\n </div>\n )\n );\n};\n\nconst Menu = ({ dense = false }) => {\n const translate = useTranslate();\n const [state, setState] = useState({ mnuPrueba: false });\n const isXSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const [open] = useSidebarState();\n\n const menus = JSON.parse(localStorage.getItem('menus'));\n\n const className = ''; //classes.itemLink;\n const iconClass = ''; //classes.itemIcon;\n const activeClassName = ''; //classes.secondary;\n\n const handleToggle = menu => {\n setState(state => ({ ...state, [menu]: !state[menu] }));\n };\n\n const itemsFn = renderMenu({\n items: menus,\n handleToggle,\n state,\n activeClassName,\n iconClass,\n className,\n open,\n dense,\n translate,\n });\n\n return (\n <Box\n sx={{\n width: open ? 230 : 50,\n marginTop: 1,\n marginBottom: 1,\n transition: theme =>\n theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n }}\n >\n <RaMenu>\n <DashboardMenuItem\n primaryText={translate('ra.page.dashboard')}\n //classes={{ active: activeClassName, icon: iconClass }}\n //className={className}\n />\n {itemsFn}\n {isXSmall && (\n <MenuItemLink\n to=\"/configuration\"\n primaryText={translate('pos.configuration')}\n leftIcon={<SettingsIcon />}\n dense={dense}\n //classes={{ active: activeClassName, icon: iconClass }}\n //className={className}\n />\n )}\n </RaMenu>\n </Box>\n );\n};\n\nexport default Menu;\n","import LockIcon from '@mui/icons-material/Lock';\nimport Avatar from '@mui/material/Avatar';\nimport Button from '@mui/material/Button';\nimport Card from '@mui/material/Card';\nimport CardActions from '@mui/material/CardActions';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport {\n Form,\n TextInput,\n PasswordInput,\n useLogin,\n useNotify,\n useTranslate,\n} from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\nconst useStyles = makeStyles(theme => ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n alignItems: 'center',\n justifyContent: 'flex-start',\n backgroundImage: ({ loginBackgroundImage }) => loginBackgroundImage,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n avatarIcon: {\n backgroundColor: theme.palette.secondary.main,\n },\n icon: ({ textLength }) => ({\n position: 'absolute',\n left: theme.spacing(14 - Math.ceil(textLength / 2) - 1),\n }),\n hint: {\n marginTop: '1em',\n display: 'flex',\n justifyContent: 'center',\n color: theme.palette.grey[500],\n },\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n actions: {\n padding: '0 1em 1em 1em',\n },\n}));\n\nconst Login = props => {\n const {\n loginBackgroundImage,\n nameSource = 'username',\n passwordSource = 'password',\n } = props;\n const [loading, setLoading] = useState(false);\n const translate = useTranslate();\n const loginButtonText = translate('ra.auth.sign_in');\n const classes = useStyles({\n loginBackgroundImage,\n textLength: loginButtonText.length,\n });\n const notify = useNotify();\n const login = useLogin();\n const location = useLocation();\n\n const handleSubmit = values => {\n setLoading(true);\n login(values, location.state ? location.state.nextPathname : '/').catch(\n error => {\n setLoading(false);\n notify(\n typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? 'ra.auth.sign_in_error'\n : error.message,\n {\n type: 'warning',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n },\n }\n );\n }\n );\n };\n\n const validate = values => {\n const errors = {};\n if (!values[nameSource]) {\n errors[nameSource] = translate('ra.validation.required');\n }\n if (!values[passwordSource]) {\n errors[passwordSource] = translate('ra.validation.required');\n }\n return errors;\n };\n\n return (\n <Form onSubmit={handleSubmit} validate={validate}>\n <div className={classes.main}>\n <Card className={classes.card}>\n <div className={classes.avatar}>\n <Avatar className={classes.avatarIcon}>\n <LockIcon />\n </Avatar>\n </div>\n <div className={classes.hint}>Inicio de Sesión</div>\n <div className={classes.form}>\n <div className={classes.input}>\n <TextInput\n autoFocus\n name={nameSource}\n label={translate('ra.auth.username')}\n disabled={loading}\n />\n </div>\n <div className={classes.input}>\n <PasswordInput\n name={passwordSource}\n label={translate('ra.auth.password')}\n type=\"password\"\n disabled={loading}\n />\n </div>\n </div>\n <CardActions className={classes.actions}>\n <Button\n variant=\"contained\"\n type=\"submit\"\n color=\"primary\"\n disabled={loading}\n fullWidth\n >\n {loading && (\n <CircularProgress\n className={classes.icon}\n size={18}\n thickness={2}\n />\n )}\n {loginButtonText}\n </Button>\n </CardActions>\n </Card>\n </div>\n </Form>\n );\n};\n\nexport default Login;\n","import Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames from 'clsx';\r\nimport * as React from 'react';\r\nimport { useRef, useState } from 'react';\r\nimport { Button, FieldTitle, useResourceContext } from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({\r\n displayedFilters,\r\n filterValues,\r\n showFilter,\r\n ...rest\r\n}) => rest;\r\n\r\nconst useStyles = makeStyles({\r\n root: { display: 'inline-block' },\r\n paddingRight: { paddingRight: 4 },\r\n});\r\n\r\nconst MenuButton = props => {\r\n const {\r\n className,\r\n options = [],\r\n icon: Icon,\r\n label,\r\n disabled,\r\n ...rest\r\n } = props;\r\n const [open, setOpen] = useState(false);\r\n const anchorEl = useRef();\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const classes = useStyles(props);\r\n const resource = useResourceContext(props);\r\n\r\n const handleMenuItemClick = (event, index) => {\r\n setSelectedIndex(index);\r\n setOpen(false);\r\n return true;\r\n };\r\n\r\n const handleToggle = e => {\r\n // This prevents ghost click.\r\n e.preventDefault();\r\n setOpen(true);\r\n anchorEl.current = e.currentTarget;\r\n };\r\n\r\n const handleClose = event => {\r\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n className={classnames(classes.root, className)}\r\n {...sanitizeRestProps(rest)}\r\n >\r\n <Button\r\n className=\"add-filter\"\r\n //label={options[selectedIndex].label}\r\n label={label}\r\n onClick={handleToggle}\r\n title={options[selectedIndex].label}\r\n disabled={disabled}\r\n >\r\n {options[selectedIndex]?.icon || Icon}\r\n </Button>\r\n <Menu open={open} anchorEl={anchorEl.current} onClose={handleClose}>\r\n {options.map((option, index) => (\r\n <MenuItem\r\n key={option.label}\r\n disabled={option.disabled}\r\n selected={index === selectedIndex}\r\n onClick={event => {\r\n handleMenuItemClick(event, index);\r\n option.onClick && option.onClick(event, index);\r\n }}\r\n resource={resource}\r\n title={option.label}\r\n >\r\n {option.icon}\r\n <span className={classes.paddingRight}></span>\r\n <FieldTitle label={option.label} resource={resource} />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </div>\r\n );\r\n};\r\n\r\nexport default MenuButton;\r\n","import * as React from 'react';\r\nimport { useCallback, useContext } from 'react';\r\nimport { Form, TabbedFormView, useNotify } from 'react-admin';\r\nimport { useUtilsSubmit } from '../utils';\r\nimport { FichaContext } from './FichaContext';\r\nimport FormContainer from './FormContainer';\r\n\r\nconst defaultSave = () => {};\r\n\r\nexport const TabbedFormEtriek = props => {\r\n const { initialValues, fichaProps } = useContext(FichaContext);\r\n const { onBeforeSubmitFicha } = fichaProps;\r\n const { config = {} } = fichaProps;\r\n const utils = useUtilsSubmit(props);\r\n const notify = useNotify();\r\n\r\n const finalSave = useCallback(\r\n values => {\r\n const valid =\r\n onBeforeSubmitFicha &&\r\n onBeforeSubmitFicha({ form: { values }, ...utils }, 'N');\r\n if (typeof valid === 'string') {\r\n notify(valid, { type: 'warning' });\r\n return defaultSave();\r\n } else {\r\n return valid === undefined || valid\r\n ? props.onSubmit(values)\r\n : defaultSave();\r\n }\r\n },\r\n [onBeforeSubmitFicha, utils]\r\n );\r\n\r\n return (\r\n <Form\r\n {...props}\r\n {...config}\r\n onSubmit={finalSave}\r\n defaultValues={initialValues}\r\n /*toolbar={<ToolbarFicha/>}*/\r\n >\r\n <TabbedFormView component={FormContainer} />\r\n </Form>\r\n );\r\n};\r\n\r\nTabbedFormEtriek.defaultProps = {\r\n syncWithLocation: false,\r\n};\r\n","import { defaultTheme } from 'react-admin';\n\n// TODO: Probablemente no sea necesario sobreescribir nada de los temas\n\nconst darkTheme = {\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n mode: 'dark',\n },\n components: {\n ...defaultTheme.components,\n RaSidebar: {\n root: {\n drawerPaper: {\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\n },\n },\n },\n RaRichTextInput: {\n root: {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0',\n },\n },\n },\n },\n },\n },\n },\n};\n\nconst lightTheme = {\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n mode: 'light',\n },\n components: {\n ...defaultTheme.components,\n RaSidebar: {\n root: {\n drawerPaper: {\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\n },\n },\n },\n RaRichTextInput: {\n root: {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0',\n },\n },\n },\n },\n },\n },\n },\n};\n\nexport { lightTheme, darkTheme };\n","var englishMessages = {\n ra: {\n action: {\n add_filter: 'Add filter',\n add: 'Add',\n back: 'Go Back',\n bulk_actions: '1 item selected |||| %{smart_count} items selected',\n cancel: 'Cancel',\n clear_input_value: 'Clear value',\n clone: 'Clone',\n confirm: 'Confirm',\n create: 'Create',\n create_item: 'Create %{item}',\n delete: 'Delete',\n edit: 'Edit',\n export: 'Export',\n list: 'List',\n refresh: 'Refresh',\n remove_filter: 'Remove this filter',\n remove: 'Remove',\n save: 'Save',\n search: 'Search',\n select_all: 'Select all',\n select_row: 'Select this row',\n show: 'Show',\n sort: 'Sort',\n undo: 'Undo',\n unselect: 'Unselect',\n expand: 'Expand',\n close: 'Close',\n open_menu: 'Open menu',\n close_menu: 'Close menu',\n update: 'Update',\n move_up: 'Move up',\n move_down: 'Move down',\n open: 'Open',\n toggle_theme: 'Toggle Theme',\n },\n boolean: {\n true: 'Yes',\n false: 'No',\n null: ' ',\n },\n page: {\n create: 'Create %{name}',\n dashboard: 'Dashboard',\n edit: '%{name} #%{id}',\n error: 'Something went wrong',\n list: '%{name}',\n loading: 'Loading',\n not_found: 'Not Found',\n show: '%{name} #%{id}',\n empty: 'No %{name} yet.',\n invite: 'Do you want to add one?',\n },\n input: {\n file: {\n upload_several: 'Drop some files to upload, or click to select one.',\n upload_single: 'Drop a file to upload, or click to select it.',\n },\n image: {\n upload_several: 'Drop some pictures to upload, or click to select one.',\n upload_single: 'Drop a picture to upload, or click to select it.',\n },\n references: {\n all_missing: 'Unable to find references data.',\n many_missing: 'At least one of the associated references no longer appears to be available.',\n single_missing: 'Associated reference no longer appears to be available.',\n },\n password: {\n toggle_visible: 'Hide password',\n toggle_hidden: 'Show password',\n },\n },\n message: {\n about: 'About',\n are_you_sure: 'Are you sure?',\n bulk_delete_content: 'Are you sure you want to delete this %{name}? |||| Are you sure you want to delete these %{smart_count} items?',\n bulk_delete_title: 'Delete %{name} |||| Delete %{smart_count} %{name}',\n bulk_update_content: 'Are you sure you want to update this %{name}? |||| Are you sure you want to update these %{smart_count} items?',\n bulk_update_title: 'Update %{name} |||| Update %{smart_count} %{name}',\n delete_content: 'Are you sure you want to delete this item?',\n delete_title: 'Delete %{name} #%{id}',\n details: 'Details',\n error: \"A client error occurred and your request couldn't be completed.\",\n invalid_form: 'The form is not valid. Please check for errors',\n loading: 'The page is loading, just a moment please',\n no: 'No',\n not_found: 'Either you typed a wrong URL, or you followed a bad link.',\n yes: 'Yes',\n unsaved_changes: \"Some of your changes weren't saved. Are you sure you want to ignore them?\",\n },\n navigation: {\n no_results: 'No results found',\n no_more_results: 'The page number %{page} is out of boundaries. Try the previous page.',\n page_out_of_boundaries: 'Page number %{page} out of boundaries',\n page_out_from_end: 'Cannot go after last page',\n page_out_from_begin: 'Cannot go before page 1',\n page_range_info: '%{offsetBegin}-%{offsetEnd} of %{total}',\n partial_page_range_info: '%{offsetBegin}-%{offsetEnd} of more than %{offsetEnd}',\n current_page: 'Page %{page}',\n page: 'Go to page %{page}',\n first: 'Go to first page',\n last: 'Go to last page',\n next: 'Go to next page',\n previous: 'Go to previous page',\n page_rows_per_page: 'Rows per page:',\n skip_nav: 'Skip to content',\n },\n sort: {\n sort_by: 'Sort by %{field} %{order}',\n ASC: 'ascending',\n DESC: 'descending',\n },\n auth: {\n auth_check_error: 'Please login to continue',\n user_menu: 'Profile',\n username: 'Username',\n password: 'Password',\n sign_in: 'Sign in',\n sign_in_error: 'Authentication failed, please retry',\n logout: 'Logout',\n },\n notification: {\n updated: 'Element updated |||| %{smart_count} elements updated',\n created: 'Element created',\n deleted: 'Element deleted |||| %{smart_count} elements deleted',\n bad_item: 'Incorrect element',\n item_doesnt_exist: 'Element does not exist',\n http_error: 'Server communication error',\n data_provider_error: 'dataProvider error. Check the console for details.',\n i18n_error: 'Cannot load the translations for the specified language',\n canceled: 'Action cancelled',\n logged_out: 'Your session has ended, please reconnect.',\n not_authorized: \"You're not authorized to access this resource.\",\n },\n validation: {\n required: 'Required',\n minLength: 'Must be %{min} characters at least',\n maxLength: 'Must be %{max} characters or less',\n minValue: 'Must be at least %{min}',\n maxValue: 'Must be %{max} or less',\n number: 'Must be a number',\n email: 'Must be a valid email',\n oneOf: 'Must be one of: %{options}',\n regex: 'Must match a specific format (regexp): %{pattern}',\n },\n saved_queries: {\n label: 'Saved queries',\n query_name: 'Query name',\n new_label: 'Save current query...',\n new_dialog_title: 'Save current query as',\n remove_label: 'Remove saved query',\n remove_label_with_name: 'Remove query \"%{name}\"',\n remove_dialog_title: 'Remove saved query?',\n remove_message: 'Are you sure you want to remove that item from your list of saved queries?',\n help: 'Filter the list and save this query for later',\n },\n },\n};\nexport default englishMessages;\n","import englishMessages from 'ra-language-english';\r\n//import resources from './en-fides';\r\n\r\nenglishMessages.ra.page.empty = 'No records yet';\r\n\r\nconst enMessages = {\r\n ...englishMessages,\r\n login: {\r\n id: 'ID',\r\n hint: 'Login',\r\n required: 'Insert Username or ID',\r\n send: 'Send',\r\n email: 'Enter your email address',\r\n check_email:\r\n 'Check your email inbox, we just send you a verification code!',\r\n must_enter_credentials: 'You must first enter Username or ID',\r\n restore_password: 'Restore Password',\r\n punch_in: 'Punch In',\r\n },\r\n pos: {\r\n search: 'Search',\r\n change_pin: 'Change Pin',\r\n change_password: 'Change Password',\r\n configuration: 'Configuration',\r\n language: 'Language',\r\n theme: {\r\n name: 'Theme',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Welcome',\r\n subtitle: 'Employee Management',\r\n aor_button: 'Metiri WebSite',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Must be greater than or equal to %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default enMessages;\r\n","const spanishMessages = {\n ra: {\n action: {\n add: \"Añadir\",\n add_filter: \"Añadir filtro\",\n back: \"Ir atrás\",\n bulk_actions: \"1 item seleccionado |||| %{smart_count} items seleccionados\",\n cancel: \"Cancelar\",\n clear_input_value: \"Limpiar valor\",\n clone: \"Clonar\",\n close: \"Cerrar\",\n close_menu: \"Cerrar menú\",\n confirm: \"Confirmar\",\n create: \"Crear\",\n create_item: \"Crear %{item}\",\n delete: \"Eliminar\",\n edit: \"Editar\",\n expand: \"Expandir\",\n export: \"Exportar\",\n list: \"Listar\",\n move_up: \"Mover arriba\",\n move_down: \"Mover abajo\",\n open_menu: \"Abrir menú\",\n refresh: \"Refrescar\",\n remove: \"Borrar\",\n remove_filter: \"Borrar filtro\",\n save: \"Guardar\",\n search: \"Buscar\",\n select_all: \"Seleccionar todo\",\n select_row: \"Seleccionar esta fila\",\n show: \"Mostrar\",\n sort: \"Ordenar\",\n undo: \"Deshacer\",\n unselect: \"Deseleccionar\",\n update: \"Actualizar\"\n },\n auth: {\n auth_check_error: \"Por favor inicie sesión para continuar\",\n logout: \"Cerrar Sesión\",\n password: \"Contraseña\",\n sign_in: \"Acceder\",\n sign_in_error: \"La autenticación falló, por favor, vuelva a intentarlo\",\n user_menu: \"Perfil\",\n username: \"Usuario\"\n },\n boolean: {\n true: \"Sí\",\n false: \"No\",\n null: \" \"\n },\n input: {\n file: {\n upload_several: \"Arrastre algunos archivos para subir o haga clic para seleccionarlos.\",\n upload_single: \"Arrastre un archivo para subir o haga clic para seleccionarlo.\"\n },\n image: {\n upload_several: \"Arrastre algunas imagénes para subir o haga clic para seleccionarlas.\",\n upload_single: \"Arrastre alguna imagen para subir o haga clic para seleccionarla.\"\n },\n references: {\n all_missing: \"No se pueden encontrar datos de referencias.\",\n many_missing: \"Al menos una de las referencias asociadas parece no estar disponible.\",\n single_missing: \"La referencia asociada no parece estar disponible.\"\n },\n password: {\n toggle_visible: \"Ocultar contraseña\",\n toggle_hidden: \"Mostrar contraseña\"\n }\n },\n message: {\n about: \"Acerca de\",\n are_you_sure: \"¿Está seguro?\",\n bulk_delete_content: \"¿Seguro que quiere eliminar este %{name}? |||| ¿Seguro que quiere eliminar estos %{smart_count} items?\",\n bulk_delete_title: \"Eliminar %{name} |||| Eliminar %{smart_count} %{name} items\",\n bulk_update_content: \"¿Seguro que quiere actualizar este %{name}? |||| ¿Seguro que quiere actualizar estos %{smart_count} items?\",\n bulk_update_title: \"Actualizar %{name} |||| Actualizar %{smart_count} %{name} items\",\n delete_content: \"¿Seguro que quiere eliminar este item?\",\n delete_title: \"Eliminar %{name} #%{id}\",\n details: \"Detalles\",\n error: \"Se produjo un error en el cliente y su solicitud no se pudo completar\",\n invalid_form: \"El formulario no es válido. Por favor verifique si hay errores\",\n loading: \"La página se está cargando, espere un momento por favor\",\n no: \"No\",\n not_found: \"O bien escribió una URL incorrecta o siguió un enlace incorrecto.\",\n yes: \"Sí\",\n unsaved_changes: \"Algunos de sus cambios no se guardaron. ¿Está seguro que quiere ignorarlos?\"\n },\n navigation: {\n next: \"Siguiente\",\n no_more_results: \"El número de página %{page} está fuera de los límites. Pruebe la página anterior.\",\n no_results: \"No se han encontrado resultados\",\n page_out_from_begin: \"No puede ir antes de la página 1\",\n page_out_from_end: \"No puede ir después de la última página\",\n page_out_of_boundaries: \"Número de página %{page} fuera de los límites\",\n page_range_info: \"%{offsetBegin} - %{offsetEnd} de %{total}\",\n page_rows_per_page: \"Filas por página:\",\n prev: \"Anterior\",\n skip_nav: \"Saltar al contenido\"\n },\n sort: {\n sort_by: \"Ordenar por %{field} %{order}\",\n ASC: \"ascendente\",\n DESC: \"descendente\"\n },\n notification: {\n bad_item: \"Elemento incorrecto\",\n canceled: \"Acción cancelada\",\n created: \"Elemento creado\",\n data_provider_error: \"Error del proveedor de datos. Consulte la consola para más detalles.\",\n deleted: \"Elemento borrado |||| %{smart_count} elementos borrados.\",\n http_error: \"Error de comunicación con el servidor\",\n item_doesnt_exist: \"El elemento no existe\",\n logged_out: \"Su sesión ha finalizado, vuelva a conectarse.\",\n updated: \"Elemento actualizado |||| %{smart_count} elementos actualizados\",\n i18n_error: \"No se pudieron cargar las traducciones para el idioma especificado\",\n not_authorized: \"No tiene autorización para acceder a este recurso.\"\n },\n page: {\n create: \"Crear %{name}\",\n dashboard: \"Tablero\",\n edit: \"%{name} #%{id}\",\n empty: \"Sin %{name} todavía.\",\n error: \"Algo salió mal\",\n invite: \"¿Quiere agregar una?\",\n list: \"Lista de %{name}\",\n loading: \"Cargando\",\n not_found: \"No encontrado\",\n show: \"%{name} #%{id}\"\n },\n validation: {\n email: \"Debe ser un correo electrónico válido\",\n maxLength: \"Debe contener %{max} caracteres o menos\",\n maxValue: \"Debe ser %{max} o menos\",\n minLength: \"Debe contener %{min} caracteres al menos\",\n minValue: \"Debe ser al menos %{min}\",\n number: \"Debe ser un número\",\n oneOf: \"Debe ser uno de: %{options}\",\n regex: \"Debe coincidir con un formato específico (regexp): %{pattern}\",\n required: \"Requerido\"\n }\n }\n};\n\nexport default spanishMessages;\n//# sourceMappingURL=index.js.map\n","import spanishMessages from '@blackbox-vision/ra-language-spanish';\r\n//import resources from './es-fides';\r\n\r\nspanishMessages.ra.notification.created = 'Datos guardados correctamente';\r\nspanishMessages.ra.action.bulk_actions =\r\n '1 seleccionado |||| %{smart_count} seleccionados';\r\nspanishMessages.ra.page.dashboard = 'Inicio';\r\nspanishMessages.ra.page.empty = 'Sin registros todavía';\r\nspanishMessages.ra.page.invite = '¿Quiere agregar uno?';\r\nspanishMessages.ra.page.list = '%{name}';\r\nspanishMessages.ra.page.edit = 'Editar %{name}';\r\nspanishMessages.ra.action.back = 'Volver';\r\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n login: {\r\n id: 'Cédula',\r\n hint: 'Inicio de Sesión',\r\n required: 'Ingrese Usuario o Cédula',\r\n email: 'Ingrese su email aquí',\r\n send: 'Enviar',\r\n check_email:\r\n 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\r\n must_enter_credentials:\r\n 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\r\n restore_password: 'Restablecer Contraseña',\r\n punch_in: 'Generar Marcas',\r\n },\r\n pos: {\r\n search: 'Búsqueda',\r\n change_pin: 'Cambiar Pin',\r\n change_password: 'Cambiar Contraseña',\r\n configuration: 'Configuración',\r\n language: 'Lenguaje',\r\n theme: {\r\n name: 'Tema Visual',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Bienvenid@',\r\n subtitle: 'Gestión de Funcionarios',\r\n aor_button: 'Sitio de Metiri',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Debe ser mayor o igual a %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default esMessages;\r\n","import { useContext } from 'react';\r\nimport { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst useFieldController = props => {\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const { [props.source]: initialProps = {} } = fichaProps;\r\n const { hidden: hiddenProps = false, ...rest } = props;\r\n const {\r\n hidden: hiddenInitial,\r\n useContenido = useDefaultHook,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n ...restInitialProps,\r\n });\r\n const { hidden: oculto, ...dynamicPropsRest } = dynamicProps;\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${props.source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n return {\r\n propsContenido: {\r\n ...rest,\r\n ...restInitialProps,\r\n ...dynamicPropsRest,\r\n },\r\n hidden: oculto !== undefined ? oculto : hidden,\r\n };\r\n};\r\n\r\nexport default useFieldController;\r\n","import { useContext, useRef } from 'react';\r\nimport { useInput } from 'react-admin';\r\nimport { useSelector } from 'react-redux';\r\nimport { etrRequerido } from '../../utils';\r\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst validateInput = (value, allVallues, meta) =>\r\n typeof meta?.data === 'string' ? meta.data : undefined;\r\n\r\nconst useContenidoController = props => {\r\n const { source } = props;\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const configInput = useSelector(state => {\r\n const configInputs = state.configInputs\r\n ? state.configInputs.filter(item => item.id === source)\r\n : [];\r\n return configInputs[0] ? configInputs[0] : null;\r\n });\r\n const {\r\n disabled: reduxDisabled,\r\n hidden: reduxHidden,\r\n required: reduxRequired,\r\n } = configInput || {};\r\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\r\n\r\n const { [source]: initialProps = {} } = fichaProps;\r\n const {\r\n onFocus: onFocusProps,\r\n onChange: onChangeProps,\r\n onBlur: onBlurProps,\r\n hidden: hiddenProps = false,\r\n disabled: disabledProps = false,\r\n validate: propValidate,\r\n ...rest\r\n } = props;\r\n const { field } = useInput(props);\r\n const {\r\n onFocus: onFocusInitial,\r\n onBlur: onBlurInitial,\r\n onChange: onChangeInitial,\r\n hidden: hiddenInitial,\r\n disabled: disabledInitial,\r\n useContenido = useDefaultHook,\r\n validate: initValidate,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const disabled =\r\n disabledInitial !== undefined ? disabledInitial : disabledProps;\r\n const onFocus =\r\n onFocusInitial !== undefined ? onFocusInitial : onFocusProps;\r\n const onBlur = onBlurInitial !== undefined ? onBlurInitial : onBlurProps;\r\n const onChange =\r\n onChangeInitial !== undefined ? onChangeInitial : onChangeProps;\r\n const utils = useUtilsFicha(props);\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n utils,\r\n ...restInitialProps,\r\n });\r\n const previousValue = useRef(field.value);\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n const {\r\n hidden: hiddenDinamico,\r\n disabled: disabledDinamico,\r\n onFocus: onFocusDinamico,\r\n onChnage: onChangeDinamico,\r\n onBlur: onBlurDinamico,\r\n validate: dynamicValidate,\r\n ...dynamicPropsRest\r\n } = dynamicProps;\r\n const onFocusFinal = onFocusDinamico || onFocus;\r\n const onBlurFinal = onBlurDinamico || onBlur;\r\n const onChangeFinal = onChangeDinamico || onChange;\r\n\r\n const argCero = { ...utils, prev: previousValue.current };\r\n const finalPropsValidate = Array.isArray(propValidate)\r\n ? propValidate\r\n : [propValidate];\r\n const finalInitValidate = Array.isArray(initValidate)\r\n ? initValidate\r\n : [initValidate];\r\n const finalDynamicValidate = Array.isArray(dynamicValidate)\r\n ? dynamicValidate\r\n : [dynamicValidate];\r\n const finalValidate = [\r\n ...finalPropsValidate,\r\n ...finalInitValidate,\r\n ...finalDynamicValidate,\r\n validateInput,\r\n reduxValidate,\r\n ].filter(i => i !== undefined);\r\n\r\n return {\r\n propsContenido: {\r\n onFocus: e => {\r\n onFocusFinal && onFocus(utils, estado, e);\r\n previousValue.current = e.target.value;\r\n },\r\n onBlur: e => onBlurFinal && onBlurFinal(argCero, estado, e),\r\n onChange: e => onChangeFinal && onChangeFinal(argCero, estado, e),\r\n helperText: false,\r\n validate: finalValidate,\r\n ...rest,\r\n ...restInitialProps,\r\n ...dynamicPropsRest,\r\n disabled:\r\n reduxDisabled !== undefined\r\n ? reduxDisabled\r\n : disabledDinamico !== undefined\r\n ? disabledDinamico\r\n : disabled,\r\n },\r\n hidden:\r\n reduxHidden !== undefined\r\n ? reduxHidden\r\n : hiddenDinamico !== undefined\r\n ? hiddenDinamico\r\n : hidden,\r\n };\r\n};\r\n\r\nexport default useContenidoController;\r\n","import * as React from 'react';\r\nimport { useEffect, useRef } from 'react';\r\nimport { ReferenceInput, SelectInput, useChoicesContext } from 'react-admin';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { deleteRecargarComboBox } from '../../utils';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nexport const SelectInputEtriek = props => {\r\n const { callback, ...rest } = props;\r\n const { isLoading, allChoices } = useChoicesContext();\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n // Llamo al callback de recargarComboBox pasándole los nuevos items\r\n if (typeof callback === 'function') {\r\n callback(Object.values([allChoices]));\r\n }\r\n }\r\n //TODO: Siempre entra al useEffect porque callback siempre cambia, aunque no siempre llama por ajax, porque no cambiaron los parámetros de la acción de redux\r\n // Sacar `callback` del array de dependencias y probar si entra al useEffect al cambiarlos parámetros de recargarComboBox\r\n }, [allChoices, callback, isLoading]);\r\n\r\n return <SelectInput {...rest} />;\r\n};\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const dispatch = useDispatch();\r\n const { helperText, source, reference, ...rest } = props;\r\n const recarga_cb = useSelector(state => {\r\n const rcb = state.reload_cb\r\n ? state.reload_cb.filter(item => item.id === source)\r\n : [];\r\n return rcb[0] ? rcb[0] : null;\r\n });\r\n const respaldoFiltro = useRef(recarga_cb);\r\n const filter =\r\n recarga_cb === null && respaldoFiltro.current\r\n ? respaldoFiltro.current\r\n : recarga_cb;\r\n\r\n let callback, finalFilter;\r\n if (filter) {\r\n const { callback: tempCallback, ...restFilter } = filter;\r\n callback = tempCallback;\r\n finalFilter = restFilter;\r\n }\r\n\r\n useEffect(() => {\r\n if (recarga_cb !== null) {\r\n respaldoFiltro.current = recarga_cb;\r\n dispatch(deleteRecargarComboBox(source));\r\n }\r\n }, [JSON.stringify(recarga_cb)]);\r\n\r\n return !hidden ? (\r\n <ReferenceInput\r\n reference={reference}\r\n source={source}\r\n perPage={250}\r\n filter={finalFilter}\r\n >\r\n <SelectInputEtriek\r\n {...rest}\r\n callback={callback}\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={source}\r\n />\r\n </ReferenceInput>\r\n ) : null;\r\n};\r\nexport default ComboBox;\r\n","import { Paper } from '@mui/material';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { alpha } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\nimport ActionCheck from '@mui/icons-material/CheckCircle';\nimport AlertError from '@mui/icons-material/ErrorOutline';\nimport classnames from 'clsx';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { useRecordSelection, useTranslate } from 'react-admin';\nimport Draggable from 'react-draggable';\nimport { useSelector } from 'react-redux';\n//import TreeWithDetails from \"../tree-ts/TreeWithDetails\";\n\nconst useStyles = makeStyles(\n theme => ({\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n iconPaddingStyle: {\n paddingRight: '0.5em',\n },\n }),\n { name: 'RaConfirm' }\n);\n\nconst PaperComponent = props => (\n <Draggable\n handle=\"#draggable-dialog-title\"\n cancel={'[class*=\"MuiDialogContent-root\"]'}\n >\n <Paper {...props} />\n </Draggable>\n);\n\nconst cursorStyle = { cursor: 'move' };\n\nconst FiltroAsig = props => {\n const {\n isOpen,\n isLoading,\n title,\n content,\n cancel,\n confirmColor,\n ConfirmIcon,\n CancelIcon,\n onClose,\n onConfirm,\n contentResource,\n translateOptions = {},\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n const [selectedIds] = useRecordSelection(contentResource);\n\n const handleConfirm = useCallback(\n (e, button) => {\n e.stopPropagation();\n onConfirm(e, selectedIds);\n },\n [selectedIds, onConfirm]\n );\n\n const handleClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n onClick={handleClick}\n fullWidth\n maxWidth=\"lg\"\n PaperComponent={PaperComponent}\n aria-labelledby=\"draggable-dialog-title\"\n >\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\n {translate(title, { _: title, ...translateOptions })}\n </DialogTitle>\n <DialogContent dividers={true}>{content}</DialogContent>\n <DialogActions>\n <Button disabled={isLoading} onClick={onClose}>\n <CancelIcon className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={isLoading}\n onClick={e => handleConfirm(e, 'yes')}\n className={classnames('ra-confirm', {\n [classes.confirmWarning]: confirmColor === 'warning',\n [classes.confirmPrimary]: confirmColor === 'primary',\n })}\n autoFocus\n >\n <ConfirmIcon className={classes.iconPaddingStyle} />\n {translate('ra.action.confirm')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nFiltroAsig.propTypes = {\n cancel: PropTypes.string,\n classes: PropTypes.object,\n confirm: PropTypes.string,\n confirmColor: PropTypes.string,\n ConfirmIcon: PropTypes.elementType,\n CancelIcon: PropTypes.elementType,\n content: PropTypes.node.isRequired,\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nFiltroAsig.defaultProps = {\n cancel: 'ra.action.cancel',\n classes: {},\n confirmColor: 'primary',\n ConfirmIcon: ActionCheck,\n CancelIcon: AlertError,\n isOpen: false,\n};\n\nexport default FiltroAsig;\n","import IconButton from '@mui/material/IconButton';\r\nimport CheckIcon from '@mui/icons-material/Check';\r\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport * as React from 'react';\r\nimport { Fragment, useCallback, useState } from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport FiltroAsis from './FiltroAsis';\r\n\r\nconst BulkActions = () => <Fragment />;\r\nconst defaultValue = {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n};\r\n\r\nconst format = v => {\r\n //console.log({ format: v });\r\n if (!v || v?.all) {\r\n return 'Todos';\r\n } else if (v?.none || v.seleccion.length === 0) {\r\n return 'Ninguno';\r\n }\r\n\r\n return `Selección (${v.seleccion.length})`;\r\n};\r\n\r\nconst parse = v => {\r\n //console.log({ parse: v });\r\n return v;\r\n};\r\n\r\nconst TextBoxSelection = props => {\r\n const { disabled, asistant, asistantResource, label, source, ...rest } =\r\n props;\r\n const [open, setOpen] = useState(false);\r\n const form = useFormContext();\r\n\r\n const handleClose = useCallback(() => {\r\n setOpen(false);\r\n }, [setOpen]);\r\n\r\n const handleConfirm = (e, selectedIds) => {\r\n setOpen(false);\r\n form.setValue(source, {\r\n seleccion: selectedIds,\r\n all: false,\r\n none: false,\r\n });\r\n };\r\n\r\n const handleNinguno = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: false,\r\n none: true,\r\n });\r\n };\r\n\r\n const handleTodos = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n <div style={{ display: 'flex', alignItems: 'center' }}>\r\n <TextInput\r\n initialValue={defaultValue}\r\n {...rest}\r\n source={source}\r\n label={label}\r\n disabled\r\n parse={parse}\r\n format={format}\r\n helperText={false}\r\n InputProps={{\r\n endAdornment: (\r\n <>\r\n <IconButton\r\n onClick={handleNinguno}\r\n disabled={disabled}\r\n aria-label=\"Ninguno\"\r\n size=\"small\"\r\n title=\"Ninguno\"\r\n >\r\n <RemoveCircleOutlineIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={handleTodos}\r\n disabled={disabled}\r\n aria-label=\"Todos\"\r\n size=\"small\"\r\n title=\"Todos\"\r\n >\r\n <CheckIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => setOpen(true)}\r\n disabled={disabled}\r\n aria-label=\"Selección\"\r\n size=\"small\"\r\n title=\"Selección\"\r\n >\r\n <SearchIcon />\r\n </IconButton>\r\n </>\r\n ),\r\n }}\r\n />\r\n </div>\r\n <FiltroAsis\r\n isOpen={open}\r\n title={`Selección de ${label}`}\r\n contentResource={asistantResource}\r\n content={React.createElement(asistant, {\r\n bulkActionButtons: <BulkActions />,\r\n hasCreate: false,\r\n exporter: false,\r\n resource: asistantResource,\r\n })}\r\n onConfirm={handleConfirm}\r\n onClose={handleClose}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default TextBoxSelection;\r\n","import { Box, Paper } from '@mui/material';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { alpha } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\nimport ActionCheck from '@mui/icons-material/CheckCircle';\nimport AlertError from '@mui/icons-material/ErrorOutline';\nimport classnames from 'clsx';\nimport { TreeView } from 'devextreme-react';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n Datagrid,\n List,\n TextField,\n useDataProvider,\n useTranslate,\n} from 'react-admin';\nimport Draggable from 'react-draggable';\n\nconst PostList = props => (\n <List\n {...props}\n hasCreate={false}\n exporter={false}\n perPage={25}\n title=\" \"\n bulkActionButtons={<span />}\n >\n <Datagrid>\n <TextField source=\"funced\" sortable label=\"Cédula\" />\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\n </Datagrid>\n </List>\n);\n\nconst filtroInicial = { fillista: 'empcod=-1' };\n\nconst TreeWithList = props => {\n const [filtro, setFiltro] = React.useState(filtroInicial);\n const dataProvider = useDataProvider();\n\n const onClick = useCallback(\n e => {\n setFiltro({ fillista: e.node.key });\n },\n [setFiltro]\n );\n\n const createChildren = useCallback(\n parent => {\n const parentId = parent ? parent.itemData.id : '';\n\n return dataProvider\n .getChildNodes('form_224', { parentId: parentId })\n .then(response => response.data)\n .catch(() => {\n throw new Error('Data Loading Error');\n });\n },\n [dataProvider]\n );\n\n return (\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\n <Box flexGrow={1}>\n <TreeView\n id=\"funcionarios-treeview\"\n dataStructure=\"plain\"\n rootValue=\"\"\n onItemClick={onClick}\n createChildren={createChildren}\n />\n </Box>\n <Box flexGrow={2}>\n <PostList resource=\"form_224\" filter={filtro} />\n </Box>\n </Box>\n );\n};\n\nconst useStyles = makeStyles(\n theme => ({\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n iconPaddingStyle: {\n paddingRight: '0.5em',\n },\n }),\n { name: 'RaConfirm' }\n);\n\nconst PaperComponent = props => (\n <Draggable\n handle=\"#draggable-dialog-title\"\n cancel={'[class*=\"MuiDialogContent-root\"]'}\n >\n <Paper {...props} />\n </Draggable>\n);\n\nconst cursorStyle = { cursor: 'move' };\n\nconst FiltroFuncionarios = props => {\n const {\n isOpen,\n isLoading,\n title,\n cancel,\n confirmColor,\n ConfirmIcon,\n CancelIcon,\n onClose,\n onConfirm,\n translateOptions = {},\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const handleConfirm = useCallback(\n (e, button) => {\n e.stopPropagation();\n onConfirm(e, button);\n },\n [onConfirm]\n );\n\n const handleClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n onClick={handleClick}\n fullWidth\n maxWidth=\"lg\"\n PaperComponent={PaperComponent}\n aria-labelledby=\"draggable-dialog-title\"\n >\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\n {translate(title, { _: title, ...translateOptions })}\n </DialogTitle>\n <DialogContent dividers={true}>\n <TreeWithList />\n </DialogContent>\n <DialogActions>\n <Button disabled={isLoading} onClick={onClose}>\n <CancelIcon className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={isLoading}\n onClick={e => handleConfirm(e, 'yes')}\n className={classnames('ra-confirm', {\n [classes.confirmWarning]: confirmColor === 'warning',\n [classes.confirmPrimary]: confirmColor === 'primary',\n })}\n autoFocus\n >\n <ConfirmIcon className={classes.iconPaddingStyle} />\n {translate('ra.action.confirm')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nFiltroFuncionarios.propTypes = {\n cancel: PropTypes.string,\n classes: PropTypes.object,\n confirm: PropTypes.string,\n confirmColor: PropTypes.string,\n ConfirmIcon: PropTypes.elementType,\n CancelIcon: PropTypes.elementType,\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nFiltroFuncionarios.defaultProps = {\n cancel: 'ra.action.cancel',\n classes: {},\n confirmColor: 'primary',\n ConfirmIcon: ActionCheck,\n CancelIcon: AlertError,\n isOpen: false,\n};\n\nexport default FiltroFuncionarios;\n","import IconButton from '@mui/material/IconButton';\r\nimport CheckIcon from '@mui/icons-material/Check';\r\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport * as React from 'react';\r\nimport { Fragment, useCallback, useState } from 'react';\r\nimport { TextInput, useRecordSelection } from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport FiltroFuncionarios from './FiltroFuncionarios';\r\n\r\nconst defaultValue = {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n};\r\n\r\nconst format = v => {\r\n if (!v || v?.all) {\r\n return 'Todos';\r\n } else if (v?.none || v.seleccion.length === 0) {\r\n return 'Ninguno';\r\n }\r\n\r\n return `Selección (${v.seleccion.length})`;\r\n};\r\n\r\nconst parse = v => {\r\n //console.log({ parse: v })\r\n return v;\r\n};\r\n\r\nconst TBSF = props => {\r\n const {\r\n disabled,\r\n asistant,\r\n asistantResource,\r\n label = 'Funcionarios',\r\n source,\r\n ...rest\r\n } = props;\r\n const [selectedIds] = useRecordSelection('form_224');\r\n\r\n const [open, setOpen] = useState(false);\r\n const form = useFormContext();\r\n\r\n const handleClose = useCallback(() => {\r\n setOpen(false);\r\n }, [setOpen]);\r\n\r\n const handleConfirm = (e, button) => {\r\n setOpen(false);\r\n form.setValue(source, {\r\n seleccion: selectedIds,\r\n all: false,\r\n none: false,\r\n });\r\n };\r\n\r\n const handleNinguno = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: false,\r\n none: true,\r\n });\r\n };\r\n\r\n const handleTodos = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <div style={{ display: 'flex', alignItems: 'center' }}>\r\n <TextInput\r\n initialValue={defaultValue}\r\n {...rest}\r\n source={source}\r\n label={label}\r\n disabled\r\n parse={parse}\r\n format={format}\r\n helperText={false}\r\n InputProps={{\r\n endAdornment: (\r\n <>\r\n <IconButton\r\n onClick={handleNinguno}\r\n disabled={disabled}\r\n aria-label=\"Ninguno\"\r\n size=\"small\"\r\n title=\"Ninguno\"\r\n >\r\n <RemoveCircleOutlineIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={handleTodos}\r\n disabled={disabled}\r\n aria-label=\"Todos\"\r\n size=\"small\"\r\n title=\"Todos\"\r\n >\r\n <CheckIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => setOpen(true)}\r\n disabled={disabled}\r\n aria-label=\"Selección\"\r\n size=\"small\"\r\n title=\"Selección\"\r\n >\r\n <SearchIcon />\r\n </IconButton>\r\n </>\r\n ),\r\n }}\r\n />\r\n </div>\r\n <FiltroFuncionarios\r\n isOpen={open}\r\n title={`Selección de ${label}`}\r\n onConfirm={handleConfirm}\r\n onClose={handleClose}\r\n />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default TBSF;\r\n","import * as React from 'react';\nimport { BooleanField as RaBooleanField, useRecordContext } from 'react-admin';\nimport useFieldController from './useFieldController';\n\nconst BooleanField = props => {\n const { propsContenido, hidden } = useFieldController(props);\n const record = useRecordContext();\n const boolRecord = JSON.parse(JSON.stringify(record));\n const value = boolRecord[props.source];\n boolRecord[props.source] = value != '' && value != '0';\n\n return (\n !hidden && <RaBooleanField {...propsContenido} record={boolRecord} />\n );\n};\n\nexport default BooleanField;\n","import * as React from 'react';\r\nimport { FileInput, ImageField } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst Camino = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return (\r\n !hidden && (\r\n <FileInput accept=\"\" maxSize={5000000} {...propsContenido}>\r\n <ImageField source=\"src\" />\r\n </FileInput>\r\n )\r\n );\r\n};\r\n\r\nexport default Camino;\r\n","import * as React from 'react';\r\nimport { BooleanInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst CheckBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <BooleanInput {...propsContenido} />;\r\n};\r\n\r\nexport default CheckBox;\r\n","import * as React from 'react';\r\nimport { SelectInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ComboBoxManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <SelectInput {...propsContenido} />;\r\n};\r\n\r\nexport default ComboBoxManual;\r\n","import * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Edit, useEditController } from 'react-admin';\r\nimport { useInitFicha } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nexport const EditEtriek = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const controllerProps = useEditController(rest);\r\n const { record: initialValues, isLoading } = controllerProps;\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Edit {...rest} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n","import Avatar from '@mui/material/Avatar';\r\nimport * as React from 'react';\r\nimport { useRecordContext } from 'react-admin';\r\n\r\nconst ImageField = props => {\r\n const { title, source, src } = props;\r\n const record = useRecordContext(props);\r\n const rutaImg = `${src}/${record[source]}`;\r\n\r\n return <Avatar title={title} src={rutaImg} />;\r\n};\r\n\r\nexport default ImageField;\r\n","import * as React from 'react';\r\nimport { Layout } from 'react-admin';\r\nimport AppBar from './AppBar';\r\nimport Menu from './Menu';\r\n\r\nexport default props => <Layout {...props} appBar={AppBar} menu={Menu} />;\r\n","import * as React from 'react';\r\nimport { Children, cloneElement, useMemo } from 'react';\r\nimport {\r\n CreateButton,\r\n ExportButton,\r\n sanitizeListRestProps,\r\n TopToolbar,\r\n useListContext,\r\n useResourceContext,\r\n useResourceDefinition,\r\n} from 'react-admin';\r\nimport { useUtilsGrilla } from '../utils';\r\n\r\nconst ListActionsEtriek = props => {\r\n const { className, exporter, filters, children, jsBotonGrilla, ...rest } =\r\n props;\r\n const { utils } = useUtilsGrilla(props);\r\n const listContext = useListContext(props);\r\n const resource = useResourceContext(rest);\r\n const { hasCreate } = useResourceDefinition(rest);\r\n\r\n const {\r\n currentSort,\r\n displayedFilters,\r\n filterValues,\r\n selectedIds,\r\n showFilter,\r\n total,\r\n } = listContext;\r\n\r\n const utilsGrilla = { ...utils, ...listContext };\r\n\r\n return useMemo(\r\n () => (\r\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\r\n {filters &&\r\n cloneElement(filters, {\r\n resource,\r\n showFilter,\r\n displayedFilters,\r\n filterValues,\r\n context: 'button',\r\n })}\r\n {hasCreate && <CreateButton />}\r\n {exporter !== false && (\r\n <ExportButton\r\n disabled={total === 0}\r\n resource={resource}\r\n sort={currentSort}\r\n filterValues={filterValues}\r\n />\r\n )}\r\n {Children.map(children, (child, index) =>\r\n cloneElement(child, {\r\n onClick: !child.props.options\r\n ? e => jsBotonGrilla(utilsGrilla, child.key)\r\n : null,\r\n options: child.props.options\r\n ? child.props.options.map(option => ({\r\n ...option,\r\n onClick: e =>\r\n jsBotonGrilla(utilsGrilla, option.key),\r\n }))\r\n : null,\r\n })\r\n )}\r\n </TopToolbar>\r\n ),\r\n [resource, displayedFilters, filterValues, selectedIds, filters, total]\r\n );\r\n};\r\n\r\nexport default ListActionsEtriek;\r\n","import * as React from 'react';\r\nimport { ReferenceArrayInput, SelectArrayInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ListCheck = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n //const parentLoaded = useRef(false);\r\n //const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n\r\n /*useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);\r\n */\r\n\r\n return !hidden ? (\r\n <ReferenceArrayInput {...rest}>\r\n <SelectArrayInput\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceArrayInput>\r\n ) : null;\r\n};\r\nexport default ListCheck;\r\n","import Typography from '@mui/material/Typography';\nimport * as React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nconst MultiTextField = props => {\n const { fields, className, textAlign, sortable, ...rest } = props;\n const { campos, separador = '', secundario = [], hasSecundario } = fields;\n const record = useRecordContext();\n const principal = campos\n .map(item => (record[item] !== undefined ? record[item] : item))\n .join(`${separador}`);\n\n return (\n <Typography noWrap variant=\"inherit\" className={className} {...rest}>\n {principal}\n {hasSecundario && (\n <Typography\n component=\"span\"\n display=\"block\"\n color=\"textSecondary\"\n variant=\"caption\"\n >\n {secundario\n .map(\n item =>\n `${item.etiqueta || '---'}: ${\n record[item.campo] || '---'\n }`\n )\n .join(' ')}\n </Typography>\n )}\n </Typography>\n );\n};\n\nexport default MultiTextField;\n","import * as React from 'react';\r\nimport { PasswordInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst Password = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <PasswordInput {...propsContenido} />;\r\n};\r\n\r\nexport default Password;\r\n","import * as React from 'react';\r\nimport { useRef } from 'react';\r\nimport { RadioButtonGroupInput, ReferenceInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n //const parentLoaded = useRef(false);\r\n //const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n\r\n /* useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);*/\r\n\r\n return !hidden ? (\r\n <ReferenceInput {...rest}>\r\n <RadioButtonGroupInput\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceInput>\r\n ) : null;\r\n};\r\n\r\nexport default ComboBox;\r\n","import * as React from 'react';\r\nimport { RadioButtonGroupInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst RadioButtonManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <RadioButtonGroupInput {...propsContenido} />;\r\n};\r\n\r\nexport default RadioButtonManual;\r\n","import * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Show, useShowController } from 'react-admin';\r\nimport { useInitFicha } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nexport const ShowEtriek = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const controllerProps = useShowController(rest);\r\n const { record: initialValues, isLoading } = controllerProps;\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Show {...rest} {...controllerProps} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n","import Divider from '@mui/material/Divider';\r\nimport Tab from '@mui/material/Tab';\r\nimport Tabs from '@mui/material/Tabs';\r\nimport * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport GrillaEtriek from './GrillaEtriek';\r\n\r\nconst TabbedGrillaEtriek = props => {\r\n const {\r\n filterValues,\r\n setFilters,\r\n tabs: { ids, ...tabs },\r\n GridComponent = GrillaEtriek,\r\n ...rest\r\n } = props;\r\n const tabActual = filterValues.id;\r\n\r\n const handleChange = (event, value) => {\r\n setFilters({ ...filterValues, id: value });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Tabs\r\n value={tabActual}\r\n indicatorColor=\"primary\"\r\n onChange={handleChange}\r\n >\r\n {ids.map(id => (\r\n <Tab\r\n key={id}\r\n label={id.charAt(0).toUpperCase() + id.slice(1)}\r\n value={id}\r\n />\r\n ))}\r\n </Tabs>\r\n <Divider />\r\n <GridComponent {...rest} {...tabs[tabActual]} />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default TabbedGrillaEtriek;\r\n","import * as React from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextArea = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <TextInput multiline {...propsContenido} />;\r\n};\r\n\r\nexport default TextArea;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport {\r\n DateInput,\r\n DateTimeInput,\r\n NumberInput,\r\n TextInput,\r\n useInput,\r\n} from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextBox = props => {\r\n const { tipo, ...rest } = props;\r\n const { propsContenido, hidden } = useContenidoController(rest);\r\n const form = useFormContext();\r\n const { field, fieldState } = useInput(props);\r\n const esFechaHora = tipo === 'F' || tipo === 'Z';\r\n\r\n useEffect(() => {\r\n if (propsContenido.value) {\r\n form.setValue(props.source, propsContenido.value);\r\n //TODO: Es necesaria la siguiente línea con react-hook-form?\r\n //if (props.disabled) {\r\n // field.onBlur();\r\n //}\r\n }\r\n });\r\n\r\n //TODO: Es necesaria la siguiente línea con react-hook-form?\r\n useEffect(() => {\r\n // Para que ejecute el onBlur al cambiar el valor desde el asistente\r\n if (\r\n esFechaHora &&\r\n field.value != '' &&\r\n !fieldState.error &&\r\n fieldState.isTouched\r\n //TODO: Es necesaria la siguiente línea con react-hook-form?\r\n //&& !fieldState.active\r\n ) {\r\n propsContenido.onBlur();\r\n }\r\n }, [field.value]);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'N' || tipo === 'D' ? (\r\n <NumberInput {...txtProps} />\r\n ) : tipo === 'F' ? (\r\n <DateInput {...txtProps} />\r\n ) : tipo === 'Z' ? (\r\n <DateTimeInput {...txtProps} />\r\n ) : tipo === 'H' ? (\r\n <TextInput {...txtProps} type=\"time\" />\r\n ) : (\r\n <TextInput {...txtProps} />\r\n ))\r\n );\r\n};\r\n\r\nexport default TextBox;\r\n","import * as React from 'react';\r\nimport { DateField, NumberField, TextField as RaTextField } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst TextField = props => {\r\n const { tipo, value, ...rest } = props;\r\n const { propsContenido, hidden } = useFieldController(rest);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'N' || tipo === 'D' ? (\r\n <NumberField {...txtProps} />\r\n ) : tipo === 'F' ? (\r\n <DateField {...txtProps} />\r\n ) : tipo === 'Z' ? (\r\n <DateField {...txtProps} showTime />\r\n ) : (\r\n <RaTextField {...txtProps} />\r\n ))\r\n );\r\n};\r\n\r\nexport default TextField;\r\n","import { useResourceContext, useGetOne } from 'react-admin';\r\nimport { getFormcodFromResource } from './utils';\r\n\r\nconst useReferenceLabel = (source, id) => {\r\n const resource = useResourceContext();\r\n\r\n const { data, isLoading, error } = useGetOne(\r\n 'cb_' + getFormcodFromResource(resource) + '_' + source,\r\n { id }\r\n );\r\n\r\n if (isLoading || error) {\r\n return '';\r\n }\r\n\r\n return data?.etiqueta || '';\r\n};\r\n\r\nexport default useReferenceLabel;\r\n"],"names":["forwardRef","props","ref","useTranslate","onClose","useUserMenu","useResourceDefinitions","resourcesDefinitions","React.createElement","MenuItem","component","Link","key","to","onClick","ListItemIcon","LockIcon","ListItemText","translate","existePassword","VpnLockIcon","UserMenu","ConfigurationMenu","Logout","useMediaQuery","theme","breakpoints","up","AppBar","color","userMenu","CustomUserMenu","Typography","variant","sx","flex","textOverflow","whiteSpace","overflow","id","isLargeEnough","Box","HookFormContext","React","createContext","useFormContext","useContext","resource","options","makeStyles","root","& .MuiDataGrid-columnsContainer","backgroundColor","palette","mode","& .MuiDataGrid-iconSeparator","display","header","secondary","contrastText","light","rootPaper","width","height","borderRadius","marginTop","spacing","rootOverlay","flexDirection","& .ant-empty-img-1","fill","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","label","deleteButton","error","main","&:hover","alpha","@media (hover: none)","name","useStyles","GridOverlay","className","classes","viewBox","aria-hidden","focusable","fillRule","transform","cx","cy","rx","ry","d","params","useDataProvider","useMutation","deleteEtrRow","mutate","isLoading","type","marginLeft","fontWeight","ActionDelete","confirmTitle","confirmContent","icon","defaultIcon","record","redirect","onSuccess","onError","source","camposClaveFila","rest","useNotify","useDeleteWithConfirmController","mutationOptions","open","handleDialogOpen","handleDialogClose","requestFn","useDeleteRowEtrGrid","refresh","json","notify","messageArgs","smart_count","e","message","Object","keys","filter","split","includes","reduce","obj","useCallback","event","payload","ge","clavesFila","Fragment","Button","Confirm","isOpen","loading","title","content","onConfirm","handleDelete","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","style","styleMargin","msgTitle","msgDesc","Form","onSubmit","defaultValues","children","EtrDialog","propTypes","PropTypes","save","render","EtrDeleteWithConfirmButton","api","row","estado","editors","recordPadre","setOpen","methods","control","disabled","exact","formState","updateFormState","useState","_formState","_localProxyFormState","useRef","isDirty","dirtyFields","touchedFields","isValidating","isValid","errors","_name","_mounted","current","_props","useEffect","subscription","subject","subscribe","next","callback","unsubscribe","tearDown","useSubscribe","value","signalName","Array","isArray","some","currentName","startsWith","shouldSubscribeByName","formStateData","_proxyFormState","isRoot","isNullOrUndefined","isObjectType","Date","isDateObject","isObject","length","find","shouldRenderFormState","_subjects","state","localProxyFormState","result","defineProperty","get","_key","getProxyFormState","useFormState","DialogContent","Children","map","child","index","initialValue","undefined","indexOf","InputLabelProps","shrink","DialogActions","SaveButton","stopPropagation","IconCancel","etrResource","useSafeSetState","initialValues","useNuevo","enabled","data","useSaveRowEtrGrid","values","useMemo","handleSubmit","setOnFailure","log","AddIcon","SaveContextProvider","saveContext","etiqueta","EtrDialogChild","EditIcon","createTheme","adaptV4Theme","esES","show","hide","ProgressContext","Provider","context","method","hidden","required","useDispatch","dispatch","recargarComboBox","setHiddenAction","disable","setDisableAction","setRequireAction","getJson","useGetJson","returnPromise","useListContext","useRedirect","useRefresh","useUnselectAll","ajax","useAjax","unselectAll","useRecargarComboBox","useSetHidden","useSetDisable","useSetRequire","useFormProgress","progress","setHidden","setDisable","setRequire","form","isRowEditable","EditButton","onRenderGrilla","onLoadGrilla","useUtilsGrilla","utils","useInitGrilla","down","hasEdit","useResourceDefinition","pt","primaryText","st","secondaryText","desktopSize","count","SimpleList","linkType","esEditable","Datagrid","EditButtonGrilla","useFormulario","fichaProps","useDefaultHook","maxHeight","tab","contenido","etrRequerido","minValue","enableLoad","useResourceContext","useInitFicha","ProgressProvider","FichaContext","Create","panel","r","t","f","n","clsx","arguments","CreateEtriek","func","useRecordContext","useDelete","deleteOne","Tooltip","IconButton","classnames","size","DeleteButtonNoWarning","defaultProps","button","margin","input","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","block","pointerEvents","opacity","position","left","top","useUtilsFicha","onRenderFicha","onLoadFicha","onBeforeSubmitFicha","config","useUtilsSubmit","valid","defaultSave","finalSave","FormContainer","FormEtriek","SimpleForm","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","& a","transition","paddingLeft","mnuPrueba","setState","items","menus","item","menu","SubMenu","SettingsIcon","renderMenu","MenuItemLink","_","leftIcon","JSON","parse","localStorage","getItem","activeClassName","iconClass","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","minHeight","alignItems","justifyContent","backgroundImage","loginBackgroundImage","backgroundRepeat","backgroundSize","card","avatar","avatarIcon","Math","ceil","textLength","hint","grey","padding","actions","paddingRight","TabbedFormView","TabbedFormEtriek","syncWithLocation","defaultTheme","components","RaSidebar","drawerPaper","RaRichTextInput","@global",".ra-rich-text-input","& .ql-editor","& p:not(:last-child)","englishMessages","ra","action","add_filter","add","back","bulk_actions","cancel","clear_input_value","clone","confirm","create_item","delete","edit","export","list","remove_filter","remove","search","select_all","select_row","sort","undo","unselect","expand","close","open_menu","close_menu","update","move_up","move_down","toggle_theme","boolean","true","false","null","page","dashboard","not_found","empty","invite","file","upload_several","upload_single","image","references","all_missing","many_missing","single_missing","password","toggle_visible","toggle_hidden","about","are_you_sure","bulk_delete_content","bulk_delete_title","bulk_update_content","bulk_update_title","delete_content","delete_title","details","invalid_form","no","yes","unsaved_changes","navigation","no_results","no_more_results","page_out_of_boundaries","page_out_from_end","page_out_from_begin","page_range_info","partial_page_range_info","current_page","first","last","previous","page_rows_per_page","skip_nav","sort_by","ASC","DESC","auth","auth_check_error","user_menu","username","sign_in","sign_in_error","logout","notification","updated","created","deleted","bad_item","item_doesnt_exist","http_error","data_provider_error","i18n_error","canceled","logged_out","not_authorized","validation","minLength","maxLength","maxValue","number","email","oneOf","regex","saved_queries","query_name","new_label","new_dialog_title","remove_label","remove_label_with_name","remove_dialog_title","remove_message","help","login","send","check_email","must_enter_credentials","restore_password","punch_in","pos","change_pin","change_password","configuration","language","dark","welcome","subtitle","aor_button","greater_or_equal","spanishMessages","prev","initialProps","hiddenProps","useContenido","restInitialProps","hiddenInitial","dynamicProps","dynamicPropsRest","propsContenido","oculto","allVallues","meta","useSelector","configInputs","reduxDisabled","reduxHidden","onFocus","onChangeProps","onChange","onBlurProps","onBlur","disabledProps","propValidate","validate","field","useInput","onBlurInitial","onChangeInitial","disabledInitial","initValidate","onFocusInitial","onFocusProps","disabledDinamico","onFocusDinamico","onChangeDinamico","onChnage","onBlurDinamico","dynamicValidate","previousValue","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","finalPropsValidate","finalInitValidate","finalDynamicValidate","validateInput","reduxValidate","i","hiddenDinamico","useChoicesContext","allChoices","SelectInput","confirmPrimary","primary","confirmWarning","iconPaddingStyle","Draggable","handle","Paper","cursor","confirmColor","ConfirmIcon","CancelIcon","contentResource","translateOptions","selectedIds","useRecordSelection","handleClick","maxWidth","PaperComponent","cursorStyle","dividers","autoFocus","FiltroAsig","string","object","elementType","node","isRequired","bool","ActionCheck","AlertError","seleccion","all","none","v","hasCreate","exporter","perPage","bulkActionButtons","TextField","sortable","fillista","filtroInicial","filtro","setFiltro","parent","getChildNodes","parentId","itemData","then","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","PostList","TreeWithList","FiltroFuncionarios","useFieldController","stringify","boolRecord","RaBooleanField","useContenidoController","FileInput","accept","maxSize","ImageField","BooleanInput","finalFilter","reference","reload_cb","rcb","recarga_cb","respaldoFiltro","deleteRecargarComboBox","ReferenceInput","SelectInputEtriek","optionText","optionValue","useEditController","controllerProps","Edit","filterBy","claves","sortModel","defColumns","columns","allowAdd","allowRemove","setSort","sortField","sortDir","forEach","comparison","useGetList","order","headerName","renderHeader","EtrCreateButton","headerAlign","disableClickEventBubbling","renderCell","EtrEditButton","EtrDeleteButton","Loading","StyledEngineProvider","injectFirst","ThemeProvider","DataGrid","disableSelectionOnClick","pageSize","hideFooter","rows","finalColumns","onSortModelChange","model","NoRowsOverlay","CustomNoRowsOverlay","hasShow","hasList","TopToolbar","ListButton","ChevronLeft","ShowButton","filterGe","push","concat","src","Avatar","Layout","appBar","Menu","filters","jsBotonGrilla","listContext","currentSort","displayedFilters","filterValues","showFilter","total","sanitizeListRestProps","cloneElement","CreateButton","ExportButton","utilsGrilla","option","ReferenceArrayInput","SelectArrayInput","nameSource","passwordSource","setLoading","loginButtonText","useLogin","useLocation","location","nextPathname","Card","TextInput","PasswordInput","CardActions","CircularProgress","thickness","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","FieldTitle","fields","campos","separador","secundario","hasSecundario","join","noWrap","principal","campo","RadioButtonGroupInput","gutterBottom","useShowController","Show","defaultValue","format","InputProps","endAdornment","setValue","aria-label","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","setFilters","tabs","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","Tab","charAt","toUpperCase","slice","Divider","multiline","tipo","fieldState","esFechaHora","isTouched","NumberInput","txtProps","DateInput","DateTimeInput","asistant","asistantResource","FiltroAsis","BulkActions","NumberField","DateField","showTime","RaTextField","toString","parseInt","match","exec","isNaN","mes","substr","ruta","nombre","document","createElement","fakeLink","body","appendChild","setAttribute","click","sourceFechaInicio","allValues","inicio","isAfter","iniDate","finDate","args","menor","idi","locale","enLocale","esLocale","now","setHours","setMinutes","substring","useGetOne","getFormcodFromResource"],"mappings":"wsEAsBA,MAA0BA,aAAW,SAACC,EAAOC,GACzC,MAAkBC,iBACVC,EAAYC,gBAAZD,UACqBE,6BAENC,EAAoB,QAE3C,MAAO,CAHUA,EAAoB,SAK7BC,gBAACC,cACGC,UAAWC,OACXT,IAAKA,GACDD,GACJW,IAAI,YACJC,GAAG,YACHC,QAASV,IAETI,gBAACO,oBACGP,gBAACQ,SAELR,gBAACS,oBAAcC,EAAU,oBAE7B,KACJC,EACIX,gBAACC,cACGC,UAAWC,OACXT,IAAKA,GACDD,GACJW,IAAI,WACJC,GAAG,WACHC,QAASV,IAETI,gBAACO,oBACGP,gBAACY,SAELZ,gBAACS,oBAAcC,EAAU,yBAE7B,WAIW,kBACnBV,gBAACa,gBACGb,gBAACc,QACDd,gBAACe,oBAIY,SAAAtB,GACjB,MAAsBuB,gBAAc,SAAAC,YAAeC,YAAYC,GAAG,QAClE,OACInB,gBAACoB,cAAW3B,GAAO4B,MAAM,YAAYC,SAAUtB,gBAACuB,WAC5CvB,gBAACwB,cACGC,QAAQ,KACRJ,MAAM,UACNK,GAAI,CACAC,KAAM,EACNC,aAAc,WACdC,WAAY,SACZC,SAAU,UAEdC,GAAG,sBAENC,GAAiBhC,gBAACiC,OAAI/B,UAAU,OAAOwB,GAAI,CAAEC,KAAM,OCxEhE,MAiDMO,GAAkBC,EAAMC,cAAc,MA+BtCC,GAAiB,IAAMF,EAAMG,WAAWJ,IC3F9C,OAAiB,SAACK,EAAUC,sBACdD,EAAU,CAAER,GAAI,MAAQS,OCEbC,aACrB,SAAAxB,SAAU,CAINyB,KAAM,CACFC,kCAAmC,CAC/BC,gBAC2B,UAAvB3B,EAAM4B,QAAQC,KAAmB,UAAY,WAErDC,+BAAgC,CAC5BC,QAAS,SAGjBC,OAAQ,CACJ5B,MAAOJ,EAAM4B,QAAQK,UAAUC,aAC/BP,gBAAiB3B,EAAM4B,QAAQK,UAAUE,OAE7CC,UAAW,CACPC,MAAO,OACPC,OAAQ,OACRC,aAAc,EACdC,UAAWxC,EAAMyC,QAAQ,IAE7BC,YAAa,CACTC,cAAe,SACfC,qBAAsB,CAClBC,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,WAEvDiB,qBAAsB,CAClBD,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,WAEvDkB,qBAAsB,CAClBF,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,WAEvDmB,qBAAsB,CAClBH,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,WAEvDoB,qBAAsB,CAClBC,YAAoC,UAAvBlD,EAAM4B,QAAQC,KAAmB,MAAQ,OACtDgB,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,YAG3DsB,MAAO,CACHX,UAAWxC,EAAMyC,QAAQ,IAE7BW,aAAc,CACVhD,MAAOJ,EAAM4B,QAAQyB,MAAMC,KAC3BC,UAAW,CACP5B,gBAAiB6B,QAAMxD,EAAM4B,QAAQyB,MAAMC,KAAM,KAEjDG,uBAAwB,CACpB9B,gBAAiB,mBAKjC,CAAE+B,KAAM,UAEuB,WAC/B,MAAgBC,KAEhB,OACI5E,gBAAC6E,eAAYC,UAAWC,EAAQpB,aAC5B3D,uBACIsD,MAAM,MACNC,OAAO,MACPyB,QAAQ,cACRC,iBACAC,UAAU,SAEVlF,qBAAG8D,KAAK,OAAOqB,SAAS,WACpBnF,qBAAGoF,UAAU,uBACTpF,2BACI8E,UAAU,kBACVO,GAAG,SACHC,GAAG,SACHC,GAAG,SACHC,GAAG,WAEPxF,wBACI8E,UAAU,kBACVW,EAAE,iJAENzF,wBACI8E,UAAU,kBACVW,EAAE,4FAENzF,wBACI8E,UAAU,kBACVW,EAAE,0jBAGVzF,wBACI8E,UAAU,kBACVW,EAAE,2OAENzF,qBACI8E,UAAU,kBACVM,UAAU,4BAEVpF,2BAASqF,GAAG,SAASC,GAAG,QAAQC,GAAG,QAAQC,GAAG,UAC9CxF,wBAAMyF,EAAE,4DAIpBzF,uBAAK8E,UAAWC,EAAQX,gCClFR,SAAC7B,EAAUmD,EAAQlD,GAC3C,MAAqBmD,sBACSC,cAC1B,oBAAmBC,aAAatD,EAAU,CAAEmD,OAAAA,KAC5ClD,GAGJ,MAAO,CAAEsD,SALDA,OAKSC,YALDA,eCFM,SAACC,EAAMzD,EAAUmD,EAAQlD,GAC/C,MAAqBmD,sBACSC,cAC1B,oBAAmBI,GAAMzD,EAAU,CAAEmD,OAAAA,KACrClD,GAGJ,MAAO,CAAEsD,SALDA,OAKSC,YALDA,2QCaFtD,aACd,SAAAxB,SAAU,CAINyB,KAAM,CACFC,kCAAmC,CAC/BC,gBAC2B,UAAvB3B,EAAM4B,QAAQC,KAAmB,UAAY,WAErDC,+BAAgC,CAC5BC,QAAS,SAGjBC,OAAQ,CACJ5B,MAAOJ,EAAM4B,QAAQK,UAAUC,aAC/BP,gBAAiB3B,EAAM4B,QAAQK,UAAUE,OAE7CC,UAAW,CACPC,MAAO,OACPC,OAAQ,OACRC,aAAc,EACdC,UAAWxC,EAAMyC,QAAQ,IAE7BC,YAAa,CACTC,cAAe,SACfC,qBAAsB,CAClBC,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,WAEvDiB,qBAAsB,CAClBD,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,WAEvDkB,qBAAsB,CAClBF,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,WAEvDmB,qBAAsB,CAClBH,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,WAEvDoB,qBAAsB,CAClBC,YAAoC,UAAvBlD,EAAM4B,QAAQC,KAAmB,MAAQ,OACtDgB,KAA6B,UAAvB7C,EAAM4B,QAAQC,KAAmB,UAAY,YAG3DsB,MAAO,CACHX,UAAWxC,EAAMyC,QAAQ,IAE7BW,aAAc,CACVhD,MAAOJ,EAAM4B,QAAQyB,MAAMC,KAC3BC,UAAW,CACP5B,gBAAiB6B,QAAMxD,EAAM4B,QAAQyB,MAAMC,KAAM,KAEjDG,uBAAwB,CACpB9B,gBAAiB,mBAKjC,CAAE+B,KAAM,eAGQ,CAAEsB,WAAY,SAAUC,WAAY,WAEpClG,gBAACmG,WAEc,SAAA1G,GAC/B,MAcIA,EAVA2G,aAAAA,aAAe,8BAUf3G,EATA4G,eAAAA,aAAiB,gCASjB5G,EARA6G,KAAAA,aAAOC,KACPC,EAOA/G,EAPA+G,SAOA/G,EANAgH,SAAAA,gBACAC,EAKAjH,EALAiH,UACAC,EAIAlH,EAJAkH,QACAC,EAGAnH,EAHAmH,OACAC,EAEApH,EAFAoH,gBACGC,IACHrH,QAEYmF,GAAUnF,KACXsH,gBAGXC,iCAA+B,CAC3BR,OAAAA,EACAC,SAAAA,EACAQ,gBAAiB,CACbP,UAAAA,EACAC,QAAAA,KANJO,IAAAA,KAAMnB,IAAAA,UAAWoB,IAAAA,iBAAkBC,IAAAA,kBAY3BC,EAAcC,GAFb7H,EAAM8C,SAInB,GACA,CACIgF,SAAS,EACTb,UAAW,SAAAc,GACP,GAAIA,EAAKlD,MACL,gBAAgBkD,EAAKlD,OAErBmD,EAAO,0BAA2B,CAC9BzB,KAAM,OACN0B,YAAa,CAAEC,YAAa,MAIxChB,QAAS,SAAAiB,GACLH,EAAOG,EAAEC,QAAS,CAAE7B,KAAM,eAhB9BF,SAqBWgC,OAAOC,KAAKvB,GAC1BwB,OAAO,SAAA5H,YAAuB6H,MAAM,KAAKC,SAAS9H,KAClD+H,OAAO,SAACC,EAAKhI,GAEV,OADAgI,EAAIhI,GAAOoG,EAAOpG,MAEnB,MAEciI,cACjB,SAAAC,GACIjB,EAAU,CACNkB,QAAS,CACLC,GAAI5B,EACJ6B,WAAAA,MAIZ,CAACjC,IAGL,OACIxG,gBAAC0I,gBACG1I,gBAAC2I,YACGvI,IAAI,SACJE,QAAS6G,EACTrC,UAAWC,EAAQV,cACfyC,GAEHR,GAELtG,gBAAC4I,WACGC,OAAQ3B,EACR4B,QAAS/C,EACTgD,MAAO3C,EACP4C,QAAS3C,EACT4C,UAAWC,EACXtJ,QAASwH,SAMP,SAAA3H,UACdO,gBAACmJ,GAAOjC,KAAMzH,EAAMyH,KAAMtH,QAASH,EAAMG,QAASwJ,cAC9CpJ,gBAACqJ,OAAgB5J,EAAM6J,gBAAe7J,EAAM2E,OAC5CpE,gBAACuJ,OACGvJ,gBAACwB,GACGtB,UAAU,OACV8C,QAAQ,QACRvB,QAAQ,YACR+H,WAAYC,KAEXhK,EAAMiK,UAEVjK,EAAMkK,SAEX3J,gBAAC4J,QACGrH,SAAU9C,EAAM8C,SAChBsH,SAAUpK,EAAMoK,SAEhBC,cAAerK,EAAMqK,eAEpBrK,EAAMsK,YAKnBC,GAAUC,UAAY,CAClB7F,MAAO8F,SACP5J,QAAS4J,OACT5D,KAAM4D,MACNhD,KAAMgD,OACNtK,QAASsK,OACTZ,YAAaY,SACbR,SAAUQ,MACVP,QAASO,MACT3H,SAAU2H,MACVC,KAAMD,OACNE,OAAQF,QAGZ,OAAwB,SAAAzK,GAIpB,OACIO,gBAACqK,IACGC,OACAlE,aAAa,mBACbQ,OAPgDnH,EAAhBmH,OAQhCJ,OARgD/G,EAAR8K,IASxChI,SATgD9C,EAA1B8C,SAUtBsE,gBAVgDpH,EAA3CoH,sBAeM,SAAApH,GACnB,MAQIA,EAPA8C,SACAiI,EAMA/K,EANA+K,OACAC,EAKAhL,EALAgL,QACAC,EAIAjL,EAJAiL,YACA7D,EAGApH,EAHAoH,gBACA8D,EAEAlL,EAFAkL,QACA5E,EACAtG,EADAsG,YLnDR,SAAsBtG,GAClB,MAAMmL,EAAUvI,MACVwI,QAAEA,EAAUD,EAAQC,QAAOC,SAAEA,EAAQnG,KAAEA,EAAIoG,MAAEA,GAAmB,IAC/DC,EAAWC,GAAmB9I,EAAM+I,SAASL,EAAQM,YACtDC,EAAuBjJ,EAAMkJ,OAAO,CACtCC,SAAS,EACTC,aAAa,EACbC,eAAe,EACfC,cAAc,EACdC,SAAS,EACTC,QAAQ,IAENC,EAAQzJ,EAAMkJ,OAAO1G,GACrBkH,EAAW1J,EAAMkJ,QAAO,GAoB9B,OAnBAO,EAAME,QAAUnH,EA7DpB,SAAsBlF,GAClB,MAAMsM,EAAS5J,EAAMkJ,OAAO5L,GAC5BsM,EAAOD,QAAUrM,EACjB0C,EAAM6J,UAAU,KACZ,MAKMC,GAAgBxM,EAAMqL,UACxBiB,EAAOD,QAAQI,QAAQC,UAAU,CAC7BC,KAAML,EAAOD,QAAQO,WAE7B,MAAO,IATU,CAACJ,IACVA,GACAA,EAAaK,eAORC,CAASN,IACvB,CAACxM,EAAMqL,WAuDV0B,CAAa,CACT1B,SAAAA,EACAuB,SATalK,EAAMkG,YAAaoE,GAAUZ,EAASC,SAvE/B,EAACnH,EAAM+H,EAAY3B,KAAUA,OAAAA,GAAS2B,EAC5D/H,IAAS+H,GACR/H,IACE+H,GACD/H,IAAS+H,IANYD,EAOC9H,EAPUgI,MAAMC,QAAQH,GAASA,EAAQ,CAACA,IAOpCI,KAAMC,GAAgBA,IAC7CA,EAAYC,WAAWL,IACpBA,EAAWK,WAAWD,KATV,IAACL,GA0ErBO,CAAsBpB,EAAME,QAASW,EAAM9H,KAAMoG,IAlF7B,EAACkC,EAAeC,EAAiBC,KACzD,SAAiBnC,GAAciC,EAC/B,MA7IW,CAACR,IAHQ,CAACA,GAAmB,MAATA,EAGRW,CAAkBX,KACxCE,MAAMC,QAAQH,IAFE,CAACA,GAA2B,iBAAVA,EAGnCY,CAAaZ,KAPE,CAACA,GAAUA,aAAiBa,KAQ1CC,CAAad,GAsIae,CAAVf,EAIKzB,KAJyBlD,OAAOC,KAAK0E,GAAOgB,QAK9D3F,OAAOC,KAAKiD,GAAWyC,QAAU3F,OAAOC,KAAKmF,GAAiBO,QAC9D3F,OAAOC,KAAKiD,GAAW0C,KAAMtN,IACxB,IADgC8M,EAAgB9M,IANzC,IAACqM,GAqFbkB,CAAsBlB,EAAOrB,EAAqBU,UAClDb,EAAgB,IACTJ,EAAQM,cACRsB,IACH,CAAC5B,EAASE,IAIdmB,QAASrB,EAAQ+C,UAAUC,QAE/B1L,EAAM6J,UAAU,KACZH,EAASC,SAAU,EACZ,KACHD,EAASC,SAAU,IAExB,IArHiB,EAACd,EAAWkC,EAAiBY,EAAqBX,GAAS,KAC/E,MAAMY,EAAS,GACf,IAAK,MAAM3N,KAAO4K,EACdlD,OAAOkG,eAAeD,EAAQ3N,EAAK,CAC/B6N,IAAK,KACD,MAAMC,EAAO9N,EAKb,MAzFP,QAqFW8M,EAAgBgB,KAChBhB,EAAgBgB,IAASf,GAtFpC,OAwFOW,IAAwBA,EAAoBI,IAAQ,GAC7ClD,EAAUkD,MAI7B,OAAOH,GAwGAI,CAAkBnD,EAAWH,EAAQqC,gBAAiB9B,EAAqBU,SAAS,GKoB9DsC,GAArB9C,IAAAA,QAASI,IAAAA,QAEjB,OACI1L,gCACIA,gBAACqO,OACIC,WAASC,IAAI9D,EAAS,SAAC+D,EAAOC,yBACdD,EAAO,CAChBjM,SAAAA,EACAiI,OAAAA,EACAkE,aAAchE,EAAY8D,EAAM/O,MAAMmH,QACtCwC,WAAW,EACX0B,cAC6B6D,IAAzBH,EAAM/O,MAAMqL,SACN0D,EAAM/O,MAAMqL,SACD,MAAXN,IAGO,IAFP3D,EAAgB+H,QACZJ,EAAM/O,MAAMmH,QAE1BiI,gBAAiB,CACbC,QAAQ,QAKxB9O,gBAAC+O,OACG/O,gBAACgP,cAAWlE,UAAWQ,IAAYI,IACnC1L,gBAAC2I,UACGvE,MAAM,mBACN9D,QAAS,SAAAsH,GACL+C,GAAQ,GACR/C,EAAEqH,mBAENnE,SAAU/E,GAEV/F,gBAACkP,eAOG,SAAAzP,GAEhB6K,IACAG,EAQAhL,EARAgL,QACQC,EAORjL,EAPA+G,OACAiC,EAMAhJ,EANAgJ,WACA5B,EAKApH,EALAoH,gBACAtE,EAIA9C,EAJA8C,SACA6B,EAGA3E,EAHA2E,MACAwC,EAEAnH,EAFAmH,OACAuI,EACA1P,EADA0P,cAEoBC,mBAAgB,GAAjClI,OAAMyD,OACC0E,EAAkBC,GAASH,EAAa,CAAEI,QAASrI,IAAzDsI,OAGiCC,GACrC,eACAlN,EACA,GACA,CACIgF,SAAS,EACTb,UAAW,SAAAc,GACP,GAAIA,EAAKlD,MACL,gBAAgBkD,EAAKlD,OAErBqG,GAAQ,GACRlD,EAAO,0BAA2B,CAAEzB,KAAM,UAGlDW,QAAS,SAAAiB,GACLH,EAAOG,EAAEC,QAAS,CAAE7B,KAAM,eAftBqB,IAARvB,OAAmBC,IAAAA,YAmBZgB,gBACGpH,gBACDe,CAAU,sBAGN,SAAAgP,GACjBrI,EAAU,CACNkB,QAAS,CACLiH,UAAWE,EAAWjH,GACtBD,GAAI5B,EACJC,gBAAAA,EACA2D,OAhCG,UAqCKmF,UAChB,iBAAO,CACHxF,KAAMyF,EACNC,aAAc,SAAAjI,kBAAakI,IAAIlI,MAEnC,CAACgI,IAGL,OACI5P,gCACIA,gBAAC2I,UACGrI,QAAS,SAAAsH,GACL+C,GAAQ,GACR/C,EAAEqH,oBAGNjP,gBAAC+P,SAEL/P,gBAACgQ,uBAAoBvD,MAAOwD,GACxBjQ,gBAACgK,IACG9C,KAAMA,EACNtH,QAAS,SAAAgI,GACL+C,GAAQ,GACR/C,EAAEqH,mBAEN3F,YAAa4G,EACb9L,MAAOA,EACPsF,SAAUjK,EAAMiK,SAChBC,QAASlK,EAAMkK,QACfpH,SAAUA,EACVsH,SAAU+F,EACV9F,cAAeuF,GAEfrP,gBAACmQ,IACG5N,SAAUA,EACViI,OAxEL,IAyEKC,QAASA,EACTC,YAAaA,EACb7D,gBAAiBA,EACjBd,UAAWA,EACX4E,QAAS,WACLA,GAAQ,aASd,SAAAlL,GAClB,IAEIgL,EAOAhL,EAPAgL,QACAhC,EAMAhJ,EANAgJ,WACA5B,EAKApH,EALAoH,gBACAtE,EAIA9C,EAJA8C,SACA6B,EAGA3E,EAHA2E,MACAwC,EAEAnH,EAFAmH,OACA2D,EACA9K,EADA8K,MAEWxD,gBACGpH,mBACMyP,mBAAgB,GAAjClI,OAAMyD,SAG4B8E,GACrC,eACAlN,EACA,GACA,CACIgF,SAAS,EACTb,UAAW,SAAAc,GACP,GAAIA,EAAKlD,MACL,gBAAgBkD,EAAKlD,OAErBqG,GAAQ,GACRlD,EAAO,0BAA2B,CAC9BzB,KAAM,OACN0B,YAAa,CAAEC,YAAa,MAIxChB,QAAS,SAAAiB,GACLH,EAAOG,EAAEC,QAAS,CAAE7B,KAAM,eAlBtBqB,IAARvB,OAAmBC,IAAAA,YAsBVrF,EAAU,kBAe3B,OACIV,gCACIA,gBAAC2I,UACGrI,QAAS,SAAAsH,GACL+C,GAAQ,GACR/C,EAAEqH,oBAGNjP,gBAACoQ,SAELpQ,gBAACgK,IACG9C,KAAMA,EACNtH,QAAS,SAAAgI,GACL+C,GAAQ,GACR/C,EAAEqH,mBAEN3F,YAAaA,EACblF,MAAOA,EACPsF,SAAUjK,EAAMiK,SAChBC,QAASlK,EAAMkK,QACfpH,SAAUA,EACVsH,SAhCS,SAAA6F,GACjBrI,EAAU,CACNkB,QAAS,CACLiH,UAAW/G,EAAeiH,GAC1BlH,GAAI5B,EACJC,gBAAAA,EACA2D,OAlCG,SA8DHxK,gBAACmQ,IACG5N,SAAUA,EACViI,OAhED,IAiECC,QAASA,EACTC,YAAaH,EACb1D,gBAAiBA,EACjBd,UAAWA,EACX4E,QAAS,WACLA,GAAQ,YAQlB0F,cAAYC,eAAa,GAAIC,oFC3e7BF,cAAYC,eAAa,GAAIC,YCPZnO,qBAEC,oBAAG2H,WACPmB,YAAS,GAA1BhE,OAAMyD,SAEGgF,UACZ,iBAAO,CACHzI,KAAAA,EACAsJ,KAAM,qBAAc,IACpBC,KAAM,qBAAc,MAExB,CAACvJ,IAGL,OACIlH,gBAAC0Q,GAAgBC,UAASlE,MAAOmE,GAC5B7G,OAKW,+BAAiB2G,QCvBT,SAAC3O,EAAI8O,EAAQnL,EAAQ2G,SAAc,CAC/DrG,KAAM,YACNuC,QAAS,CACLxG,GAAAA,EACA8O,OAAAA,EACAnL,OAAAA,EACA2G,SAAAA,QAK8B,SAACtK,EAAIsK,SAAc,CACrDrG,KAAM,oBACNuC,QAAS,CAAExG,GAAAA,EAAIsK,SAAAA,QAGY,SAACtK,EAAI+O,SAAY,CAC5C9K,KAAM,aACNuC,QAAS,CACLxG,GAAAA,EACA+O,OAAAA,QAIwB,SAAC/O,EAAI+I,SAAc,CAC/C9E,KAAM,gBACNuC,QAAS,CACLxG,GAAAA,EACA+I,SAAAA,QAIwB,SAAC/I,EAAIgP,SAAc,CAC/C/K,KAAM,gBACNuC,QAAS,CACLxG,GAAAA,EACAgP,SAAAA,QC5B2B,WAC/B,MAAiBC,gBACjB,qBACI,SAACjP,EAAI8O,EAAQnL,EAAQ2G,GACjB4E,EAASC,GAAiBnP,EAAI8O,EAAQnL,EAAQ2G,KAElD,CAAC4E,QAImB,WACxB,MAAiBD,gBACjB,qBACI,SAACjP,EAAI+O,GACDG,EAASE,GAAgBpP,EAAI+O,KAEjC,CAACG,QAIoB,WACzB,MAAiBD,gBACjB,qBACI,SAACjP,EAAIqP,GACDH,EAASI,GAAiBtP,EAAIqP,KAElC,CAACH,QAIoB,WACzB,MAAiBD,gBACjB,qBACI,SAACjP,EAAIgP,GACDE,EAASK,GAAiBvP,EAAIgP,KAElC,CAACE,QCfU,SAAC1O,EAAUsO,EAAQnL,EAAQlD,GAC1C,MAAqBmD,sBACSC,cAC1B,oBAAmB2L,QAAQhP,EAAU,CAAEsO,OAAAA,EAAQnL,OAAAA,KAC/ClD,GAGJ,MAAO,CAAEsD,SALDA,OAKSC,YALDA,eC7BJ,SAAAxD,GACZ,MAAyCiP,GAAWjP,GAApC8E,IAARvB,OAAmBC,IAAAA,UAe3B,MAAO,CAbMsC,cACT,SAACwI,EAAQnL,EAAQ2G,YAET,CAAE9D,QAAS,CAAE7C,OAAAA,EAAQmL,OAAAA,IACrB,CACIY,eAAe,EACf/K,UAAW2F,EACX1F,QAAS0F,KAGrB,IAGUtG,OCFY,SAAAtG,SAAU,OAEV,SAAAA,GAC1B,MAAaiS,iBAAejS,KACbsH,gBACE4K,kBACDC,iBACIC,iBAAepS,EAAM8C,UAGzC,MAAO,CAAEuP,KAFMC,GAAQtS,EAAM8C,aAEdiN,KAAAA,EAAM/H,OAAAA,EAAQhB,SAAAA,EAAUc,QAAAA,EAASyK,YAAAA,OAGtB,SAAAvS,GAC1B,MAAyBwS,OACPC,OACCC,OACAC,OACFC,OACFtL,gBACE4K,gBAGjB,MAAO,CACHG,KAHWC,GAAQtS,EAAM8C,aAIzBkF,OAAAA,EACAhB,SAAAA,EACAyK,iBAAAA,EACAoB,SAAAA,EACAC,UAAAA,EACAC,WAAAA,EACAC,WAAAA,OAIc,SAAAhT,GAClB,MAAyBwS,OACPC,OACCC,OACAC,OACFC,OACFtL,gBACE4K,gBAIjB,MAAO,CACHe,KAJSrQ,KAKTyP,KAJWC,GAAQtS,EAAM8C,aAKzBkF,OAAAA,EACAhB,SAAAA,EACAyK,iBAAAA,EACAoB,SAAAA,EACAC,UAAAA,EACAC,WAAAA,EACAC,WAAAA,uIC9DW,SAACjM,EAAQmM,eACNhE,OACQ,sBAAcgE,EAAcnM,OAEjC,SAAA/G,GACrB,MAAmCA,EAA3BkT,cAAkB7L,IAASrH,MAEnC,UAAkBA,EAAM+G,OAAQmM,GAC5B3S,gBAAC4S,aAAe9L,GAChB,SAGa,SAAArH,IClBC,SAAAA,GAClB,MAAyCA,EAAjCoT,eAAgBC,EAAiBrT,EAAjBqT,aAChB/M,EAAc2L,mBAAd3L,YACMgN,GAAetT,GAE7BuM,YAAU,WACN6G,GAAkBA,EAAeG,IAClC,IAEHhH,YAAU,WACDjG,GACD+M,GAAgBA,EAAaE,IAElC,CAACjN,IDMJkN,CAAcxT,GAEd,MAAgBuB,gBAAc,SAAAC,YAAeC,YAAYgS,KAAK,QAE1DC,EAEAC,wBAAsB3T,GAFtB0T,UAYA1T,EARAkT,cACaU,EAOb5T,EAPA6T,YACeC,EAMf9T,EANA+T,gBAMA/T,EALAgU,YAAAA,gBAIG3M,IACHrH,QACaA,EAAMsK,WACT5H,WAAeuR,MAAMjU,EAAMsK,YACvBsJ,IACEE,EAyCpB,OAvCKF,IACGK,GAAS,GAKFA,GAAS,GAKTA,GAAS,EAThBJ,EAAc,SAAA9M,YACAuD,EAAS,GAAGtK,MAAMmH,cACxBJ,EAAOuD,EAAS,GAAGtK,MAAMmH,SAYhB,IAAV8M,IACPJ,EAAc,SAAA9M,YAAiBuD,EAAS,GAAGtK,MAAMmH,WAIpD2M,IACGG,GAAS,EACTF,EAAgB,SAAAhN,YACFuD,EAAS,GAAGtK,MAAMmH,cACxBJ,EAAOuD,EAAS,GAAGtK,MAAMmH,SAE1B8M,GAAS,EAChBF,EAAgB,SAAAhN,YAAiBuD,EAAS,GAAGtK,MAAMmH,SAC5C8M,GAAS,EAChBJ,EAAc,SAAA9M,YACAuD,EAAS,GAAGtK,MAAMmH,cACxBJ,EAAOuD,EAAS,GAAGtK,MAAMmH,SAEhB,IAAV8M,IACPJ,EAAc,SAAA9M,YAAiBuD,EAAS,GAAGtK,MAAMmH,eAIvB,IAAhB6M,EACdzT,gBAAC2T,cACGC,SAAU,SAAApN,gBACKqN,GAAWrN,EAAQmM,KAAiB,QAEnDW,YAAaA,EACbE,cAAeA,IAGnBxT,gBAAC8T,WAEOhN,EAEH3E,WAAeoM,IAAIxE,EAAU,SAAAyE,UACzBA,EAAM/O,MAAMqR,OAAiB,KAARtC,IAEzB2E,GAAWnT,gBAAC+T,IAAiBpB,cAAeA,iGElGpC,SAAAlT,GACjB,MAAoDA,EAA5CuU,cAGR,MAAO,CAAEC,uBAHeC,QAA4BzU,sXCYlB,SAAA8C,YAAqB0F,MAAM,KAAK,OAEnCxF,aAAW,SAAAxB,eAAU,CACpDyR,KAAM,CACFyB,UAAW,OACXrS,SAAU,QAEdsS,IAAK,CACDpR,QAAS,QACTmR,UAAW,OACXrS,SAAU,QAEduS,kBACKpT,EAAMC,YAAYC,GAAG,OAAQ,CAC1BmC,MAAO,iBA8QSyN,gBACQ,CAACuD,GAAcC,WAAS,OC1ShCnS,gBAAc,yCCOrB,SAAA3C,SAKbA,EAFA+U,WAAAA,gBACG1N,IACHrH,QACagV,qBAAmBhV,KAEO6P,GAAS/M,EAAU,CAC1DgN,QAASiF,IADCnF,IAANG,KAAqBzJ,IAAAA,UAGrBkO,EAAeS,GAAajV,GAA5BwU,aACQtE,UACZ,iBAAO,CAAEnF,OAAQ,IAAK6E,cAAAA,EAAetJ,UAAAA,EAAWkO,WAAAA,IAChD,CAAC5E,EAAetJ,EAAWkO,IAG/B,OACIjU,gBAAC2U,QACG3U,gBAAC4U,GAAajE,UAASlE,MAAOmE,GAC1B5Q,gBAAC6U,cAAW/N,EAAUmN,MAAAA,SAAAA,EAAYa,WC7BlD,SAASC,GAAEnN,GAAG,IAAIoN,EAAEC,EAAEC,EAAE,GAAG,GAAG,iBAAiBtN,GAAG,iBAAiBA,EAAEsN,GAAGtN,OAAO,GAAG,iBAAiBA,EAAE,GAAG+E,MAAMC,QAAQhF,GAAG,IAAIoN,EAAE,EAAEA,EAAEpN,EAAE6F,OAAOuH,IAAIpN,EAAEoN,KAAKC,EAAEF,GAAEnN,EAAEoN,OAAOE,IAAIA,GAAG,KAAKA,GAAGD,QAAQ,IAAID,KAAKpN,EAAEA,EAAEoN,KAAKE,IAAIA,GAAG,KAAKA,GAAGF,GAAG,OAAOE,EAAS,SAASC,KAAO,IAAI,IAAIvN,EAAEoN,EAAEC,EAAE,EAAEC,EAAE,GAAGD,EAAEG,UAAU3H,SAAS7F,EAAEwN,UAAUH,QAAQD,EAAED,GAAEnN,MAAMsN,IAAIA,GAAG,KAAKA,GAAGF,GAAG,OAAOE,EDmChWG,GAAapL,UAAY,CACrB+J,cAAe9J,EAAUoL,0LEbX7S,aAAW,SAAAxB,SAAU,CACnCoD,aAAc,CACVhD,MAAOJ,EAAM4B,QAAQyB,MAAMC,KAC3BC,UAAW,CACP5B,gBAAiB6B,QAAMxD,EAAM4B,QAAQyB,MAAMC,KAAM,KAEjDG,uBAAwB,CACpB9B,gBAAiB,uBAMH,SAAAnD,GAC1B,MAAgBmF,GAAUnF,KACRE,mBAQdF,EANA8C,SAEAuC,EAIArF,EAJAqF,UACAwB,EAGA7G,EAHA6G,OAGA7G,EAFA2E,MAAAA,aAAQ,qBACL0C,IACHrH,QAEW8V,uBACoBC,YAAUjT,EAAU,CAAER,GAAIyE,EAAOzE,KAA7D0T,OAAa1P,OAAAA,UAEpB,OACI/F,gBAAC0V,GAAQ3M,MAAOrI,EAAU,qBACtBV,gBAAC2V,KACG7K,SAAU/E,EACVzF,QAAS,uBACT8D,MAAOA,EACPU,UAAW8Q,GACP,mBACA7Q,EAAQV,aACRS,GAEJ1E,IAAI,YACkB0G,OACtB+O,KAAK,UAEJvP,KAMjBwP,GAAsBC,aAAe,CACjCtP,SAAU,OACVH,KAAMtG,gBAACmG,qCCjEO1D,aAAW,SAAAxB,SAAU,CACnC+U,OAAQ,CACJC,OAAQhV,EAAMyC,QAAQ,IAE1BwS,MAAO,CACHlT,QAAS,cAIEb,aAAiB,SAAC1C,EAAOC,GACxC,MAUID,EATAoJ,OACAI,EAQAxJ,EARAwJ,UACArJ,EAOAH,EAPAG,QACAmJ,EAMAtJ,EANAsJ,MACAoN,EAKA1W,EALA0W,WACApM,EAIAtK,EAJAsK,WAIAtK,EAHA2W,UAAAA,kBAGA3W,EAFA4W,UAAAA,kBAEA5W,EADAsG,UAAAA,kBAEYnB,GAAUnF,KAMN,SAAAmI,GAChBhI,GAAWA,EAAQgI,IAGvB,OACI5H,gBAACmJ,GACGzJ,IAAKA,EACLwH,KAAM2B,EACNO,aACAxJ,QAAS0W,EACTC,kBAAgB,qBAEhBvW,gBAACqJ,GAAYtH,GAAG,qBAAqBgH,GACrC/I,gBAACqO,OACGrO,gBAACuJ,OAAmB4M,GACnBpM,IAEHqM,GAAaC,IACXrW,gBAAC+O,OACIsH,GACGrW,gBAAC2I,GACGrI,QAASgW,EACT7U,QAAQ,YACRJ,MAAM,YACNyD,UAAWC,EAAQiR,OACnBlL,SAAU/E,eAKjBqQ,GACGpW,gBAAC2I,GACGrI,QApCF,SAAAsH,GAClBqB,GAAaA,EAAUrB,IAoCHnG,QAAQ,YACRJ,MAAM,UACNyD,UAAWC,EAAQiR,OACnBlL,SAAU/E,gBC9DpBtD,aAAW,SAAAxB,SAAU,CACnCuV,MAAO,CACHC,cAAe,OACf7T,gBAAiB,UACjB8T,QAAS,GACTC,SAAU,YAEdrE,SAAU,CACNqE,SAAU,WACVC,KAAM,MACNC,IAAK,aAqBS,SAAApX,GACNmF,GAAUnF,GACN4S,KADhB,MAEiBoC,qBAAmBhV,KAEhC6C,aAAWsS,IADPpK,IAAAA,OAAQzE,IAAAA,UAAWsJ,IAAAA,cAAe4E,IAAAA,aAE5B6C,GAAc,CAAEvU,SAAAA,IAa9B,OAXAyJ,YAAU,WACNiI,EAAW8C,eAAiB9C,EAAW8C,cAAc/D,EAAOxI,IAC7D,IAEHwB,YAAU,WACDjG,GACDkO,EAAW+C,aACP/C,EAAW+C,YAAYhE,EAAOxI,EAAQ6E,IAE/C,CAACtJ,IAEG/F,8DClDQ,SAAAP,GACf,MAA8BA,EAAtBsK,SAAajD,IAASrH,QACQ6C,aAAWsS,IAAzCvF,IAAAA,cAAe4E,IAAAA,aACSA,EAAxBgD,sBACgBhD,EAAhBiD,OAAAA,aAAS,OACHC,GAAe1X,KACdsH,gBAEGsB,cACd,SAAAqH,GACI,MACIuH,GACAA,KAAsBvE,KAAM,CAAEhD,OAAAA,IAAasD,GAAS,KACxD,MAAqB,wBACjBvL,EAAO2P,EAAO,CAAEpR,KAAM,iBAGL2I,OAAayI,EACxB3X,EAAMoK,SAAS6F,QACf2H,GAGd,CAACJ,EAAqBjE,IAG1B,OACIhT,gBAAC4J,YACO9C,EACAoQ,GACJrN,SAAUyN,EACVxN,cAAeuF,IAGfrP,gBAACuX,QAAexN,KAK5ByN,GAAWvN,eACJwN,aAAWxN,WCrClB,OAAgB,SAAAxK,GACZ,MAA8DA,EAAtDiY,aAAc7O,EAAwCpJ,EAAxCoJ,OAAQlE,EAAgClF,EAAhCkF,KAAM2B,EAA0B7G,EAA1B6G,KAAMyD,EAAoBtK,EAApBsK,SAAU4N,EAAUlY,EAAVkY,QAClChY,iBAEXiY,EAAiBC,yBAGpB7X,gBAACC,YAAS0X,MAAOA,EAAOrX,QAASoX,GAC7B1X,gBAACO,gBAAamB,GAAI,CAAEoW,SAAU,IACzBjP,EAAS7I,gBAAC+X,QAAgBzR,GAE/BtG,gBAACwB,cAAWC,QAAQ,UAAUJ,MAAM,iBAC/BX,EAAUiE,KAKvB,OACI3E,2BACK4X,GAAiB/O,EACd5F,EAEAjD,gBAAC0V,WAAQ3M,MAAOrI,EAAUiE,GAAOqT,UAAU,SACtC/U,GAGTjD,gBAACiY,YAASC,GAAIrP,EAAQsP,QAAQ,OAAOC,kBACjCpY,gBAACqY,QACGV,MAAOA,EACPzX,UAAU,MACVoY,kBACA5W,GAAI,CACA6W,MAAO,CACHC,WACI,sDACJC,YAAab,EAAgB,EAAI,KAIxC7N,kCCIR,oBAAG4N,MAAAA,kBACMhY,mBACQuL,WAAS,CAAEwN,WAAW,IAAzC7K,OAAO8K,SACG3X,gBAAc,SAAAC,YAAeC,YAAYgS,KAAK,QACxDhM,EAAQ2Q,yBA9CA,WAAApY,GACf,MAA6CA,EAArCmZ,MAAclY,EAAuBjB,EAAvBiB,UAAcoG,IAASrH,QACNqH,EAA/B+G,MAAO6J,EAAwB5Q,EAAxB4Q,aAAcC,EAAU7Q,EAAV6Q,MAE7B,UAEQ3X,2BACK6Y,EAAMtK,IAAI,SAAAuK,GACCnU,MAAyCmU,EAAzCnU,KAAMoU,EAAmCD,EAAnCC,KAAM3U,EAA6B0U,EAA7B1U,MAEpB,SACIpE,gBAACgZ,IACG5Y,IAAKuE,EACLA,KAAMP,EACNsT,aAAc,oBAAmB/S,IACjCkE,OAAQgF,EAAMlJ,GACd2B,KAAMtG,gBAACiZ,QACPtB,MAAOA,GAENuB,KAAaN,MAAOG,EAAMrY,UAAAA,GAAcoG,KAG7C9G,gBAACmZ,gBACG/Y,IAAKuE,EACLtE,OAAQsE,EAGR2O,YAAa5S,eAAuBiE,UAAa,CAC7CyU,EAAGhV,IAEPuT,MAAOA,EACP0B,SAAUrZ,gBAACiZ,aA2BnBC,CAAW,CACvBN,MAXUU,KAAKC,MAAMC,aAAaC,QAAQ,UAY1C/B,aANiB,SAAAqB,GACjBJ,EAAS,SAAA9K,qBAAeA,UAAQkL,IAAQlL,EAAMkL,UAM9ClL,MAAAA,EACA6L,gBAVoB,GAWpBC,UAZc,GAad7U,UAdc,GAedoC,KAAAA,EACAyQ,MAAAA,EACAjX,UAAAA,IAGJ,OACIV,gBAACiC,OACGP,GAAI,CACA4B,MAAO4D,EAAO,IAAM,GACpBzD,UAAW,EACXmW,aAAc,EACdpB,WAAY,SAAAvX,YACF4Y,YAAYC,OAAO,QAAS,CAC9BC,OAAQ9Y,EAAM4Y,YAAYE,OAAOC,MACjCC,SAAUhZ,EAAM4Y,YAAYI,SAASC,mBAIjDla,gBAACma,YACGna,gBAACoa,qBACG9G,YAAa5S,EAAU,uBAI1B2Z,EACAC,GACGta,gBAACmZ,gBACG9Y,GAAG,iBACHiT,YAAa5S,EAAU,qBACvB2Y,SAAUrZ,gBAACiZ,QACXtB,MAAOA,2ECzFblV,aAAW,SAAAxB,SAAU,CACnCsD,KAAM,CACFvB,QAAS,OACTY,cAAe,SACf2W,UAAW,QACXC,WAAY,SACZC,eAAgB,aAChBC,gBAAiB,qBAAGC,sBACpBC,iBAAkB,YAClBC,eAAgB,SAEpBC,KAAM,CACFhD,SAAU,IACVrU,UAAW,OAEfsX,OAAQ,CACJ9E,OAAQ,MACRjT,QAAS,OACTyX,eAAgB,UAEpBO,WAAY,CACRpY,gBAAiB3B,EAAM4B,QAAQK,UAAUqB,MAE7C+B,KAAM,kBAAqB,CACvBqQ,SAAU,WACVC,KAAM3V,EAAMyC,QAAQ,GAAKuX,KAAKC,OAFzBC,WAE2C,GAAK,KAEzDC,KAAM,CACF3X,UAAW,MACXT,QAAS,OACTyX,eAAgB,SAChBpZ,MAAOJ,EAAM4B,QAAQwY,KAAK,MAE9B3I,KAAM,CACF4I,QAAS,iBAEbpF,MAAO,CACHzS,UAAW,OAEf8X,QAAS,CACLD,QAAS,gIC5CC7Y,aAAW,CACzBC,KAAM,CAAEM,QAAS,gBACjBwY,aAAc,CAAEA,aAAc,8ECRF,SAAA/b,GAC5B,MAAsC6C,aAAWsS,IAAzCvF,IAAAA,cAAe4E,IAAAA,aACSA,EAAxBgD,sBACgBhD,EAAhBiD,OAAAA,aAAS,OACHC,GAAe1X,KACdsH,gBAEGsB,cACd,SAAAqH,GACI,MACIuH,GACAA,KAAsBvE,KAAM,CAAEhD,OAAAA,IAAasD,GAAS,KACxD,MAAqB,wBACjBvL,EAAO2P,EAAO,CAAEpR,KAAM,iBAGL2I,OAAayI,EACxB3X,EAAMoK,SAAS6F,QACf2H,GAGd,CAACJ,EAAqBjE,IAG1B,OACIhT,gBAAC4J,YACOnK,EACAyX,GACJrN,SAAUyN,EACVxN,cAAeuF,IAGfrP,gBAACyb,kBAAevb,UAAWqX,OAKvCmE,GAAiB3F,aAAe,CAC5B4F,kBAAkB,GC3CtB,YACOC,gBACH/Y,aACO+Y,eAAa/Y,SAChBC,KAAM,SAEV+Y,gBACOD,eAAaC,YAChBC,UAAW,CACPpZ,KAAM,CACFqZ,YAAa,CACTpF,SAAU,YAItBqF,gBAAiB,CACbtZ,KAAM,CACFuZ,UAAW,CACPC,sBAAuB,CACnBC,eAAgB,CACZC,uBAAwB,CACpBxC,aAAc,iDAWvCgC,gBACH/Y,aACO+Y,eAAa/Y,SAChBC,KAAM,UAEV+Y,gBACOD,eAAaC,YAChBC,UAAW,CACPpZ,KAAM,CACFqZ,YAAa,CACTpF,SAAU,YAItBqF,gBAAiB,CACbtZ,KAAM,CACFuZ,UAAW,CACPC,sBAAuB,CACnBC,eAAgB,CACZC,uBAAwB,CACpBxC,aAAc,4BCxD1CyC,GAAkB,CAClBC,GAAI,CACAC,OAAQ,CACJC,WAAY,aACZC,IAAK,MACLC,KAAM,UACNC,aAAc,qDACdC,OAAQ,SACRC,kBAAmB,cACnBC,MAAO,QACPC,QAAS,UACTjD,OAAQ,SACRkD,YAAa,iBACbC,OAAQ,SACRC,KAAM,OACNC,OAAQ,SACRC,KAAM,OACN7V,QAAS,UACT8V,cAAe,qBACfC,OAAQ,SACRnT,KAAM,OACNoT,OAAQ,SACRC,WAAY,aACZC,WAAY,kBACZjN,KAAM,OACNkN,KAAM,OACNC,KAAM,OACNC,SAAU,WACVC,OAAQ,SACRC,MAAO,QACPC,UAAW,YACXC,WAAY,aACZC,OAAQ,SACRC,QAAS,UACTC,UAAW,YACXjX,KAAM,OACNkX,aAAc,gBAElBC,QAAS,CACLC,KAAM,MACNC,MAAO,KACPC,KAAM,KAEVC,KAAM,CACF3E,OAAQ,iBACR4E,UAAW,YACXxB,KAAM,iBACN5Y,MAAO,uBACP8Y,KAAM,UACNtU,QAAS,UACT6V,UAAW,YACXnO,KAAM,iBACNoO,MAAO,kBACPC,OAAQ,2BAEZ3I,MAAO,CACH4I,KAAM,CACFC,eAAgB,qDAChBC,cAAe,iDAEnBC,MAAO,CACHF,eAAgB,wDAChBC,cAAe,oDAEnBE,WAAY,CACRC,YAAa,kCACbC,aAAc,+EACdC,eAAgB,2DAEpBC,SAAU,CACNC,eAAgB,gBAChBC,cAAe,kBAGvB3X,QAAS,CACL4X,MAAO,QACPC,aAAc,gBACdC,oBAAqB,iHACrBC,kBAAmB,oDACnBC,oBAAqB,iHACrBC,kBAAmB,oDACnBC,eAAgB,6CAChBC,aAAc,wBACdC,QAAS,UACT3b,MAAO,kEACP4b,aAAc,iDACdpX,QAAS,4CACTqX,GAAI,KACJxB,UAAW,4DACXyB,IAAK,MACLC,gBAAiB,6EAErBC,WAAY,CACRC,WAAY,mBACZC,gBAAiB,uEACjBC,uBAAwB,wCACxBC,kBAAmB,4BACnBC,oBAAqB,0BACrBC,gBAAiB,0CACjBC,wBAAyB,wDACzBC,aAAc,eACdrC,KAAM,qBACNsC,MAAO,mBACPC,KAAM,kBACN5U,KAAM,kBACN6U,SAAU,sBACVC,mBAAoB,iBACpBC,SAAU,mBAEdzD,KAAM,CACF0D,QAAS,4BACTC,IAAK,YACLC,KAAM,cAEVC,KAAM,CACFC,iBAAkB,2BAClBC,UAAW,UACXC,SAAU,WACVpC,SAAU,WACVqC,QAAS,UACTC,cAAe,sCACfC,OAAQ,UAEZC,aAAc,CACVC,QAAS,uDACTC,QAAS,kBACTC,QAAS,uDACTC,SAAU,oBACVC,kBAAmB,yBACnBC,WAAY,6BACZC,oBAAqB,qDACrBC,WAAY,0DACZC,SAAU,mBACVC,WAAY,4CACZC,eAAgB,kDAEpBC,WAAY,CACR3R,SAAU,WACV4R,UAAW,qCACXC,UAAW,oCACXrO,SAAU,0BACVsO,SAAU,yBACVC,OAAQ,mBACRC,MAAO,wBACPC,MAAO,6BACPC,MAAO,qDAEXC,cAAe,CACX9e,MAAO,gBACP+e,WAAY,aACZC,UAAW,wBACXC,iBAAkB,wBAClBC,aAAc,qBACdC,uBAAwB,yBACxBC,oBAAqB,sBACrBC,eAAgB,6EAChBC,KAAM,mDCzJlBrH,GAAgBC,GAAGmC,KAAKG,MAAQ,iBAEhC,YACOvC,IACHsH,MAAO,CACH5hB,GAAI,KACJqZ,KAAM,QACNrK,SAAU,wBACV6S,KAAM,OACNb,MAAO,2BACPc,YACI,gEACJC,uBAAwB,sCACxBC,iBAAkB,mBAClBC,SAAU,YAEdC,IAAK,CACD1G,OAAQ,SACR2G,WAAY,aACZC,gBAAiB,kBACjBC,cAAe,gBACfC,SAAU,WACVpjB,MAAO,CACH0D,KAAM,QACNvB,MAAO,QACPkhB,KAAM,QAEV5F,UAAW,CACP6F,QAAS,CACLxb,MAAO,UACPyb,SAAU,sBACVC,WAAY,oBAIxB/B,WAAY,CACRgC,iBAAkB,+CCvC1B,MAAMC,GAAkB,CACtBrI,GAAI,CACFC,OAAQ,CACNE,IAAK,SACLD,WAAY,gBACZE,KAAM,WACNC,aAAc,8DACdC,OAAQ,WACRC,kBAAmB,gBACnBC,MAAO,SACPgB,MAAO,SACPE,WAAY,cACZjB,QAAS,YACTjD,OAAQ,QACRkD,YAAa,gBACbC,OAAQ,WACRC,KAAM,SACNW,OAAQ,WACRV,OAAQ,WACRC,KAAM,SACNc,QAAS,eACTC,UAAW,cACXJ,UAAW,aACXxW,QAAS,YACT+V,OAAQ,SACRD,cAAe,gBACflT,KAAM,UACNoT,OAAQ,SACRC,WAAY,mBACZC,WAAY,wBACZjN,KAAM,UACNkN,KAAM,UACNC,KAAM,WACNC,SAAU,gBACVK,OAAQ,cAEVsD,KAAM,CACJC,iBAAkB,yCAClBK,OAAQ,gBACRvC,SAAU,aACVqC,QAAS,UACTC,cAAe,yDACfH,UAAW,SACXC,SAAU,WAEZrD,QAAS,CACPC,KAAM,KACNC,MAAO,KACPC,KAAM,KAERtI,MAAO,CACL4I,KAAM,CACJC,eAAgB,wEAChBC,cAAe,kEAEjBC,MAAO,CACLF,eAAgB,wEAChBC,cAAe,qEAEjBE,WAAY,CACVC,YAAa,+CACbC,aAAc,wEACdC,eAAgB,sDAElBC,SAAU,CACRC,eAAgB,qBAChBC,cAAe,uBAGnB3X,QAAS,CACP4X,MAAO,YACPC,aAAc,gBACdC,oBAAqB,yGACrBC,kBAAmB,8DACnBC,oBAAqB,6GACrBC,kBAAmB,kEACnBC,eAAgB,yCAChBC,aAAc,0BACdC,QAAS,WACT3b,MAAO,wEACP4b,aAAc,iEACdpX,QAAS,0DACTqX,GAAI,KACJxB,UAAW,oEACXyB,IAAK,KACLC,gBAAiB,+EAEnBC,WAAY,CACVlU,KAAM,YACNoU,gBAAiB,oFACjBD,WAAY,kCACZI,oBAAqB,mCACrBD,kBAAmB,0CACnBD,uBAAwB,gDACxBG,gBAAiB,4CACjBM,mBAAoB,oBACpB0D,KAAM,WACNzD,SAAU,uBAEZzD,KAAM,CACJ0D,QAAS,gCACTC,IAAK,aACLC,KAAM,eAERQ,aAAc,CACZI,SAAU,sBACVK,SAAU,mBACVP,QAAS,kBACTK,oBAAqB,uEACrBJ,QAAS,2DACTG,WAAY,wCACZD,kBAAmB,wBACnBK,WAAY,gDACZT,QAAS,kEACTO,WAAY,qEACZG,eAAgB,sDAElBhE,KAAM,CACJ3E,OAAQ,gBACR4E,UAAW,UACXxB,KAAM,iBACN0B,MAAO,uBACPta,MAAO,iBACPua,OAAQ,uBACRzB,KAAM,mBACNtU,QAAS,WACT6V,UAAW,gBACXnO,KAAM,kBAERkS,WAAY,CACVK,MAAO,wCACPH,UAAW,0CACXC,SAAU,0BACVF,UAAW,2CACXpO,SAAU,2BACVuO,OAAQ,qBACRE,MAAO,8BACPC,MAAO,gEACPlS,SAAU,eCvIhB4T,GAAgBrI,GAAGwF,aAAaE,QAAU,gCAC1C2C,GAAgBrI,GAAGC,OAAOI,aACtB,mDACJgI,GAAgBrI,GAAGmC,KAAKC,UAAY,SACpCiG,GAAgBrI,GAAGmC,KAAKG,MAAQ,wBAChC+F,GAAgBrI,GAAGmC,KAAKI,OAAS,uBACjC8F,GAAgBrI,GAAGmC,KAAKrB,KAAO,UAC/BuH,GAAgBrI,GAAGmC,KAAKvB,KAAO,iBAC/ByH,GAAgBrI,GAAGC,OAAOG,KAAO,SAEjC,YACOiI,IACHhB,MAAO,CACH5hB,GAAI,SACJqZ,KAAM,mBACNrK,SAAU,2BACVgS,MAAO,wBACPa,KAAM,SACNC,YACI,yEACJC,uBACI,4DACJC,iBAAkB,yBAClBC,SAAU,kBAEdC,IAAK,CACD1G,OAAQ,WACR2G,WAAY,cACZC,gBAAiB,qBACjBC,cAAe,gBACfC,SAAU,WACVpjB,MAAO,CACH0D,KAAM,cACNvB,MAAO,QACPkhB,KAAM,QAEV5F,UAAW,CACP6F,QAAS,CACLxb,MAAO,aACPyb,SAAU,0BACVC,WAAY,qBAIxB/B,WAAY,CACRgC,iBAAkB,mGC5CC,SAAAjlB,GACvB,MAA+C6C,aAAWsS,IAAlDpK,IAAAA,OAAQzE,IAAAA,cAAWkO,yBAAa,MAC/BxU,EAAMmH,QAASie,aAAe,OACUplB,EAAzCqR,OAAQgU,gBAAwBhe,IAASrH,QAK7ColB,EAHA/T,SAGA+T,EAFAE,aAAAA,aAAe7Q,KACZ8Q,IACHH,aAC6BlW,IAAlBsW,EAA8BA,EAAgBH,IACxCC,OACdje,GACH0D,OAAAA,EACAsG,OAAAA,EACA/K,UAAAA,GACGif,MAEyCE,EAAxCpU,OAAmBqU,IAAqBD,MAEhD,QAAqBvW,IAAjBuW,EACA,6EACiEzlB,EAAMmH,gFAI3E,MAAO,CACHwe,oBACOte,EACAke,EACAG,GAEPrU,YAAmBnC,IAAX0W,EAAuBA,EAASvU,4NC5B1B,SAACrE,EAAO6Y,EAAYC,SAChB,iBAAfA,MAAAA,SAAAA,EAAM/V,MAAoB+V,EAAK/V,UAAOb,MAElB,SAAAlP,GAC3B,MAAmBA,EAAXmH,SACuCtE,aAAWsS,IAAlDpK,IAAAA,OAAQzE,IAAAA,cAAWkO,WAAAA,aAAa,OACpBuR,cAAY,SAAA3X,GAC5B,MAAqBA,EAAM4X,aACrB5X,EAAM4X,aAAazd,OAAO,SAAA8Q,YAAa/W,KAAO6E,IAC9C,GACN,SAAoB,GAAK6e,EAAa,GAAK,QAM5B,GAHLC,IAAV5a,SACQ6a,IAAR7U,UAGoC,MAFpCC,SAE2CuD,QAAe3F,IAEtBsF,EAA/BrN,GAASie,aAAe,OAS7BplB,EAPAmmB,QACUC,EAMVpmB,EANAqmB,SACQC,EAKRtmB,EALAumB,SAKAvmB,EAJAqR,OAAQgU,kBAIRrlB,EAHAqL,SAAUmb,gBACAC,EAEVzmB,EAFA0mB,SACGrf,IACHrH,MACI2mB,EAAUC,WAAS5mB,GAAnB2mB,QAUJvB,EARAe,QACQU,EAORzB,EAPAmB,OACUO,EAMV1B,EANAiB,SACQb,EAKRJ,EALA/T,OACU0V,EAIV3B,EAJA/Z,WAIA+Z,EAHAE,aAAAA,aAAe7Q,KACLuS,EAEV5B,EAFAsB,SACGnB,IACHH,aAC6BlW,IAAlBsW,EAA8BA,EAAgBH,SAErCnW,IAApB6X,EAAgCA,EAAkBP,SAE/BtX,IAAnB+X,EAA+BA,EAAiBC,SACnBhY,IAAlB2X,EAA8BA,EAAgBP,SAErCpX,IAApB4X,EAAgCA,EAAkBV,IACxC/O,GAAcrX,KACPslB,OACdje,GACH0D,OAAAA,EACAsG,OAAAA,EACA/K,UAAAA,EACAiN,MAAAA,GACGgS,MAEe3Z,SAAO+a,EAAM3Z,OAEnC,QAAqBkC,IAAjBuW,EACA,6EACiEte,2EAIrE,MAQIse,EAPApU,OACU8V,EAMV1B,EANApa,SACS+b,EAKT3B,EALAU,QACUkB,EAIV5B,EAJA6B,SACQC,EAGR9B,EAHAc,OACUiB,EAEV/B,EAFAiB,SACGhB,IACHD,QACiB2B,GAAmBjB,IACpBoB,GAAkBhB,KAChBc,GAAoBhB,UAErB9S,GAAO4R,KAAMsC,EAAcpb,aACrBa,MAAMC,QAAQsZ,GACnCA,EACA,CAACA,MACmBvZ,MAAMC,QAAQ6Z,GAClCA,EACA,CAACA,MACsB9Z,MAAMC,QAAQqa,GACrCA,EACA,CAACA,GASP,MAAO,CACH7B,kBACIQ,QAAS,SAAAhe,GACLuf,GAAgBvB,EAAQ5S,EAAOxI,EAAQ5C,GACvCsf,EAAcpb,QAAUlE,EAAEwf,OAAO3a,OAErCuZ,OAAQ,SAAApe,aAAoByf,EAAYC,GAAS9c,EAAQ5C,IACzDke,SAAU,SAAAle,cAAsB2f,GAAcD,GAAS9c,EAAQ5C,IAC/D4f,YAAY,EACZrB,SAjBc,UACfsB,GACAC,GACAC,IACHC,GACAC,IACF7f,OAAO,SAAA8f,eAAWnZ,SAYT7H,EACAke,EACAG,GACHra,cACsB6D,IAAlB+W,EACMA,OACqB/W,IAArBiY,EACAA,EACA9b,IAEdgG,YACoBnC,IAAhBgX,EACMA,OACmBhX,IAAnBoZ,EACAA,EACAjX,8ECzHe,SAAArR,GAC7B,MAA8BA,EAAtB4M,SAAavF,IAASrH,QACIuoB,sBAA1BjiB,IAAAA,UAAWkiB,IAAAA,WAanB,OAXAjc,YAAU,WACDjG,GAEuB,sBACpBsG,EAASvE,OAAO4H,OAAO,CAACuY,MAKjC,CAACA,EAAY5b,EAAUtG,IAEnB/F,gBAACkoB,cAAgBphB,2CCHVrE,aACd,SAAAxB,SAAU,CACNknB,eAAgB,CACZ9mB,MAAOJ,EAAM4B,QAAQulB,QAAQ7jB,MAEjC8jB,eAAgB,CACZhnB,MAAOJ,EAAM4B,QAAQyB,MAAMC,KAC3BC,UAAW,CACP5B,gBAAiB6B,QAAMxD,EAAM4B,QAAQyB,MAAMC,KAAM,KAEjDG,uBAAwB,CACpB9B,gBAAiB,iBAI7B0lB,iBAAkB,CACd9M,aAAc,WAGtB,CAAE7W,KAAM,iBAGW,SAAAlF,UACnBO,gBAACuoB,GACGC,OAAO,0BACP5L,OAAQ,oCAER5c,gBAACyoB,QAAUhpB,QAIC,CAAEipB,OAAQ,WAEX,SAAAjpB,WAcXA,EAZAoJ,OACA9C,EAWAtG,EAXAsG,UACAgD,EAUAtJ,EAVAsJ,MACAC,EASAvJ,EATAuJ,QACA4T,EAQAnd,EARAmd,OACA+L,EAOAlpB,EAPAkpB,aACAC,EAMAnpB,EANAmpB,YACAC,EAKAppB,EALAopB,WACAjpB,EAIAH,EAJAG,QACAqJ,EAGAxJ,EAHAwJ,UACA6f,EAEArpB,EAFAqpB,kBAEArpB,EADAspB,iBAAAA,aAAmB,OAEPnkB,GAAUnF,KACRE,iBACXqpB,EAAeC,qBAAmBH,QAEnBzgB,cAClB,SAACT,EAAGoO,GACApO,EAAEqH,kBACFhG,EAAUrB,EAAGohB,IAEjB,CAACA,EAAa/f,MAGEZ,cAAY,SAAAT,GAC5BA,EAAEqH,mBACH,IAEH,OACIjP,gBAACmJ,GACGjC,KAAM2B,EACNjJ,QAASA,EACTU,QAAS4oB,EACT9f,aACA+f,SAAS,KACTC,eAAgBA,GAChB7S,kBAAgB,0BAEhBvW,gBAACqJ,GAAYG,MAAO6f,GAAatnB,GAAG,0BAC/BrB,EAAUqI,KAASqQ,EAAGrQ,GAAUggB,KAErC/oB,gBAACqO,GAAcib,UAAU,GAAOtgB,GAChChJ,gBAAC+O,OACG/O,gBAAC2I,GAAOmC,SAAU/E,EAAWzF,QAASV,GAClCI,gBAAC6oB,GAAW/jB,UAAWC,EAAQujB,mBAC9B5nB,EAAUkc,EAAQ,CAAExD,EAAGwD,KAE5B5c,gBAAC2I,GACGmC,SAAU/E,EACVzF,QAAS,SAAAsH,YAAmBA,EAAG,QAC/B9C,UAAW8Q,GAAW,qBACjB7Q,EAAQsjB,gBAAkC,YAAjBM,IACzB5jB,EAAQojB,gBAAkC,YAAjBQ,MAE9BY,cAEAvpB,gBAAC4oB,GAAY9jB,UAAWC,EAAQujB,mBAC/B5nB,EAAU,yBAO/B8oB,GAAWvf,UAAY,CACnB2S,OAAQ1S,EAAUuf,OAClB1kB,QAASmF,EAAUwf,OACnB3M,QAAS7S,EAAUuf,OACnBd,aAAcze,EAAUuf,OACxBb,YAAa1e,EAAUyf,YACvBd,WAAY3e,EAAUyf,YACtB3gB,QAASkB,EAAU0f,KAAKC,WACxBhhB,OAAQqB,EAAU4f,KAClB/jB,UAAWmE,EAAU4f,KACrBlqB,QAASsK,EAAUoL,KAAKuU,WACxB5gB,UAAWiB,EAAUoL,KAAKuU,WAC1B9gB,MAAOmB,EAAUuf,OAAOI,YAG5BL,GAAWzT,aAAe,CACtB6G,OAAQ,mBACR7X,QAAS,GACT4jB,aAAc,UACdC,YAAamB,EACblB,WAAYmB,EACZnhB,QAAQ,yEClIQ,kBAAM7I,gBAAC0I,qBACN,CACjBuhB,UAAW,GACXC,KAAK,EACLC,MAAM,MAGK,SAAAC,GAEX,OAAKA,GAAKA,MAAAA,GAAAA,EAAGF,IACF,QACAE,MAAAA,GAAAA,EAAGD,MAA+B,IAAvBC,EAAEH,UAAUxc,OACvB,wBAGU2c,EAAEH,UAAUxc,eAGvB,SAAA2c,GAEV,aCNa,SAAA3qB,UACbO,gBAACqY,YACO5Y,GACJ4qB,WAAW,EACXC,UAAU,EACVC,QAAS,GACTxhB,MAAM,IACNyhB,kBAAmBxqB,+BAEnBA,gBAAC8T,gBACG9T,gBAACyqB,aAAU7jB,OAAO,SAAS8jB,YAAStmB,MAAM,WAC1CpE,gBAACyqB,aAAU7jB,OAAO,YAAY8jB,YAAStmB,MAAM,aAC7CpE,gBAACyqB,aAAU7jB,OAAO,YAAY8jB,YAAStmB,MAAM,iBAKnC,CAAEumB,SAAU,gBAEb,SAAAlrB,GACjB,MAA4B0C,WAAeyoB,IAApCC,OAAQC,SACMnlB,sBAEL0C,cACZ,SAAAT,GACIkjB,EAAU,CAAEH,SAAU/iB,EAAEgiB,KAAKxpB,OAEjC,CAAC0qB,MAGkBziB,cACnB,SAAA0iB,GAGI,SACKC,cAAc,WAAY,CAAEC,SAHhBF,EAASA,EAAOG,SAASnpB,GAAK,KAI1CopB,KAAK,SAAAC,YAAqB5b,aACpB,WACH,gBAAgB,yBAG5B,CAAC6b,IAGL,OACIrrB,gBAACiC,OAAIe,QAAQ,OAAOrB,KAAM,EAAG6Y,WAAW,aAAajX,OAAO,QACxDvD,gBAACiC,OAAIqpB,SAAU,GACXtrB,gBAACurB,YACGxpB,GAAG,wBACHypB,cAAc,QACdC,UAAU,GACVC,YAAaprB,EACbqrB,eAAgBA,KAGxB3rB,gBAACiC,OAAIqpB,SAAU,GACXtrB,gBAAC4rB,IAASrpB,SAAS,WAAWyF,OAAQ6iB,UAMpCpoB,aACd,SAAAxB,SAAU,CACNknB,eAAgB,CACZ9mB,MAAOJ,EAAM4B,QAAQulB,QAAQ7jB,MAEjC8jB,eAAgB,CACZhnB,MAAOJ,EAAM4B,QAAQyB,MAAMC,KAC3BC,UAAW,CACP5B,gBAAiB6B,QAAMxD,EAAM4B,QAAQyB,MAAMC,KAAM,KAEjDG,uBAAwB,CACpB9B,gBAAiB,iBAI7B0lB,iBAAkB,CACd9M,aAAc,WAGtB,CAAE7W,KAAM,iBAGW,SAAAlF,UACnBO,gBAACuoB,GACGC,OAAO,0BACP5L,OAAQ,oCAER5c,gBAACyoB,QAAUhpB,QAIC,CAAEipB,OAAQ,WAEH,SAAAjpB,WAYnBA,EAVAoJ,OACA9C,EASAtG,EATAsG,UACAgD,EAQAtJ,EARAsJ,MACA6T,EAOAnd,EAPAmd,OACA+L,EAMAlpB,EANAkpB,aACAC,EAKAnpB,EALAmpB,YACAC,EAIAppB,EAJAopB,WACAjpB,EAGAH,EAHAG,QACAqJ,EAEAxJ,EAFAwJ,YAEAxJ,EADAspB,iBAAAA,aAAmB,OAEPnkB,GAAUnF,KACRE,mBAEI0I,cAClB,SAACT,EAAGoO,GACApO,EAAEqH,kBACFhG,EAAUrB,EAAGoO,IAEjB,CAAC/M,MAGeZ,cAAY,SAAAT,GAC5BA,EAAEqH,mBACH,IAEH,OACIjP,gBAACmJ,GACGjC,KAAM2B,EACNjJ,QAASA,EACTU,QAAS4oB,EACT9f,aACA+f,SAAS,KACTC,eAAgBA,GAChB7S,kBAAgB,0BAEhBvW,gBAACqJ,GAAYG,MAAO6f,GAAatnB,GAAG,0BAC/BrB,EAAUqI,KAASqQ,EAAGrQ,GAAUggB,KAErC/oB,gBAACqO,GAAcib,UAAU,GACrBtpB,gBAAC6rB,UAEL7rB,gBAAC+O,OACG/O,gBAAC2I,GAAOmC,SAAU/E,EAAWzF,QAASV,GAClCI,gBAAC6oB,GAAW/jB,UAAWC,EAAQujB,mBAC9B5nB,EAAUkc,EAAQ,CAAExD,EAAGwD,KAE5B5c,gBAAC2I,GACGmC,SAAU/E,EACVzF,QAAS,SAAAsH,YAAmBA,EAAG,QAC/B9C,UAAW8Q,GAAW,qBACjB7Q,EAAQsjB,gBAAkC,YAAjBM,IACzB5jB,EAAQojB,gBAAkC,YAAjBQ,MAE9BY,cAEAvpB,gBAAC4oB,GAAY9jB,UAAWC,EAAQujB,mBAC/B5nB,EAAU,yBAO/BorB,GAAmB7hB,UAAY,CAC3B2S,OAAQ1S,EAAUuf,OAClB1kB,QAASmF,EAAUwf,OACnB3M,QAAS7S,EAAUuf,OACnBd,aAAcze,EAAUuf,OACxBb,YAAa1e,EAAUyf,YACvBd,WAAY3e,EAAUyf,YACtB9gB,OAAQqB,EAAU4f,KAClB/jB,UAAWmE,EAAU4f,KACrBlqB,QAASsK,EAAUoL,KAAKuU,WACxB5gB,UAAWiB,EAAUoL,KAAKuU,WAC1B9gB,MAAOmB,EAAUuf,OAAOI,YAG5BiC,GAAmB/V,aAAe,CAC9B6G,OAAQ,mBACR7X,QAAS,GACT4jB,aAAc,UACdC,YAAamB,EACblB,WAAYmB,EACZnhB,QAAQ,yECnMS,CACjBohB,UAAW,GACXC,KAAK,EACLC,MAAM,MAGK,SAAAC,GACX,OAAKA,GAAKA,MAAAA,GAAAA,EAAGF,IACF,QACAE,MAAAA,GAAAA,EAAGD,MAA+B,IAAvBC,EAAEH,UAAUxc,OACvB,wBAGU2c,EAAEH,UAAUxc,eAGvB,SAAA2c,GAEV,iFCxBiB,SAAA3qB,GACjB,MAAmCssB,GAAmBtsB,GAA9C2lB,IAAAA,eAAgBtU,IAAAA,SACTyE,uBACI+D,KAAKC,MAAMD,KAAK0S,UAAUxlB,MAC/BylB,EAAWxsB,EAAMmH,QAG/B,OAFAqlB,EAAWxsB,EAAMmH,QAAmB,IAAT6F,GAAwB,KAATA,GAGrCqE,GAAU9Q,gBAACksB,oBAAmB9G,GAAgB5e,OAAQylB,qBCRhD,SAAAxsB,GACX,MAAmC0sB,GAAuB1sB,GAE1D,SAFwBqR,QAIhB9Q,gBAACosB,eAAUC,OAAO,GAAGC,QAAS,OAJ9BlH,gBAKIplB,gBAACusB,cAAW3lB,OAAO,2BCNlB,SAAAnH,GACb,MAAmC0sB,GAAuB1sB,GAE1D,SAFwBqR,QAEN9Q,gBAACwsB,iBAFXpH,kCPoBK,SAAA3lB,GACb,MAecgtB,EAfU3b,EAAWqb,GAAuB1sB,GAAlCqR,SACPE,kBACkCvR,EAA3C+nB,WAAY5gB,EAA+BnH,EAA/BmH,OAAQ8lB,EAAuBjtB,EAAvBitB,UAAc5lB,IAASrH,QAChC+lB,cAAY,SAAA3X,GAC3B,MAAYA,EAAM8e,UACZ9e,EAAM8e,UAAU3kB,OAAO,SAAA8Q,YAAa/W,KAAO6E,IAC3C,GACN,SAAW,GAAKgmB,EAAI,GAAK,SAENvhB,SAAOwhB,KAEX,OAAfA,GAAuBC,EAAehhB,QAChCghB,EAAehhB,QACf+gB,EAgBV,OAbI7kB,IAEAqE,EADkDrE,EAA1CqE,SAERogB,IAFkDzkB,OAKtDgE,YAAU,WACa,OAAf6gB,IACAC,EAAehhB,QAAU+gB,EACzB5b,EAAS8b,GAAuBnmB,MAErC,CAAC0S,KAAK0S,UAAUa,KAEX/b,EAeJ,KAdA9Q,gBAACgtB,kBACGN,UAAWA,EACX9lB,OAAQA,EACR2jB,QAAS,IACTviB,OAAQykB,GAERzsB,gBAACitB,QACOnmB,GACJuF,SAAUA,EACVmb,WAAYA,EACZ0F,WAAW,WACXC,YAAavmB,8BQ/DN,SAAAnH,GACnB,MAAmC0sB,GAAuB1sB,GAE1D,SAFwBqR,QAEN9Q,gBAACkoB,gBAFX9C,6FCGc,SAAA3lB,GACtB,IAA2CqH,IAASrH,QAC5B2tB,oBAAkBtmB,KACGumB,EAArC7mB,OAAuBT,EAAcsnB,EAAdtnB,UACvBkO,EAAeS,GAAajV,GAA5BwU,aACQtE,UACZ,iBAAO,CAAEnF,OAAQ,IAAK6E,cAAAA,EAAetJ,UAAAA,EAAWkO,WAAAA,IAChD,CAAC5E,EAAetJ,EAAWkO,IAG/B,OACIjU,gBAAC2U,QACG3U,gBAAC4U,GAAajE,UAASlE,MAAOmE,GAC1B5Q,gBAACstB,YAASxmB,EAAUmN,MAAAA,SAAAA,EAAYa,2BxCkehC,SAAArV,GACZ,MAWIA,EAVA8tB,SAAAA,aAAW,KACXC,EASA/tB,EATA+tB,OACAC,EAQAhuB,EARAguB,UACSC,EAOTjuB,EAPAkuB,QACAjB,EAMAjtB,EANAitB,YAMAjtB,EALAmuB,SAAAA,kBAKAnuB,EAJAouB,YAAAA,gBACA1e,EAGA1P,EAHA0P,cAGA1P,EAFA+U,WAAAA,gBACG1N,IACHrH,QAC4BA,EAAxB+G,SAEQ5B,GAAUnF,GAEbquB,EAAW5iB,WAASuiB,QACaA,KAA9BM,IAAP3H,MAAwB4H,IAANtQ,OAQR5V,OAAOC,KAAK2C,GAC1B1C,OAAO,SAAA5H,YAAc6H,MAAM,KAAKC,SAAS9H,KACzC+H,OAAO,SAACC,EAAKhI,GAEV,OADAgI,EAAIhI,GAAOsK,EAAYtK,MAExB,MAEM,GACbmtB,EAAStlB,MAAM,KAAKgmB,QAAQ,SAAA7H,GACpBA,IACApe,EAAOoe,GAAS,CACZ,CACIpgB,KAAM,SACNkoB,WAAY,KACZzhB,MAAO/B,EAAY0b,GACnBA,MAAOA,OAMvB,MAA4B+H,aACxBzB,EACA,CAAEjO,KAAM,EAAG8L,QAAS,KACpB,CAAEnE,MAAO2H,EAAWK,MAAOJ,GAC3BhmB,EAEA,CAAEuH,QAASiF,IANPhF,IAAAA,KAAMzJ,IAAAA,YASD4J,UAAQ,oBAAWpB,IAAI,SAAA/H,YAAiBzE,MAAK,CAACyN,OAGvDoe,EACM,CACIxH,MAAO,MACPiI,WAAY,GACZ3D,UAAU,EACV4D,aAAc,SAAA5oB,UACV1F,gBAACuuB,QACOznB,GACJqI,YAAaA,EACbtI,gBAAiB2mB,EACjB/kB,WAAYA,EACZ6B,IAAK5E,EAAO4E,SAIxB,WACHojB,GACH,CACItH,MAAO,IACP9iB,MAAO,GACP+qB,WAAY,GACZG,YAAa,SACb9D,UAAU,EACV+D,2BAA2B,EAC3BC,WAAY,SAAAhpB,UACR1F,gBAAC2uB,QACO7nB,GACJD,gBAAiB2mB,EACjB/kB,WAAYA,EACZ6B,IAAK5E,EAAO4E,IACZC,IAAK7E,EAAO6E,SAIxBsjB,EACM,CACIzH,MAAO,KACPiI,WAAY,GACZG,YAAa,SACb9D,UAAU,EACV+D,2BAA2B,EAC3BC,WAAY,SAAAhpB,UACR1F,gBAAC4uB,QACO9nB,GACJD,gBAAiB2mB,EACjBljB,IAAK5E,EAAO4E,IACZC,IAAK7E,EAAO6E,SAIxB,OAGWoF,UAAQ,qBAAe,CAAC2J,KAAK0S,UAAU2B,KAE5D,OAAI5nB,EACO/F,gBAAC6uB,gBAIR7uB,gBAACyoB,GAAM3jB,UAAWC,EAAQ1B,WACtBrD,gBAAC8uB,wBAAqBC,gBAClB/uB,gBAACgvB,iBAAc/tB,MAAOA,IAClBjB,gBAACivB,cAIGnqB,UAAWC,EAAQrC,KACnBwsB,2BACAC,SAAU,GACVC,cACA3B,UAAWA,EACX4B,KAAMA,EACN1B,QAAS2B,EACTC,kBAAmB,SAAAC,YAAiBA,IAEpC3T,WAAY,CAER4T,cAAeC,KAEf5oB,6BWxWA,oBACxBiD,SACAjF,IAAAA,UACA0K,IAAAA,KACAmgB,IAAAA,YACAC,QAAAA,gBACG9oB,iBAEH9G,gBAAC6vB,gBAAW/qB,UAAWA,KAAiCgC,OACnDiD,EACA6lB,GACG5vB,gBAAC8vB,cAAW1rB,MAAM,iBAAiBkC,KAAMtG,gBAAC+vB,UAE7CJ,GAAW3vB,gBAACgwB,cAAWxpB,OAAQgJ,qFV3R7B,SAAA/P,GACP,MAQIA,EAPA8tB,SAAAA,aAAW,KACXE,EAMAhuB,EANAguB,UACSC,EAKTjuB,EALAkuB,QACAjB,EAIAjtB,EAJAitB,YAIAjtB,EAHAuI,OAAAA,aAAS,OAGTvI,EAFA+U,WAAAA,gBACG1N,IACHrH,QAC4BA,EAAxB+G,SACQ5B,GAAUnF,KAIFyL,WAASuiB,GAA1B/P,OAAMoQ,SACiCL,KAA9BM,IAAP3H,MAAwB4H,IAANtQ,OAEX/N,UACZ,2BAAU+d,IACV,CAACpU,KAAK0S,UAAU0B,OAOL,GAEfH,EAAStlB,MAAM,KAAKgmB,QAAQ,SAAA7H,GACpBA,GACA6J,EAASC,KAAK,CACVlqB,KAAM,SACNkoB,WAAY,KACZzhB,MAAO/B,EAAY0b,GACnBA,MAAOA,MAKnB,WAAyB6J,EAASE,OAAOnoB,MAEbmmB,aACxBzB,EACA,CAAEjO,KAAM,EAAG8L,QAAS,KACpB,CAAEnE,MAAO2H,EAAWK,MAAOJ,GAC3BvB,EAEA,CAAEld,QAASiF,IANPhF,IAAAA,KAAMzJ,IAAAA,YASD4J,UAAQ,oBAAWpB,IAAI,SAAA/H,YAAiBzE,MAAK,CAACyN,IAE3D,OAAIzJ,EACO/F,gBAAC6uB,gBAIR7uB,gBAACyoB,GAAM3jB,UAAWC,EAAQ1B,WACtBrD,gBAAC8uB,wBAAqBC,gBAClB/uB,gBAACgvB,iBAAc/tB,MAAOA,IAClBjB,gBAACivB,cAIGnqB,UAAWC,EAAQrC,KACnBwsB,2BACAC,SAAU,GACVC,cACAC,KAAMA,EACN1B,QAASA,EACTF,UAAW/P,EACX6R,kBAAmB,SAAAC,YAAiBA,IAEpC3T,WAAY,CAER4T,cAAeC,KAEf5oB,mDwCtFT,SAAArH,GACf,MAA+BA,EAAvBsJ,MAAOnC,EAAgBnH,EAAhBmH,OAAQwpB,EAAQ3wB,EAAR2wB,MACR7a,mBAAiB9V,GAGhC,OAAOO,gBAACqwB,GAAOtnB,MAAOA,EAAOqnB,IAFVA,MAAO5pB,EAAOI,8BCFtBnH,UAASO,gBAACswB,cAAW7wB,GAAO8wB,OAAQnvB,GAAQ2X,KAAMyX,iCCQvC,SAAA/wB,GACtB,MACIA,EADIqF,UAAWwlB,EACf7qB,EADe6qB,SAAUmG,EACzBhxB,EADyBgxB,QAAS1mB,EAClCtK,EADkCsK,SAAU2mB,EAC5CjxB,EAD4CixB,cAAkB5pB,IAC9DrH,MACIuT,EAAUD,GAAetT,GAAzBuT,QACYtB,iBAAejS,KAClBgV,qBAAmB3N,GAC5BujB,EAAcjX,wBAAsBtM,GAApCujB,YASJsG,EANAC,YACAC,EAKAF,EALAE,iBACAC,EAIAH,EAJAG,aACA9H,EAGA2H,EAHA3H,YACA+H,EAEAJ,EAFAI,WACAC,EACAL,EADAK,aAGqBhe,EAAU2d,GAEnC,iBACI,kBACI3wB,gBAAC6vB,gBAAW/qB,UAAWA,GAAemsB,wBAAsBnqB,IACvD2pB,GACGS,eAAaT,EAAS,CAClBluB,SAAAA,EACAwuB,WAAAA,EACAF,iBAAAA,EACAC,aAAAA,EACAlgB,QAAS,WAEhByZ,GAAarqB,gBAACmxB,sBACD,IAAb7G,GACGtqB,gBAACoxB,gBACGtmB,SAAoB,IAAVkmB,EACVzuB,SAAUA,EACVmb,KAAMkT,EACNE,aAAcA,IAGrBxiB,WAASC,IAAIxE,EAAU,SAACyE,EAAOC,yBACfD,EAAO,CAChBlO,QAAUkO,EAAM/O,MAAM+C,QAEhB,KADA,SAAAoF,YAAmBypB,EAAa7iB,EAAMpO,MAE5CoC,QAASgM,EAAM/O,MAAM+C,QACfgM,EAAM/O,MAAM+C,QAAQ+L,IAAI,SAAA+iB,eACjBA,GACHhxB,QAAS,SAAAsH,YACSypB,EAAaC,EAAOlxB,UAE1C,WAKtB,CAACmC,EAAUsuB,EAAkBC,EAAc9H,EAAayH,EAASO,uBChEvD,SAAAvxB,GACd,MAAmC0sB,GAAuB1sB,GAAlD2lB,IAAAA,eAAgBtU,IAAAA,SAGQsU,EAAxBoC,WAAe1gB,IAASse,MAOhC,OAAQtU,EAQJ,KAPA9Q,gBAACuxB,sBAAwBzqB,EACrB9G,gBAACwxB,oBACGhK,WAAYA,EACZ0F,WAAW,WACXC,YAAa1tB,EAAMmH,yBvB2CrB,SAAAnH,GACV,MAIIA,EAHAkb,uBAGAlb,EAFAgyB,WAAAA,aAAa,eAEbhyB,EADAiyB,eAAAA,aAAiB,eAESxmB,YAAS,GAAhCpC,OAAS6oB,SACEhyB,mBACMe,EAAU,qBAClBkE,GAAU,CACtB+V,qBAAAA,EACAQ,WAAYyW,EAAgBnkB,WAEjB1G,gBACD8qB,eACGC,gBAwCjB,OACI9xB,gBAAC4J,QAAKC,SAvCW,SAAA6F,GACjBiiB,GAAW,GACXhO,EAAMjU,EAAQqiB,EAASlkB,MAAQkkB,EAASlkB,MAAMmkB,aAAe,WACzD,SAAA1tB,GACIqtB,GAAW,GACXlqB,EACqB,mBACXnD,OACiB,OAAgBA,EAAMuD,QAEvCvD,EAAMuD,QADN,wBAEN,CACI7B,KAAM,UACN0B,YAAa,CACT0R,EACqB,mBACX9U,EACAA,GAASA,EAAMuD,QACfvD,EAAMuD,aACN8G,QAoBAwX,SAZjB,SAAAzW,GACb,MAAe,GAOf,OANKA,EAAO+hB,KACR9lB,EAAO8lB,GAAc/wB,EAAU,2BAE9BgP,EAAOgiB,KACR/lB,EAAO+lB,GAAkBhxB,EAAU,+BAOnCV,uBAAK8E,UAAWC,EAAQR,MACpBvE,gBAACiyB,GAAKntB,UAAWC,EAAQ+V,MACrB9a,uBAAK8E,UAAWC,EAAQgW,QACpB/a,gBAACqwB,GAAOvrB,UAAWC,EAAQiW,YACvBhb,gBAACQ,UAGTR,uBAAK8E,UAAWC,EAAQqW,0BACxBpb,uBAAK8E,UAAWC,EAAQ2N,MACpB1S,uBAAK8E,UAAWC,EAAQmR,OACpBlW,gBAACkyB,aACG3I,aACA5kB,KAAM8sB,EACNrtB,MAAO1D,EAAU,oBACjBoK,SAAUhC,KAGlB9I,uBAAK8E,UAAWC,EAAQmR,OACpBlW,gBAACmyB,iBACGxtB,KAAM+sB,EACNttB,MAAO1D,EAAU,oBACjBsF,KAAK,WACL8E,SAAUhC,MAItB9I,gBAACoyB,GAAYttB,UAAWC,EAAQwW,SAC5Bvb,gBAAC2I,GACGlH,QAAQ,YACRuE,KAAK,SACL3E,MAAM,UACNyJ,SAAUhC,EACVM,cAECN,GACG9I,gBAACqyB,GACGvtB,UAAWC,EAAQuB,KACnBuP,KAAM,GACNyc,UAAW,IAGlBV,2CC7IV,SAAAnyB,WAQXA,EANAqF,YAMArF,EALA+C,QAAAA,aAAU,KACJ+vB,EAIN9yB,EAJA6G,KACAlC,EAGA3E,EAHA2E,MACA0G,EAEArL,EAFAqL,SACGhE,IACHrH,QACoByL,YAAS,GAA1BhE,OAAMyD,SACIU,aACyBH,WAAS,GAA5CsnB,OAAeC,SACN7tB,GAAUnF,KACTgV,qBAAmBhV,GAsBpC,OACIO,yBACI8E,UAAW8Q,GAAW7Q,EAAQrC,KAAMoC,MACdgC,OAEtB9G,gBAAC2I,UACG7D,UAAU,aAEVV,MAAOA,EACP9D,QAvBS,SAAAsH,GAEjBA,EAAE8qB,iBACF/nB,GAAQ,GACRgoB,EAAS7mB,QAAUlE,EAAEgrB,eAoBb7pB,MAAOvG,EAAQgwB,GAAepuB,MAC9B0G,SAAUA,cAETtI,EAAQgwB,yBAAgBlsB,OAAQisB,GAErCvyB,gBAACwwB,GAAKtpB,KAAMA,EAAMyrB,SAAUA,EAAS7mB,QAASlM,QAtBlC,SAAA0I,GACZqqB,EAAS7mB,SAAW6mB,EAAS7mB,QAAQ+mB,SAASvqB,EAAM8e,SAGxDzc,GAAQ,KAmBCnI,EAAQ+L,IAAI,SAAC+iB,EAAQ7iB,UAClBzO,gBAACC,GACGG,IAAKkxB,EAAOltB,MACZ0G,SAAUwmB,EAAOxmB,SACjBgoB,SAAUrkB,IAAU+jB,EACpBlyB,QAAS,SAAAgI,IAzCD,SAACA,EAAOmG,GAChCgkB,EAAiBhkB,GACjB9D,GAAQ,GAwCYooB,CAAoBzqB,EAAOmG,GAC3B6iB,EAAOhxB,SAAWgxB,EAAOhxB,QAAQgI,EAAOmG,IAE5ClM,SAAUA,EACVwG,MAAOuoB,EAAOltB,OAEbktB,EAAOhrB,KACRtG,wBAAM8E,UAAWC,EAAQyW,eACzBxb,gBAACgzB,cAAW5uB,MAAOktB,EAAOltB,MAAO7B,SAAUA,iCuBjF5C,SAAA9C,GACnB,MAA4DA,EAApDwzB,OAAQnuB,EAA4CrF,EAA5CqF,UAAmCgC,IAASrH,QACOwzB,EAA3DC,SAA2DD,EAAnDE,UAAAA,aAAY,OAAuCF,EAAnCG,WAAAA,aAAa,KAAIC,EAAkBJ,EAAlBI,gBAClC9d,uBACG2d,EACb3kB,IAAI,SAAAuK,eAA0BnK,MAAVmK,GAAsBtS,EAAOsS,GAAQA,IACzDwa,QAAQH,GAEb,OACInzB,gBAACwB,KAAW+xB,UAAO9xB,QAAQ,UAAUqD,UAAWA,GAAegC,GAC1D0sB,EACAH,GACGrzB,gBAACwB,GACGtB,UAAU,OACV8C,QAAQ,QACR3B,MAAM,gBACNI,QAAQ,WAEP2xB,EACI7kB,IACG,SAAAuK,UACOA,EAAK5I,UAAY,aAChB1J,EAAOsS,EAAK2a,QAAU,SAGjCH,KAAK,yBCzBb,SAAA7zB,GACb,MAAmC0sB,GAAuB1sB,GAE1D,SAFwBqR,QAEN9Q,gBAACmyB,kBAFX/M,qCCAK,SAAA3lB,GACb,MAAmC0sB,GAAuB1sB,GAAlD2lB,IAAAA,eAAgBtU,IAAAA,SAGQsU,EAAxBoC,WAAe1gB,IAASse,MAMhC,OAAQtU,EAQJ,KAPA9Q,gBAACgtB,iBAAmBlmB,EAChB9G,gBAAC0zB,yBACGlM,WAAYA,EACZ0F,WAAW,WACXC,YAAa1tB,EAAMmH,qCChBT,SAAAnH,GACtB,MAAmC0sB,GAAuB1sB,GAE1D,SAFwBqR,QAEN9Q,gBAAC0zB,0BAFXtO,mCrC+Qa,SAAA3lB,UACrBO,gBAACwB,GAAWC,QAAQ,KAAKkyB,iBACpBl0B,EAAMsK,8BsC9QW,SAAAtK,OACqBqH,IAASrH,QAC5Bm0B,oBAAkB9sB,KACGumB,EAArC7mB,OAAuBT,EAAcsnB,EAAdtnB,UACvBkO,EAAeS,GAAajV,GAA5BwU,aACQtE,UACZ,iBAAO,CAAEnF,OAAQ,IAAK6E,cAAAA,EAAetJ,UAAAA,EAAWkO,WAAAA,IAChD,CAAC5E,EAAetJ,EAAWkO,IAG/B,OACIjU,gBAAC2U,QACG3U,gBAAC4U,GAAajE,UAASlE,MAAOmE,GAC1B5Q,gBAAC6zB,YAAS/sB,EAAUumB,EAAqBpZ,MAAAA,SAAAA,EAAYa,2CdUxD,SAAArV,GACT,MAOIA,EANAqL,WAMArL,EAHA2E,MAAAA,aAAQ,iBACRwC,EAEAnH,EAFAmH,OACGE,IACHrH,MACGupB,EAAeC,qBAAmB,iBAEjB/d,YAAS,GAA1BhE,OAAMyD,SACAtI,OAEOgG,cAAY,WAC5BsC,GAAQ,IACT,CAACA,IA2BJ,OACI3K,gBAAC0I,gBACG1I,uBAAKwJ,MAAO,CAAExG,QAAS,OAAQwX,WAAY,WACvCxa,gBAACkyB,eACGxjB,aAAcolB,IACVhtB,GACJF,OAAQA,EACRxC,MAAOA,EACP0G,YACAyO,MAAOA,GACPwa,OAAQA,GACRvM,YAAY,EACZwM,WAAY,CACRC,aACIj0B,gCACIA,gBAAC2V,GACGrV,QAhCV,SAAAsH,GAClB8K,EAAKwhB,SAASttB,EAAQ,CAClBqjB,UAAW,GACXC,KAAK,EACLC,MAAM,KA6BkBrf,SAAUA,EACVqpB,aAAW,UACXte,KAAK,QACL9M,MAAM,WAEN/I,gBAACo0B,SAELp0B,gBAAC2V,GACGrV,QAjCZ,SAAAsH,GAChB8K,EAAKwhB,SAASttB,EAAQ,CAClBqjB,UAAW,GACXC,KAAK,EACLC,MAAM,KA8BkBrf,SAAUA,EACVqpB,aAAW,QACXte,KAAK,QACL9M,MAAM,SAEN/I,gBAACq0B,SAELr0B,gBAAC2V,GACGrV,QAAS,SAAAsH,aAAa,IACtBkD,SAAUA,EACVqpB,aAAW,YACXte,KAAK,QACL9M,MAAM,aAEN/I,gBAACs0B,eAOzBt0B,gBAAC8rB,IACGjjB,OAAQ3B,EACR6B,sBAAuB3E,EACvB6E,UA3EU,SAACrB,EAAGoO,GACtBrL,GAAQ,GACR+H,EAAKwhB,SAASttB,EAAQ,CAClBqjB,UAAWjB,EACXkB,KAAK,EACLC,MAAM,KAuEFvqB,QAAS0W,6DetHE,SAAA7W,GACvB,MAMIA,EALAqxB,aACAyD,EAIA90B,EAJA80B,aAIA90B,EAHA+0B,KAAQC,IAAAA,IAAQD,YAGhB/0B,EAFAi1B,cAAAA,aAAgBC,KACb7tB,IACHrH,QACcqxB,EAAa/uB,GAM/B,OACI/B,gBAAC0I,gBACG1I,gBAAC40B,GACGnoB,MAAOooB,EACPC,eAAe,UACfhP,SATS,SAACxd,EAAOmE,GACzB8nB,OAAgBzD,GAAc/uB,GAAI0K,OAUzBgoB,EAAIlmB,IAAI,SAAAxM,UACL/B,gBAAC+0B,GACG30B,IAAK2B,EACLqC,MAAOrC,EAAGizB,OAAO,GAAGC,cAAgBlzB,EAAGmzB,MAAM,GAC7CzoB,MAAO1K,OAInB/B,gBAACm1B,QACDn1B,gBAAC00B,OAAkB5tB,EAAU0tB,EAAKK,wBCjC7B,SAAAp1B,GACb,MAAmC0sB,GAAuB1sB,GAE1D,SAFwBqR,QAEN9Q,gBAACkyB,eAAUkD,gBAFrBhQ,kCCOI,SAAA3lB,GACZ,MAA0BA,EAAlB41B,KAASvuB,IAASrH,QACS0sB,GAAuBrlB,GAAlDse,IAAAA,eAAgBtU,IAAAA,SACXzO,OACiBgkB,WAAS5mB,GAA/B2mB,IAAAA,MAAOkP,IAAAA,aACc,MAATD,GAAyB,MAATA,EAEpCrpB,YAAU,WACFoZ,EAAe3Y,OACfiG,EAAKwhB,SAASz0B,EAAMmH,OAAQwe,EAAe3Y,SASnDT,YAAU,WAGFupB,GACe,IAAfnP,EAAM3Z,QACL6oB,EAAWhxB,OACZgxB,EAAWE,WAIXpQ,EAAeY,UAEpB,CAACI,EAAM3Z,QAEV,WACO2Y,GAGP,OACKtU,IACS,MAATukB,GAAyB,MAATA,EACbr1B,gBAACy1B,cAAgBC,GACR,MAATL,EACAr1B,gBAAC21B,YAAcD,GACN,MAATL,EACAr1B,gBAAC41B,gBAAkBF,GAEnB11B,gBAACkyB,YADQ,MAATmD,OACeK,GAAU1vB,KAAK,SAEf0vB,8BnB1BF,SAAAj2B,GACrB,MACIA,EADIqL,SAAU+qB,EACdp2B,EADco2B,SAAUC,EACxBr2B,EADwBq2B,iBAAkB1xB,EAC1C3E,EAD0C2E,MAAOwC,EACjDnH,EADiDmH,OAAWE,IAC5DrH,QACoByL,YAAS,GAA1BhE,OAAMyD,SACAtI,OAEOgG,cAAY,WAC5BsC,GAAQ,IACT,CAACA,IA2BJ,OACI3K,gCACIA,uBAAKwJ,MAAO,CAAExG,QAAS,OAAQwX,WAAY,WACvCxa,gBAACkyB,eACGxjB,aAAcolB,IACVhtB,GACJF,OAAQA,EACRxC,MAAOA,EACP0G,YACAyO,MAAOA,GACPwa,OAAQA,GACRvM,YAAY,EACZwM,WAAY,CACRC,aACIj0B,gCACIA,gBAAC2V,GACGrV,QAhCV,SAAAsH,GAClB8K,EAAKwhB,SAASttB,EAAQ,CAClBqjB,UAAW,GACXC,KAAK,EACLC,MAAM,KA6BkBrf,SAAUA,EACVqpB,aAAW,UACXte,KAAK,QACL9M,MAAM,WAEN/I,gBAACo0B,SAELp0B,gBAAC2V,GACGrV,QAjCZ,SAAAsH,GAChB8K,EAAKwhB,SAASttB,EAAQ,CAClBqjB,UAAW,GACXC,KAAK,EACLC,MAAM,KA8BkBrf,SAAUA,EACVqpB,aAAW,QACXte,KAAK,QACL9M,MAAM,SAEN/I,gBAACq0B,SAELr0B,gBAAC2V,GACGrV,QAAS,SAAAsH,aAAa,IACtBkD,SAAUA,EACVqpB,aAAW,YACXte,KAAK,QACL9M,MAAM,aAEN/I,gBAACs0B,eAOzBt0B,gBAAC+1B,IACGltB,OAAQ3B,EACR6B,sBAAuB3E,EACvB0kB,gBAAiBgN,EACjB9sB,QAAS7G,gBAAoB0zB,EAAU,CACnCrL,kBAAmBxqB,gBAACg2B,SACpB3L,WAAW,EACXC,UAAU,EACV/nB,SAAUuzB,IAEd7sB,UAlFU,SAACrB,EAAGohB,GACtBre,GAAQ,GACR+H,EAAKwhB,SAASttB,EAAQ,CAClBqjB,UAAWjB,EACXkB,KAAK,EACLC,MAAM,KA8EFvqB,QAAS0W,wBoB1HP,SAAA7W,GACd,MAAiCA,EAAzB41B,KAAgBvuB,IAASrH,QACEssB,GAAmBjlB,GAA9BgK,IAAAA,gBAAhBsU,gBAMR,OACKtU,IACS,MAATukB,GAAyB,MAATA,EACbr1B,gBAACi2B,cAAgBP,GACR,MAATL,EACAr1B,gBAACk2B,YAAcR,GACN,MAATL,EACAr1B,gBAACk2B,iBAAcR,GAAUS,eAEzBn2B,gBAACo2B,YAAgBV,2B1C8SA,CACzB,CAAE3zB,GAAI,IAAK4C,KAAM,YACjB,CAAE5C,GAAI,IAAK4C,KAAM,aACjB,CAAE5C,GAAI,IAAK4C,KAAM,iCAjSK,SAACylB,EAAGxjB,GAE1B,IAAKwjB,EACD,MAAO,GAGX,GAAIA,kBAEA,SAASiM,eACkB,IAApBjM,EAAExb,QAAQ,KAAa,CAC9B,MAAcwb,EAAEniB,MAAM,KAMtB,OALU,SACNquB,SAASC,EAAM,GAAI,IACnBD,SAASC,EAAM,GAAI,IAAM,EACzBD,SAASC,EAAM,GAAI,KAEdF,WAGT,MAAc,0BAA0BG,KAAKpM,GAC7C,GAAc,OAAVmM,EAAJ,CAGA,MAAU,SACND,SAASC,EAAM,GAAI,IACnBD,SAASC,EAAM,GAAI,IAAM,EACzBD,SAASC,EAAM,GAAI,KAEvB,IAAIE,MAAMhxB,GAGV,SAAS4wB,uCAyOgB,CAAEtC,OAAQ,iCArOjB,SAAC3J,EAAGxjB,GAE1B,IAAKwjB,EACD,MAAO,GAGX,MAAcA,EAAEniB,MAAM,OACZ,GACV,OAAQsuB,EAAM,IACV,IAAK,MACDG,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KAId,SAAa,GAAK,IAAMA,EAAM,IAAMH,EAAM,2BAGhB,SAAAnM,GAE1B,IAAKA,EACD,MAAO,GAGX,GAAIA,kBAEA,SAASiM,eACkB,IAApBjM,EAAExb,QAAQ,KAAa,CAC9B,MAAcwb,EAAEniB,MAAM,KAQtB,OAPU,SACNquB,SAASC,EAAM,GAAGI,OAAO,EAAG,GAAI,IAChCL,SAASC,EAAM,GAAI,IAAM,EACzBD,SAASC,EAAM,GAAI,IACnBA,EAAM,GAAGI,OAAO,EAAG,GACnBJ,EAAM,GAAGI,OAAO,EAAG,IAEdN,WAGT,MAAc,2CAA2CG,KAAKpM,GAC9D,GAAc,OAAVmM,EAAJ,CAGA,MAAU,SACND,SAASC,EAAM,GAAI,IACnBD,SAASC,EAAM,GAAI,IAAM,EACzBD,SAASC,EAAM,GAAI,IACnBA,EAAM,GACNA,EAAM,IAEV,IAAIE,MAAMhxB,GAGV,SAAS4wB,oCAIa,SAACjM,EAAGxjB,GAE9B,IAAKwjB,EACD,MAAO,GAGX,MAAcA,EAAEniB,MAAM,OACZ,GACV,OAAQsuB,EAAM,IACV,IAAK,MACDG,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KACN,MACJ,IAAK,MACDA,EAAM,KAId,SAAa,GAAK,IAAMA,EAAM,IAAMH,EAAM,GAAK,IAAMA,EAAM,GAAGI,OAAO,EAAG,4DAwH/C,SAACC,EAAMC,GAChC,MAAiBC,SAASC,cAAc,KACxCC,EAASxtB,MAAMxG,QAAU,OACzB8zB,SAASG,KAAKC,YAAYF,GAC1BA,EAASG,aAAa,OAAQP,GAC9BI,EAASG,aAAa,WAAYN,GAClCG,EAASI,8EAhCmB,SAAAC,mBAAsB5qB,EAAO6qB,GACzD,MAAeA,EAAUD,GAEzB,GAAI5qB,GAAS8qB,EAAQ,CACjB,MAAgB,SAASA,KACT,SAAS9qB,GAEzB,GAAI+qB,UAAQC,EAASC,GACjB,MAAO,CACH7vB,QAAS,8BACT8vB,KAAM,CAAEC,MAAOL,uHAQF,SAACM,mBAAAA,IAAAA,EAAM,MAAU,CAC1CC,OAAgB,OAARD,EAAeE,EAAWC,wJA9GZ,SAAA5N,GAEtB,IAAKA,EACD,MAAO,GAGX,GAAIA,kBAEA,SAASiM,eACkB,IAApBjM,EAAExb,QAAQ,KAAa,CAC9B,MAAcwb,EAAEniB,MAAM,OACZ,SAGV,OAFAgwB,EAAIC,SAAS3B,EAAM,IACnB0B,EAAIE,WAAW5B,EAAM,MACVF,WAGX,MAAc,kBAAkBG,KAAKpM,GACrC,GAAc,OAAVmM,EAAJ,CAGA,MAAU,SAGV,OAFA0B,EAAIC,SAAS3B,EAAM,IACnB0B,EAAIE,WAAW5B,EAAM,MACVF,gCAIO,SAACjM,EAAGxjB,GAE1B,OAAKwjB,IAIIniB,MAAM,KAAK,GAAGmwB,UAAU,EAAG,GAHzB,6O2C/OW,SAACxxB,EAAQ7E,GAC/B,MAAiB0S,yBAEkB4jB,YAC/B,MAAQC,GAAuB/1B,GAAY,IAAMqE,EACjD,CAAE7E,GAAAA,IAFEyN,IAAAA,KAKR,SALczJ,aAAWzB,MAMd,IAGJkL,MAAAA,SAAAA,EAAMU,WAAY"}
|