biblio-react 2.0.0-beta20 → 2.0.0-beta21

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/layout/AppBar.js","../src/layout/AsistenteContext.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/FichaContext.js","../src/layout/contenidos/useFieldController.js","../src/layout/contenidos/TextField.js","../src/layout/contenidos/EtrGrid/actions.js","../src/layout/contenidos/EtrGrid/NoRowsOverlay.js","../src/layout/contenidos/EtrGrid/EtrGrid.js","../src/layout/contenidos/GE.js","../src/utils/useInitGrilla.js","../src/layout/Asistente.js","../src/layout/GridButton.js","../src/layout/CreateGridButton.js","../src/layout/EditGridButton.js","../src/layout/ShowGridButton.js","../src/layout/GrillaEtriek.js","../src/layout/TabbedGrillaEtriek.js","../src/utils/useInitFicha.js","../src/utils/useNuevo.js","../src/layout/contenidos/useContenidoController.js","../src/utils/utils.js","../src/utils/useReferenceLabel.js","../src/layout/dialogs/FormDialogTitle.js","../src/layout/dialogs/FormDialogContext.js","../src/layout/dialogs/useFormDialogContext.js","../src/layout/dialogs/CreateDialog.js","../src/layout/dialogs/FormDialogButton.js","../src/layout/dialogs/CreateInDialogButton.js","../src/layout/utilsForm.js","../src/layout/CreateEtriek.js","../src/layout/dialogs/ListDialog.js","../src/layout/dialogs/ListInDialogButton.js","../src/layout/ListEtriek.js","../node_modules/clsx/dist/clsx.mjs","../src/layout/DeleteButtonNoWarning.js","../src/layout/EditEtriek.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/Layout.js","../src/layout/ListActionEtriek.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/MultiTextField.js","../src/layout/ShowEtriek.js","../src/layout/TabbedForm.js","../src/layout/TabbedFormEtriek.js","../src/layout/themes.js","../src/layout/FormToolbar.js","../src/utils/i18n/en.js","../src/utils/i18n/es.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/FotoButton.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/contenidos/ImageField.js","../src/layout/contenidos/ListCheck.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.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/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/TextCombo.js"],"sourcesContent":["import LockIcon from '@mui/icons-material/Lock';\r\nimport VpnLockIcon from '@mui/icons-material/VpnLock';\r\nimport {\r\n Box,\r\n ListItemIcon,\r\n ListItemText,\r\n MenuItem,\r\n Typography,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport * as React from 'react';\r\nimport { forwardRef } from 'react';\r\nimport {\r\n AppBar,\r\n Logout,\r\n useResourceDefinitions,\r\n UserMenu,\r\n useTranslate,\r\n useUserMenu,\r\n} from 'react-admin';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst ConfigurationMenu = forwardRef((props, ref) => {\r\n const translate = useTranslate();\r\n const { onClose } = useUserMenu();\r\n const resourcesDefinitions = useResourceDefinitions();\r\n const existeCP = resourcesDefinitions['form_275'];\r\n const existePassword = resourcesDefinitions['form_59'];\r\n\r\n return [\r\n existeCP ? (\r\n <MenuItem\r\n component={Link}\r\n ref={ref}\r\n {...props}\r\n key=\"/form_275\"\r\n to=\"/form_275\"\r\n onClick={onClose}\r\n >\r\n <ListItemIcon>\r\n <LockIcon />\r\n </ListItemIcon>\r\n <ListItemText>{translate('pos.change_pin')}</ListItemText>\r\n </MenuItem>\r\n ) : null,\r\n existePassword ? (\r\n <MenuItem\r\n component={Link}\r\n ref={ref}\r\n {...props}\r\n key=\"/form_59\"\r\n to=\"/form_59\"\r\n onClick={onClose}\r\n >\r\n <ListItemIcon>\r\n <VpnLockIcon />\r\n </ListItemIcon>\r\n <ListItemText>{translate('pos.change_password')}</ListItemText>\r\n </MenuItem>\r\n ) : null,\r\n ];\r\n});\r\n\r\nconst CustomUserMenu = () => (\r\n <UserMenu>\r\n <ConfigurationMenu />\r\n <Logout />\r\n </UserMenu>\r\n);\r\n\r\nconst CustomAppBar = props => {\r\n const isLargeEnough = useMediaQuery(theme => theme.breakpoints.up('sm'));\r\n return (\r\n <AppBar {...props} color=\"secondary\" userMenu={<CustomUserMenu />}>\r\n <Typography\r\n variant=\"h6\"\r\n color=\"inherit\"\r\n sx={{\r\n flex: 1,\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n }}\r\n id=\"react-admin-title\"\r\n />\r\n {isLargeEnough && <Box component=\"span\" sx={{ flex: 1 }} />}\r\n </AppBar>\r\n );\r\n};\r\n\r\nexport default CustomAppBar;\r\n","import * as React from 'react';\nimport { createContext, useContext, useMemo, useState } from 'react';\n\nexport const AsistenteContext = createContext();\n\nexport const AsistenteProvider = ({ children }) => {\n const [open, setOpen] = useState(false);\n const [props, setProps] = useState({});\n\n const context = useMemo(\n () => ({\n open,\n props,\n show: props => {\n setProps(props);\n setOpen(true);\n },\n hide: () => setOpen(false),\n }),\n [open, props]\n );\n\n return (\n <AsistenteContext.Provider value={context}>\n {children}\n </AsistenteContext.Provider>\n );\n};\n\nexport const useAsistente = () => useContext(AsistenteContext);\n\nexport default useAsistente;\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`\nexport const recargarComboBox = (id, method, params, callback) => ({\n type: 'RELOAD_CB',\n payload: {\n id,\n method,\n params,\n callback,\n },\n});\n\n// ACTION `RELOAD_CB_SUCCESS`\nexport const deleteRecargarComboBox = (id, callback) => ({\n type: 'RELOAD_CB_SUCCESS',\n payload: { id, callback },\n});\n\nexport const setHiddenAction = (id, hidden) => ({\n type: 'HIDE_INPUT',\n payload: {\n id,\n hidden,\n },\n});\n\nexport const setDisableAction = (id, disabled) => ({\n type: 'DISABLE_INPUT',\n payload: {\n id,\n disabled,\n },\n});\n\nexport const setRequireAction = (id, required) => ({\n type: 'REQUIRE_INPUT',\n payload: {\n id,\n required,\n },\n});\n\nexport const setErrorAction = (id, error) => ({\n type: 'ERROR_INPUT',\n payload: {\n id,\n error,\n },\n});\n\nexport const setLabelAction = (id, label) => ({\n type: 'LABEL_INPUT',\n payload: {\n id,\n label,\n },\n});\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport {\n recargarComboBox,\n setDisableAction,\n setHiddenAction,\n setRequireAction,\n setErrorAction,\n setLabelAction,\n} from './actions';\n\nexport const useRecargarComboBox = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, method, params, callback) => {\n dispatch(recargarComboBox(id, method, params, callback));\n },\n [dispatch]\n );\n};\n\nexport const useSetHidden = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, hidden) => {\n dispatch(setHiddenAction(id, hidden));\n },\n [dispatch]\n );\n};\n\nexport const useSetDisable = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, disable) => {\n dispatch(setDisableAction(id, disable));\n },\n [dispatch]\n );\n};\n\nexport const useSetRequire = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, required) => {\n dispatch(setRequireAction(id, required));\n },\n [dispatch]\n );\n};\n\nexport const useSetError = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, error) => {\n dispatch(setErrorAction(id, error));\n },\n [dispatch]\n );\n};\n\nexport const useSetLabel = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, label) => {\n dispatch(setLabelAction(id, label));\n },\n [dispatch]\n );\n};\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 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, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutateAsync, isLoading } = useMutation(params => {\r\n const { method, params: paramsDp } = params;\r\n return dataProvider.getJson(resource, { method, params: paramsDp });\r\n }, options);\r\n\r\n return { mutateAsync, 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 { mutateAsync, isLoading } = useGetJson(resource);\r\n\r\n const ajax = useCallback(\r\n (method, params, callback) =>\r\n mutateAsync(\r\n { method, params },\r\n { onSuccess: callback, onError: callback }\r\n ),\r\n []\r\n );\r\n\r\n return [ajax, isLoading];\r\n};\r\n\r\nexport default useAjax;\r\n","import { useCallback } from 'react';\r\nimport {\r\n useListContext,\r\n useNotify,\r\n useRedirect,\r\n useRefresh,\r\n useResourceContext,\r\n useTranslate,\r\n useUnselectAll,\r\n} from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport useAsistente from '../layout/AsistenteContext';\r\nimport useFormProgress from '../layout/ProgressContext';\r\nimport {\r\n useRecargarComboBox,\r\n useSetDisable,\r\n useSetError,\r\n useSetHidden,\r\n useSetLabel,\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 resource = useResourceContext(props);\r\n const unselectAll = useUnselectAll(resource);\r\n const asistente = useAsistente();\r\n const translate = useTranslate();\r\n const [ajax] = useAjax(resource);\r\n\r\n return {\r\n ajax,\r\n data,\r\n notify,\r\n redirect,\r\n refresh,\r\n refetch: data.refetch,\r\n unselectAll,\r\n asistente,\r\n translate,\r\n };\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 setError = useSetError();\r\n const setLabel = useSetLabel();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const resource = useResourceContext(props);\r\n const asistente = useAsistente();\r\n const [ajax] = useAjax(resource);\r\n const etrs = props.etrs || {};\r\n\r\n return {\r\n ajax,\r\n notify,\r\n redirect,\r\n recargarComboBox,\r\n progress,\r\n asistente,\r\n setHidden,\r\n setDisable,\r\n setRequire,\r\n setError,\r\n setLabel,\r\n etrs,\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 setError = useSetError();\r\n const setLabel = useSetLabel();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const form = useFormContext();\r\n const resource = useResourceContext(props);\r\n const asistente = useAsistente();\r\n const [ajax] = useAjax(resource);\r\n const etrs = props.etrs || {};\r\n const asisEtr = props.asisEtr || {};\r\n const trigger = form?.trigger;\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 asistente,\r\n setHidden: useCallback(\r\n (source, hidden) => {\r\n setHidden(source, hidden);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setHidden, trigger]\r\n ),\r\n setDisable: useCallback(\r\n (source, disabled) => {\r\n setDisable(source, disabled);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setDisable, trigger]\r\n ),\r\n setRequire: useCallback(\r\n (source, required) => {\r\n setRequire(source, required);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setRequire, trigger]\r\n ),\r\n setError: useCallback(\r\n (source, error) => {\r\n setError(source, error);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setError, trigger]\r\n ),\r\n setLabel: useCallback(\r\n (source, label) => {\r\n setLabel(source, label);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setLabel, trigger]\r\n ),\r\n etrs,\r\n asisEtr,\r\n };\r\n};\r\n\r\nexport default useUtilsFicha;\r\n","import { createContext } from 'react';\r\n\r\nexport const FichaContext = createContext({});\r\nexport const FormEtrGridContext = createContext(undefined);\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 * 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 * as React from 'react';\nimport { useCallback } from 'react';\nimport { ReferenceField } from 'react-admin';\nimport TextField from '../TextField';\n\nexport const renderCellComboBox = (etrSource, source, reference) => params => {\n return (\n <ReferenceField\n reference={reference}\n source={source}\n queryOptions={{ meta: { etr: etrSource } }}\n record={{ [source]: params.row[source] }}\n >\n <TextField source=\"etiqueta\" />\n </ReferenceField>\n );\n};\n\nconst getSubmitValues = values => {\n const restValues = { ...values };\n delete restValues.id;\n\n return restValues;\n};\n\nexport const useAddRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'N';\n\n return useCallback(\n (values, form) => {\n const finalValues = getSubmitValues(values);\n const id = apiRef.current.getRowsCount() + 1;\n\n apiRef.current.updateRows([{ ...finalValues, id }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n claveFila: '',\n estado,\n })) || []\n : form.getValues()[source] || [];\n\n if (!enviarTodo) {\n inputValues.push({\n ...finalValues,\n claveFila: '',\n _id: id,\n estado,\n });\n }\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nexport const useEditRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'M';\n\n return useCallback(\n (id, values, form) => {\n const _estado = typeof id === 'number' ? 'N' : estado;\n const finalValues = getSubmitValues(values);\n\n apiRef.current.updateRows([{ ...finalValues, id }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n estado: _estado,\n })) || []\n : form.getValues()[source] || [];\n\n let currentIndex = inputValues.findIndex(item =>\n typeof id === 'number'\n ? item?._id === id\n : item?.claveFila === id\n );\n\n const indiceVisual =\n apiRef.current.getRowIndexRelativeToVisibleRows(id);\n\n // Si todavía no hay registros en el input oculto, comienzo en cero\n currentIndex =\n currentIndex !== -1\n ? currentIndex\n : indiceVisual !== undefined\n ? indiceVisual\n : 0;\n\n inputValues[currentIndex] = {\n ...finalValues,\n claveFila: inputValues[currentIndex]?.estado === 'N' ? '' : id,\n _id: id,\n estado:\n inputValues[currentIndex]?.estado === 'N' ? 'N' : estado,\n };\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nexport const useDeleteRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'B';\n\n return useCallback(\n (id, form) => {\n const fila = apiRef.current.getRowModels().get(id);\n\n // Borro la fila del componente DataGrid\n apiRef.current.updateRows([{ id, _action: 'delete' }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n estado,\n })) || []\n : form.getValues()[source] || [];\n\n if (typeof id === 'number') {\n // Estoy borrando una fila nueva que no viene de la base de datos\n const currentIndex = inputValues.findIndex(\n item => item._id === id\n );\n inputValues.splice(currentIndex, 1);\n } else {\n let currentIndex = inputValues.findIndex(\n item => item.claveFila === id\n );\n\n const indiceVisual =\n apiRef.current.getRowIndexRelativeToVisibleRows(id);\n\n currentIndex =\n currentIndex !== -1\n ? currentIndex\n : indiceVisual !== undefined\n ? indiceVisual\n : inputValues.length;\n\n inputValues[currentIndex] = { ...fila, estado, claveFila: id };\n }\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nconst useEtrActions = props => {\n const { [props.source]: propsEtr } = props.useFormulario();\n\n const finalProps = { ...props, enviarTodo: !!propsEtr?.enviarTodo };\n const addRow = useAddRow(finalProps);\n const editRow = useEditRow(finalProps);\n const deleteRow = useDeleteRow(finalProps);\n const clear = form => {\n props.apiRef.current.setRows([]);\n form.setValue(props.source, '');\n };\n\n return {\n addRow,\n editRow,\n deleteRow,\n clear,\n api: props.apiRef,\n };\n};\n\nexport default useEtrActions;\n","import { Box } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\nimport * as React from 'react';\r\n\r\nconst StyledGridOverlay = styled('div')(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\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' ? '#fff' : '#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' : '#fff',\r\n },\r\n}));\r\n\r\nexport const CustomNoRowsOverlay = () => {\r\n return (\r\n <StyledGridOverlay>\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 <Box sx={{ mt: 1 }}>No hay registros</Box>\r\n </StyledGridOverlay>\r\n );\r\n};\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, Stack, 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 { styled, ThemeProvider } from '@mui/material/styles';\nimport {\n DataGridPremium,\n esES,\n useGridApiContext,\n} from '@mui/x-data-grid-premium';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n Fragment,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n Confirm,\n Form,\n SaveButton,\n useGetList,\n useInput,\n useRecordContext,\n useResourceContext,\n useSafeSetState,\n useTranslate,\n} from 'react-admin';\nimport { useFormContext, useFormState } from 'react-hook-form';\nimport useUtilsFicha, { useDefaultHook } from '../../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../../FichaContext';\nimport { useAddRow, useDeleteRow, useEditRow } from './actions';\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\n\nconst StyledButton = styled(Button, {\n name: 'EtrDeleteButton',\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => ({\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n}));\n\nconst dummyRecord = {};\n\nconst EtrChildrenWrapper = props => {\n const form = useFormContext();\n\n return (\n <FormEtrGridContext.Provider value={{ form }}>\n {props.children}\n </FormEtrGridContext.Provider>\n );\n};\n\nconst EtrFormDialog = props => (\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\n <DialogContentText component=\"span\">\n <Form\n mode=\"onBlur\"\n record={dummyRecord}\n resource={props.resource}\n onSubmit={props.onSubmit}\n >\n <EtrChildrenWrapper>{props.children}</EtrChildrenWrapper>\n </Form>\n </DialogContentText>\n </Dialog>\n);\n\nEtrFormDialog.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 resource: PropTypes.any,\n save: PropTypes.func,\n render: PropTypes.func,\n};\n\nconst EtrDialogChild = props => {\n const {\n form: formPadre,\n resource,\n estado,\n editors,\n recordPadre,\n camposClaveFila,\n setOpen,\n open,\n } = props;\n const { dirtyFields, isValid } = useFormState();\n const {\n fichaProps: { [props.source]: etrActualProps = {}, etrs },\n } = useContext(FichaContext);\n\n const formAsistente = useContext(FormEtrGridContext);\n const { onAfterRenderAsistente, ...restEtrActualProps } = etrActualProps;\n const utils = useUtilsFicha({ resource, etrs, asisEtr: formAsistente });\n\n useEffect(() => {\n if (open) {\n typeof onAfterRenderAsistente === 'function' &&\n onAfterRenderAsistente({ ...utils, form: formPadre }, estado);\n }\n }, [open]);\n\n return (\n <>\n <DialogContent>\n <Stack spacing={4}>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n defaultValue: recordPadre[child.props.source] || '',\n fullWidth: true,\n sx: { margin: 0 },\n disabled:\n estado !== 'N' &&\n (camposClaveFila.indexOf(child.props.source) !==\n -1 ||\n child.props.disabled),\n ...restEtrActualProps[child.props.source],\n /*InputLabelProps: { shrink: true },*/\n })\n )}\n </Stack>\n </DialogContent>\n <DialogActions>\n <SaveButton\n disabled={Object.keys(dirtyFields).length === 0 || !isValid}\n />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n >\n <IconCancel />\n </Button>\n </DialogActions>\n </>\n );\n};\n\nconst EtrCreateButton = props => {\n const {\n editors,\n record: recordPadre,\n camposClaveFila,\n label,\n source,\n enviarTodo,\n } = props;\n const [open, setOpen] = useSafeSetState(false);\n const resource = useResourceContext(props);\n const form = useFormContext();\n const apiRef = useGridApiContext();\n const addRow = useAddRow({ apiRef, source, enviarTodo });\n const estado = 'N';\n\n const translate = useTranslate();\n const labelEstado = translate('ra.action.create');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = (values, e) => {\n addRow(values, form);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <AddIcon />\n </Button>\n <EtrFormDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n source={source}\n form={form}\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={recordPadre || {}}\n camposClaveFila={camposClaveFila}\n //isLoading={isLoading}\n open={open}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrFormDialog>\n </>\n );\n};\n\nconst EtrEditButton = props => {\n const {\n editors,\n camposClaveFila,\n resource,\n label,\n source,\n row,\n enviarTodo,\n } = props;\n const translate = useTranslate();\n const [open, setOpen] = useSafeSetState(false);\n const apiRef = useGridApiContext();\n const form = useFormContext();\n const editRow = useEditRow({ apiRef, source, enviarTodo });\n const estado = 'M';\n\n const labelEstado = translate('ra.action.edit');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = (values, e) => {\n editRow(row.id, values, form);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <EditIcon />\n </Button>\n <EtrFormDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n source={source}\n form={form}\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={row}\n camposClaveFila={camposClaveFila}\n //isLoading={isLoading}\n open={open}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrFormDialog>\n </>\n );\n};\n\nconst EtrDeleteButton = props => {\n const {\n confirmTitle = 'ra.message.delete_title', //'ra.action.delete'\n confirmContent = 'ra.message.delete_content',\n row,\n source,\n enviarTodo,\n } = props;\n\n const [open, setOpen] = useSafeSetState(false);\n const apiRef = useGridApiContext();\n const form = useFormContext();\n const deleteRow = useDeleteRow({ apiRef, source, enviarTodo });\n\n const handleDelete = e => {\n deleteRow(row.id, form);\n };\n\n return (\n <Fragment>\n <StyledButton\n key=\"button\"\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <ActionDelete />\n </StyledButton>\n <Confirm\n isOpen={open}\n //loading={isLoading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n />\n </Fragment>\n );\n};\n\nconst theme = createTheme({}, 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 enableLoad = true,\n disabled: disabledProp,\n apiRef,\n ...rest\n } = props;\n const [rows, setRows] = useState([]);\n const recordPadre = useRecordContext(props);\n const form = useFormContext();\n const { field } = useInput({ defaultValue: '', ...props });\n const {\n isLoading: isLoadingParent,\n fichaProps: { [rest.source]: etrProps },\n } = useContext(FichaContext);\n\n const {\n enviarTodo = false,\n disabled: disabledContext,\n useContenido = useDefaultHook,\n } = etrProps || {};\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n const disabled = disabledProp || disabledContext;\n\n let filter = {};\n if (recordPadre) {\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\n useEffect(() => {\n if (!enableLoad) {\n setTimeout(() => {\n form.setValue(rest.source, '');\n }, 1000);\n }\n }, [enableLoad]);\n\n const { isLoading, refetch } = useGetList(\n reference,\n {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n },\n {\n enabled: enableLoad && !isLoadingParent,\n onSuccess: value => {\n setTimeout(() => {\n form.setValue(rest.source, '');\n }, 1000);\n setRows(value?.data || []);\n },\n }\n );\n\n useContenido({\n ...props,\n refetch,\n });\n\n const columns = defColumns;\n\n if (!disabled) {\n columns.push({\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => {\n if (params.rowNode.type === 'group') {\n return undefined;\n }\n return (\n <EtrEditButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n row={params.row}\n />\n );\n },\n });\n\n if (allowAdd) {\n columns.unshift({\n field: 'BTN',\n headerName: '',\n sortable: false,\n width: 80,\n renderHeader: params => (\n <EtrCreateButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n />\n ),\n });\n }\n\n if (allowRemove) {\n columns.push({\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => {\n if (params.rowNode.type === 'group') {\n return undefined;\n }\n return (\n <EtrDeleteButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n row={params.row}\n />\n );\n },\n });\n }\n }\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n return (\n <Paper\n sx={{\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: 1,\n }}\n >\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <Fragment>\n <DataGridPremium\n apiRef={apiRef}\n //autoHeight\n //rowHeight={25}\n loading={isLoading || isLoadingParent}\n sx={{\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor: theme =>\n theme.palette.mode === 'light'\n ? '#fafafa'\n : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n }}\n disableRowSelectionOnClick\n paginationModel={{ page: 1, pageSize: 50 }}\n hideFooter\n rows={rows}\n columns={finalColumns}\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n sortable={false}\n resizable={false}\n disableReorder\n disableExport\n filterable={false}\n disableColumnMenu\n //checkboxSelection\n slots={{\n //header: <div>This is my custom Toolbar!</div>,\n noRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n <input type=\"hidden\" {...field} />\n </Fragment>\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, StyledEngineProvider } from '@mui/material';\nimport Paper from '@mui/material/Paper';\nimport { ThemeProvider } from '@mui/material/styles';\nimport {\n DataGridPremium,\n esES,\n useGridApiRef,\n useKeepGroupedColumnsHidden,\n} from '@mui/x-data-grid-premium';\nimport * as React from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport { useGetList, useRecordContext } from 'react-admin';\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\nimport { FichaContext } from '../FichaContext';\nimport { CustomNoRowsOverlay } from './EtrGrid/NoRowsOverlay';\n\nconst theme = createTheme({}, esES);\n\nconst GE = props => {\n const {\n filterBy = '',\n sortModel,\n columns: defColumns,\n reference,\n enableLoad = true,\n initialState: initialStateProps,\n ...rest\n } = props;\n\n const { isLoading: isLoadingParent } = useContext(FichaContext);\n const recordPadre = useRecordContext();\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 let filter = {};\n if (recordPadre) {\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\n const {\n estado,\n isLoading: isLoadingFicha,\n fichaProps = {},\n } = useContext(FichaContext);\n const utils = useUtilsFicha(props);\n const { [props.source]: initialProps = {} } = fichaProps;\n const { useContenido = useDefaultHook, ...restInitialProps } = initialProps;\n\n const {\n data = [],\n isLoading,\n refetch,\n } = useGetList(\n reference,\n {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n },\n { enabled: enableLoad && !isLoadingParent }\n );\n\n const apiRef = useGridApiRef();\n const initialState = useKeepGroupedColumnsHidden({\n apiRef,\n initialState: initialStateProps,\n });\n\n useContenido({\n ...rest,\n estado,\n hidden: props.hidden,\n isLoading: isLoadingFicha,\n utils,\n ...restInitialProps,\n refetch,\n apiRef,\n });\n\n const rows = data;\n\n return (\n <Paper\n sx={{\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: 1,\n }}\n >\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGridPremium\n //autoHeight\n //rowHeight={25}\n apiRef={apiRef}\n rows={rows}\n columns={columns}\n loading={isLoading || isLoadingParent}\n sx={{\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor: theme =>\n theme.palette.mode === 'light'\n ? '#fafafa'\n : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n }}\n disableRowSelectionOnClick\n paginationModel={{ page: 1, pageSize: 50 }}\n hideFooter\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n slots={{\n //header: <div>This is my custom Toolbar!</div>,\n noRowsOverlay: CustomNoRowsOverlay,\n }}\n initialState={initialState}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default GE;\n","import { useEffect } from 'react';\nimport { useListContext } from 'react-admin';\nimport { useUtilsGrilla } from './useUtils';\n\nconst useInitGrilla = props => {\n const { onRenderGrilla, onLoadGrilla, apiRef = {} } = props;\n const { isLoading } = useListContext();\n const utils = useUtilsGrilla(props);\n\n useEffect(() => {\n onRenderGrilla && onRenderGrilla({ ...utils, api: apiRef?.current });\n }, []);\n\n useEffect(() => {\n if (!isLoading) {\n onLoadGrilla && onLoadGrilla({ ...utils, api: apiRef?.current });\n }\n }, [isLoading]);\n};\n\nexport default useInitGrilla;\n","import CancelIcon from '@mui/icons-material/Cancel';\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Stack,\n} from '@mui/material';\nimport AppBar from '@mui/material/AppBar';\nimport Slide from '@mui/material/Slide';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport * as React from 'react';\nimport { Fragment } from 'react';\nimport {\n Button,\n Confirm,\n Form,\n SaveButton,\n useResourceContext,\n} from 'react-admin';\nimport useAsistente from './AsistenteContext';\n\nconst Transition = React.forwardRef(function Transition(props, ref) {\n return <Slide direction=\"up\" ref={ref} {...props} />;\n});\n\nconst Asistente = props => {\n const { isLoading } = props;\n const resource = useResourceContext(props);\n const asistente = useAsistente();\n const {\n open,\n hide,\n props: {\n title,\n controles,\n aceptar,\n cancelar = () => hide(),\n tipo = 'form',\n botonesExtra = [],\n showAceptar = true,\n showCancelar = true,\n formDividers = true,\n dialogProps = {},\n },\n } = asistente;\n\n const getDialogVista = () => (\n <Fragment>\n <AppBar sx={{ position: 'relative' }}>\n <Toolbar disableGutters variant={'dense'}>\n <Typography\n sx={{ ml: 2, flex: 1 }}\n variant=\"h6\"\n component=\"div\"\n >\n {title}\n </Typography>\n {botonesExtra.map(({ label = '', icon, handler }, i) => (\n <Button\n key={`extra_${i}`}\n label={label}\n disabled={isLoading}\n onClick={handler}\n >\n {icon}\n </Button>\n ))}\n <Button\n label=\"ra.action.cancel\"\n disabled={isLoading}\n onClick={cancelar}\n color=\"inherit\"\n >\n <CancelIcon />\n </Button>\n </Toolbar>\n </AppBar>\n {controles}\n </Fragment>\n );\n\n const getDialogForm = () => (\n <Fragment>\n <DialogTitle id=\"draggable-dialog-title\">{title}</DialogTitle>\n <Form resource={resource} onSubmit={aceptar}>\n <DialogContent dividers={formDividers}>\n <Stack spacing={2}>{controles}</Stack>\n </DialogContent>\n <DialogActions>\n {botonesExtra.map(({ label = '', icon, handler }, i) => (\n <Button\n key={`extra_${i}`}\n label={label}\n disabled={isLoading}\n onClick={handler}\n >\n {icon}\n </Button>\n ))}\n {showCancelar && (\n <Button\n label=\"ra.action.cancel\"\n disabled={isLoading}\n onClick={cancelar}\n >\n <CancelIcon />\n </Button>\n )}\n {showAceptar && <SaveButton disabled={isLoading} />}\n </DialogActions>\n </Form>\n </Fragment>\n );\n\n const getConfirm = () => (\n <Confirm\n isOpen={open}\n title={title || 'Atención'}\n content={controles}\n onConfirm={aceptar}\n onClose={cancelar}\n />\n );\n\n return tipo === 'confirm' ? (\n getConfirm()\n ) : (\n <Dialog\n open={open}\n onClose={() => hide()}\n fullWidth\n fullScreen={tipo === 'vista'}\n maxWidth={tipo === 'vista' ? 'lg' : 'sm'}\n TransitionComponent={Transition}\n {...dialogProps}\n >\n {tipo === 'form' ? getDialogForm() : getDialogVista()}\n </Dialog>\n );\n};\n\nexport default Asistente;\n","import { IconButton, Tooltip } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useTranslate } from 'react-admin';\n\nconst GridButton = props => {\n const {\n alignIcon = 'left',\n children,\n className,\n disabled,\n label,\n color = 'primary',\n size = 'small',\n to: locationDescriptor,\n ...rest\n } = props;\n const translate = useTranslate();\n const translatedLabel = label ? translate(label, { _: label }) : undefined;\n const linkParams = getLinkParams(locationDescriptor);\n\n return label && !disabled ? (\n <Tooltip title={translatedLabel}>\n <IconButton\n aria-label={translatedLabel}\n className={className}\n color={color}\n size=\"medium\"\n {...rest}\n {...linkParams}\n >\n {children}\n </IconButton>\n </Tooltip>\n ) : (\n <IconButton\n className={className}\n color={color}\n disabled={disabled}\n size=\"medium\"\n {...rest}\n {...linkParams}\n >\n {children}\n </IconButton>\n );\n};\n\nGridButton.propTypes = {\n alignIcon: PropTypes.oneOf(['left', 'right']),\n children: PropTypes.element,\n className: PropTypes.string,\n color: PropTypes.oneOfType([\n PropTypes.oneOf([\n 'inherit',\n 'default',\n 'primary',\n 'secondary',\n 'error',\n 'info',\n 'success',\n 'warning',\n ]),\n PropTypes.string,\n ]),\n disabled: PropTypes.bool,\n label: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n};\n\nconst getLinkParams = locationDescriptor => {\n // eslint-disable-next-line eqeqeq\n if (locationDescriptor == undefined) {\n return undefined;\n }\n\n if (typeof locationDescriptor === 'string') {\n return { to: locationDescriptor };\n }\n\n const { redirect, replace, state, ...to } = locationDescriptor;\n return {\n to,\n redirect,\n replace,\n state,\n };\n};\n\nexport default GridButton;\n","import AddIcon from '@mui/icons-material/Add';\r\nimport {\r\n useCreatePath,\r\n useRecordContext,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport GridButton from './GridButton';\r\n\r\nconst stopPropagation = e => e.stopPropagation();\r\n\r\n// avoids using useMemo to get a constant value for the link state\r\nconst scrollStates = {\r\n true: { _scrollToTop: true },\r\n false: {},\r\n};\r\n\r\nconst defaultIcon = <AddIcon />;\r\n\r\nconst CreateGridButton = props => {\r\n const {\r\n icon = defaultIcon,\r\n label = 'ra.action.create',\r\n scrollToTop = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n const record = useRecordContext(props);\r\n const createPath = useCreatePath();\r\n\r\n return (\r\n <GridButton\r\n component={Link}\r\n to={createPath({ type: 'create', resource })}\r\n state={{\r\n record,\r\n ...scrollStates[String(scrollToTop)],\r\n }}\r\n label={label}\r\n onClick={stopPropagation}\r\n {...rest}\r\n >\r\n {icon}\r\n </GridButton>\r\n );\r\n};\r\nexport default CreateGridButton;\r\n","import ContentCreate from '@mui/icons-material/Create';\nimport * as React from 'react';\nimport {\n useCreatePath,\n useRecordContext,\n useResourceContext,\n} from 'react-admin';\nimport { Link } from 'react-router-dom';\nimport GridButton from './GridButton';\n\nconst stopPropagation = e => e.stopPropagation();\n\n// avoids using useMemo to get a constant value for the link state\nconst scrollStates = {\n true: { _scrollToTop: true },\n false: {},\n};\n\nconst defaultIcon = <ContentCreate />;\n\nconst EditGridButton = props => {\n const {\n icon = defaultIcon,\n label = 'ra.action.edit',\n scrollToTop = true,\n ...rest\n } = props;\n const resource = useResourceContext(props);\n const record = useRecordContext(props);\n const createPath = useCreatePath();\n if (!record) {\n return null;\n }\n\n return (\n <GridButton\n component={Link}\n to={createPath({ type: 'edit', resource, id: record.id })}\n state={scrollStates[String(scrollToTop)]}\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </GridButton>\n );\n};\nexport default EditGridButton;\n","import ImageEye from '@mui/icons-material/RemoveRedEye';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n useCreatePath,\r\n useRecordContext,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport * as React from 'react';\r\nimport { memo } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport GridButton from './GridButton';\r\n\r\nconst ShowGridButton = props => {\r\n const {\r\n icon = defaultIcon,\r\n label = 'ra.action.show',\r\n record: recordProp,\r\n resource: resourceProp,\r\n scrollToTop = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n const record = useRecordContext(props);\r\n const createPath = useCreatePath();\r\n if (!record) return null;\r\n return (\r\n <GridButton\r\n component={Link}\r\n to={createPath({ type: 'show', resource, id: record.id })}\r\n state={scrollStates[String(scrollToTop)]}\r\n label={label}\r\n onClick={stopPropagation}\r\n {...rest}\r\n >\r\n {icon}\r\n </GridButton>\r\n );\r\n};\r\n\r\n// avoids using useMemo to get a constant value for the link state\r\nconst scrollStates = {\r\n true: { _scrollToTop: true },\r\n false: {},\r\n};\r\n\r\nconst defaultIcon = <ImageEye />;\r\n\r\n// useful to prevent click bubbling in a datagrid with rowClick\r\nconst stopPropagation = e => e.stopPropagation();\r\n\r\nShowGridButton.propTypes = {\r\n icon: PropTypes.element,\r\n label: PropTypes.string,\r\n record: PropTypes.any,\r\n scrollToTop: PropTypes.bool,\r\n};\r\n\r\nconst PureShowGridButton = memo(\r\n ShowGridButton,\r\n (props, nextProps) =>\r\n props.resource === nextProps.resource &&\r\n (props.record && nextProps.record\r\n ? props.record.id === nextProps.record.id\r\n : props.record == nextProps.record) && // eslint-disable-line eqeqeq\r\n props.label === nextProps.label &&\r\n props.disabled === nextProps.disabled\r\n);\r\n\r\nexport default PureShowGridButton;\r\n","import SettingsIcon from '@mui/icons-material/Settings';\r\nimport {\r\n Box,\r\n createTheme,\r\n Paper,\r\n ThemeProvider,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport { GridActionsCellItem } from '@mui/x-data-grid';\r\nimport {\r\n DataGridPremium,\r\n esES,\r\n useGridApiRef,\r\n useKeepGroupedColumnsHidden,\r\n} from '@mui/x-data-grid-premium';\r\nimport * as React from 'react';\r\nimport { Fragment, isValidElement } from 'react';\r\nimport {\r\n BulkActionsToolbar,\r\n Button,\r\n DatagridClasses,\r\n DatagridRoot,\r\n SimpleList,\r\n useListContext,\r\n useResourceContext,\r\n useResourceDefinition,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport useInitGrilla from '../utils/useInitGrilla';\r\nimport { useUtilsGrilla } from '../utils/useUtils';\r\nimport Asistente from './Asistente';\r\nimport { CustomNoRowsOverlay } from './contenidos/EtrGrid/NoRowsOverlay';\r\nimport CreateGridButton from './CreateGridButton';\r\nimport EditGridButton from './EditGridButton';\r\nimport ShowGridButton from './ShowGridButton';\r\n\r\nconst esEditable = (record, isRowEditable) =>\r\n isRowEditable === undefined ||\r\n (typeof isRowEditable === 'function' && isRowEditable(record));\r\n\r\nconst theme = createTheme({}, esES);\r\n\r\nconst operatorParamsToModel = new Map([\r\n // boolean operators\r\n ['is', 'is'],\r\n ['not', 'not'],\r\n // date operators\r\n ['after', 'after'],\r\n ['onOrAfter', 'onOrAfter'],\r\n ['before', 'before'],\r\n ['onOrBefore', 'onOrBefore'],\r\n // numeric operators\r\n ['eq', '='],\r\n ['neq', '!='],\r\n ['gt', '>'],\r\n ['gte', '>='],\r\n ['lt', '<'],\r\n ['lte', '<='],\r\n // string operators\r\n ['contains', 'contains'],\r\n ['equals', 'equals'], // default operator\r\n ['sw', 'startsWith'],\r\n ['ew', 'endsWith'],\r\n ['isEmpty', 'isEmpty'],\r\n ['isNotEmpty', 'isNotEmpty'],\r\n ['isAnyOf', 'isAnyOf'],\r\n]);\r\n\r\nconst operatorModelToParams = new Map(\r\n Array.from(operatorParamsToModel, entry => [entry[1], entry[0]])\r\n);\r\n\r\nconst defaultConvertFilterModelToFilterValues = filterModel =>\r\n filterModel.items.reduce((acc, item) => {\r\n if (typeof item.field !== 'undefined' && item.operator) {\r\n if (operatorModelToParams.has(item.operator)) {\r\n acc[\r\n `${item.field}_${operatorModelToParams.get(item.operator)}`\r\n ] = item.value;\r\n } else {\r\n acc[item.field] = item.value;\r\n }\r\n }\r\n return acc;\r\n }, {});\r\n\r\nconst GrillaLg = props => {\r\n const {\r\n actionButtons = [],\r\n bulkActionButtons,\r\n sx,\r\n columns,\r\n isRowEditable,\r\n primaryText: pt,\r\n secondaryText: st,\r\n desktopSize = false,\r\n onRenderGrilla,\r\n onLoadGrilla,\r\n hasEdit,\r\n initialState: initialStateProps,\r\n convertFilterModelToFilterValues = defaultConvertFilterModelToFilterValues,\r\n claveNuevo,\r\n mobileColumns = '',\r\n hasVerFicha = false,\r\n disableMultipleRowSelection = true,\r\n ...rest\r\n } = props;\r\n\r\n const utils = useUtilsGrilla(props);\r\n const translate = useTranslate();\r\n const resource = useResourceContext(props);\r\n const {\r\n data = [],\r\n isLoading,\r\n selectedIds,\r\n onSelect,\r\n displayedFilters,\r\n setFilters,\r\n } = useListContext();\r\n\r\n const apiRef = useGridApiRef();\r\n const initialState = useKeepGroupedColumnsHidden({\r\n apiRef,\r\n initialState: {\r\n ...initialStateProps,\r\n pinnedColumns: { right: ['actions'] },\r\n //filter: {\r\n // filterModel: {\r\n // items: [],\r\n // quickFilterExcludeHiddenColumns: true,\r\n // },\r\n //},\r\n },\r\n });\r\n\r\n useInitGrilla({ apiRef, ...props });\r\n\r\n const translatedColumns = columns.map((column, index) => ({\r\n ...column,\r\n headerName:\r\n column.headerName !== ''\r\n ? translate(`resources.${resource}.fields.${column.field}`, {\r\n _: column.headerName,\r\n })\r\n : column.headerName,\r\n }));\r\n\r\n const finalColumns =\r\n actionButtons.length > 0 || hasEdit\r\n ? translatedColumns.concat([\r\n {\r\n field: 'actions',\r\n type: 'actions',\r\n width: 100,\r\n hideable: false,\r\n getActions: params => {\r\n const fila = apiRef.current.getRowNode(params.id);\r\n const esDisabled = !esEditable(\r\n params.row,\r\n isRowEditable\r\n );\r\n const esVerFicha = hasVerFicha && esDisabled;\r\n\r\n return params.row.id\r\n ? [\r\n ...(hasEdit\r\n ? [\r\n esVerFicha ? (\r\n <ShowGridButton\r\n record={params.row}\r\n />\r\n ) : (\r\n <EditGridButton\r\n record={params.row}\r\n disabled={esDisabled}\r\n />\r\n ),\r\n ]\r\n : hasVerFicha\r\n ? [\r\n <ShowGridButton\r\n record={params.row}\r\n />,\r\n ]\r\n : []),\r\n ...actionButtons\r\n .filter(button => !!button)\r\n .map(button => {\r\n const { handler, ...rest } = button;\r\n return (\r\n <GridActionsCellItem\r\n showInMenu\r\n onClick={e =>\r\n typeof handler ===\r\n 'function'\r\n ? handler(\r\n {\r\n ...utils,\r\n record: params.row,\r\n },\r\n rest.key\r\n )\r\n : false\r\n }\r\n {...rest}\r\n />\r\n );\r\n }),\r\n ]\r\n : fila.children[0].indexOf(`${claveNuevo}=`) !==\r\n -1\r\n ? [\r\n <CreateGridButton\r\n record={\r\n claveNuevo\r\n ? {\r\n [claveNuevo]:\r\n fila.children[0]\r\n .split(\r\n `${claveNuevo}=`\r\n )[1]\r\n .replaceAll(\r\n '[',\r\n ''\r\n )\r\n .trim()\r\n .split('AND')[0]\r\n .trim(),\r\n }\r\n : undefined\r\n }\r\n />,\r\n ]\r\n : [];\r\n },\r\n },\r\n ])\r\n : translatedColumns;\r\n\r\n const hasBulkActionButtons = isValidElement(bulkActionButtons);\r\n\r\n const handleSelectionChange = rowSelectionModel => {\r\n if (!isLoading) {\r\n if (hasBulkActionButtons && !disableMultipleRowSelection) {\r\n onSelect(rowSelectionModel);\r\n } else {\r\n // Deselección sin checkboxes\r\n if (apiRef.current.isRowSelected(rowSelectionModel[0])) {\r\n onSelect([]);\r\n } else {\r\n onSelect(rowSelectionModel);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const handleFilterChange = params => {\r\n // TODO: El filtro no envía por ajax el operador entre multiples filtros OR/AND (params.logicOperator)\r\n setFilters(convertFilterModelToFilterValues(params), displayedFilters);\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Asistente isLoading={isLoading} />\r\n <DatagridRoot sx={sx} className={DatagridClasses.root}>\r\n {hasBulkActionButtons ? (\r\n <BulkActionsToolbar selectedIds={selectedIds}>\r\n {bulkActionButtons}\r\n </BulkActionsToolbar>\r\n ) : null}\r\n <Box\r\n sx={{ height: '70vh', width: '100%' }}\r\n className={DatagridClasses.tableWrapper}\r\n >\r\n <ThemeProvider theme={theme}>\r\n <DataGridPremium\r\n sx={{\r\n display: 'grid',\r\n gridTemplateRows: '70vh 1fr auto',\r\n }}\r\n slots={{\r\n //toolbar: GridToolbar,\r\n noRowsOverlay: CustomNoRowsOverlay,\r\n }}\r\n columns={finalColumns}\r\n rows={data}\r\n apiRef={apiRef}\r\n loading={isLoading}\r\n /*groupingColDef={params => {\r\n const override = {};\r\n\r\n if (params.fields.includes('nombrecompleto')) {\r\n return {\r\n headerName: 'Funcionario',\r\n valueFormatter: valueFormatterParams => {\r\n const rowNode =\r\n apiRef.current.getRowNode(\r\n valueFormatterParams.id\r\n );\r\n console.log(rowNode);\r\n\r\n return `By ${\r\n rowNode.groupingKey ?? ''\r\n }`;\r\n },\r\n };\r\n }\r\n\r\n return override;\r\n }}*/\r\n //disableSelectionOnClick\r\n hideFooterSelectedRowCount\r\n hideFooter\r\n disableMultipleRowSelection={\r\n disableMultipleRowSelection\r\n }\r\n checkboxSelection={hasBulkActionButtons}\r\n filterMode=\"server\"\r\n //filterModel={filterModel}\r\n onFilterModelChange={handleFilterChange}\r\n rowSelectionModel={selectedIds}\r\n onRowSelectionModelChange={handleSelectionChange}\r\n isRowSelectable={params => params.row.id}\r\n initialState={initialState}\r\n //experimentalFeatures={{ newEditingApi: true }}\r\n {...rest}\r\n />\r\n </ThemeProvider>\r\n </Box>\r\n </DatagridRoot>\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst GrillaSm = props => {\r\n const {\r\n sx,\r\n columns,\r\n actionButtons = [],\r\n hasEdit,\r\n isRowEditable,\r\n primaryText: pt,\r\n mobileColumns = '',\r\n } = props;\r\n\r\n let primaryText = pt;\r\n\r\n const utils = useUtilsGrilla(props);\r\n const { isLoading } = useListContext();\r\n\r\n useInitGrilla(props);\r\n\r\n if (!pt) {\r\n const finalColumns = !!mobileColumns\r\n ? mobileColumns\r\n .split(',')\r\n .map(name =>\r\n columns.find(\r\n column =>\r\n column.field === name ||\r\n column.field === name + '_lis'\r\n )\r\n )\r\n : columns;\r\n\r\n primaryText = record => (\r\n <Paper variant=\"outlined\" sx={{ pt: 2, pb: 2, pl: 2 }}>\r\n {finalColumns.map(column => {\r\n const {\r\n field,\r\n headerName,\r\n valueGetter,\r\n type = 'string',\r\n jsxMobile,\r\n } = column;\r\n return !!jsxMobile ? (\r\n <Box>{jsxMobile(record, column)}</Box>\r\n ) : type === 'boolean' ? (\r\n <Box>\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n color: valueGetter({\r\n value: record[field],\r\n })\r\n ? 'green'\r\n : 'red',\r\n }}\r\n >\r\n {headerName}\r\n </Box>\r\n </Box>\r\n ) : (\r\n <Box>{record[field]}</Box>\r\n );\r\n })}\r\n <Box>\r\n {actionButtons\r\n .filter(button => !!button)\r\n .map(button => {\r\n const {\r\n key,\r\n handler,\r\n icon = <SettingsIcon />,\r\n ...rest\r\n } = button;\r\n return (\r\n <Button\r\n onClick={e =>\r\n typeof handler === 'function'\r\n ? handler({ ...utils, record }, key)\r\n : false\r\n }\r\n {...rest}\r\n >\r\n {icon}\r\n </Button>\r\n );\r\n })}\r\n </Box>\r\n </Paper>\r\n );\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Asistente isLoading={isLoading} />\r\n <SimpleList\r\n linkType={record =>\r\n hasEdit && esEditable(record, isRowEditable)\r\n ? 'edit'\r\n : false\r\n }\r\n primaryText={primaryText}\r\n sx={sx}\r\n />\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst GrillaEtriek = props => {\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\r\n const { hasEdit } = useResourceDefinition(props);\r\n const { desktopSize = false } = props;\r\n\r\n return isSmall && desktopSize === false ? (\r\n <GrillaSm {...props} hasEdit={hasEdit} />\r\n ) : (\r\n <GrillaLg {...props} hasEdit={hasEdit} />\r\n );\r\n};\r\n\r\nexport default GrillaEtriek;\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 { 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: { ...fichaProps, etrs: rest.etrs } };\r\n};\r\n\r\nexport default useInitFicha;\r\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 { useContext, useEffect, useRef } from 'react';\nimport { useInput } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { etrRequerido } from '../../utils/utils';\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../FichaContext';\n\nconst useContenidoController = props => {\n const { source } = props;\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\n const asisEtr = useContext(FormEtrGridContext);\n const inEtrGrid = asisEtr !== undefined;\n const configInput = useSelector(state => {\n const configInputs = state.configInputs\n ? state.configInputs.filter(item => item.id === source)\n : [];\n return configInputs[0] ? configInputs[0] : null;\n });\n const {\n disabled: reduxDisabled,\n hidden: reduxHidden,\n required: reduxRequired,\n error: reduxError,\n label: reduxLabel,\n } = configInput || {};\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\n const reduxValidateError =\n typeof reduxError === 'function' ? reduxError : () => reduxError;\n\n const { [source]: initialProps = {}, etrs } = fichaProps;\n const {\n onFocus: onFocusProps,\n onChange: onChangeProps,\n onBlur: onBlurProps,\n hidden: hiddenProps = false,\n disabled: disabledProps = false,\n validate: propValidate,\n ...rest\n } = props;\n const { field } = useInput(props);\n const {\n onFocus: onFocusInitial,\n onBlur: onBlurInitial,\n onChange: onChangeInitial,\n hidden: hiddenInitial,\n disabled: disabledInitial,\n useContenido = useDefaultHook,\n validate: initValidate,\n ...restInitialProps\n } = initialProps;\n const hidden =\n inEtrGrid || hiddenInitial === undefined ? hiddenProps : hiddenInitial;\n const disabled =\n inEtrGrid || disabledInitial === undefined\n ? disabledProps\n : disabledInitial;\n const onFocus =\n inEtrGrid || onFocusInitial === undefined\n ? onFocusProps\n : onFocusInitial;\n const onBlur =\n inEtrGrid || onBlurInitial === undefined ? onBlurProps : onBlurInitial;\n const onChange =\n inEtrGrid || onChangeInitial === undefined\n ? onChangeProps\n : onChangeInitial;\n const utils = useUtilsFicha({ ...props, etrs, asisEtr });\n const dynamicProps = useContenido({\n ...rest,\n estado,\n hidden,\n isLoading,\n utils,\n ...restInitialProps,\n });\n const previousValue = useRef(field.value);\n\n useEffect(() => {\n if (\n reduxDisabled ||\n reduxHidden ||\n reduxRequired ||\n reduxError ||\n reduxLabel\n ) {\n field.onBlur(utils, estado);\n }\n }, [reduxRequired, reduxDisabled, reduxHidden, reduxError, reduxLabel]);\n\n if (dynamicProps === undefined) {\n throw new Error(\n `useContenido está devolviendo undefined para el contenido ${source}\\n Asegúrese de incluir una instrucción return al final de la función`\n );\n }\n\n const {\n hidden: hiddenDinamico,\n disabled: disabledDinamico,\n onFocus: onFocusDinamico,\n onChange: onChangeDinamico,\n onBlur: onBlurDinamico,\n validate: dynamicValidate,\n ...dynamicPropsRest\n } = dynamicProps;\n const onFocusFinal = onFocusDinamico || onFocus;\n const onBlurFinal = onBlurDinamico || onBlur;\n const onChangeFinal = onChangeDinamico || onChange;\n\n const argCero = { ...utils, prev: previousValue.current };\n const finalPropsValidate = Array.isArray(propValidate)\n ? propValidate\n : [propValidate];\n const finalInitValidate = Array.isArray(initValidate)\n ? initValidate\n : [initValidate];\n const finalDynamicValidate = Array.isArray(dynamicValidate)\n ? dynamicValidate\n : [dynamicValidate];\n const finalValidate = [\n ...finalPropsValidate,\n ...finalInitValidate,\n ...finalDynamicValidate,\n reduxValidate,\n reduxValidateError,\n ].filter(i => i !== undefined);\n\n return {\n propsContenido: {\n sx: { mt: 1, mb: 1, ml: { xs: 0, md: 1 }, mr: { xs: 0, md: 1 } },\n onFocus: e => {\n onFocusFinal && onFocus(utils, estado, e);\n previousValue.current = e.target.value;\n },\n onBlur: e => onBlurFinal && onBlurFinal(argCero, estado, e),\n onChange: e => onChangeFinal && onChangeFinal(argCero, estado, e),\n helperText: false,\n validate: finalValidate,\n ...rest,\n ...restInitialProps,\n ...dynamicPropsRest,\n disabled:\n reduxDisabled !== undefined\n ? reduxDisabled\n : disabledDinamico !== undefined\n ? disabledDinamico\n : disabled,\n ...(reduxLabel ? { label: reduxLabel } : {}),\n },\n hidden:\n reduxHidden !== undefined\n ? reduxHidden\n : hiddenDinamico !== undefined\n ? hiddenDinamico\n : hidden,\n };\n};\n\nexport default useContenidoController;\n","import ChevronLeft from '@mui/icons-material/ChevronLeft';\nimport Typography from '@mui/material/Typography';\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';\nimport useContenidoController from '../layout/contenidos/useContenidoController';\n\nexport const getFormcodFromResource = resource => resource.split('_')[1];\n\n//parse(): input -> record\n//format(): record -> input\n\nconst dateRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\n\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) return '';\n const pad = '00';\n const yyyy = value.getFullYear().toString();\n const MM = (value.getMonth() + 1).toString();\n const dd = value.getDate().toString();\n return `${yyyy}-${(pad + MM).slice(-2)}-${(pad + dd).slice(-2)}`;\n};\n\nexport const dateFormat = value => {\n // null, undefined and empty string values should not go through dateFormatter\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateRegex.test(value)) {\n const match = value.split('/');\n return match[2] + '-' + match[1] + '-' + match[0];\n }\n\n return convertDateToString(new Date(value));\n};\n\nexport const dateParser = value => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n const match = value.split('-');\n return match[2] + '/' + match[1] + '/' + match[0];\n};\n\nconst dateTimeRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}\\s\\d{2}:\\d{2}$/;\n\nexport const dateTimeFormat = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n const tmpMatch = value.split(' ');\n const match = tmpMatch[0].split('/');\n\n return match[2] + '-' + match[1] + '-' + match[0] + ' ' + tmpMatch[1];\n }\n\n return convertDateToString(new Date(value));\n};\n\nexport const dateTimeParser = value => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n\n const tmpMatch = value.split('T');\n const match = tmpMatch[0].split('-');\n\n return match[2] + '/' + match[1] + '/' + match[0] + ' ' + tmpMatch[1];\n};\n\nexport const timeFormat = value => {\n // v is a `Date` object\n if (!value) {\n return '';\n }\n\n if (value instanceof Date) {\n // v is a `Date` object\n return value.toString();\n } else if (value.indexOf(':') !== -1) {\n const match = value.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(value);\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 = (value, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n\n return value.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 sort,\n ...rest\n}) => rest;\n\nexport const Separador = props => {\n const { hidden } = useContenidoController(props);\n\n return (\n !hidden && (\n <Typography variant=\"h6\" gutterBottom id={props.source}>\n {props.children}\n </Typography>\n )\n );\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 = { inputFormat: '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.split('/').reverse().join('/'));\n const finDate = new Date(value.split('/').reverse().join('/'));\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\nexport const stringToDate = dateString => {\n if (!dateString) return '';\n const [day, month, year] = dateString.split('/').map(Number);\n return new Date(year, month - 1, day);\n};\n\nexport const stringToDateTime = dateTimeString => {\n if (!dateTimeString) return '';\n const [datePart, timePart] = dateTimeString.split(' ');\n const [day, month, year] = datePart.split('/').map(Number);\n const [hour, minute] = timePart.split(':').map(Number);\n return new Date(year, month - 1, day, hour, minute);\n};\n\nexport const dateToString = date => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = String(date.getFullYear());\n return `${day}/${month}/${year}`;\n};\n\nexport const dateTimeToString = date => {\n const options = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n };\n\n return date.toLocaleString('es', options).replace(',', '');\n};\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","import CloseIcon from '@mui/icons-material/Close';\nimport { DialogTitle, IconButton } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport * as React from 'react';\nimport { cloneElement, isValidElement } from 'react';\nimport { useTranslate } from 'react-admin';\n\nexport const FormDialogTitle = props => {\n const translate = useTranslate();\n const { defaultTitle, onClose, record, title } = props;\n\n return (\n <StyledDialogTitle id=\"edit-dialog-title\">\n {isValidElement(title)\n ? cloneElement(title, { record })\n : title\n ? translate(title, { _: title })\n : defaultTitle}\n <IconButton\n aria-label={translate('ra.action.close')}\n className={FormDialogTitleClasses.closeButton}\n onClick={onClose}\n >\n <CloseIcon />\n </IconButton>\n </StyledDialogTitle>\n );\n};\n\nconst PREFIX = 'RaFormDialogTitle';\n\nexport const FormDialogTitleClasses = {\n closeButton: `${PREFIX}-closeButton`,\n};\n\nconst StyledDialogTitle = styled(DialogTitle, {\n name: PREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => ({\n [`& .${FormDialogTitleClasses.closeButton}`]: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n}));\n","import { createContext } from 'react';\n\n/**\n * A context holding open/close state and callbacks for managing a child form dialog.\n *\n * @param value.open The open/close state. `true` if the dialog is open.\n * @param value.open The callback that gets called to open the dialog.\n * @param value.close The callback that gets called to close the dialog.\n */\nexport const FormDialogContext = createContext(null);\n","import { useContext } from 'react';\nimport { FormDialogContext } from './FormDialogContext';\n\n/**\n * Hook allowing to get the FormDialogContext.\n * Values are retrieved from the given props, or from the FormDialogContext if one exists.\n * For each value, props value takes precedence over context value.\n * In case values can be retrieved neither from props nor from context, `null` is returned.\n *\n * @param props.isOpen The open/close state. `true` if the dialog is open.\n * @param props.open The callback that gets called to open the dialog.\n * @param props.close The callback that gets called to close the dialog.\n *\n * @returns {FormDialogContextType} value from props or context.\n */\nexport const useFormDialogContext = props => {\n const context = useContext(FormDialogContext);\n const finalContext = {\n isOpen: props?.isOpen ?? context?.isOpen,\n open: props?.open ?? context?.open,\n close: props?.close ?? context?.close,\n };\n if (\n finalContext.isOpen == null &&\n finalContext.open == null &&\n finalContext.close == null\n ) {\n return null;\n } else {\n return finalContext;\n }\n};\n","import { Dialog } from '@mui/material';\nimport * as React from 'react';\nimport {\n CreateContextProvider,\n useCreateController,\n useNotify,\n useRedirect,\n useResourceContext,\n} from 'react-admin';\nimport { useQueryClient } from 'react-query';\nimport { Route, Routes } from 'react-router-dom';\nimport { FormDialogTitle } from './FormDialogTitle';\nimport { useFormDialogContext } from './useFormDialogContext';\n\n/**\n * A component which displays a creation form inside a dialog.\n *\n * By default, these components manages the open/close state of the dialog via the router.\n * In case it is used inside a `<FormDialogContext>`, or if the `isOpen`, `open` and `close`\n * props are provided directly, then the open/close state is managed by these values instead.\n *\n * @param {CreateDialogProps} props\n *\n * @example\n * const PostList = () => (\n * <>\n * <List>\n * <Datagrid>\n * ...\n * </Datagrid>\n * </List>\n * <CreateDialog>\n * <SimpleForm>\n * <TextField source=\"id\" />\n * <TextInput source=\"first_name\" validate={required()} />\n * <TextInput source=\"last_name\" validate={required()} />\n * <DateInput source=\"dob\" label=\"born\" validate={required()} />\n * <SelectInput source=\"sex\" choices={sexChoices} />\n * </SimpleForm>\n * </CreateDialog>\n * </>\n * );\n *\n * @example with a managed state\n * const CustomerEditForm = () => {\n * const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);\n * const openCreateDialog = useCallback(() => {\n * setIsCreateDialogOpen(true);\n * }, []);\n * const closeCreateDialog = useCallback(() => {\n * setIsCreateDialogOpen(false);\n * }, []);\n *\n * return (\n * <SimpleForm>\n * <Button\n * label=\"Create a new customer\"\n * onClick={() => openCreateDialog()}\n * />\n * <CreateDialog\n * fullWidth\n * maxWidth=\"md\"\n * isOpen={isCreateDialogOpen}\n * open={openCreateDialog}\n * close={closeCreateDialog}\n * resource=\"customers\"\n * >\n * <CustomerForm />\n * </CreateDialog>\n * </SimpleForm>\n * );\n * };\n */\nexport const CreateDialog = props => {\n const resource = useResourceContext(props);\n const context = useFormDialogContext(props);\n if (context) {\n return <CreateDialogView resource={resource} {...context} {...props} />;\n }\n\n return (\n <Routes>\n <Route\n path=\"create/*\"\n element={\n <CreateDialogView resource={resource} isOpen {...props} />\n }\n />\n </Routes>\n );\n};\n\nconst CreateDialogView = ({\n children,\n mutationOptions: mutationOptionsProp,\n title,\n redirect: redirectTo = 'list',\n ...props\n}) => {\n const redirect = useRedirect();\n const notify = useNotify();\n const queryClient = useQueryClient();\n const mutationOptions = {\n onSuccess: data => {\n notify('ra.notification.created', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n // Because redirecting to the list doesn't remount the List component, we need\n // to explicitly ask react-query to refresh the list queries\n queryClient.invalidateQueries([resource, 'getList']);\n queryClient.invalidateQueries([resource, 'getManyReference']);\n if (props.close) {\n props.close();\n } else {\n redirect(redirectTo, props.resource, data.id, data, {\n _scrollToTop: false,\n });\n }\n },\n ...mutationOptionsProp,\n };\n const controllerProps = useCreateController({\n ...props,\n mutationOptions,\n });\n const { defaultTitle, record, resource } = controllerProps;\n\n const handleClose = () => {\n if (props.close) {\n props.close();\n } else {\n redirect('list', props.resource, undefined, undefined, {\n _scrollToTop: false,\n });\n }\n };\n\n return (\n <Dialog\n open={props.isOpen}\n aria-labelledby=\"create-dialog-title\"\n onClose={handleClose}\n data-testid=\"create-dialog\"\n {...sanitizeRestProps(props)}\n >\n <FormDialogTitle\n id=\"create-dialog-title\"\n title={title}\n defaultTitle={defaultTitle}\n record={record}\n onClose={handleClose}\n />\n <CreateContextProvider value={controllerProps}>\n {children}\n </CreateContextProvider>\n </Dialog>\n );\n};\n\nconst sanitizeRestProps = ({\n basePath = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n history = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n mutationOptions = null,\n options = null,\n permissions = null,\n transform = null,\n isOpen = null,\n open = null,\n close = null,\n ...rest\n}) => rest;\n","import OpenInNewIcon from '@mui/icons-material/OpenInNew';\nimport { IconButton, Tooltip } from '@mui/material';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { Button, useTranslate } from 'react-admin';\nimport { FormDialogContext } from './FormDialogContext';\n\n/**\n * Internal component which creates a dialog, along with a `<Button>` to open it.\n * This component is also responsible for managing the open/close state of the Dialog\n * (using an internal state, not the router).\n *\n * @param props.dialog A React Element containing the dialog\n * @param props.inline Optional - Set to true for an inline button, having only an icon and a tooltip\n * @param props.icon Optional - The icon associated to the button label\n * @param props.label Optional - The button label\n * @param props.ButtonProps Optional - An object containing props to pass to the MUI Button\n */\nexport const FormDialogButton = props => {\n const translate = useTranslate();\n const [isOpen, setIsOpen] = useState(false);\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n const contextValue = useMemo(\n () => ({\n isOpen,\n open,\n close,\n }),\n [close, isOpen, open]\n );\n\n const {\n icon = defaultIcon,\n label = '',\n inline,\n dialog,\n ButtonProps,\n } = props;\n\n const onClick = useCallback(\n e => {\n open();\n e.stopPropagation();\n },\n [open]\n );\n\n const translatedLabel = translate(label, { _: label });\n\n const button = inline ? (\n <Tooltip title={translatedLabel}>\n <IconButton\n aria-label={translatedLabel}\n size=\"small\"\n color=\"primary\"\n {...ButtonProps}\n onClick={onClick}\n >\n {icon}\n </IconButton>\n </Tooltip>\n ) : (\n <Button label={translatedLabel} {...ButtonProps} onClick={onClick}>\n {icon}\n </Button>\n );\n\n return (\n <FormDialogContext.Provider value={contextValue}>\n {button}\n {dialog}\n </FormDialogContext.Provider>\n );\n};\n\nconst defaultIcon = <OpenInNewIcon />;\n","import ContentAdd from '@mui/icons-material/Add';\nimport React from 'react';\nimport { CreateDialog } from './CreateDialog';\nimport { FormDialogButton } from './FormDialogButton';\n\n/**\n * A component which creates a `<CreateDialog>`, along with a `<Button>` to open it.\n * This component is also responsible for managing the open/close state of the Dialog\n * (using an internal state, not the router).\n *\n * @example\n * const createButton = (\n * <CreateInDialogButton fullWidth maxWidth=\"md\">\n * <SimpleForm>\n * <TextInput source=\"first_name\" validate={required()} fullWidth />\n * </SimpleForm>\n * </CreateInDialogButton>\n * );\n */\nexport const CreateInDialogButton = props => {\n const {\n inline,\n icon = defaultIcon,\n label = 'ra.action.create',\n ButtonProps,\n ...createDialogProps\n } = props;\n\n const createDialog = <CreateDialog {...createDialogProps} />;\n\n return (\n <FormDialogButton\n icon={icon}\n label={label}\n dialog={createDialog}\n inline={inline}\n ButtonProps={ButtonProps}\n />\n );\n};\n\nconst defaultIcon = <ContentAdd />;\n","import * as React from 'react';\nimport { useCallback, useContext } from 'react';\nimport { Toolbar, useNotify, useSaveContext } from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\n\nconst classesPREFIX = 'FormEtriek';\n\nconst FormClasses = {\n form: `${classesPREFIX}-form`,\n tab: `${classesPREFIX}-tab`,\n contenido: `${classesPREFIX}-contenido`,\n};\n\nconst getClassesForm = theme => ({\n [`& .${FormClasses.form}`]: {\n maxHeight: '70vh',\n overflow: 'auto',\n },\n [`& .${FormClasses.tab}`]: {\n display: 'block',\n maxHeight: '65vh',\n overflow: 'auto',\n },\n [`& .${FormClasses.contenido}`]: {\n [theme.breakpoints.up('xs')]: {\n width: '100%', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n },\n [theme.breakpoints.up('md')]: {\n width: '12vw', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n '&.MuiAutocomplete-root': {\n width: '16vw',\n },\n },\n },\n});\n\nconst ToolbarFicha = props => {\n const { record, ...rest } = props;\n return <Toolbar {...rest} record={false} />;\n};\n\nconst dontSave = () => {};\n\nconst useFormSubmit = props => {\n const {\n fichaProps: { onBeforeSubmitFicha, etrs },\n estado,\n } = useContext(FichaContext);\n const utils = useUtilsSubmit({ ...props, etrs });\n const notify = useNotify();\n const { save } = useSaveContext();\n\n const submit = useCallback(\n async values => {\n const valid =\n onBeforeSubmitFicha &&\n (await onBeforeSubmitFicha(\n {\n form: { getValues: () => values },\n submit: save,\n ...utils,\n },\n estado\n ));\n if (typeof valid === 'string') {\n notify(valid, { type: 'error' });\n return dontSave();\n } else {\n return valid === undefined || valid ? save(values) : dontSave();\n }\n },\n [onBeforeSubmitFicha, notify, dontSave, save]\n );\n\n return typeof onBeforeSubmitFicha === 'function' ? submit : undefined;\n};\n\nexport {\n ToolbarFicha,\n useFormSubmit,\n FormClasses,\n getClassesForm,\n classesPREFIX,\n};\n","import { styled } from '@mui/material/styles';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { Create, useResourceContext } from 'react-admin';\nimport { useInitFicha, useNuevo } from '../utils';\nimport { useDefaultHook } from '../utils/useUtils';\nimport { AsistenteProvider } from './AsistenteContext';\nimport { CreateInDialogButton } from './dialogs/CreateInDialogButton';\nimport { FichaContext } from './FichaContext';\nimport { ProgressProvider } from './ProgressContext';\nimport { getClassesForm, classesPREFIX } from './utilsForm';\n\nconst CreateEtriek = props => {\n const {\n useFormulario = useDefaultHook,\n enableLoad = true,\n tipo,\n ...rest\n } = props;\n const resource = useResourceContext(props);\n const CreateComponent = tipo === 'ventana' ? CreateInDialogButton : Create;\n\n const { data: initialValues, isLoading } = useNuevo(resource, {\n enabled: enableLoad,\n });\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(\n () => ({ estado: 'N', initialValues, isLoading, fichaProps }),\n [initialValues, isLoading, fichaProps]\n );\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <AsistenteProvider>\n <CreateComponent\n redirect=\"list\"\n {...rest}\n {...fichaProps?.panel}\n />\n </AsistenteProvider>\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n\nCreateEtriek.propTypes = {\n useFormulario: PropTypes.func,\n};\n\nconst StyledCreate = styled(CreateEtriek, {\n name: classesPREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => getClassesForm(theme));\n\nexport { StyledCreate as CreateEtriek };\n","import { Dialog } from '@mui/material';\nimport * as React from 'react';\nimport {\n ListContextProvider,\n useListController,\n useNotify,\n useRedirect,\n useResourceContext,\n} from 'react-admin';\nimport { useQueryClient } from 'react-query';\nimport { Route, Routes } from 'react-router-dom';\nimport { FormDialogTitle } from './FormDialogTitle';\nimport { useFormDialogContext } from './useFormDialogContext';\n\n/**\n * A component which displays a creation form inside a dialog.\n *\n * By default, these components manages the open/close state of the dialog via the router.\n * In case it is used inside a `<FormDialogContext>`, or if the `isOpen`, `open` and `close`\n * props are provided directly, then the open/close state is managed by these values instead.\n *\n * @param {ListDialogProps} props\n *\n * @example\n * const PostList = () => (\n * <>\n * <List>\n * <Datagrid>\n * ...\n * </Datagrid>\n * </List>\n * <ListDialog>\n * <SimpleForm>\n * <TextField source=\"id\" />\n * <TextInput source=\"first_name\" validate={required()} />\n * <TextInput source=\"last_name\" validate={required()} />\n * <DateInput source=\"dob\" label=\"born\" validate={required()} />\n * <SelectInput source=\"sex\" choices={sexChoices} />\n * </SimpleForm>\n * </ListDialog>\n * </>\n * );\n *\n * @example with a managed state\n * const CustomerEditForm = () => {\n * const [isListDialogOpen, setIsListDialogOpen] = useState(false);\n * const openListDialog = useCallback(() => {\n * setIsListDialogOpen(true);\n * }, []);\n * const closeListDialog = useCallback(() => {\n * setIsListDialogOpen(false);\n * }, []);\n *\n * return (\n * <SimpleForm>\n * <Button\n * label=\"List a new customer\"\n * onClick={() => openListDialog()}\n * />\n * <ListDialog\n * fullWidth\n * maxWidth=\"md\"\n * isOpen={isListDialogOpen}\n * open={openListDialog}\n * close={closeListDialog}\n * resource=\"customers\"\n * >\n * <CustomerForm />\n * </ListDialog>\n * </SimpleForm>\n * );\n * };\n */\nexport const ListDialog = props => {\n const resource = useResourceContext(props);\n const context = useFormDialogContext(props);\n if (context) {\n return <ListDialogView resource={resource} {...context} {...props} />;\n }\n\n return (\n <Routes>\n <Route\n path=\"/*\"\n element={\n <ListDialogView resource={resource} isOpen {...props} />\n }\n />\n </Routes>\n );\n};\n\nconst ListDialogView = ({\n children,\n mutationOptions: mutationOptionsProp,\n title,\n redirect: redirectTo = 'list',\n ...props\n}) => {\n const redirect = useRedirect();\n const notify = useNotify();\n const queryClient = useQueryClient();\n const mutationOptions = {\n onSuccess: data => {\n notify('ra.notification.created', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n // Because redirecting to the list doesn't remount the List component, we need\n // to explicitly ask react-query to refresh the list queries\n queryClient.invalidateQueries([resource, 'getList']);\n queryClient.invalidateQueries([resource, 'getManyReference']);\n if (props.close) {\n props.close();\n } else {\n redirect(redirectTo, props.resource, data.id, data, {\n _scrollToTop: false,\n });\n }\n },\n ...mutationOptionsProp,\n };\n const controllerProps = useListController({\n ...props,\n mutationOptions,\n });\n const { defaultTitle, record, resource } = controllerProps;\n\n const handleClose = () => {\n if (props.close) {\n props.close();\n } else {\n redirect('list', props.resource, undefined, undefined, {\n _scrollToTop: false,\n });\n }\n };\n\n return (\n <Dialog\n open={props.isOpen}\n aria-labelledby=\"list-dialog-title\"\n onClose={handleClose}\n data-testid=\"list-dialog\"\n {...sanitizeRestProps(props)}\n >\n <FormDialogTitle\n id=\"list-dialog-title\"\n title={title}\n defaultTitle={defaultTitle}\n record={record}\n onClose={handleClose}\n />\n <ListContextProvider value={controllerProps}>\n {children}\n </ListContextProvider>\n </Dialog>\n );\n};\n\nconst sanitizeRestProps = ({\n basePath = null,\n hasCreate = null,\n hasEdit = null,\n hasShow = null,\n history = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n mutationOptions = null,\n options = null,\n permissions = null,\n transform = null,\n isOpen = null,\n open = null,\n close = null,\n ...rest\n}) => rest;\n","import ContentAdd from '@mui/icons-material/Add';\nimport React from 'react';\nimport { ListDialog } from './ListDialog';\nimport { FormDialogButton } from './FormDialogButton';\n\n/**\n * A component which creates a `<ListDialog>`, along with a `<Button>` to open it.\n * This component is also responsible for managing the open/close state of the Dialog\n * (using an internal state, not the router).\n *\n * @example\n * const createButton = (\n * <ListInDialogButton fullWidth maxWidth=\"md\">\n * <SimpleForm>\n * <TextInput source=\"first_name\" validate={required()} fullWidth />\n * </SimpleForm>\n * </ListInDialogButton>\n * );\n */\nexport const ListInDialogButton = props => {\n const {\n inline,\n icon = defaultIcon,\n label = 'ra.action.list',\n ButtonProps,\n ...listDialogProps\n } = props;\n\n const listDialog = <ListDialog {...listDialogProps} />;\n\n return (\n <FormDialogButton\n icon={icon}\n label={label}\n dialog={listDialog}\n inline={inline}\n ButtonProps={ButtonProps}\n />\n );\n};\n\nconst defaultIcon = <ContentAdd />;\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { List } from 'react-admin';\nimport { AsistenteProvider } from './AsistenteContext';\nimport { ListInDialogButton } from './dialogs/ListInDialogButton';\n\nconst ListEtriek = props => {\n const { tipo, ...rest } = props;\n\n const ListComponent = tipo === 'ventana' ? ListInDialogButton : List;\n\n return (\n <AsistenteProvider>\n <ListComponent {...rest} />\n </AsistenteProvider>\n );\n};\n\nListEtriek.propTypes = {\n useGrilla: PropTypes.func,\n};\n\nexport { ListEtriek };\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';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport clsx from 'clsx';\r\nimport * as React from 'react';\r\nimport { useDelete, useRecordContext, useTranslate } from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({\r\n classes,\r\n filterValues,\r\n handleSubmit,\r\n invalid,\r\n label,\r\n pristine,\r\n resource,\r\n saving,\r\n selectedIds,\r\n redirect,\r\n ...rest\r\n}) => rest;\r\n\r\nconst DeleteButtonNoWarning = props => {\r\n const translate = useTranslate();\r\n const {\r\n resource,\r\n redirect,\r\n className,\r\n icon,\r\n label = 'ra.action.delete',\r\n ...rest\r\n } = props;\r\n\r\n const record = useRecordContext();\r\n const [deleteOne, { isLoading }] = useDelete(resource, { id: record.id });\r\n\r\n return (\r\n <Tooltip title={translate('ra.action.delete')}>\r\n <IconButton\r\n disabled={isLoading}\r\n onClick={() => deleteOne()}\r\n label={label}\r\n className={clsx('ra-delete-button', className)}\r\n key=\"button\"\r\n {...sanitizeRestProps(rest)}\r\n size=\"large\"\r\n >\r\n {icon}\r\n </IconButton>\r\n </Tooltip>\r\n );\r\n};\r\n\r\nDeleteButtonNoWarning.defaultProps = {\r\n redirect: 'list',\r\n icon: <ActionDelete />,\r\n};\r\n\r\nexport default DeleteButtonNoWarning;\r\n","import { styled } from '@mui/material/styles';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { Edit, useEditController } from 'react-admin';\nimport { useInitFicha } from '../utils';\nimport { useDefaultHook } from '../utils/useUtils';\nimport { AsistenteProvider } from './AsistenteContext';\nimport { FichaContext } from './FichaContext';\nimport { ProgressProvider } from './ProgressContext';\nimport { getClassesForm, classesPREFIX } from './utilsForm';\n\n// https://marmelab.com/react-admin/Edit.html#transform\n// Al guardar un formulario, react-admin transforma valores vacíos en null, salvo que ya vinieran vacíos\n// Este transform por defecto evita que se envíen valores null\nconst defaultTransform = data => {\n const sanitizedData = {};\n for (const key in data) {\n if (typeof data[key] === 'string' && data[key].trim().length === 0)\n continue;\n\n if (data[key] == null) {\n data[key] = '';\n }\n sanitizedData[key] = data[key];\n }\n\n return sanitizedData;\n};\n\nconst EditEtriek = props => {\n const {\n useFormulario = useDefaultHook,\n mutationMode = 'pessimistic',\n ...rest\n } = props;\n const controllerProps = useEditController({ mutationMode, ...rest });\n const { record: initialValues, isLoading } = controllerProps;\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\n [initialValues, isLoading, fichaProps]\n );\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <AsistenteProvider>\n <Edit\n mutationMode={mutationMode}\n transform={defaultTransform}\n {...rest}\n {...fichaProps?.panel}\n />\n </AsistenteProvider>\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n\nconst StyledEdit = styled(EditEtriek, {\n name: classesPREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => getClassesForm(theme));\n\nexport { StyledEdit as EditEtriek };\n","import CancelIcon from '@mui/icons-material/Cancel';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport Box from '@mui/material/Box';\r\nimport * as React from 'react';\r\nimport { Button, Form, SaveButton, useResourceContext } from 'react-admin';\r\n\r\nconst FormDialog = React.forwardRef((props, ref) => {\r\n const {\r\n isOpen,\r\n onSubmit,\r\n onClose,\r\n title,\r\n dialogText,\r\n children,\r\n hasAccept = true,\r\n hasCancel = true,\r\n isLoading = false,\r\n } = props;\r\n\r\n const resource = useResourceContext(props);\r\n\r\n const handleClose = e => {\r\n onClose && onClose(e);\r\n };\r\n\r\n return (\r\n <Dialog\r\n ref={ref}\r\n open={isOpen}\r\n fullWidth\r\n onClose={handleClose}\r\n aria-labelledby=\"form-dialog-title\"\r\n >\r\n <DialogTitle id=\"form-dialog-title\">{title}</DialogTitle>\r\n <Form resource={resource} onSubmit={onSubmit}>\r\n <DialogContent dividers>\r\n <DialogContentText>{dialogText}</DialogContentText>\r\n <Box sx={{ mt: 2 }}>{children}</Box>\r\n </DialogContent>\r\n {(hasAccept || hasCancel) && (\r\n <DialogActions>\r\n {hasCancel && (\r\n <Button\r\n label=\"ra.action.cancel\"\r\n disabled={isLoading}\r\n onClick={e => handleClose(e)}\r\n >\r\n <CancelIcon />\r\n </Button>\r\n )}\r\n {hasAccept && (\r\n <SaveButton\r\n alwaysEnable\r\n label=\"Ok\"\r\n disabled={isLoading}\r\n />\r\n )}\r\n </DialogActions>\r\n )}\r\n </Form>\r\n </Dialog>\r\n );\r\n});\r\n\r\nexport default FormDialog;\r\n","import { CardContent, CircularProgress } from '@mui/material';\nimport * as React from 'react';\nimport { useContext, useEffect } from 'react';\nimport { useResourceContext } from 'react-admin';\nimport useUtilsFicha from '../utils/useUtils';\nimport Asistente from './Asistente';\nimport { FichaContext } from './FichaContext';\nimport useFormProgress from './ProgressContext';\n\nconst objVacio = {};\nconst blockSx = {\n pointerEvents: 'none',\n backgroundColor: '#ffffff',\n opacity: 0.6,\n position: 'relative',\n};\n\nconst FormContainer = props => {\n const context = useFormProgress();\n const resource = useResourceContext(props);\n const { estado, isLoading, initialValues, fichaProps } =\n useContext(FichaContext);\n const utils = useUtilsFicha({ resource, etrs: fichaProps.etrs });\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 const block = context.open ? blockSx : objVacio;\n\n return (\n <CardContent\n sx={{\n ...props.sx,\n ...block,\n }}\n >\n {context.open && (\n <CircularProgress\n sx={{\n position: 'absolute',\n left: '50%',\n top: '50%',\n }}\n thickness={4}\n size={50}\n />\n )}\n <Asistente isLoading={isLoading} />\n {props.children}\n </CardContent>\n );\n};\n\nexport default FormContainer;\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { SimpleForm } from 'react-admin';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\nimport { useFormSubmit } from './utilsForm';\n\nconst FormEtriek = props => {\n const {\n initialValues,\n fichaProps: { config = {} },\n } = useContext(FichaContext);\n const submit = useFormSubmit(props);\n\n if (!initialValues) return null;\n\n return (\n <SimpleForm\n mode=\"onBlur\"\n {...props}\n onSubmit={submit}\n defaultValues={initialValues}\n component={FormContainer}\n {...config}\n />\n );\n};\n\nFormEtriek.propTypes = {\n ...SimpleForm.propTypes,\n};\n\nexport { FormEtriek };\n","import ExpandMore from '@mui/icons-material/ExpandMore';\r\nimport { alpha } from '@mui/material/styles';\r\nimport {\r\n Collapse,\r\n List,\r\n ListItemIcon,\r\n MenuItem,\r\n Tooltip,\r\n Typography,\r\n} from '@mui/material';\r\nimport * as React from 'react';\r\nimport { useSidebarState, useTranslate } from 'react-admin';\r\n\r\nconst SubMenu = props => {\r\n const { handleToggle, isOpen, name, icon, children, dense } = props;\r\n const translate = useTranslate();\r\n\r\n const [sidebarIsOpen] = useSidebarState();\r\n\r\n const header = (\r\n <MenuItem dense={dense} onClick={handleToggle}>\r\n <ListItemIcon sx={{ minWidth: 5 }}>\r\n {isOpen ? <ExpandMore /> : icon}\r\n </ListItemIcon>\r\n <Typography variant=\"inherit\" color=\"textSecondary\">\r\n {translate(name)}\r\n </Typography>\r\n </MenuItem>\r\n );\r\n\r\n return (\r\n <div>\r\n {sidebarIsOpen || isOpen ? (\r\n header\r\n ) : (\r\n <Tooltip title={translate(name)} placement=\"right\">\r\n {header}\r\n </Tooltip>\r\n )}\r\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\r\n <List\r\n dense={dense}\r\n component=\"div\"\r\n disablePadding\r\n sx={{\r\n paddingLeft: (props.children.props.children[0]\r\n ? props.children.props.children[0].key\r\n : ''\r\n ).startsWith('menu')\r\n ? 2\r\n : 0,\r\n backgroundColor: theme =>\r\n //alpha(theme.palette.grey['400'], 0.24),\r\n alpha(theme.palette.secondary.light, 0.24),\r\n '& a': {\r\n transition:\r\n 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\r\n paddingLeft: sidebarIsOpen ? 4 : 2,\r\n },\r\n }}\r\n >\r\n {children}\r\n </List>\r\n </Collapse>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SubMenu;\r\n","import SettingsIcon from '@mui/icons-material/Settings';\r\nimport { Box, useMediaQuery } from '@mui/material';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport {\r\n DashboardMenuItem,\r\n Menu as RaMenu,\r\n MenuItemLink,\r\n useSidebarState,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport SubMenu from './SubMenu';\r\n\r\nconst renderMenu = props => {\r\n const { items: menus, translate, ...rest } = props;\r\n const { state, handleToggle, dense } = rest;\r\n\r\n return (\r\n menus && (\r\n <div>\r\n {menus.map(item => {\r\n const { name, menu, label, icon = 'settings' } = item;\r\n\r\n return menu ? (\r\n <SubMenu\r\n key={name}\r\n name={label}\r\n handleToggle={() => handleToggle(name)}\r\n isOpen={state[name]}\r\n icon={<SettingsIcon />}\r\n dense={dense}\r\n >\r\n {renderMenu({ items: menu, translate, ...rest })}\r\n </SubMenu>\r\n ) : (\r\n <MenuItemLink\r\n key={name}\r\n to={`/${name}`}\r\n //TODO: Cambiar junto con 'es.js'\r\n //primaryText={translate(`resources.${resource}.name`, {smart_count: 2})}\r\n primaryText={translate(`resources.${name}.name`, {\r\n _: label,\r\n })}\r\n dense={dense}\r\n leftIcon={<SettingsIcon />}\r\n //classes={{active: activeClassName, icon: iconClass}}\r\n //className={className}\r\n />\r\n );\r\n })}\r\n </div>\r\n )\r\n );\r\n};\r\n\r\nconst Menu = ({ dense = false }) => {\r\n const translate = useTranslate();\r\n const [state, setState] = useState({ mnuPrueba: false });\r\n const isXSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\r\n const [open] = useSidebarState();\r\n\r\n const menus = JSON.parse(localStorage.getItem('menus'));\r\n\r\n const className = ''; //classes.itemLink;\r\n const iconClass = ''; //classes.itemIcon;\r\n const activeClassName = ''; //classes.secondary;\r\n\r\n const handleToggle = menu => {\r\n setState(state => ({ ...state, [menu]: !state[menu] }));\r\n };\r\n\r\n const itemsFn = renderMenu({\r\n items: menus,\r\n handleToggle,\r\n state,\r\n activeClassName,\r\n iconClass,\r\n className,\r\n open,\r\n dense,\r\n translate,\r\n });\r\n\r\n return (\r\n <Box\r\n sx={{\r\n width: open ? 230 : 50,\r\n marginTop: 1,\r\n marginBottom: 1,\r\n transition: theme =>\r\n theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n }}\r\n >\r\n <RaMenu>\r\n <DashboardMenuItem\r\n primaryText={translate('ra.page.dashboard')}\r\n //classes={{ active: activeClassName, icon: iconClass }}\r\n //className={className}\r\n />\r\n {itemsFn}\r\n {isXSmall && (\r\n <MenuItemLink\r\n to=\"/configuration\"\r\n primaryText={translate('pos.configuration')}\r\n leftIcon={<SettingsIcon />}\r\n dense={dense}\r\n //classes={{ active: activeClassName, icon: iconClass }}\r\n //className={className}\r\n />\r\n )}\r\n </RaMenu>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Menu;\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, useContext, useMemo } from 'react';\r\nimport {\r\n CreateButton,\r\n ExportButton,\r\n FilterButton,\r\n FilterContext,\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 defaultJsBotonGrilla = (_, __) => {\r\n alert('Falta implementar la función jsBotonGrilla');\r\n};\r\n\r\nconst ListActionsEtriek = props => {\r\n const {\r\n className,\r\n filters: filtersProp,\r\n hasCreate,\r\n children,\r\n hideFilterButton = false,\r\n jsBotonGrilla = defaultJsBotonGrilla,\r\n ...rest\r\n } = props;\r\n const {\r\n sort,\r\n displayedFilters,\r\n filterValues,\r\n exporter,\r\n showFilter,\r\n total,\r\n } = useListContext(props);\r\n const resource = useResourceContext(props);\r\n const { hasCreate: hasCreateContext } = useResourceDefinition(props);\r\n const filters = useContext(FilterContext) || filtersProp;\r\n const listContext = useListContext(props);\r\n const utils = useUtilsGrilla(props);\r\n const utilsGrilla = { ...utils, ...listContext };\r\n\r\n delete rest.hasCreate;\r\n\r\n return useMemo(\r\n () => (\r\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\r\n {!hideFilterButton\r\n ? filtersProp\r\n ? cloneElement(filtersProp, {\r\n resource,\r\n showFilter,\r\n displayedFilters,\r\n filterValues,\r\n context: 'button',\r\n })\r\n : filters && <FilterButton />\r\n : null}\r\n {hasCreateContext && <CreateButton />}\r\n {exporter !== false && (\r\n <ExportButton\r\n disabled={total === 0}\r\n resource={resource}\r\n sort={sort}\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 => {\r\n if (child.props.onClick) {\r\n child.props.onClick(e);\r\n }\r\n jsBotonGrilla(utilsGrilla, child.key);\r\n }\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 if (child.props.onClick) {\r\n child.props.onClick(e);\r\n }\r\n jsBotonGrilla(utilsGrilla, option.key);\r\n },\r\n }))\r\n : null,\r\n })\r\n )}\r\n </TopToolbar>\r\n ),\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n [\r\n resource,\r\n displayedFilters,\r\n filterValues,\r\n filtersProp,\r\n showFilter,\r\n filters,\r\n total,\r\n className,\r\n sort,\r\n hideFilterButton,\r\n exporter,\r\n hasCreateContext,\r\n ]\r\n );\r\n};\r\n\r\nexport default ListActionsEtriek;\r\n","import LockIcon from '@mui/icons-material/Lock';\r\nimport { Box } from '@mui/material';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Button from '@mui/material/Button';\r\nimport Card from '@mui/material/Card';\r\nimport CardActions from '@mui/material/CardActions';\r\nimport CircularProgress from '@mui/material/CircularProgress';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport {\r\n Form,\r\n PasswordInput,\r\n TextInput,\r\n useLogin,\r\n useNotify,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst Login = props => {\r\n const {\r\n loginBackgroundImage,\r\n nameSource = 'username',\r\n passwordSource = 'password',\r\n } = props;\r\n const [loading, setLoading] = useState(false);\r\n const translate = useTranslate();\r\n const loginButtonText = translate('ra.auth.sign_in');\r\n const notify = useNotify();\r\n const login = useLogin();\r\n const location = useLocation();\r\n\r\n const handleSubmit = values => {\r\n setLoading(true);\r\n login(values, location.state ? location.state.nextPathname : '/').catch(\r\n error => {\r\n setLoading(false);\r\n notify(\r\n typeof error === 'string'\r\n ? error\r\n : typeof error === 'undefined' || !error.message\r\n ? 'ra.auth.sign_in_error'\r\n : error.message,\r\n {\r\n type: 'error',\r\n messageArgs: {\r\n _:\r\n typeof error === 'string'\r\n ? error\r\n : error && error.message\r\n ? error.message\r\n : undefined,\r\n },\r\n }\r\n );\r\n }\r\n );\r\n };\r\n\r\n const validate = values => {\r\n const errors = {};\r\n if (!values[nameSource]) {\r\n errors[nameSource] = translate('ra.validation.required');\r\n }\r\n if (!values[passwordSource]) {\r\n errors[passwordSource] = translate('ra.validation.required');\r\n }\r\n return errors;\r\n };\r\n\r\n return (\r\n <Form onSubmit={handleSubmit} validate={validate}>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n minHeight: '100vh',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n backgroundImage: loginBackgroundImage,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n }}\r\n >\r\n <Card sx={{ minWidth: 300, marginTop: '6em' }}>\r\n <Box\r\n sx={{\r\n margin: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <Avatar\r\n sx={{\r\n backgroundColor: 'secondary.main',\r\n }}\r\n >\r\n <LockIcon />\r\n </Avatar>\r\n </Box>\r\n <Box\r\n sx={{\r\n marginTop: '1em',\r\n marginBottom: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n color: 'grey.600',\r\n }}\r\n >\r\n Inicio de Sesión\r\n </Box>\r\n <Box sx={{ padding: '0 1em 1em 1em' }}>\r\n <Box sx={{ marginTop: 0 }}>\r\n <TextInput\r\n autoFocus\r\n fullWidth\r\n name={nameSource}\r\n label={translate('ra.auth.username')}\r\n disabled={loading}\r\n />\r\n </Box>\r\n <Box sx={{ marginTop: 0 }}>\r\n <PasswordInput\r\n name={passwordSource}\r\n label={translate('ra.auth.password')}\r\n type=\"password\"\r\n disabled={loading}\r\n />\r\n </Box>\r\n </Box>\r\n <CardActions sx={{ padding: '0 1em 1em 1em' }}>\r\n <Button\r\n variant=\"contained\"\r\n type=\"submit\"\r\n color=\"primary\"\r\n disabled={loading}\r\n fullWidth\r\n >\r\n {loading && (\r\n <CircularProgress\r\n sx={{ position: 'absolute' }}\r\n size={18}\r\n thickness={2}\r\n />\r\n )}\r\n {loginButtonText}\r\n </Button>\r\n </CardActions>\r\n </Card>\r\n </Box>\r\n </Form>\r\n );\r\n};\r\n\r\nexport default Login;\r\n","import { Box } from '@mui/material';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\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 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 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 <Box sx={{ display: 'inline-block' }} {...sanitizeRestProps(rest)}>\r\n <Button\r\n size=\"large\"\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 <Box\r\n component=\"span\"\r\n sx={{ paddingRight: '4px' }}\r\n ></Box>\r\n <FieldTitle label={option.label} resource={resource} />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default MenuButton;\r\n","import Typography from '@mui/material/Typography';\r\nimport * as React from 'react';\r\nimport { useRecordContext } from 'react-admin';\r\n\r\nconst MultiTextField = props => {\r\n const { fields, className, textAlign, sortable, ...rest } = props;\r\n const { campos, separador = '', secundario = [], hasSecundario } = fields;\r\n const record = useRecordContext();\r\n const principal = campos\r\n .map(item => (record[item] !== undefined ? record[item] : item))\r\n .join(`${separador}`);\r\n\r\n return (\r\n <Typography noWrap variant=\"inherit\" className={className} {...rest}>\r\n {principal}\r\n {hasSecundario && (\r\n <Typography\r\n component=\"span\"\r\n display=\"block\"\r\n color=\"textSecondary\"\r\n variant=\"caption\"\r\n >\r\n {secundario\r\n .map(\r\n item =>\r\n `${item.etiqueta || '---'}: ${\r\n record[item.campo] || '---'\r\n }`\r\n )\r\n .join(' ')}\r\n </Typography>\r\n )}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport default MultiTextField;\r\n","import { styled } from '@mui/material/styles';\r\nimport * 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\nimport { getClassesForm, classesPREFIX } from './utilsForm';\r\n\r\nconst 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\r\nconst StyledShow = styled(ShowEtriek, {\r\n name: classesPREFIX,\r\n overridesResolver: (props, styles) => styles.root,\r\n})(({ theme }) => getClassesForm(theme));\r\n\r\nexport { StyledShow as ShowEtriek };\r\n","import { CardContent, Divider } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n isValidElement,\n useContext,\n useState,\n} from 'react';\nimport {\n Form,\n FormTab,\n getTabbedFormTabFullPath,\n TabbedFormTabs,\n Toolbar,\n useResourceContext,\n} from 'react-admin';\nimport {\n matchPath,\n Route,\n Routes,\n useLocation,\n useResolvedPath,\n} from 'react-router-dom';\nimport useUtilsFicha from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\n\nconst useFormRootPath = () => {\n const location = useLocation();\n const createMatch = matchPath(':resource/create/*', location.pathname);\n const editMatch = matchPath(':resource/:id/*', location.pathname);\n\n if (createMatch) {\n return createMatch.pathnameBase;\n }\n\n if (editMatch) {\n return editMatch.pathnameBase;\n }\n\n return '';\n};\n\nexport const TabbedFormView = props => {\n const {\n children,\n className,\n component: Component = DefaultComponent,\n formRootPathname,\n syncWithLocation = true,\n tabs = DefaultTabs,\n toolbar = DefaultToolbar,\n onChange,\n ...rest\n } = props;\n const location = useLocation();\n const resolvedPath = useResolvedPath('');\n const resource = useResourceContext(props);\n const [tabValue, setTabValue] = useState(0);\n const {\n fichaProps: { etrs },\n } = useContext(FichaContext);\n const utils = useUtilsFicha({ ...props, etrs });\n const { estado } = useContext(FichaContext);\n\n const handleTabChange = (event, value) => {\n if (!syncWithLocation) {\n setTabValue(value);\n if (onChange) {\n onChange(\n utils,\n estado,\n {\n newTab: value,\n prevTab: tabValue,\n setTab: setTabValue,\n },\n event\n );\n }\n }\n };\n\n const renderTabHeaders = () =>\n cloneElement(\n tabs,\n {\n onChange: handleTabChange,\n syncWithLocation,\n url: formRootPathname,\n value: tabValue,\n },\n children\n );\n\n return (\n <Root\n className={clsx('tabbed-form', className)}\n {...sanitizeRestPropsView(rest)}\n >\n {syncWithLocation ? (\n <Routes>\n <Route path=\"/*\" element={renderTabHeaders()} />\n </Routes>\n ) : (\n renderTabHeaders()\n )}\n <Divider />\n <Component>\n {/* All tabs are rendered (not only the one in focus), to allow validation\n on tabs not in focus. The tabs receive a `hidden` property, which they'll\n use to hide the tab using CSS if it's not the one in focus.\n See https://github.com/marmelab/react-admin/issues/1866 */}\n {Children.map(children, (tab, index) => {\n if (!tab) {\n return null;\n }\n const tabPath = getTabbedFormTabFullPath(tab, index);\n const hidden = syncWithLocation\n ? !matchPath(\n `${resolvedPath.pathname}/${tabPath}`,\n location.pathname\n )\n : tabValue !== index;\n\n return isValidElement(tab)\n ? React.cloneElement(tab, {\n intent: 'content',\n resource,\n hidden,\n value: syncWithLocation ? tabPath : index,\n })\n : null;\n })}\n </Component>\n {toolbar !== false ? toolbar : null}\n </Root>\n );\n};\n\nconst DefaultTabs = <TabbedFormTabs />;\nconst DefaultComponent = ({ children }) => (\n <CardContent>{children}</CardContent>\n);\nconst DefaultToolbar = <Toolbar />;\n\nconst PREFIX = 'RaTabbedForm';\n\nexport const TabbedFormClasses = {\n errorTabButton: `${PREFIX}-errorTabButton`,\n};\n\nconst Root = styled('div', {\n name: PREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => ({\n [`& .MuiTab-root.${TabbedFormClasses.errorTabButton}`]: {\n color: theme.palette.error.main,\n },\n}));\n\nconst sanitizeRestPropsView = ({ record, resource, ...rest }) => rest;\n\nexport const TabbedForm = props => {\n const { onChange, ...formProps } = props;\n const formRootPathname = useFormRootPath();\n\n return (\n <Form formRootPathname={formRootPathname} {...formProps}>\n <TabbedFormView\n formRootPathname={formRootPathname}\n {...sanitizeRestProps(props)}\n />\n </Form>\n );\n};\n\nTabbedForm.Tab = FormTab;\n\nconst sanitizeRestProps = ({\n criteriaMode,\n defaultValues,\n delayError,\n formRootPathname,\n mode,\n noValidate,\n onSubmit,\n record,\n resetOptions,\n resolver,\n reValidateMode,\n sanitizeEmptyValues,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n validate,\n warnWhenUnsavedChanges,\n ...rest\n}) => rest;\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\nimport { TabbedForm } from './TabbedForm';\nimport { useFormSubmit } from './utilsForm';\n\nexport const TabbedFormEtriek = props => {\n const {\n initialValues,\n fichaProps: { config = {} },\n } = useContext(FichaContext);\n const submit = useFormSubmit(props);\n\n if (!initialValues) return null;\n\n return (\n <TabbedForm\n mode=\"onBlur\"\n {...props}\n onSubmit={submit}\n defaultValues={initialValues}\n component={FormContainer}\n {...config}\n /*toolbar={<ToolbarFicha/>}*/\n />\n );\n};\n\nTabbedFormEtriek.defaultProps = {\n syncWithLocation: false,\n};\n","import { defaultTheme } from 'react-admin';\r\n\r\n// TODO: Probablemente no sea necesario sobreescribir nada de los temas\r\n\r\nconst darkTheme = {\r\n ...defaultTheme,\r\n palette: {\r\n ...defaultTheme.palette,\r\n mode: 'dark',\r\n },\r\n components: {\r\n ...defaultTheme.components,\r\n MuiTextField: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n MuiFormControl: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n RaSidebar: {\r\n root: {\r\n drawerPaper: {\r\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\r\n },\r\n },\r\n },\r\n RaRichTextInput: {\r\n root: {\r\n '@global': {\r\n '.ra-rich-text-input': {\r\n '& .ql-editor': {\r\n '& p:not(:last-child)': {\r\n marginBottom: '0',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst lightTheme = {\r\n ...defaultTheme,\r\n palette: {\r\n ...defaultTheme.palette,\r\n mode: 'light',\r\n },\r\n components: {\r\n ...defaultTheme.components,\r\n MuiTextField: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n MuiFormControl: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n RaSidebar: {\r\n root: {\r\n drawerPaper: {\r\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\r\n },\r\n },\r\n },\r\n RaRichTextInput: {\r\n root: {\r\n '@global': {\r\n '.ra-rich-text-input': {\r\n '& .ql-editor': {\r\n '& p:not(:last-child)': {\r\n marginBottom: '0',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport { lightTheme, darkTheme };\r\n","import * as React from 'react';\nimport { useCallback, useState } from 'react';\nimport { Button, SaveButton, Toolbar, useNotify } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport { useUtils } from '../utils';\n\nconst FormToolbar = props => {\n const {\n jsBotoneraPart,\n estado,\n buttons,\n incluyeAcciones = false,\n resource,\n ...rest\n } = props;\n const [disabled, setDisabled] = useState(false);\n const utils = useUtils(rest);\n const notify = useNotify();\n const { trigger } = useFormContext();\n\n const jsBotoneraGral = useCallback(\n async (e, estado, id) => {\n if (typeof jsBotoneraPart === 'function') {\n const valid = await trigger();\n if (valid) {\n setDisabled(true);\n jsBotoneraPart(utils, estado, id, e).finally(() => {\n setDisabled(false);\n });\n } else {\n notify('Formulario no válido', { type: 'warning' });\n }\n } else {\n notify('Falta implementar jsBotoneraPart', {\n type: 'error',\n });\n }\n },\n [trigger, jsBotoneraPart, utils, notify]\n );\n\n return (\n <Toolbar>\n {incluyeAcciones ? <SaveButton sx={{ mr: 1 }} /> : null}\n {buttons.map(button => (\n <Button\n key={button.name}\n label={button.label}\n disabled={disabled}\n onClick={async e => {\n await jsBotoneraGral(e, estado, button.name);\n }}\n >\n {button.icon}\n </Button>\n ))}\n {/*{incluyeAcciones ? (\n <DeleteButton resource={resource} sx={{ ml: 1 }} />\n ) : null}*/}\n </Toolbar>\n );\n};\n\nexport default FormToolbar;\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 from_camera: 'From camera',\r\n take_foto: 'Take photo',\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","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\nspanishMessages.ra.message.delete_title = 'Eliminar';\r\nspanishMessages.ra.input.file.upload_single = 'Seleccione o arrastre archivo';\r\nspanishMessages.ra.input.image.upload_single = 'Seleccione o arrastre imagen';\r\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n from_camera: 'Desde camara',\r\n take_foto: 'Tomar foto',\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 * as React from 'react';\r\nimport { BooleanField as RaBooleanField, useRecordContext } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst BooleanField = props => {\r\n const { propsContenido, hidden } = useFieldController(props);\r\n const record = useRecordContext();\r\n const boolRecord = JSON.parse(JSON.stringify(record));\r\n const value = boolRecord[props.source];\r\n boolRecord[props.source] = value != '' && value != '0';\r\n\r\n return (\r\n !hidden && <RaBooleanField {...propsContenido} record={boolRecord} />\r\n );\r\n};\r\n\r\nexport default BooleanField;\r\n","import { PhotoCamera } from '@mui/icons-material';\r\nimport { Box, Button } from '@mui/material';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport AddAPhotoIcon from '@mui/icons-material/AddAPhoto';\r\nimport React, { Fragment, useEffect, useState } from 'react';\r\nimport { Confirm, useNotify, useTranslate } from 'react-admin';\r\n\r\nconst FotoButton = props => {\r\n const [open, setOpen] = useState(false);\r\n const [fotoTomada, setFotoTomada] = useState(false);\r\n const notify = useNotify();\r\n const translate = useTranslate();\r\n const { field, sx } = props;\r\n\r\n useEffect(() => {\r\n if (open) {\r\n const openCamera = async () => {\r\n let stream = null;\r\n try {\r\n stream = await navigator.mediaDevices.getUserMedia({\r\n video: true,\r\n audio: false,\r\n });\r\n document.getElementById('video').srcObject = stream;\r\n } catch (error) {\r\n notify(error.message, { type: 'error' });\r\n setOpen(false);\r\n }\r\n };\r\n openCamera();\r\n }\r\n }, [open]);\r\n\r\n return (\r\n <Fragment>\r\n <Confirm\r\n isOpen={open}\r\n loading={!open}\r\n maxWidth=\"sm\"\r\n title=\"\"\r\n content={\r\n <Box display=\"flex\" flexDirection=\"column\">\r\n <Button\r\n variant=\"outlined\"\r\n disableElevation\r\n onClick={() => {\r\n const video = document.getElementById('video');\r\n const canvas =\r\n document.getElementById('canvas');\r\n canvas\r\n .getContext('2d')\r\n .drawImage(\r\n video,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height\r\n );\r\n setFotoTomada(true);\r\n }}\r\n startIcon={<PhotoCamera />}\r\n >\r\n {translate('take_foto')}\r\n </Button>\r\n <video\r\n id=\"video\"\r\n width=\"320\"\r\n height=\"240\"\r\n autoPlay\r\n style={{ border: 'solid 1px' }}\r\n />\r\n <div\r\n id=\"dataurl-container\"\r\n style={{\r\n border: 'dotted 1px',\r\n width: 320,\r\n height: 240,\r\n marginTop: 4,\r\n }}\r\n >\r\n <canvas id=\"canvas\" width=\"320\" height=\"240\" />\r\n </div>\r\n </Box>\r\n }\r\n onConfirm={e => {\r\n if (fotoTomada) {\r\n // Convertir la imagen capturada en un Blob\r\n document\r\n .getElementById('canvas')\r\n .toBlob(function (blob) {\r\n const video = document.getElementById('video');\r\n const fileInput =\r\n document.getElementById(field);\r\n const container = new DataTransfer();\r\n let file = new File(\r\n [blob],\r\n `${field}-img.jpg`,\r\n {\r\n type: 'image/jpeg',\r\n lastModified: new Date().getTime(),\r\n }\r\n );\r\n container.items.add(file);\r\n\r\n fileInput.files = container.files;\r\n fileInput.dispatchEvent(\r\n new Event('change', { bubbles: true })\r\n );\r\n // Detener el streaming de la cámara\r\n video.srcObject\r\n .getTracks()\r\n .forEach(track => track.stop());\r\n\r\n setFotoTomada(false);\r\n setOpen(false);\r\n }, 'image/jpeg');\r\n }\r\n }}\r\n onClose={() => {\r\n setFotoTomada(false);\r\n setOpen(false);\r\n }}\r\n />\r\n <Tooltip title={translate('from_camera')}>\r\n <Button\r\n sx={sx}\r\n onClick={() => {\r\n setOpen(true);\r\n }}\r\n >\r\n <AddAPhotoIcon />\r\n </Button>\r\n </Tooltip>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default FotoButton;\r\n","import Divider from '@mui/material/Divider';\r\nimport Stack from '@mui/material/Stack';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport { useMediaQuery } from '@mui/material';\r\nimport VisibilityIcon from '@mui/icons-material/Visibility';\r\nimport Box from '@mui/material/Box';\r\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Link from '@mui/material/Link';\r\nimport * as React from 'react';\r\nimport {\r\n useRecordContext,\r\n FileInput,\r\n ImageField,\r\n ImageInput,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport FotoButton from './FotoButton';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst formatFile = (value, prefix) => {\r\n if (!value || value === '') {\r\n // Evito que se muestre el icono de remover en el preview\r\n return undefined;\r\n } else if (typeof value === 'string') {\r\n return { src: `${prefix}/${value}` };\r\n } else if (value instanceof Array) {\r\n return value.map(v => ({ src: `${prefix}/${v}` }));\r\n } else {\r\n return value;\r\n }\r\n};\r\n\r\nconst Camino = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const translate = useTranslate();\r\n const record = useRecordContext(props);\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\r\n const { getValues } = useFormContext();\r\n const {\r\n options = {},\r\n disabled = false,\r\n tipo = 'file',\r\n camera = true,\r\n prefix,\r\n accept = '',\r\n download = true,\r\n ...restProps\r\n } = propsContenido;\r\n\r\n const src = getValues()[restProps.source]?.src;\r\n const ruta = record ? `${prefix}/${record[restProps.source]}` : undefined;\r\n const href = src ?? ruta ?? '#';\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'image' ? (\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"flex-start\"\r\n justifyContent=\"flex-start\"\r\n divider={\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n }\r\n >\r\n <ImageInput\r\n maxSize={5000000}\r\n {...restProps}\r\n options={{ disabled, ...options }}\r\n format={value => formatFile(value, prefix)}\r\n placeholder={translate('ra.input.image.upload_single')}\r\n accept=\"image/*\"\r\n inputProps={{\r\n capture: 'user',\r\n }}\r\n >\r\n <ImageField source=\"src\" title=\"\" />\r\n </ImageInput>\r\n {!isSmall && (\r\n <FotoButton sx={{ mt: 3 }} field={restProps.source} />\r\n )}\r\n </Stack>\r\n ) : (\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"flex-start\"\r\n justifyContent=\"flex-start\"\r\n divider={\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n }\r\n >\r\n <FileInput\r\n maxSize={5000000}\r\n {...restProps}\r\n options={{ disabled, ...options }}\r\n format={value => formatFile(value, prefix)}\r\n placeholder={translate('ra.input.file.upload_single')}\r\n accept={accept}\r\n >\r\n <Box sx={{ display: 'inline-block', ml: 1 }}>\r\n <IconButton\r\n component={Link}\r\n href={href}\r\n target=\"_blank\"\r\n size=\"small\"\r\n title=\"Ver adjunto\"\r\n >\r\n <VisibilityIcon color=\"primary\" />\r\n </IconButton>\r\n <IconButton\r\n sx={{ ml: 1 }}\r\n component={Link}\r\n href={href}\r\n download\r\n target=\"_blank\"\r\n size=\"small\"\r\n title=\"Descargar adjunto\"\r\n >\r\n <CloudDownloadIcon color=\"success\" />\r\n </IconButton>\r\n </Box>\r\n </FileInput>\r\n {camera && (\r\n <FotoButton sx={{ mt: 3 }} field={restProps.source} />\r\n )}\r\n </Stack>\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 {\r\n propsContenido: { sx, ...rest },\r\n hidden,\r\n } = useContenidoController(props);\r\n\r\n return (\r\n !hidden && (\r\n <BooleanInput\r\n {...rest}\r\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\r\n />\r\n )\r\n );\r\n};\r\n\r\nexport default CheckBox;\r\n","import { Box, Tooltip } from '@mui/material';\nimport * as React from 'react';\nimport { forwardRef, Fragment, useEffect, useRef } from 'react';\nimport {\n AutocompleteInput,\n ReferenceInput,\n useChoicesContext,\n} from 'react-admin';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { deleteRecargarComboBox } from '../../utils';\nimport useContenidoController from './useContenidoController';\n\nconst RefTooltip = forwardRef((props, ref) => <Tooltip ref={ref} {...props} />);\n\nexport const SelectInputEtriek = props => {\n const { callback, sx, isTC, onChange, ...rest } = props;\n const { isLoading, allChoices, availableChoices } = useChoicesContext();\n const inputRef = useRef(null);\n\n useEffect(() => {\n if (!isLoading) {\n // Llamo al callback de recargarComboBox pasándole los nuevos items\n if (typeof callback === 'function') {\n callback(Object.values([allChoices]));\n }\n }\n }, [allChoices, callback, isLoading]);\n\n return (\n <RefTooltip title={inputRef.current?.value || ''} placement=\"top\" arrow>\n <Box\n sx={\n isTC\n ? { margin: 1, ...sx }\n : {\n display: { xs: 'inherit', md: 'inline-flex' },\n verticalAlign: 'top',\n margin: 1,\n ...sx,\n }\n }\n width={isTC ? {} : { xs: '100%', md: 'auto' }}\n >\n <AutocompleteInput\n size=\"small\"\n sx={isTC ? { width: '100% !important' } : {}}\n {...rest}\n onChange={value => {\n onChange({\n target: {\n value,\n },\n label: availableChoices.filter(\n item => item.id === value\n )[0]?.etiqueta,\n });\n }}\n TextFieldProps={{ inputRef }}\n />\n </Box>\n </RefTooltip>\n );\n};\n\nconst ComboBox = props => {\n const { propsContenido, hidden } = useContenidoController(props);\n const dispatch = useDispatch();\n const {\n queryOptions,\n asistant: Asistant,\n asistantResource,\n ...restPropsContenido\n } = propsContenido;\n\n const { source, reference } = props;\n const recarga_cb = useSelector(state => {\n const rcb = state.reload_cb\n ? state.reload_cb.filter(item => item.id === source)\n : [];\n return rcb[0] ? rcb[0] : null;\n });\n const respaldoFiltro = useRef(recarga_cb);\n const filter =\n recarga_cb === null && respaldoFiltro.current\n ? respaldoFiltro.current\n : recarga_cb;\n\n let callback, finalFilter;\n if (filter) {\n const { callback: tempCallback, ...restFilter } = filter;\n callback = tempCallback;\n finalFilter = restFilter;\n }\n\n useEffect(() => {\n if (recarga_cb !== null) {\n respaldoFiltro.current = recarga_cb;\n dispatch(deleteRecargarComboBox(source));\n }\n }, [JSON.stringify(recarga_cb)]);\n\n return !hidden ? (\n <Fragment>\n <ReferenceInput\n reference={reference}\n source={source}\n perPage={500}\n filter={finalFilter}\n queryOptions={queryOptions}\n >\n <SelectInputEtriek\n {...restPropsContenido}\n callback={callback}\n optionText=\"etiqueta\"\n optionValue={source}\n />\n </ReferenceInput>\n {Asistant ? (\n <Asistant\n resource={asistantResource}\n tipo=\"ventana\"\n inline\n ButtonProps={{\n sx: { verticalAlign: 'inherit' },\n }}\n />\n ) : null}\n </Fragment>\n ) : null;\n};\nexport default ComboBox;\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 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 { 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 { source, reference } = props;\r\n\r\n return !hidden ? (\r\n <ReferenceArrayInput source={source} reference={reference}>\r\n <SelectArrayInput\r\n {...propsContenido}\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 * 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 { useContext } from 'react';\r\nimport { RadioButtonGroupInput, ReferenceInput } from 'react-admin';\r\nimport { FichaContext } from '../FichaContext';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst RadioButton = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const { isLoading } = useContext(FichaContext);\r\n const { source, reference } = props;\r\n\r\n return !isLoading && !hidden ? (\r\n <ReferenceInput source={source} reference={reference}>\r\n <RadioButtonGroupInput\r\n {...propsContenido}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceInput>\r\n ) : null;\r\n};\r\n\r\nexport default RadioButton;\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 ActionCheck from '@mui/icons-material/CheckCircle';\nimport AlertError from '@mui/icons-material/ErrorOutline';\nimport { 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 PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { useRecordSelection, useTranslate } from 'react-admin';\nimport Draggable from 'react-draggable';\n//import TreeWithDetails from \"../tree-ts/TreeWithDetails\";\n\n/*const 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 }),\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 ConfirmIcon,\n CancelIcon,\n onClose,\n onConfirm,\n contentResource,\n translateOptions = {},\n } = 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 maxWidth=\"md\"\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 sx={{ paddingRight: '0.5em' }} />\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 sx={{ paddingRight: '0.5em' }} />\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 CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport { Box } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport * as React from 'react';\nimport { Fragment, useCallback, useEffect, useState } from 'react';\nimport { TextInput } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport ListActionsEtriek from '../../ListActionEtriek';\nimport useContenidoController from '../useContenidoController';\nimport FiltroAsis from './FiltroAsis';\n\nconst BulkActions = () => <Fragment />;\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v });\n return v;\n};\n\nconst TextBoxSelection = props => {\n const { asistant, asistantResource, source, sx, ...rest } = props;\n const [open, setOpen] = useState(false);\n const {\n hidden,\n propsContenido: { disabled, label, onChange },\n } = useContenidoController(props);\n const form = useFormContext();\n\n useEffect(() => {\n // No funciona el defaultValue\n handleTodos();\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, selectedIds) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n onChange(e);\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n onChange(e);\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n onChange(e);\n };\n\n return !hidden ? (\n <>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\n >\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroAsis\n isOpen={open}\n title={`Selección de ${label}`}\n contentResource={asistantResource}\n content={React.createElement(asistant, {\n bulkActionButtons: <BulkActions />,\n hasCreate: false,\n hasEdit: false,\n exporter: false,\n actions: <ListActionsEtriek />,\n actionButtons: false,\n disableMultipleRowSelection: false,\n resource: asistantResource,\n })}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n ) : null;\n};\n\nexport default TextBoxSelection;\n","import ActionCheck from '@mui/icons-material/CheckCircle';\r\nimport AlertError from '@mui/icons-material/ErrorOutline';\r\nimport { Box, Paper } from '@mui/material';\r\nimport Button from '@mui/material/Button';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { TreeView } from 'devextreme-react';\r\nimport PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useCallback } from 'react';\r\nimport {\r\n Datagrid,\r\n List,\r\n TextField,\r\n useDataProvider,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport Draggable from 'react-draggable';\r\n\r\nconst AsistenteList = props => (\r\n <List\r\n {...props}\r\n hasCreate={false}\r\n exporter={false}\r\n perPage={50}\r\n empty={false}\r\n title=\" \"\r\n disableSyncWithLocation\r\n >\r\n <Datagrid bulkActionButtons={<span />}>\r\n <TextField source=\"funced\" sortable label=\"Cédula\" />\r\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\r\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\r\n </Datagrid>\r\n </List>\r\n);\r\n\r\nconst filtroInicial = { fillista: 'empcod=-1' };\r\n\r\nconst TreeWithList = props => {\r\n const [filtro, setFiltro] = React.useState(filtroInicial);\r\n const dataProvider = useDataProvider();\r\n\r\n const onClick = useCallback(\r\n e => {\r\n setFiltro({ fillista: e.node.key });\r\n },\r\n [setFiltro]\r\n );\r\n\r\n const createChildren = useCallback(\r\n parent => {\r\n const parentId = parent ? parent.itemData.id : '';\r\n\r\n return dataProvider\r\n .getChildNodes('form_224', { parentId: parentId })\r\n .then(response => response.data)\r\n .catch(() => {\r\n throw new Error('Data Loading Error');\r\n });\r\n },\r\n [dataProvider]\r\n );\r\n\r\n return (\r\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\r\n <Box flexGrow={1}>\r\n <TreeView\r\n id=\"funcionarios-treeview\"\r\n dataStructure=\"plain\"\r\n rootValue=\"\"\r\n onItemClick={onClick}\r\n createChildren={createChildren}\r\n />\r\n </Box>\r\n <Box flexGrow={2}>\r\n <AsistenteList resource=\"form_224\" filter={filtro} />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\n/*const useStyles = makeStyles(\r\n theme => ({\r\n confirmPrimary: {\r\n color: theme.palette.primary.main,\r\n },\r\n confirmWarning: {\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: 'RaConfirm' }\r\n);*/\r\n\r\nconst PaperComponent = props => (\r\n <Draggable\r\n handle=\"#draggable-dialog-title\"\r\n cancel={'[class*=\"MuiDialogContent-root\"]'}\r\n >\r\n <Paper {...props} />\r\n </Draggable>\r\n);\r\n\r\nconst cursorStyle = { cursor: 'move' };\r\n\r\nconst FiltroFuncionarios = props => {\r\n const {\r\n isOpen,\r\n isLoading,\r\n title,\r\n cancel,\r\n ConfirmIcon,\r\n CancelIcon,\r\n onClose,\r\n onConfirm,\r\n translateOptions = {},\r\n } = props;\r\n const translate = useTranslate();\r\n\r\n const handleConfirm = useCallback(\r\n (e, button) => {\r\n e.stopPropagation();\r\n onConfirm(e, button);\r\n },\r\n [onConfirm]\r\n );\r\n\r\n const handleClick = useCallback(e => {\r\n e.stopPropagation();\r\n }, []);\r\n\r\n return (\r\n <Dialog\r\n open={isOpen}\r\n onClose={onClose}\r\n onClick={handleClick}\r\n fullWidth\r\n maxWidth=\"lg\"\r\n PaperComponent={PaperComponent}\r\n aria-labelledby=\"draggable-dialog-title\"\r\n >\r\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\r\n {translate(title, { _: title, ...translateOptions })}\r\n </DialogTitle>\r\n <DialogContent dividers={true}>\r\n <TreeWithList />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button disabled={isLoading} onClick={onClose}>\r\n <CancelIcon sx={{ paddingRight: '0.5em' }} />\r\n {translate(cancel, { _: cancel })}\r\n </Button>\r\n <Button\r\n disabled={isLoading}\r\n onClick={e => handleConfirm(e, 'yes')}\r\n /*className={classnames('ra-confirm', {\r\n [classes.confirmWarning]: confirmColor === 'warning',\r\n [classes.confirmPrimary]: confirmColor === 'primary',\r\n })}*/\r\n autoFocus\r\n >\r\n <ConfirmIcon sx={{ paddingRight: '0.5em' }} />\r\n {translate('ra.action.confirm')}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nFiltroFuncionarios.propTypes = {\r\n cancel: PropTypes.string,\r\n classes: PropTypes.object,\r\n confirm: PropTypes.string,\r\n confirmColor: PropTypes.string,\r\n ConfirmIcon: PropTypes.elementType,\r\n CancelIcon: PropTypes.elementType,\r\n isOpen: PropTypes.bool,\r\n isLoading: PropTypes.bool,\r\n onClose: PropTypes.func.isRequired,\r\n onConfirm: PropTypes.func.isRequired,\r\n title: PropTypes.string.isRequired,\r\n};\r\n\r\nFiltroFuncionarios.defaultProps = {\r\n cancel: 'ra.action.cancel',\r\n classes: {},\r\n confirmColor: 'primary',\r\n ConfirmIcon: ActionCheck,\r\n CancelIcon: AlertError,\r\n isOpen: false,\r\n};\r\n\r\nexport default FiltroFuncionarios;\r\n","import CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport { Box } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport * as React from 'react';\nimport { Fragment, useCallback, useContext, useEffect, useState } from 'react';\nimport { TextInput, useRecordSelection } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport useUtilsFicha from '../../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../../FichaContext';\nimport useContenidoController from '../useContenidoController';\nimport FiltroFuncionarios from './FiltroFuncionarios';\n\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n if (String(v) === v) {\n return v === '' ? 'Ninguno' : 'Selección (1)';\n } else if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v })\n return v;\n};\n\nconst TBSF = props => {\n const {\n asistant,\n asistantResource,\n allowNone = true,\n allowAll = true,\n source,\n sx,\n onChange: onChangeProps,\n ...rest\n } = props;\n const [selectedIds] = useRecordSelection('form_224');\n const [open, setOpen] = useState(false);\n const form = useFormContext();\n const { estado, fichaProps = {} } = useContext(FichaContext);\n const asisEtr = useContext(FormEtrGridContext);\n const {\n hidden,\n propsContenido: { disabled, label = 'Funcionarios' },\n } = useContenidoController(props);\n const { [source]: initialProps = {}, etrs } = fichaProps;\n const utils = useUtilsFicha({ ...props, etrs, asisEtr });\n const onChange =\n initialProps.onChange === undefined\n ? onChangeProps\n : initialProps.onChange;\n\n useEffect(() => {\n // No funciona el defaultValue\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, button) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n onChange && onChange(utils, estado, e);\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n onChange && onChange(utils, estado, e);\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n onChange && onChange(utils, estado, e);\n };\n\n return !hidden ? (\n <>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\n >\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n {allowNone && (\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n )}\n {allowAll && (\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n )}\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroFuncionarios\n isOpen={open}\n title={`Selección de ${label}`}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n ) : null;\n};\n\nexport default TBSF;\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 { DateInput, DateTimeInput, NumberInput, TextInput } 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\r\n useEffect(() => {\r\n if (propsContenido.value) {\r\n form.setValue(props.source, propsContenido.value);\r\n }\r\n });\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return !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 ) : null;\r\n};\r\n\r\nexport default TextBox;\r\n","import { Box } from '@mui/material';\r\nimport * as React from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport ComboBox from './ComboBox';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextCombo = props => {\r\n const { source, label, sx } = props;\r\n const { hidden } = useContenidoController(props);\r\n\r\n return !hidden ? (\r\n <Box\r\n sx={{\r\n ...sx,\r\n display: 'inline-flex',\r\n alignItems: 'flex-start',\r\n marginLeft: { md: 1 },\r\n marginBottom: -1,\r\n width: { xs: '100%', md: 'calc(24vw + 1em)' },\r\n }}\r\n >\r\n <TextInput\r\n {...props}\r\n label=\"\"\r\n source={source}\r\n sx={{ flex: 1, marginTop: 1 }}\r\n />\r\n <ComboBox\r\n {...props}\r\n source={source}\r\n label={label}\r\n isTC\r\n sx={{ flex: 3 }}\r\n />\r\n </Box>\r\n ) : null;\r\n};\r\nexport default TextCombo;\r\n"],"names":["forwardRef","props","ref","useTranslate","onClose","useUserMenu","useResourceDefinitions","resourcesDefinitions","React.createElement","MenuItem","Link","ListItemIcon","LockIcon","ListItemText","translate","existePassword","VpnLockIcon","UserMenu","ConfigurationMenu","Logout","useMediaQuery","theme","breakpoints","up","AppBar","CustomUserMenu","Typography","variant","color","sx","flex","textOverflow","whiteSpace","overflow","id","isLargeEnough","Box","component","createContext","children","open","setOpen","useState","setProps","useMemo","show","hide","AsistenteContext","Provider","value","context","useContext","ProgressContext","method","params","callback","type","payload","hidden","disabled","required","error","label","useDispatch","dispatch","recargarComboBox","setHiddenAction","disable","setDisableAction","setRequireAction","setErrorAction","setLabelAction","resource","options","useDataProvider","mutateAsync","isLoading","useMutation","paramsDp","getJson","useGetJson","useCallback","onSuccess","onError","useListContext","useNotify","useRedirect","useRefresh","useResourceContext","useUnselectAll","useAsistente","ajax","useAjax","data","notify","redirect","refresh","refetch","unselectAll","asistente","useRecargarComboBox","useSetHidden","useSetDisable","useSetRequire","useSetError","useSetLabel","useFormProgress","progress","setHidden","setDisable","setRequire","setError","setLabel","etrs","useFormContext","asisEtr","form","trigger","source","setTimeout","undefined","estado","fichaProps","FichaContext","[object Object]","initialProps","hiddenProps","rest","hiddenInitial","useContenido","useDefaultHook","restInitialProps","oculto","dynamicPropsRest","dynamicProps","propsContenido","tipo","useFieldController","NumberField","txtProps","DateField","RaTextField","etrSource","reference","ReferenceField","queryOptions","meta","etr","record","row","TextField","values","apiRef","enviarTodo","getSubmitValues","current","getRowsCount","updateRows","finalValues","Array","from","getRowModels","item","claveFila","getValues","inputValues","push","_id","setValue","shouldDirty","_estado","findIndex","getRowIndexRelativeToVisibleRows","currentIndex","indiceVisual","get","_action","splice","length","fila","propsEtr","useFormulario","addRow","useAddRow","finalProps","editRow","useEditRow","deleteRow","useDeleteRow","clear","setRows","api","styled","display","flexDirection","alignItems","justifyContent","height","& .ant-empty-img-1","fill","palette","mode","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","StyledGridOverlay","width","viewBox","aria-hidden","focusable","fillRule","transform","className","cx","cy","rx","ry","d","mt","Button","name","overridesResolver","styles","root","primary","main","&:hover","backgroundColor","alpha","@media (hover: none)","FormEtrGridContext","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","Form","dummyRecord","onSubmit","EtrChildrenWrapper","EtrFormDialog","propTypes","PropTypes","onClick","icon","save","render","formPadre","editors","recordPadre","camposClaveFila","dirtyFields","isValid","useFormState","etrActualProps","onAfterRenderAsistente","restEtrActualProps","useUtilsFicha","formAsistente","useEffect","utils","DialogContent","Stack","spacing","Children","map","child","index","cloneElement","defaultValue","margin","indexOf","DialogActions","SaveButton","Object","keys","e","stopPropagation","IconCancel","useSafeSetState","useGridApiContext","AddIcon","EtrDialogChild","EditIcon","confirmTitle","confirmContent","Fragment","StyledButton","key","ActionDelete","Confirm","isOpen","title","content","onConfirm","createTheme","esES","filterBy","claves","sortModel","columns","defColumns","allowAdd","allowRemove","enableLoad","disabledProp","rows","useRecordContext","field","useInput","isLoadingParent","etrProps","disabledContext","sort","setSort","sortField","sortDir","split","forEach","filter","comparison","useGetList","pagination","page","perPage","order","enabled","headerName","headerAlign","sortable","disableClickEventBubbling","renderCell","rowNode","EtrEditButton","unshift","renderHeader","EtrCreateButton","EtrDeleteButton","JSON","stringify","Paper","borderRadius","marginTop","StyledEngineProvider","injectFirst","ThemeProvider","DataGridPremium","& .MuiDataGrid-columnsContainer","& .MuiDataGrid-iconSeparator","pageSize","finalColumns","model","noRowsOverlay","CustomNoRowsOverlay","initialState","initialStateProps","isLoadingFicha","useGridApiRef","useKeepGroupedColumnsHidden","onRenderGrilla","onLoadGrilla","useUtilsGrilla","React","Slide","controles","aceptar","cancelar","botonesExtra","showAceptar","showCancelar","formDividers","dialogProps","Transition","dividers","handler","i","CancelIcon","position","Toolbar","disableGutters","ml","alignIcon","size","to","locationDescriptor","_","getLinkParams","Tooltip","translatedLabel","IconButton","linkParams","GridButton","oneOf","element","string","oneOfType","bool","replace","state","true","_scrollToTop","false","defaultIcon","scrollToTop","useCreatePath","createPath","scrollStates","String","ContentCreate","ImageEye","ShowGridButton","any","memo","nextProps","isRowEditable","operatorParamsToModel","entry","filterModel","items","reduce","acc","operator","operatorModelToParams","has","actionButtons","bulkActionButtons","desktopSize","hasEdit","convertFilterModelToFilterValues","defaultConvertFilterModelToFilterValues","claveNuevo","mobileColumns","hasVerFicha","disableMultipleRowSelection","selectedIds","onSelect","displayedFilters","setFilters","pinnedColumns","right","useInitGrilla","column","translatedColumns","concat","hideable","getActions","getRowNode","esEditable","esDisabled","EditGridButton","button","GridActionsCellItem","CreateGridButton","replaceAll","trim","isValidElement","Asistente","DatagridRoot","DatagridClasses","hasBulkActionButtons","BulkActionsToolbar","tableWrapper","gridTemplateRows","rowSelectionModel","isRowSelected","primaryText","pt","find","pb","pl","valueGetter","jsxMobile","SettingsIcon","SimpleList","linkType","down","useResourceDefinition","GrillaSm","GrillaLg","filterValues","tabs","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","onChange","event","Tab","charAt","toUpperCase","slice","Divider","useGetOne","useSelector","configInputs","reduxDisabled","reduxHidden","reduxRequired","reduxError","reduxLabel","configInput","etrRequerido","onFocus","onFocusProps","onChangeProps","onBlur","onBlurProps","disabledProps","validate","propValidate","onFocusInitial","onBlurInitial","onChangeInitial","disabledInitial","initValidate","inEtrGrid","useRef","hiddenDinamico","disabledDinamico","onFocusDinamico","onChangeDinamico","onBlurDinamico","dynamicValidate","prev","previousValue","mb","xs","md","mr","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","isArray","reduxValidate","reduxValidateError","isNaN","getDate","getFullYear","toString","getMonth","yyyy","MM","dd","dateRegex","test","match","dateTimeRegex","tmpMatch","now","setHours","setMinutes","exec","substring","useContenidoController","gutterBottom","hasShow","hasList","TopToolbar","sanitizeRestProps","ListButton","ChevronLeft","ShowButton","minValue","inputFormat","sourceFechaInicio","allValues","inicio","reverse","join","isAfter","iniDate","finDate","message","args","menor","idi","locale","enLocale","esLocale","ruta","nombre","document","createElement","fakeLink","style","body","appendChild","setAttribute","click","dateString","day","month","year","Number","dateTimeString","datePart","timePart","hour","minute","date","padStart","toLocaleString","hour12","getFormcodFromResource","etiqueta","defaultTitle","StyledDialogTitle","aria-label","FormDialogTitleClasses","closeButton","CloseIcon","top","grey","FormDialogContext","close","finalContext","useFormDialogContext","CreateDialogView","Routes","Route","path","mutationOptions","mutationOptionsProp","redirectTo","useQueryClient","messageArgs","smart_count","queryClient","invalidateQueries","useCreateController","controllerProps","handleClose","FormDialogTitle","CreateContextProvider","basePath","hasCreate","history","loaded","loading","location","permissions","setIsOpen","inline","dialog","ButtonProps","contextValue","OpenInNewIcon","createDialogProps","FormDialogButton","CreateDialog","ContentAdd","tab","contenido","FormClasses","maxHeight","&.MuiAutocomplete-root","onBeforeSubmitFicha","useUtilsSubmit","useSaveContext","async","submit","valid","dontSave","CreateInDialogButton","Create","initialValues","useNuevo","useInitFicha","ProgressProvider","AsistenteProvider","CreateComponent","panel","CreateEtriek","func","StyledCreate","getClassesForm","ListDialogView","useListController","ListContextProvider","listDialogProps","ListDialog","ListInDialogButton","List","r","t","f","n","clsx","arguments","ListEtriek","useGrilla","deleteOne","useDelete","DeleteButtonNoWarning","defaultProps","sanitizedData","mutationMode","useEditController","Edit","defaultTransform","dialogText","hasAccept","hasCancel","aria-labelledby","alwaysEnable","pointerEvents","opacity","onRenderFicha","onLoadFicha","CardContent","blockSx","objVacio","CircularProgress","left","thickness","config","useFormSubmit","SimpleForm","FormContainer","FormEtriek","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","header","placement","Collapse","in","timeout","unmountOnExit","disablePadding","paddingLeft","startsWith","secondary","light","& a","transition","menus","menu","SubMenu","renderMenu","MenuItemLink","leftIcon","setState","mnuPrueba","parse","localStorage","getItem","activeClassName","iconClass","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","Layout","Menu","__","alert","filters","filtersProp","hideFilterButton","jsBotonGrilla","defaultJsBotonGrilla","exporter","showFilter","total","hasCreateContext","FilterContext","listContext","sanitizeListRestProps","FilterButton","CreateButton","ExportButton","utilsGrilla","option","loginBackgroundImage","nameSource","passwordSource","setLoading","useLogin","useLocation","login","nextPathname","catch","errors","minHeight","backgroundImage","backgroundRepeat","backgroundSize","Card","Avatar","padding","TextInput","autoFocus","PasswordInput","CardActions","loginButtonText","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","paddingRight","FieldTitle","fields","campos","separador","secundario","hasSecundario","principal","campo","useShowController","Show","Component","DefaultComponent","formRootPathname","syncWithLocation","DefaultTabs","toolbar","DefaultToolbar","useResolvedPath","tabValue","setTabValue","newTab","prevTab","setTab","handleTabChange","url","Root","sanitizeRestPropsView","renderTabHeaders","getTabbedFormTabFullPath","matchPath","resolvedPath","pathname","tabPath","intent","TabbedFormTabs","& .MuiTab-root.RaTabbedForm-errorTabButton","formProps","createMatch","pathnameBase","editMatch","useFormRootPath","TabbedFormView","TabbedForm","FormTab","TabbedFormEtriek","defaultTheme","components","MuiTextField","MuiFormControl","RaSidebar","drawerPaper","RaRichTextInput","@global",".ra-rich-text-input","& .ql-editor","& p:not(:last-child)","jsBotoneraPart","buttons","incluyeAcciones","setDisabled","useUtils","finally","englishMessages","ra","empty","from_camera","take_foto","hint","send","email","check_email","must_enter_credentials","restore_password","punch_in","pos","search","change_pin","change_password","configuration","language","dark","dashboard","welcome","subtitle","aor_button","validation","greater_or_equal","spanishMessages","notification","created","action","bulk_actions","invite","list","edit","back","delete_title","input","file","upload_single","image","boolRecord","RaBooleanField","fotoTomada","setFotoTomada","stream","mediaDevices","getUserMedia","video","audio","getElementById","srcObject","openCamera","maxWidth","disableElevation","canvas","getContext","drawImage","startIcon","PhotoCamera","autoPlay","border","toBlob","blob","lastModified","getTime","container","add","fileInput","files","dispatchEvent","bubbles","getTracks","track","stop","AddAPhotoIcon","prefix","src","v","camera","accept","download","restProps","_getValues$restProps$","direction","divider","orientation","flexItem","ImageInput","formatFile","capture","ImageField","isSmall","FotoButton","FileInput","href","VisibilityIcon","CloudDownloadIcon","BooleanInput","isTC","allChoices","availableChoices","useChoicesContext","RefTooltip","inputRef","arrow","verticalAlign","AutocompleteInput","_availableChoices$fil","asistant","Asistant","asistantResource","restPropsContenido","reload_cb","rcb","recarga_cb","respaldoFiltro","finalFilter","tempCallback","restFilter","deleteRecargarComboBox","ReferenceInput","SelectInputEtriek","SelectInput","ReferenceArrayInput","SelectArrayInput","RadioButtonGroupInput","Draggable","handle","cancel","cursor","ConfirmIcon","contentResource","translateOptions","useRecordSelection","handleClick","PaperComponent","cursorStyle","handleConfirm","FiltroAsig","classes","object","confirm","confirmColor","elementType","node","isRequired","ActionCheck","AlertError","seleccion","all","none","handleTodos","format","endAdornment","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","FiltroAsis","BulkActions","actions","ListActionsEtriek","Datagrid","fillista","filtro","setFiltro","filtroInicial","parent","getChildNodes","parentId","itemData","then","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","AsistenteList","TreeWithList","FiltroFuncionarios","allowNone","allowAll","NumberInput","DateInput","DateTimeInput","marginLeft","ComboBox"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/layout/AppBar.js","../src/layout/AsistenteContext.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/FichaContext.js","../src/layout/contenidos/useFieldController.js","../src/layout/contenidos/TextField.js","../src/layout/contenidos/EtrGrid/actions.js","../src/layout/contenidos/EtrGrid/NoRowsOverlay.js","../src/layout/contenidos/EtrGrid/EtrGrid.js","../src/layout/contenidos/GE.js","../src/utils/useInitGrilla.js","../src/layout/Asistente.js","../src/layout/GridButton.js","../src/layout/CreateGridButton.js","../src/layout/EditGridButton.js","../src/layout/ShowGridButton.js","../src/layout/GrillaEtriek.js","../src/layout/TabbedGrillaEtriek.js","../src/utils/useInitFicha.js","../src/utils/useNuevo.js","../src/layout/contenidos/useContenidoController.js","../src/utils/utils.js","../src/utils/useReferenceLabel.js","../src/layout/dialogs/FormDialogTitle.js","../src/layout/dialogs/FormDialogContext.js","../src/layout/dialogs/useFormDialogContext.js","../src/layout/dialogs/CreateDialog.js","../src/layout/dialogs/FormDialogButton.js","../src/layout/dialogs/CreateInDialogButton.js","../src/layout/utilsForm.js","../src/layout/CreateEtriek.js","../src/layout/dialogs/ListDialog.js","../src/layout/dialogs/ListInDialogButton.js","../src/layout/ListEtriek.js","../node_modules/clsx/dist/clsx.mjs","../src/layout/DeleteButtonNoWarning.js","../src/layout/EditEtriek.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/Layout.js","../src/layout/ListActionEtriek.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/MultiTextField.js","../src/layout/ShowEtriek.js","../src/layout/TabbedForm.js","../src/layout/TabbedFormEtriek.js","../src/layout/themes.js","../src/layout/FormToolbar.js","../src/utils/i18n/en.js","../src/utils/i18n/es.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/FotoButton.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/contenidos/ImageField.js","../src/layout/contenidos/ListCheck.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.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/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/TextCombo.js"],"sourcesContent":["import LockIcon from '@mui/icons-material/Lock';\r\nimport VpnLockIcon from '@mui/icons-material/VpnLock';\r\nimport {\r\n Box,\r\n ListItemIcon,\r\n ListItemText,\r\n MenuItem,\r\n Typography,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport * as React from 'react';\r\nimport { forwardRef } from 'react';\r\nimport {\r\n AppBar,\r\n Logout,\r\n useResourceDefinitions,\r\n UserMenu,\r\n useTranslate,\r\n useUserMenu,\r\n} from 'react-admin';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst ConfigurationMenu = forwardRef((props, ref) => {\r\n const translate = useTranslate();\r\n const { onClose } = useUserMenu();\r\n const resourcesDefinitions = useResourceDefinitions();\r\n const existeCP = resourcesDefinitions['form_275'];\r\n const existePassword = resourcesDefinitions['form_59'];\r\n\r\n return [\r\n existeCP ? (\r\n <MenuItem\r\n component={Link}\r\n ref={ref}\r\n {...props}\r\n key=\"/form_275\"\r\n to=\"/form_275\"\r\n onClick={onClose}\r\n >\r\n <ListItemIcon>\r\n <LockIcon />\r\n </ListItemIcon>\r\n <ListItemText>{translate('pos.change_pin')}</ListItemText>\r\n </MenuItem>\r\n ) : null,\r\n existePassword ? (\r\n <MenuItem\r\n component={Link}\r\n ref={ref}\r\n {...props}\r\n key=\"/form_59\"\r\n to=\"/form_59\"\r\n onClick={onClose}\r\n >\r\n <ListItemIcon>\r\n <VpnLockIcon />\r\n </ListItemIcon>\r\n <ListItemText>{translate('pos.change_password')}</ListItemText>\r\n </MenuItem>\r\n ) : null,\r\n ];\r\n});\r\n\r\nconst CustomUserMenu = () => (\r\n <UserMenu>\r\n <ConfigurationMenu />\r\n <Logout />\r\n </UserMenu>\r\n);\r\n\r\nconst CustomAppBar = props => {\r\n const isLargeEnough = useMediaQuery(theme => theme.breakpoints.up('sm'));\r\n return (\r\n <AppBar {...props} color=\"secondary\" userMenu={<CustomUserMenu />}>\r\n <Typography\r\n variant=\"h6\"\r\n color=\"inherit\"\r\n sx={{\r\n flex: 1,\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n }}\r\n id=\"react-admin-title\"\r\n />\r\n {isLargeEnough && <Box component=\"span\" sx={{ flex: 1 }} />}\r\n </AppBar>\r\n );\r\n};\r\n\r\nexport default CustomAppBar;\r\n","import * as React from 'react';\nimport { createContext, useContext, useMemo, useState } from 'react';\n\nexport const AsistenteContext = createContext();\n\nexport const AsistenteProvider = ({ children }) => {\n const [open, setOpen] = useState(false);\n const [props, setProps] = useState({});\n\n const context = useMemo(\n () => ({\n open,\n props,\n show: props => {\n setProps(props);\n setOpen(true);\n },\n hide: () => setOpen(false),\n }),\n [open, props]\n );\n\n return (\n <AsistenteContext.Provider value={context}>\n {children}\n </AsistenteContext.Provider>\n );\n};\n\nexport const useAsistente = () => useContext(AsistenteContext);\n\nexport default useAsistente;\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`\nexport const recargarComboBox = (id, method, params, callback) => ({\n type: 'RELOAD_CB',\n payload: {\n id,\n method,\n params,\n callback,\n },\n});\n\n// ACTION `RELOAD_CB_SUCCESS`\nexport const deleteRecargarComboBox = (id, callback) => ({\n type: 'RELOAD_CB_SUCCESS',\n payload: { id, callback },\n});\n\nexport const setHiddenAction = (id, hidden) => ({\n type: 'HIDE_INPUT',\n payload: {\n id,\n hidden,\n },\n});\n\nexport const setDisableAction = (id, disabled) => ({\n type: 'DISABLE_INPUT',\n payload: {\n id,\n disabled,\n },\n});\n\nexport const setRequireAction = (id, required) => ({\n type: 'REQUIRE_INPUT',\n payload: {\n id,\n required,\n },\n});\n\nexport const setErrorAction = (id, error) => ({\n type: 'ERROR_INPUT',\n payload: {\n id,\n error,\n },\n});\n\nexport const setLabelAction = (id, label) => ({\n type: 'LABEL_INPUT',\n payload: {\n id,\n label,\n },\n});\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport {\n recargarComboBox,\n setDisableAction,\n setHiddenAction,\n setRequireAction,\n setErrorAction,\n setLabelAction,\n} from './actions';\n\nexport const useRecargarComboBox = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, method, params, callback) => {\n dispatch(recargarComboBox(id, method, params, callback));\n },\n [dispatch]\n );\n};\n\nexport const useSetHidden = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, hidden) => {\n dispatch(setHiddenAction(id, hidden));\n },\n [dispatch]\n );\n};\n\nexport const useSetDisable = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, disable) => {\n dispatch(setDisableAction(id, disable));\n },\n [dispatch]\n );\n};\n\nexport const useSetRequire = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, required) => {\n dispatch(setRequireAction(id, required));\n },\n [dispatch]\n );\n};\n\nexport const useSetError = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, error) => {\n dispatch(setErrorAction(id, error));\n },\n [dispatch]\n );\n};\n\nexport const useSetLabel = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, label) => {\n dispatch(setLabelAction(id, label));\n },\n [dispatch]\n );\n};\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 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, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutateAsync, isLoading } = useMutation(params => {\r\n const { method, params: paramsDp } = params;\r\n return dataProvider.getJson(resource, { method, params: paramsDp });\r\n }, options);\r\n\r\n return { mutateAsync, 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 { mutateAsync, isLoading } = useGetJson(resource);\r\n\r\n const ajax = useCallback(\r\n (method, params, callback) =>\r\n mutateAsync(\r\n { method, params },\r\n { onSuccess: callback, onError: callback }\r\n ),\r\n []\r\n );\r\n\r\n return [ajax, isLoading];\r\n};\r\n\r\nexport default useAjax;\r\n","import { useCallback } from 'react';\r\nimport {\r\n useListContext,\r\n useNotify,\r\n useRedirect,\r\n useRefresh,\r\n useResourceContext,\r\n useTranslate,\r\n useUnselectAll,\r\n} from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport useAsistente from '../layout/AsistenteContext';\r\nimport useFormProgress from '../layout/ProgressContext';\r\nimport {\r\n useRecargarComboBox,\r\n useSetDisable,\r\n useSetError,\r\n useSetHidden,\r\n useSetLabel,\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 resource = useResourceContext(props);\r\n const unselectAll = useUnselectAll(resource);\r\n const asistente = useAsistente();\r\n const translate = useTranslate();\r\n const [ajax] = useAjax(resource);\r\n\r\n return {\r\n ajax,\r\n data,\r\n notify,\r\n redirect,\r\n refresh,\r\n refetch: data.refetch,\r\n unselectAll,\r\n asistente,\r\n translate,\r\n };\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 setError = useSetError();\r\n const setLabel = useSetLabel();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const resource = useResourceContext(props);\r\n const asistente = useAsistente();\r\n const [ajax] = useAjax(resource);\r\n const etrs = props.etrs || {};\r\n\r\n return {\r\n ajax,\r\n notify,\r\n redirect,\r\n recargarComboBox,\r\n progress,\r\n asistente,\r\n setHidden,\r\n setDisable,\r\n setRequire,\r\n setError,\r\n setLabel,\r\n etrs,\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 setError = useSetError();\r\n const setLabel = useSetLabel();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const form = useFormContext();\r\n const resource = useResourceContext(props);\r\n const asistente = useAsistente();\r\n const [ajax] = useAjax(resource);\r\n const etrs = props.etrs || {};\r\n const asisEtr = props.asisEtr || {};\r\n const trigger = form?.trigger;\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 asistente,\r\n setHidden: useCallback(\r\n (source, hidden) => {\r\n setHidden(source, hidden);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setHidden, trigger]\r\n ),\r\n setDisable: useCallback(\r\n (source, disabled) => {\r\n setDisable(source, disabled);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setDisable, trigger]\r\n ),\r\n setRequire: useCallback(\r\n (source, required) => {\r\n setRequire(source, required);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setRequire, trigger]\r\n ),\r\n setError: useCallback(\r\n (source, error) => {\r\n setError(source, error);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setError, trigger]\r\n ),\r\n setLabel: useCallback(\r\n (source, label) => {\r\n setLabel(source, label);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setLabel, trigger]\r\n ),\r\n etrs,\r\n asisEtr,\r\n };\r\n};\r\n\r\nexport default useUtilsFicha;\r\n","import { createContext } from 'react';\r\n\r\nexport const FichaContext = createContext({});\r\nexport const FormEtrGridContext = createContext(undefined);\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 * 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 * as React from 'react';\nimport { useCallback } from 'react';\nimport { ReferenceField } from 'react-admin';\nimport TextField from '../TextField';\n\nexport const renderCellComboBox = (etrSource, source, reference) => params => {\n return (\n <ReferenceField\n reference={reference}\n source={source}\n queryOptions={{ meta: { etr: etrSource } }}\n record={{ [source]: params.row[source] }}\n >\n <TextField source=\"etiqueta\" />\n </ReferenceField>\n );\n};\n\nconst getSubmitValues = values => {\n const restValues = { ...values };\n delete restValues.id;\n\n return restValues;\n};\n\nexport const useAddRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'N';\n\n return useCallback(\n (values, form) => {\n const finalValues = getSubmitValues(values);\n const id = apiRef.current.getRowsCount() + 1;\n\n apiRef.current.updateRows([{ ...finalValues, id }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n claveFila: '',\n estado,\n })) || []\n : form.getValues()[source] || [];\n\n if (!enviarTodo) {\n inputValues.push({\n ...finalValues,\n claveFila: '',\n _id: id,\n estado,\n });\n }\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nexport const useEditRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'M';\n\n return useCallback(\n (id, values, form) => {\n const _estado = typeof id === 'number' ? 'N' : estado;\n const finalValues = getSubmitValues(values);\n\n apiRef.current.updateRows([{ ...finalValues, id }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n estado: _estado,\n })) || []\n : form.getValues()[source] || [];\n\n let currentIndex = inputValues.findIndex(item =>\n typeof id === 'number'\n ? item?._id === id\n : item?.claveFila === id\n );\n\n const indiceVisual =\n apiRef.current.getRowIndexRelativeToVisibleRows(id);\n\n // Si todavía no hay registros en el input oculto, comienzo en cero\n currentIndex =\n currentIndex !== -1\n ? currentIndex\n : indiceVisual !== undefined\n ? indiceVisual\n : 0;\n\n inputValues[currentIndex] = {\n ...finalValues,\n claveFila: inputValues[currentIndex]?.estado === 'N' ? '' : id,\n _id: id,\n estado:\n inputValues[currentIndex]?.estado === 'N' ? 'N' : estado,\n };\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nexport const useDeleteRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'B';\n\n return useCallback(\n (id, form) => {\n const fila = apiRef.current.getRowModels().get(id);\n\n // Borro la fila del componente DataGrid\n apiRef.current.updateRows([{ id, _action: 'delete' }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n estado,\n })) || []\n : form.getValues()[source] || [];\n\n if (typeof id === 'number') {\n // Estoy borrando una fila nueva que no viene de la base de datos\n const currentIndex = inputValues.findIndex(\n item => item._id === id\n );\n inputValues.splice(currentIndex, 1);\n } else {\n let currentIndex = inputValues.findIndex(\n item => item.claveFila === id\n );\n\n const indiceVisual =\n apiRef.current.getRowIndexRelativeToVisibleRows(id);\n\n currentIndex =\n currentIndex !== -1\n ? currentIndex\n : indiceVisual !== undefined\n ? indiceVisual\n : inputValues.length;\n\n inputValues[currentIndex] = { ...fila, estado, claveFila: id };\n }\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nconst useEtrActions = props => {\n const { [props.source]: propsEtr } = props.useFormulario();\n\n const finalProps = { ...props, enviarTodo: !!propsEtr?.enviarTodo };\n const addRow = useAddRow(finalProps);\n const editRow = useEditRow(finalProps);\n const deleteRow = useDeleteRow(finalProps);\n const clear = form => {\n props.apiRef.current.setRows([]);\n form.setValue(props.source, '');\n };\n\n return {\n addRow,\n editRow,\n deleteRow,\n clear,\n api: props.apiRef,\n };\n};\n\nexport default useEtrActions;\n","import { Box } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\nimport * as React from 'react';\r\n\r\nconst StyledGridOverlay = styled('div')(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\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' ? '#fff' : '#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' : '#fff',\r\n },\r\n}));\r\n\r\nexport const CustomNoRowsOverlay = () => {\r\n return (\r\n <StyledGridOverlay>\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 <Box sx={{ mt: 1 }}>No hay registros</Box>\r\n </StyledGridOverlay>\r\n );\r\n};\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, Stack, 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 { styled, ThemeProvider } from '@mui/material/styles';\nimport {\n DataGridPremium,\n esES,\n useGridApiContext,\n} from '@mui/x-data-grid-premium';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n Fragment,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n Confirm,\n Form,\n SaveButton,\n useGetList,\n useInput,\n useRecordContext,\n useResourceContext,\n useSafeSetState,\n useTranslate,\n} from 'react-admin';\nimport { useFormContext, useFormState } from 'react-hook-form';\nimport useUtilsFicha, { useDefaultHook } from '../../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../../FichaContext';\nimport { useAddRow, useDeleteRow, useEditRow } from './actions';\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\n\nconst StyledButton = styled(Button, {\n name: 'EtrDeleteButton',\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => ({\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n}));\n\nconst dummyRecord = {};\n\nconst EtrChildrenWrapper = props => {\n const form = useFormContext();\n\n return (\n <FormEtrGridContext.Provider value={{ form }}>\n {props.children}\n </FormEtrGridContext.Provider>\n );\n};\n\nconst EtrFormDialog = props => (\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\n <DialogContentText component=\"span\">\n <Form\n mode=\"onBlur\"\n record={dummyRecord}\n resource={props.resource}\n onSubmit={props.onSubmit}\n >\n <EtrChildrenWrapper>{props.children}</EtrChildrenWrapper>\n </Form>\n </DialogContentText>\n </Dialog>\n);\n\nEtrFormDialog.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 resource: PropTypes.any,\n save: PropTypes.func,\n render: PropTypes.func,\n};\n\nconst EtrDialogChild = props => {\n const {\n form: formPadre,\n resource,\n estado,\n editors,\n recordPadre,\n camposClaveFila,\n setOpen,\n open,\n } = props;\n const { dirtyFields, isValid } = useFormState();\n const {\n fichaProps: { [props.source]: etrActualProps = {}, etrs },\n } = useContext(FichaContext);\n\n const formAsistente = useContext(FormEtrGridContext);\n const { onAfterRenderAsistente, ...restEtrActualProps } = etrActualProps;\n const utils = useUtilsFicha({ resource, etrs, asisEtr: formAsistente });\n\n useEffect(() => {\n if (open) {\n typeof onAfterRenderAsistente === 'function' &&\n onAfterRenderAsistente({ ...utils, form: formPadre }, estado);\n }\n }, [open]);\n\n return (\n <>\n <DialogContent>\n <Stack spacing={4}>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n defaultValue: recordPadre[child.props.source] || '',\n fullWidth: true,\n sx: { margin: 0 },\n disabled:\n estado !== 'N' &&\n (camposClaveFila.indexOf(child.props.source) !==\n -1 ||\n child.props.disabled),\n ...restEtrActualProps[child.props.source],\n /*InputLabelProps: { shrink: true },*/\n })\n )}\n </Stack>\n </DialogContent>\n <DialogActions>\n <SaveButton\n disabled={Object.keys(dirtyFields).length === 0 || !isValid}\n />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n >\n <IconCancel />\n </Button>\n </DialogActions>\n </>\n );\n};\n\nconst EtrCreateButton = props => {\n const {\n editors,\n record: recordPadre,\n camposClaveFila,\n label,\n source,\n enviarTodo,\n } = props;\n const [open, setOpen] = useSafeSetState(false);\n const resource = useResourceContext(props);\n const form = useFormContext();\n const apiRef = useGridApiContext();\n const addRow = useAddRow({ apiRef, source, enviarTodo });\n const estado = 'N';\n\n const translate = useTranslate();\n const labelEstado = translate('ra.action.create');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = (values, e) => {\n addRow(values, form);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <AddIcon />\n </Button>\n <EtrFormDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n source={source}\n form={form}\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={recordPadre || {}}\n camposClaveFila={camposClaveFila}\n //isLoading={isLoading}\n open={open}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrFormDialog>\n </>\n );\n};\n\nconst EtrEditButton = props => {\n const {\n editors,\n camposClaveFila,\n resource,\n label,\n source,\n row,\n enviarTodo,\n } = props;\n const translate = useTranslate();\n const [open, setOpen] = useSafeSetState(false);\n const apiRef = useGridApiContext();\n const form = useFormContext();\n const editRow = useEditRow({ apiRef, source, enviarTodo });\n const estado = 'M';\n\n const labelEstado = translate('ra.action.edit');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = (values, e) => {\n editRow(row.id, values, form);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <EditIcon />\n </Button>\n <EtrFormDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n source={source}\n form={form}\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={row}\n camposClaveFila={camposClaveFila}\n //isLoading={isLoading}\n open={open}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrFormDialog>\n </>\n );\n};\n\nconst EtrDeleteButton = props => {\n const {\n confirmTitle = 'ra.message.delete_title', //'ra.action.delete'\n confirmContent = 'ra.message.delete_content',\n row,\n source,\n enviarTodo,\n } = props;\n\n const [open, setOpen] = useSafeSetState(false);\n const apiRef = useGridApiContext();\n const form = useFormContext();\n const deleteRow = useDeleteRow({ apiRef, source, enviarTodo });\n\n const handleDelete = e => {\n deleteRow(row.id, form);\n };\n\n return (\n <Fragment>\n <StyledButton\n key=\"button\"\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <ActionDelete />\n </StyledButton>\n <Confirm\n isOpen={open}\n //loading={isLoading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n />\n </Fragment>\n );\n};\n\nconst theme = createTheme({}, 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 enableLoad = true,\n disabled: disabledProp,\n apiRef,\n ...rest\n } = props;\n const [rows, setRows] = useState([]);\n const recordPadre = useRecordContext(props);\n const form = useFormContext();\n const { field } = useInput({ defaultValue: '', ...props });\n const {\n isLoading: isLoadingParent,\n fichaProps: { [rest.source]: etrProps },\n } = useContext(FichaContext);\n\n const {\n enviarTodo = false,\n disabled: disabledContext,\n useContenido = useDefaultHook,\n } = etrProps || {};\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n const disabled = disabledProp || disabledContext;\n\n let filter = {};\n if (recordPadre) {\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\n useEffect(() => {\n if (!enableLoad) {\n setTimeout(() => {\n form.setValue(rest.source, '');\n }, 1000);\n }\n }, [enableLoad]);\n\n const { isLoading, refetch } = useGetList(\n reference,\n {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n },\n {\n enabled: enableLoad && !isLoadingParent,\n onSuccess: value => {\n setTimeout(() => {\n form.setValue(rest.source, '');\n }, 1000);\n setRows(value?.data || []);\n },\n }\n );\n\n useContenido({\n ...props,\n refetch,\n });\n\n const columns = defColumns;\n\n if (!disabled) {\n columns.push({\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => {\n if (params.rowNode.type === 'group') {\n return undefined;\n }\n return (\n <EtrEditButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n row={params.row}\n />\n );\n },\n });\n\n if (allowAdd) {\n columns.unshift({\n field: 'BTN',\n headerName: '',\n sortable: false,\n width: 80,\n renderHeader: params => (\n <EtrCreateButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n />\n ),\n });\n }\n\n if (allowRemove) {\n columns.push({\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => {\n if (params.rowNode.type === 'group') {\n return undefined;\n }\n return (\n <EtrDeleteButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n row={params.row}\n />\n );\n },\n });\n }\n }\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n return (\n <Paper\n sx={{\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: 1,\n }}\n >\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <Fragment>\n <DataGridPremium\n apiRef={apiRef}\n //autoHeight\n //rowHeight={25}\n loading={isLoading || isLoadingParent}\n sx={{\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor: theme =>\n theme.palette.mode === 'light'\n ? '#fafafa'\n : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n }}\n disableRowSelectionOnClick\n paginationModel={{ page: 1, pageSize: 50 }}\n hideFooter\n rows={rows}\n columns={finalColumns}\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n sortable={false}\n resizable={false}\n disableReorder\n disableExport\n filterable={false}\n disableColumnMenu\n //checkboxSelection\n slots={{\n //header: <div>This is my custom Toolbar!</div>,\n noRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n <input type=\"hidden\" {...field} />\n </Fragment>\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, StyledEngineProvider } from '@mui/material';\nimport Paper from '@mui/material/Paper';\nimport { ThemeProvider } from '@mui/material/styles';\nimport {\n DataGridPremium,\n esES,\n useGridApiRef,\n useKeepGroupedColumnsHidden,\n} from '@mui/x-data-grid-premium';\nimport * as React from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport { useGetList, useRecordContext } from 'react-admin';\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\nimport { FichaContext } from '../FichaContext';\nimport { CustomNoRowsOverlay } from './EtrGrid/NoRowsOverlay';\n\nconst theme = createTheme({}, esES);\n\nconst GE = props => {\n const {\n filterBy = '',\n sortModel,\n columns: defColumns,\n reference,\n enableLoad = true,\n initialState: initialStateProps,\n ...rest\n } = props;\n\n const { isLoading: isLoadingParent } = useContext(FichaContext);\n const recordPadre = useRecordContext();\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 let filter = {};\n if (recordPadre) {\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\n const {\n estado,\n isLoading: isLoadingFicha,\n fichaProps = {},\n } = useContext(FichaContext);\n const utils = useUtilsFicha(props);\n const { [props.source]: initialProps = {} } = fichaProps;\n const { useContenido = useDefaultHook, ...restInitialProps } = initialProps;\n\n const {\n data = [],\n isLoading,\n refetch,\n } = useGetList(\n reference,\n {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n },\n { enabled: enableLoad && !isLoadingParent }\n );\n\n const apiRef = useGridApiRef();\n const initialState = useKeepGroupedColumnsHidden({\n apiRef,\n initialState: initialStateProps,\n });\n\n useContenido({\n ...rest,\n estado,\n hidden: props.hidden,\n isLoading: isLoadingFicha,\n utils,\n ...restInitialProps,\n refetch,\n apiRef,\n });\n\n const rows = data;\n\n return (\n <Paper\n sx={{\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: 1,\n }}\n >\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGridPremium\n //autoHeight\n //rowHeight={25}\n apiRef={apiRef}\n rows={rows}\n columns={columns}\n loading={isLoading || isLoadingParent}\n sx={{\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor: theme =>\n theme.palette.mode === 'light'\n ? '#fafafa'\n : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n }}\n disableRowSelectionOnClick\n paginationModel={{ page: 1, pageSize: 50 }}\n hideFooter\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n slots={{\n //header: <div>This is my custom Toolbar!</div>,\n noRowsOverlay: CustomNoRowsOverlay,\n }}\n initialState={initialState}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default GE;\n","import { useEffect } from 'react';\nimport { useListContext } from 'react-admin';\nimport { useUtilsGrilla } from './useUtils';\n\nconst useInitGrilla = props => {\n const { onRenderGrilla, onLoadGrilla, apiRef = {} } = props;\n const { isLoading } = useListContext();\n const utils = useUtilsGrilla(props);\n\n useEffect(() => {\n onRenderGrilla && onRenderGrilla({ ...utils, api: apiRef?.current });\n }, []);\n\n useEffect(() => {\n if (!isLoading) {\n onLoadGrilla && onLoadGrilla({ ...utils, api: apiRef?.current });\n }\n }, [isLoading]);\n};\n\nexport default useInitGrilla;\n","import CancelIcon from '@mui/icons-material/Cancel';\nimport ArrowCircleRightIcon from '@mui/icons-material/ArrowCircleRight';\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Stack,\n} from '@mui/material';\nimport AppBar from '@mui/material/AppBar';\nimport Slide from '@mui/material/Slide';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport * as React from 'react';\nimport { Fragment } from 'react';\nimport {\n Button,\n Confirm,\n Form,\n SaveButton,\n useResourceContext,\n} from 'react-admin';\nimport useAsistente from './AsistenteContext';\n\nconst Transition = React.forwardRef(function Transition(props, ref) {\n return <Slide direction=\"up\" ref={ref} {...props} />;\n});\n\nconst Asistente = props => {\n const { isLoading } = props;\n const resource = useResourceContext(props);\n const asistente = useAsistente();\n const {\n open,\n hide,\n props: {\n title,\n controles,\n aceptar,\n cancelar = () => hide(),\n tipo = 'form',\n botonesExtra = [],\n showAceptar = true,\n showCancelar = true,\n formDividers = true,\n dialogProps = {},\n },\n } = asistente;\n\n const getDialogVista = () => (\n <Fragment>\n <AppBar sx={{ position: 'relative' }}>\n <Toolbar disableGutters variant={'dense'}>\n <Typography\n sx={{ ml: 2, flex: 1 }}\n variant=\"h6\"\n component=\"div\"\n >\n {title}\n </Typography>\n {botonesExtra.map(\n (\n {\n label = '',\n icon = <ArrowCircleRightIcon />,\n handler,\n },\n i\n ) => (\n <Button\n key={`extra_${i}`}\n label={label}\n disabled={isLoading}\n onClick={handler}\n >\n {icon}\n </Button>\n )\n )}\n <Button\n label=\"ra.action.cancel\"\n disabled={isLoading}\n onClick={cancelar}\n color=\"inherit\"\n >\n <CancelIcon />\n </Button>\n </Toolbar>\n </AppBar>\n {controles}\n </Fragment>\n );\n\n const getDialogForm = () => (\n <Fragment>\n <DialogTitle id=\"draggable-dialog-title\">{title}</DialogTitle>\n <Form resource={resource} onSubmit={aceptar}>\n <DialogContent dividers={formDividers} variant={'dense'}>\n <Stack spacing={2}>{controles}</Stack>\n </DialogContent>\n <DialogActions>\n {botonesExtra.map(\n (\n {\n label = '',\n icon = <ArrowCircleRightIcon />,\n handler,\n },\n i\n ) => (\n <Button\n key={`extra_${i}`}\n label={label}\n disabled={isLoading}\n onClick={handler}\n >\n {icon}\n </Button>\n )\n )}\n {showCancelar && (\n <Button\n label=\"ra.action.cancel\"\n disabled={isLoading}\n onClick={cancelar}\n >\n <CancelIcon />\n </Button>\n )}\n {showAceptar && <SaveButton disabled={isLoading} />}\n </DialogActions>\n </Form>\n </Fragment>\n );\n\n const getConfirm = () => (\n <Confirm\n isOpen={open}\n title={title || 'Atención'}\n content={controles}\n onConfirm={aceptar}\n onClose={cancelar}\n />\n );\n\n return tipo === 'confirm' ? (\n getConfirm()\n ) : (\n <Dialog\n open={open}\n onClose={() => hide()}\n fullWidth\n fullScreen={tipo === 'vista'}\n maxWidth={tipo === 'vista' ? 'lg' : 'sm'}\n TransitionComponent={Transition}\n {...dialogProps}\n >\n {tipo === 'form' ? getDialogForm() : getDialogVista()}\n </Dialog>\n );\n};\n\nexport default Asistente;\n","import { IconButton, Tooltip } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useTranslate } from 'react-admin';\n\nconst GridButton = props => {\n const {\n alignIcon = 'left',\n children,\n className,\n disabled,\n label,\n color = 'primary',\n size = 'small',\n to: locationDescriptor,\n ...rest\n } = props;\n const translate = useTranslate();\n const translatedLabel = label ? translate(label, { _: label }) : undefined;\n const linkParams = getLinkParams(locationDescriptor);\n\n return label && !disabled ? (\n <Tooltip title={translatedLabel}>\n <IconButton\n aria-label={translatedLabel}\n className={className}\n color={color}\n size=\"medium\"\n {...rest}\n {...linkParams}\n >\n {children}\n </IconButton>\n </Tooltip>\n ) : (\n <IconButton\n className={className}\n color={color}\n disabled={disabled}\n size=\"medium\"\n {...rest}\n {...linkParams}\n >\n {children}\n </IconButton>\n );\n};\n\nGridButton.propTypes = {\n alignIcon: PropTypes.oneOf(['left', 'right']),\n children: PropTypes.element,\n className: PropTypes.string,\n color: PropTypes.oneOfType([\n PropTypes.oneOf([\n 'inherit',\n 'default',\n 'primary',\n 'secondary',\n 'error',\n 'info',\n 'success',\n 'warning',\n ]),\n PropTypes.string,\n ]),\n disabled: PropTypes.bool,\n label: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n};\n\nconst getLinkParams = locationDescriptor => {\n // eslint-disable-next-line eqeqeq\n if (locationDescriptor == undefined) {\n return undefined;\n }\n\n if (typeof locationDescriptor === 'string') {\n return { to: locationDescriptor };\n }\n\n const { redirect, replace, state, ...to } = locationDescriptor;\n return {\n to,\n redirect,\n replace,\n state,\n };\n};\n\nexport default GridButton;\n","import AddIcon from '@mui/icons-material/Add';\r\nimport {\r\n useCreatePath,\r\n useRecordContext,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport GridButton from './GridButton';\r\n\r\nconst stopPropagation = e => e.stopPropagation();\r\n\r\n// avoids using useMemo to get a constant value for the link state\r\nconst scrollStates = {\r\n true: { _scrollToTop: true },\r\n false: {},\r\n};\r\n\r\nconst defaultIcon = <AddIcon />;\r\n\r\nconst CreateGridButton = props => {\r\n const {\r\n icon = defaultIcon,\r\n label = 'ra.action.create',\r\n scrollToTop = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n const record = useRecordContext(props);\r\n const createPath = useCreatePath();\r\n\r\n return (\r\n <GridButton\r\n component={Link}\r\n to={createPath({ type: 'create', resource })}\r\n state={{\r\n record,\r\n ...scrollStates[String(scrollToTop)],\r\n }}\r\n label={label}\r\n onClick={stopPropagation}\r\n {...rest}\r\n >\r\n {icon}\r\n </GridButton>\r\n );\r\n};\r\nexport default CreateGridButton;\r\n","import ContentCreate from '@mui/icons-material/Create';\nimport * as React from 'react';\nimport {\n useCreatePath,\n useRecordContext,\n useResourceContext,\n} from 'react-admin';\nimport { Link } from 'react-router-dom';\nimport GridButton from './GridButton';\n\nconst stopPropagation = e => e.stopPropagation();\n\n// avoids using useMemo to get a constant value for the link state\nconst scrollStates = {\n true: { _scrollToTop: true },\n false: {},\n};\n\nconst defaultIcon = <ContentCreate />;\n\nconst EditGridButton = props => {\n const {\n icon = defaultIcon,\n label = 'ra.action.edit',\n scrollToTop = true,\n ...rest\n } = props;\n const resource = useResourceContext(props);\n const record = useRecordContext(props);\n const createPath = useCreatePath();\n if (!record) {\n return null;\n }\n\n return (\n <GridButton\n component={Link}\n to={createPath({ type: 'edit', resource, id: record.id })}\n state={scrollStates[String(scrollToTop)]}\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </GridButton>\n );\n};\nexport default EditGridButton;\n","import ImageEye from '@mui/icons-material/RemoveRedEye';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n useCreatePath,\r\n useRecordContext,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport * as React from 'react';\r\nimport { memo } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport GridButton from './GridButton';\r\n\r\nconst ShowGridButton = props => {\r\n const {\r\n icon = defaultIcon,\r\n label = 'ra.action.show',\r\n record: recordProp,\r\n resource: resourceProp,\r\n scrollToTop = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n const record = useRecordContext(props);\r\n const createPath = useCreatePath();\r\n if (!record) return null;\r\n return (\r\n <GridButton\r\n component={Link}\r\n to={createPath({ type: 'show', resource, id: record.id })}\r\n state={scrollStates[String(scrollToTop)]}\r\n label={label}\r\n onClick={stopPropagation}\r\n {...rest}\r\n >\r\n {icon}\r\n </GridButton>\r\n );\r\n};\r\n\r\n// avoids using useMemo to get a constant value for the link state\r\nconst scrollStates = {\r\n true: { _scrollToTop: true },\r\n false: {},\r\n};\r\n\r\nconst defaultIcon = <ImageEye />;\r\n\r\n// useful to prevent click bubbling in a datagrid with rowClick\r\nconst stopPropagation = e => e.stopPropagation();\r\n\r\nShowGridButton.propTypes = {\r\n icon: PropTypes.element,\r\n label: PropTypes.string,\r\n record: PropTypes.any,\r\n scrollToTop: PropTypes.bool,\r\n};\r\n\r\nconst PureShowGridButton = memo(\r\n ShowGridButton,\r\n (props, nextProps) =>\r\n props.resource === nextProps.resource &&\r\n (props.record && nextProps.record\r\n ? props.record.id === nextProps.record.id\r\n : props.record == nextProps.record) && // eslint-disable-line eqeqeq\r\n props.label === nextProps.label &&\r\n props.disabled === nextProps.disabled\r\n);\r\n\r\nexport default PureShowGridButton;\r\n","import SettingsIcon from '@mui/icons-material/Settings';\r\nimport {\r\n Box,\r\n createTheme,\r\n Paper,\r\n ThemeProvider,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport { GridActionsCellItem } from '@mui/x-data-grid';\r\nimport {\r\n DataGridPremium,\r\n esES,\r\n useGridApiRef,\r\n useKeepGroupedColumnsHidden,\r\n} from '@mui/x-data-grid-premium';\r\nimport * as React from 'react';\r\nimport { Fragment, isValidElement } from 'react';\r\nimport {\r\n BulkActionsToolbar,\r\n Button,\r\n DatagridClasses,\r\n DatagridRoot,\r\n SimpleList,\r\n useListContext,\r\n useResourceContext,\r\n useResourceDefinition,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport useInitGrilla from '../utils/useInitGrilla';\r\nimport { useUtilsGrilla } from '../utils/useUtils';\r\nimport Asistente from './Asistente';\r\nimport { CustomNoRowsOverlay } from './contenidos/EtrGrid/NoRowsOverlay';\r\nimport CreateGridButton from './CreateGridButton';\r\nimport EditGridButton from './EditGridButton';\r\nimport ShowGridButton from './ShowGridButton';\r\n\r\nconst esEditable = (record, isRowEditable) =>\r\n isRowEditable === undefined ||\r\n (typeof isRowEditable === 'function' && isRowEditable(record));\r\n\r\nconst theme = createTheme({}, esES);\r\n\r\nconst operatorParamsToModel = new Map([\r\n // boolean operators\r\n ['is', 'is'],\r\n ['not', 'not'],\r\n // date operators\r\n ['after', 'after'],\r\n ['onOrAfter', 'onOrAfter'],\r\n ['before', 'before'],\r\n ['onOrBefore', 'onOrBefore'],\r\n // numeric operators\r\n ['eq', '='],\r\n ['neq', '!='],\r\n ['gt', '>'],\r\n ['gte', '>='],\r\n ['lt', '<'],\r\n ['lte', '<='],\r\n // string operators\r\n ['contains', 'contains'],\r\n ['equals', 'equals'], // default operator\r\n ['sw', 'startsWith'],\r\n ['ew', 'endsWith'],\r\n ['isEmpty', 'isEmpty'],\r\n ['isNotEmpty', 'isNotEmpty'],\r\n ['isAnyOf', 'isAnyOf'],\r\n]);\r\n\r\nconst operatorModelToParams = new Map(\r\n Array.from(operatorParamsToModel, entry => [entry[1], entry[0]])\r\n);\r\n\r\nconst defaultConvertFilterModelToFilterValues = filterModel =>\r\n filterModel.items.reduce((acc, item) => {\r\n if (typeof item.field !== 'undefined' && item.operator) {\r\n if (operatorModelToParams.has(item.operator)) {\r\n acc[\r\n `${item.field}_${operatorModelToParams.get(item.operator)}`\r\n ] = item.value;\r\n } else {\r\n acc[item.field] = item.value;\r\n }\r\n }\r\n return acc;\r\n }, {});\r\n\r\nconst GrillaLg = props => {\r\n const {\r\n actionButtons = [],\r\n bulkActionButtons,\r\n sx,\r\n columns,\r\n isRowEditable,\r\n primaryText: pt,\r\n secondaryText: st,\r\n desktopSize = false,\r\n onRenderGrilla,\r\n onLoadGrilla,\r\n hasEdit,\r\n initialState: initialStateProps,\r\n convertFilterModelToFilterValues = defaultConvertFilterModelToFilterValues,\r\n claveNuevo,\r\n mobileColumns = '',\r\n hasVerFicha = false,\r\n disableMultipleRowSelection = true,\r\n ...rest\r\n } = props;\r\n\r\n const utils = useUtilsGrilla(props);\r\n const translate = useTranslate();\r\n const resource = useResourceContext(props);\r\n const {\r\n data = [],\r\n isLoading,\r\n selectedIds,\r\n onSelect,\r\n displayedFilters,\r\n setFilters,\r\n } = useListContext();\r\n\r\n const apiRef = useGridApiRef();\r\n const initialState = useKeepGroupedColumnsHidden({\r\n apiRef,\r\n initialState: {\r\n ...initialStateProps,\r\n pinnedColumns: { right: ['actions'] },\r\n //filter: {\r\n // filterModel: {\r\n // items: [],\r\n // quickFilterExcludeHiddenColumns: true,\r\n // },\r\n //},\r\n },\r\n });\r\n\r\n useInitGrilla({ apiRef, ...props });\r\n\r\n const translatedColumns = columns.map((column, index) => ({\r\n ...column,\r\n headerName:\r\n column.headerName !== ''\r\n ? translate(`resources.${resource}.fields.${column.field}`, {\r\n _: column.headerName,\r\n })\r\n : column.headerName,\r\n }));\r\n\r\n const finalColumns =\r\n actionButtons.length > 0 || hasEdit\r\n ? translatedColumns.concat([\r\n {\r\n field: 'actions',\r\n type: 'actions',\r\n width: 100,\r\n hideable: false,\r\n getActions: params => {\r\n const fila = apiRef.current.getRowNode(params.id);\r\n const esDisabled = !esEditable(\r\n params.row,\r\n isRowEditable\r\n );\r\n const esVerFicha = hasVerFicha && esDisabled;\r\n\r\n return params.row.id\r\n ? [\r\n ...(hasEdit\r\n ? [\r\n esVerFicha ? (\r\n <ShowGridButton\r\n record={params.row}\r\n />\r\n ) : (\r\n <EditGridButton\r\n record={params.row}\r\n disabled={esDisabled}\r\n />\r\n ),\r\n ]\r\n : hasVerFicha\r\n ? [\r\n <ShowGridButton\r\n record={params.row}\r\n />,\r\n ]\r\n : []),\r\n ...actionButtons\r\n .filter(button => !!button)\r\n .map(button => {\r\n const { handler, ...rest } = button;\r\n return (\r\n <GridActionsCellItem\r\n showInMenu\r\n onClick={e =>\r\n typeof handler ===\r\n 'function'\r\n ? handler(\r\n {\r\n ...utils,\r\n record: params.row,\r\n },\r\n rest.key\r\n )\r\n : false\r\n }\r\n {...rest}\r\n />\r\n );\r\n }),\r\n ]\r\n : fila.children[0].indexOf(`${claveNuevo}=`) !==\r\n -1\r\n ? [\r\n <CreateGridButton\r\n record={\r\n claveNuevo\r\n ? {\r\n [claveNuevo]:\r\n fila.children[0]\r\n .split(\r\n `${claveNuevo}=`\r\n )[1]\r\n .replaceAll(\r\n '[',\r\n ''\r\n )\r\n .trim()\r\n .split('AND')[0]\r\n .trim(),\r\n }\r\n : undefined\r\n }\r\n />,\r\n ]\r\n : [];\r\n },\r\n },\r\n ])\r\n : translatedColumns;\r\n\r\n const hasBulkActionButtons = isValidElement(bulkActionButtons);\r\n\r\n const handleSelectionChange = rowSelectionModel => {\r\n if (!isLoading) {\r\n if (hasBulkActionButtons && !disableMultipleRowSelection) {\r\n onSelect(rowSelectionModel);\r\n } else {\r\n // Deselección sin checkboxes\r\n if (apiRef.current.isRowSelected(rowSelectionModel[0])) {\r\n onSelect([]);\r\n } else {\r\n onSelect(rowSelectionModel);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const handleFilterChange = params => {\r\n // TODO: El filtro no envía por ajax el operador entre multiples filtros OR/AND (params.logicOperator)\r\n setFilters(convertFilterModelToFilterValues(params), displayedFilters);\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Asistente isLoading={isLoading} />\r\n <DatagridRoot sx={sx} className={DatagridClasses.root}>\r\n {hasBulkActionButtons ? (\r\n <BulkActionsToolbar selectedIds={selectedIds}>\r\n {bulkActionButtons}\r\n </BulkActionsToolbar>\r\n ) : null}\r\n <Box\r\n sx={{ height: '70vh', width: '100%' }}\r\n className={DatagridClasses.tableWrapper}\r\n >\r\n <ThemeProvider theme={theme}>\r\n <DataGridPremium\r\n sx={{\r\n display: 'grid',\r\n gridTemplateRows: '70vh 1fr auto',\r\n }}\r\n slots={{\r\n //toolbar: GridToolbar,\r\n noRowsOverlay: CustomNoRowsOverlay,\r\n }}\r\n columns={finalColumns}\r\n rows={data}\r\n apiRef={apiRef}\r\n loading={isLoading}\r\n /*groupingColDef={params => {\r\n const override = {};\r\n\r\n if (params.fields.includes('nombrecompleto')) {\r\n return {\r\n headerName: 'Funcionario',\r\n valueFormatter: valueFormatterParams => {\r\n const rowNode =\r\n apiRef.current.getRowNode(\r\n valueFormatterParams.id\r\n );\r\n console.log(rowNode);\r\n\r\n return `By ${\r\n rowNode.groupingKey ?? ''\r\n }`;\r\n },\r\n };\r\n }\r\n\r\n return override;\r\n }}*/\r\n //disableSelectionOnClick\r\n hideFooterSelectedRowCount\r\n hideFooter\r\n disableMultipleRowSelection={\r\n disableMultipleRowSelection\r\n }\r\n checkboxSelection={hasBulkActionButtons}\r\n filterMode=\"server\"\r\n //filterModel={filterModel}\r\n onFilterModelChange={handleFilterChange}\r\n rowSelectionModel={selectedIds}\r\n onRowSelectionModelChange={handleSelectionChange}\r\n isRowSelectable={params => params.row.id}\r\n initialState={initialState}\r\n //experimentalFeatures={{ newEditingApi: true }}\r\n {...rest}\r\n />\r\n </ThemeProvider>\r\n </Box>\r\n </DatagridRoot>\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst GrillaSm = props => {\r\n const {\r\n sx,\r\n columns,\r\n actionButtons = [],\r\n hasEdit,\r\n isRowEditable,\r\n primaryText: pt,\r\n mobileColumns = '',\r\n } = props;\r\n\r\n let primaryText = pt;\r\n\r\n const utils = useUtilsGrilla(props);\r\n const { isLoading } = useListContext();\r\n\r\n useInitGrilla(props);\r\n\r\n if (!pt) {\r\n const finalColumns = !!mobileColumns\r\n ? mobileColumns\r\n .split(',')\r\n .map(name =>\r\n columns.find(\r\n column =>\r\n column.field === name ||\r\n column.field === name + '_lis'\r\n )\r\n )\r\n : columns;\r\n\r\n primaryText = record => (\r\n <Paper variant=\"outlined\" sx={{ pt: 2, pb: 2, pl: 2 }}>\r\n {finalColumns.map(column => {\r\n const {\r\n field,\r\n headerName,\r\n valueGetter,\r\n type = 'string',\r\n jsxMobile,\r\n } = column;\r\n return !!jsxMobile ? (\r\n <Box>{jsxMobile(record, column)}</Box>\r\n ) : type === 'boolean' ? (\r\n <Box>\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n color: valueGetter({\r\n value: record[field],\r\n })\r\n ? 'green'\r\n : 'red',\r\n }}\r\n >\r\n {headerName}\r\n </Box>\r\n </Box>\r\n ) : (\r\n <Box>{record[field]}</Box>\r\n );\r\n })}\r\n <Box>\r\n {actionButtons\r\n .filter(button => !!button)\r\n .map(button => {\r\n const {\r\n key,\r\n handler,\r\n icon = <SettingsIcon />,\r\n ...rest\r\n } = button;\r\n return (\r\n <Button\r\n onClick={e =>\r\n typeof handler === 'function'\r\n ? handler({ ...utils, record }, key)\r\n : false\r\n }\r\n {...rest}\r\n >\r\n {icon}\r\n </Button>\r\n );\r\n })}\r\n </Box>\r\n </Paper>\r\n );\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Asistente isLoading={isLoading} />\r\n <SimpleList\r\n linkType={record =>\r\n hasEdit && esEditable(record, isRowEditable)\r\n ? 'edit'\r\n : false\r\n }\r\n primaryText={primaryText}\r\n sx={sx}\r\n />\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst GrillaEtriek = props => {\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\r\n const { hasEdit } = useResourceDefinition(props);\r\n const { desktopSize = false } = props;\r\n\r\n return isSmall && desktopSize === false ? (\r\n <GrillaSm {...props} hasEdit={hasEdit} />\r\n ) : (\r\n <GrillaLg {...props} hasEdit={hasEdit} />\r\n );\r\n};\r\n\r\nexport default GrillaEtriek;\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 { 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: { ...fichaProps, etrs: rest.etrs } };\r\n};\r\n\r\nexport default useInitFicha;\r\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 { useContext, useEffect, useRef } from 'react';\nimport { useInput } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { etrRequerido } from '../../utils/utils';\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../FichaContext';\n\nconst useContenidoController = props => {\n const { source } = props;\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\n const asisEtr = useContext(FormEtrGridContext);\n const inEtrGrid = asisEtr !== undefined;\n const configInput = useSelector(state => {\n const configInputs = state.configInputs\n ? state.configInputs.filter(item => item.id === source)\n : [];\n return configInputs[0] ? configInputs[0] : null;\n });\n const {\n disabled: reduxDisabled,\n hidden: reduxHidden,\n required: reduxRequired,\n error: reduxError,\n label: reduxLabel,\n } = configInput || {};\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\n const reduxValidateError =\n typeof reduxError === 'function' ? reduxError : () => reduxError;\n\n const { [source]: initialProps = {}, etrs } = fichaProps;\n const {\n onFocus: onFocusProps,\n onChange: onChangeProps,\n onBlur: onBlurProps,\n hidden: hiddenProps = false,\n disabled: disabledProps = false,\n validate: propValidate,\n ...rest\n } = props;\n const { field } = useInput(props);\n const {\n onFocus: onFocusInitial,\n onBlur: onBlurInitial,\n onChange: onChangeInitial,\n hidden: hiddenInitial,\n disabled: disabledInitial,\n useContenido = useDefaultHook,\n validate: initValidate,\n ...restInitialProps\n } = initialProps;\n const hidden =\n inEtrGrid || hiddenInitial === undefined ? hiddenProps : hiddenInitial;\n const disabled =\n inEtrGrid || disabledInitial === undefined\n ? disabledProps\n : disabledInitial;\n const onFocus =\n inEtrGrid || onFocusInitial === undefined\n ? onFocusProps\n : onFocusInitial;\n const onBlur =\n inEtrGrid || onBlurInitial === undefined ? onBlurProps : onBlurInitial;\n const onChange =\n inEtrGrid || onChangeInitial === undefined\n ? onChangeProps\n : onChangeInitial;\n const utils = useUtilsFicha({ ...props, etrs, asisEtr });\n const dynamicProps = useContenido({\n ...rest,\n estado,\n hidden,\n isLoading,\n utils,\n ...restInitialProps,\n });\n const previousValue = useRef(field.value);\n\n useEffect(() => {\n if (\n reduxDisabled ||\n reduxHidden ||\n reduxRequired ||\n reduxError ||\n reduxLabel\n ) {\n field.onBlur(utils, estado);\n }\n }, [reduxRequired, reduxDisabled, reduxHidden, reduxError, reduxLabel]);\n\n if (dynamicProps === undefined) {\n throw new Error(\n `useContenido está devolviendo undefined para el contenido ${source}\\n Asegúrese de incluir una instrucción return al final de la función`\n );\n }\n\n const {\n hidden: hiddenDinamico,\n disabled: disabledDinamico,\n onFocus: onFocusDinamico,\n onChange: onChangeDinamico,\n onBlur: onBlurDinamico,\n validate: dynamicValidate,\n ...dynamicPropsRest\n } = dynamicProps;\n const onFocusFinal = onFocusDinamico || onFocus;\n const onBlurFinal = onBlurDinamico || onBlur;\n const onChangeFinal = onChangeDinamico || onChange;\n\n const argCero = { ...utils, prev: previousValue.current };\n const finalPropsValidate = Array.isArray(propValidate)\n ? propValidate\n : [propValidate];\n const finalInitValidate = Array.isArray(initValidate)\n ? initValidate\n : [initValidate];\n const finalDynamicValidate = Array.isArray(dynamicValidate)\n ? dynamicValidate\n : [dynamicValidate];\n const finalValidate = [\n ...finalPropsValidate,\n ...finalInitValidate,\n ...finalDynamicValidate,\n reduxValidate,\n reduxValidateError,\n ].filter(i => i !== undefined);\n\n return {\n propsContenido: {\n sx: { mt: 1, mb: 1, ml: { xs: 0, md: 1 }, mr: { xs: 0, md: 1 } },\n onFocus: e => {\n onFocusFinal && onFocus(utils, estado, e);\n previousValue.current = e.target.value;\n },\n onBlur: e => onBlurFinal && onBlurFinal(argCero, estado, e),\n onChange: e => onChangeFinal && onChangeFinal(argCero, estado, e),\n helperText: false,\n validate: finalValidate,\n ...rest,\n ...restInitialProps,\n ...dynamicPropsRest,\n disabled:\n reduxDisabled !== undefined\n ? reduxDisabled\n : disabledDinamico !== undefined\n ? disabledDinamico\n : disabled,\n ...(reduxLabel ? { label: reduxLabel } : {}),\n },\n hidden:\n reduxHidden !== undefined\n ? reduxHidden\n : hiddenDinamico !== undefined\n ? hiddenDinamico\n : hidden,\n };\n};\n\nexport default useContenidoController;\n","import ChevronLeft from '@mui/icons-material/ChevronLeft';\nimport Typography from '@mui/material/Typography';\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';\nimport useContenidoController from '../layout/contenidos/useContenidoController';\n\nexport const getFormcodFromResource = resource => resource.split('_')[1];\n\n//parse(): input -> record\n//format(): record -> input\n\nconst dateRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\n\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) return '';\n const pad = '00';\n const yyyy = value.getFullYear().toString();\n const MM = (value.getMonth() + 1).toString();\n const dd = value.getDate().toString();\n return `${yyyy}-${(pad + MM).slice(-2)}-${(pad + dd).slice(-2)}`;\n};\n\nexport const dateFormat = value => {\n // null, undefined and empty string values should not go through dateFormatter\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateRegex.test(value)) {\n const match = value.split('/');\n return match[2] + '-' + match[1] + '-' + match[0];\n }\n\n return convertDateToString(new Date(value));\n};\n\nexport const dateParser = value => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n const match = value.split('-');\n return match[2] + '/' + match[1] + '/' + match[0];\n};\n\nconst dateTimeRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}\\s\\d{2}:\\d{2}$/;\n\nexport const dateTimeFormat = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n const tmpMatch = value.split(' ');\n const match = tmpMatch[0].split('/');\n\n return match[2] + '-' + match[1] + '-' + match[0] + ' ' + tmpMatch[1];\n }\n\n return convertDateToString(new Date(value));\n};\n\nexport const dateTimeParser = value => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n\n const tmpMatch = value.split('T');\n const match = tmpMatch[0].split('-');\n\n return match[2] + '/' + match[1] + '/' + match[0] + ' ' + tmpMatch[1];\n};\n\nexport const timeFormat = value => {\n // v is a `Date` object\n if (!value) {\n return '';\n }\n\n if (value instanceof Date) {\n // v is a `Date` object\n return value.toString();\n } else if (value.indexOf(':') !== -1) {\n const match = value.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(value);\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 = (value, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n\n return value.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 sort,\n ...rest\n}) => rest;\n\nexport const Separador = props => {\n const { hidden } = useContenidoController(props);\n\n return (\n !hidden && (\n <Typography variant=\"h6\" gutterBottom id={props.source}>\n {props.children}\n </Typography>\n )\n );\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 = { inputFormat: '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.split('/').reverse().join('/'));\n const finDate = new Date(value.split('/').reverse().join('/'));\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\nexport const stringToDate = dateString => {\n if (!dateString) return '';\n const [day, month, year] = dateString.split('/').map(Number);\n return new Date(year, month - 1, day);\n};\n\nexport const stringToDateTime = dateTimeString => {\n if (!dateTimeString) return '';\n const [datePart, timePart] = dateTimeString.split(' ');\n const [day, month, year] = datePart.split('/').map(Number);\n const [hour, minute] = timePart.split(':').map(Number);\n return new Date(year, month - 1, day, hour, minute);\n};\n\nexport const dateToString = date => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = String(date.getFullYear());\n return `${day}/${month}/${year}`;\n};\n\nexport const dateTimeToString = date => {\n const options = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n };\n\n return date.toLocaleString('es', options).replace(',', '');\n};\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","import CloseIcon from '@mui/icons-material/Close';\nimport { DialogTitle, IconButton } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport * as React from 'react';\nimport { cloneElement, isValidElement } from 'react';\nimport { useTranslate } from 'react-admin';\n\nexport const FormDialogTitle = props => {\n const translate = useTranslate();\n const { defaultTitle, onClose, record, title } = props;\n\n return (\n <StyledDialogTitle id=\"edit-dialog-title\">\n {isValidElement(title)\n ? cloneElement(title, { record })\n : title\n ? translate(title, { _: title })\n : defaultTitle}\n <IconButton\n aria-label={translate('ra.action.close')}\n className={FormDialogTitleClasses.closeButton}\n onClick={onClose}\n >\n <CloseIcon />\n </IconButton>\n </StyledDialogTitle>\n );\n};\n\nconst PREFIX = 'RaFormDialogTitle';\n\nexport const FormDialogTitleClasses = {\n closeButton: `${PREFIX}-closeButton`,\n};\n\nconst StyledDialogTitle = styled(DialogTitle, {\n name: PREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => ({\n [`& .${FormDialogTitleClasses.closeButton}`]: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n}));\n","import { createContext } from 'react';\n\n/**\n * A context holding open/close state and callbacks for managing a child form dialog.\n *\n * @param value.open The open/close state. `true` if the dialog is open.\n * @param value.open The callback that gets called to open the dialog.\n * @param value.close The callback that gets called to close the dialog.\n */\nexport const FormDialogContext = createContext(null);\n","import { useContext } from 'react';\nimport { FormDialogContext } from './FormDialogContext';\n\n/**\n * Hook allowing to get the FormDialogContext.\n * Values are retrieved from the given props, or from the FormDialogContext if one exists.\n * For each value, props value takes precedence over context value.\n * In case values can be retrieved neither from props nor from context, `null` is returned.\n *\n * @param props.isOpen The open/close state. `true` if the dialog is open.\n * @param props.open The callback that gets called to open the dialog.\n * @param props.close The callback that gets called to close the dialog.\n *\n * @returns {FormDialogContextType} value from props or context.\n */\nexport const useFormDialogContext = props => {\n const context = useContext(FormDialogContext);\n const finalContext = {\n isOpen: props?.isOpen ?? context?.isOpen,\n open: props?.open ?? context?.open,\n close: props?.close ?? context?.close,\n };\n if (\n finalContext.isOpen == null &&\n finalContext.open == null &&\n finalContext.close == null\n ) {\n return null;\n } else {\n return finalContext;\n }\n};\n","import { Dialog } from '@mui/material';\nimport * as React from 'react';\nimport {\n CreateContextProvider,\n useCreateController,\n useNotify,\n useRedirect,\n useResourceContext,\n} from 'react-admin';\nimport { useQueryClient } from 'react-query';\nimport { Route, Routes } from 'react-router-dom';\nimport { FormDialogTitle } from './FormDialogTitle';\nimport { useFormDialogContext } from './useFormDialogContext';\n\n/**\n * A component which displays a creation form inside a dialog.\n *\n * By default, these components manages the open/close state of the dialog via the router.\n * In case it is used inside a `<FormDialogContext>`, or if the `isOpen`, `open` and `close`\n * props are provided directly, then the open/close state is managed by these values instead.\n *\n * @param {CreateDialogProps} props\n *\n * @example\n * const PostList = () => (\n * <>\n * <List>\n * <Datagrid>\n * ...\n * </Datagrid>\n * </List>\n * <CreateDialog>\n * <SimpleForm>\n * <TextField source=\"id\" />\n * <TextInput source=\"first_name\" validate={required()} />\n * <TextInput source=\"last_name\" validate={required()} />\n * <DateInput source=\"dob\" label=\"born\" validate={required()} />\n * <SelectInput source=\"sex\" choices={sexChoices} />\n * </SimpleForm>\n * </CreateDialog>\n * </>\n * );\n *\n * @example with a managed state\n * const CustomerEditForm = () => {\n * const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);\n * const openCreateDialog = useCallback(() => {\n * setIsCreateDialogOpen(true);\n * }, []);\n * const closeCreateDialog = useCallback(() => {\n * setIsCreateDialogOpen(false);\n * }, []);\n *\n * return (\n * <SimpleForm>\n * <Button\n * label=\"Create a new customer\"\n * onClick={() => openCreateDialog()}\n * />\n * <CreateDialog\n * fullWidth\n * maxWidth=\"md\"\n * isOpen={isCreateDialogOpen}\n * open={openCreateDialog}\n * close={closeCreateDialog}\n * resource=\"customers\"\n * >\n * <CustomerForm />\n * </CreateDialog>\n * </SimpleForm>\n * );\n * };\n */\nexport const CreateDialog = props => {\n const resource = useResourceContext(props);\n const context = useFormDialogContext(props);\n if (context) {\n return <CreateDialogView resource={resource} {...context} {...props} />;\n }\n\n return (\n <Routes>\n <Route\n path=\"create/*\"\n element={\n <CreateDialogView resource={resource} isOpen {...props} />\n }\n />\n </Routes>\n );\n};\n\nconst CreateDialogView = ({\n children,\n mutationOptions: mutationOptionsProp,\n title,\n redirect: redirectTo = 'list',\n ...props\n}) => {\n const redirect = useRedirect();\n const notify = useNotify();\n const queryClient = useQueryClient();\n const mutationOptions = {\n onSuccess: data => {\n notify('ra.notification.created', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n // Because redirecting to the list doesn't remount the List component, we need\n // to explicitly ask react-query to refresh the list queries\n queryClient.invalidateQueries([resource, 'getList']);\n queryClient.invalidateQueries([resource, 'getManyReference']);\n if (props.close) {\n props.close();\n } else {\n redirect(redirectTo, props.resource, data.id, data, {\n _scrollToTop: false,\n });\n }\n },\n ...mutationOptionsProp,\n };\n const controllerProps = useCreateController({\n ...props,\n mutationOptions,\n });\n const { defaultTitle, record, resource } = controllerProps;\n\n const handleClose = () => {\n if (props.close) {\n props.close();\n } else {\n redirect('list', props.resource, undefined, undefined, {\n _scrollToTop: false,\n });\n }\n };\n\n return (\n <Dialog\n open={props.isOpen}\n aria-labelledby=\"create-dialog-title\"\n onClose={handleClose}\n data-testid=\"create-dialog\"\n {...sanitizeRestProps(props)}\n >\n <FormDialogTitle\n id=\"create-dialog-title\"\n title={title}\n defaultTitle={defaultTitle}\n record={record}\n onClose={handleClose}\n />\n <CreateContextProvider value={controllerProps}>\n {children}\n </CreateContextProvider>\n </Dialog>\n );\n};\n\nconst sanitizeRestProps = ({\n basePath = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n history = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n mutationOptions = null,\n options = null,\n permissions = null,\n transform = null,\n isOpen = null,\n open = null,\n close = null,\n ...rest\n}) => rest;\n","import OpenInNewIcon from '@mui/icons-material/OpenInNew';\nimport { IconButton, Tooltip } from '@mui/material';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { Button, useTranslate } from 'react-admin';\nimport { FormDialogContext } from './FormDialogContext';\n\n/**\n * Internal component which creates a dialog, along with a `<Button>` to open it.\n * This component is also responsible for managing the open/close state of the Dialog\n * (using an internal state, not the router).\n *\n * @param props.dialog A React Element containing the dialog\n * @param props.inline Optional - Set to true for an inline button, having only an icon and a tooltip\n * @param props.icon Optional - The icon associated to the button label\n * @param props.label Optional - The button label\n * @param props.ButtonProps Optional - An object containing props to pass to the MUI Button\n */\nexport const FormDialogButton = props => {\n const translate = useTranslate();\n const [isOpen, setIsOpen] = useState(false);\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n const contextValue = useMemo(\n () => ({\n isOpen,\n open,\n close,\n }),\n [close, isOpen, open]\n );\n\n const {\n icon = defaultIcon,\n label = '',\n inline,\n dialog,\n ButtonProps,\n } = props;\n\n const onClick = useCallback(\n e => {\n open();\n e.stopPropagation();\n },\n [open]\n );\n\n const translatedLabel = translate(label, { _: label });\n\n const button = inline ? (\n <Tooltip title={translatedLabel}>\n <IconButton\n aria-label={translatedLabel}\n size=\"small\"\n color=\"primary\"\n {...ButtonProps}\n onClick={onClick}\n >\n {icon}\n </IconButton>\n </Tooltip>\n ) : (\n <Button label={translatedLabel} {...ButtonProps} onClick={onClick}>\n {icon}\n </Button>\n );\n\n return (\n <FormDialogContext.Provider value={contextValue}>\n {button}\n {dialog}\n </FormDialogContext.Provider>\n );\n};\n\nconst defaultIcon = <OpenInNewIcon />;\n","import ContentAdd from '@mui/icons-material/Add';\nimport React from 'react';\nimport { CreateDialog } from './CreateDialog';\nimport { FormDialogButton } from './FormDialogButton';\n\n/**\n * A component which creates a `<CreateDialog>`, along with a `<Button>` to open it.\n * This component is also responsible for managing the open/close state of the Dialog\n * (using an internal state, not the router).\n *\n * @example\n * const createButton = (\n * <CreateInDialogButton fullWidth maxWidth=\"md\">\n * <SimpleForm>\n * <TextInput source=\"first_name\" validate={required()} fullWidth />\n * </SimpleForm>\n * </CreateInDialogButton>\n * );\n */\nexport const CreateInDialogButton = props => {\n const {\n inline,\n icon = defaultIcon,\n label = 'ra.action.create',\n ButtonProps,\n ...createDialogProps\n } = props;\n\n const createDialog = <CreateDialog {...createDialogProps} />;\n\n return (\n <FormDialogButton\n icon={icon}\n label={label}\n dialog={createDialog}\n inline={inline}\n ButtonProps={ButtonProps}\n />\n );\n};\n\nconst defaultIcon = <ContentAdd />;\n","import * as React from 'react';\nimport { useCallback, useContext } from 'react';\nimport { Toolbar, useNotify, useSaveContext } from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\n\nconst classesPREFIX = 'FormEtriek';\n\nconst FormClasses = {\n form: `${classesPREFIX}-form`,\n tab: `${classesPREFIX}-tab`,\n contenido: `${classesPREFIX}-contenido`,\n};\n\nconst getClassesForm = theme => ({\n [`& .${FormClasses.form}`]: {\n maxHeight: '70vh',\n overflow: 'auto',\n },\n [`& .${FormClasses.tab}`]: {\n display: 'block',\n maxHeight: '65vh',\n overflow: 'auto',\n },\n [`& .${FormClasses.contenido}`]: {\n [theme.breakpoints.up('xs')]: {\n width: '100%', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n },\n [theme.breakpoints.up('md')]: {\n width: '12vw', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n '&.MuiAutocomplete-root': {\n width: '16vw',\n },\n },\n },\n});\n\nconst ToolbarFicha = props => {\n const { record, ...rest } = props;\n return <Toolbar {...rest} record={false} />;\n};\n\nconst dontSave = () => {};\n\nconst useFormSubmit = props => {\n const {\n fichaProps: { onBeforeSubmitFicha, etrs },\n estado,\n } = useContext(FichaContext);\n const utils = useUtilsSubmit({ ...props, etrs });\n const notify = useNotify();\n const { save } = useSaveContext();\n\n const submit = useCallback(\n async values => {\n const valid =\n onBeforeSubmitFicha &&\n (await onBeforeSubmitFicha(\n {\n form: { getValues: () => values },\n submit: save,\n ...utils,\n },\n estado\n ));\n if (typeof valid === 'string') {\n notify(valid, { type: 'error' });\n return dontSave();\n } else {\n return valid === undefined || valid ? save(values) : dontSave();\n }\n },\n [onBeforeSubmitFicha, notify, dontSave, save]\n );\n\n return typeof onBeforeSubmitFicha === 'function' ? submit : undefined;\n};\n\nexport {\n ToolbarFicha,\n useFormSubmit,\n FormClasses,\n getClassesForm,\n classesPREFIX,\n};\n","import { styled } from '@mui/material/styles';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { Create, useResourceContext } from 'react-admin';\nimport { useInitFicha, useNuevo } from '../utils';\nimport { useDefaultHook } from '../utils/useUtils';\nimport { AsistenteProvider } from './AsistenteContext';\nimport { CreateInDialogButton } from './dialogs/CreateInDialogButton';\nimport { FichaContext } from './FichaContext';\nimport { ProgressProvider } from './ProgressContext';\nimport { getClassesForm, classesPREFIX } from './utilsForm';\n\nconst CreateEtriek = props => {\n const {\n useFormulario = useDefaultHook,\n enableLoad = true,\n tipo,\n ...rest\n } = props;\n const resource = useResourceContext(props);\n const CreateComponent = tipo === 'ventana' ? CreateInDialogButton : Create;\n\n const { data: initialValues, isLoading } = useNuevo(resource, {\n enabled: enableLoad,\n });\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(\n () => ({ estado: 'N', initialValues, isLoading, fichaProps }),\n [initialValues, isLoading, fichaProps]\n );\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <AsistenteProvider>\n <CreateComponent\n redirect=\"list\"\n {...rest}\n {...fichaProps?.panel}\n />\n </AsistenteProvider>\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n\nCreateEtriek.propTypes = {\n useFormulario: PropTypes.func,\n};\n\nconst StyledCreate = styled(CreateEtriek, {\n name: classesPREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => getClassesForm(theme));\n\nexport { StyledCreate as CreateEtriek };\n","import { Dialog } from '@mui/material';\nimport * as React from 'react';\nimport {\n ListContextProvider,\n useListController,\n useNotify,\n useRedirect,\n useResourceContext,\n} from 'react-admin';\nimport { useQueryClient } from 'react-query';\nimport { Route, Routes } from 'react-router-dom';\nimport { FormDialogTitle } from './FormDialogTitle';\nimport { useFormDialogContext } from './useFormDialogContext';\n\n/**\n * A component which displays a creation form inside a dialog.\n *\n * By default, these components manages the open/close state of the dialog via the router.\n * In case it is used inside a `<FormDialogContext>`, or if the `isOpen`, `open` and `close`\n * props are provided directly, then the open/close state is managed by these values instead.\n *\n * @param {ListDialogProps} props\n *\n * @example\n * const PostList = () => (\n * <>\n * <List>\n * <Datagrid>\n * ...\n * </Datagrid>\n * </List>\n * <ListDialog>\n * <SimpleForm>\n * <TextField source=\"id\" />\n * <TextInput source=\"first_name\" validate={required()} />\n * <TextInput source=\"last_name\" validate={required()} />\n * <DateInput source=\"dob\" label=\"born\" validate={required()} />\n * <SelectInput source=\"sex\" choices={sexChoices} />\n * </SimpleForm>\n * </ListDialog>\n * </>\n * );\n *\n * @example with a managed state\n * const CustomerEditForm = () => {\n * const [isListDialogOpen, setIsListDialogOpen] = useState(false);\n * const openListDialog = useCallback(() => {\n * setIsListDialogOpen(true);\n * }, []);\n * const closeListDialog = useCallback(() => {\n * setIsListDialogOpen(false);\n * }, []);\n *\n * return (\n * <SimpleForm>\n * <Button\n * label=\"List a new customer\"\n * onClick={() => openListDialog()}\n * />\n * <ListDialog\n * fullWidth\n * maxWidth=\"md\"\n * isOpen={isListDialogOpen}\n * open={openListDialog}\n * close={closeListDialog}\n * resource=\"customers\"\n * >\n * <CustomerForm />\n * </ListDialog>\n * </SimpleForm>\n * );\n * };\n */\nexport const ListDialog = props => {\n const resource = useResourceContext(props);\n const context = useFormDialogContext(props);\n if (context) {\n return <ListDialogView resource={resource} {...context} {...props} />;\n }\n\n return (\n <Routes>\n <Route\n path=\"/*\"\n element={\n <ListDialogView resource={resource} isOpen {...props} />\n }\n />\n </Routes>\n );\n};\n\nconst ListDialogView = ({\n children,\n mutationOptions: mutationOptionsProp,\n title,\n redirect: redirectTo = 'list',\n ...props\n}) => {\n const redirect = useRedirect();\n const notify = useNotify();\n const queryClient = useQueryClient();\n const mutationOptions = {\n onSuccess: data => {\n notify('ra.notification.created', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n // Because redirecting to the list doesn't remount the List component, we need\n // to explicitly ask react-query to refresh the list queries\n queryClient.invalidateQueries([resource, 'getList']);\n queryClient.invalidateQueries([resource, 'getManyReference']);\n if (props.close) {\n props.close();\n } else {\n redirect(redirectTo, props.resource, data.id, data, {\n _scrollToTop: false,\n });\n }\n },\n ...mutationOptionsProp,\n };\n const controllerProps = useListController({\n ...props,\n mutationOptions,\n });\n const { defaultTitle, record, resource } = controllerProps;\n\n const handleClose = () => {\n if (props.close) {\n props.close();\n } else {\n redirect('list', props.resource, undefined, undefined, {\n _scrollToTop: false,\n });\n }\n };\n\n return (\n <Dialog\n open={props.isOpen}\n aria-labelledby=\"list-dialog-title\"\n onClose={handleClose}\n data-testid=\"list-dialog\"\n {...sanitizeRestProps(props)}\n >\n <FormDialogTitle\n id=\"list-dialog-title\"\n title={title}\n defaultTitle={defaultTitle}\n record={record}\n onClose={handleClose}\n />\n <ListContextProvider value={controllerProps}>\n {children}\n </ListContextProvider>\n </Dialog>\n );\n};\n\nconst sanitizeRestProps = ({\n basePath = null,\n hasCreate = null,\n hasEdit = null,\n hasShow = null,\n history = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n mutationOptions = null,\n options = null,\n permissions = null,\n transform = null,\n isOpen = null,\n open = null,\n close = null,\n ...rest\n}) => rest;\n","import ContentAdd from '@mui/icons-material/Add';\nimport React from 'react';\nimport { ListDialog } from './ListDialog';\nimport { FormDialogButton } from './FormDialogButton';\n\n/**\n * A component which creates a `<ListDialog>`, along with a `<Button>` to open it.\n * This component is also responsible for managing the open/close state of the Dialog\n * (using an internal state, not the router).\n *\n * @example\n * const createButton = (\n * <ListInDialogButton fullWidth maxWidth=\"md\">\n * <SimpleForm>\n * <TextInput source=\"first_name\" validate={required()} fullWidth />\n * </SimpleForm>\n * </ListInDialogButton>\n * );\n */\nexport const ListInDialogButton = props => {\n const {\n inline,\n icon = defaultIcon,\n label = 'ra.action.list',\n ButtonProps,\n ...listDialogProps\n } = props;\n\n const listDialog = <ListDialog {...listDialogProps} />;\n\n return (\n <FormDialogButton\n icon={icon}\n label={label}\n dialog={listDialog}\n inline={inline}\n ButtonProps={ButtonProps}\n />\n );\n};\n\nconst defaultIcon = <ContentAdd />;\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { List } from 'react-admin';\nimport { AsistenteProvider } from './AsistenteContext';\nimport { ListInDialogButton } from './dialogs/ListInDialogButton';\n\nconst ListEtriek = props => {\n const { tipo, ...rest } = props;\n\n const ListComponent = tipo === 'ventana' ? ListInDialogButton : List;\n\n return (\n <AsistenteProvider>\n <ListComponent {...rest} />\n </AsistenteProvider>\n );\n};\n\nListEtriek.propTypes = {\n useGrilla: PropTypes.func,\n};\n\nexport { ListEtriek };\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';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport clsx from 'clsx';\r\nimport * as React from 'react';\r\nimport { useDelete, useRecordContext, useTranslate } from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({\r\n classes,\r\n filterValues,\r\n handleSubmit,\r\n invalid,\r\n label,\r\n pristine,\r\n resource,\r\n saving,\r\n selectedIds,\r\n redirect,\r\n ...rest\r\n}) => rest;\r\n\r\nconst DeleteButtonNoWarning = props => {\r\n const translate = useTranslate();\r\n const {\r\n resource,\r\n redirect,\r\n className,\r\n icon,\r\n label = 'ra.action.delete',\r\n ...rest\r\n } = props;\r\n\r\n const record = useRecordContext();\r\n const [deleteOne, { isLoading }] = useDelete(resource, { id: record.id });\r\n\r\n return (\r\n <Tooltip title={translate('ra.action.delete')}>\r\n <IconButton\r\n disabled={isLoading}\r\n onClick={() => deleteOne()}\r\n label={label}\r\n className={clsx('ra-delete-button', className)}\r\n key=\"button\"\r\n {...sanitizeRestProps(rest)}\r\n size=\"large\"\r\n >\r\n {icon}\r\n </IconButton>\r\n </Tooltip>\r\n );\r\n};\r\n\r\nDeleteButtonNoWarning.defaultProps = {\r\n redirect: 'list',\r\n icon: <ActionDelete />,\r\n};\r\n\r\nexport default DeleteButtonNoWarning;\r\n","import { styled } from '@mui/material/styles';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { Edit, useEditController } from 'react-admin';\nimport { useInitFicha } from '../utils';\nimport { useDefaultHook } from '../utils/useUtils';\nimport { AsistenteProvider } from './AsistenteContext';\nimport { FichaContext } from './FichaContext';\nimport { ProgressProvider } from './ProgressContext';\nimport { getClassesForm, classesPREFIX } from './utilsForm';\n\n// https://marmelab.com/react-admin/Edit.html#transform\n// Al guardar un formulario, react-admin transforma valores vacíos en null, salvo que ya vinieran vacíos\n// Este transform por defecto evita que se envíen valores null\nconst defaultTransform = data => {\n const sanitizedData = {};\n for (const key in data) {\n if (typeof data[key] === 'string' && data[key].trim().length === 0)\n continue;\n\n if (data[key] == null) {\n data[key] = '';\n }\n sanitizedData[key] = data[key];\n }\n\n return sanitizedData;\n};\n\nconst EditEtriek = props => {\n const {\n useFormulario = useDefaultHook,\n mutationMode = 'pessimistic',\n ...rest\n } = props;\n const controllerProps = useEditController({ mutationMode, ...rest });\n const { record: initialValues, isLoading } = controllerProps;\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\n [initialValues, isLoading, fichaProps]\n );\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <AsistenteProvider>\n <Edit\n mutationMode={mutationMode}\n transform={defaultTransform}\n {...rest}\n {...fichaProps?.panel}\n />\n </AsistenteProvider>\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n\nconst StyledEdit = styled(EditEtriek, {\n name: classesPREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => getClassesForm(theme));\n\nexport { StyledEdit as EditEtriek };\n","import CancelIcon from '@mui/icons-material/Cancel';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport Box from '@mui/material/Box';\r\nimport * as React from 'react';\r\nimport { Button, Form, SaveButton, useResourceContext } from 'react-admin';\r\n\r\nconst FormDialog = React.forwardRef((props, ref) => {\r\n const {\r\n isOpen,\r\n onSubmit,\r\n onClose,\r\n title,\r\n dialogText,\r\n children,\r\n hasAccept = true,\r\n hasCancel = true,\r\n isLoading = false,\r\n } = props;\r\n\r\n const resource = useResourceContext(props);\r\n\r\n const handleClose = e => {\r\n onClose && onClose(e);\r\n };\r\n\r\n return (\r\n <Dialog\r\n ref={ref}\r\n open={isOpen}\r\n fullWidth\r\n onClose={handleClose}\r\n aria-labelledby=\"form-dialog-title\"\r\n >\r\n <DialogTitle id=\"form-dialog-title\">{title}</DialogTitle>\r\n <Form resource={resource} onSubmit={onSubmit}>\r\n <DialogContent dividers>\r\n <DialogContentText>{dialogText}</DialogContentText>\r\n <Box sx={{ mt: 2 }}>{children}</Box>\r\n </DialogContent>\r\n {(hasAccept || hasCancel) && (\r\n <DialogActions>\r\n {hasCancel && (\r\n <Button\r\n label=\"ra.action.cancel\"\r\n disabled={isLoading}\r\n onClick={e => handleClose(e)}\r\n >\r\n <CancelIcon />\r\n </Button>\r\n )}\r\n {hasAccept && (\r\n <SaveButton\r\n alwaysEnable\r\n label=\"Ok\"\r\n disabled={isLoading}\r\n />\r\n )}\r\n </DialogActions>\r\n )}\r\n </Form>\r\n </Dialog>\r\n );\r\n});\r\n\r\nexport default FormDialog;\r\n","import { CardContent, CircularProgress } from '@mui/material';\nimport * as React from 'react';\nimport { useContext, useEffect } from 'react';\nimport { useResourceContext } from 'react-admin';\nimport useUtilsFicha from '../utils/useUtils';\nimport Asistente from './Asistente';\nimport { FichaContext } from './FichaContext';\nimport useFormProgress from './ProgressContext';\n\nconst objVacio = {};\nconst blockSx = {\n pointerEvents: 'none',\n backgroundColor: '#ffffff',\n opacity: 0.6,\n position: 'relative',\n};\n\nconst FormContainer = props => {\n const context = useFormProgress();\n const resource = useResourceContext(props);\n const { estado, isLoading, initialValues, fichaProps } =\n useContext(FichaContext);\n const utils = useUtilsFicha({ resource, etrs: fichaProps.etrs });\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 const block = context.open ? blockSx : objVacio;\n\n return (\n <CardContent\n sx={{\n ...props.sx,\n ...block,\n }}\n >\n {context.open && (\n <CircularProgress\n sx={{\n position: 'absolute',\n left: '50%',\n top: '50%',\n }}\n thickness={4}\n size={50}\n />\n )}\n <Asistente isLoading={isLoading} />\n {props.children}\n </CardContent>\n );\n};\n\nexport default FormContainer;\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { SimpleForm } from 'react-admin';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\nimport { useFormSubmit } from './utilsForm';\n\nconst FormEtriek = props => {\n const {\n initialValues,\n fichaProps: { config = {} },\n } = useContext(FichaContext);\n const submit = useFormSubmit(props);\n\n if (!initialValues) return null;\n\n return (\n <SimpleForm\n mode=\"onBlur\"\n {...props}\n onSubmit={submit}\n defaultValues={initialValues}\n component={FormContainer}\n {...config}\n />\n );\n};\n\nFormEtriek.propTypes = {\n ...SimpleForm.propTypes,\n};\n\nexport { FormEtriek };\n","import ExpandMore from '@mui/icons-material/ExpandMore';\r\nimport { alpha } from '@mui/material/styles';\r\nimport {\r\n Collapse,\r\n List,\r\n ListItemIcon,\r\n MenuItem,\r\n Tooltip,\r\n Typography,\r\n} from '@mui/material';\r\nimport * as React from 'react';\r\nimport { useSidebarState, useTranslate } from 'react-admin';\r\n\r\nconst SubMenu = props => {\r\n const { handleToggle, isOpen, name, icon, children, dense } = props;\r\n const translate = useTranslate();\r\n\r\n const [sidebarIsOpen] = useSidebarState();\r\n\r\n const header = (\r\n <MenuItem dense={dense} onClick={handleToggle}>\r\n <ListItemIcon sx={{ minWidth: 5 }}>\r\n {isOpen ? <ExpandMore /> : icon}\r\n </ListItemIcon>\r\n <Typography variant=\"inherit\" color=\"textSecondary\">\r\n {translate(name)}\r\n </Typography>\r\n </MenuItem>\r\n );\r\n\r\n return (\r\n <div>\r\n {sidebarIsOpen || isOpen ? (\r\n header\r\n ) : (\r\n <Tooltip title={translate(name)} placement=\"right\">\r\n {header}\r\n </Tooltip>\r\n )}\r\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\r\n <List\r\n dense={dense}\r\n component=\"div\"\r\n disablePadding\r\n sx={{\r\n paddingLeft: (props.children.props.children[0]\r\n ? props.children.props.children[0].key\r\n : ''\r\n ).startsWith('menu')\r\n ? 2\r\n : 0,\r\n backgroundColor: theme =>\r\n //alpha(theme.palette.grey['400'], 0.24),\r\n alpha(theme.palette.secondary.light, 0.24),\r\n '& a': {\r\n transition:\r\n 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\r\n paddingLeft: sidebarIsOpen ? 4 : 2,\r\n },\r\n }}\r\n >\r\n {children}\r\n </List>\r\n </Collapse>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SubMenu;\r\n","import SettingsIcon from '@mui/icons-material/Settings';\r\nimport { Box, useMediaQuery } from '@mui/material';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport {\r\n DashboardMenuItem,\r\n Menu as RaMenu,\r\n MenuItemLink,\r\n useSidebarState,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport SubMenu from './SubMenu';\r\n\r\nconst renderMenu = props => {\r\n const { items: menus, translate, ...rest } = props;\r\n const { state, handleToggle, dense } = rest;\r\n\r\n return (\r\n menus && (\r\n <div>\r\n {menus.map(item => {\r\n const { name, menu, label, icon = 'settings' } = item;\r\n\r\n return menu ? (\r\n <SubMenu\r\n key={name}\r\n name={label}\r\n handleToggle={() => handleToggle(name)}\r\n isOpen={state[name]}\r\n icon={<SettingsIcon />}\r\n dense={dense}\r\n >\r\n {renderMenu({ items: menu, translate, ...rest })}\r\n </SubMenu>\r\n ) : (\r\n <MenuItemLink\r\n key={name}\r\n to={`/${name}`}\r\n //TODO: Cambiar junto con 'es.js'\r\n //primaryText={translate(`resources.${resource}.name`, {smart_count: 2})}\r\n primaryText={translate(`resources.${name}.name`, {\r\n _: label,\r\n })}\r\n dense={dense}\r\n leftIcon={<SettingsIcon />}\r\n //classes={{active: activeClassName, icon: iconClass}}\r\n //className={className}\r\n />\r\n );\r\n })}\r\n </div>\r\n )\r\n );\r\n};\r\n\r\nconst Menu = ({ dense = false }) => {\r\n const translate = useTranslate();\r\n const [state, setState] = useState({ mnuPrueba: false });\r\n const isXSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\r\n const [open] = useSidebarState();\r\n\r\n const menus = JSON.parse(localStorage.getItem('menus'));\r\n\r\n const className = ''; //classes.itemLink;\r\n const iconClass = ''; //classes.itemIcon;\r\n const activeClassName = ''; //classes.secondary;\r\n\r\n const handleToggle = menu => {\r\n setState(state => ({ ...state, [menu]: !state[menu] }));\r\n };\r\n\r\n const itemsFn = renderMenu({\r\n items: menus,\r\n handleToggle,\r\n state,\r\n activeClassName,\r\n iconClass,\r\n className,\r\n open,\r\n dense,\r\n translate,\r\n });\r\n\r\n return (\r\n <Box\r\n sx={{\r\n width: open ? 230 : 50,\r\n marginTop: 1,\r\n marginBottom: 1,\r\n transition: theme =>\r\n theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n }}\r\n >\r\n <RaMenu>\r\n <DashboardMenuItem\r\n primaryText={translate('ra.page.dashboard')}\r\n //classes={{ active: activeClassName, icon: iconClass }}\r\n //className={className}\r\n />\r\n {itemsFn}\r\n {isXSmall && (\r\n <MenuItemLink\r\n to=\"/configuration\"\r\n primaryText={translate('pos.configuration')}\r\n leftIcon={<SettingsIcon />}\r\n dense={dense}\r\n //classes={{ active: activeClassName, icon: iconClass }}\r\n //className={className}\r\n />\r\n )}\r\n </RaMenu>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Menu;\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, useContext, useMemo } from 'react';\r\nimport {\r\n CreateButton,\r\n ExportButton,\r\n FilterButton,\r\n FilterContext,\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 defaultJsBotonGrilla = (_, __) => {\r\n alert('Falta implementar la función jsBotonGrilla');\r\n};\r\n\r\nconst ListActionsEtriek = props => {\r\n const {\r\n className,\r\n filters: filtersProp,\r\n hasCreate,\r\n children,\r\n hideFilterButton = false,\r\n jsBotonGrilla = defaultJsBotonGrilla,\r\n ...rest\r\n } = props;\r\n const {\r\n sort,\r\n displayedFilters,\r\n filterValues,\r\n exporter,\r\n showFilter,\r\n total,\r\n } = useListContext(props);\r\n const resource = useResourceContext(props);\r\n const { hasCreate: hasCreateContext } = useResourceDefinition(props);\r\n const filters = useContext(FilterContext) || filtersProp;\r\n const listContext = useListContext(props);\r\n const utils = useUtilsGrilla(props);\r\n const utilsGrilla = { ...utils, ...listContext };\r\n\r\n delete rest.hasCreate;\r\n\r\n return useMemo(\r\n () => (\r\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\r\n {!hideFilterButton\r\n ? filtersProp\r\n ? cloneElement(filtersProp, {\r\n resource,\r\n showFilter,\r\n displayedFilters,\r\n filterValues,\r\n context: 'button',\r\n })\r\n : filters && <FilterButton />\r\n : null}\r\n {hasCreateContext && <CreateButton />}\r\n {exporter !== false && (\r\n <ExportButton\r\n disabled={total === 0}\r\n resource={resource}\r\n sort={sort}\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 => {\r\n if (child.props.onClick) {\r\n child.props.onClick(e);\r\n }\r\n jsBotonGrilla(utilsGrilla, child.key);\r\n }\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 if (child.props.onClick) {\r\n child.props.onClick(e);\r\n }\r\n jsBotonGrilla(utilsGrilla, option.key);\r\n },\r\n }))\r\n : null,\r\n })\r\n )}\r\n </TopToolbar>\r\n ),\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n [\r\n resource,\r\n displayedFilters,\r\n filterValues,\r\n filtersProp,\r\n showFilter,\r\n filters,\r\n total,\r\n className,\r\n sort,\r\n hideFilterButton,\r\n exporter,\r\n hasCreateContext,\r\n ]\r\n );\r\n};\r\n\r\nexport default ListActionsEtriek;\r\n","import LockIcon from '@mui/icons-material/Lock';\r\nimport { Box } from '@mui/material';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Button from '@mui/material/Button';\r\nimport Card from '@mui/material/Card';\r\nimport CardActions from '@mui/material/CardActions';\r\nimport CircularProgress from '@mui/material/CircularProgress';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport {\r\n Form,\r\n PasswordInput,\r\n TextInput,\r\n useLogin,\r\n useNotify,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst Login = props => {\r\n const {\r\n loginBackgroundImage,\r\n nameSource = 'username',\r\n passwordSource = 'password',\r\n } = props;\r\n const [loading, setLoading] = useState(false);\r\n const translate = useTranslate();\r\n const loginButtonText = translate('ra.auth.sign_in');\r\n const notify = useNotify();\r\n const login = useLogin();\r\n const location = useLocation();\r\n\r\n const handleSubmit = values => {\r\n setLoading(true);\r\n login(values, location.state ? location.state.nextPathname : '/').catch(\r\n error => {\r\n setLoading(false);\r\n notify(\r\n typeof error === 'string'\r\n ? error\r\n : typeof error === 'undefined' || !error.message\r\n ? 'ra.auth.sign_in_error'\r\n : error.message,\r\n {\r\n type: 'error',\r\n messageArgs: {\r\n _:\r\n typeof error === 'string'\r\n ? error\r\n : error && error.message\r\n ? error.message\r\n : undefined,\r\n },\r\n }\r\n );\r\n }\r\n );\r\n };\r\n\r\n const validate = values => {\r\n const errors = {};\r\n if (!values[nameSource]) {\r\n errors[nameSource] = translate('ra.validation.required');\r\n }\r\n if (!values[passwordSource]) {\r\n errors[passwordSource] = translate('ra.validation.required');\r\n }\r\n return errors;\r\n };\r\n\r\n return (\r\n <Form onSubmit={handleSubmit} validate={validate}>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n minHeight: '100vh',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n backgroundImage: loginBackgroundImage,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n }}\r\n >\r\n <Card sx={{ minWidth: 300, marginTop: '6em' }}>\r\n <Box\r\n sx={{\r\n margin: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <Avatar\r\n sx={{\r\n backgroundColor: 'secondary.main',\r\n }}\r\n >\r\n <LockIcon />\r\n </Avatar>\r\n </Box>\r\n <Box\r\n sx={{\r\n marginTop: '1em',\r\n marginBottom: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n color: 'grey.600',\r\n }}\r\n >\r\n Inicio de Sesión\r\n </Box>\r\n <Box sx={{ padding: '0 1em 1em 1em' }}>\r\n <Box sx={{ marginTop: 0 }}>\r\n <TextInput\r\n autoFocus\r\n fullWidth\r\n name={nameSource}\r\n label={translate('ra.auth.username')}\r\n disabled={loading}\r\n />\r\n </Box>\r\n <Box sx={{ marginTop: 0 }}>\r\n <PasswordInput\r\n name={passwordSource}\r\n label={translate('ra.auth.password')}\r\n type=\"password\"\r\n disabled={loading}\r\n />\r\n </Box>\r\n </Box>\r\n <CardActions sx={{ padding: '0 1em 1em 1em' }}>\r\n <Button\r\n variant=\"contained\"\r\n type=\"submit\"\r\n color=\"primary\"\r\n disabled={loading}\r\n fullWidth\r\n >\r\n {loading && (\r\n <CircularProgress\r\n sx={{ position: 'absolute' }}\r\n size={18}\r\n thickness={2}\r\n />\r\n )}\r\n {loginButtonText}\r\n </Button>\r\n </CardActions>\r\n </Card>\r\n </Box>\r\n </Form>\r\n );\r\n};\r\n\r\nexport default Login;\r\n","import { Box } from '@mui/material';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\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 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 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 <Box sx={{ display: 'inline-block' }} {...sanitizeRestProps(rest)}>\r\n <Button\r\n size=\"large\"\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 <Box\r\n component=\"span\"\r\n sx={{ paddingRight: '4px' }}\r\n ></Box>\r\n <FieldTitle label={option.label} resource={resource} />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default MenuButton;\r\n","import Typography from '@mui/material/Typography';\r\nimport * as React from 'react';\r\nimport { useRecordContext } from 'react-admin';\r\n\r\nconst MultiTextField = props => {\r\n const { fields, className, textAlign, sortable, ...rest } = props;\r\n const { campos, separador = '', secundario = [], hasSecundario } = fields;\r\n const record = useRecordContext();\r\n const principal = campos\r\n .map(item => (record[item] !== undefined ? record[item] : item))\r\n .join(`${separador}`);\r\n\r\n return (\r\n <Typography noWrap variant=\"inherit\" className={className} {...rest}>\r\n {principal}\r\n {hasSecundario && (\r\n <Typography\r\n component=\"span\"\r\n display=\"block\"\r\n color=\"textSecondary\"\r\n variant=\"caption\"\r\n >\r\n {secundario\r\n .map(\r\n item =>\r\n `${item.etiqueta || '---'}: ${\r\n record[item.campo] || '---'\r\n }`\r\n )\r\n .join(' ')}\r\n </Typography>\r\n )}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport default MultiTextField;\r\n","import { styled } from '@mui/material/styles';\r\nimport * 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\nimport { getClassesForm, classesPREFIX } from './utilsForm';\r\n\r\nconst 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\r\nconst StyledShow = styled(ShowEtriek, {\r\n name: classesPREFIX,\r\n overridesResolver: (props, styles) => styles.root,\r\n})(({ theme }) => getClassesForm(theme));\r\n\r\nexport { StyledShow as ShowEtriek };\r\n","import { CardContent, Divider } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n isValidElement,\n useContext,\n useState,\n} from 'react';\nimport {\n Form,\n FormTab,\n getTabbedFormTabFullPath,\n TabbedFormTabs,\n Toolbar,\n useResourceContext,\n} from 'react-admin';\nimport {\n matchPath,\n Route,\n Routes,\n useLocation,\n useResolvedPath,\n} from 'react-router-dom';\nimport useUtilsFicha from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\n\nconst useFormRootPath = () => {\n const location = useLocation();\n const createMatch = matchPath(':resource/create/*', location.pathname);\n const editMatch = matchPath(':resource/:id/*', location.pathname);\n\n if (createMatch) {\n return createMatch.pathnameBase;\n }\n\n if (editMatch) {\n return editMatch.pathnameBase;\n }\n\n return '';\n};\n\nexport const TabbedFormView = props => {\n const {\n children,\n className,\n component: Component = DefaultComponent,\n formRootPathname,\n syncWithLocation = true,\n tabs = DefaultTabs,\n toolbar = DefaultToolbar,\n onChange,\n ...rest\n } = props;\n const location = useLocation();\n const resolvedPath = useResolvedPath('');\n const resource = useResourceContext(props);\n const [tabValue, setTabValue] = useState(0);\n const {\n fichaProps: { etrs },\n } = useContext(FichaContext);\n const utils = useUtilsFicha({ ...props, etrs });\n const { estado } = useContext(FichaContext);\n\n const handleTabChange = (event, value) => {\n if (!syncWithLocation) {\n setTabValue(value);\n if (onChange) {\n onChange(\n utils,\n estado,\n {\n newTab: value,\n prevTab: tabValue,\n setTab: setTabValue,\n },\n event\n );\n }\n }\n };\n\n const renderTabHeaders = () =>\n cloneElement(\n tabs,\n {\n onChange: handleTabChange,\n syncWithLocation,\n url: formRootPathname,\n value: tabValue,\n },\n children\n );\n\n return (\n <Root\n className={clsx('tabbed-form', className)}\n {...sanitizeRestPropsView(rest)}\n >\n {syncWithLocation ? (\n <Routes>\n <Route path=\"/*\" element={renderTabHeaders()} />\n </Routes>\n ) : (\n renderTabHeaders()\n )}\n <Divider />\n <Component>\n {/* All tabs are rendered (not only the one in focus), to allow validation\n on tabs not in focus. The tabs receive a `hidden` property, which they'll\n use to hide the tab using CSS if it's not the one in focus.\n See https://github.com/marmelab/react-admin/issues/1866 */}\n {Children.map(children, (tab, index) => {\n if (!tab) {\n return null;\n }\n const tabPath = getTabbedFormTabFullPath(tab, index);\n const hidden = syncWithLocation\n ? !matchPath(\n `${resolvedPath.pathname}/${tabPath}`,\n location.pathname\n )\n : tabValue !== index;\n\n return isValidElement(tab)\n ? React.cloneElement(tab, {\n intent: 'content',\n resource,\n hidden,\n value: syncWithLocation ? tabPath : index,\n })\n : null;\n })}\n </Component>\n {toolbar !== false ? toolbar : null}\n </Root>\n );\n};\n\nconst DefaultTabs = <TabbedFormTabs />;\nconst DefaultComponent = ({ children }) => (\n <CardContent>{children}</CardContent>\n);\nconst DefaultToolbar = <Toolbar />;\n\nconst PREFIX = 'RaTabbedForm';\n\nexport const TabbedFormClasses = {\n errorTabButton: `${PREFIX}-errorTabButton`,\n};\n\nconst Root = styled('div', {\n name: PREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => ({\n [`& .MuiTab-root.${TabbedFormClasses.errorTabButton}`]: {\n color: theme.palette.error.main,\n },\n}));\n\nconst sanitizeRestPropsView = ({ record, resource, ...rest }) => rest;\n\nexport const TabbedForm = props => {\n const { onChange, ...formProps } = props;\n const formRootPathname = useFormRootPath();\n\n return (\n <Form formRootPathname={formRootPathname} {...formProps}>\n <TabbedFormView\n formRootPathname={formRootPathname}\n {...sanitizeRestProps(props)}\n />\n </Form>\n );\n};\n\nTabbedForm.Tab = FormTab;\n\nconst sanitizeRestProps = ({\n criteriaMode,\n defaultValues,\n delayError,\n formRootPathname,\n mode,\n noValidate,\n onSubmit,\n record,\n resetOptions,\n resolver,\n reValidateMode,\n sanitizeEmptyValues,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n validate,\n warnWhenUnsavedChanges,\n ...rest\n}) => rest;\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\nimport { TabbedForm } from './TabbedForm';\nimport { useFormSubmit } from './utilsForm';\n\nexport const TabbedFormEtriek = props => {\n const {\n initialValues,\n fichaProps: { config = {} },\n } = useContext(FichaContext);\n const submit = useFormSubmit(props);\n\n if (!initialValues) return null;\n\n return (\n <TabbedForm\n mode=\"onBlur\"\n {...props}\n onSubmit={submit}\n defaultValues={initialValues}\n component={FormContainer}\n {...config}\n /*toolbar={<ToolbarFicha/>}*/\n />\n );\n};\n\nTabbedFormEtriek.defaultProps = {\n syncWithLocation: false,\n};\n","import { defaultTheme } from 'react-admin';\r\n\r\n// TODO: Probablemente no sea necesario sobreescribir nada de los temas\r\n\r\nconst darkTheme = {\r\n ...defaultTheme,\r\n palette: {\r\n ...defaultTheme.palette,\r\n mode: 'dark',\r\n },\r\n components: {\r\n ...defaultTheme.components,\r\n MuiTextField: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n MuiFormControl: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n RaSidebar: {\r\n root: {\r\n drawerPaper: {\r\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\r\n },\r\n },\r\n },\r\n RaRichTextInput: {\r\n root: {\r\n '@global': {\r\n '.ra-rich-text-input': {\r\n '& .ql-editor': {\r\n '& p:not(:last-child)': {\r\n marginBottom: '0',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst lightTheme = {\r\n ...defaultTheme,\r\n palette: {\r\n ...defaultTheme.palette,\r\n mode: 'light',\r\n },\r\n components: {\r\n ...defaultTheme.components,\r\n MuiTextField: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n MuiFormControl: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n RaSidebar: {\r\n root: {\r\n drawerPaper: {\r\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\r\n },\r\n },\r\n },\r\n RaRichTextInput: {\r\n root: {\r\n '@global': {\r\n '.ra-rich-text-input': {\r\n '& .ql-editor': {\r\n '& p:not(:last-child)': {\r\n marginBottom: '0',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport { lightTheme, darkTheme };\r\n","import * as React from 'react';\nimport { useCallback, useState } from 'react';\nimport { Button, SaveButton, Toolbar, useNotify } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport { useUtils } from '../utils';\n\nconst FormToolbar = props => {\n const {\n jsBotoneraPart,\n estado,\n buttons,\n incluyeAcciones = false,\n resource,\n ...rest\n } = props;\n const [disabled, setDisabled] = useState(false);\n const utils = useUtils(rest);\n const notify = useNotify();\n const { trigger } = useFormContext();\n\n const jsBotoneraGral = useCallback(\n async (e, estado, id) => {\n if (typeof jsBotoneraPart === 'function') {\n const valid = await trigger();\n if (valid) {\n setDisabled(true);\n jsBotoneraPart(utils, estado, id, e).finally(() => {\n setDisabled(false);\n });\n } else {\n notify('Formulario no válido', { type: 'warning' });\n }\n } else {\n notify('Falta implementar jsBotoneraPart', {\n type: 'error',\n });\n }\n },\n [trigger, jsBotoneraPart, utils, notify]\n );\n\n return (\n <Toolbar>\n {incluyeAcciones ? <SaveButton sx={{ mr: 1 }} /> : null}\n {buttons.map(button => (\n <Button\n key={button.name}\n label={button.label}\n disabled={disabled}\n onClick={async e => {\n await jsBotoneraGral(e, estado, button.name);\n }}\n >\n {button.icon}\n </Button>\n ))}\n {/*{incluyeAcciones ? (\n <DeleteButton resource={resource} sx={{ ml: 1 }} />\n ) : null}*/}\n </Toolbar>\n );\n};\n\nexport default FormToolbar;\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 from_camera: 'From camera',\r\n take_foto: 'Take photo',\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","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\nspanishMessages.ra.message.delete_title = 'Eliminar';\r\nspanishMessages.ra.input.file.upload_single = 'Seleccione o arrastre archivo';\r\nspanishMessages.ra.input.image.upload_single = 'Seleccione o arrastre imagen';\r\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n from_camera: 'Desde camara',\r\n take_foto: 'Tomar foto',\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 * as React from 'react';\r\nimport { BooleanField as RaBooleanField, useRecordContext } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst BooleanField = props => {\r\n const { propsContenido, hidden } = useFieldController(props);\r\n const record = useRecordContext();\r\n const boolRecord = JSON.parse(JSON.stringify(record));\r\n const value = boolRecord[props.source];\r\n boolRecord[props.source] = value != '' && value != '0';\r\n\r\n return (\r\n !hidden && <RaBooleanField {...propsContenido} record={boolRecord} />\r\n );\r\n};\r\n\r\nexport default BooleanField;\r\n","import { PhotoCamera } from '@mui/icons-material';\r\nimport { Box, Button } from '@mui/material';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport AddAPhotoIcon from '@mui/icons-material/AddAPhoto';\r\nimport React, { Fragment, useEffect, useState } from 'react';\r\nimport { Confirm, useNotify, useTranslate } from 'react-admin';\r\n\r\nconst FotoButton = props => {\r\n const [open, setOpen] = useState(false);\r\n const [fotoTomada, setFotoTomada] = useState(false);\r\n const notify = useNotify();\r\n const translate = useTranslate();\r\n const { field, sx } = props;\r\n\r\n useEffect(() => {\r\n if (open) {\r\n const openCamera = async () => {\r\n let stream = null;\r\n try {\r\n stream = await navigator.mediaDevices.getUserMedia({\r\n video: true,\r\n audio: false,\r\n });\r\n document.getElementById('video').srcObject = stream;\r\n } catch (error) {\r\n notify(error.message, { type: 'error' });\r\n setOpen(false);\r\n }\r\n };\r\n openCamera();\r\n }\r\n }, [open]);\r\n\r\n return (\r\n <Fragment>\r\n <Confirm\r\n isOpen={open}\r\n loading={!open}\r\n maxWidth=\"sm\"\r\n title=\"\"\r\n content={\r\n <Box display=\"flex\" flexDirection=\"column\">\r\n <Button\r\n variant=\"outlined\"\r\n disableElevation\r\n onClick={() => {\r\n const video = document.getElementById('video');\r\n const canvas =\r\n document.getElementById('canvas');\r\n canvas\r\n .getContext('2d')\r\n .drawImage(\r\n video,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height\r\n );\r\n setFotoTomada(true);\r\n }}\r\n startIcon={<PhotoCamera />}\r\n >\r\n {translate('take_foto')}\r\n </Button>\r\n <video\r\n id=\"video\"\r\n width=\"320\"\r\n height=\"240\"\r\n autoPlay\r\n style={{ border: 'solid 1px' }}\r\n />\r\n <div\r\n id=\"dataurl-container\"\r\n style={{\r\n border: 'dotted 1px',\r\n width: 320,\r\n height: 240,\r\n marginTop: 4,\r\n }}\r\n >\r\n <canvas id=\"canvas\" width=\"320\" height=\"240\" />\r\n </div>\r\n </Box>\r\n }\r\n onConfirm={e => {\r\n if (fotoTomada) {\r\n // Convertir la imagen capturada en un Blob\r\n document\r\n .getElementById('canvas')\r\n .toBlob(function (blob) {\r\n const video = document.getElementById('video');\r\n const fileInput =\r\n document.getElementById(field);\r\n const container = new DataTransfer();\r\n let file = new File(\r\n [blob],\r\n `${field}-img.jpg`,\r\n {\r\n type: 'image/jpeg',\r\n lastModified: new Date().getTime(),\r\n }\r\n );\r\n container.items.add(file);\r\n\r\n fileInput.files = container.files;\r\n fileInput.dispatchEvent(\r\n new Event('change', { bubbles: true })\r\n );\r\n // Detener el streaming de la cámara\r\n video.srcObject\r\n .getTracks()\r\n .forEach(track => track.stop());\r\n\r\n setFotoTomada(false);\r\n setOpen(false);\r\n }, 'image/jpeg');\r\n }\r\n }}\r\n onClose={() => {\r\n setFotoTomada(false);\r\n setOpen(false);\r\n }}\r\n />\r\n <Tooltip title={translate('from_camera')}>\r\n <Button\r\n sx={sx}\r\n onClick={() => {\r\n setOpen(true);\r\n }}\r\n >\r\n <AddAPhotoIcon />\r\n </Button>\r\n </Tooltip>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default FotoButton;\r\n","import Divider from '@mui/material/Divider';\r\nimport Stack from '@mui/material/Stack';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport { useMediaQuery } from '@mui/material';\r\nimport VisibilityIcon from '@mui/icons-material/Visibility';\r\nimport Box from '@mui/material/Box';\r\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Link from '@mui/material/Link';\r\nimport * as React from 'react';\r\nimport {\r\n useRecordContext,\r\n FileInput,\r\n ImageField,\r\n ImageInput,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport FotoButton from './FotoButton';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst formatFile = (value, prefix) => {\r\n if (!value || value === '') {\r\n // Evito que se muestre el icono de remover en el preview\r\n return undefined;\r\n } else if (typeof value === 'string') {\r\n return { src: `${prefix}/${value}` };\r\n } else if (value instanceof Array) {\r\n return value.map(v => ({ src: `${prefix}/${v}` }));\r\n } else {\r\n return value;\r\n }\r\n};\r\n\r\nconst Camino = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const translate = useTranslate();\r\n const record = useRecordContext(props);\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\r\n const { getValues } = useFormContext();\r\n const {\r\n options = {},\r\n disabled = false,\r\n tipo = 'file',\r\n camera = true,\r\n prefix,\r\n accept = '',\r\n download = true,\r\n ...restProps\r\n } = propsContenido;\r\n\r\n const src = getValues()[restProps.source]?.src;\r\n const ruta = record ? `${prefix}/${record[restProps.source]}` : undefined;\r\n const href = src ?? ruta ?? '#';\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'image' ? (\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"flex-start\"\r\n justifyContent=\"flex-start\"\r\n divider={\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n }\r\n >\r\n <ImageInput\r\n maxSize={5000000}\r\n {...restProps}\r\n options={{ disabled, ...options }}\r\n format={value => formatFile(value, prefix)}\r\n placeholder={translate('ra.input.image.upload_single')}\r\n accept=\"image/*\"\r\n inputProps={{\r\n capture: 'user',\r\n }}\r\n >\r\n <ImageField source=\"src\" title=\"\" />\r\n </ImageInput>\r\n {!isSmall && (\r\n <FotoButton sx={{ mt: 3 }} field={restProps.source} />\r\n )}\r\n </Stack>\r\n ) : (\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"flex-start\"\r\n justifyContent=\"flex-start\"\r\n divider={\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n }\r\n >\r\n <FileInput\r\n maxSize={5000000}\r\n {...restProps}\r\n options={{ disabled, ...options }}\r\n format={value => formatFile(value, prefix)}\r\n placeholder={translate('ra.input.file.upload_single')}\r\n accept={accept}\r\n >\r\n <Box sx={{ display: 'inline-block', ml: 1 }}>\r\n <IconButton\r\n component={Link}\r\n href={href}\r\n target=\"_blank\"\r\n size=\"small\"\r\n title=\"Ver adjunto\"\r\n >\r\n <VisibilityIcon color=\"primary\" />\r\n </IconButton>\r\n <IconButton\r\n sx={{ ml: 1 }}\r\n component={Link}\r\n href={href}\r\n download\r\n target=\"_blank\"\r\n size=\"small\"\r\n title=\"Descargar adjunto\"\r\n >\r\n <CloudDownloadIcon color=\"success\" />\r\n </IconButton>\r\n </Box>\r\n </FileInput>\r\n {camera && (\r\n <FotoButton sx={{ mt: 3 }} field={restProps.source} />\r\n )}\r\n </Stack>\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 {\r\n propsContenido: { sx, ...rest },\r\n hidden,\r\n } = useContenidoController(props);\r\n\r\n return (\r\n !hidden && (\r\n <BooleanInput\r\n {...rest}\r\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\r\n />\r\n )\r\n );\r\n};\r\n\r\nexport default CheckBox;\r\n","import { Box, Tooltip } from '@mui/material';\nimport * as React from 'react';\nimport { forwardRef, Fragment, useEffect, useRef } from 'react';\nimport {\n AutocompleteInput,\n ReferenceInput,\n useChoicesContext,\n} from 'react-admin';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { deleteRecargarComboBox } from '../../utils';\nimport useContenidoController from './useContenidoController';\n\nconst RefTooltip = forwardRef((props, ref) => <Tooltip ref={ref} {...props} />);\n\nexport const SelectInputEtriek = props => {\n const { callback, sx, isTC, onChange, ...rest } = props;\n const { isLoading, allChoices, availableChoices } = useChoicesContext();\n const inputRef = useRef(null);\n\n useEffect(() => {\n if (!isLoading) {\n // Llamo al callback de recargarComboBox pasándole los nuevos items\n if (typeof callback === 'function') {\n callback(Object.values([allChoices]));\n }\n }\n }, [allChoices, callback, isLoading]);\n\n return (\n <RefTooltip title={inputRef.current?.value || ''} placement=\"top\" arrow>\n <Box\n sx={\n isTC\n ? { margin: 1, ...sx }\n : {\n display: { xs: 'inherit', md: 'inline-flex' },\n verticalAlign: 'top',\n margin: 1,\n ...sx,\n }\n }\n width={isTC ? {} : { xs: '100%', md: 'auto' }}\n >\n <AutocompleteInput\n size=\"small\"\n sx={isTC ? { width: '100% !important' } : {}}\n {...rest}\n onChange={value => {\n onChange({\n target: {\n value,\n },\n label: availableChoices.filter(\n item => item.id === value\n )[0]?.etiqueta,\n });\n }}\n TextFieldProps={{ inputRef }}\n />\n </Box>\n </RefTooltip>\n );\n};\n\nconst ComboBox = props => {\n const { propsContenido, hidden } = useContenidoController(props);\n const dispatch = useDispatch();\n const {\n queryOptions,\n asistant: Asistant,\n asistantResource,\n ...restPropsContenido\n } = propsContenido;\n\n const { source, reference } = props;\n const recarga_cb = useSelector(state => {\n const rcb = state.reload_cb\n ? state.reload_cb.filter(item => item.id === source)\n : [];\n return rcb[0] ? rcb[0] : null;\n });\n const respaldoFiltro = useRef(recarga_cb);\n const filter =\n recarga_cb === null && respaldoFiltro.current\n ? respaldoFiltro.current\n : recarga_cb;\n\n let callback, finalFilter;\n if (filter) {\n const { callback: tempCallback, ...restFilter } = filter;\n callback = tempCallback;\n finalFilter = restFilter;\n }\n\n useEffect(() => {\n if (recarga_cb !== null) {\n respaldoFiltro.current = recarga_cb;\n dispatch(deleteRecargarComboBox(source));\n }\n }, [JSON.stringify(recarga_cb)]);\n\n return !hidden ? (\n <Fragment>\n <ReferenceInput\n reference={reference}\n source={source}\n perPage={500}\n filter={finalFilter}\n queryOptions={queryOptions}\n >\n <SelectInputEtriek\n {...restPropsContenido}\n callback={callback}\n optionText=\"etiqueta\"\n optionValue={source}\n />\n </ReferenceInput>\n {Asistant ? (\n <Asistant\n resource={asistantResource}\n tipo=\"ventana\"\n inline\n ButtonProps={{\n sx: { verticalAlign: 'inherit' },\n }}\n />\n ) : null}\n </Fragment>\n ) : null;\n};\nexport default ComboBox;\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 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 { 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 { source, reference } = props;\r\n\r\n return !hidden ? (\r\n <ReferenceArrayInput source={source} reference={reference}>\r\n <SelectArrayInput\r\n {...propsContenido}\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 * 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 { useContext } from 'react';\r\nimport { RadioButtonGroupInput, ReferenceInput } from 'react-admin';\r\nimport { FichaContext } from '../FichaContext';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst RadioButton = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const { isLoading } = useContext(FichaContext);\r\n const { source, reference } = props;\r\n\r\n return !isLoading && !hidden ? (\r\n <ReferenceInput source={source} reference={reference}>\r\n <RadioButtonGroupInput\r\n {...propsContenido}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceInput>\r\n ) : null;\r\n};\r\n\r\nexport default RadioButton;\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 ActionCheck from '@mui/icons-material/CheckCircle';\nimport AlertError from '@mui/icons-material/ErrorOutline';\nimport { 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 PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { useRecordSelection, useTranslate } from 'react-admin';\nimport Draggable from 'react-draggable';\n//import TreeWithDetails from \"../tree-ts/TreeWithDetails\";\n\n/*const 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 }),\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 ConfirmIcon,\n CancelIcon,\n onClose,\n onConfirm,\n contentResource,\n translateOptions = {},\n } = 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 maxWidth=\"md\"\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 sx={{ paddingRight: '0.5em' }} />\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 sx={{ paddingRight: '0.5em' }} />\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 CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport { Box } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport * as React from 'react';\nimport { Fragment, useCallback, useEffect, useState } from 'react';\nimport { TextInput } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport ListActionsEtriek from '../../ListActionEtriek';\nimport useContenidoController from '../useContenidoController';\nimport FiltroAsis from './FiltroAsis';\n\nconst BulkActions = () => <Fragment />;\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v });\n return v;\n};\n\nconst TextBoxSelection = props => {\n const { asistant, asistantResource, source, sx, ...rest } = props;\n const [open, setOpen] = useState(false);\n const {\n hidden,\n propsContenido: { disabled, label, onChange },\n } = useContenidoController(props);\n const form = useFormContext();\n\n useEffect(() => {\n // No funciona el defaultValue\n handleTodos();\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, selectedIds) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n onChange(e);\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n onChange(e);\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n onChange(e);\n };\n\n return !hidden ? (\n <>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\n >\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroAsis\n isOpen={open}\n title={`Selección de ${label}`}\n contentResource={asistantResource}\n content={React.createElement(asistant, {\n bulkActionButtons: <BulkActions />,\n hasCreate: false,\n hasEdit: false,\n exporter: false,\n actions: <ListActionsEtriek />,\n actionButtons: false,\n disableMultipleRowSelection: false,\n resource: asistantResource,\n })}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n ) : null;\n};\n\nexport default TextBoxSelection;\n","import ActionCheck from '@mui/icons-material/CheckCircle';\r\nimport AlertError from '@mui/icons-material/ErrorOutline';\r\nimport { Box, Paper } from '@mui/material';\r\nimport Button from '@mui/material/Button';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { TreeView } from 'devextreme-react';\r\nimport PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useCallback } from 'react';\r\nimport {\r\n Datagrid,\r\n List,\r\n TextField,\r\n useDataProvider,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport Draggable from 'react-draggable';\r\n\r\nconst AsistenteList = props => (\r\n <List\r\n {...props}\r\n hasCreate={false}\r\n exporter={false}\r\n perPage={50}\r\n empty={false}\r\n title=\" \"\r\n disableSyncWithLocation\r\n >\r\n <Datagrid bulkActionButtons={<span />}>\r\n <TextField source=\"funced\" sortable label=\"Cédula\" />\r\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\r\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\r\n </Datagrid>\r\n </List>\r\n);\r\n\r\nconst filtroInicial = { fillista: 'empcod=-1' };\r\n\r\nconst TreeWithList = props => {\r\n const [filtro, setFiltro] = React.useState(filtroInicial);\r\n const dataProvider = useDataProvider();\r\n\r\n const onClick = useCallback(\r\n e => {\r\n setFiltro({ fillista: e.node.key });\r\n },\r\n [setFiltro]\r\n );\r\n\r\n const createChildren = useCallback(\r\n parent => {\r\n const parentId = parent ? parent.itemData.id : '';\r\n\r\n return dataProvider\r\n .getChildNodes('form_224', { parentId: parentId })\r\n .then(response => response.data)\r\n .catch(() => {\r\n throw new Error('Data Loading Error');\r\n });\r\n },\r\n [dataProvider]\r\n );\r\n\r\n return (\r\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\r\n <Box flexGrow={1}>\r\n <TreeView\r\n id=\"funcionarios-treeview\"\r\n dataStructure=\"plain\"\r\n rootValue=\"\"\r\n onItemClick={onClick}\r\n createChildren={createChildren}\r\n />\r\n </Box>\r\n <Box flexGrow={2}>\r\n <AsistenteList resource=\"form_224\" filter={filtro} />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\n/*const useStyles = makeStyles(\r\n theme => ({\r\n confirmPrimary: {\r\n color: theme.palette.primary.main,\r\n },\r\n confirmWarning: {\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: 'RaConfirm' }\r\n);*/\r\n\r\nconst PaperComponent = props => (\r\n <Draggable\r\n handle=\"#draggable-dialog-title\"\r\n cancel={'[class*=\"MuiDialogContent-root\"]'}\r\n >\r\n <Paper {...props} />\r\n </Draggable>\r\n);\r\n\r\nconst cursorStyle = { cursor: 'move' };\r\n\r\nconst FiltroFuncionarios = props => {\r\n const {\r\n isOpen,\r\n isLoading,\r\n title,\r\n cancel,\r\n ConfirmIcon,\r\n CancelIcon,\r\n onClose,\r\n onConfirm,\r\n translateOptions = {},\r\n } = props;\r\n const translate = useTranslate();\r\n\r\n const handleConfirm = useCallback(\r\n (e, button) => {\r\n e.stopPropagation();\r\n onConfirm(e, button);\r\n },\r\n [onConfirm]\r\n );\r\n\r\n const handleClick = useCallback(e => {\r\n e.stopPropagation();\r\n }, []);\r\n\r\n return (\r\n <Dialog\r\n open={isOpen}\r\n onClose={onClose}\r\n onClick={handleClick}\r\n fullWidth\r\n maxWidth=\"lg\"\r\n PaperComponent={PaperComponent}\r\n aria-labelledby=\"draggable-dialog-title\"\r\n >\r\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\r\n {translate(title, { _: title, ...translateOptions })}\r\n </DialogTitle>\r\n <DialogContent dividers={true}>\r\n <TreeWithList />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button disabled={isLoading} onClick={onClose}>\r\n <CancelIcon sx={{ paddingRight: '0.5em' }} />\r\n {translate(cancel, { _: cancel })}\r\n </Button>\r\n <Button\r\n disabled={isLoading}\r\n onClick={e => handleConfirm(e, 'yes')}\r\n /*className={classnames('ra-confirm', {\r\n [classes.confirmWarning]: confirmColor === 'warning',\r\n [classes.confirmPrimary]: confirmColor === 'primary',\r\n })}*/\r\n autoFocus\r\n >\r\n <ConfirmIcon sx={{ paddingRight: '0.5em' }} />\r\n {translate('ra.action.confirm')}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nFiltroFuncionarios.propTypes = {\r\n cancel: PropTypes.string,\r\n classes: PropTypes.object,\r\n confirm: PropTypes.string,\r\n confirmColor: PropTypes.string,\r\n ConfirmIcon: PropTypes.elementType,\r\n CancelIcon: PropTypes.elementType,\r\n isOpen: PropTypes.bool,\r\n isLoading: PropTypes.bool,\r\n onClose: PropTypes.func.isRequired,\r\n onConfirm: PropTypes.func.isRequired,\r\n title: PropTypes.string.isRequired,\r\n};\r\n\r\nFiltroFuncionarios.defaultProps = {\r\n cancel: 'ra.action.cancel',\r\n classes: {},\r\n confirmColor: 'primary',\r\n ConfirmIcon: ActionCheck,\r\n CancelIcon: AlertError,\r\n isOpen: false,\r\n};\r\n\r\nexport default FiltroFuncionarios;\r\n","import CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport { Box } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport * as React from 'react';\nimport { Fragment, useCallback, useContext, useEffect, useState } from 'react';\nimport { TextInput, useRecordSelection } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport useUtilsFicha from '../../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../../FichaContext';\nimport useContenidoController from '../useContenidoController';\nimport FiltroFuncionarios from './FiltroFuncionarios';\n\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n if (String(v) === v) {\n return v === '' ? 'Ninguno' : 'Selección (1)';\n } else if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v })\n return v;\n};\n\nconst TBSF = props => {\n const {\n asistant,\n asistantResource,\n allowNone = true,\n allowAll = true,\n source,\n sx,\n onChange: onChangeProps,\n ...rest\n } = props;\n const [selectedIds] = useRecordSelection('form_224');\n const [open, setOpen] = useState(false);\n const form = useFormContext();\n const { estado, fichaProps = {} } = useContext(FichaContext);\n const asisEtr = useContext(FormEtrGridContext);\n const {\n hidden,\n propsContenido: { disabled, label = 'Funcionarios' },\n } = useContenidoController(props);\n const { [source]: initialProps = {}, etrs } = fichaProps;\n const utils = useUtilsFicha({ ...props, etrs, asisEtr });\n const onChange =\n initialProps.onChange === undefined\n ? onChangeProps\n : initialProps.onChange;\n\n useEffect(() => {\n // No funciona el defaultValue\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, button) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n onChange && onChange(utils, estado, e);\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n onChange && onChange(utils, estado, e);\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n onChange && onChange(utils, estado, e);\n };\n\n return !hidden ? (\n <>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\n >\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n {allowNone && (\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n )}\n {allowAll && (\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n )}\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroFuncionarios\n isOpen={open}\n title={`Selección de ${label}`}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n ) : null;\n};\n\nexport default TBSF;\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 { DateInput, DateTimeInput, NumberInput, TextInput } 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\r\n useEffect(() => {\r\n if (propsContenido.value) {\r\n form.setValue(props.source, propsContenido.value);\r\n }\r\n });\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return !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 ) : null;\r\n};\r\n\r\nexport default TextBox;\r\n","import { Box } from '@mui/material';\r\nimport * as React from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport ComboBox from './ComboBox';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextCombo = props => {\r\n const { source, label, sx } = props;\r\n const { hidden } = useContenidoController(props);\r\n\r\n return !hidden ? (\r\n <Box\r\n sx={{\r\n ...sx,\r\n display: 'inline-flex',\r\n alignItems: 'flex-start',\r\n marginLeft: { md: 1 },\r\n marginBottom: -1,\r\n width: { xs: '100%', md: 'calc(24vw + 1em)' },\r\n }}\r\n >\r\n <TextInput\r\n {...props}\r\n label=\"\"\r\n source={source}\r\n sx={{ flex: 1, marginTop: 1 }}\r\n />\r\n <ComboBox\r\n {...props}\r\n source={source}\r\n label={label}\r\n isTC\r\n sx={{ flex: 3 }}\r\n />\r\n </Box>\r\n ) : null;\r\n};\r\nexport default TextCombo;\r\n"],"names":["forwardRef","props","ref","useTranslate","onClose","useUserMenu","useResourceDefinitions","resourcesDefinitions","React.createElement","MenuItem","Link","ListItemIcon","LockIcon","ListItemText","translate","existePassword","VpnLockIcon","UserMenu","ConfigurationMenu","Logout","useMediaQuery","theme","breakpoints","up","AppBar","CustomUserMenu","Typography","variant","color","sx","flex","textOverflow","whiteSpace","overflow","id","isLargeEnough","Box","component","createContext","children","open","setOpen","useState","setProps","useMemo","show","hide","AsistenteContext","Provider","value","context","useContext","ProgressContext","method","params","callback","type","payload","hidden","disabled","required","error","label","useDispatch","dispatch","recargarComboBox","setHiddenAction","disable","setDisableAction","setRequireAction","setErrorAction","setLabelAction","resource","options","useDataProvider","mutateAsync","isLoading","useMutation","paramsDp","getJson","useGetJson","useCallback","onSuccess","onError","useListContext","useNotify","useRedirect","useRefresh","useResourceContext","useUnselectAll","useAsistente","ajax","useAjax","data","notify","redirect","refresh","refetch","unselectAll","asistente","useRecargarComboBox","useSetHidden","useSetDisable","useSetRequire","useSetError","useSetLabel","useFormProgress","progress","setHidden","setDisable","setRequire","setError","setLabel","etrs","useFormContext","asisEtr","form","trigger","source","setTimeout","undefined","estado","fichaProps","FichaContext","[object Object]","initialProps","hiddenProps","rest","hiddenInitial","useContenido","useDefaultHook","restInitialProps","oculto","dynamicPropsRest","dynamicProps","propsContenido","tipo","useFieldController","NumberField","txtProps","DateField","RaTextField","etrSource","reference","ReferenceField","queryOptions","meta","etr","record","row","TextField","values","apiRef","enviarTodo","getSubmitValues","current","getRowsCount","updateRows","finalValues","Array","from","getRowModels","item","claveFila","getValues","inputValues","push","_id","setValue","shouldDirty","_estado","findIndex","getRowIndexRelativeToVisibleRows","currentIndex","indiceVisual","get","_action","splice","length","fila","propsEtr","useFormulario","addRow","useAddRow","finalProps","editRow","useEditRow","deleteRow","useDeleteRow","clear","setRows","api","styled","display","flexDirection","alignItems","justifyContent","height","& .ant-empty-img-1","fill","palette","mode","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","StyledGridOverlay","width","viewBox","aria-hidden","focusable","fillRule","transform","className","cx","cy","rx","ry","d","mt","Button","name","overridesResolver","styles","root","primary","main","&:hover","backgroundColor","alpha","@media (hover: none)","FormEtrGridContext","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","Form","dummyRecord","onSubmit","EtrChildrenWrapper","EtrFormDialog","propTypes","PropTypes","onClick","icon","save","render","formPadre","editors","recordPadre","camposClaveFila","dirtyFields","isValid","useFormState","etrActualProps","onAfterRenderAsistente","restEtrActualProps","useUtilsFicha","formAsistente","useEffect","utils","DialogContent","Stack","spacing","Children","map","child","index","cloneElement","defaultValue","margin","indexOf","DialogActions","SaveButton","Object","keys","e","stopPropagation","IconCancel","useSafeSetState","useGridApiContext","AddIcon","EtrDialogChild","EditIcon","confirmTitle","confirmContent","Fragment","StyledButton","key","ActionDelete","Confirm","isOpen","title","content","onConfirm","createTheme","esES","filterBy","claves","sortModel","columns","defColumns","allowAdd","allowRemove","enableLoad","disabledProp","rows","useRecordContext","field","useInput","isLoadingParent","etrProps","disabledContext","sort","setSort","sortField","sortDir","split","forEach","filter","comparison","useGetList","pagination","page","perPage","order","enabled","headerName","headerAlign","sortable","disableClickEventBubbling","renderCell","rowNode","EtrEditButton","unshift","renderHeader","EtrCreateButton","EtrDeleteButton","JSON","stringify","Paper","borderRadius","marginTop","StyledEngineProvider","injectFirst","ThemeProvider","DataGridPremium","& .MuiDataGrid-columnsContainer","& .MuiDataGrid-iconSeparator","pageSize","finalColumns","model","noRowsOverlay","CustomNoRowsOverlay","initialState","initialStateProps","isLoadingFicha","useGridApiRef","useKeepGroupedColumnsHidden","onRenderGrilla","onLoadGrilla","useUtilsGrilla","React","Slide","controles","aceptar","cancelar","botonesExtra","showAceptar","showCancelar","formDividers","dialogProps","Transition","dividers","ArrowCircleRightIcon","handler","i","CancelIcon","position","Toolbar","disableGutters","ml","alignIcon","size","to","locationDescriptor","_","getLinkParams","Tooltip","translatedLabel","IconButton","linkParams","GridButton","oneOf","element","string","oneOfType","bool","replace","state","true","_scrollToTop","false","defaultIcon","scrollToTop","useCreatePath","createPath","scrollStates","String","ContentCreate","ImageEye","ShowGridButton","any","memo","nextProps","isRowEditable","operatorParamsToModel","entry","filterModel","items","reduce","acc","operator","operatorModelToParams","has","actionButtons","bulkActionButtons","desktopSize","hasEdit","convertFilterModelToFilterValues","defaultConvertFilterModelToFilterValues","claveNuevo","mobileColumns","hasVerFicha","disableMultipleRowSelection","selectedIds","onSelect","displayedFilters","setFilters","pinnedColumns","right","useInitGrilla","column","translatedColumns","concat","hideable","getActions","getRowNode","esEditable","esDisabled","EditGridButton","button","GridActionsCellItem","CreateGridButton","replaceAll","trim","isValidElement","Asistente","DatagridRoot","DatagridClasses","hasBulkActionButtons","BulkActionsToolbar","tableWrapper","gridTemplateRows","rowSelectionModel","isRowSelected","primaryText","pt","find","pb","pl","valueGetter","jsxMobile","SettingsIcon","SimpleList","linkType","down","useResourceDefinition","GrillaSm","GrillaLg","filterValues","tabs","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","onChange","event","Tab","charAt","toUpperCase","slice","Divider","useGetOne","useSelector","configInputs","reduxDisabled","reduxHidden","reduxRequired","reduxError","reduxLabel","configInput","etrRequerido","onFocus","onFocusProps","onChangeProps","onBlur","onBlurProps","disabledProps","validate","propValidate","onFocusInitial","onBlurInitial","onChangeInitial","disabledInitial","initValidate","inEtrGrid","useRef","hiddenDinamico","disabledDinamico","onFocusDinamico","onChangeDinamico","onBlurDinamico","dynamicValidate","prev","previousValue","mb","xs","md","mr","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","isArray","reduxValidate","reduxValidateError","isNaN","getDate","getFullYear","toString","getMonth","yyyy","MM","dd","dateRegex","test","match","dateTimeRegex","tmpMatch","now","setHours","setMinutes","exec","substring","useContenidoController","gutterBottom","hasShow","hasList","TopToolbar","sanitizeRestProps","ListButton","ChevronLeft","ShowButton","minValue","inputFormat","sourceFechaInicio","allValues","inicio","reverse","join","isAfter","iniDate","finDate","message","args","menor","idi","locale","enLocale","esLocale","ruta","nombre","document","createElement","fakeLink","style","body","appendChild","setAttribute","click","dateString","day","month","year","Number","dateTimeString","datePart","timePart","hour","minute","date","padStart","toLocaleString","hour12","getFormcodFromResource","etiqueta","defaultTitle","StyledDialogTitle","aria-label","FormDialogTitleClasses","closeButton","CloseIcon","top","grey","FormDialogContext","close","finalContext","useFormDialogContext","CreateDialogView","Routes","Route","path","mutationOptions","mutationOptionsProp","redirectTo","useQueryClient","messageArgs","smart_count","queryClient","invalidateQueries","useCreateController","controllerProps","handleClose","FormDialogTitle","CreateContextProvider","basePath","hasCreate","history","loaded","loading","location","permissions","setIsOpen","inline","dialog","ButtonProps","contextValue","OpenInNewIcon","createDialogProps","FormDialogButton","CreateDialog","ContentAdd","tab","contenido","FormClasses","maxHeight","&.MuiAutocomplete-root","onBeforeSubmitFicha","useUtilsSubmit","useSaveContext","async","submit","valid","dontSave","CreateInDialogButton","Create","initialValues","useNuevo","useInitFicha","ProgressProvider","AsistenteProvider","CreateComponent","panel","CreateEtriek","func","StyledCreate","getClassesForm","ListDialogView","useListController","ListContextProvider","listDialogProps","ListDialog","ListInDialogButton","List","r","t","f","n","clsx","arguments","ListEtriek","useGrilla","deleteOne","useDelete","DeleteButtonNoWarning","defaultProps","sanitizedData","mutationMode","useEditController","Edit","defaultTransform","dialogText","hasAccept","hasCancel","aria-labelledby","alwaysEnable","pointerEvents","opacity","onRenderFicha","onLoadFicha","CardContent","blockSx","objVacio","CircularProgress","left","thickness","config","useFormSubmit","SimpleForm","FormContainer","FormEtriek","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","header","placement","Collapse","in","timeout","unmountOnExit","disablePadding","paddingLeft","startsWith","secondary","light","& a","transition","menus","menu","SubMenu","renderMenu","MenuItemLink","leftIcon","setState","mnuPrueba","parse","localStorage","getItem","activeClassName","iconClass","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","Layout","Menu","__","alert","filters","filtersProp","hideFilterButton","jsBotonGrilla","defaultJsBotonGrilla","exporter","showFilter","total","hasCreateContext","FilterContext","listContext","sanitizeListRestProps","FilterButton","CreateButton","ExportButton","utilsGrilla","option","loginBackgroundImage","nameSource","passwordSource","setLoading","useLogin","useLocation","login","nextPathname","catch","errors","minHeight","backgroundImage","backgroundRepeat","backgroundSize","Card","Avatar","padding","TextInput","autoFocus","PasswordInput","CardActions","loginButtonText","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","paddingRight","FieldTitle","fields","campos","separador","secundario","hasSecundario","principal","campo","useShowController","Show","Component","DefaultComponent","formRootPathname","syncWithLocation","DefaultTabs","toolbar","DefaultToolbar","useResolvedPath","tabValue","setTabValue","newTab","prevTab","setTab","handleTabChange","url","Root","sanitizeRestPropsView","renderTabHeaders","getTabbedFormTabFullPath","matchPath","resolvedPath","pathname","tabPath","intent","TabbedFormTabs","& .MuiTab-root.RaTabbedForm-errorTabButton","formProps","createMatch","pathnameBase","editMatch","useFormRootPath","TabbedFormView","TabbedForm","FormTab","TabbedFormEtriek","defaultTheme","components","MuiTextField","MuiFormControl","RaSidebar","drawerPaper","RaRichTextInput","@global",".ra-rich-text-input","& .ql-editor","& p:not(:last-child)","jsBotoneraPart","buttons","incluyeAcciones","setDisabled","useUtils","finally","englishMessages","ra","empty","from_camera","take_foto","hint","send","email","check_email","must_enter_credentials","restore_password","punch_in","pos","search","change_pin","change_password","configuration","language","dark","dashboard","welcome","subtitle","aor_button","validation","greater_or_equal","spanishMessages","notification","created","action","bulk_actions","invite","list","edit","back","delete_title","input","file","upload_single","image","boolRecord","RaBooleanField","fotoTomada","setFotoTomada","stream","mediaDevices","getUserMedia","video","audio","getElementById","srcObject","openCamera","maxWidth","disableElevation","canvas","getContext","drawImage","startIcon","PhotoCamera","autoPlay","border","toBlob","blob","lastModified","getTime","container","add","fileInput","files","dispatchEvent","bubbles","getTracks","track","stop","AddAPhotoIcon","prefix","src","v","camera","accept","download","restProps","_getValues$restProps$","direction","divider","orientation","flexItem","ImageInput","formatFile","capture","ImageField","isSmall","FotoButton","FileInput","href","VisibilityIcon","CloudDownloadIcon","BooleanInput","isTC","allChoices","availableChoices","useChoicesContext","RefTooltip","inputRef","arrow","verticalAlign","AutocompleteInput","_availableChoices$fil","asistant","Asistant","asistantResource","restPropsContenido","reload_cb","rcb","recarga_cb","respaldoFiltro","finalFilter","tempCallback","restFilter","deleteRecargarComboBox","ReferenceInput","SelectInputEtriek","SelectInput","ReferenceArrayInput","SelectArrayInput","RadioButtonGroupInput","Draggable","handle","cancel","cursor","ConfirmIcon","contentResource","translateOptions","useRecordSelection","handleClick","PaperComponent","cursorStyle","handleConfirm","FiltroAsig","classes","object","confirm","confirmColor","elementType","node","isRequired","ActionCheck","AlertError","seleccion","all","none","handleTodos","format","endAdornment","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","FiltroAsis","BulkActions","actions","ListActionsEtriek","Datagrid","fillista","filtro","setFiltro","filtroInicial","parent","getChildNodes","parentId","itemData","then","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","AsistenteList","TreeWithList","FiltroFuncionarios","allowNone","allowAll","NumberInput","DateInput","DateTimeInput","marginLeft","ComboBox"],"mappings":"yoKAsBA,SAA0BA,EAAW,CAACC,EAAOC,KACzC,QAAkBC,KACZC,QAAEA,GAAYC,MACSC,MAENC,EAAoB,QAE3C,MAAO,CAHUA,EAAoB,SAK7BC,EAACC,2BACcC,OACNR,GACDD,OACA,eACD,oBACMG,IAETI,EAACG,OACGH,EAACI,SAELJ,EAACK,OAAcC,EAAU,oBAE7B,KACJC,EACIP,EAACC,2BACcC,OACNR,GACDD,OACA,cACD,mBACMG,IAETI,EAACG,OACGH,EAACQ,SAELR,EAACK,OAAcC,EAAU,yBAE7B,WAIW,IACnBN,EAACS,OACGT,EAACU,SACDV,EAACW,YAIYlB,IACjB,QAAsBmB,EAAcC,GAASA,EAAMC,YAAYC,GAAG,OAClE,OACIf,EAACgB,mBAAWvB,SAAa,qBAAsBO,EAACiB,WAC5CjB,EAACkB,GACGC,QAAQ,KACRC,MAAM,UACNC,GAAI,CACAC,KAAM,EACNC,aAAc,WACdC,WAAY,SACZC,SAAU,UAEdC,GAAG,sBAENC,GAAiB3B,EAAC4B,GAAIC,UAAU,OAAOR,GAAI,CAAEC,KAAM,UClFhCQ,OAEC,EAAGC,SAAAA,MAChC,MAAOC,EAAMC,GAAWC,GAAS,IAC1BzC,EAAO0C,GAAYD,EAAS,MAEnBE,EACZ,MACIJ,KAAAA,EACAvC,MAAAA,EACA4C,KAAM5C,IACF0C,EAAS1C,GACTwC,GAAQ,IAEZK,KAAM,IAAML,GAAQ,KAExB,CAACD,EAAMvC,IAGX,OACIO,EAACuC,GAAiBC,UAASC,MAAOC,GAC7BX,OAKe,IAAMY,EAAWJ,OC1BdT,OAEC,EAAGC,SAAAA,MAC/B,MAAOC,EAAMC,GAAWC,GAAS,KAEjBE,EACZ,MACIJ,KAAAA,EACAK,KAAM,IAAMJ,GAAQ,GACpBK,KAAM,IAAML,GAAQ,KAExB,CAACD,IAGL,OACIhC,EAAC4C,GAAgBJ,UAASC,MAAOC,GAC5BX,OAKW,IAAMY,EAAWC,OCvBT,CAAClB,EAAImB,EAAQC,EAAQC,MACjDC,KAAM,YACNC,QAAS,CACLvB,GAAAA,EACAmB,OAAAA,EACAC,OAAAA,EACAC,SAAAA,QAK8B,CAACrB,EAAIqB,MACvCC,KAAM,oBACNC,QAAS,CAAEvB,GAAAA,EAAIqB,SAAAA,QAGY,CAACrB,EAAIwB,MAChCF,KAAM,aACNC,QAAS,CACLvB,GAAAA,EACAwB,OAAAA,QAIwB,CAACxB,EAAIyB,MACjCH,KAAM,gBACNC,QAAS,CACLvB,GAAAA,EACAyB,SAAAA,QAIwB,CAACzB,EAAI0B,MACjCJ,KAAM,gBACNC,QAAS,CACLvB,GAAAA,EACA0B,SAAAA,QAIsB,CAAC1B,EAAI2B,MAC/BL,KAAM,cACNC,QAAS,CACLvB,GAAAA,EACA2B,MAAAA,QAIsB,CAAC3B,EAAI4B,MAC/BN,KAAM,cACNC,QAAS,CACLvB,GAAAA,EACA4B,MAAAA,QC1C2B,KAC/B,QAAiBC,KACjB,SACI,CAAC7B,EAAImB,EAAQC,EAAQC,KACjBS,EAASC,GAAiB/B,EAAImB,EAAQC,EAAQC,KAElD,CAACS,QAImB,KACxB,QAAiBD,KACjB,SACI,CAAC7B,EAAIwB,KACDM,EAASE,GAAgBhC,EAAIwB,KAEjC,CAACM,QAIoB,KACzB,QAAiBD,KACjB,SACI,CAAC7B,EAAIiC,KACDH,EAASI,GAAiBlC,EAAIiC,KAElC,CAACH,QAIoB,KACzB,QAAiBD,KACjB,SACI,CAAC7B,EAAI0B,KACDI,EAASK,GAAiBnC,EAAI0B,KAElC,CAACI,QAIkB,KACvB,QAAiBD,KACjB,SACI,CAAC7B,EAAI2B,KACDG,EAASM,GAAepC,EAAI2B,KAEhC,CAACG,QAIkB,KACvB,QAAiBD,KACjB,SACI,CAAC7B,EAAI4B,KACDE,EAASO,GAAerC,EAAI4B,KAEhC,CAACE,QCvCU,CAACQ,EAAUC,KAC1B,QAAqBC,KACfC,YAAEA,EAAFC,UAAeA,GAAcC,GAAYvB,IAC3C,MAAMD,OAAEA,EAAQC,OAAQwB,GAAaxB,EACrC,SAAoByB,QAAQP,EAAU,CAAEnB,OAAAA,EAAQC,OAAQwB,KACzDL,GAEH,MAAO,CAAEE,YAAAA,EAAaC,UAAAA,OChCVJ,IACZ,MAAMG,YAAEA,EAAFC,UAAeA,GAAcI,GAAWR,GAW9C,MAAO,CATMS,EACT,CAAC5B,EAAQC,EAAQC,IACboB,EACI,CAAEtB,OAAAA,EAAQC,OAAAA,GACV,CAAE4B,UAAW3B,EAAU4B,QAAS5B,IAExC,IAGUqB,OCQY3E,WAEAA,IAC1B,QAAamF,EAAenF,KACboF,MACEC,MACDC,MACCC,EAAmBvF,KAChBwF,EAAejB,KACjBkB,OACAvF,KACXwF,GAAQC,GAAQpB,GAEvB,MAAO,CACHmB,KAAAA,EACAE,KAAAA,EACAC,OAAAA,EACAC,SAAAA,EACAC,QAAAA,EACAC,QAASJ,EAAKI,QACdC,YAAAA,EACAC,UAAAA,EACArF,UAAAA,OAIsBb,IAC1B,QAAyBmG,OACPC,OACCC,OACAC,OACFC,OACAC,OACAC,OACFrB,MACEC,MACAE,EAAmBvF,KAClByF,MACXC,GAAQC,GAAQpB,GAGvB,MAAO,CACHmB,KAAAA,EACAG,OAAAA,EACAC,SAAAA,EACA9B,iBAAAA,EACA0C,SAAAA,EACAR,UAAAA,EACAS,UAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,SAAAA,EACAC,SAAAA,EACAC,KAdShH,EAAMgH,MAAQ,QAkBThH,IAClB,QAAyBmG,OACPC,OACCC,OACAC,OACFC,OACAC,OACAC,OACFrB,MACEC,MACJ4B,OACI1B,EAAmBvF,KAClByF,MACXC,GAAQC,GAAQpB,KACVvE,EAAMgH,MAAQ,KACXhH,EAAMkH,SAAW,KACjBC,MAAAA,SAAAA,EAAMC,QAEtB,MAAO,CACHD,KAAAA,EACAzB,KAAAA,EACAG,OAAAA,EACAC,SAAAA,EACA9B,iBAAAA,EACA0C,SAAAA,EACAR,UAAAA,EACAS,UAAW3B,EACP,CAACqC,EAAQ5D,KACLkD,EAAUU,EAAQ5D,GAClB6D,WAAW,KACPF,EAAQC,MAGhB,CAACV,EAAWS,IAEhBR,WAAY5B,EACR,CAACqC,EAAQ3D,KACLkD,EAAWS,EAAQ3D,GACnB4D,WAAW,KACPF,EAAQC,MAGhB,CAACT,EAAYQ,IAEjBP,WAAY7B,EACR,CAACqC,EAAQ1D,KACLkD,EAAWQ,EAAQ1D,GACnB2D,WAAW,KACPF,EAAQC,MAGhB,CAACR,EAAYO,IAEjBN,SAAU9B,EACN,CAACqC,EAAQzD,KACLkD,EAASO,EAAQzD,GACjB0D,WAAW,KACPF,EAAQC,MAGhB,CAACP,EAAUM,IAEfL,SAAU/B,EACN,CAACqC,EAAQxD,KACLkD,EAASM,EAAQxD,GACjByD,WAAW,KACPF,EAAQC,MAGhB,CAACN,EAAUK,IAEfJ,KAAAA,EACAE,QAAAA,OCtJoB7E,EAAc,OACRA,OAAckF,MCCrBvH,IACvB,MAAMwH,OAAEA,EAAF7C,UAAUA,EAAV8C,WAAqBA,EAAa,IAAOvE,EAAWwE,KAClDC,CAAC3H,EAAMqH,QAASO,EAAe,IAAOH,GACtChE,OAAQoE,GAAc,KAAUC,GAAS9H,GAE7CyD,OAAQsE,EADNC,aAEFA,EAAeC,MACZC,GACHN,SAC6BL,IAAlBQ,EAA8BA,EAAgBF,IACxCG,EAAa,IAC3BF,EACHN,OAAAA,EACA/D,OAAAA,EACAkB,UAAAA,KACGuD,KAECzE,OAAQ0E,KAAWC,GAAqBC,EAEhD,QAAqBd,IAAjBc,EACA,gBACK,6DAA4DrI,EAAMqH,+EAI3E,MAAO,CACHiB,eAAgB,IACTR,KACAI,KACAE,GAEP3E,YAAmB8D,IAAXY,EAAuBA,EAAS1E,OC/B9BzD,IACd,MAAMuI,KAAEA,KAAgBT,GAAS9H,GAC3BsI,eAAEA,EAAF7E,OAAkBA,GAAW+E,GAAmBV,KAErC,IACVQ,GAGP,OACK7E,IACS,MAAT8E,GAAyB,MAATA,EACbhI,EAACkI,GAAgBC,GACR,MAATH,EACAhI,EAACoI,GAAcD,GACN,MAATH,EACAhI,EAACoI,oBAAcD,kBAEfnI,EAACqI,GAAgBF,QChBK,CAACG,EAAWxB,EAAQyB,IAAczF,GAE5D9C,EAACwI,IACGD,UAAWA,EACXzB,OAAQA,EACR2B,aAAc,CAAEC,KAAM,CAAEC,IAAKL,IAC7BM,OAAQ,CAAExB,CAACN,GAAShE,EAAO+F,IAAI/B,KAE/B9G,EAAC8I,IAAUhC,OAAO,iBAKNiC,IACpB,QAAmB,IAAKA,GAGxB,gBAFkBrH,SAKGjC,IACrB,MAAMuJ,OAAEA,EAAFlC,OAAUA,EAAVmC,WAAkBA,GAAexJ,EAGvC,SACI,CAACsJ,EAAQnC,KACL,QAAoBsC,GAAgBH,KACzBC,EAAOG,QAAQC,eAAiB,EAE3CJ,EAAOG,QAAQE,WAAW,CAAC,IAAKC,EAAa5H,GAAAA,KAE7C,QAAoBuH,EACdM,MAAMC,KAAKR,EAAOG,QAAQM,eAAeV,SAAUW,QAC5CA,EACHC,UAAW,GACX1C,OAbH,QAcM,GACPL,EAAKgD,YAAY9C,IAAW,GAE7BmC,GACDY,EAAYC,KAAK,IACVR,EACHK,UAAW,GACXI,IAAKrI,EACLuF,OAtBD,MA0BPL,EAAKoD,SAASlD,EAAQ+C,EAAa,CAAEI,aAAa,KAEtD,CAACjB,EAAQlC,QAISrH,IACtB,MAAMuJ,OAAEA,EAAFlC,OAAUA,EAAVmC,WAAkBA,GAAexJ,EAGvC,SACI,CAACiC,EAAIqH,EAAQnC,aACT,QAA8B,mBAAW,IAJlC,MAKasC,GAAgBH,GAEpCC,EAAOG,QAAQE,WAAW,CAAC,IAAKC,EAAa5H,GAAAA,KAE7C,QAAoBuH,EACdM,MAAMC,KAAKR,EAAOG,QAAQM,eAAeV,SAAUW,QAC5CA,EACHzC,OAAQiD,MACL,GACPtD,EAAKgD,YAAY9C,IAAW,GAElC,MAAmB+C,EAAYM,UAAUT,GACvB,oBACRA,MAAAA,SAAAA,EAAMK,OAAQrI,GACdgI,MAAAA,SAAAA,EAAMC,aAAcjI,GAG9B,QACIsH,EAAOG,QAAQiB,iCAAiC1I,GAGpD2I,GACsB,IAAlBA,EACMA,OACiBrD,IAAjBsD,EACAA,EACA,EAEVT,EAAYQ,GAAgB,IACrBf,EACHK,UAAiD,iBAAtCE,EAAYQ,yBAAepD,QAAiB,GAAKvF,EAC5DqI,IAAKrI,EACLuF,OAC0C,iBAAtC4C,EAAYQ,yBAAepD,QAAiB,IAtC7C,KAyCPL,EAAKoD,SAASlD,EAAQ+C,EAAa,CAAEI,aAAa,KAEtD,CAACjB,EAAQlC,QAIWrH,IACxB,MAAMuJ,OAAEA,EAAFlC,OAAUA,EAAVmC,WAAkBA,GAAexJ,EAGvC,SACI,CAACiC,EAAIkF,KACD,QAAaoC,EAAOG,QAAQM,eAAec,IAAI7I,GAG/CsH,EAAOG,QAAQE,WAAW,CAAC,CAAE3H,GAAAA,EAAI8I,QAAS,YAE1C,QAAoBvB,EACdM,MAAMC,KAAKR,EAAOG,QAAQM,eAAeV,SAAUW,QAC5CA,EACHzC,OAZH,QAaM,GACPL,EAAKgD,YAAY9C,IAAW,GAElC,GAAkB,mBAAU,CAExB,QAAqB+C,EAAYM,UAC7BT,GAAQA,EAAKK,MAAQrI,GAEzBmI,EAAYY,OAAOJ,EAAc,OAC9B,CACH,MAAmBR,EAAYM,UAC3BT,GAAQA,EAAKC,YAAcjI,GAG/B,QACIsH,EAAOG,QAAQiB,iCAAiC1I,GAEpD2I,GACsB,IAAlBA,EACMA,OACiBrD,IAAjBsD,EACAA,EACAT,EAAYa,OAEtBb,EAAYQ,GAAgB,IAAKM,EAAM1D,OArCpC,IAqC4C0C,UAAWjI,GAG9DkF,EAAKoD,SAASlD,EAAQ+C,EAAa,CAAEI,aAAa,KAEtD,CAACjB,EAAQlC,QAIKrH,IAClB,MAAQ2H,CAAC3H,EAAMqH,QAAS8D,GAAanL,EAAMoL,kBAExB,IAAKpL,EAAOwJ,aAAc2B,MAAAA,IAAAA,EAAU3B,aASvD,MAAO,CACH6B,OATWC,GAAUC,GAUrBC,QATYC,GAAWF,GAUvBG,UATcC,GAAaJ,GAU3BK,MATUzE,IACVnH,EAAMuJ,OAAOG,QAAQmC,QAAQ,IAC7B1E,EAAKoD,SAASvK,EAAMqH,OAAQ,KAQ5ByE,IAAK9L,EAAMuJ,YCzKOwC,GAAO,MAAPA,CAAc,EAAG3K,MAAAA,OACvC4K,QAAS,OACTC,cAAe,SACfC,WAAY,SACZC,eAAgB,SAChBC,OAAQ,OACRC,qBAAsB,CAClBC,KAA6B,UAAvBlL,EAAMmL,QAAQC,KAAmB,UAAY,WAEvDC,qBAAsB,CAClBH,KAA6B,UAAvBlL,EAAMmL,QAAQC,KAAmB,UAAY,WAEvDE,qBAAsB,CAClBJ,KAA6B,UAAvBlL,EAAMmL,QAAQC,KAAmB,UAAY,WAEvDG,qBAAsB,CAClBL,KAA6B,UAAvBlL,EAAMmL,QAAQC,KAAmB,OAAS,WAEpDI,qBAAsB,CAClBC,YAAoC,UAAvBzL,EAAMmL,QAAQC,KAAmB,MAAQ,OACtDF,KAA6B,UAAvBlL,EAAMmL,QAAQC,KAAmB,UAAY,cAIxB,IAE3BjM,EAACuM,QACGvM,SACIwM,MAAM,MACNX,OAAO,MACPY,QAAQ,cACRC,iBACAC,UAAU,SAEV3M,OAAG+L,KAAK,OAAOa,SAAS,WACpB5M,OAAG6M,UAAU,uBACT7M,aACI8M,UAAU,kBACVC,GAAG,SACHC,GAAG,SACHC,GAAG,SACHC,GAAG,WAEPlN,UACI8M,UAAU,kBACVK,EAAE,iJAENnN,UACI8M,UAAU,kBACVK,EAAE,4FAENnN,UACI8M,UAAU,kBACVK,EAAE,0jBAGVnN,UACI8M,UAAU,kBACVK,EAAE,2OAENnN,OACI8M,UAAU,kBACVD,UAAU,4BAEV7M,aAAS+M,GAAG,SAASC,GAAG,QAAQC,GAAG,QAAQC,GAAG,UAC9ClN,UAAMmN,EAAE,4DAIpBnN,EAAC4B,GAAIP,GAAI,CAAE+L,GAAI,4BC3BN5B,GAAO6B,GAAQ,CAChCC,KAAM,kBACNC,kBAAmB,CAAC9N,EAAO+N,IAAWA,EAAOC,MAF5BjC,CAGlB,EAAG3K,MAAAA,OACFO,MAAOP,EAAMmL,QAAQ0B,QAAQC,KAC7BC,UAAW,CACPC,gBAAiBC,EAAMjN,EAAMmL,QAAQ0B,QAAQC,KAAM,KAEnDI,uBAAwB,CACpBF,gBAAiB,sBAKT,MAEOpO,IACvB,QAAaiH,KAEb,OACI1G,EAACgO,GAAmBxL,UAASC,MAAO,CAAEmE,KAAAA,IACjCnH,EAAMsC,cAKGtC,GAClBO,EAACiO,IAAOjM,KAAMvC,EAAMuC,KAAMpC,QAASH,EAAMG,QAASsO,cAC9ClO,EAACmO,QAAc,GAAE1O,EAAM2O,eAAe3O,EAAM6D,SAC5CtD,EAACqO,IAAkBxM,UAAU,QACzB7B,EAACsO,IACGrC,KAAK,SACLrD,OAAQ2F,GACRvK,SAAUvE,EAAMuE,SAChBwK,SAAU/O,EAAM+O,UAEhBxO,EAACyO,QAAoBhP,EAAMsC,aAM3C2M,GAAcC,UAAY,CACtBrL,MAAOsL,GACPC,QAASD,GACTE,KAAMF,GACN5M,KAAM4M,GACNhP,QAASgP,GACTR,YAAaQ,GACb5K,SAAU4K,GACVG,KAAMH,GACNI,OAAQJ,IAGZ,SAAuBnP,IACnB,MACImH,KAAMqI,EADJjL,SAEFA,EAFEiD,OAGFA,EAHEiI,QAIFA,EAJEC,YAKFA,EALEC,gBAMFA,EANEnN,QAOFA,EAPED,KAQFA,GACAvC,GACE4P,YAAEA,EAAFC,QAAeA,GAAYC,MAE7BrI,YAAcE,CAAC3H,EAAMqH,QAAS0I,EAAiB,GAAnC/I,KAAuCA,IACnD9D,EAAWwE,MAEOxE,EAAWqL,KAC3ByB,uBAAEA,KAA2BC,GAAuBF,IAC5CG,GAAc,CAAE3L,SAAAA,EAAUyC,KAAAA,EAAME,QAASiJ,IASvD,OAPAC,EAAU,KACF7N,GACkC,sBAC9ByN,EAAuB,IAAKK,EAAOlJ,KAAMqI,GAAahI,IAE/D,CAACjF,IAGAhC,SACIA,EAAC+P,QACG/P,EAACgQ,GAAMC,QAAS,GACXC,EAASC,IAAIjB,EAAS,CAACkB,EAAOC,IAC3BC,EAAaF,EAAO,CAChBpM,SAAAA,EACAiD,OAAAA,EACAsJ,aAAcpB,EAAYiB,EAAM3Q,MAAMqH,SAAW,GACjDoH,WAAW,EACX7M,GAAI,CAAEmP,OAAQ,GACdrN,SACe,MAAX8D,KAEK,IADJmI,EAAgBqB,QAAQL,EAAM3Q,MAAMqH,SAEjCsJ,EAAM3Q,MAAM0D,aACjBuM,EAAmBU,EAAM3Q,MAAMqH,aAMlD9G,EAAC0Q,QACG1Q,EAAC2Q,IACGxN,SAA8C,IAApCyN,OAAOC,KAAKxB,GAAa3E,SAAiB4E,IAExDtP,EAACqN,IACG/J,MAAM,mBACNuL,QAASiC,IACL7O,GAAQ,GACR6O,EAAEC,oBAGN/Q,EAACgR,gBAOGvR,IACpB,MAAMyP,QACFA,EACAtG,OAAQuG,EAFNC,gBAGFA,EAHE9L,MAIFA,EAJEwD,OAKFA,EALEmC,WAMFA,GACAxJ,GACGuC,EAAMC,GAAWgP,IAAgB,KACvBjM,EAAmBvF,KACvBiH,OACEwK,OACAnG,GAAU,CAAE/B,OAAAA,EAAQlC,OAAAA,EAAQmC,WAAAA,MAGzBtJ,GACEW,CAAU,oBAQ9B,OACIN,SACIA,EAACqN,IACGwB,QAASiC,IACL7O,GAAQ,GACR6O,EAAEC,oBAGN/Q,EAACmR,UAELnR,EAAC0O,IACG1M,KAAMA,EACNpC,QAASkR,IACL7O,GAAQ,GACR6O,EAAEC,mBAEN3C,YAAaA,EACb9K,MAAOA,EACPU,SAAUA,EACVwK,SAxBS,CAACzF,EAAQ+H,KAC1BhG,EAAO/B,EAAQnC,GACf3E,GAAQ,KAwBAjC,EAACoR,IACGtK,OAAQA,EACRF,KAAMA,EACN5C,SAAUA,EACViD,OApCD,IAqCCiI,QAASA,EACTC,YAAaA,GAAe,GAC5BC,gBAAiBA,EAEjBpN,KAAMA,EACNC,QAAS,KACLA,GAAQ,YAQVxC,IAClB,MAAMyP,QACFA,EADEE,gBAEFA,EAFEpL,SAGFA,EAHEV,MAIFA,EAJEwD,OAKFA,EALE+B,IAMFA,EANEI,WAOFA,GACAxJ,IACcE,KACXqC,EAAMC,GAAWgP,IAAgB,KACzBC,OACFxK,OACGwE,GAAW,CAAElC,OAAAA,EAAQlC,OAAAA,EAAQmC,WAAAA,MAGzB3I,EAAU,kBAQ9B,OACIN,SACIA,EAACqN,IACGwB,QAASiC,IACL7O,GAAQ,GACR6O,EAAEC,oBAGN/Q,EAACqR,UAELrR,EAAC0O,IACG1M,KAAMA,EACNpC,QAASkR,IACL7O,GAAQ,GACR6O,EAAEC,mBAEN3C,YAAaA,EACb9K,MAAOA,EACPU,SAAUA,EACVwK,SAxBS,CAACzF,EAAQ+H,KAC1B7F,EAAQpC,EAAInH,GAAIqH,EAAQnC,GACxB3E,GAAQ,KAwBAjC,EAACoR,IACGtK,OAAQA,EACRF,KAAMA,EACN5C,SAAUA,EACViD,OAnCD,IAoCCiI,QAASA,EACTC,YAAatG,EACbuG,gBAAiBA,EAEjBpN,KAAMA,EACNC,QAAS,KACLA,GAAQ,YAQRxC,IACpB,MAAM6R,aACFA,EAAe,0BADbC,eAEFA,EAAiB,4BAFf1I,IAGFA,EAHE/B,OAIFA,EAJEmC,WAKFA,GACAxJ,GAEGuC,EAAMC,GAAWgP,IAAgB,KACzBC,OACFxK,OACK0E,GAAa,CAAEpC,OAAAA,EAAQlC,OAAAA,EAAQmC,WAAAA,IAMjD,OACIjJ,EAACwR,OACGxR,EAACyR,IACGC,IAAI,SACJ7C,QAASiC,IACL7O,GAAQ,GACR6O,EAAEC,oBAGN/Q,EAAC2R,UAEL3R,EAAC4R,IACGC,OAAQ7P,EAER8P,MAAOR,EACPS,QAASR,EACTS,UApBSlB,IACjB3F,EAAUtC,EAAInH,GAAIkF,IAoBVhH,QAASkR,IACL7O,GAAQ,GACR6O,EAAEC,0BAORkB,EAAY,GAAIC,OAEdzS,IACZ,MAAM0S,SACFA,EAAW,GADTC,OAEFA,EAFEC,UAGFA,EACAC,QAASC,EAJPhK,UAKFA,EALEiK,SAMFA,GAAW,EANTC,YAOFA,GAAc,EAPZC,WAQFA,GAAa,EACbvP,SAAUwP,EATR3J,OAUFA,KACGzB,GACH9H,GACGmT,EAAMtH,GAAWpJ,EAAS,MACb2Q,GAAiBpT,KACxBiH,MACPoM,MAAEA,GAAUC,GAAS,CAAExC,aAAc,MAAO9Q,KAE9C2E,UAAW4O,EACX9L,YAAcE,CAACG,EAAKT,QAASmM,IAC7BtQ,EAAWwE,KAET8B,WACFA,GAAa,EACb9F,SAAU+P,EAFRzL,aAGFA,EAAeC,IACfuL,GAAY,IACTE,EAAMC,GAAWlR,EAASmQ,KACxBS,MAAOO,EAAWF,KAAMG,IAAajB,IAC7BM,GAAgBO,EAEjC,MAAa,GACT/D,GACAgD,EAASoB,MAAM,KAAKC,QAAQV,IACpBA,IACAW,EAAOX,GAAS,CACZ,CACI9P,KAAM,SACN0Q,WAAY,KACZjR,MAAO0M,EAAY2D,GACnBA,MAAOA,OAO3BjD,EAAU,KACD6C,GACD3L,WAAW,KACPH,EAAKoD,SAASzC,EAAKT,OAAQ,KAC5B,MAER,CAAC4L,IAEJ,MAAMtO,UAAEA,EAAFqB,QAAaA,GAAYkO,GAC3BpL,EACA,CACIqL,WAAY,CAAEC,KAAM,EAAGC,QAAS,KAChCX,KAAM,CAAEL,MAAOO,EAAWU,MAAOT,GACjCG,OAAAA,GAEJ,CACIO,QAAStB,IAAeM,EACxBtO,UAAWjC,IACPsE,WAAW,KACPH,EAAKoD,SAASzC,EAAKT,OAAQ,KAC5B,KACHwE,GAAQ7I,MAAAA,SAAAA,EAAO4C,OAAQ,OAKnCoC,EAAa,IACNhI,EACHgG,QAAAA,IAGJ,QAAgB8M,EAEXpP,IACDmP,EAAQxI,KAAK,CACTgJ,MAAO,IACPtG,MAAO,GACPyH,WAAY,GACZC,YAAa,SACbC,UAAU,EACVC,2BAA2B,EAC3BC,WAAYvR,IACR,GAA4B,UAAxBA,EAAOwR,QAAQtR,KAGnB,OACIhD,EAACuU,oBACOhN,cACQ0B,kBACKmJ,MACZtP,EAAO+F,UAMxB2J,GACAF,EAAQkC,QAAQ,CACZ1B,MAAO,MACPmB,WAAY,GACZE,UAAU,EACV3H,MAAO,GACPiI,aAAc3R,GACV9C,EAAC0U,oBACOnN,cACQ0B,kBACKmJ,OAM7BK,GACAH,EAAQxI,KAAK,CACTgJ,MAAO,KACPmB,WAAY,GACZC,YAAa,SACbC,UAAU,EACVC,2BAA2B,EAC3BC,WAAYvR,IACR,GAA4B,UAAxBA,EAAOwR,QAAQtR,KAGnB,OACIhD,EAAC2U,oBACOpN,cACQ0B,kBACKmJ,MACZtP,EAAO+F,WAQpC,QAAqBzG,EAAQ,IAAMkQ,EAAS,CAACsC,KAAKC,UAAUvC,KAE5D,OACItS,EAAC8U,IACGzT,GAAI,CACAmL,MAAO,OACPX,OAAQ,OACRkJ,aAAc,EACdC,UAAW,IAGfhV,EAACiV,GAAqBC,gBAClBlV,EAACmV,IAActU,MAAOA,IAClBb,EAACwR,OACGxR,EAACoV,yBACWpM,UAGC5E,GAAa4O,KAClB,CACAqC,kCAAmC,CAC/BxH,gBAAiBhN,GACU,UAAvBA,EAAMmL,QAAQC,KACR,UACA,WAEdqJ,+BAAgC,CAC5B7J,QAAS,uDAIA,CAAEoI,KAAM,EAAG0B,SAAU,uBAEhC3C,UACG4C,YACErC,oBACQsC,GAASrC,EAAQqC,aAC1B,aACC,iDAGC,6BAGL,CAEHC,cAAeC,KAEfpO,IAERvH,8BAAY,UAAa8S,YCzgBnCb,EAAY,GAAIC,OAEnBzS,IACP,MAAM0S,SACFA,EAAW,GADTE,UAEFA,EACAC,QAASC,EAHPhK,UAIFA,EAJEmK,WAKFA,GAAa,EACbkD,aAAcC,KACXtO,GACH9H,GAEI2E,UAAW4O,GAAoBrQ,EAAWwE,MAC9B0L,MAEbM,EAAMC,GAAWlR,EAASmQ,KACxBS,MAAOO,EAAWF,KAAMG,IAAajB,IAE9BjQ,EACZ,IAAM,IAAImQ,GACV,CAACqC,KAAKC,UAAUtC,KAGpB,MAAa,GACTpD,GACAgD,EAASoB,MAAM,KAAKC,QAAQV,IACpBA,IACAW,EAAOX,GAAS,CACZ,CACI9P,KAAM,SACN0Q,WAAY,KACZjR,MAAO0M,EAAY2D,GACnBA,MAAOA,OAO3B,MAAM7L,OACFA,EACA7C,UAAW0R,EAFT5O,WAGFA,EAAa,IACbvE,EAAWwE,MACDwI,GAAclQ,IACpB2H,CAAC3H,EAAMqH,QAASO,EAAe,IAAOH,GACxCO,aAAEA,EAAeC,MAAmBC,GAAqBN,GAEzDhC,KACFA,EAAO,GADLjB,UAEFA,EAFEqB,QAGFA,GACAkO,GACApL,EACA,CACIqL,WAAY,CAAEC,KAAM,EAAGC,QAAS,KAChCX,KAAM,CAAEL,MAAOO,EAAWU,MAAOT,GACjCG,OAAAA,GAEJ,CAAEO,QAAStB,IAAeM,MAGf+C,OACMC,GAA4B,CAC7ChN,OAAAA,EACA4M,aAAcC,IAgBlB,OAbApO,EAAa,IACNF,EACHN,OAAAA,EACA/D,OAAQzD,EAAMyD,OACdkB,UAAW0R,EACXhG,MAAAA,KACGnI,EACHlC,QAAAA,EACAuD,OAAAA,IAMAhJ,EAAC8U,IACGzT,GAAI,CACAmL,MAAO,OACPX,OAAQ,OACRkJ,aAAc,EACdC,UAAW,IAGfhV,EAACiV,GAAqBC,gBAClBlV,EAACmV,IAActU,MAAOA,IAClBb,EAACoV,yBAGWpM,OAhBf3D,UAkBgBiN,UACAlO,GAAa4O,KAClB,CACAqC,kCAAmC,CAC/BxH,gBAAiBhN,GACU,UAAvBA,EAAMmL,QAAQC,KACR,UACA,WAEdqJ,+BAAgC,CAC5B7J,QAAS,uDAIA,CAAEoI,KAAM,EAAG0B,SAAU,4BAE3BpC,oBACQsC,GAASrC,EAAQqC,SAE7B,CAEHC,cAAeC,iBAELC,GACVrO,WCtIN9H,IAClB,MAAMwW,eAAEA,EAAFC,aAAkBA,EAAlBlN,OAAgCA,EAAS,IAAOvJ,GAChD2E,UAAEA,GAAcQ,MACRuR,GAAe1W,GAE7BoQ,EAAU,KACNoG,GAAkBA,EAAe,IAAKnG,EAAOvE,IAAKvC,MAAAA,SAAAA,EAAQG,WAC3D,IAEH0G,EAAU,KACDzL,GACD8R,GAAgBA,EAAa,IAAKpG,EAAOvE,IAAKvC,MAAAA,SAAAA,EAAQG,WAE3D,CAAC/E,QCOWgS,EAAiB,SAAoB3W,EAAOC,GAC3D,OAAOM,EAACqW,4BAAgB,SAAU3W,GAASD,SAG7BA,IACd,MAAM2E,UAAEA,GAAc3E,IACLuF,EAAmBvF,KAClByF,MACZlD,KACFA,EADEM,KAEFA,EACA7C,OAAOqS,MACHA,EADGwE,UAEHA,EAFGC,QAGHA,EAHGC,SAIHA,EAAW,KAAMlU,KAJd0F,KAKHA,EAAO,OALJyO,aAMHA,EAAe,GANZC,YAOHA,GAAc,EAPXC,aAQHA,GAAe,EARZC,aASHA,GAAe,EATZC,YAUHA,EAAc,KAElBlR,EAkGJ,MAAgB,cATZ3F,EAAC4R,IACGC,OAAQ7P,EACR8P,MAAOA,GAAS,WAChBC,QAASuE,EACTtE,UAAWuE,EACX3W,QAAS4W,IAObxW,EAACiO,sBACSjM,UACG,IAAMM,4BAEM,UAAT0F,WACO,UAATA,EAAmB,KAAO,yBACf8O,IACjBD,GAEM,SAAT7O,EA/DLhI,EAACwR,OACGxR,EAACmO,GAAYzM,GAAG,0BAA0BoQ,GAC1C9R,EAACsO,IAAKtK,SAAUA,EAAUwK,SAAU+H,GAChCvW,EAAC+P,GAAcgH,SAAUH,EAAczV,QAAS,SAC5CnB,EAACgQ,GAAMC,QAAS,GAAIqG,IAExBtW,EAAC0Q,OACI+F,EAAatG,IACV,EAEQ7M,MAAAA,EAAQ,GACRwL,KAAAA,EAAO9O,EAACgX,SACRC,QAAAA,GAEJC,IAEAlX,EAACqN,IACGqE,IAAM,SAAQwF,EACd5T,MAAOA,EACPH,SAAUiB,EACVyK,QAASoI,GAERnI,IAIZ6H,GACG3W,EAACqN,IACG/J,MAAM,mBACNH,SAAUiB,EACVyK,QAAS2H,GAETxW,EAACmX,UAGRT,GAAe1W,EAAC2Q,IAAWxN,SAAUiB,OA/ElDpE,EAACwR,OACGxR,EAACgB,IAAOK,GAAI,CAAE+V,SAAU,aACpBpX,EAACqX,IAAQC,kBAAenW,QAAS,SAC7BnB,EAACkB,IACGG,GAAI,CAAEkW,GAAI,EAAGjW,KAAM,GACnBH,QAAQ,KACRU,UAAU,OAETiQ,GAEJ2E,EAAatG,IACV,EAEQ7M,MAAAA,EAAQ,GACRwL,KAAAA,EAAO9O,EAACgX,SACRC,QAAAA,GAEJC,IAEAlX,EAACqN,IACGqE,IAAM,SAAQwF,EACd5T,MAAOA,EACPH,SAAUiB,EACVyK,QAASoI,GAERnI,IAIb9O,EAACqN,IACG/J,MAAM,mBACNH,SAAUiB,EACVyK,QAAS2H,EACTpV,MAAM,WAENpB,EAACmX,YAIZb,QCpFM7W,IACf,MAAM+X,UACFA,EAAY,OADVzV,SAEFA,EAFE+K,UAGFA,EAHE3J,SAIFA,EAJEG,MAKFA,EALElC,MAMFA,EAAQ,UANNqW,KAOFA,EAAO,QACPC,GAAIC,KACDpQ,GACH9H,IACcE,MACM2D,EAAQhD,EAAUgD,EAAO,CAAEsU,EAAGtU,SAAW0D,IAC9C6Q,GAAcF,GAEjC,WAAiBxU,EACbnD,EAAC8X,GAAQhG,MAAOiG,GACZ/X,EAACgY,8BACeD,YACDjL,QACJ1L,OACF,UACDmG,EACA0Q,GAEHlW,IAIT/B,EAACgY,2BACclL,QACJ1L,WACG+B,OACL,UACDoE,EACA0Q,GAEHlW,IAKbmW,GAAWvJ,UAAY,CACnB6I,UAAW5I,GAAUuJ,MAAM,CAAC,OAAQ,UACpCpW,SAAU6M,GAAUwJ,QACpBtL,UAAW8B,GAAUyJ,OACrBjX,MAAOwN,GAAU0J,UAAU,CACvB1J,GAAUuJ,MAAM,CACZ,UACA,UACA,UACA,YACA,QACA,OACA,UACA,YAEJvJ,GAAUyJ,SAEdlV,SAAUyL,GAAU2J,KACpBjV,MAAOsL,GAAUyJ,OACjBZ,KAAM7I,GAAUuJ,MAAM,CAAC,QAAS,SAAU,WAG9C,SAAsBR,IAElB,GAA0B3Q,MAAtB2Q,EACA,OAGJ,GAAkC,mBAC9B,MAAO,CAAED,GAAIC,GAGjB,MAAMpS,SAAEA,EAAFiT,QAAYA,EAAZC,MAAqBA,KAAUf,GAAOC,EAC5C,MAAO,CACHD,GAAAA,EACAnS,SAAAA,EACAiT,QAAAA,EACAC,MAAAA,OC3EgB3H,GAAKA,EAAEC,qBAGV,CACjB2H,KAAM,CAAEC,cAAc,GACtBC,MAAO,OAGS5Y,EAACmR,YAEI1R,IACrB,MAAMqP,KACFA,EAAO+J,GADLvV,MAEFA,EAAQ,mBAFNwV,YAGFA,GAAc,KACXvR,GACH9H,IACauF,EAAmBvF,KACrBoT,GAAiBpT,KACbsZ,KAEnB,OACI/Y,EAACkY,4BACchY,MACP8Y,EAAW,CAAEhW,KAAM,SAAUgB,SAAAA,UAC1B,CACH4E,OAAAA,KACGqQ,GAAaC,OAAOJ,WAEpBxV,UACEyN,IACLxJ,GAEHuH,OCjCWgC,GAAKA,EAAEC,qBAGV,CACjB2H,KAAM,CAAEC,cAAc,GACtBC,MAAO,OAGS5Y,EAACmZ,YAEE1Z,IACnB,MAAMqP,KACFA,EAAO+J,GADLvV,MAEFA,EAAQ,iBAFNwV,YAGFA,GAAc,KACXvR,GACH9H,IACauF,EAAmBvF,KACrBoT,GAAiBpT,KACbsZ,KACnB,OAAKnQ,EAKD5I,EAACkY,4BACchY,MACP8Y,EAAW,CAAEhW,KAAM,OAAQgB,SAAAA,EAAUtC,GAAIkH,EAAOlH,WAC7CuX,GAAaC,OAAOJ,UACpBxV,UACEyN,IACLxJ,GAEHuH,YC/BUrP,IACnB,MAAMqP,KACFA,EAAO+J,GADLvV,MAEFA,EAAQ,iBAFNwV,YAKFA,GAAc,KACXvR,GACH9H,IACauF,EAAmBvF,KACrBoT,GAAiBpT,KACbsZ,KACnB,OAAKnQ,EAED5I,EAACkY,4BACchY,MACP8Y,EAAW,CAAEhW,KAAM,OAAQgB,SAAAA,EAAUtC,GAAIkH,EAAOlH,WAC7CuX,GAAaC,OAAOJ,UACpBxV,UACEyN,IACLxJ,GAEHuH,YAMQ,CACjB4J,KAAM,CAAEC,cAAc,GACtBC,MAAO,OAGS5Y,EAACoZ,YAGGtI,GAAKA,EAAEC,kBAE/BsI,GAAe1K,UAAY,CACvBG,KAAMF,GAAUwJ,QAChB9U,MAAOsL,GAAUyJ,OACjBzP,OAAQgG,GAAU0K,IAClBR,YAAalK,GAAU2J,MAG3B,SAA2BgB,EACvBF,GACA,CAAC5Z,EAAO+Z,IACJ/Z,EAAMuE,WAAawV,EAAUxV,WAC5BvE,EAAMmJ,QAAU4Q,EAAU5Q,OACrBnJ,EAAMmJ,OAAOlH,KAAO8X,EAAU5Q,OAAOlH,GACrCjC,EAAMmJ,QAAU4Q,EAAU5Q,SAChCnJ,EAAM6D,QAAUkW,EAAUlW,OAC1B7D,EAAM0D,WAAaqW,EAAUrW,aC7BlB,CAACyF,EAAQ6Q,SACNzS,IAAlByS,GAC0B,sBAAcA,EAAc7Q,MAE5CqJ,EAAY,GAAIC,OAEA,QAAQ,CAElC,CAAC,KAAM,MACP,CAAC,MAAO,OAER,CAAC,QAAS,SACV,CAAC,YAAa,aACd,CAAC,SAAU,UACX,CAAC,aAAc,cAEf,CAAC,KAAM,KACP,CAAC,MAAO,MACR,CAAC,KAAM,KACP,CAAC,MAAO,MACR,CAAC,KAAM,KACP,CAAC,MAAO,MAER,CAAC,WAAY,YACb,CAAC,SAAU,UACX,CAAC,KAAM,cACP,CAAC,KAAM,YACP,CAAC,UAAW,WACZ,CAAC,aAAc,cACf,CAAC,UAAW,gBAGc,QAC1B3I,MAAMC,KAAKkQ,GAAuBC,GAAS,CAACA,EAAM,GAAIA,EAAM,SAGhBC,GAC5CA,EAAYC,MAAMC,OAAO,CAACC,EAAKrQ,UACD,MAAVoJ,OAAyBpJ,EAAKsQ,WACtCC,GAAsBC,IAAIxQ,EAAKsQ,UAC/BD,EACK,GAAErQ,EAAKoJ,SAASmH,GAAsB1P,IAAIb,EAAKsQ,aAChDtQ,EAAKjH,MAETsX,EAAIrQ,EAAKoJ,OAASpJ,EAAKjH,UAIhC,OAEUhD,IACb,MAAM0a,cACFA,EAAgB,GADdC,kBAEFA,EAFE/Y,GAGFA,EAHEiR,QAIFA,EAJEmH,cAKFA,EALEY,YAQFA,GAAc,EARZC,QAWFA,EACA1E,aAAcC,EAZZ0E,iCAaFA,EAAmCC,GAbjCC,WAcFA,EAdEC,cAeFA,EAAgB,GAfdC,YAgBFA,GAAc,EAhBZC,4BAiBFA,GAA8B,KAC3BrT,GACH9H,IAEU0W,GAAe1W,KACXE,MACDqF,EAAmBvF,IAC9B4F,KACFA,EAAO,GADLjB,UAEFA,EAFEyW,YAGFA,EAHEC,SAIFA,EAJEC,iBAKFA,EALEC,WAMFA,GACApW,MAEWmR,OACMC,GAA4B,CAC7ChN,OAAAA,EACA4M,aAAc,IACPC,EACHoF,cAAe,CAAEC,MAAO,CAAC,eAUjCC,GAAc,CAAEnS,OAAAA,KAAWvJ,IAE3B,QAA0B6S,EAAQnC,IAAI,CAACiL,EAAQ/K,SACxC+K,EACHnH,WAC0B,KAAtBmH,EAAOnH,WACD3T,EAAW,aAAY0D,YAAmBoX,EAAOtI,QAAS,CACtD8E,EAAGwD,EAAOnH,aAEdmH,EAAOnH,gBAIjBkG,EAAczP,OAAS,GAAK4P,EACtBe,EAAkBC,OAAO,CACrB,CACIxI,MAAO,UACP9P,KAAM,UACNwJ,MAAO,IACP+O,UAAU,EACVC,WAAY1Y,IACR,QAAakG,EAAOG,QAAQsS,WAAW3Y,EAAOpB,OAC1Bga,GAChB5Y,EAAO+F,IACP4Q,GAIJ,SAAc5Q,IAAInH,GACZ,IACQ4Y,EACE,CALGK,GAAegB,EAOV3b,EAACqZ,IACGzQ,OAAQ9F,EAAO+F,MAGnB7I,EAAC4b,IACGhT,OAAQ9F,EAAO+F,IACf1F,SAAUwY,KAItBhB,EACA,CACI3a,EAACqZ,IACGzQ,OAAQ9F,EAAO+F,OAGvB,MACHsR,EACE1G,OAAOoI,KAAYA,GACnB1L,IAAI0L,IACD,MAAM5E,QAAEA,KAAY1P,GAASsU,EAC7B,OACI7b,EAAC8b,wCAEYhL,GAEL,sBACMmG,EACI,IACOnH,EACHlH,OAAQ9F,EAAO+F,KAEnBtB,EAAKmK,MAIfnK,QAMvB,IADDoD,EAAK5I,SAAS,GAAG0O,QAAWgK,EAAF,KAE1B,CACIza,EAAC+b,IACGnT,OACI6R,EACM,CACIrT,CAACqT,GACG9P,EAAK5I,SAAS,GACTwR,MACMkH,EAAF,KACH,GACDuB,WACG,IACA,IAEHC,OACA1I,MAAM,OAAO,GACb0I,aAEbjV,KAIlB,OAIlBqU,IAEmBa,EAAe9B,GAsB5C,OACIpa,EAACwR,OACGxR,EAACmc,IAAU/X,UAAWA,IACtBpE,EAACoc,IAAa/a,GAAIA,EAAIyL,UAAWuP,GAAgB5O,MAC5C6O,EACGtc,EAACuc,IAAmB1B,YAAaA,GAC5BT,GAEL,KACJpa,EAAC4B,GACGP,GAAI,CAAEwK,OAAQ,OAAQW,MAAO,QAC7BM,UAAWuP,GAAgBG,cAE3Bxc,EAACmV,GAActU,MAAOA,IAClBb,EAACoV,qBACO,CACA3J,QAAS,OACTgR,iBAAkB,uBAEf,CAEH/G,cAAeC,YAEVH,OACHnQ,SACE2D,UACC5E,0EA2BLwW,oBAEe0B,aACR,6BA7DRxZ,IAEvBkY,EAAWT,EAAiCzX,GAASiY,sBA8DdF,4BA/Eb6B,IACrBtY,IACGkY,IAAyB1B,EACzBE,EAAS4B,GAGL1T,EAAOG,QAAQwT,cAAcD,EAAkB,IAC/C5B,EAAS,IAETA,EAAS4B,qBAwEgB5Z,GAAUA,EAAO+F,IAAInH,gBACxBkU,GAEVrO,YASf9H,IACb,MAAM4B,GACFA,EADEiR,QAEFA,EAFE6H,cAGFA,EAAgB,GAHdG,QAIFA,EAJEb,cAKFA,EACAmD,YAAaC,EANXnC,cAOFA,EAAgB,IAChBjb,EAEJ,MAAkBod,EAElB,QAAc1G,GAAe1W,IACvB2E,UAAEA,GAAcQ,IAItB,GAFAuW,GAAc1b,IAETod,EAAI,CACL,QAAuBnC,EACjBA,EACKnH,MAAM,KACNpD,IAAI7C,GACDgF,EAAQwK,KACJ1B,GACIA,EAAOtI,QAAUxF,GACjB8N,EAAOtI,QAAUxF,EAAO,SAGxCgF,EAENsK,EAAchU,GACV5I,EAAC8U,GAAM3T,QAAQ,WAAWE,GAAI,CAAEwb,GAAI,EAAGE,GAAI,EAAGC,GAAI,IAC7CxH,EAAarF,IAAIiL,IACd,MAAMtI,MACFA,EADEmB,WAEFA,EAFEgJ,YAGFA,EAHEja,KAIFA,EAAO,SAJLka,UAKFA,GACA9B,EACJ,OACIpb,EAAC4B,OADIsb,EACCA,EAAUtU,EAAQwS,GACf,YAATpY,EAEIhD,EAAC4B,GACGC,UAAU,OACVR,GAAI,CACAD,MAAO6b,EAAY,CACfxa,MAAOmG,EAAOkK,KAEZ,QACA,QAGTmB,GAIHrL,EAAOkK,MAGrB9S,EAAC4B,OACIuY,EACI1G,OAAOoI,KAAYA,GACnB1L,IAAI0L,IACD,MAAMnK,IACFA,EADEuF,QAEFA,EAFEnI,KAGFA,EAAO9O,EAACmd,YACL5V,GACHsU,EACJ,OACI7b,EAACqN,0BACYyD,GACc,sBACbmG,EAAQ,IAAKnH,EAAOlH,OAAAA,GAAU8I,IAGpCnK,GAEHuH,OASjC,OACI9O,EAACwR,OACGxR,EAACmc,IAAU/X,UAAWA,IACtBpE,EAACod,IACGC,SAAUzU,MACN0R,IAAWoB,GAAW9S,EAAQ6Q,KACxB,OAGVmD,YAAaA,EACbvb,GAAIA,SAMC5B,IACjB,QAAgBmB,EAAcC,GAASA,EAAMC,YAAYwc,KAAK,QACxDhD,QAAEA,GAAYiD,GAAsB9d,IACpC4a,YAAEA,GAAc,GAAU5a,EAEhC,OACIO,MAD8B,IAAhBqa,EACbmD,GAEAC,oBAFahe,WAAgB6a,SCvbX7a,IACvB,MAAMie,aACFA,EADE1C,WAEFA,EACA2C,MAAMC,IAAEA,KAAQD,GAHdE,cAIFA,EAAgBC,MACbvW,GACH9H,IACcie,EAAahc,GAM/B,OACI1B,EAACwR,OACGxR,EAAC+d,IACGtb,MAAOub,EACPC,eAAe,UACfC,SATS,CAACC,EAAO1b,KACzBuY,EAAW,IAAK0C,EAAchc,GAAIe,MAUzBmb,EAAIzN,IAAIzO,GACL1B,EAACoe,IACG1M,IAAKhQ,EACL4B,MAAO5B,EAAG2c,OAAO,GAAGC,cAAgB5c,EAAG6c,MAAM,GAC7C9b,MAAOf,MAInB1B,EAACwe,SACDxe,EAAC6d,mBAAkBtW,EAAUoW,EAAKK,UCnCzBve,IACjB,MAAMoL,cAAEA,EAAgBnD,MAAmBH,GAAS9H,EAGpD,MAAO,CAAEyH,WAAY,IAFF2D,EAActD,GAEKd,KAAMc,EAAKd,WCJpC,CAACzC,EAAUC,IACxBwa,GAAUza,EAAU,CAAEtC,GAAI,MAAQuC,MCIPxE,IAC3B,MAAMqH,OAAEA,GAAWrH,GACbwH,OAAEA,EAAF7C,UAAUA,EAAV8C,WAAqBA,EAAa,IAAOvE,EAAWwE,MAC1CxE,EAAWqL,WACGhH,IAAZL,IACE+X,GAAYjG,IAC5B,QAAqBA,EAAMkG,aACrBlG,EAAMkG,aAAalL,OAAO/J,GAAQA,EAAKhI,KAAOoF,GAC9C,GACN,SAAoB,GAAK6X,EAAa,GAAK,QAG3Cxb,SAAUyb,EACV1b,OAAQ2b,EACRzb,SAAU0b,EACVzb,MAAO0b,EACPzb,MAAO0b,GACPC,GAAe,MACqB,IAAlBH,EAAyBI,QAAelY,IAEpC,qBAAa+X,EAAa,IAAMA,GAElD3X,CAACN,GAASO,EAAe,GAA3BZ,KAA+BA,GAASS,GAE1CiY,QAASC,EACTlB,SAAUmB,EACVC,OAAQC,EACRrc,OAAQoE,GAAc,EACtBnE,SAAUqc,GAAgB,EAC1BC,SAAUC,KACPnY,GACH9H,GACEqT,MAAEA,GAAUC,GAAStT,IAEvB0f,QAASQ,EACTL,OAAQM,EACR1B,SAAU2B,EACV3c,OAAQsE,EACRrE,SAAU2c,EALRrY,aAMFA,EAAeC,GACf+X,SAAUM,KACPpY,GACHN,IAEA2Y,QAA+BhZ,IAAlBQ,EAA8BF,EAAcE,IAEzDwY,QAAiChZ,IAApB8Y,EACPN,EACAM,IAENE,QAAgChZ,IAAnB2Y,EACPP,EACAO,IAENK,QAA+BhZ,IAAlB4Y,EAA8BL,EAAcK,IAEzDI,QAAiChZ,IAApB6Y,EACPR,EACAQ,IACIlQ,GAAc,IAAKlQ,EAAOgH,KAAAA,EAAME,QAAAA,MACzBc,EAAa,IAC3BF,EACHN,OAAAA,EACA/D,OAAAA,EACAkB,UAAAA,EACA0L,MAAAA,KACGnI,MAEesY,EAAOnN,EAAMrQ,OAcnC,GAZAoN,EAAU,MAEF+O,GACAC,GACAC,GACAC,GACAC,IAEAlM,EAAMwM,OAAOxP,EAAO7I,IAEzB,CAAC6X,EAAeF,EAAeC,EAAaE,EAAYC,SAEtChY,IAAjBc,EACA,gBACK,6DAA4DhB,0EAIrE,MACI5D,OAAQgd,EACR/c,SAAUgd,EACVhB,QAASiB,EACTlC,SAAUmC,EACVf,OAAQgB,EACRb,SAAUc,KACP1Y,GACHC,IACiBsY,GAAmBjB,IACpBmB,GAAkBhB,IAChBe,GAAoBnC,KAE1B,IAAKpO,EAAO0Q,KAAMC,EAActX,SAkBhD,MAAO,CACHpB,eAAgB,CACZ1G,GAAI,CAAE+L,GAAI,EAAGsT,GAAI,EAAGnJ,GAAI,CAAEoJ,GAAI,EAAGC,GAAI,GAAKC,GAAI,CAAEF,GAAI,EAAGC,GAAI,IAC3DzB,QAASrO,IACLgQ,GAAgB3B,EAAQrP,EAAO7I,EAAQ6J,GACvC2P,EAActX,QAAU2H,EAAEiQ,OAAOte,OAErC6c,OAAQxO,GAAKkQ,GAAeA,EAAYC,GAASha,EAAQ6J,GACzDoN,SAAUpN,GAAKoQ,GAAiBA,EAAcD,GAASha,EAAQ6J,GAC/DqQ,YAAY,EACZ1B,SAlBc,IATKlW,MAAM6X,QAAQ1B,GACnCA,EACA,CAACA,MACmBnW,MAAM6X,QAAQrB,GAClCA,EACA,CAACA,MACsBxW,MAAM6X,QAAQb,GACrCA,EACA,CAACA,GAKHc,EACAC,GACF7N,OAAOyD,QAAWlQ,IAANkQ,MAaH3P,KACAI,KACAE,EACH1E,cACsB6D,IAAlB4X,EACMA,OACqB5X,IAArBmZ,EACAA,EACAhd,KACN6b,EAAa,CAAE1b,MAAO0b,GAAe,IAE7C9b,YACoB8D,IAAhB6X,EACMA,OACmB7X,IAAnBkZ,EACAA,EACAhd,OC1IoBc,GAAYA,EAASuP,MAAM,KAAK,MAKpD,2BAEU9Q,IACxB,KAAMA,oBAA0B8e,MAAM9e,EAAM+e,WAAY,MAAO,GAC/D,QACa/e,EAAMgf,cAAcC,cACrBjf,EAAMkf,WAAa,GAAGD,aACvBjf,EAAM+e,UAAUE,WAC3B,MAAQ,GAAEE,MAJE,KAIaC,GAAItD,OAAO,OAJxB,KAIqCuD,GAAIvD,OAAO,SAGtC9b,IAGtB,GAAa,MAATA,GAA2B,KAAVA,EACjB,MAAO,GAGX,GAAIA,kBACA,UAA2BA,GAI/B,GAAIsf,GAAUC,KAAKvf,GAAQ,CACvB,QAAcA,EAAM8Q,MAAM,KAC1B,SAAa,GAAK,IAAM0O,EAAM,GAAK,IAAMA,EAAM,GAGnD,UAA2B,SAASxf,QAGdA,IAEtB,IAAKA,EACD,MAAO,GAEX,QAAcA,EAAM8Q,MAAM,KAC1B,SAAa,GAAK,IAAM0O,EAAM,GAAK,IAAMA,EAAM,OAG7B,wCAEQxf,IAG1B,GAAa,MAATA,GAA2B,KAAVA,EACjB,MAAO,GAGX,GAAIA,kBACA,UAA2BA,GAI/B,GAAIyf,GAAcF,KAAKvf,GAAQ,CAC3B,QAAiBA,EAAM8Q,MAAM,OACf4O,EAAS,GAAG5O,MAAM,KAEhC,SAAa,GAAK,IAAM0O,EAAM,GAAK,IAAMA,EAAM,GAAK,IAAME,EAAS,GAGvE,UAA2B,SAAS1f,QAGVA,IAE1B,IAAKA,EACD,MAAO,GAGX,QAAiBA,EAAM8Q,MAAM,OACf4O,EAAS,GAAG5O,MAAM,KAEhC,SAAa,GAAK,IAAM0O,EAAM,GAAK,IAAMA,EAAM,GAAK,IAAME,EAAS,OAG7C1f,IAEtB,IAAKA,EACD,MAAO,GAGX,GAAIA,kBAEA,SAAaif,eACkB,IAAxBjf,EAAMgO,QAAQ,KAAa,CAClC,QAAchO,EAAM8Q,MAAM,KAC1B,MAAU,SAGV,OAFA6O,EAAIC,SAASJ,EAAM,IACnBG,EAAIE,WAAWL,EAAM,MACVP,WACR,CAEH,QAAc,kBAAkBa,KAAK9f,GACrC,GAAc,OAAVwf,EACA,OAEJ,MAAU,SAGV,OAFAG,EAAIC,SAASJ,EAAM,IACnBG,EAAIE,WAAWL,EAAM,MACVP,gBAIO,CAACjf,EAAOqE,IAEzBrE,IAIQ8Q,MAAM,KAAK,GAAGiP,UAAU,EAAG,GAH7B,MAkCU/iB,IACrB,MAAMyD,OAAEA,GAAWuf,GAAuBhjB,GAE1C,OACKyD,GACGlD,EAACkB,IAAWC,QAAQ,KAAKuhB,gBAAahhB,GAAIjC,EAAMqH,QAC3CrH,EAAMsC,cAMK,EACxBA,SAAAA,EACA+K,UAAAA,EACAzH,KAAAA,EACAsd,QAAAA,EACAC,QAAAA,GAAU,KACPrb,KAEHvH,EAAC6iB,4BAAsB/V,GAhDD,MAyBnBvF,KACDA,EAsBoCub,CAAkBvb,IACnDxF,EACA6gB,GACG5iB,EAAC+iB,IAAWzf,MAAM,iBAAiBwL,KAAM9O,EAACgjB,WAE7CL,GAAW3iB,EAACijB,IAAWra,OAAQvD,QAIZjC,QACQ,CAAC8b,GAAcgE,GAAS,OAC3B,CAAEC,YAAa,iBAChBC,GAAqB,CAAC3gB,EAAO4gB,KACzD,QAAeA,EAAUD,GAEzB,GAAI3gB,GAAS6gB,EAAQ,CACjB,QAAgB,SAASA,EAAO/P,MAAM,KAAKgQ,UAAUC,KAAK,QAC1C,SAAS/gB,EAAM8Q,MAAM,KAAKgQ,UAAUC,KAAK,MAEzD,GAAIC,GAAQC,EAASC,GACjB,MAAO,CACHC,QAAS,8BACTC,KAAM,CAAEC,MAAOR,SAQF,CAACS,EAAM,SAChCC,OAAgB,OAARD,EAAeE,GAAWC,QAET,CACzB,CAAExiB,GAAI,IAAK4L,KAAM,YACjB,CAAE5L,GAAI,IAAK4L,KAAM,aACjB,CAAE5L,GAAI,IAAK4L,KAAM,iBAEQ,CAAC6W,EAAMC,KAChC,QAAiBC,SAASC,cAAc,KACxCC,EAASC,MAAM/Y,QAAU,OACzB4Y,SAASI,KAAKC,YAAYH,GAC1BA,EAASI,aAAa,OAAQR,GAC9BI,EAASI,aAAa,WAAYP,GAClCG,EAASK,YAGeC,IACxB,IAAKA,EAAY,MAAO,GACxB,MAAOC,EAAKC,EAAOC,GAAQH,EAAWtR,MAAM,KAAKpD,IAAI8U,QACrD,gBAAgBD,EAAMD,EAAQ,EAAGD,OAGLI,IAC5B,IAAKA,EAAgB,MAAO,GAC5B,MAAOC,EAAUC,GAAYF,EAAe3R,MAAM,MAC3CuR,EAAKC,EAAOC,GAAQG,EAAS5R,MAAM,KAAKpD,IAAI8U,SAC5CI,EAAMC,GAAUF,EAAS7R,MAAM,KAAKpD,IAAI8U,QAC/C,gBAAgBD,EAAMD,EAAQ,EAAGD,EAAKO,EAAMC,OAGpBC,GACnBA,EAIG,GAHIrM,OAAOqM,EAAK/D,WAAWgE,SAAS,EAAG,QACjCtM,OAAOqM,EAAK5D,WAAa,GAAG6D,SAAS,EAAG,QACzCtM,OAAOqM,EAAK9D,iBAHP,MAOU8D,KAUhBE,eAAe,KATX,CACZX,IAAK,UACLC,MAAO,UACPC,KAAM,UACNK,KAAM,UACNC,OAAQ,UACRI,QAAQ,IAG8BlN,QAAQ,IAAK,OCjQjC,CAAC1R,EAAQpF,KAC/B,QAAiBsD,KAEXK,KAAEA,EAAFjB,UAAQA,EAARf,MAAmBA,GAAUob,GAC/B,MAAQkH,GAAuB3hB,GAAY,IAAM8C,EACjD,CAAEpF,GAAAA,IAGN,OAAI0C,GAAaf,EACN,IAGJgC,MAAAA,SAAAA,EAAMugB,WAAY,OCREnmB,IAC3B,QAAkBE,KACZkmB,aAAEA,EAAFjmB,QAAgBA,EAAhBgJ,OAAyBA,EAAzBkJ,MAAiCA,GAAUrS,EAEjD,OACIO,EAAC8lB,IAAkBpkB,GAAG,qBACjBwa,EAAepK,GACVxB,EAAawB,EAAO,CAAElJ,OAAAA,IACtBkJ,EACAxR,EAAUwR,EAAO,CAAE8F,EAAG9F,IACtB+T,EACN7lB,EAACgY,GACG+N,aAAYzlB,EAAU,mBACtBwM,UAAWkZ,GAAuBC,YAClCpX,QAASjP,GAETI,EAACkmB,eAQqB,CAClCD,YAAc,oCAGQza,GAAO2C,EAAa,CAC1Cb,KAPW,oBAQXC,kBAAmB,CAAC9N,EAAO+N,IAAWA,EAAOC,MAFvBjC,CAGvB,EAAG3K,MAAAA,OACFuG,CAAE,MAAK4e,GAAuBC,aAAgB,CAC1C7O,SAAU,WACV8D,MAAOra,EAAMoP,QAAQ,GACrBkW,IAAKtlB,EAAMoP,QAAQ,GACnB7O,MAAOP,EAAMmL,QAAQoa,KAAK,YClCDtkB,EAAc,SCMXrC,IAChC,QAAgBkD,EAAW0jB,MACN,CACjBxU,QAAQpS,MAAAA,SAAAA,EAAOoS,UAAUnP,MAAAA,SAAAA,EAASmP,QAClC7P,MAAMvC,MAAAA,SAAAA,EAAOuC,QAAQU,MAAAA,SAAAA,EAASV,MAC9BskB,OAAO7mB,MAAAA,SAAAA,EAAO6mB,SAAS5jB,MAAAA,SAAAA,EAAS4jB,QAEpC,OAC2B,MAAvBC,EAAa1U,QACQ,MAArB0U,EAAavkB,MACS,MAAtBukB,EAAaD,iBCgDO7mB,IACxB,QAAiBuF,EAAmBvF,KACpB+mB,GAAqB/mB,GACrC,OAAIiD,EACO1C,EAACymB,2BAA2BziB,GAActB,EAAajD,IAI9DO,EAAC0mB,QACG1mB,EAAC2mB,IACGC,KAAK,WACLxO,QACIpY,EAACymB,2BAA2BziB,aAAqBvE,WAO5C,EACrBsC,SAAAA,EACA8kB,gBAAiBC,EACjBhV,MAAAA,EACAvM,SAAUwhB,EAAa,UACpBtnB,MAEH,QAAiBqF,MACFD,MACKmiB,OACI,CACpBtiB,UAAWW,IACPC,EAAO,0BAA2B,CAC9BtC,KAAM,OACNikB,YAAa,CAAEC,YAAa,KAIhCC,EAAYC,kBAAkB,CAACpjB,EAAU,YACzCmjB,EAAYC,kBAAkB,CAACpjB,EAAU,qBACrCvE,EAAM6mB,MACN7mB,EAAM6mB,QAEN/gB,EAASwhB,EAAYtnB,EAAMuE,SAAUqB,EAAK3D,GAAI2D,EAAM,CAChDsT,cAAc,QAIvBmO,KAEiBO,GAAoB,IACrC5nB,EACHonB,gBAAAA,KAEEhB,aAAEA,EAAFjd,OAAgBA,EAAhB5E,SAAwBA,GAAasjB,IAEvB,KACZ7nB,EAAM6mB,MACN7mB,EAAM6mB,QAEN/gB,EAAS,OAAQ9F,EAAMuE,cAAUgD,OAAWA,EAAW,CACnD2R,cAAc,KAK1B,OACI3Y,EAACiO,sBACSxO,EAAMoS,yBACI,8BACP0V,gBACG,iBACRzE,GAAkBrjB,IAEtBO,EAACwnB,IACG9lB,GAAG,sBACHoQ,MAAOA,EACP+T,aAAcA,EACdjd,OAAQA,EACRhJ,QAAS2nB,IAEbvnB,EAACynB,IAAsBhlB,MAAO6kB,GACzBvlB,QAMS,EACtB2lB,SAAAA,EAAW,KACXC,UAAAA,EAAY,KACZrN,QAAAA,EAAU,KACVsI,QAAAA,EAAU,KACVD,QAAAA,EAAU,KACViF,QAAAA,EAAU,KACVC,OAAAA,EAAS,KACTC,QAAAA,EAAU,KACVC,SAAAA,EAAW,KACX9F,MAAAA,EAAQ,KACR4E,gBAAAA,EAAkB,KAClB5iB,QAAAA,EAAU,KACV+jB,YAAAA,EAAc,KACdnb,UAAAA,EAAY,KACZgF,OAAAA,EAAS,KACT7P,KAAAA,EAAO,KACPskB,MAAAA,EAAQ,QACL/e,KACDA,KClK0B9H,IAC5B,QAAkBE,KACXkS,EAAQoW,GAAa/lB,GAAS,KACxBuC,EAAY,KACrBwjB,GAAU,IACX,MACWxjB,EAAY,KACtBwjB,GAAU,IACX,MACkB7lB,EACjB,MACIyP,OAAAA,EACA7P,KAAAA,EACAskB,MAAAA,IAEJ,CAACA,EAAOzU,EAAQ7P,KAGd8M,KACFA,EAAO+J,GADLvV,MAEFA,EAAQ,GAFN4kB,OAGFA,EAHEC,OAIFA,EAJEC,YAKFA,GACA3oB,IAEYgF,EACZqM,IACI9O,IACA8O,EAAEC,mBAEN,CAAC/O,MAGmB1B,EAAUgD,EAAO,CAAEsU,EAAGtU,MAE/B4kB,EACX9R,gBAAC0B,GAAQhG,MAAOiG,GACZ3B,gBAAC4B,8BACeD,OACP,cACC,WACFqQ,WACKvZ,IAERC,IAITsH,gBAAC/I,wBAAc0K,GAAqBqQ,WAAsBvZ,IACrDC,GAIT,OACIsH,gBAACiQ,GAAkB7jB,UAASC,MAAO4lB,GAC9BxM,EACAsM,OAKO/R,gBAACkS,YC5De7oB,IAChC,MAAMyoB,OACFA,EADEpZ,KAEFA,EAAO+J,GAFLvV,MAGFA,EAAQ,mBAHN8kB,YAIFA,KACGG,GACH9oB,EAIJ,OACI2W,gBAACoS,IACG1Z,KAAMA,EACNxL,MAAOA,EACP6kB,OANa/R,gBAACqS,GAAiBF,GAO/BL,OAAQA,EACRE,YAAaA,QAKLhS,gBAACsS,YCjCD,CAChB9hB,KAAO,kBACP+hB,IAAM,iBACNC,UAAY,2BAGO/nB,KACnBuG,CAAE,MAAKyhB,GAAYjiB,MAAS,CACxBkiB,UAAW,OACXrnB,SAAU,QAEd2F,CAAE,MAAKyhB,GAAYF,KAAQ,CACvBld,QAAS,QACTqd,UAAW,OACXrnB,SAAU,QAEd2F,CAAE,MAAKyhB,GAAYD,WAAc,CAC7BxhB,CAACvG,EAAMC,YAAYC,GAAG,OAAQ,CAC1ByL,MAAO,QAEXpF,CAACvG,EAAMC,YAAYC,GAAG,OAAQ,CAC1ByL,MAAO,OACPuc,yBAA0B,CACtBvc,MAAO,eAWN,UAEK/M,IAClB,MACIyH,YAAY8hB,oBAAEA,EAAFviB,KAAuBA,GADjCQ,OAEFA,GACAtE,EAAWwE,MACD8hB,GAAe,IAAKxpB,EAAOgH,KAAAA,MAC1B5B,KACTkK,KAAEA,GAASma,OAEFzkB,EACX0kB,MAAAA,IACI,QACIH,WAEI,CACIpiB,KAAM,CAAEgD,UAAW,IAAMb,GACzBqgB,OAAQra,KACLe,GAEP7I,GAER,MAAqB,wBACjB3B,EAAO+jB,EAAO,CAAErmB,KAAM,eAGLgE,OAAaqiB,EAAQta,EAAKhG,QAAUugB,GAG7D,CAACN,EAAqB1jB,EAAQgkB,GAAUva,IAG5C,MAAsC,qBAAaqa,OAASpiB,MC9D3CvH,IACjB,MAAMoL,cACFA,EAAgBnD,GADdgL,WAEFA,GAAa,EAFX1K,KAGFA,KACGT,GACH9H,IACauF,EAAmBvF,KACH,YAATuI,EAAqBuhB,GAAuBC,IAE5DnkB,KAAMokB,EAARrlB,UAAuBA,GAAcslB,GAAS1lB,EAAU,CAC1DgQ,QAAStB,KAEPxL,WAAEA,GAAeyiB,GAAalqB,KACpB2C,EACZ,MAAS6E,OAAQ,IAAKwiB,cAAAA,EAAerlB,UAAAA,EAAW8C,WAAAA,IAChD,CAACuiB,EAAerlB,EAAW8C,IAG/B,OACIlH,EAAC4pB,QACG5pB,EAACmH,GAAa3E,UAASC,MAAOC,GAC1B1C,EAAC6pB,QACG7pB,EAAC8pB,0BACY,QACLviB,EACAL,MAAAA,SAAAA,EAAY6iB,YAQxCC,GAAarb,UAAY,CACrB9D,cAAe+D,GAAUqb,MAGvBC,SAAe1e,GAAOwe,GAAc,CACtC1c,KD9CkB,aC+ClBC,kBAAmB,CAAC9N,EAAO+N,IAAWA,EAAOC,MAF5BjC,CAGlB,EAAG3K,MAAAA,KAAYspB,GAAetpB,OCmBPpB,IACtB,QAAiBuF,EAAmBvF,KACpB+mB,GAAqB/mB,GACrC,OAAIiD,EACO1C,EAACoqB,2BAAyBpmB,GAActB,EAAajD,IAI5DO,EAAC0mB,QACG1mB,EAAC2mB,IACGC,KAAK,KACLxO,QACIpY,EAACoqB,2BAAyBpmB,aAAqBvE,WAO5C,EACnBsC,SAAAA,EACA8kB,gBAAiBC,EACjBhV,MAAAA,EACAvM,SAAUwhB,EAAa,UACpBtnB,MAEH,QAAiBqF,MACFD,MACKmiB,OACI,CACpBtiB,UAAWW,IACPC,EAAO,0BAA2B,CAC9BtC,KAAM,OACNikB,YAAa,CAAEC,YAAa,KAIhCC,EAAYC,kBAAkB,CAACpjB,EAAU,YACzCmjB,EAAYC,kBAAkB,CAACpjB,EAAU,qBACrCvE,EAAM6mB,MACN7mB,EAAM6mB,QAEN/gB,EAASwhB,EAAYtnB,EAAMuE,SAAUqB,EAAK3D,GAAI2D,EAAM,CAChDsT,cAAc,QAIvBmO,KAEiBuD,GAAkB,IACnC5qB,EACHonB,gBAAAA,KAEEhB,aAAEA,EAAFjd,OAAgBA,EAAhB5E,SAAwBA,GAAasjB,IAEvB,KACZ7nB,EAAM6mB,MACN7mB,EAAM6mB,QAEN/gB,EAAS,OAAQ9F,EAAMuE,cAAUgD,OAAWA,EAAW,CACnD2R,cAAc,KAK1B,OACI3Y,EAACiO,sBACSxO,EAAMoS,yBACI,4BACP0V,gBACG,eACRzE,GAAkBrjB,IAEtBO,EAACwnB,IACG9lB,GAAG,oBACHoQ,MAAOA,EACP+T,aAAcA,EACdjd,OAAQA,EACRhJ,QAAS2nB,IAEbvnB,EAACsqB,IAAoB7nB,MAAO6kB,GACvBvlB,QAMS,EACtB2lB,SAAAA,EAAW,KACXC,UAAAA,EAAY,KACZrN,QAAAA,EAAU,KACVqI,QAAAA,EAAU,KACViF,QAAAA,EAAU,KACVC,OAAAA,EAAS,KACTC,QAAAA,EAAU,KACVC,SAAAA,EAAW,KACX9F,MAAAA,EAAQ,KACR4E,gBAAAA,EAAkB,KAClB5iB,QAAAA,EAAU,KACV+jB,YAAAA,EAAc,KACdnb,UAAAA,EAAY,KACZgF,OAAAA,EAAS,KACT7P,KAAAA,EAAO,KACPskB,MAAAA,EAAQ,QACL/e,KACDA,KC/J4B9H,IAC9B,MAAMyoB,OACFA,EADEpZ,KAEFA,EAAO+J,GAFLvV,MAGFA,EAAQ,iBAHN8kB,YAIFA,KACGmC,GACH9qB,EAIJ,OACI2W,gBAACoS,IACG1Z,KAAMA,EACNxL,MAAOA,EACP6kB,OANW/R,gBAACoU,GAAeD,GAO3BrC,OAAQA,EACRE,YAAaA,QAKLhS,gBAACsS,YCnCFjpB,IACf,MAAMuI,KAAEA,KAAST,GAAS9H,EAI1B,OACIO,EAAC6pB,QACG7pB,EAJuB,YAATgI,EAAqByiB,GAAqBC,GAIrCnjB,KCb/B,SAASojB,GAAE7Z,GAAG,IAAI8Z,EAAEC,EAAEC,EAAE,GAAG,GAAG,iBAAiBha,GAAG,iBAAiBA,EAAEga,GAAGha,OAAO,GAAG,iBAAiBA,EAAE,GAAGvH,MAAM6X,QAAQtQ,GAAG,IAAI8Z,EAAE,EAAEA,EAAE9Z,EAAEpG,OAAOkgB,IAAI9Z,EAAE8Z,KAAKC,EAAEF,GAAE7Z,EAAE8Z,OAAOE,IAAIA,GAAG,KAAKA,GAAGD,QAAQ,IAAID,KAAK9Z,EAAEA,EAAE8Z,KAAKE,IAAIA,GAAG,KAAKA,GAAGF,GAAG,OAAOE,EAAS,SAASC,KAAO,IAAI,IAAIja,EAAE8Z,EAAEC,EAAE,EAAEC,EAAE,GAAGD,EAAEG,UAAUtgB,SAASoG,EAAEka,UAAUH,QAAQD,EAAED,GAAE7Z,MAAMga,IAAIA,GAAG,KAAKA,GAAGF,GAAG,OAAOE,EDkBhWG,GAAWtc,UAAY,CACnBuc,UAAWtc,GAAUqb,MEZzB,SAc8BxqB,IAC1B,QAAkBE,KACZqE,SACFA,EADE8I,UAGFA,EAHEgC,KAIFA,EAJExL,MAKFA,EAAQ,sBACLiE,GACH9H,IAEWoT,MACRsY,GAAW/mB,UAAEA,IAAegnB,GAAUpnB,EAAU,CAAEtC,GAAIkH,EAAOlH,KAEpE,OACI1B,EAAC8X,IAAQhG,MAAOxR,EAAU,qBACtBN,EAACgY,2BACa5T,UACD,IAAM+mB,UACR7nB,YACIynB,GAAK,mBAAoBje,OAChC,UAnCM,MAWnBvF,KACDA,EAwBcub,CAAkBvb,SACjB,UAEJuH,KAMjBuc,GAAsBC,aAAe,CACjC/lB,SAAU,OACVuJ,KAAM9O,EAAC2R,UCxCX,SAAyBtM,IACrB,QAAsB,GACtB,IAAK,aACwB,mBAATqM,IAAiD,IAA5BrM,EAAKqM,GAAKuK,OAAOvR,SAGrC,MAAbrF,EAAKqM,KACLrM,EAAKqM,GAAO,IAEhB6Z,EAAc7Z,GAAOrM,EAAKqM,IAG9B,aAiCelG,GA9BA/L,IACf,MAAMoL,cACFA,EAAgBnD,GADd8jB,aAEFA,EAAe,iBACZjkB,GACH9H,IACoBgsB,GAAkB,CAAED,aAAAA,KAAiBjkB,KACrDqB,OAAQ6gB,EAAVrlB,UAAyBA,GAAckjB,GACvCpgB,WAAEA,GAAeyiB,GAAalqB,KACpB2C,EACZ,MAAS6E,OAAQ,IAAKwiB,cAAAA,EAAerlB,UAAAA,EAAW8C,WAAAA,IAChD,CAACuiB,EAAerlB,EAAW8C,IAG/B,OACIlH,EAAC4pB,QACG5pB,EAACmH,GAAa3E,UAASC,MAAOC,GAC1B1C,EAAC6pB,QACG7pB,EAAC0rB,+BACiBF,YACHG,IACPpkB,EACAL,MAAAA,SAAAA,EAAY6iB,YAQF,CAClCzc,KPtDkB,aOuDlBC,kBAAmB,CAAC9N,EAAO+N,IAAWA,EAAOC,MAF9BjC,CAGhB,EAAG3K,MAAAA,KAAYspB,GAAetpB,OCpDduV,EAAiB,CAAC3W,EAAOC,KACxC,MAAMmS,OACFA,EADErD,SAEFA,EAFE5O,QAGFA,EAHEkS,MAIFA,EAJE8Z,WAKFA,EALE7pB,SAMFA,EANE8pB,UAOFA,GAAY,EAPVC,UAQFA,GAAY,EARV1nB,UASFA,GAAY,GACZ3E,IAEauF,EAAmBvF,KAEhBqR,IAChBlR,GAAWA,EAAQkR,IAGvB,OACI9Q,EAACiO,IACGvO,IAAKA,EACLsC,KAAM6P,EACN3D,aACAtO,QAAS2nB,EACTwE,kBAAgB,qBAEhB/rB,EAACmO,IAAYzM,GAAG,qBAAqBoQ,GACrC9R,EAACsO,IAAKtK,SAAUA,EAAUwK,SAAUA,GAChCxO,EAAC+P,IAAcgH,aACX/W,EAACqO,QAAmBud,GACpB5rB,EAAC4B,IAAIP,GAAI,CAAE+L,GAAI,IAAMrL,KAEvB8pB,GAAaC,IACX9rB,EAAC0Q,QACIob,GACG9rB,EAACqN,IACG/J,MAAM,mBACNH,SAAUiB,EACVyK,QAASiC,GAAKyW,EAAYzW,IAE1B9Q,EAACmX,UAGR0U,GACG7rB,EAAC2Q,IACGqb,gBACA1oB,MAAM,KACNH,SAAUiB,YCjDzB,MACD,CACZ6nB,cAAe,OACfpe,gBAAiB,UACjBqe,QAAS,GACT9U,SAAU,eAGQ3X,IAClB,QAAgByG,OACClB,EAAmBvF,IAC9BwH,OAAEA,EAAF7C,UAAUA,EAAVqlB,cAAqBA,EAArBviB,WAAoCA,GACtCvE,EAAWwE,MACDwI,GAAc,CAAE3L,SAAAA,EAAUyC,KAAMS,EAAWT,OAezD,OAbAoJ,EAAU,KACN3I,EAAWilB,eAAiBjlB,EAAWilB,cAAcrc,EAAO7I,IAC7D,IAEH4I,EAAU,KACDzL,GACD8C,EAAWklB,aACPllB,EAAWklB,YAAYtc,EAAO7I,EAAQwiB,IAE/C,CAACrlB,IAKApE,EAACqsB,GACGhrB,GAAI,IACG5B,EAAM4B,MALPqB,EAAQV,KAAOsqB,GAAUC,KAS9B7pB,EAAQV,MACLhC,EAACwsB,GACGnrB,GAAI,CACA+V,SAAU,WACVqV,KAAM,MACNtG,IAAK,OAETuG,UAAW,EACXjV,KAAM,KAGdzX,EAACmc,IAAU/X,UAAWA,IACrB3E,EAAMsC,cCjDAtC,IACf,MAAMgqB,cACFA,EACAviB,YAAYylB,OAAEA,EAAS,KACvBhqB,EAAWwE,MACAylB,GAAcntB,GAE7B,OAAKgqB,EAGDzpB,EAAC6sB,uBACQ,UACDptB,YACM2pB,gBACKK,YACJqD,IACPH,UAKhBI,GAAWpe,UAAY,IAChBke,GAAWle,WChBlB,SAAgBlP,IACZ,MAAMutB,aAAEA,EAAFnb,OAAgBA,EAAhBvE,KAAwBA,EAAxBwB,KAA8BA,EAA9B/M,SAAoCA,EAApCkrB,MAA8CA,GAAUxtB,IAC5CE,KAEXutB,GAAiBC,OAGpBntB,EAACC,GAASgtB,MAAOA,EAAOpe,QAASme,GAC7BhtB,EAACG,GAAakB,GAAI,CAAE+rB,SAAU,IACzBvb,EAAS7R,EAACqtB,SAAgBve,GAE/B9O,EAACkB,GAAWC,QAAQ,UAAUC,MAAM,iBAC/Bd,EAAUgN,KAKvB,OACItN,aACKktB,GAAiBrb,EACdyb,EAEAttB,EAAC8X,GAAQhG,MAAOxR,EAAUgN,GAAOigB,UAAU,SACtCD,GAGTttB,EAACwtB,GAASC,GAAI5b,EAAQ6b,QAAQ,OAAOC,kBACjC3tB,EAAC0qB,GACGuC,MAAOA,EACPprB,UAAU,MACV+rB,kBACAvsB,GAAI,CACAwsB,aAAcpuB,EAAMsC,SAAStC,MAAMsC,SAAS,GACtCtC,EAAMsC,SAAStC,MAAMsC,SAAS,GAAG2P,IACjC,IACJoc,WAAW,QACP,EACA,EACNjgB,gBAAiBhN,GAEbiN,GAAMjN,EAAMmL,QAAQ+hB,UAAUC,MAAO,KACzCC,MAAO,CACHC,WACI,sDACJL,YAAaX,EAAgB,EAAI,KAIxCnrB,SChDFtC,IACf,MAAQoa,MAAOsU,EAAT7tB,UAAgBA,KAAciH,GAAS9H,GACvCgZ,MAAEA,EAAFuU,aAASA,EAATC,MAAuBA,GAAU1lB,EAEvC,UAEQvH,aACKmuB,EAAMhe,IAAIzG,IACP,MAAM4D,KAAEA,EAAF8gB,KAAQA,EAAR9qB,MAAcA,EAAdwL,KAAqBA,EAAO,YAAepF,EAEjD,SACI1J,EAACquB,IACG3c,IAAKpE,EACLA,KAAMhK,EACN0pB,aAAc,IAAMA,EAAa1f,GACjCuE,OAAQ4G,EAAMnL,GACdwB,KAAM9O,EAACmd,SACP8P,MAAOA,GAENqB,GAAW,CAAEzU,MAAOuU,EAAM9tB,UAAAA,KAAciH,KAG7CvH,EAACuuB,IACG7c,IAAKpE,EACLoK,GAAK,IAAGpK,EAGRsP,YAAatc,EAAW,aAAYgN,SAAa,CAC7CsK,EAAGtU,IAEP2pB,MAAOA,EACPuB,SAAUxuB,EAACmd,kBAW1B,EAAG8P,MAAAA,GAAQ,MACpB,QAAkBttB,KACX8Y,EAAOgW,GAAYvsB,EAAS,CAAEwsB,WAAW,MAC/B9tB,EAAcC,GAASA,EAAMC,YAAYwc,KAAK,QACxDtb,GAAQmrB,OAEDvY,KAAK+Z,MAAMC,aAAaC,QAAQ,YAU9BP,GAAW,CACvBzU,MAAOsU,EACPnB,aANiBoB,IACjBK,EAAShW,QAAeA,EAAOrR,CAACgnB,IAAQ3V,EAAM2V,OAM9C3V,MAAAA,EACAqW,gBAVoB,GAWpBC,UAZc,GAadjiB,UAdc,GAed9K,KAAAA,EACAirB,MAAAA,EACA3sB,UAAAA,IAGJ,OACIN,EAAC4B,GACGP,GAAI,CACAmL,MAAOxK,EAAO,IAAM,GACpBgT,UAAW,EACXga,aAAc,EACdd,WAAYrtB,GACRA,EAAMouB,YAAYC,OAAO,QAAS,CAC9BC,OAAQtuB,EAAMouB,YAAYE,OAAOC,MACjCC,SAAUxuB,EAAMouB,YAAYI,SAASC,kBAIjDtvB,EAACuvB,QACGvvB,EAACwvB,IACG5S,YAAatc,EAAU,uBAI1BmvB,EACAC,GACG1vB,EAACuuB,IACG7W,GAAG,iBACHkF,YAAatc,EAAU,qBACvBkuB,SAAUxuB,EAACmd,SACX8P,MAAOA,OCvG/B,OAAextB,GAASO,EAAC2vB,oBAAWlwB,UAAeuB,QAAc4uB,MCUjE,SAA6B,CAAChY,EAAGiY,KAC7BC,MAAM,kDAGgBrwB,IACtB,MAAMqN,UACFA,EACAijB,QAASC,EAFPjuB,SAIFA,EAJEkuB,iBAKFA,GAAmB,EALjBC,cAMFA,EAAgBC,MACb5oB,GACH9H,GACE0T,KACFA,EADE4H,iBAEFA,EAFE2C,aAGFA,EAHE0S,SAIFA,EAJEC,WAKFA,EALEC,MAMFA,GACA1rB,EAAenF,KACFuF,EAAmBvF,IAC5BkoB,UAAW4I,GAAqBhT,GAAsB9d,KAC9CkD,EAAW6tB,KAAkBR,IACzBprB,EAAenF,KAEf,IADN0W,GAAe1W,MACMgxB,GAInC,gBAFY9I,YAGR,IACI3nB,EAAC6iB,4BAAsB/V,GAAe4jB,GAAsBnpB,IACtD0oB,EAUI,KATAD,EACI1f,EAAa0f,EAAa,CACtBhsB,SAAAA,EACAqsB,WAAAA,EACAtV,iBAAAA,EACA2C,aAAAA,EACAhb,QAAS,WAEbqtB,GAAW/vB,EAAC2wB,SAErBJ,GAAoBvwB,EAAC4wB,UACR,IAAbR,GACGpwB,EAAC6wB,IACG1tB,SAAoB,IAAVmtB,EACVtsB,SAAUA,EACVmP,KAAMA,EACNuK,aAAcA,IAGrBxN,EAASC,IAAIpO,EAAU,CAACqO,EAAOC,IAC5BC,EAAaF,EAAO,CAChBvB,QAAUuB,EAAM3Q,MAAMwE,QAOhB,KANA6M,IACQV,EAAM3Q,MAAMoP,SACZuB,EAAM3Q,MAAMoP,QAAQiC,GAExBof,EAAcY,EAAa1gB,EAAMsB,MAG3CzN,QAASmM,EAAM3Q,MAAMwE,QACfmM,EAAM3Q,MAAMwE,QAAQkM,IAAI4gB,QACjBA,EACHliB,QAASiC,IACDV,EAAM3Q,MAAMoP,SACZuB,EAAM3Q,MAAMoP,QAAQiC,GAExBof,EAAcY,EAAaC,EAAOrf,SAG1C,SAMtB,CACI1N,EACA+W,EACA2C,EACAsS,EACAK,EACAN,EACAO,EACAxjB,EACAqG,EACA8c,EACAG,EACAG,QCxFE9wB,IACV,MAAMuxB,qBACFA,EADEC,WAEFA,EAAa,WAFXC,eAGFA,EAAiB,YACjBzxB,GACGqoB,EAASqJ,GAAcjvB,GAAS,KACrBvC,MACMW,EAAU,qBACnBuE,MACDusB,OACGC,KAwCjB,OACIrxB,EAACsO,IAAKE,SAvCWzF,IACjBooB,GAAW,GACXG,EAAMvoB,EAAQgf,EAAStP,MAAQsP,EAAStP,MAAM8Y,aAAe,KAAKC,MAC9DnuB,IACI8tB,GAAW,GACX7rB,EACqB,mBACXjC,OACiB,OAAgBA,EAAMugB,QAEvCvgB,EAAMugB,QADN,wBAEN,CACI5gB,KAAM,QACNikB,YAAa,CACTrP,EACqB,mBACXvU,EACAA,GAASA,EAAMugB,QACfvgB,EAAMugB,aACN5c,QAoBAyY,SAZjB1W,IACb,QAAe,GAOf,OANKA,EAAOkoB,KACRQ,EAAOR,GAAc3wB,EAAU,2BAE9ByI,EAAOmoB,KACRO,EAAOP,GAAkB5wB,EAAU,+BAOnCN,EAAC4B,GACGP,GAAI,CACAoK,QAAS,OACTC,cAAe,SACfgmB,UAAW,QACX/lB,WAAY,SACZC,eAAgB,aAChB+lB,gBAAiBX,EACjBY,iBAAkB,YAClBC,eAAgB,UAGpB7xB,EAAC8xB,IAAKzwB,GAAI,CAAE+rB,SAAU,IAAKpY,UAAW,QAClChV,EAAC4B,GACGP,GAAI,CACAmP,OAAQ,MACR/E,QAAS,OACTG,eAAgB,WAGpB5L,EAAC+xB,IACG1wB,GAAI,CACAwM,gBAAiB,mBAGrB7N,EAACI,UAGTJ,EAAC4B,GACGP,GAAI,CACA2T,UAAW,MACXga,aAAc,MACdvjB,QAAS,OACTG,eAAgB,SAChBxK,MAAO,iCAKfpB,EAAC4B,GAAIP,GAAI,CAAE2wB,QAAS,kBAChBhyB,EAAC4B,GAAIP,GAAI,CAAE2T,UAAW,IAClBhV,EAACiyB,IACGC,aACAhkB,aACAZ,KAAM2jB,EACN3tB,MAAOhD,EAAU,oBACjB6C,SAAU2kB,KAGlB9nB,EAAC4B,GAAIP,GAAI,CAAE2T,UAAW,IAClBhV,EAACmyB,IACG7kB,KAAM4jB,EACN5tB,MAAOhD,EAAU,oBACjB0C,KAAK,WACLG,SAAU2kB,MAItB9nB,EAACoyB,IAAY/wB,GAAI,CAAE2wB,QAAS,kBACxBhyB,EAACqN,IACGlM,QAAQ,YACR6B,KAAK,SACL5B,MAAM,UACN+B,SAAU2kB,EACV5Z,cAEC4Z,GACG9nB,EAACwsB,IACGnrB,GAAI,CAAE+V,SAAU,YAChBK,KAAM,GACNiV,UAAW,IAGlB2F,WCnIV5yB,UACf,MAAMwE,QAEFA,EAAU,GACV6K,KAAMwjB,EAHJhvB,MAIFA,EAJEH,SAKFA,KACGoE,GACH9H,GACGuC,EAAMC,GAAWC,GAAS,KAChB+d,KACVsS,EAAeC,GAAoBtwB,EAAS,KAClC8C,EAAmBvF,GAsBpC,OACIO,EAAC4B,oBAAQ,CAAE6J,QAAS,iBA1CF,MAInBlE,KACDA,EAqC4Cub,CAAkBvb,IACxDvH,EAACqN,IACGoK,KAAK,QACL3K,UAAU,aAEVxJ,MAAOA,EACPuL,QArBSiC,IAEjBA,EAAE2hB,iBACFxwB,GAAQ,GACRywB,EAASvpB,QAAU2H,EAAE6hB,eAkBb7gB,MAAO7N,EAAQsuB,GAAejvB,MAC9BH,SAAUA,cAETc,EAAQsuB,yBAAgBzjB,OAAQwjB,GAErCtyB,EAAC4vB,IAAK5tB,KAAMA,EAAM0wB,SAAUA,EAASvpB,QAASvJ,QApBlCue,IACZuU,EAASvpB,SAAWupB,EAASvpB,QAAQypB,SAASzU,EAAM4C,SAGxD9e,GAAQ,KAiBCgC,EAAQkM,IAAI,CAAC4gB,EAAQ1gB,IAClBrQ,EAACC,IACGyR,IAAKqf,EAAOztB,MACZH,SAAU4tB,EAAO5tB,SACjB0vB,SAAUxiB,IAAUkiB,EACpB1jB,QAASsP,IAvCD,EAACA,EAAO9N,KAChCmiB,EAAiBniB,GACjBpO,GAAQ,IAsCY6wB,CAAoB3U,EAAO9N,GAC3B0gB,EAAOliB,SAAWkiB,EAAOliB,QAAQsP,EAAO9N,IAE5CrM,SAAUA,EACV8N,MAAOif,EAAOztB,OAEbytB,EAAOjiB,KACR9O,EAAC4B,GACGC,UAAU,OACVR,GAAI,CAAE0xB,aAAc,SAExB/yB,EAACgzB,IAAW1vB,MAAOytB,EAAOztB,MAAOU,SAAUA,YC3E5CvE,IACnB,MAAMwzB,OAAEA,EAAFnmB,UAAUA,KAAmCvF,GAAS9H,GACtDyzB,OAAEA,EAAFC,UAAUA,EAAY,GAAtBC,WAA0BA,EAAa,GAAvCC,cAA2CA,GAAkBJ,IACpDpgB,OACGqgB,EACb/iB,IAAIzG,QAA0B1C,IAAjB4B,EAAOc,GAAsBd,EAAOc,GAAQA,GACzD8Z,KAAM,GAAE2P,GAEb,OACInzB,EAACkB,oCAA0B,oBAAqB4L,GAAevF,GAC1D+rB,EACAD,GACGrzB,EAACkB,IACGW,UAAU,OACV4J,QAAQ,QACRrK,MAAM,gBACND,QAAQ,WAEPiyB,EACIjjB,IACGzG,GACK,GAAEA,EAAKkc,UAAY,UAChBhd,EAAOc,EAAK6pB,QAAU,SAGjC/P,KAAK,WCAXhY,GAnBA/L,IACf,MAAMoL,cAAEA,EAAgBnD,MAAmBH,GAAS9H,IAC5B+zB,GAAkBjsB,IAClCqB,OAAQ6gB,EAAVrlB,UAAyBA,GAAckjB,GACvCpgB,WAAEA,GAAeyiB,GAAalqB,KACpB2C,EACZ,MAAS6E,OAAQ,IAAKwiB,cAAAA,EAAerlB,UAAAA,EAAW8C,WAAAA,IAChD,CAACuiB,EAAerlB,EAAW8C,IAG/B,OACIlH,EAAC4pB,QACG5pB,EAACmH,GAAa3E,UAASC,MAAOC,GAC1B1C,EAACyzB,oBAASlsB,EAAU+f,EAAqBpgB,MAAAA,SAAAA,EAAY6iB,WAM/B,CAClCzc,KlBxBkB,akByBlBC,kBAAmB,CAAC9N,EAAO+N,IAAWA,EAAOC,MAF9BjC,CAGhB,EAAG3K,MAAAA,KAAYspB,GAAetpB,OCaHpB,IAC1B,MAAMsC,SACFA,EADE+K,UAEFA,EACAjL,UAAW6xB,EAAYC,GAHrBC,iBAIFA,EAJEC,iBAKFA,GAAmB,EALjBlW,KAMFA,EAAOmW,GANLC,QAOFA,EAAUC,GAPR9V,SAQFA,KACG3W,GACH9H,IACa4xB,OACI4C,GAAgB,MACpBjvB,EAAmBvF,IAC7By0B,EAAUC,GAAejyB,EAAS,IAErCgF,YAAYT,KAAEA,IACd9D,EAAWwE,MACDwI,GAAc,IAAKlQ,EAAOgH,KAAAA,KAClCQ,OAAEA,GAAWtE,EAAWwE,MAEN,CAACgX,EAAO1b,KACvBoxB,IACDM,EAAY1xB,GACRyb,GACAA,EACIpO,EACA7I,EACA,CACImtB,OAAQ3xB,EACR4xB,QAASH,EACTI,OAAQH,GAEZhW,OAMS,IACrB7N,EACIqN,EACA,CACIO,SAAUqW,EACVV,iBAAAA,EACAW,IAAKZ,EACLnxB,MAAOyxB,GAEXnyB,GAGR,OACI/B,EAACy0B,4BACc1J,GAAK,cAAeje,IAC3B4nB,GAAsBntB,IAEzBssB,EACG7zB,EAAC0mB,QACG1mB,EAAC2mB,IAAMC,KAAK,KAAKxO,QAASuc,OAG9BA,IAEJ30B,EAACwe,QACDxe,EAAC0zB,OAKIxjB,EAASC,IAAIpO,EAAU,CAAC4mB,EAAKtY,KAC1B,IAAKsY,EACD,YAEJ,QAAgBiM,GAAyBjM,EAAKtY,KAC/BwjB,GACRgB,GACI,GAAEC,EAAaC,YAAYC,IAC5BjN,EAASgN,UAEbb,IAAa7jB,EAEnB,SAAsBsY,GAChBvS,EAAmBuS,EAAK,CACpBsM,OAAQ,UACRjxB,SAAAA,EACAd,OAAAA,EACAT,MAAOoxB,EAAmBmB,EAAU3kB,IAExC,SAGD,IAAZ0jB,EAAoBA,EAAU,UAKvB/zB,EAACk1B,YACI,EAAGnzB,SAAAA,KACxB/B,EAACqsB,OAAatqB,MAEK/B,EAACqX,YAQX7L,GAAO,MAAO,CACvB8B,KAPW,eAQXC,kBAAmB,CAAC9N,EAAO+N,IAAWA,EAAOC,MAFpCjC,CAGV,EAAG3K,MAAAA,OACFs0B,6CAAwD,CACpD/zB,MAAOP,EAAMmL,QAAQ3I,MAAMsK,YAIL,KAAwBpG,KAAWA,KAEvC9H,IACtB,SAAqB21B,GAAc31B,IAzIf,MACpB,QAAiB4xB,OACGwD,GAAU,qBAAsB9M,EAASgN,YAC3CF,GAAU,kBAAmB9M,EAASgN,UAExD,OAAIM,IACmBC,aAGnBC,IACiBD,aAGd,IA6HkBE,GAEzB,OACIx1B,EAACsO,mCAAuBslB,GAAsBwB,GAC1Cp1B,EAACy1B,mCACqB7B,GACd9Q,GAAkBrjB,OAMtCi2B,GAAWtX,IAAMuX,GAEjB,SAA0B,KAkBnBpuB,KACDA,KCjM0B9H,IAC5B,MAAMgqB,cACFA,EACAviB,YAAYylB,OAAEA,EAAS,KACvBhqB,EAAWwE,MACAylB,GAAcntB,GAE7B,OAAKgqB,EAGDzpB,EAAC01B,uBACQ,UACDj2B,YACM2pB,gBACKK,YACJqD,IACPH,UAMhBiJ,GAAiBtK,aAAe,CAC5BuI,kBAAkB,YC1BJ,IACXgC,GACH7pB,QAAS,IACF6pB,GAAa7pB,QAChBC,KAAM,QAEV6pB,WAAY,IACLD,GAAaC,WAChBC,aAAc,CACVzK,aAAc,CACVnqB,QAAS,aAGjB60B,eAAgB,CACZ1K,aAAc,CACVnqB,QAAS,aAGjB80B,UAAW,CACPxoB,KAAM,CACFyoB,YAAa,CACT9e,SAAU,YAItB+e,gBAAiB,CACb1oB,KAAM,CACF2oB,UAAW,CACPC,sBAAuB,CACnBC,eAAgB,CACZC,uBAAwB,CACpBvH,aAAc,8CAU3B,IACZ6G,GACH7pB,QAAS,IACF6pB,GAAa7pB,QAChBC,KAAM,SAEV6pB,WAAY,IACLD,GAAaC,WAChBC,aAAc,CACVzK,aAAc,CACVnqB,QAAS,aAGjB60B,eAAgB,CACZ1K,aAAc,CACVnqB,QAAS,aAGjB80B,UAAW,CACPxoB,KAAM,CACFyoB,YAAa,CACT9e,SAAU,YAItB+e,gBAAiB,CACb1oB,KAAM,CACF2oB,UAAW,CACPC,sBAAuB,CACnBC,eAAgB,CACZC,uBAAwB,CACpBvH,aAAc,0BCtE9C,SAAoBvvB,IAChB,MAAM+2B,eACFA,EADEvvB,OAEFA,EAFEwvB,QAGFA,EAHEC,gBAIFA,GAAkB,KAEfnvB,GACH9H,GACG0D,EAAUwzB,GAAez0B,GAAS,KAC3B00B,GAASrvB,KACR1C,KACTgC,QAAEA,GAAYH,OAEGjC,EACnB0kB,MAAOrY,EAAG7J,EAAQvF,KACgB,gCAGtBi1B,GAAY,GACZH,EAAe1mB,EAAO7I,EAAQvF,EAAIoP,GAAG+lB,QAAQ,KACzCF,GAAY,MAGhBrxB,EAAO,uBAAwB,CAAEtC,KAAM,YAG3CsC,EAAO,mCAAoC,CACvCtC,KAAM,WAIlB,CAAC6D,EAAS2vB,EAAgB1mB,EAAOxK,IAGrC,OACItF,EAACqX,QACIqf,EAAkB12B,EAAC2Q,IAAWtP,GAAI,CAAEwf,GAAI,KAAU,KAClD4V,EAAQtmB,IAAI0L,GACT7b,EAACqN,IACGqE,IAAKmK,EAAOvO,KACZhK,MAAOuY,EAAOvY,MACdH,SAAUA,EACV0L,QAASsa,MAAAA,YACgBrY,EAAG7J,EAAQ4U,EAAOvO,QAG1CuO,EAAO/M,SClD5BgoB,GAAgBC,GAAGljB,KAAKmjB,MAAQ,iBAEhC,SAAmB,IACZF,GACHG,YAAa,cACbC,UAAW,aACX5F,MAAO,CACH5vB,GAAI,KACJy1B,KAAM,QACN/zB,SAAU,wBACVg0B,KAAM,OACNC,MAAO,2BACPC,YACI,gEACJC,uBAAwB,sCACxBC,iBAAkB,mBAClBC,SAAU,YAEdC,IAAK,CACDC,OAAQ,SACRC,WAAY,aACZC,gBAAiB,kBACjBC,cAAe,gBACfC,SAAU,WACVl3B,MAAO,CACHyM,KAAM,QACN0gB,MAAO,QACPgK,KAAM,QAEVC,UAAW,CACPC,QAAS,CACLpmB,MAAO,UACPqmB,SAAU,sBACVC,WAAY,oBAIxBC,WAAY,CACRC,iBAAkB,8CCtC1BC,GAAgBxB,GAAGyB,aAAaC,QAAU,gCAC1CF,GAAgBxB,GAAG2B,OAAOC,aACtB,mDACJJ,GAAgBxB,GAAGljB,KAAKokB,UAAY,SACpCM,GAAgBxB,GAAGljB,KAAKmjB,MAAQ,wBAChCuB,GAAgBxB,GAAGljB,KAAK+kB,OAAS,uBACjCL,GAAgBxB,GAAGljB,KAAKglB,KAAO,UAC/BN,GAAgBxB,GAAGljB,KAAKilB,KAAO,iBAC/BP,GAAgBxB,GAAG2B,OAAOK,KAAO,SACjCR,GAAgBxB,GAAGnT,QAAQoV,aAAe,WAC1CT,GAAgBxB,GAAGkC,MAAMC,KAAKC,cAAgB,gCAC9CZ,GAAgBxB,GAAGkC,MAAMG,MAAMD,cAAgB,+BAE/C,SAAmB,IACZZ,GACHtB,YAAa,eACbC,UAAW,aACX5F,MAAO,CACH5vB,GAAI,SACJy1B,KAAM,mBACN/zB,SAAU,2BACVi0B,MAAO,wBACPD,KAAM,SACNE,YACI,yEACJC,uBACI,4DACJC,iBAAkB,yBAClBC,SAAU,kBAEdC,IAAK,CACDC,OAAQ,WACRC,WAAY,cACZC,gBAAiB,qBACjBC,cAAe,gBACfC,SAAU,WACVl3B,MAAO,CACHyM,KAAM,cACN0gB,MAAO,QACPgK,KAAM,QAEVC,UAAW,CACPC,QAAS,CACLpmB,MAAO,aACPqmB,SAAU,0BACVC,WAAY,qBAIxBC,WAAY,CACRC,iBAAkB,yCCjDL74B,IACjB,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAW+E,GAAmBxI,KACvCoT,OACI+B,KAAK+Z,MAAM/Z,KAAKC,UAAUjM,MAC/BywB,EAAW55B,EAAMqH,QAG/B,OAFAuyB,EAAW55B,EAAMqH,QAAmB,IAATrE,GAAwB,KAATA,GAGrCS,GAAUlD,EAACs5B,oBAAmBvxB,UAAwBsxB,SCL5C55B,IACf,MAAOuC,EAAMC,GAAWC,GAAS,IAC1Bq3B,EAAYC,GAAiBt3B,GAAS,KAC9B2C,MACGlF,KACZmT,MAAEA,EAAFzR,GAASA,GAAO5B,EAqBtB,OAnBAoQ,EAAU,KACF7N,GACmBmnB,WACf,MAAa,KACb,IACIsQ,kBAAyBC,aAAaC,aAAa,CAC/CC,OAAO,EACPC,OAAO,IAEXxV,SAASyV,eAAe,SAASC,UAAYN,EAC/C,MAAOp2B,GACLiC,EAAOjC,EAAMugB,QAAS,CAAE5gB,KAAM,UAC9Bf,GAAQ,KAGhB+3B,IAEL,CAACh4B,IAGAoU,gBAAC5E,OACG4E,gBAACxE,IACGC,OAAQ7P,EACR8lB,SAAU9lB,EACVi4B,SAAS,KACTnoB,MAAM,GACNC,QACIqE,gBAACxU,GAAI6J,QAAQ,OAAOC,cAAc,UAC9B0K,gBAAC/I,GACGlM,QAAQ,WACR+4B,oBACArrB,QAAS,KACL,QAAcwV,SAASyV,eAAe,WAElCzV,SAASyV,eAAe,UAC5BK,EACKC,WAAW,MACXC,UACGT,EACA,EACA,EACAO,EAAO3tB,MACP2tB,EAAOtuB,QAEf2tB,GAAc,IAElBc,UAAWlkB,gBAACmkB,UAEXj6B,EAAU,cAEf8V,yBACI1U,GAAG,QACH8K,MAAM,MACNX,OAAO,MACP2uB,YACAhW,MAAO,CAAEiW,OAAQ,eAErBrkB,uBACI1U,GAAG,oBACH8iB,MAAO,CACHiW,OAAQ,aACRjuB,MAAO,IACPX,OAAQ,IACRmJ,UAAW,IAGfoB,0BAAQ1U,GAAG,SAAS8K,MAAM,MAAMX,OAAO,UAInDmG,UAAWlB,IACHyoB,GAEAlV,SACKyV,eAAe,UACfY,OAAO,SAAUC,GACd,QAActW,SAASyV,eAAe,WAElCzV,SAASyV,eAAehnB,KACV,iBAClB,MAAW,SACP,CAAC6nB,GACE7nB,EAAF,WACD,CACI9P,KAAM,aACN43B,cAAc,UAAWC,YAGjCC,EAAUjhB,MAAMkhB,IAAI7B,GAEpB8B,EAAUC,MAAQH,EAAUG,MAC5BD,EAAUE,cACN,UAAU,SAAU,CAAEC,SAAS,KAGnCvB,EAAMG,UACDqB,YACA5nB,QAAQ6nB,GAASA,EAAMC,QAE5B9B,GAAc,GACdv3B,GAAQ,IACT,eAGfrC,QAAS,KACL45B,GAAc,GACdv3B,GAAQ,MAGhBmU,gBAAC0B,IAAQhG,MAAOxR,EAAU,gBACtB8V,gBAAC/I,GACGhM,GAAIA,EACJwN,QAAS,KACL5M,GAAQ,KAGZmU,gBAACmlB,gBC9GF,CAAC94B,EAAO+4B,IAClB/4B,GAAmB,KAAVA,EAGc,mBACjB,CAAEg5B,IAAM,GAAED,KAAU/4B,KACpBA,qBACM0N,IAAIurB,KAAQD,IAAM,GAAED,KAAUE,cAJ3C,KAUOj8B,UACX,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBhjB,KACxCE,MACHkT,GAAiBpT,KAChBmB,EAAcC,GAASA,EAAMC,YAAYwc,KAAK,QACxD1T,UAAEA,GAAclD,MAChBzC,QACFA,EAAU,GADRd,SAEFA,GAAW,EAFT6E,KAGFA,EAAO,OAHL2zB,OAIFA,GAAS,EAJPH,OAKFA,EALEI,OAMFA,EAAS,GANPC,SAOFA,GAAW,KACRC,GACH/zB,eAEQ6B,IAAYkyB,EAAUh1B,4BAAtBi1B,EAA+BN,OAC9B7yB,EAAU,GAAE4yB,KAAU5yB,EAAOkzB,EAAUh1B,eAAYE,IACpC,IAE5B,OACK9D,IACS,UAAT8E,EACGhI,EAACgQ,IACGgsB,UAAU,MACVrwB,WAAW,aACXC,eAAe,aACfqwB,QACIj8B,EAACwe,IAAQ0d,YAAY,WAAW/6B,QAAQ,SAASg7B,eAGrDn8B,EAACo8B,0BACY,KACLN,WACK,CAAE34B,SAAAA,KAAac,UAChBxB,GAAS45B,GAAW55B,EAAO+4B,eACtBl7B,EAAU,uCAChB,qBACK,CACRg8B,QAAS,UAGbt8B,EAACu8B,IAAWz1B,OAAO,MAAMgL,MAAM,OAEjC0qB,GACEx8B,EAACy8B,IAAWp7B,GAAI,CAAE+L,GAAI,GAAK0F,MAAOgpB,EAAUh1B,UAIpD9G,EAACgQ,IACGgsB,UAAU,MACVrwB,WAAW,aACXC,eAAe,aACfqwB,QACIj8B,EAACwe,IAAQ0d,YAAY,WAAW/6B,QAAQ,SAASg7B,eAGrDn8B,EAAC08B,0BACY,KACLZ,WACK,CAAE34B,SAAAA,KAAac,UAChBxB,GAAS45B,GAAW55B,EAAO+4B,eACtBl7B,EAAU,sCACfs7B,IAER57B,EAAC4B,IAAIP,GAAI,CAAEoK,QAAS,eAAgB8L,GAAI,IACpCvX,EAACgY,IACGnW,UAAW3B,GACXy8B,KAAMA,EACN5b,OAAO,SACPtJ,KAAK,QACL3F,MAAM,eAEN9R,EAAC48B,IAAex7B,MAAM,aAE1BpB,EAACgY,IACG3W,GAAI,CAAEkW,GAAI,GACV1V,UAAW3B,GACXy8B,KAAMA,EACNd,YACA9a,OAAO,SACPtJ,KAAK,QACL3F,MAAM,qBAEN9R,EAAC68B,IAAkBz7B,MAAM,eAIpCu6B,GACG37B,EAACy8B,IAAWp7B,GAAI,CAAE+L,GAAI,GAAK0F,MAAOgpB,EAAUh1B,eCvH/CrH,IACb,MACIsI,gBAAgB1G,GAAEA,KAAOkG,GADvBrE,OAEFA,GACAuf,GAAuBhjB,GAE3B,OACKyD,GACGlD,EAAC88B,oBACOv1B,MACA,IAAKlG,EAAIoK,QAAS,cAAe+E,OAAQ,UCF1ChR,EAAW,CAACC,EAAOC,IAAQM,EAAC8X,qBAAapY,GAASD,QAEpCA,UAC7B,MAAMsD,SAAEA,EAAF1B,GAAYA,EAAZ07B,KAAgBA,EAAhB7e,SAAsBA,KAAa3W,GAAS9H,GAC5C2E,UAAEA,EAAF44B,WAAaA,EAAbC,iBAAyBA,GAAqBC,OACnCjd,EAAO,MAWxB,OATApQ,EAAU,KACDzL,GAEuB,sBACpBrB,EAAS6N,OAAO7H,OAAO,CAACi0B,MAGjC,CAACA,EAAYj6B,EAAUqB,IAGtBpE,EAACm9B,IAAWrrB,iBAAOsrB,EAASj0B,8BAAS1G,QAAS,GAAI8qB,UAAU,MAAM8P,UAC9Dr9B,EAAC4B,GACGP,GACI07B,EACM,CAAEvsB,OAAQ,KAAMnP,GAChB,CACIoK,QAAS,CAAEkV,GAAI,UAAWC,GAAI,eAC9B0c,cAAe,MACf9sB,OAAQ,KACLnP,GAGjBmL,MAAOuwB,EAAO,GAAK,CAAEpc,GAAI,OAAQC,GAAI,SAErC5gB,EAACu9B,uBACQ,WACDR,EAAO,CAAEvwB,MAAO,mBAAsB,IACtCjF,YACM9E,UACNyb,EAAS,CACL6C,OAAQ,CACJte,MAAAA,GAEJa,gBAAO25B,EAAiBxpB,OACpB/J,GAAQA,EAAKhI,KAAOe,GACtB,uBAFK+6B,EAED5X,2BAGE,CAAEwX,SAAAA,YAOrB39B,IACb,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBhjB,KACzC8D,MACXkF,aACFA,EACAg1B,SAAUC,EAFRC,iBAGFA,KACGC,GACH71B,GAEEjB,OAAEA,EAAFyB,UAAUA,GAAc9I,IACXif,GAAYjG,IAC3B,QAAYA,EAAMolB,UACZplB,EAAMolB,UAAUpqB,OAAO/J,GAAQA,EAAKhI,KAAOoF,GAC3C,GACN,SAAW,GAAKg3B,EAAI,GAAK,SAEN7d,EAAO8d,KAEX,OAAfA,GAAuBC,EAAe70B,QAChC60B,EAAe70B,QACf40B,EAEV,MAAcE,EACd,GAAIxqB,EAAQ,CACR,MAAQ1Q,SAAUm7B,KAAiBC,GAAe1qB,EAClD1Q,EAAWm7B,EACXD,EAAcE,EAUlB,OAPAtuB,EAAU,KACa,OAAfkuB,IACAC,EAAe70B,QAAU40B,EACzBv6B,EAAS46B,GAAuBt3B,MAErC,CAAC8N,KAAKC,UAAUkpB,KAEX76B,EA2BJ,KA1BAlD,EAACwR,OACGxR,EAACq+B,IACG91B,UAAWA,EACXzB,OAAQA,EACRgN,QAAS,IACTL,OAAQwqB,EACRx1B,aAAcA,GAEdzI,EAACs+B,oBACOV,YACM76B,aACC,uBACE+D,MAGpB42B,EACG19B,EAAC09B,GACG15B,SAAU25B,EACV31B,KAAK,UACLkgB,UACAE,YAAa,CACT/mB,GAAI,CAAEi8B,cAAe,cAG7B,UC1HO79B,IACnB,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBhjB,GAE1D,OAAQyD,GAAUlD,EAACu+B,GAAgBx2B,OCHpBtI,IACf,MAAMqS,MAAEA,EAAFhL,OAASA,EAAT20B,IAAiBA,GAAQh8B,IAChBoT,GAAiBpT,GAGhC,OAAOO,EAAC+xB,IAAOjgB,MAAOA,EAAO2pB,IAFZ,GAAEA,KAAO7yB,EAAO9B,WCHnBrH,IACd,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBhjB,IACpDqH,OAAEA,EAAFyB,UAAUA,GAAc9I,EAE9B,OAAQyD,EAQJ,KAPAlD,EAACw+B,IAAoB13B,OAAQA,EAAQyB,UAAWA,GAC5CvI,EAACy+B,oBACO12B,cACO,uBACEtI,EAAMqH,eCTlBrH,IACb,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBhjB,GAE1D,OAAQyD,GAAUlD,EAACmyB,GAAkBpqB,OCDrBtI,IAChB,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBhjB,IACpD2E,UAAEA,GAAczB,EAAWwE,KAC3BL,OAAEA,EAAFyB,UAAUA,GAAc9I,EAE9B,OAAQ2E,GAAclB,EAQlB,KAPAlD,EAACq+B,IAAev3B,OAAQA,EAAQyB,UAAWA,GACvCvI,EAAC0+B,oBACO32B,cACO,uBACEtI,EAAMqH,eCZTrH,IACtB,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBhjB,GAE1D,OAAQyD,GAAUlD,EAAC0+B,GAA0B32B,OC2B1BtI,GACnBO,EAAC2+B,IACGC,OAAO,0BACPC,OAAQ,oCAER7+B,EAAC8U,EAAUrV,OAIC,CAAEq/B,OAAQ,WAEXr/B,IACf,MAAMoS,OACFA,EADEzN,UAEFA,EAFE0N,MAGFA,EAHEC,QAIFA,EAJE8sB,OAKFA,EALEE,YAMFA,EANE5nB,WAOFA,EAPEvX,QAQFA,EAREoS,UASFA,EATEgtB,gBAUFA,EAVEC,iBAWFA,EAAmB,IACnBx/B,IACcE,KACXkb,GAAeqkB,GAAmBF,KAEnBv6B,EAClB,CAACqM,EAAG+K,KACA/K,EAAEC,kBACFiB,EAAUlB,EAAG+J,IAEjB,CAACA,EAAa7I,MAGEvN,EAAYqM,IAC5BA,EAAEC,mBACH,IAEH,OACI/Q,EAACiO,IACGjM,KAAM6P,EACNjS,QAASA,EACTiP,QAASswB,EACTlF,SAAS,KACTmF,eAAgBA,GAChBrT,kBAAgB,0BAEhB/rB,EAACmO,IAAYqW,MAAO6a,GAAa39B,GAAG,0BAC/BpB,EAAUwR,EAAO,CAAE8F,EAAG9F,KAAUmtB,KAErCj/B,EAAC+P,IAAcgH,UAAU,GAAOhF,GAChC/R,EAAC0Q,QACG1Q,EAACqN,IAAOlK,SAAUiB,EAAWyK,QAASjP,GAClCI,EAACmX,GAAW9V,GAAI,CAAE0xB,aAAc,WAC/BzyB,EAAUu+B,EAAQ,CAAEjnB,EAAGinB,KAE5B7+B,EAACqN,IACGlK,SAAUiB,EACVyK,QAASiC,GAAKwuB,EAAcxuB,EAAG,OAK/BohB,cAEAlyB,EAAC++B,GAAY19B,GAAI,CAAE0xB,aAAc,WAChCzyB,EAAU,yBAO/Bi/B,GAAW5wB,UAAY,CACnBkwB,OAAQjwB,GAAUyJ,OAClBmnB,QAAS5wB,GAAU6wB,OACnBC,QAAS9wB,GAAUyJ,OACnBsnB,aAAc/wB,GAAUyJ,OACxB0mB,YAAanwB,GAAUgxB,YACvBzoB,WAAYvI,GAAUgxB,YACtB7tB,QAASnD,GAAUixB,KAAKC,WACxBjuB,OAAQjD,GAAU2J,KAClBnU,UAAWwK,GAAU2J,KACrB3Y,QAASgP,GAAUqb,KAAK6V,WACxB9tB,UAAWpD,GAAUqb,KAAK6V,WAC1BhuB,MAAOlD,GAAUyJ,OAAOynB,YAG5BP,GAAWjU,aAAe,CACtBuT,OAAQ,mBACRW,QAAS,GACTG,aAAc,UACdZ,YAAagB,GACb5oB,WAAY6oB,GACZnuB,QAAQ,GCrHZ,SAAoB,IAAM7R,EAACwR,WACN,CACjByuB,UAAW,GACXC,KAAK,EACLC,MAAM,MAGKzE,IACNA,GAAKA,MAAAA,GAAAA,EAAGwE,IACF,QACAxE,MAAAA,GAAAA,EAAGyE,MAA+B,IAAvBzE,EAAEuE,UAAUv1B,OACvB,UAGH,cAAagxB,EAAEuE,UAAUv1B,aAGvBgxB,QAKWj8B,IACrB,MAAMg+B,SAAEA,EAAFE,iBAAYA,EAAZ72B,OAA8BA,EAA9BzF,GAAsCA,KAAOkG,GAAS9H,GACrDuC,EAAMC,GAAWC,GAAS,IAC3BgB,OACFA,EACA6E,gBAAgB5E,SAAEA,EAAFG,MAAYA,EAAZ4a,SAAmBA,IACnCuE,GAAuBhjB,KACdiH,KAEbmJ,EAAU,KAENuwB,KACD,IAEH,QAAoB37B,EAAY,KAC5BxC,GAAQ,IACT,CAACA,MAqBgB6O,IAChBlK,EAAKoD,SAASlD,EAAQ,CAClBm5B,UAAW,GACXC,KAAK,EACLC,MAAM,IAEVjiB,EAASpN,IAGb,OAAQ5N,EAqEJ,KApEAlD,SACIA,EAAC4B,GACG6J,QAAQ,OACRE,WAAW,SACXtK,GAAI,IAAKA,EAAIoK,QAAS,cAAe+E,OAAQ,IAE7CxQ,EAACiyB,+BACiB1hB,IACVhJ,UACIT,QACDxD,oBAEAqrB,UACC0R,eACI,aACA,CACRC,aACItgC,SACIA,EAACgY,IACGnJ,QAtCViC,IAClBlK,EAAKoD,SAASlD,EAAQ,CAClBm5B,UAAW,GACXC,KAAK,EACLC,MAAM,IAEVjiB,EAASpN,IAiCmB3N,SAAUA,EACV4iB,aAAW,UACXtO,KAAK,QACL3F,MAAM,WAEN9R,EAACugC,UAELvgC,EAACgY,IACGnJ,QAASuxB,EACTj9B,SAAUA,EACV4iB,aAAW,QACXtO,KAAK,QACL3F,MAAM,SAEN9R,EAACwgC,UAELxgC,EAACgY,IACGnJ,QAASiC,GAAK7O,GAAQ,GACtBkB,SAAUA,EACV4iB,aAAW,YACXtO,KAAK,QACL3F,MAAM,aAEN9R,EAACygC,gBAOzBzgC,EAAC0gC,IACG7uB,OAAQ7P,EACR8P,MAAQ,gBAAexO,EACvB07B,gBAAiBrB,EACjB5rB,QAASqE,EAAoBqnB,EAAU,CACnCrjB,kBAAmBpa,EAAC2gC,SACpBhZ,WAAW,EACXrN,SAAS,EACT8V,UAAU,EACVwQ,QAAS5gC,EAAC6gC,SACV1mB,eAAe,EACfS,6BAA6B,EAC7B5W,SAAU25B,IAEd3rB,UA7FU,CAAClB,EAAG+J,KACtB5Y,GAAQ,GACR2E,EAAKoD,SAASlD,EAAQ,CAClBm5B,UAAWplB,EACXqlB,KAAK,EACLC,MAAM,IAEVjiB,EAASpN,IAuFDlR,QAAS2nB,SC9HH9nB,GAClBO,EAAC0qB,oBACOjrB,cACO,YACD,UACD,UACF,QACD,iCAGNO,EAAC8gC,IAAS1mB,kBAAmBpa,gBACzBA,EAAC8I,IAAUhC,OAAO,SAASqN,YAAS7Q,MAAM,WAC1CtD,EAAC8I,IAAUhC,OAAO,YAAYqN,YAAS7Q,MAAM,aAC7CtD,EAAC8I,IAAUhC,OAAO,YAAYqN,YAAS7Q,MAAM,gBAKnC,CAAEy9B,SAAU,gBAEbthC,IACjB,MAAOuhC,EAAQC,GAAa7qB,EAAe8qB,MACtBh9B,MAELO,EACZqM,IACImwB,EAAU,CAAEF,SAAUjwB,EAAE+uB,KAAKnuB,OAEjC,CAACuvB,MAGkBx8B,EACnB08B,KAISC,cAAc,WAAY,CAAEC,SAHhBF,EAASA,EAAOG,SAAS5/B,GAAK,KAI1C6/B,KAAKC,GAAYA,EAASn8B,MAC1BmsB,MAAM,KACH,gBAAgB,wBAG5B,CAACiQ,IAGL,OACIzhC,EAAC4B,GAAI6J,QAAQ,OAAOnK,KAAM,EAAGqK,WAAW,aAAaE,OAAO,QACxD7L,EAAC4B,GAAI8/B,SAAU,GACX1hC,EAAC2hC,IACGjgC,GAAG,wBACHkgC,cAAc,QACdC,UAAU,GACVC,YAAajzB,EACbkzB,eAAgBA,KAGxB/hC,EAAC4B,GAAI8/B,SAAU,GACX1hC,EAACgiC,IAAch+B,SAAS,WAAWyP,OAAQutB,UAyBpCvhC,GACnBO,EAAC2+B,IACGC,OAAO,0BACPC,OAAQ,oCAER7+B,EAAC8U,EAAUrV,OAIC,CAAEq/B,OAAQ,WAEHr/B,IACvB,MAAMoS,OACFA,EADEzN,UAEFA,EAFE0N,MAGFA,EAHE+sB,OAIFA,EAJEE,YAKFA,EALE5nB,WAMFA,EANEvX,QAOFA,EAPEoS,UAQFA,EAREitB,iBASFA,EAAmB,IACnBx/B,IACcE,MAEI8E,EAClB,CAACqM,EAAG+K,KACA/K,EAAEC,kBACFiB,EAAUlB,EAAG+K,IAEjB,CAAC7J,MAGevN,EAAYqM,IAC5BA,EAAEC,mBACH,IAEH,OACI/Q,EAACiO,IACGjM,KAAM6P,EACNjS,QAASA,EACTiP,QAASswB,EACTjxB,aACA+rB,SAAS,KACTmF,eAAgBA,GAChBrT,kBAAgB,0BAEhB/rB,EAACmO,IAAYqW,MAAO6a,GAAa39B,GAAG,0BAC/BpB,EAAUwR,EAAO,CAAE8F,EAAG9F,KAAUmtB,KAErCj/B,EAAC+P,IAAcgH,UAAU,GACrB/W,EAACiiC,UAELjiC,EAAC0Q,QACG1Q,EAACqN,IAAOlK,SAAUiB,EAAWyK,QAASjP,GAClCI,EAACmX,GAAW9V,GAAI,CAAE0xB,aAAc,WAC/BzyB,EAAUu+B,EAAQ,CAAEjnB,EAAGinB,KAE5B7+B,EAACqN,IACGlK,SAAUiB,EACVyK,QAASiC,GAAKwuB,EAAcxuB,EAAG,OAK/BohB,cAEAlyB,EAAC++B,GAAY19B,GAAI,CAAE0xB,aAAc,WAChCzyB,EAAU,yBAO/B4hC,GAAmBvzB,UAAY,CAC3BkwB,OAAQjwB,GAAUyJ,OAClBmnB,QAAS5wB,GAAU6wB,OACnBC,QAAS9wB,GAAUyJ,OACnBsnB,aAAc/wB,GAAUyJ,OACxB0mB,YAAanwB,GAAUgxB,YACvBzoB,WAAYvI,GAAUgxB,YACtB/tB,OAAQjD,GAAU2J,KAClBnU,UAAWwK,GAAU2J,KACrB3Y,QAASgP,GAAUqb,KAAK6V,WACxB9tB,UAAWpD,GAAUqb,KAAK6V,WAC1BhuB,MAAOlD,GAAUyJ,OAAOynB,YAG5BoC,GAAmB5W,aAAe,CAC9BuT,OAAQ,mBACRW,QAAS,GACTG,aAAc,UACdZ,YAAagB,GACb5oB,WAAY6oB,GACZnuB,QAAQ,GCxLZ,SAAqB,CACjBouB,UAAW,GACXC,KAAK,EACLC,MAAM,MAGKzE,GACPxiB,OAAOwiB,KAAOA,EACD,OAAK,UAAY,iBACtBA,GAAKA,MAAAA,GAAAA,EAAGwE,IACT,QACAxE,MAAAA,GAAAA,EAAGyE,MAA+B,IAAvBzE,EAAEuE,UAAUv1B,OACvB,UAGH,cAAagxB,EAAEuE,UAAUv1B,aAGvBgxB,QAKDj8B,IACT,MAAM0iC,UAGFA,GAAY,EAHVC,SAIFA,GAAW,EAJTt7B,OAKFA,EALEzF,GAMFA,EACA6c,SAAUmB,KACP9X,GACH9H,GACGob,GAAeqkB,GAAmB,aAClCl9B,EAAMC,GAAWC,GAAS,KACpBwE,MACPO,OAAEA,EAAFC,WAAUA,EAAa,IAAOvE,EAAWwE,MAC/BxE,EAAWqL,KACrB9K,OACFA,EACA6E,gBAAgB5E,SAAEA,EAAFG,MAAYA,EAAQ,iBACpCmf,GAAuBhjB,IACnB2H,CAACN,GAASO,EAAe,GAA3BZ,KAA+BA,GAASS,IAChCyI,GAAc,IAAKlQ,EAAOgH,KAAAA,EAAME,QAAAA,WAEhBK,IAA1BK,EAAa6W,SACPmB,EACAhY,EAAa6W,SAEvBrO,EAAU,KAENjJ,EAAKoD,SAASlD,EAAQ,CAClBm5B,UAAW,GACXC,KAAK,EACLC,MAAM,KAEX,IAEH,QAAoB17B,EAAY,KAC5BxC,GAAQ,IACT,CAACA,IA8BJ,OAAQiB,EA8DJ,KA7DAlD,SACIA,EAAC4B,GACG6J,QAAQ,OACRE,WAAW,SACXtK,GAAI,IAAKA,EAAIoK,QAAS,cAAe+E,OAAQ,IAE7CxQ,EAACiyB,+BACiB1hB,IACVhJ,UACIT,QACDxD,oBAEAqrB,UACC0R,eACI,aACA,CACRC,aACItgC,SACKmiC,GACGniC,EAACgY,IACGnJ,QAvCdiC,IAClBlK,EAAKoD,SAASlD,EAAQ,CAClBm5B,UAAW,GACXC,KAAK,EACLC,MAAM,IAEVjiB,GAAYA,EAASpO,EAAO7I,EAAQ6J,IAkCJ3N,SAAUA,EACV4iB,aAAW,UACXtO,KAAK,QACL3F,MAAM,WAEN9R,EAACugC,UAGR6B,GACGpiC,EAACgY,IACGnJ,QAzChBiC,IAChBlK,EAAKoD,SAASlD,EAAQ,CAClBm5B,UAAW,GACXC,KAAK,EACLC,MAAM,IAEVjiB,GAAYA,EAASpO,EAAO7I,EAAQ6J,IAoCJ3N,SAAUA,EACV4iB,aAAW,QACXtO,KAAK,QACL3F,MAAM,SAEN9R,EAACwgC,UAGTxgC,EAACgY,IACGnJ,QAASiC,GAAK7O,GAAQ,GACtBkB,SAAUA,EACV4iB,aAAW,YACXtO,KAAK,QACL3F,MAAM,aAEN9R,EAACygC,gBAOzBzgC,EAACkiC,IACGrwB,OAAQ7P,EACR8P,MAAQ,gBAAexO,EACvB0O,UAtFU,CAAClB,EAAG+K,KACtB5Z,GAAQ,GACR2E,EAAKoD,SAASlD,EAAQ,CAClBm5B,UAAWplB,EACXqlB,KAAK,EACLC,MAAM,IAEVjiB,GAAYA,EAASpO,EAAO7I,EAAQ6J,IAgF5BlR,QAAS2nB,SChKR9nB,IACb,MAAMsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBhjB,GAE1D,OAAQyD,GAAUlD,EAACiyB,gCAAwBlqB,QCD/BtI,IACZ,MAAMuI,KAAEA,KAAST,GAAS9H,GACpBsI,eAAEA,EAAF7E,OAAkBA,GAAWuf,GAAuBlb,KAC7Cb,KAEbmJ,EAAU,KACF9H,EAAetF,OACfmE,EAAKoD,SAASvK,EAAMqH,OAAQiB,EAAetF,SAInD,QAAiB,IACVsF,GAGP,OAAQ7E,EAYJ,KAXS,MAAT8E,GAAyB,MAATA,EACZhI,EAACqiC,GAAgBl6B,GACR,MAATH,EACAhI,EAACsiC,GAAcn6B,GACN,MAATH,EACAhI,EAACuiC,GAAkBp6B,GAEnBnI,EAACiyB,GADQ,MAATjqB,mBACeG,QAAe,SAEfA,OCzBT1I,IACd,MAAMqH,OAAEA,EAAFxD,MAAUA,EAAVjC,GAAiBA,GAAO5B,GACxByD,OAAEA,GAAWuf,GAAuBhjB,GAE1C,OAAQyD,EAyBJ,KAxBAlD,EAAC4B,GACGP,GAAI,IACGA,EACHoK,QAAS,cACTE,WAAY,aACZ62B,WAAY,CAAE5hB,GAAI,GAClBoO,cAAe,EACfxiB,MAAO,CAAEmU,GAAI,OAAQC,GAAI,sBAG7B5gB,EAACiyB,oBACOxyB,SACE,UACEqH,KACJ,CAAExF,KAAM,EAAG0T,UAAW,MAE9BhV,EAACyiC,oBACOhjC,UACIqH,QACDxD,aAEH,CAAEhC,KAAM"}