@judo/components 0.4.1 → 0.4.2
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":"components.cjs","sources":["../../src/dialog/ConfirmationDialog.tsx","../../../components-api/dist/esm/components-api.mjs","../../../utilities/dist/esm/utilities.mjs","../../../theme/dist/esm/theme.mjs","../../../data-api-common/dist/esm/data-api-common.mjs","../../src/DropdownButton.tsx","../../src/TrinaryLogicCombobox.tsx","../../src/dialog/FilterDialog.tsx","../../src/dialog/PageDialog.tsx","../../src/CustomTablePagination.tsx","../../src/dialog/hooks.tsx","../../src/dialog/RangeDialog.tsx","../../src/table/table-row-actions.tsx","../../src/AggregationInput.tsx","../../src/CustomBreadcrumb.tsx","../../src/MenuTree.tsx","../../src/dialog/DialogProvider.tsx","../../src/Hero.tsx","../../src/Logo.tsx","../../src/PageHeader.tsx"],"sourcesContent":["import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { useEffect, useRef } from 'react';\nimport type { ConfirmationDialogProps } from '@judo/components-api';\n\nexport const ConfirmationDialog = ({\n confirmationMessage,\n title,\n resolve,\n open,\n handleClose,\n}: ConfirmationDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const cancel = () => {\n handleClose();\n resolve(false);\n };\n\n const ok = () => {\n handleClose();\n resolve(true);\n };\n\n return (\n <Dialog open={open} onClose={handleClose} scroll=\"paper\" fullWidth={true} maxWidth={'xs'}>\n {title && <DialogTitle id=\"scroll-dialog-title\">{title}</DialogTitle>}\n <DialogContent dividers={!!title}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n {confirmationMessage}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={cancel}>\n No\n </Button>\n <Button variant=\"text\" onClick={ok}>\n Yes\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","const TRINARY_LOGIC = new Map([\n [null, 'Unknown'],\n [true, 'Yes'],\n [false, 'No'],\n]);\n\nvar FilterType;\n(function (FilterType) {\n FilterType[FilterType[\"boolean\"] = 0] = \"boolean\";\n FilterType[FilterType[\"numeric\"] = 1] = \"numeric\";\n FilterType[FilterType[\"string\"] = 2] = \"string\";\n FilterType[FilterType[\"enumeration\"] = 3] = \"enumeration\";\n FilterType[FilterType[\"date\"] = 4] = \"date\";\n FilterType[FilterType[\"dateTime\"] = 5] = \"dateTime\";\n // time,\n FilterType[FilterType[\"trinaryLogic\"] = 6] = \"trinaryLogic\";\n})(FilterType || (FilterType = {}));\n\nexport { FilterType, TRINARY_LOGIC };\n","const e=e=>null!=e,t=e=>e?e.toISOString().substring(0,10):e,r=(t,r,s)=>{if(!t||\"boolean\"!=typeof t.isAxiosError||!0!==t.isAxiosError)return void a(r);const n=t.response;if(e(n))if(n?.status)if(422===n?.status)r(o(t.response?.data).message,{variant:\"error\",preventDuplicate:!0,persist:!0});else{if(400===n?.status)return i(n.data,r,s);r(o(n?.data).message,{variant:\"error\",preventDuplicate:!0,persist:!0})}else a(r);else a(r)},i=(t,r,i)=>{if(e(t[0].location)){if(r(\"Please make sure all fields are filled in correctly.\",{variant:\"error\",preventDuplicate:!0,persist:!i?.duration,autoHideDuration:i?.duration??void 0}),void 0!==i?.setValidation){let e=new Map;t.forEach((t=>e.set(t.location,t.code))),i?.setValidation(e)}}else r(t[0].code,{variant:\"error\",preventDuplicate:!0,persist:!i?.duration,autoHideDuration:i?.duration??void 0})},a=e=>{e(\"Something went wrong. Please contact with the system admins.\",{variant:\"error\",preventDuplicate:!0,persist:!0})},o=e=>({message:e.code}),s=(e,t)=>{if(e.some((e=>e.filterOption.attributeName===t)))return e.filter((e=>e.filterOption.attributeName===t&&e.filterBy.value)).map((e=>({value:e.filterBy.value,operator:e.filterBy.operator})))},n=(e,...t)=>{let r={};for(const i of t)r[i]=s(e,i);return r};export{t as dateToJudoDateString,r as errorHandling,e as exists,n as mapAllFiltersToQueryCustomizerProperties,s as mapFiltersToQueryCustomizerProperty};\n//# sourceMappingURL=utilities.mjs.map\n","import{createTheme as e,alpha as o}from\"@mui/material\";const i={marginTop:8,marginBottom:8,display:\"flex\",flexDirection:\"column\",alignItems:\"center\"},t=e({palette:{mode:\"light\",primary:{main:\"#3C4166FF\"},secondary:{main:\"#E7501DFF\"},text:{primary:\"#17191DFF\",secondary:\"#434448FF\"},background:{default:\"#FAFAFAFF\"},subtitleColor:{main:\"#8c8c8c\"}},typography:{h5:{fontWeight:500,fontSize:26,letterSpacing:.5}},shape:{borderRadius:8},components:{MuiTab:{defaultProps:{disableRipple:!0}}},mixins:{toolbar:{minHeight:48}}}),r={...t,components:{MuiAppBar:{styleOverrides:{colorPrimary:{backgroundColor:t.palette.background.default}}},MuiButton:{defaultProps:{variant:\"contained\",size:\"small\"},styleOverrides:{root:{textTransform:\"none\",borderRadius:\"20px 20px 20px 20px\",paddingLeft:15,paddingRight:15},contained:{boxShadow:\"none\",\"&:active\":{boxShadow:\"none\"}},outlined:{border:\"2px solid\",fontWeight:\"bold\",\"&:hover\":{border:\"2px solid\",background:o(t.palette.primary.main,.15)}}}},MuiInputLabel:{styleOverrides:{root:{color:t.palette.subtitleColor.main,fontWeight:500,fontSize:16,\"&.Mui-focused\":{color:t.palette.subtitleColor.main}}}},MuiFilledInput:{styleOverrides:{input:{\"&:-webkit-autofill\":{WebkitBackgroundClip:\"text !important\"}},root:{background:\"inherit\",\"&.Mui-focused\":{background:\"inherit\"},\"&:hover:not(.Mui-disabled):not(.Mui-focused)\":{background:o(t.palette.secondary.main,.1)},\"&:hover:not(.Mui-disabled):before\":{borderBottom:\"none\"},\"&.Mui-focused .MuiInputAdornment-root .MuiSvgIcon-root\":{color:t.palette.secondary.main}}}},MuiTextField:{defaultProps:{fullWidth:!0,variant:\"filled\",color:\"secondary\"},styleOverrides:{root:{background:\"white\",\"& .MuiFilledInput-underline:before\":{borderBottom:\"none\"},\"&.Mui-readOnly:not(.Mui-disabled):not(.Mui-focused)\":{borderBottom:`1px solid ${o(t.palette.primary.main,.2)}`,background:\"transparent\"},\"&:not(.Mui-readOnly):not(.Mui-disabled)\":{boxShadow:\"0px 0px 8px 2px rgba(0,0,0,0.05)\",borderRadius:\"8px 8px 0 0\"}}}},MuiSelect:{styleOverrides:{filled:{\"&:focus\":{backgroundColor:\"white\"}}}},MuiDataGrid:{styleOverrides:{root:{border:\"none\"},toolbarContainer:{padding:\"8px 8px 4px 8px\"}}},MuiPaper:{styleOverrides:{rounded:{boxShadow:\"0px 0px 8px 1px rgba(0,0,0,0.05)\",borderRadius:16,padding:8}}},MuiDrawer:{styleOverrides:{paper:{border:\"none\",boxShadow:\"0px 0px 8px 1px rgba(0,0,0,0.05)\"}}},MuiTabs:{styleOverrides:{root:{marginLeft:t.spacing(1)},indicator:{height:3,borderTopLeftRadius:3,borderTopRightRadius:3,backgroundColor:t.palette.common.white}}},MuiTab:{styleOverrides:{root:{textTransform:\"none\",margin:\"0 16px\",minWidth:0,padding:0,[t.breakpoints.up(\"md\")]:{padding:0,minWidth:0}}}},MuiIconButton:{styleOverrides:{root:{color:t.palette.secondary.main,padding:t.spacing(1)}}},MuiTooltip:{styleOverrides:{tooltip:{borderRadius:4}}},MuiDivider:{styleOverrides:{root:{backgroundColor:\"rgb(255,255,255,0.15)\"},middle:{marginTop:8,marginBottom:8}}},MuiListItemButton:{defaultProps:{disableTouchRipple:!0}},MuiListItemText:{styleOverrides:{primary:{fontSize:14,fontWeight:t.typography.fontWeightMedium}}},MuiListItemIcon:{styleOverrides:{root:{color:\"inherit\",minWidth:\"auto\",marginRight:t.spacing(2),\"& svg\":{fontSize:20}}}},MuiAvatar:{styleOverrides:{root:{width:32,height:32}}},MuiCard:{styleOverrides:{root:{width:\"100%\",length:\"100%\",padding:10}}}}};export{i as mainContainerPadding,r as theme,t as themeBase};\n//# sourceMappingURL=theme.mjs.map\n","var a,e,l,r;!function(a){a.equals=\"equals\"}(a||(a={})),function(a){a.equals=\"equals\",a.notEquals=\"notEquals\"}(e||(e={})),function(a){a.lessThan=\"lessThan\",a.greaterThan=\"greaterThan\",a.lessOrEqual=\"lessOrEqual\",a.greaterOrEqual=\"greaterOrEqual\",a.equal=\"equal\",a.notEqual=\"notEqual\"}(l||(l={})),function(a){a.lessThan=\"lessThan\",a.greaterThan=\"greaterThan\",a.lessOrEqual=\"lessOrEqual\",a.greaterOrEqual=\"greaterOrEqual\",a.equal=\"equal\",a.notEqual=\"notEqual\",a.matches=\"matches\",a.like=\"like\"}(r||(r={}));export{a as _BooleanOperation,e as _EnumerationOperation,l as _NumericOperation,r as _StringOperation};\n//# sourceMappingURL=data-api-common.mjs.map\n","import { Button, ClickAwayListener, Grow, MenuItem, MenuList, Paper, Popper } from '@mui/material';\nimport { useState, useRef, useEffect } from 'react';\nimport type { ReactNode, KeyboardEvent, SyntheticEvent } from 'react';\nimport { KeyboardArrowDown } from '@mui/icons-material';\n\ninterface DropdownMenuItem {\n disabled?: boolean;\n visible?: boolean;\n label?: string;\n onClick: () => void;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n}\n\ninterface DropdownButtonProps {\n children?: ReactNode;\n id?: string | undefined;\n menuItems: DropdownMenuItem[];\n disabled?: boolean;\n showDropdownIcon?: boolean;\n fullWidth?: boolean;\n variant?: 'text' | 'outlined' | 'contained' | undefined;\n}\n\nexport function DropdownButton({\n children,\n id,\n menuItems,\n disabled = false,\n showDropdownIcon = true,\n fullWidth = false,\n variant = 'contained',\n}: DropdownButtonProps) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event: Event | SyntheticEvent) => {\n if (anchorRef.current && anchorRef.current.contains(event.target as HTMLElement)) {\n return;\n }\n\n setOpen(false);\n };\n\n function handleListKeyDown(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n event.preventDefault();\n setOpen(false);\n } else if (event.key === 'Escape') {\n setOpen(false);\n }\n }\n\n // return focus to the button when we transitioned from !open -> open\n const prevOpen = useRef(open);\n useEffect(() => {\n if (prevOpen.current && !open) {\n anchorRef.current!.focus();\n }\n\n prevOpen.current = open;\n }, [open]);\n\n return (\n <>\n <Button\n ref={anchorRef}\n id={id}\n onClick={handleToggle}\n endIcon={showDropdownIcon && <KeyboardArrowDown />}\n disabled={disabled}\n fullWidth={fullWidth}\n variant={variant}\n >\n {children}\n </Button>\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n placement=\"bottom\"\n transition\n style={{ zIndex: 1400, minWidth: anchorRef.current?.scrollWidth }}\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin: placement === 'bottom-start' ? 'left top' : 'left bottom',\n }}\n >\n <Paper>\n <ClickAwayListener onClickAway={handleClose}>\n <MenuList autoFocusItem={open} onKeyDown={handleListKeyDown}>\n {menuItems\n .filter((menuItem) => menuItem.visible ?? true)\n .map((menuItem, index) => {\n return (\n <MenuItem\n id={menuItem.label ?? '' + index}\n disabled={menuItem.disabled ?? false}\n onClick={(event) => {\n handleClose(event);\n menuItem.onClick();\n }}\n >\n {menuItem.startIcon}\n {menuItem.label}\n {menuItem.endIcon}\n </MenuItem>\n );\n })}\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </>\n );\n}\n","import { CheckBoxOutlined } from '@mui/icons-material';\nimport { TextField, InputAdornment, MenuItem } from '@mui/material';\nimport type { ChangeEvent } from 'react';\nimport { TRINARY_LOGIC } from '@judo/components-api';\n\ninterface TrinaryLogicProps {\n readOnly?: boolean;\n value?: boolean | null;\n id?: string;\n label: string;\n name?: string;\n error?: boolean | undefined;\n helperText?: string | undefined;\n onChange?: (value: boolean | null) => void;\n}\n\nconst TrinaryLogicCombobox = ({\n readOnly = false,\n value = null,\n id,\n label,\n name,\n error,\n helperText,\n onChange,\n}: TrinaryLogicProps) => {\n const onChangeHandler = onChange\n ? (event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n const index = Array.from(TRINARY_LOGIC.values()).indexOf(event.target.value);\n const keysArray = Array.from(TRINARY_LOGIC.keys());\n onChange(keysArray[index]);\n }\n : undefined;\n\n return (\n <TextField\n name={name}\n id={id}\n label={label}\n select\n value={TRINARY_LOGIC.get(value)}\n onChange={onChangeHandler}\n className={readOnly ? 'Mui-readOnly' : undefined}\n error={error}\n helperText={helperText}\n InputProps={{\n readOnly: readOnly,\n startAdornment: (\n <InputAdornment position=\"start\">\n <CheckBoxOutlined />\n </InputAdornment>\n ),\n }}\n >\n {Array.from(TRINARY_LOGIC.keys()).map((key) => (\n <MenuItem key={TRINARY_LOGIC.get(key)} value={TRINARY_LOGIC.get(key)}>\n {TRINARY_LOGIC.get(key)}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nexport default TrinaryLogicCombobox;\n","import { mdiCalendarClock, mdiCalendarMonth, mdiFormatTextVariant, mdiNumeric } from '@mdi/js';\nimport Icon from '@mdi/react';\nimport { Close } from '@mui/icons-material';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n Slide,\n Box,\n Container,\n Grid,\n TextField,\n MenuItem,\n Checkbox,\n FormControlLabel,\n InputAdornment,\n IconButton,\n Typography,\n} from '@mui/material';\nimport type { TransitionProps } from '@mui/material/transitions';\nimport { DatePicker, DateTimePicker } from '@mui/x-date-pickers';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport type { ChangeEvent, ReactElement, Ref } from 'react';\nimport type {\n Filter,\n FilterDialogProps,\n FilterInputProps,\n FilterOperatorProps,\n FilterProps,\n Operation,\n} from '@judo/components-api';\nimport { FilterType } from '@judo/components-api';\nimport { dateToJudoDateString, exists } from '@judo/utilities';\nimport { mainContainerPadding } from '@judo/theme';\nimport { _BooleanOperation, _EnumerationOperation, _NumericOperation, _StringOperation } from '@judo/data-api-common';\nimport { DropdownButton } from '../DropdownButton';\nimport TrinaryLogicCombobox from '../TrinaryLogicCombobox';\n\nconst getDefaultOperator = (filterType: FilterType) => {\n switch (filterType) {\n case FilterType.boolean:\n return _BooleanOperation['equals'];\n case FilterType.date:\n return _NumericOperation['equal'];\n case FilterType.dateTime:\n return _NumericOperation['equal'];\n // case FilterType.time:\n // return _NumericOperation['equal'];\n case FilterType.enumeration:\n return _EnumerationOperation['equals'];\n case FilterType.numeric:\n return _NumericOperation['equal'];\n case FilterType.string:\n return _StringOperation['equal'];\n case FilterType.trinaryLogic:\n return _BooleanOperation['equals'];\n }\n};\n\nconst getOperationEnumValue = (filter: Filter, operator: string) => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return _BooleanOperation[operator as keyof typeof _BooleanOperation];\n case FilterType.date:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.dateTime:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n // case FilterType.time:\n // return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.enumeration:\n return _EnumerationOperation[operator as keyof typeof _BooleanOperation];\n case FilterType.numeric:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.string:\n return _StringOperation[operator as keyof typeof _StringOperation];\n case FilterType.trinaryLogic:\n return _BooleanOperation[operator as keyof typeof _BooleanOperation];\n }\n};\n\nconst getOperatorsByFilter = (filter: Filter): string[] => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return Object.values(_BooleanOperation);\n case FilterType.date:\n return Object.values(_NumericOperation);\n case FilterType.dateTime:\n return Object.values(_NumericOperation);\n // case FilterType.time:\n // return Object.values(_NumericOperation);\n case FilterType.enumeration:\n return Object.values(_EnumerationOperation);\n case FilterType.numeric:\n return Object.values(_NumericOperation);\n case FilterType.string:\n return Object.values(_StringOperation);\n case FilterType.trinaryLogic:\n return Object.values(_BooleanOperation);\n }\n};\n\nconst FilterOperator = ({ filter, setFilterOperator }: FilterOperatorProps) => {\n const onChangeHandler = (event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n setFilterOperator(filter, getOperationEnumValue(filter, event.target.value));\n };\n\n return (\n <TextField\n name={'operation'}\n id={'operation'}\n label={'Operation'}\n select\n value={filter.filterBy.operator}\n onChange={onChangeHandler}\n >\n {getOperatorsByFilter(filter).map((item) => (\n <MenuItem key={item} value={item}>\n {/* TODO: do not forget localization here*/}\n {item}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nconst FilterInput = ({ filter, setFilterValue }: FilterInputProps) => {\n if (filter.filterOption.filterType === FilterType.enumeration && !exists(filter.filterOption.enumValues)) {\n throw new Error(`Missing enumValues from FilterOptions of ${filter.filterOption.attributeName}`);\n }\n\n return (\n <>\n {(() => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, !!event.target.value)}\n />\n }\n label={filter.filterOption.attributeName}\n />\n );\n case FilterType.date:\n return (\n <DatePicker\n renderInput={(props) => <TextField {...props} />}\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value ?? null}\n onChange={(newValue) => setFilterValue(filter, dateToJudoDateString(newValue))}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiCalendarMonth} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.dateTime:\n return (\n <DateTimePicker\n renderInput={(props) => <TextField {...props} />}\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value ?? null}\n onChange={(newValue) => setFilterValue(filter, newValue)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiCalendarClock} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n // case FilterType.time:\n // return (\n // <TextField\n // label={filter.filterOption.attributeName}\n // value={filter.filterBy.value}\n // onChange={(event) => setFilterValue(filter, event.target.value)}\n // InputProps={{\n // startAdornment: (\n // <InputAdornment position=\"start\">\n // <Icon path={mdiClockOutline} size={1} />\n // </InputAdornment>\n // ),\n // }}\n // />\n // );\n case FilterType.enumeration:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n select\n onChange={(event) => setFilterValue(filter, event.target.value)}\n >\n {filter.filterOption.enumValues?.map((item) => (\n <MenuItem key={item} value={item}>\n {item}\n </MenuItem>\n ))}\n </TextField>\n );\n case FilterType.numeric:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n type=\"number\"\n value={filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, Number(event.target.value))}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiNumeric} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.string:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, event.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiFormatTextVariant} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.trinaryLogic:\n return (\n <TrinaryLogicCombobox\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n onChange={(value) => setFilterValue(filter, value)}\n />\n );\n }\n })()}\n </>\n );\n};\n\nconst FilterRow = ({ filter, closeHandler, setFilterOperator, setFilterValue }: FilterProps) => {\n return (\n <Grid item container spacing={2} alignItems={'center'}>\n <Grid item xs={4}>\n {filter && <FilterOperator filter={filter} setFilterOperator={setFilterOperator} />}\n </Grid>\n <Grid item xs={7}>\n {filter && <FilterInput filter={filter} setFilterValue={setFilterValue} />}\n </Grid>\n <Grid item xs={1}>\n <IconButton onClick={() => closeHandler(filter)}>\n <Close />\n </IconButton>\n </Grid>\n </Grid>\n );\n};\n\nconst Transition = forwardRef(function Transition(\n props: TransitionProps & {\n children: ReactElement<any, any>;\n },\n ref: Ref<unknown>,\n) {\n return <Slide direction=\"left\" ref={ref} {...props} />;\n});\n\nexport const FilterDialog = ({ filters, filterOptions, resolve, open, handleClose }: FilterDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n const [tempFilters, setTempFilters] = useState<Filter[]>(filters ?? []);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const updateFilterValue = (filter: Filter, value: any) => {\n setTempFilters((prevTempFilters) => {\n return prevTempFilters.map((tempFilter) => {\n if (filter.id === tempFilter.id) {\n return {\n ...tempFilter,\n filterBy: { value: value, operator: tempFilter.filterBy.operator },\n };\n }\n\n return tempFilter;\n });\n });\n };\n\n const updateFilterOperator = (filter: Filter, operator: Operation) => {\n setTempFilters((prevTempFilters) => {\n return prevTempFilters.map((tempFilter) => {\n if (filter.id === tempFilter.id) {\n return {\n ...tempFilter,\n filterBy: { value: tempFilter.filterBy.value, operator: operator },\n };\n }\n\n return tempFilter;\n });\n });\n };\n\n const filterCloseHandler = (filter: Filter) => {\n setTempFilters((prevTempFilters) => [...prevTempFilters.filter((tempFilter) => tempFilter.id !== filter.id)]);\n };\n\n const cancel = () => {\n handleClose();\n resolve(undefined);\n };\n\n const ok = () => {\n handleClose();\n resolve(tempFilters);\n };\n\n return (\n <Dialog\n open={open}\n onClose={cancel}\n scroll=\"paper\"\n TransitionComponent={Transition}\n disableEnforceFocus\n fullWidth\n maxWidth=\"sm\"\n sx={{\n '& .MuiDialog-container': {\n justifyContent: 'flex-end',\n },\n }}\n PaperProps={{\n sx: {\n m: 0,\n height: '100%',\n },\n }}\n >\n <DialogTitle id=\"scroll-dialog-title\">\n <Typography component=\"span\" color=\"text.primary\" variant=\"h5\">\n Filters\n </Typography>\n </DialogTitle>\n <DialogContent dividers={true}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n <Container component=\"main\" maxWidth=\"xs\">\n <Box sx={mainContainerPadding}>\n <Grid container spacing={2}>\n {tempFilters.map((filter) => (\n <FilterRow\n key={filter.id}\n filter={filter}\n closeHandler={filterCloseHandler}\n setFilterOperator={updateFilterOperator}\n setFilterValue={updateFilterValue}\n />\n ))}\n <Grid item container>\n <DropdownButton\n fullWidth={true}\n showDropdownIcon={false}\n menuItems={filterOptions.map((filterOption) => {\n return {\n label: filterOption.label ?? filterOption.attributeName,\n onClick: () =>\n setTempFilters((prevTempFilters) => [\n ...prevTempFilters,\n {\n id: prevTempFilters.length,\n filterOption: {\n attributeName: filterOption.attributeName,\n label: filterOption.label,\n filterType: filterOption.filterType,\n },\n filterBy: {\n operator: getDefaultOperator(filterOption.filterType),\n },\n },\n ]),\n };\n })}\n >\n Add new filter\n </DropdownButton>\n </Grid>\n </Grid>\n </Box>\n </Container>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button fullWidth variant=\"outlined\" onClick={cancel}>\n Cancel\n </Button>\n <Button fullWidth onClick={ok}>\n Apply {'(' + tempFilters.length + ')'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { Dialog, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { useEffect, useRef } from 'react';\nimport type { ReactNode } from 'react';\n\ninterface PageDialogProps {\n page: ReactNode;\n open: boolean;\n handleClose: () => void;\n resolve: () => void;\n}\n\nexport const PageDialog = ({ page, open, handleClose, resolve }: PageDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const ok = () => {\n resolve();\n handleClose();\n };\n\n return (\n <Dialog open={open} onClose={ok} scroll=\"paper\">\n <DialogContent dividers={true}>\n <DialogContentText ref={descriptionElementRef} tabIndex={-1}>\n {page}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={ok}>Ok</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { TablePagination } from '@mui/material';\nimport type { MouseEvent, Dispatch, SetStateAction } from 'react';\n\nexport interface CustomTablePaginationProps {\n pageChange: (isNext: boolean) => Promise<void>;\n isNextButtonEnabled: boolean;\n page: number;\n rowPerPage: number;\n setPage: Dispatch<SetStateAction<number>>;\n}\n\nexport const CustomTablePagination = (props: CustomTablePaginationProps) => {\n const handleChangePage = async (event: MouseEvent<HTMLButtonElement> | null, newPage: number) => {\n let isNext = true;\n if (newPage < props.page) {\n isNext = false;\n }\n\n props.setPage(newPage);\n\n await props.pageChange(isNext);\n };\n\n return (\n <TablePagination\n component=\"div\"\n count={-1}\n page={props.page}\n onPageChange={handleChangePage}\n rowsPerPage={props.rowPerPage}\n rowsPerPageOptions={[props.rowPerPage]}\n labelDisplayedRows={({ from, to }) => `${from}–${to}`}\n nextIconButtonProps={{\n disabled: !props.isNextButtonEnabled,\n }}\n backIconButtonProps={{\n disabled: props.page === 0,\n }}\n />\n );\n};\n","import { createContext, useContext } from 'react';\nimport {\n ConfirmDialogProviderContext,\n FilterDialogProviderContext,\n PageDialogProviderContext,\n RangeDialogProviderContext,\n} from '@judo/components-api';\n\n// @ts-ignore\nexport const PageDialogContextState = createContext<PageDialogProviderContext>();\n\n// @ts-ignore\nexport const ConfirmDialogContextState = createContext<ConfirmDialogProviderContext>();\n\n// @ts-ignore\nexport const RangeDialogContextState = createContext<RangeDialogProviderContext>();\n\n// @ts-ignore\nexport const FilterDialogContextState = createContext<FilterDialogProviderContext>();\n\nexport const useFilterDialog = () => {\n const context = useContext(FilterDialogContextState);\n\n if (context === undefined) {\n throw new Error('useFilterDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst usePageDialog = () => {\n const context = useContext(PageDialogContextState);\n\n if (context === undefined) {\n throw new Error('useConfirmDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst useConfirmDialog = () => {\n const context = useContext(ConfirmDialogContextState);\n\n if (context === undefined) {\n throw new Error('useConfirmDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst useRangeDialog = () => {\n const context = useContext(RangeDialogContextState);\n\n if (context === undefined) {\n throw new Error('useRangeDialog was used outside of its Provider');\n }\n\n return context;\n};\n","import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport {\n GridSortModel,\n GridRowModel,\n DataGrid,\n GridRowParams,\n GridColumns,\n GridSortItem,\n GridSelectionModel,\n GridToolbarContainer,\n GridRowId,\n} from '@mui/x-data-grid';\nimport { useSnackbar } from 'notistack';\nimport { useEffect, useRef, useState } from 'react';\nimport type { JudoStored, QueryCustomizer } from '@judo/data-api-common';\nimport type { Filter, FilterOption } from '@judo/components-api';\nimport { errorHandling } from '@judo/utilities';\nimport { CustomTablePagination } from '../CustomTablePagination';\nimport { useFilterDialog } from './hooks';\n\ninterface RangeDialogProps<T extends JudoStored<T>, U extends QueryCustomizer<T>> {\n resolve: (value: any) => void;\n open: boolean;\n handleClose: () => void;\n single?: boolean;\n columns: GridColumns<T>;\n defaultSortField: GridSortItem;\n rangeCall: (queryCustomizer: U) => Promise<Array<T>>;\n alreadySelectedItems: GridSelectionModel | GridRowId;\n initalQueryCustomizer: U;\n filterOptions: FilterOption[];\n}\n\nexport const RangeDialog = <T extends JudoStored<T>, U extends QueryCustomizer<T>>({\n resolve,\n open,\n handleClose,\n single = false,\n columns,\n defaultSortField,\n rangeCall,\n alreadySelectedItems,\n initalQueryCustomizer,\n filterOptions,\n}: RangeDialogProps<T, U>) => {\n const { openFilterDialog } = useFilterDialog();\n const { enqueueSnackbar } = useSnackbar();\n\n const descriptionElementRef = useRef<HTMLElement>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [rowCount, setRowCount] = useState<number>(0);\n const [sortModel, setSortModel] = useState<GridSortModel>([defaultSortField]);\n const [lastItem, setLastItem] = useState<T>();\n const [firstItem, setFirstItem] = useState<T>();\n const [isNextButtonEnabled, setIsNextButtonEnabled] = useState<boolean>(true);\n const [page, setPage] = useState<number>(0);\n const [data, setData] = useState<GridRowModel<T>[]>([]);\n const [selectionModel, setSelectionModel] = useState<GridSelectionModel | GridRowId | undefined>(\n alreadySelectedItems ?? (single ? undefined : []),\n );\n const [selectedItems, setSelectedItems] = useState<T[] | T | undefined>([]);\n const [filters, setFilters] = useState<Filter[]>([]);\n const [queryCustomizer, setQueryCustomizer] = useState<U>({\n ...initalQueryCustomizer,\n _seek: {\n limit: 6,\n },\n });\n\n const handlePageChange = async (isNext: boolean) => {\n setQueryCustomizer((prevQueryCustomizer) => {\n return {\n ...prevQueryCustomizer,\n _seek: {\n limit: isNext ? 6 : 5,\n reverse: !isNext,\n lastItem: isNext ? lastItem : firstItem,\n },\n };\n });\n\n setIsNextButtonEnabled(!isNext);\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n try {\n const res = await rangeCall(queryCustomizer);\n\n if (res.length > 5) {\n setIsNextButtonEnabled(true);\n res.pop();\n } else if (queryCustomizer._seek?.limit === 6) {\n setIsNextButtonEnabled(false);\n }\n\n setData(res);\n setFirstItem(res[0]);\n setLastItem(res[res.length - 1]);\n setRowCount(res.length || 0);\n } catch (error) {\n errorHandling(error, enqueueSnackbar);\n }\n setIsLoading(false);\n };\n\n const handleFiltersChange = (newFilters: Filter[]) => {\n setPage(0);\n setFilters(newFilters);\n\n // @ts-ignore\n setQueryCustomizer((prevQueryCustomizer) => {\n const tempQueryCustomizer = { ...prevQueryCustomizer };\n\n filterOptions.forEach(\n (filter) =>\n // @ts-ignore\n (tempQueryCustomizer[filter.attributeName] = mapFiltersToQueryCustomizerProperty(\n newFilters,\n filter.attributeName,\n )),\n );\n\n return {\n ...prevQueryCustomizer,\n _seek: {\n lastItem: undefined,\n limit: 6,\n reverse: undefined,\n },\n ...tempQueryCustomizer,\n };\n });\n };\n\n const handleSortModelChange = (newModel: GridSortModel) => {\n setPage(0);\n setSortModel(newModel);\n\n const { field, sort } = newModel[0];\n\n setQueryCustomizer((prevQueryCustomizer) => {\n return {\n ...prevQueryCustomizer,\n _orderBy: [{ attribute: field, descending: sort === 'desc' }],\n };\n });\n };\n\n // useEffect(() => {\n // setPage(0);\n // const { field, sort } = sortModel[0];\n\n // setQueryCustomizer((prevQueryCustomizer) => {\n // const tempQueryCustomizer = { ...prevQueryCustomizer };\n\n // filterOptions.forEach(\n // (filter) =>\n // // @ts-ignore\n // (tempQueryCustomizer[filter.attributeName] = mapFiltersToQueryCustomizerProperty(\n // filters,\n // filter.attributeName,\n // )),\n // );\n\n // return {\n // ...prevQueryCustomizer,\n // _seek: {\n // lastItem: undefined,\n // limit: 6,\n // reverse: undefined,\n // },\n // _orderBy: [{ attribute: field, descending: sort === 'desc' }],\n // ...tempQueryCustomizer,\n // };\n // });\n // }, [sortModel, filters]);\n\n useEffect(() => {\n fetchData();\n }, [queryCustomizer]);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const cancel = () => {\n handleClose();\n resolve(undefined);\n };\n\n const ok = () => {\n handleClose();\n resolve(selectedItems);\n };\n\n const handleOnSelection = (newSelectionModel: GridSelectionModel) => {\n if (!Array.isArray(selectionModel)) return;\n\n // added new items\n if (newSelectionModel.length > selectionModel.length) {\n const diff = newSelectionModel.length - selectionModel.length;\n const newItemsId = [...newSelectionModel].slice(diff * -1);\n const newItems = data.filter((value) => newItemsId.indexOf(value.__identifier as GridRowId) !== -1);\n setSelectedItems((prevSelectedItems) => {\n if (!Array.isArray(prevSelectedItems)) return;\n\n return [...prevSelectedItems, ...newItems];\n });\n }\n\n // removed items\n if (newSelectionModel.length < selectionModel.length) {\n const removedItemsId = selectionModel.filter((value) => newSelectionModel.indexOf(value) === -1);\n setSelectedItems((prevSelectedItems) => {\n if (!Array.isArray(prevSelectedItems)) return;\n\n return [...prevSelectedItems.filter((value) => removedItemsId.indexOf(value.__identifier as GridRowId) === -1)];\n });\n }\n\n setSelectionModel(newSelectionModel);\n };\n\n const handleSingleOnSelection = (newSelectionModel: GridSelectionModel) => {\n if (Array.isArray(selectionModel)) return;\n\n if (newSelectionModel.length === 0) {\n setSelectionModel('');\n setSelectedItems(undefined);\n return;\n }\n\n const lastId = newSelectionModel[newSelectionModel.length - 1];\n\n setSelectionModel(lastId);\n setSelectedItems(data.find((value) => value.__identifier === lastId));\n };\n\n const handleIsRowSelectable = (params: GridRowParams<T>) => {\n if (alreadySelectedItems) {\n if (!Array.isArray(alreadySelectedItems)) throw Error('Range dialog gets wrong alreadySelectedItems.');\n\n return !alreadySelectedItems.includes(params.id);\n }\n\n return true;\n };\n\n return (\n <Dialog open={open} onClose={cancel} scroll=\"paper\" fullWidth={true} maxWidth={'sm'}>\n <DialogTitle id=\"scroll-dialog-title\">Select</DialogTitle>\n <DialogContent dividers={true}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n <DataGrid\n sx={\n single\n ? {\n '.MuiDataGrid-columnHeaderCheckbox .MuiDataGrid-columnHeaderTitleContainer': {\n display: 'none',\n },\n }\n : undefined\n }\n autoHeight\n getRowId={(row: T) => row.__identifier as GridRowId}\n loading={isLoading}\n paginationMode=\"server\"\n rows={data}\n rowCount={rowCount}\n sortingOrder={['desc', 'asc']}\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n checkboxSelection\n onSelectionModelChange={!single ? handleOnSelection : handleSingleOnSelection}\n isRowSelectable={!single ? handleIsRowSelectable : undefined}\n selectionModel={selectionModel}\n hideFooterSelectedRowCount={single}\n columns={columns}\n keepNonExistentRowsSelected\n components={{\n Toolbar: () => (\n <GridToolbarContainer>\n <Button\n variant=\"outlined\"\n onClick={async () => {\n const newFilters = await openFilterDialog(filterOptions, filters);\n\n if (newFilters) {\n handleFiltersChange(newFilters);\n }\n }}\n disabled={isLoading}\n >\n Set filters {filters.length !== 0 ? '(' + filters.length + ')' : ''}\n </Button>\n </GridToolbarContainer>\n ),\n Pagination: () => (\n <CustomTablePagination\n pageChange={handlePageChange}\n isNextButtonEnabled={isNextButtonEnabled}\n page={page}\n setPage={setPage}\n rowPerPage={5}\n />\n ),\n }}\n />\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={cancel}>Cancel</Button>\n <Button onClick={ok}>Ok</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import type { ColumnActionsProvider, ColumnsActionsOptions, TableRowAction } from '@judo/utilities';\nimport { exists } from '@judo/utilities';\nimport { MoreHoriz } from '@mui/icons-material';\nimport { Button } from '@mui/material';\nimport { GridColDef, GridRenderCellParams } from '@mui/x-data-grid';\nimport { DropdownButton } from '../DropdownButton';\n\nexport const columnsActionCalculator: ColumnActionsProvider<any> = (\n actions: TableRowAction<any>[],\n options?: ColumnsActionsOptions,\n): GridColDef[] => {\n if (!exists(actions) || actions.length === 0) {\n return [];\n }\n\n let shownActionsNumber = 1;\n if (options?.shownActions) {\n shownActionsNumber = actions.length < options.shownActions ? actions.length : options.shownActions;\n }\n\n if (shownActionsNumber < 0) {\n return standaloneActions(actions, options);\n } else if (shownActionsNumber === 0) {\n return [];\n } else if (shownActionsNumber === 1) {\n return dropdownActions(actions, options);\n } else {\n const sliceNumber = actions.length === shownActionsNumber ? shownActionsNumber : shownActionsNumber - 1;\n const standaloneRowActions = actions.slice(0, sliceNumber);\n const dropdownRowActions = actions.slice(sliceNumber);\n\n return [...standaloneActions(standaloneRowActions, options), ...dropdownActions(dropdownRowActions, options)];\n }\n};\n\nconst standaloneActions: ColumnActionsProvider<unknown> = (\n actions: TableRowAction<unknown>[],\n options?: ColumnsActionsOptions,\n): GridColDef[] => {\n return actions.map((action, index) => {\n return {\n field: action.label + index,\n headerName: '',\n align: 'center',\n type: 'actions',\n renderCell: (params: GridRenderCellParams) => {\n return (\n <Button variant=\"text\" onClick={() => action.action(params.row)}>\n {action.icon}\n {(options?.showLabel ?? true) && action.label}\n </Button>\n );\n },\n };\n });\n};\n\nconst dropdownActions: ColumnActionsProvider<unknown> = (actions: TableRowAction<unknown>[]): GridColDef[] => {\n if (actions.length === 0) return [];\n\n return [\n {\n field: 'actions',\n headerName: '',\n align: 'center',\n type: 'actions',\n renderCell: (params: GridRenderCellParams) => {\n return (\n <DropdownButton\n variant=\"text\"\n showDropdownIcon={false}\n menuItems={actions.map((action) => {\n return {\n label: action.label,\n startIcon: action.icon,\n onClick: () => action.action(params.row),\n };\n })}\n >\n <MoreHoriz />\n </DropdownButton>\n );\n },\n },\n ];\n};\n","import { Delete, LinkOff, NoteAdd, Visibility } from '@mui/icons-material';\nimport { ButtonBase, Grid, IconButton, InputAdornment, TextField } from '@mui/material';\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { exists } from '@judo/utilities';\n\ninterface AggregationInputProps {\n name?: string;\n id?: string;\n label?: string;\n value: any | undefined | null;\n error?: boolean | undefined;\n helperText?: string | undefined;\n disabled?: boolean | undefined;\n readonly?: boolean | undefined;\n labelList: string[];\n icon?: ReactNode;\n onSet?: () => Promise<void> | undefined;\n onView?: () => void | undefined;\n onCreate?: () => void | undefined;\n onDelete?: () => Promise<void> | undefined;\n onRemove?: () => void | undefined;\n}\n\ninterface ViewIconsProps {\n value: any | undefined | null;\n disabled: boolean;\n onView?: () => void | undefined;\n onCreate?: () => void | undefined;\n onDelete?: () => Promise<void> | undefined;\n}\n\ninterface EditIconsProps {\n value: any | undefined | null;\n disabled: boolean;\n onRemove?: () => void | undefined;\n}\n\nexport const AggregationInput = ({\n name,\n id,\n label,\n value,\n error = false,\n helperText,\n disabled = false,\n readonly = true,\n labelList,\n icon,\n onSet,\n onView,\n onCreate,\n onRemove,\n onDelete,\n}: AggregationInputProps) => {\n const [focused, setFocused] = useState(false);\n\n let icons: ReactNode;\n\n if (readonly) {\n icons = <ViewIcons value={value} disabled={disabled} onCreate={onCreate} onView={onView} onDelete={onDelete} />;\n } else {\n icons = <EditIcons value={value} disabled={disabled} onRemove={onRemove} />;\n }\n\n return (\n <Grid container item direction=\"row\" justifyContent=\"stretch\" alignContent=\"stretch\">\n <ButtonBase\n sx={{ padding: 0 }}\n disabled={disabled || readonly}\n onFocusCapture={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n onClick={onSet}\n >\n <TextField\n disabled={!onSet || disabled}\n name={name}\n id={id}\n label={label}\n error={error}\n helperText={helperText}\n focused={focused}\n fullWidth\n value={labelList.join(' - ')}\n className={!readonly ? undefined : 'Mui-readOnly'}\n sx={{\n ':hover': {\n cursor: 'pointer',\n },\n '.MuiFilledInput-input:hover': {\n cursor: 'pointer',\n },\n }}\n InputProps={{\n readOnly: true,\n startAdornment: <InputAdornment position=\"start\">{icon}</InputAdornment>,\n }}\n />\n </ButtonBase>\n {icons}\n </Grid>\n );\n};\n\nconst ViewIcons = ({ value, disabled, onCreate, onDelete, onView }: ViewIconsProps) => {\n let icons: ReactNode;\n\n if (exists(value)) {\n icons = (\n <>\n {onView && (\n <IconButton disabled={disabled} onClick={onView}>\n <Visibility />\n </IconButton>\n )}\n {onDelete && (\n <IconButton disabled={disabled} onClick={onDelete}>\n <Delete />\n </IconButton>\n )}\n </>\n );\n } else {\n icons = (\n <>\n {onCreate && (\n <IconButton disabled={disabled} onClick={onCreate}>\n <NoteAdd />\n </IconButton>\n )}\n </>\n );\n }\n\n return <>{icons}</>;\n};\n\nconst EditIcons = ({ value, disabled, onRemove }: EditIconsProps) => {\n let icons: ReactNode;\n\n if (exists(value)) {\n icons = (\n <>\n {onRemove && (\n <IconButton disabled={disabled} onClick={onRemove}>\n <LinkOff />\n </IconButton>\n )}\n </>\n );\n } else {\n icons = <></>;\n }\n\n return <>{icons}</>;\n};\n","import { Home } from '@mui/icons-material';\nimport { Breadcrumbs, Typography } from '@mui/material';\nimport { useState, useContext, createContext, useMemo, useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport type { To } from 'react-router-dom';\n\ninterface BreadcrumbProviderProps {\n children: ReactNode;\n}\n\nexport type JudoNavigationSetTitle = (pageTitle: string) => void;\n\ninterface JudoNavigationProviderContext {\n clearNavigate: (to: To) => void;\n navigate: (to: To) => void;\n back: () => void;\n isBackDisabled: boolean;\n setTitle: JudoNavigationSetTitle;\n}\n\ninterface BreadcrumbItem {\n key: string;\n path: To;\n label: string | null;\n}\n\n// @ts-ignore\nconst JudoNavigationContextState = createContext<JudoNavigationProviderContext>();\n\nconst BreadcrumbContextState = createContext<BreadcrumbItem[]>([]);\n\nexport const useJudoNavigation = () => {\n const context = useContext(JudoNavigationContextState);\n\n if (context === undefined) {\n throw new Error('useJudoNavigation was used outside of its Provider');\n }\n\n return context;\n};\n\nexport const BreadcrumbProvider = ({ children }: BreadcrumbProviderProps) => {\n const navigate = useNavigate();\n const location = useLocation();\n\n const [breadcrumbItems, setBreadcrumbItems] = useState<BreadcrumbItem[]>([]);\n const [nextBreadcrumbItem, setNextBreadcrumbItem] = useState<BreadcrumbItem>({} as any);\n\n useEffect(() => {\n setNextBreadcrumbItem((prevNextBreadcrumbItem) => {\n return {\n ...prevNextBreadcrumbItem,\n key: '0.' + location.pathname,\n path: location.pathname,\n };\n });\n }, []);\n\n const isBackDisabled = useMemo(() => {\n return breadcrumbItems.length === 0;\n }, [breadcrumbItems]);\n\n const judoNavigationContext = {\n clearNavigate: (to: To) => {\n setBreadcrumbItems([]);\n setNextBreadcrumbItem({\n key: '0.' + to.toString(),\n label: null,\n path: to,\n });\n\n navigate(to);\n },\n navigate: (to: To) => {\n if (nextBreadcrumbItem.label === null) {\n throw Error('Page title has not been set!');\n }\n\n setBreadcrumbItems((prevBreadCrumbItems) => {\n return [...prevBreadCrumbItems, nextBreadcrumbItem];\n });\n\n setNextBreadcrumbItem({\n key: breadcrumbItems.length + '.' + to.toString(),\n label: null,\n path: to,\n });\n\n navigate(to);\n },\n back: () => {\n if (breadcrumbItems.length !== 0) {\n const lastItem = breadcrumbItems[breadcrumbItems.length - 1];\n setNextBreadcrumbItem(lastItem);\n setBreadcrumbItems((prevBreadcrumbItems) => {\n return [...prevBreadcrumbItems.slice(0, prevBreadcrumbItems.length - 1)];\n });\n navigate(lastItem.path);\n return;\n }\n\n setBreadcrumbItems([]);\n setNextBreadcrumbItem({\n key: '0.' + '/'.toString(),\n label: null,\n path: '/',\n });\n\n navigate('/');\n },\n isBackDisabled: isBackDisabled,\n setTitle: (pageTitle: string) => {\n setNextBreadcrumbItem((prevNextBreadcrumbItem) => {\n return { ...prevNextBreadcrumbItem, label: pageTitle };\n });\n },\n };\n\n return (\n <BreadcrumbContextState.Provider value={breadcrumbItems}>\n <JudoNavigationContextState.Provider value={judoNavigationContext}>\n {children}\n </JudoNavigationContextState.Provider>\n </BreadcrumbContextState.Provider>\n );\n};\n\nexport const CustomBreadcrumb = () => {\n const breadcrumbItems = useContext(BreadcrumbContextState);\n\n return (\n <Breadcrumbs maxItems={2} separator=\">\">\n <Home />\n {breadcrumbItems.map(({ label, key }, index) => {\n return (\n <Typography color=\"text.primary\" key={key}>\n {label}\n </Typography>\n );\n })}\n </Breadcrumbs>\n );\n};\n","import type { JudoTreeItemProps, MenuProps, StyledTreeItemProps } from '@judo/components-api';\nimport { ArrowDropDown, ArrowRight } from '@mui/icons-material';\nimport { Box, styled, Typography } from '@mui/material';\nimport { TreeItem, treeItemClasses } from '@mui/lab';\nimport { useIntl } from 'react-intl';\nimport { TreeView } from '@mui/lab';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\ndeclare module 'react' {\n interface CSSProperties {\n '--tree-view-color'?: string;\n '--tree-view-bg-color'?: string;\n }\n}\n\nconst StyledTreeItemRoot = styled(TreeItem)(({ theme }) => ({\n color: theme.palette.text.secondary,\n [`& .${treeItemClasses.content}`]: {\n color: theme.palette.text.secondary,\n // borderTopRightRadius: theme.spacing(2),\n // borderBottomRightRadius: theme.spacing(2),\n // paddingRight: theme.spacing(1),\n padding: 0,\n marginBottom: '1rem',\n width: 'auto',\n fontWeight: theme.typography.fontWeightMedium,\n '&.Mui-expanded': {\n fontWeight: theme.typography.fontWeightRegular,\n },\n '&:hover': {\n // backgroundColor: theme.palette.action.hover,\n backgroundColor: 'inherit',\n },\n '&.Mui-focused, &.Mui-selected, &.Mui-selected.Mui-focused': {\n // backgroundColor: `var(--tree-view-bg-color, ${theme.palette.action.selected})`,\n backgroundColor: 'inherit',\n color: 'var(--tree-view-color)',\n },\n [`& .${treeItemClasses.label}`]: {\n fontWeight: 'inherit',\n color: 'inherit',\n },\n },\n [`& .${treeItemClasses.group}`]: {\n marginLeft: 0,\n [`& .${treeItemClasses.content}`]: {\n paddingLeft: theme.spacing(2),\n },\n },\n}));\n\nfunction StyledTreeItem(props: StyledTreeItemProps) {\n const { bgColor, color, labelIcon: LabelIcon, labelInfo, labelText, ...other } = props;\n\n return (\n <StyledTreeItemRoot\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', p: 0.5, pr: 0 }}>\n <Box component={LabelIcon} color=\"inherit\" sx={{ mr: 1 }} />\n <Typography variant=\"body2\" sx={{ fontWeight: 'inherit', flexGrow: 1 }}>\n {labelText}\n </Typography>\n <Typography variant=\"caption\" color=\"inherit\">\n {labelInfo}\n </Typography>\n </Box>\n }\n style={{\n '--tree-view-color': color,\n '--tree-view-bg-color': bgColor,\n }}\n {...other}\n />\n );\n}\n\nexport const MenuTree = ({ items, height, maxWidth, defaultExpanded }: MenuProps) => {\n const { clearNavigate } = useJudoNavigation();\n const intl = useIntl();\n\n return (\n <TreeView\n aria-label=\"MenuTree\"\n defaultExpanded={defaultExpanded}\n defaultCollapseIcon={<ArrowDropDown />}\n defaultExpandIcon={<ArrowRight />}\n defaultEndIcon={<div style={{ width: 24 }} />}\n sx={{ height, flexGrow: 1, maxWidth, overflowY: 'auto' }}\n >\n {items.map(({ labelText, to, items, ...iRest }: JudoTreeItemProps) => (\n <StyledTreeItem\n nodeId={labelText}\n labelText={intl.formatMessage({ id: `menuTree.${labelText}`, defaultMessage: labelText })}\n onClick={() => to && clearNavigate(to)}\n to={to}\n {...iRest}\n >\n {items &&\n items.map(({ labelText: jLabelText, to: jTo, ...jRest }: JudoTreeItemProps) => (\n <StyledTreeItem\n nodeId={jLabelText}\n labelText={intl.formatMessage({ id: `menuTree.${jLabelText}`, defaultMessage: jLabelText })}\n onClick={() => clearNavigate(jTo)}\n to={jTo}\n {...jRest}\n />\n ))}\n </StyledTreeItem>\n ))}\n </TreeView>\n );\n};\n","import { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { ConfirmationDialog } from './ConfirmationDialog';\nimport { FilterDialog } from './FilterDialog';\nimport { PageDialog } from './PageDialog';\nimport { RangeDialog } from './RangeDialog';\nimport type {\n ConfirmDialogProviderContext,\n DialogProviderProps,\n FilterDialogProviderContext,\n OpenRangeDialogProps,\n PageDialogProviderContext,\n RangeDialogProviderContext,\n} from '@judo/components-api';\nimport type { Filter, FilterOption } from '@judo/components-api';\nimport type { JudoStored, QueryCustomizer } from '@judo/data-api-common';\nimport {\n ConfirmDialogContextState,\n FilterDialogContextState,\n PageDialogContextState,\n RangeDialogContextState,\n} from './hooks';\n\nexport const DialogProvider = ({ children }: DialogProviderProps) => {\n // Page Dialog\n const [isOpenPageDialog, setIsOpenPageDialog] = useState(false);\n const [pageDialog, setPageDialog] = useState<ReactNode>();\n\n const handleClosePageDialog = () => {\n setIsOpenPageDialog(false);\n };\n\n const handleOpenPageDialog = async (page: ReactNode) => {\n setIsOpenPageDialog(true);\n return new Promise<void>((resolve) => {\n setPageDialog(<PageDialog page={page} handleClose={handleClosePageDialog} open={true} resolve={resolve} />);\n });\n };\n\n const pageDialogContext: PageDialogProviderContext = {\n openPageDialog: handleOpenPageDialog,\n };\n\n // Range Dialog\n const [isOpenRangeDialog, setIsOpenRangeDialog] = useState(false);\n const [rangeDialog, setRangeDialog] = useState<ReactNode>();\n\n const handleCloseRangeDialog = () => {\n setIsOpenRangeDialog(false);\n };\n\n const handleOpenRangeDialog = async <T extends JudoStored<T>, U extends QueryCustomizer<T>>({\n columns,\n defaultSortField,\n rangeCall,\n single = false,\n alreadySelectedItems,\n filterOptions,\n initialQueryCustomizer,\n }: OpenRangeDialogProps<T, U>) => {\n setIsOpenRangeDialog(true);\n\n return new Promise<T[] | T>((resolve) => {\n setRangeDialog(\n <RangeDialog<T, U>\n handleClose={handleCloseRangeDialog}\n open={true}\n resolve={resolve}\n columns={columns}\n defaultSortField={defaultSortField}\n rangeCall={rangeCall}\n single={single}\n alreadySelectedItems={alreadySelectedItems}\n filterOptions={filterOptions}\n initalQueryCustomizer={initialQueryCustomizer}\n />,\n );\n });\n };\n\n const customDialogContext: RangeDialogProviderContext = {\n openRangeDialog: handleOpenRangeDialog,\n };\n\n // Confirmation Dialog\n const [isOpenConfirmDialog, setIsOpenConfirmDialog] = useState(false);\n const [confirmDialog, setConfirmDialog] = useState<ReactNode>();\n\n const handleCloseConfirmDialog = () => {\n setIsOpenConfirmDialog(false);\n return false;\n };\n\n const handleOpenConfirmDialog = async (confirmationMessage: string | ReactNode, title?: string | ReactNode) => {\n setIsOpenConfirmDialog(true);\n\n return new Promise<boolean>((resolve) => {\n setConfirmDialog(\n <ConfirmationDialog\n confirmationMessage={confirmationMessage}\n title={title}\n handleClose={handleCloseConfirmDialog}\n open={true}\n resolve={resolve}\n />,\n );\n });\n };\n\n const confirmDialogContext: ConfirmDialogProviderContext = {\n openConfirmDialog: handleOpenConfirmDialog,\n };\n\n // Filter dialog\n const [isOpenFilterDialog, setIsOpenFilterDialog] = useState(false);\n const [filterDialog, setFilterDialog] = useState<ReactNode>();\n\n const handleCloseFilterDialog = () => {\n setIsOpenFilterDialog(false);\n return false;\n };\n\n const handleOpenFilterDialog = async (filterOptions: FilterOption[], filters?: Filter[]) => {\n setIsOpenFilterDialog(true);\n\n return new Promise<Filter[]>((resolve) => {\n setFilterDialog(\n <FilterDialog\n filters={filters}\n filterOptions={filterOptions}\n handleClose={handleCloseFilterDialog}\n open={true}\n resolve={resolve}\n />,\n );\n });\n };\n\n const filterDialogContext: FilterDialogProviderContext = {\n openFilterDialog: handleOpenFilterDialog,\n };\n\n return (\n <PageDialogContextState.Provider value={pageDialogContext}>\n <ConfirmDialogContextState.Provider value={confirmDialogContext}>\n <RangeDialogContextState.Provider value={customDialogContext}>\n <FilterDialogContextState.Provider value={filterDialogContext}>\n {children}\n {isOpenPageDialog && pageDialog}\n {isOpenConfirmDialog && confirmDialog}\n {isOpenRangeDialog && rangeDialog}\n {isOpenFilterDialog && filterDialog}\n </FilterDialogContextState.Provider>\n </RangeDialogContextState.Provider>\n </ConfirmDialogContextState.Provider>\n </PageDialogContextState.Provider>\n );\n};\n","import { Box, Typography } from '@mui/material';\nimport type { HeroProps } from '@judo/components-api';\n\nexport function Hero(props: HeroProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <img\n src={props.imgSrc}\n alt=\"hero\"\n style={{\n width: '4rem',\n marginRight: '1rem',\n }}\n />\n <Typography\n sx={{\n fontSize: 18,\n fontWeight: 'bold',\n color: 'secondary.main',\n }}\n >\n {props.text}\n </Typography>\n </Box>\n );\n}\n","import { Box, Typography } from '@mui/material';\nimport type { LogoProps } from '@judo/components-api';\n\nexport function Logo(props: LogoProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <img\n src={props.imgSrc}\n alt=\"logo\"\n style={{\n width: '100%',\n }}\n />\n <Typography\n sx={{\n fontSize: 18,\n fontWeight: 'bold',\n }}\n >\n {props.subTitle}\n </Typography>\n </Box>\n );\n}\n","import { AppBar, Toolbar, Grid, Typography, Divider } from '@mui/material';\nimport { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\ninterface PageHeaderProps {\n title: string;\n children: ReactNode;\n}\n\nexport const PageHeader = ({ title, children }: PageHeaderProps) => {\n const { setTitle } = useJudoNavigation();\n\n useEffect(() => {\n setTitle(title);\n }, [title]);\n\n return (\n <>\n <AppBar component=\"div\" position=\"static\" elevation={0} sx={{ zIndex: 0 }}>\n <Toolbar>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item xs>\n <Typography component=\"span\" color=\"text.primary\" variant=\"h5\">\n {title}\n </Typography>\n </Grid>\n {children}\n </Grid>\n </Toolbar>\n </AppBar>\n <Divider />\n </>\n );\n};\n"],"names":["ConfirmationDialog","confirmationMessage","title","resolve","open","handleClose","descriptionElementRef","useRef","useEffect","current","descriptionElement","focus","_jsxs","Dialog","onClose","scroll","fullWidth","maxWidth","children","_jsx","jsx","DialogTitle","id","DialogContent","dividers","DialogContentText","ref","tabIndex","DialogActions","Button","variant","onClick","TRINARY_LOGIC","Map","FilterType","e","i","t","r","location","preventDuplicate","persist","duration","autoHideDuration","setValidation","forEach","set","code","a","o","message","marginTop","marginBottom","display","flexDirection","alignItems","palette","mode","primary","main","secondary","text","background","default","subtitleColor","typography","h5","fontWeight","fontSize","letterSpacing","shape","borderRadius","components","MuiTab","defaultProps","disableRipple","mixins","toolbar","minHeight","l","DropdownButton","menuItems","disabled","showDropdownIcon","setOpen","useState","anchorRef","event","contains","target","handleListKeyDown","key","preventDefault","prevOpen","jsxs","_Fragment","Fragment","endIcon","KeyboardArrowDown","Popper","anchorEl","placement","transition","style","zIndex","minWidth","scrollWidth","TransitionProps","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","filter","menuItem","visible","map","index","MenuItem","label","startIcon","alpha","spacing","common","white","breakpoints","up","fontWeightMedium","equals","notEquals","lessThan","greaterThan","lessOrEqual","greaterOrEqual","equal","notEqual","matches","like","TrinaryLogicCombobox","readOnly","value","name","error","helperText","onChange","onChangeHandler","Array","from","values","indexOf","keysArray","keys","undefined","TextField","select","get","className","InputProps","startAdornment","InputAdornment","position","CheckBoxOutlined","getDefaultOperator","filterType","boolean","_BooleanOperation","date","dateTime","_NumericOperation","enumeration","_EnumerationOperation","numeric","string","_StringOperation","trinaryLogic","getOperatorsByFilter","filterOption","Object","FilterOperator","setFilterOperator","filterBy","operator","getOperationEnumValue","item","FilterInput","setFilterValue","exists","enumValues","Error","attributeName","FormControlLabel","control","Checkbox","checked","DatePicker","renderInput","props","newValue","toISOString","substring","dateToJudoDateString","Icon","path","mdiCalendarMonth","size","DateTimePicker","mdiCalendarClock","type","Number","mdiNumeric","mdiFormatTextVariant","FilterRow","closeHandler","Grid","container","xs","IconButton","Close","Transition","forwardRef","Slide","direction","FilterDialog","filters","filterOptions","tempFilters","setTempFilters","updateFilterValue","prevTempFilters","tempFilter","updateFilterOperator","filterCloseHandler","cancel","TransitionComponent","disableEnforceFocus","sx","justifyContent","PaperProps","m","height","Typography","component","color","Container","Box","mainContainerPadding","length","PageDialog","page","ok","CustomTablePagination","TablePagination","count","onPageChange","async","newPage","isNext","setPage","pageChange","rowsPerPage","rowPerPage","rowsPerPageOptions","labelDisplayedRows","to","nextIconButtonProps","isNextButtonEnabled","backIconButtonProps","PageDialogContextState","createContext","ConfirmDialogContextState","RangeDialogContextState","FilterDialogContextState","useFilterDialog","context","useContext","RangeDialog","single","columns","defaultSortField","rangeCall","alreadySelectedItems","initalQueryCustomizer","openFilterDialog","enqueueSnackbar","useSnackbar","isLoading","setIsLoading","rowCount","setRowCount","sortModel","setSortModel","lastItem","setLastItem","firstItem","setFirstItem","setIsNextButtonEnabled","data","setData","selectionModel","setSelectionModel","selectedItems","setSelectedItems","setFilters","queryCustomizer","setQueryCustomizer","_seek","limit","handlePageChange","prevQueryCustomizer","reverse","fetchData","res","pop","s","isAxiosError","n","response","status","errorHandling","DataGrid","autoHeight","getRowId","row","__identifier","loading","paginationMode","rows","sortingOrder","sortingMode","onSortModelChange","newModel","field","sort","_orderBy","attribute","descending","checkboxSelection","onSelectionModelChange","newSelectionModel","isArray","lastId","find","diff","newItemsId","slice","newItems","prevSelectedItems","removedItemsId","isRowSelectable","params","includes","hideFooterSelectedRowCount","keepNonExistentRowsSelected","Toolbar","GridToolbarContainer","newFilters","tempQueryCustomizer","mapFiltersToQueryCustomizerProperty","handleFiltersChange","Pagination","standaloneActions","actions","options","action","headerName","align","renderCell","icon","showLabel","dropdownActions","MoreHoriz","ViewIcons","onCreate","onDelete","onView","icons","Visibility","Delete","NoteAdd","EditIcons","onRemove","LinkOff","JudoNavigationContextState","BreadcrumbContextState","useJudoNavigation","StyledTreeItemRoot","styled","TreeItem","theme","treeItemClasses","content","padding","width","fontWeightRegular","backgroundColor","group","marginLeft","paddingLeft","StyledTreeItem","bgColor","labelIcon","LabelIcon","labelInfo","labelText","other","p","pr","mr","flexGrow","readonly","labelList","onSet","focused","setFocused","alignContent","ButtonBase","onFocusCapture","onBlur","join","cursor","navigate","useNavigate","useLocation","breadcrumbItems","setBreadcrumbItems","nextBreadcrumbItem","setNextBreadcrumbItem","prevNextBreadcrumbItem","pathname","judoNavigationContext","clearNavigate","toString","prevBreadCrumbItems","back","prevBreadcrumbItems","isBackDisabled","useMemo","setTitle","pageTitle","Provider","Breadcrumbs","maxItems","separator","Home","isOpenPageDialog","setIsOpenPageDialog","pageDialog","setPageDialog","handleClosePageDialog","pageDialogContext","openPageDialog","Promise","isOpenRangeDialog","setIsOpenRangeDialog","rangeDialog","setRangeDialog","handleCloseRangeDialog","customDialogContext","openRangeDialog","initialQueryCustomizer","isOpenConfirmDialog","setIsOpenConfirmDialog","confirmDialog","setConfirmDialog","handleCloseConfirmDialog","confirmDialogContext","openConfirmDialog","isOpenFilterDialog","setIsOpenFilterDialog","filterDialog","setFilterDialog","handleCloseFilterDialog","filterDialogContext","src","imgSrc","alt","marginRight","subTitle","items","defaultExpanded","intl","useIntl","TreeView","defaultCollapseIcon","ArrowDropDown","defaultExpandIcon","ArrowRight","defaultEndIcon","overflowY","iRest","nodeId","formatMessage","defaultMessage","jLabelText","jTo","jRest","AppBar","elevation","Divider","shownActionsNumber","shownActions","sliceNumber","standaloneRowActions","dropdownRowActions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components.cjs","sources":["../../src/dialog/ConfirmationDialog.tsx","../../../components-api/dist/esm/components-api.mjs","../../../utilities/dist/esm/utilities.mjs","../../../theme/dist/esm/theme.mjs","../../../data-api-common/dist/esm/data-api-common.mjs","../../src/DropdownButton.tsx","../../src/TrinaryLogicCombobox.tsx","../../src/dialog/FilterDialog.tsx","../../src/dialog/PageDialog.tsx","../../src/CustomTablePagination.tsx","../../src/dialog/hooks.tsx","../../src/dialog/RangeDialog.tsx","../../src/table/table-row-actions.tsx","../../src/AggregationInput.tsx","../../src/CustomBreadcrumb.tsx","../../src/MenuTree.tsx","../../src/dialog/DialogProvider.tsx","../../src/Hero.tsx","../../src/Logo.tsx","../../src/PageHeader.tsx"],"sourcesContent":["import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { useEffect, useRef } from 'react';\nimport type { ConfirmationDialogProps } from '@judo/components-api';\n\nexport const ConfirmationDialog = ({\n confirmationMessage,\n title,\n resolve,\n open,\n handleClose,\n}: ConfirmationDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const cancel = () => {\n handleClose();\n resolve(false);\n };\n\n const ok = () => {\n handleClose();\n resolve(true);\n };\n\n return (\n <Dialog open={open} onClose={handleClose} scroll=\"paper\" fullWidth={true} maxWidth={'xs'}>\n {title && <DialogTitle id=\"scroll-dialog-title\">{title}</DialogTitle>}\n <DialogContent dividers={!!title}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n {confirmationMessage}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={cancel}>\n No\n </Button>\n <Button variant=\"text\" onClick={ok}>\n Yes\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","const TRINARY_LOGIC = new Map([\n [null, 'Unknown'],\n [true, 'Yes'],\n [false, 'No'],\n]);\n\nvar FilterType;\n(function (FilterType) {\n FilterType[FilterType[\"boolean\"] = 0] = \"boolean\";\n FilterType[FilterType[\"numeric\"] = 1] = \"numeric\";\n FilterType[FilterType[\"string\"] = 2] = \"string\";\n FilterType[FilterType[\"enumeration\"] = 3] = \"enumeration\";\n FilterType[FilterType[\"date\"] = 4] = \"date\";\n FilterType[FilterType[\"dateTime\"] = 5] = \"dateTime\";\n // time,\n FilterType[FilterType[\"trinaryLogic\"] = 6] = \"trinaryLogic\";\n})(FilterType || (FilterType = {}));\n\nexport { FilterType, TRINARY_LOGIC };\n","const e=e=>null!=e,t=e=>e?e.toISOString().substring(0,10):e,r=(t,r,s)=>{if(!t||\"boolean\"!=typeof t.isAxiosError||!0!==t.isAxiosError)return void a(r);const n=t.response;if(e(n))if(n?.status)if(422===n?.status)r(o(t.response?.data).message,{variant:\"error\",preventDuplicate:!0,persist:!0});else{if(400===n?.status)return i(n.data,r,s);r(o(n?.data).message,{variant:\"error\",preventDuplicate:!0,persist:!0})}else a(r);else a(r)},i=(t,r,i)=>{if(e(t[0].location)){if(r(\"Please make sure all fields are filled in correctly.\",{variant:\"error\",preventDuplicate:!0,persist:!i?.duration,autoHideDuration:i?.duration??void 0}),void 0!==i?.setValidation){let e=new Map;t.forEach((t=>e.set(t.location,t.code))),i?.setValidation(e)}}else r(t[0].code,{variant:\"error\",preventDuplicate:!0,persist:!i?.duration,autoHideDuration:i?.duration??void 0})},a=e=>{e(\"Something went wrong. Please contact with the system admins.\",{variant:\"error\",preventDuplicate:!0,persist:!0})},o=e=>({message:e.code}),s=(e,t)=>{if(e.some((e=>e.filterOption.attributeName===t)))return e.filter((e=>e.filterOption.attributeName===t&&e.filterBy.value)).map((e=>({value:e.filterBy.value,operator:e.filterBy.operator})))},n=(e,...t)=>{let r={};for(const i of t)r[i]=s(e,i);return r};export{t as dateToJudoDateString,r as errorHandling,e as exists,n as mapAllFiltersToQueryCustomizerProperties,s as mapFiltersToQueryCustomizerProperty};\n//# sourceMappingURL=utilities.mjs.map\n","import{createTheme as e,alpha as o}from\"@mui/material\";const i={marginTop:8,marginBottom:8,display:\"flex\",flexDirection:\"column\",alignItems:\"center\"},t=e({palette:{mode:\"light\",primary:{main:\"#3C4166FF\"},secondary:{main:\"#E7501DFF\"},text:{primary:\"#17191DFF\",secondary:\"#434448FF\"},background:{default:\"#FAFAFAFF\"},subtitleColor:{main:\"#8c8c8c\"}},typography:{h5:{fontWeight:500,fontSize:26,letterSpacing:.5}},shape:{borderRadius:8},components:{MuiTab:{defaultProps:{disableRipple:!0}}},mixins:{toolbar:{minHeight:48}}}),r={...t,components:{MuiAppBar:{styleOverrides:{colorPrimary:{backgroundColor:t.palette.background.default}}},MuiButton:{defaultProps:{variant:\"contained\",size:\"small\"},styleOverrides:{root:{textTransform:\"none\",borderRadius:\"20px 20px 20px 20px\",paddingLeft:15,paddingRight:15},contained:{boxShadow:\"none\",\"&:active\":{boxShadow:\"none\"}},outlined:{border:\"2px solid\",fontWeight:\"bold\",\"&:hover\":{border:\"2px solid\",background:o(t.palette.primary.main,.15)}}}},MuiInputLabel:{styleOverrides:{root:{color:t.palette.subtitleColor.main,fontWeight:500,fontSize:16,\"&.Mui-focused\":{color:t.palette.subtitleColor.main}}}},MuiFilledInput:{styleOverrides:{input:{\"&:-webkit-autofill\":{WebkitBackgroundClip:\"text !important\"}},root:{background:\"inherit\",\"&.Mui-focused\":{background:\"inherit\"},\"&:hover:not(.Mui-disabled):not(.Mui-focused)\":{background:o(t.palette.secondary.main,.1)},\"&:hover:not(.Mui-disabled):before\":{borderBottom:\"none\"},\"&.Mui-focused .MuiInputAdornment-root .MuiSvgIcon-root\":{color:t.palette.secondary.main}}}},MuiTextField:{defaultProps:{fullWidth:!0,variant:\"filled\",color:\"secondary\"},styleOverrides:{root:{background:\"white\",\"& .MuiFilledInput-underline:before\":{borderBottom:\"none\"},\"&.Mui-readOnly:not(.Mui-disabled):not(.Mui-focused)\":{borderBottom:`1px solid ${o(t.palette.primary.main,.2)}`,background:\"transparent\"},\"&:not(.Mui-readOnly):not(.Mui-disabled)\":{boxShadow:\"0px 0px 8px 2px rgba(0,0,0,0.05)\",borderRadius:\"8px 8px 0 0\"}}}},MuiSelect:{styleOverrides:{filled:{\"&:focus\":{backgroundColor:\"white\"}}}},MuiDataGrid:{styleOverrides:{root:{border:\"none\"},toolbarContainer:{padding:\"8px 8px 4px 8px\"}}},MuiPaper:{styleOverrides:{rounded:{boxShadow:\"0px 0px 8px 1px rgba(0,0,0,0.05)\",borderRadius:16,padding:8}}},MuiDrawer:{styleOverrides:{paper:{border:\"none\",boxShadow:\"0px 0px 8px 1px rgba(0,0,0,0.05)\"}}},MuiTabs:{styleOverrides:{root:{marginLeft:t.spacing(1)},indicator:{height:3,borderTopLeftRadius:3,borderTopRightRadius:3,backgroundColor:t.palette.common.white}}},MuiTab:{styleOverrides:{root:{textTransform:\"none\",margin:\"0 16px\",minWidth:0,padding:0,[t.breakpoints.up(\"md\")]:{padding:0,minWidth:0}}}},MuiIconButton:{styleOverrides:{root:{color:t.palette.secondary.main,padding:t.spacing(1)}}},MuiTooltip:{styleOverrides:{tooltip:{borderRadius:4}}},MuiDivider:{styleOverrides:{root:{backgroundColor:\"rgb(255,255,255,0.15)\"},middle:{marginTop:8,marginBottom:8}}},MuiListItemButton:{defaultProps:{disableTouchRipple:!0}},MuiListItemText:{styleOverrides:{primary:{fontSize:14,fontWeight:t.typography.fontWeightMedium}}},MuiListItemIcon:{styleOverrides:{root:{color:\"inherit\",minWidth:\"auto\",marginRight:t.spacing(2),\"& svg\":{fontSize:20}}}},MuiAvatar:{styleOverrides:{root:{width:32,height:32}}},MuiCard:{styleOverrides:{root:{width:\"100%\",length:\"100%\",padding:10}}}}};export{i as mainContainerPadding,r as theme,t as themeBase};\n//# sourceMappingURL=theme.mjs.map\n","var a,e,l,r;!function(a){a.equals=\"equals\"}(a||(a={})),function(a){a.equals=\"equals\",a.notEquals=\"notEquals\"}(e||(e={})),function(a){a.lessThan=\"lessThan\",a.greaterThan=\"greaterThan\",a.lessOrEqual=\"lessOrEqual\",a.greaterOrEqual=\"greaterOrEqual\",a.equal=\"equal\",a.notEqual=\"notEqual\"}(l||(l={})),function(a){a.lessThan=\"lessThan\",a.greaterThan=\"greaterThan\",a.lessOrEqual=\"lessOrEqual\",a.greaterOrEqual=\"greaterOrEqual\",a.equal=\"equal\",a.notEqual=\"notEqual\",a.matches=\"matches\",a.like=\"like\"}(r||(r={}));export{a as _BooleanOperation,e as _EnumerationOperation,l as _NumericOperation,r as _StringOperation};\n//# sourceMappingURL=data-api-common.mjs.map\n","import { Button, ClickAwayListener, Grow, MenuItem, MenuList, Paper, Popper } from '@mui/material';\nimport { useState, useRef, useEffect } from 'react';\nimport type { ReactNode, KeyboardEvent, SyntheticEvent } from 'react';\nimport { KeyboardArrowDown } from '@mui/icons-material';\n\ninterface DropdownMenuItem {\n disabled?: boolean;\n visible?: boolean;\n label?: string;\n onClick: () => void;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n}\n\ninterface DropdownButtonProps {\n children?: ReactNode;\n id?: string | undefined;\n menuItems: DropdownMenuItem[];\n disabled?: boolean;\n showDropdownIcon?: boolean;\n fullWidth?: boolean;\n variant?: 'text' | 'outlined' | 'contained' | undefined;\n}\n\nexport function DropdownButton({\n children,\n id,\n menuItems,\n disabled = false,\n showDropdownIcon = true,\n fullWidth = false,\n variant = 'contained',\n}: DropdownButtonProps) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event: Event | SyntheticEvent) => {\n if (anchorRef.current && anchorRef.current.contains(event.target as HTMLElement)) {\n return;\n }\n\n setOpen(false);\n };\n\n function handleListKeyDown(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n event.preventDefault();\n setOpen(false);\n } else if (event.key === 'Escape') {\n setOpen(false);\n }\n }\n\n // return focus to the button when we transitioned from !open -> open\n const prevOpen = useRef(open);\n useEffect(() => {\n if (prevOpen.current && !open) {\n anchorRef.current!.focus();\n }\n\n prevOpen.current = open;\n }, [open]);\n\n return (\n <>\n <Button\n ref={anchorRef}\n id={id}\n onClick={handleToggle}\n endIcon={showDropdownIcon && <KeyboardArrowDown />}\n disabled={disabled}\n fullWidth={fullWidth}\n variant={variant}\n >\n {children}\n </Button>\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n placement=\"bottom\"\n transition\n style={{ zIndex: 1400, minWidth: anchorRef.current?.scrollWidth }}\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin: placement === 'bottom-start' ? 'left top' : 'left bottom',\n }}\n >\n <Paper>\n <ClickAwayListener onClickAway={handleClose}>\n <MenuList autoFocusItem={open} onKeyDown={handleListKeyDown}>\n {menuItems\n .filter((menuItem) => menuItem.visible ?? true)\n .map((menuItem, index) => {\n return (\n <MenuItem\n id={menuItem.label ?? '' + index}\n disabled={menuItem.disabled ?? false}\n onClick={(event) => {\n handleClose(event);\n menuItem.onClick();\n }}\n >\n {menuItem.startIcon}\n {menuItem.label}\n {menuItem.endIcon}\n </MenuItem>\n );\n })}\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </>\n );\n}\n","import { CheckBoxOutlined } from '@mui/icons-material';\nimport { TextField, InputAdornment, MenuItem } from '@mui/material';\nimport type { ChangeEvent } from 'react';\nimport { TRINARY_LOGIC } from '@judo/components-api';\n\ninterface TrinaryLogicProps {\n readOnly?: boolean;\n value?: boolean | null;\n id?: string;\n label: string;\n name?: string;\n error?: boolean | undefined;\n helperText?: string | undefined;\n onChange?: (value: boolean | null) => void;\n}\n\nconst TrinaryLogicCombobox = ({\n readOnly = false,\n value = null,\n id,\n label,\n name,\n error,\n helperText,\n onChange,\n}: TrinaryLogicProps) => {\n const onChangeHandler = onChange\n ? (event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n const index = Array.from(TRINARY_LOGIC.values()).indexOf(event.target.value);\n const keysArray = Array.from(TRINARY_LOGIC.keys());\n onChange(keysArray[index]);\n }\n : undefined;\n\n return (\n <TextField\n name={name}\n id={id}\n label={label}\n select\n value={TRINARY_LOGIC.get(value)}\n onChange={onChangeHandler}\n className={readOnly ? 'Mui-readOnly' : undefined}\n error={error}\n helperText={helperText}\n InputProps={{\n readOnly: readOnly,\n startAdornment: (\n <InputAdornment position=\"start\">\n <CheckBoxOutlined />\n </InputAdornment>\n ),\n }}\n >\n {Array.from(TRINARY_LOGIC.keys()).map((key) => (\n <MenuItem key={TRINARY_LOGIC.get(key)} value={TRINARY_LOGIC.get(key)}>\n {TRINARY_LOGIC.get(key)}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nexport default TrinaryLogicCombobox;\n","import { mdiCalendarClock, mdiCalendarMonth, mdiFormatTextVariant, mdiNumeric } from '@mdi/js';\nimport Icon from '@mdi/react';\nimport { Close } from '@mui/icons-material';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n Slide,\n Box,\n Container,\n Grid,\n TextField,\n MenuItem,\n Checkbox,\n FormControlLabel,\n InputAdornment,\n IconButton,\n Typography,\n} from '@mui/material';\nimport type { TransitionProps } from '@mui/material/transitions';\nimport { DatePicker, DateTimePicker } from '@mui/x-date-pickers';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport type { ChangeEvent, ReactElement, Ref } from 'react';\nimport type {\n Filter,\n FilterDialogProps,\n FilterInputProps,\n FilterOperatorProps,\n FilterProps,\n Operation,\n} from '@judo/components-api';\nimport { FilterType } from '@judo/components-api';\nimport { dateToJudoDateString, exists } from '@judo/utilities';\nimport { mainContainerPadding } from '@judo/theme';\nimport { _BooleanOperation, _EnumerationOperation, _NumericOperation, _StringOperation } from '@judo/data-api-common';\nimport { DropdownButton } from '../DropdownButton';\nimport TrinaryLogicCombobox from '../TrinaryLogicCombobox';\n\nconst getDefaultOperator = (filterType: FilterType) => {\n switch (filterType) {\n case FilterType.boolean:\n return _BooleanOperation['equals'];\n case FilterType.date:\n return _NumericOperation['equal'];\n case FilterType.dateTime:\n return _NumericOperation['equal'];\n // case FilterType.time:\n // return _NumericOperation['equal'];\n case FilterType.enumeration:\n return _EnumerationOperation['equals'];\n case FilterType.numeric:\n return _NumericOperation['equal'];\n case FilterType.string:\n return _StringOperation['equal'];\n case FilterType.trinaryLogic:\n return _BooleanOperation['equals'];\n }\n};\n\nconst getOperationEnumValue = (filter: Filter, operator: string) => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return _BooleanOperation[operator as keyof typeof _BooleanOperation];\n case FilterType.date:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.dateTime:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n // case FilterType.time:\n // return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.enumeration:\n return _EnumerationOperation[operator as keyof typeof _BooleanOperation];\n case FilterType.numeric:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.string:\n return _StringOperation[operator as keyof typeof _StringOperation];\n case FilterType.trinaryLogic:\n return _BooleanOperation[operator as keyof typeof _BooleanOperation];\n }\n};\n\nconst getOperatorsByFilter = (filter: Filter): string[] => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return Object.values(_BooleanOperation);\n case FilterType.date:\n return Object.values(_NumericOperation);\n case FilterType.dateTime:\n return Object.values(_NumericOperation);\n // case FilterType.time:\n // return Object.values(_NumericOperation);\n case FilterType.enumeration:\n return Object.values(_EnumerationOperation);\n case FilterType.numeric:\n return Object.values(_NumericOperation);\n case FilterType.string:\n return Object.values(_StringOperation);\n case FilterType.trinaryLogic:\n return Object.values(_BooleanOperation);\n }\n};\n\nconst FilterOperator = ({ filter, setFilterOperator }: FilterOperatorProps) => {\n const onChangeHandler = (event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n setFilterOperator(filter, getOperationEnumValue(filter, event.target.value));\n };\n\n return (\n <TextField\n name={'operation'}\n id={'operation'}\n label={'Operation'}\n select\n value={filter.filterBy.operator}\n onChange={onChangeHandler}\n >\n {getOperatorsByFilter(filter).map((item) => (\n <MenuItem key={item} value={item}>\n {/* TODO: do not forget localization here*/}\n {item}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nconst FilterInput = ({ filter, setFilterValue }: FilterInputProps) => {\n if (filter.filterOption.filterType === FilterType.enumeration && !exists(filter.filterOption.enumValues)) {\n throw new Error(`Missing enumValues from FilterOptions of ${filter.filterOption.attributeName}`);\n }\n\n return (\n <>\n {(() => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, !!event.target.value)}\n />\n }\n label={filter.filterOption.attributeName}\n />\n );\n case FilterType.date:\n return (\n <DatePicker\n renderInput={(props) => <TextField {...props} />}\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value ?? null}\n onChange={(newValue) => setFilterValue(filter, dateToJudoDateString(newValue))}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiCalendarMonth} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.dateTime:\n return (\n <DateTimePicker\n renderInput={(props) => <TextField {...props} />}\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value ?? null}\n onChange={(newValue) => setFilterValue(filter, newValue)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiCalendarClock} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n // case FilterType.time:\n // return (\n // <TextField\n // label={filter.filterOption.attributeName}\n // value={filter.filterBy.value}\n // onChange={(event) => setFilterValue(filter, event.target.value)}\n // InputProps={{\n // startAdornment: (\n // <InputAdornment position=\"start\">\n // <Icon path={mdiClockOutline} size={1} />\n // </InputAdornment>\n // ),\n // }}\n // />\n // );\n case FilterType.enumeration:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n select\n onChange={(event) => setFilterValue(filter, event.target.value)}\n >\n {filter.filterOption.enumValues?.map((item) => (\n <MenuItem key={item} value={item}>\n {item}\n </MenuItem>\n ))}\n </TextField>\n );\n case FilterType.numeric:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n type=\"number\"\n value={filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, Number(event.target.value))}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiNumeric} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.string:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, event.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiFormatTextVariant} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.trinaryLogic:\n return (\n <TrinaryLogicCombobox\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n onChange={(value) => setFilterValue(filter, value)}\n />\n );\n }\n })()}\n </>\n );\n};\n\nconst FilterRow = ({ filter, closeHandler, setFilterOperator, setFilterValue }: FilterProps) => {\n return (\n <Grid item container spacing={2} alignItems={'center'}>\n <Grid item xs={4}>\n {filter && <FilterOperator filter={filter} setFilterOperator={setFilterOperator} />}\n </Grid>\n <Grid item xs={7}>\n {filter && <FilterInput filter={filter} setFilterValue={setFilterValue} />}\n </Grid>\n <Grid item xs={1}>\n <IconButton onClick={() => closeHandler(filter)}>\n <Close />\n </IconButton>\n </Grid>\n </Grid>\n );\n};\n\nconst Transition = forwardRef(function Transition(\n props: TransitionProps & {\n children: ReactElement<any, any>;\n },\n ref: Ref<unknown>,\n) {\n return <Slide direction=\"left\" ref={ref} {...props} />;\n});\n\nexport const FilterDialog = ({ filters, filterOptions, resolve, open, handleClose }: FilterDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n const [tempFilters, setTempFilters] = useState<Filter[]>(filters ?? []);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const updateFilterValue = (filter: Filter, value: any) => {\n setTempFilters((prevTempFilters) => {\n return prevTempFilters.map((tempFilter) => {\n if (filter.id === tempFilter.id) {\n return {\n ...tempFilter,\n filterBy: { value: value, operator: tempFilter.filterBy.operator },\n };\n }\n\n return tempFilter;\n });\n });\n };\n\n const updateFilterOperator = (filter: Filter, operator: Operation) => {\n setTempFilters((prevTempFilters) => {\n return prevTempFilters.map((tempFilter) => {\n if (filter.id === tempFilter.id) {\n return {\n ...tempFilter,\n filterBy: { value: tempFilter.filterBy.value, operator: operator },\n };\n }\n\n return tempFilter;\n });\n });\n };\n\n const filterCloseHandler = (filter: Filter) => {\n setTempFilters((prevTempFilters) => [...prevTempFilters.filter((tempFilter) => tempFilter.id !== filter.id)]);\n };\n\n const cancel = () => {\n handleClose();\n resolve(undefined);\n };\n\n const ok = () => {\n handleClose();\n resolve(tempFilters);\n };\n\n return (\n <Dialog\n open={open}\n onClose={cancel}\n scroll=\"paper\"\n TransitionComponent={Transition}\n disableEnforceFocus\n fullWidth\n maxWidth=\"sm\"\n sx={{\n '& .MuiDialog-container': {\n justifyContent: 'flex-end',\n },\n }}\n PaperProps={{\n sx: {\n m: 0,\n height: '100%',\n },\n }}\n >\n <DialogTitle id=\"scroll-dialog-title\">\n <Typography component=\"span\" color=\"text.primary\" variant=\"h5\">\n Filters\n </Typography>\n </DialogTitle>\n <DialogContent dividers={true}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n <Container component=\"main\" maxWidth=\"xs\">\n <Box sx={mainContainerPadding}>\n <Grid container spacing={2}>\n {tempFilters.map((filter) => (\n <FilterRow\n key={filter.id}\n filter={filter}\n closeHandler={filterCloseHandler}\n setFilterOperator={updateFilterOperator}\n setFilterValue={updateFilterValue}\n />\n ))}\n <Grid item container>\n <DropdownButton\n fullWidth={true}\n showDropdownIcon={false}\n menuItems={filterOptions.map((filterOption) => {\n return {\n label: filterOption.label ?? filterOption.attributeName,\n onClick: () =>\n setTempFilters((prevTempFilters) => [\n ...prevTempFilters,\n {\n id: prevTempFilters.length,\n filterOption: {\n attributeName: filterOption.attributeName,\n label: filterOption.label,\n filterType: filterOption.filterType,\n },\n filterBy: {\n operator: getDefaultOperator(filterOption.filterType),\n },\n },\n ]),\n };\n })}\n >\n Add new filter\n </DropdownButton>\n </Grid>\n </Grid>\n </Box>\n </Container>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button fullWidth variant=\"outlined\" onClick={cancel}>\n Cancel\n </Button>\n <Button fullWidth onClick={ok}>\n Apply {'(' + tempFilters.length + ')'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { Dialog, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { useEffect, useRef } from 'react';\nimport type { ReactNode } from 'react';\n\ninterface PageDialogProps {\n page: ReactNode;\n open: boolean;\n handleClose: () => void;\n resolve: () => void;\n}\n\nexport const PageDialog = ({ page, open, handleClose, resolve }: PageDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const ok = () => {\n resolve();\n handleClose();\n };\n\n return (\n <Dialog open={open} onClose={ok} scroll=\"paper\">\n <DialogContent dividers={true}>\n <DialogContentText ref={descriptionElementRef} tabIndex={-1}>\n {page}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={ok}>Ok</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { TablePagination } from '@mui/material';\nimport type { MouseEvent, Dispatch, SetStateAction } from 'react';\n\nexport interface CustomTablePaginationProps {\n pageChange: (isNext: boolean) => Promise<void>;\n isNextButtonEnabled: boolean;\n page: number;\n rowPerPage: number;\n setPage: Dispatch<SetStateAction<number>>;\n}\n\nexport const CustomTablePagination = (props: CustomTablePaginationProps) => {\n const handleChangePage = async (event: MouseEvent<HTMLButtonElement> | null, newPage: number) => {\n let isNext = true;\n if (newPage < props.page) {\n isNext = false;\n }\n\n props.setPage(newPage);\n\n await props.pageChange(isNext);\n };\n\n return (\n <TablePagination\n component=\"div\"\n count={-1}\n page={props.page}\n onPageChange={handleChangePage}\n rowsPerPage={props.rowPerPage}\n rowsPerPageOptions={[props.rowPerPage]}\n labelDisplayedRows={({ from, to }) => `${from}–${to}`}\n nextIconButtonProps={{\n disabled: !props.isNextButtonEnabled,\n }}\n backIconButtonProps={{\n disabled: props.page === 0,\n }}\n />\n );\n};\n","import { createContext, useContext } from 'react';\nimport {\n ConfirmDialogProviderContext,\n FilterDialogProviderContext,\n PageDialogProviderContext,\n RangeDialogProviderContext,\n} from '@judo/components-api';\n\n// @ts-ignore\nexport const PageDialogContextState = createContext<PageDialogProviderContext>();\n\n// @ts-ignore\nexport const ConfirmDialogContextState = createContext<ConfirmDialogProviderContext>();\n\n// @ts-ignore\nexport const RangeDialogContextState = createContext<RangeDialogProviderContext>();\n\n// @ts-ignore\nexport const FilterDialogContextState = createContext<FilterDialogProviderContext>();\n\nexport const useFilterDialog = () => {\n const context = useContext(FilterDialogContextState);\n\n if (context === undefined) {\n throw new Error('useFilterDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst usePageDialog = () => {\n const context = useContext(PageDialogContextState);\n\n if (context === undefined) {\n throw new Error('useConfirmDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst useConfirmDialog = () => {\n const context = useContext(ConfirmDialogContextState);\n\n if (context === undefined) {\n throw new Error('useConfirmDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst useRangeDialog = () => {\n const context = useContext(RangeDialogContextState);\n\n if (context === undefined) {\n throw new Error('useRangeDialog was used outside of its Provider');\n }\n\n return context;\n};\n","import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport {\n GridSortModel,\n GridRowModel,\n DataGrid,\n GridRowParams,\n GridColumns,\n GridSortItem,\n GridSelectionModel,\n GridToolbarContainer,\n GridRowId,\n} from '@mui/x-data-grid';\nimport { useSnackbar } from 'notistack';\nimport { useEffect, useRef, useState } from 'react';\nimport type { JudoStored, QueryCustomizer } from '@judo/data-api-common';\nimport type { Filter, FilterOption } from '@judo/components-api';\nimport { errorHandling } from '@judo/utilities';\nimport { CustomTablePagination } from '../CustomTablePagination';\nimport { useFilterDialog } from './hooks';\n\ninterface RangeDialogProps<T extends JudoStored<T>, U extends QueryCustomizer<T>> {\n resolve: (value: any) => void;\n open: boolean;\n handleClose: () => void;\n single?: boolean;\n columns: GridColumns<T>;\n defaultSortField: GridSortItem;\n rangeCall: (queryCustomizer: U) => Promise<Array<T>>;\n alreadySelectedItems: GridSelectionModel | GridRowId;\n initalQueryCustomizer: U;\n filterOptions: FilterOption[];\n}\n\nexport const RangeDialog = <T extends JudoStored<T>, U extends QueryCustomizer<T>>({\n resolve,\n open,\n handleClose,\n single = false,\n columns,\n defaultSortField,\n rangeCall,\n alreadySelectedItems,\n initalQueryCustomizer,\n filterOptions,\n}: RangeDialogProps<T, U>) => {\n const { openFilterDialog } = useFilterDialog();\n const { enqueueSnackbar } = useSnackbar();\n\n const descriptionElementRef = useRef<HTMLElement>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [rowCount, setRowCount] = useState<number>(0);\n const [sortModel, setSortModel] = useState<GridSortModel>([defaultSortField]);\n const [lastItem, setLastItem] = useState<T>();\n const [firstItem, setFirstItem] = useState<T>();\n const [isNextButtonEnabled, setIsNextButtonEnabled] = useState<boolean>(true);\n const [page, setPage] = useState<number>(0);\n const [data, setData] = useState<GridRowModel<T>[]>([]);\n const [selectionModel, setSelectionModel] = useState<GridSelectionModel | GridRowId | undefined>(\n alreadySelectedItems ?? (single ? undefined : []),\n );\n const [selectedItems, setSelectedItems] = useState<T[] | T | undefined>([]);\n const [filters, setFilters] = useState<Filter[]>([]);\n const [queryCustomizer, setQueryCustomizer] = useState<U>({\n ...initalQueryCustomizer,\n _seek: {\n limit: 6,\n },\n });\n\n const handlePageChange = async (isNext: boolean) => {\n setQueryCustomizer((prevQueryCustomizer) => {\n return {\n ...prevQueryCustomizer,\n _seek: {\n limit: isNext ? 6 : 5,\n reverse: !isNext,\n lastItem: isNext ? lastItem : firstItem,\n },\n };\n });\n\n setIsNextButtonEnabled(!isNext);\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n try {\n const res = await rangeCall(queryCustomizer);\n\n if (res.length > 5) {\n setIsNextButtonEnabled(true);\n res.pop();\n } else if (queryCustomizer._seek?.limit === 6) {\n setIsNextButtonEnabled(false);\n }\n\n setData(res);\n setFirstItem(res[0]);\n setLastItem(res[res.length - 1]);\n setRowCount(res.length || 0);\n } catch (error) {\n errorHandling(error, enqueueSnackbar);\n }\n setIsLoading(false);\n };\n\n const handleFiltersChange = (newFilters: Filter[]) => {\n setPage(0);\n setFilters(newFilters);\n\n // @ts-ignore\n setQueryCustomizer((prevQueryCustomizer) => {\n const tempQueryCustomizer = { ...prevQueryCustomizer };\n\n filterOptions.forEach(\n (filter) =>\n // @ts-ignore\n (tempQueryCustomizer[filter.attributeName] = mapFiltersToQueryCustomizerProperty(\n newFilters,\n filter.attributeName,\n )),\n );\n\n return {\n ...prevQueryCustomizer,\n _seek: {\n lastItem: undefined,\n limit: 6,\n reverse: undefined,\n },\n ...tempQueryCustomizer,\n };\n });\n };\n\n const handleSortModelChange = (newModel: GridSortModel) => {\n setPage(0);\n setSortModel(newModel);\n\n const { field, sort } = newModel[0];\n\n setQueryCustomizer((prevQueryCustomizer) => {\n return {\n ...prevQueryCustomizer,\n _orderBy: [{ attribute: field, descending: sort === 'desc' }],\n };\n });\n };\n\n // useEffect(() => {\n // setPage(0);\n // const { field, sort } = sortModel[0];\n\n // setQueryCustomizer((prevQueryCustomizer) => {\n // const tempQueryCustomizer = { ...prevQueryCustomizer };\n\n // filterOptions.forEach(\n // (filter) =>\n // // @ts-ignore\n // (tempQueryCustomizer[filter.attributeName] = mapFiltersToQueryCustomizerProperty(\n // filters,\n // filter.attributeName,\n // )),\n // );\n\n // return {\n // ...prevQueryCustomizer,\n // _seek: {\n // lastItem: undefined,\n // limit: 6,\n // reverse: undefined,\n // },\n // _orderBy: [{ attribute: field, descending: sort === 'desc' }],\n // ...tempQueryCustomizer,\n // };\n // });\n // }, [sortModel, filters]);\n\n useEffect(() => {\n fetchData();\n }, [queryCustomizer]);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const cancel = () => {\n handleClose();\n resolve(undefined);\n };\n\n const ok = () => {\n handleClose();\n resolve(selectedItems);\n };\n\n const handleOnSelection = (newSelectionModel: GridSelectionModel) => {\n if (!Array.isArray(selectionModel)) return;\n\n // added new items\n if (newSelectionModel.length > selectionModel.length) {\n const diff = newSelectionModel.length - selectionModel.length;\n const newItemsId = [...newSelectionModel].slice(diff * -1);\n const newItems = data.filter((value) => newItemsId.indexOf(value.__identifier as GridRowId) !== -1);\n setSelectedItems((prevSelectedItems) => {\n if (!Array.isArray(prevSelectedItems)) return;\n\n return [...prevSelectedItems, ...newItems];\n });\n }\n\n // removed items\n if (newSelectionModel.length < selectionModel.length) {\n const removedItemsId = selectionModel.filter((value) => newSelectionModel.indexOf(value) === -1);\n setSelectedItems((prevSelectedItems) => {\n if (!Array.isArray(prevSelectedItems)) return;\n\n return [...prevSelectedItems.filter((value) => removedItemsId.indexOf(value.__identifier as GridRowId) === -1)];\n });\n }\n\n setSelectionModel(newSelectionModel);\n };\n\n const handleSingleOnSelection = (newSelectionModel: GridSelectionModel) => {\n if (Array.isArray(selectionModel)) return;\n\n if (newSelectionModel.length === 0) {\n setSelectionModel('');\n setSelectedItems(undefined);\n return;\n }\n\n const lastId = newSelectionModel[newSelectionModel.length - 1];\n\n setSelectionModel(lastId);\n setSelectedItems(data.find((value) => value.__identifier === lastId));\n };\n\n const handleIsRowSelectable = (params: GridRowParams<T>) => {\n if (alreadySelectedItems) {\n if (!Array.isArray(alreadySelectedItems)) throw Error('Range dialog gets wrong alreadySelectedItems.');\n\n return !alreadySelectedItems.includes(params.id);\n }\n\n return true;\n };\n\n return (\n <Dialog open={open} onClose={cancel} scroll=\"paper\" fullWidth={true} maxWidth={'sm'}>\n <DialogTitle id=\"scroll-dialog-title\">Select</DialogTitle>\n <DialogContent dividers={true}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n <DataGrid\n sx={\n single\n ? {\n '.MuiDataGrid-columnHeaderCheckbox .MuiDataGrid-columnHeaderTitleContainer': {\n display: 'none',\n },\n }\n : undefined\n }\n autoHeight\n getRowId={(row: T) => row.__identifier as GridRowId}\n loading={isLoading}\n paginationMode=\"server\"\n rows={data}\n rowCount={rowCount}\n sortingOrder={['desc', 'asc']}\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n checkboxSelection\n onSelectionModelChange={!single ? handleOnSelection : handleSingleOnSelection}\n isRowSelectable={!single ? handleIsRowSelectable : undefined}\n selectionModel={selectionModel}\n hideFooterSelectedRowCount={single}\n columns={columns}\n keepNonExistentRowsSelected\n components={{\n Toolbar: () => (\n <GridToolbarContainer>\n <Button\n variant=\"outlined\"\n onClick={async () => {\n const newFilters = await openFilterDialog(filterOptions, filters);\n\n if (newFilters) {\n handleFiltersChange(newFilters);\n }\n }}\n disabled={isLoading}\n >\n Set filters {filters.length !== 0 ? '(' + filters.length + ')' : ''}\n </Button>\n </GridToolbarContainer>\n ),\n Pagination: () => (\n <CustomTablePagination\n pageChange={handlePageChange}\n isNextButtonEnabled={isNextButtonEnabled}\n page={page}\n setPage={setPage}\n rowPerPage={5}\n />\n ),\n }}\n />\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={cancel}>Cancel</Button>\n <Button onClick={ok}>Ok</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import type { ColumnActionsProvider, ColumnsActionsOptions, TableRowAction } from '@judo/utilities';\nimport { exists } from '@judo/utilities';\nimport { MoreHoriz } from '@mui/icons-material';\nimport { Button } from '@mui/material';\nimport { GridColDef, GridRenderCellParams } from '@mui/x-data-grid';\nimport { DropdownButton } from '../DropdownButton';\n\nexport const columnsActionCalculator: ColumnActionsProvider<any> = (\n actions: TableRowAction<any>[],\n options?: ColumnsActionsOptions,\n): GridColDef[] => {\n if (!exists(actions) || actions.length === 0) {\n return [];\n }\n\n let shownActionsNumber = 1;\n if (options?.shownActions) {\n shownActionsNumber = actions.length < options.shownActions ? actions.length : options.shownActions;\n }\n\n if (shownActionsNumber < 0) {\n return standaloneActions(actions, options);\n } else if (shownActionsNumber === 0) {\n return [];\n } else if (shownActionsNumber === 1) {\n return dropdownActions(actions, options);\n } else {\n const sliceNumber = actions.length === shownActionsNumber ? shownActionsNumber : shownActionsNumber - 1;\n const standaloneRowActions = actions.slice(0, sliceNumber);\n const dropdownRowActions = actions.slice(sliceNumber);\n\n return [...standaloneActions(standaloneRowActions, options), ...dropdownActions(dropdownRowActions, options)];\n }\n};\n\nconst standaloneActions: ColumnActionsProvider<unknown> = (\n actions: TableRowAction<unknown>[],\n options?: ColumnsActionsOptions,\n): GridColDef[] => {\n return actions.map((action, index) => {\n return {\n field: action.label + index,\n headerName: '',\n align: 'center',\n type: 'actions',\n renderCell: (params: GridRenderCellParams) => {\n return (\n <Button variant=\"text\" onClick={() => action.action(params.row)}>\n {action.icon}\n {(options?.showLabel ?? true) && action.label}\n </Button>\n );\n },\n };\n });\n};\n\nconst dropdownActions: ColumnActionsProvider<unknown> = (actions: TableRowAction<unknown>[]): GridColDef[] => {\n if (actions.length === 0) return [];\n\n return [\n {\n field: 'actions',\n headerName: '',\n align: 'center',\n type: 'actions',\n renderCell: (params: GridRenderCellParams) => {\n return (\n <DropdownButton\n variant=\"text\"\n showDropdownIcon={false}\n menuItems={actions.map((action) => {\n return {\n label: action.label,\n startIcon: action.icon,\n onClick: () => action.action(params.row),\n };\n })}\n >\n <MoreHoriz />\n </DropdownButton>\n );\n },\n },\n ];\n};\n","import { Delete, LinkOff, NoteAdd, Visibility } from '@mui/icons-material';\nimport { ButtonBase, Grid, IconButton, InputAdornment, TextField } from '@mui/material';\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { exists } from '@judo/utilities';\n\ninterface AggregationInputProps {\n name?: string;\n id?: string;\n label?: string;\n value: any | undefined | null;\n error?: boolean | undefined;\n helperText?: string | undefined;\n disabled?: boolean | undefined;\n readonly?: boolean | undefined;\n labelList: string[];\n icon?: ReactNode;\n onSet?: () => Promise<void> | undefined;\n onView?: () => void | undefined;\n onCreate?: () => void | undefined;\n onDelete?: () => Promise<void> | undefined;\n onRemove?: () => void | undefined;\n}\n\ninterface ViewIconsProps {\n value: any | undefined | null;\n disabled: boolean;\n onView?: () => void | undefined;\n onCreate?: () => void | undefined;\n onDelete?: () => Promise<void> | undefined;\n}\n\ninterface EditIconsProps {\n value: any | undefined | null;\n disabled: boolean;\n onRemove?: () => void | undefined;\n}\n\nexport const AggregationInput = ({\n name,\n id,\n label,\n value,\n error = false,\n helperText,\n disabled = false,\n readonly = true,\n labelList,\n icon,\n onSet,\n onView,\n onCreate,\n onRemove,\n onDelete,\n}: AggregationInputProps) => {\n const [focused, setFocused] = useState(false);\n\n let icons: ReactNode;\n\n if (readonly) {\n icons = <ViewIcons value={value} disabled={disabled} onCreate={onCreate} onView={onView} onDelete={onDelete} />;\n } else {\n icons = <EditIcons value={value} disabled={disabled} onRemove={onRemove} />;\n }\n\n return (\n <Grid container item direction=\"row\" justifyContent=\"stretch\" alignContent=\"stretch\">\n <ButtonBase\n sx={{ padding: 0 }}\n disabled={disabled || readonly}\n onFocusCapture={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n onClick={onSet}\n >\n <TextField\n disabled={!onSet || disabled}\n name={name}\n id={id}\n label={label}\n error={error}\n helperText={helperText}\n focused={focused}\n fullWidth\n value={labelList.join(' - ')}\n className={!readonly ? undefined : 'Mui-readOnly'}\n sx={{\n ':hover': {\n cursor: 'pointer',\n },\n '.MuiFilledInput-input:hover': {\n cursor: 'pointer',\n },\n }}\n InputProps={{\n readOnly: true,\n startAdornment: <InputAdornment position=\"start\">{icon}</InputAdornment>,\n }}\n />\n </ButtonBase>\n {icons}\n </Grid>\n );\n};\n\nconst ViewIcons = ({ value, disabled, onCreate, onDelete, onView }: ViewIconsProps) => {\n let icons: ReactNode;\n\n if (exists(value)) {\n icons = (\n <>\n {onView && (\n <IconButton disabled={disabled} onClick={onView}>\n <Visibility />\n </IconButton>\n )}\n {onDelete && (\n <IconButton disabled={disabled} onClick={onDelete}>\n <Delete />\n </IconButton>\n )}\n </>\n );\n } else {\n icons = (\n <>\n {onCreate && (\n <IconButton disabled={disabled} onClick={onCreate}>\n <NoteAdd />\n </IconButton>\n )}\n </>\n );\n }\n\n return <>{icons}</>;\n};\n\nconst EditIcons = ({ value, disabled, onRemove }: EditIconsProps) => {\n let icons: ReactNode;\n\n if (exists(value)) {\n icons = (\n <>\n {onRemove && (\n <IconButton disabled={disabled} onClick={onRemove}>\n <LinkOff />\n </IconButton>\n )}\n </>\n );\n } else {\n icons = <></>;\n }\n\n return <>{icons}</>;\n};\n","import { Home } from '@mui/icons-material';\nimport { Breadcrumbs, Typography } from '@mui/material';\nimport { useState, useContext, createContext, useMemo, useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport type { To } from 'react-router-dom';\n\ninterface BreadcrumbProviderProps {\n children: ReactNode;\n}\n\nexport type JudoNavigationSetTitle = (pageTitle: string) => void;\n\ninterface JudoNavigationProviderContext {\n clearNavigate: (to: To) => void;\n navigate: (to: To) => void;\n back: () => void;\n isBackDisabled: boolean;\n setTitle: JudoNavigationSetTitle;\n}\n\ninterface BreadcrumbItem {\n key: string;\n path: To;\n label: string | null;\n}\n\n// @ts-ignore\nconst JudoNavigationContextState = createContext<JudoNavigationProviderContext>();\n\nconst BreadcrumbContextState = createContext<BreadcrumbItem[]>([]);\n\nexport const useJudoNavigation = () => {\n const context = useContext(JudoNavigationContextState);\n\n if (context === undefined) {\n throw new Error('useJudoNavigation was used outside of its Provider');\n }\n\n return context;\n};\n\nexport const BreadcrumbProvider = ({ children }: BreadcrumbProviderProps) => {\n const navigate = useNavigate();\n const location = useLocation();\n\n const [breadcrumbItems, setBreadcrumbItems] = useState<BreadcrumbItem[]>([]);\n const [nextBreadcrumbItem, setNextBreadcrumbItem] = useState<BreadcrumbItem>({} as any);\n\n useEffect(() => {\n setNextBreadcrumbItem((prevNextBreadcrumbItem) => {\n return {\n ...prevNextBreadcrumbItem,\n key: '0.' + location.pathname,\n path: location.pathname,\n };\n });\n }, []);\n\n const isBackDisabled = useMemo(() => {\n return breadcrumbItems.length === 0;\n }, [breadcrumbItems]);\n\n const judoNavigationContext = {\n clearNavigate: (to: To) => {\n setBreadcrumbItems([]);\n setNextBreadcrumbItem({\n key: '0.' + to.toString(),\n label: null,\n path: to,\n });\n\n navigate(to);\n },\n navigate: (to: To) => {\n if (nextBreadcrumbItem.label === null) {\n throw Error('Page title has not been set!');\n }\n\n setBreadcrumbItems((prevBreadCrumbItems) => {\n return [...prevBreadCrumbItems, nextBreadcrumbItem];\n });\n\n setNextBreadcrumbItem({\n key: breadcrumbItems.length + '.' + to.toString(),\n label: null,\n path: to,\n });\n\n navigate(to);\n },\n back: () => {\n if (breadcrumbItems.length !== 0) {\n const lastItem = breadcrumbItems[breadcrumbItems.length - 1];\n setNextBreadcrumbItem(lastItem);\n setBreadcrumbItems((prevBreadcrumbItems) => {\n return [...prevBreadcrumbItems.slice(0, prevBreadcrumbItems.length - 1)];\n });\n navigate(lastItem.path);\n return;\n }\n\n setBreadcrumbItems([]);\n setNextBreadcrumbItem({\n key: '0.' + '/'.toString(),\n label: null,\n path: '/',\n });\n\n navigate('/');\n },\n isBackDisabled: isBackDisabled,\n setTitle: (pageTitle: string) => {\n setNextBreadcrumbItem((prevNextBreadcrumbItem) => {\n return { ...prevNextBreadcrumbItem, label: pageTitle };\n });\n },\n };\n\n return (\n <BreadcrumbContextState.Provider value={breadcrumbItems}>\n <JudoNavigationContextState.Provider value={judoNavigationContext}>\n {children}\n </JudoNavigationContextState.Provider>\n </BreadcrumbContextState.Provider>\n );\n};\n\nexport const CustomBreadcrumb = () => {\n const breadcrumbItems = useContext(BreadcrumbContextState);\n\n return (\n <Breadcrumbs maxItems={2} separator=\">\">\n <Home />\n {breadcrumbItems.map(({ label, key }, index) => {\n return (\n <Typography color=\"text.primary\" key={key}>\n {label}\n </Typography>\n );\n })}\n </Breadcrumbs>\n );\n};\n","import type { JudoTreeItemProps, MenuProps, StyledTreeItemProps } from '@judo/components-api';\nimport { ArrowDropDown, ArrowRight } from '@mui/icons-material';\nimport { Box, styled, Typography } from '@mui/material';\nimport { TreeItem, treeItemClasses } from '@mui/lab';\nimport { useIntl } from 'react-intl';\nimport { TreeView } from '@mui/lab';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\ndeclare module 'react' {\n interface CSSProperties {\n '--tree-view-color'?: string;\n '--tree-view-bg-color'?: string;\n }\n}\n\nconst StyledTreeItemRoot = styled(TreeItem)(({ theme }) => ({\n color: theme.palette.text.secondary,\n [`& .${treeItemClasses.content}`]: {\n ['& .MuiIcon-root']: {\n marginRight: '.25em',\n },\n color: theme.palette.text.secondary,\n // borderTopRightRadius: theme.spacing(2),\n // borderBottomRightRadius: theme.spacing(2),\n // paddingRight: theme.spacing(1),\n padding: 0,\n marginBottom: '1rem',\n width: 'auto',\n fontWeight: theme.typography.fontWeightMedium,\n '&.Mui-expanded': {\n fontWeight: theme.typography.fontWeightRegular,\n },\n '&:hover': {\n // backgroundColor: theme.palette.action.hover,\n backgroundColor: 'inherit',\n },\n '&.Mui-focused, &.Mui-selected, &.Mui-selected.Mui-focused': {\n // backgroundColor: `var(--tree-view-bg-color, ${theme.palette.action.selected})`,\n backgroundColor: 'inherit',\n color: 'var(--tree-view-color)',\n },\n [`& .${treeItemClasses.label}`]: {\n fontWeight: 'inherit',\n color: 'inherit',\n },\n },\n [`& .${treeItemClasses.group}`]: {\n marginLeft: 0,\n [`& .${treeItemClasses.content}`]: {\n paddingLeft: theme.spacing(2),\n },\n },\n}));\n\nfunction StyledTreeItem(props: StyledTreeItemProps) {\n const { bgColor, color, labelIcon: LabelIcon, labelInfo, labelText, ...other } = props;\n\n return (\n <StyledTreeItemRoot\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', p: 0.5, pr: 0 }}>\n <Box component={LabelIcon} color=\"inherit\" sx={{ marginRight: 1 }} />\n <Typography variant=\"body2\" sx={{ fontWeight: 'inherit', flexGrow: 1 }}>\n {labelText}\n </Typography>\n <Typography variant=\"caption\" color=\"inherit\">\n {labelInfo}\n </Typography>\n </Box>\n }\n style={{\n '--tree-view-color': color,\n '--tree-view-bg-color': bgColor,\n }}\n {...other}\n />\n );\n}\n\nexport const MenuTree = ({ items, height, maxWidth, defaultExpanded }: MenuProps) => {\n const { clearNavigate } = useJudoNavigation();\n const intl = useIntl();\n\n return (\n <TreeView\n aria-label=\"MenuTree\"\n defaultExpanded={defaultExpanded}\n defaultCollapseIcon={<ArrowDropDown />}\n defaultExpandIcon={<ArrowRight />}\n defaultEndIcon={<div style={{ width: 24 }} />}\n sx={{ height, flexGrow: 1, maxWidth, overflowY: 'auto' }}\n >\n {items.map(({ labelText, to, items, ...iRest }: JudoTreeItemProps) => (\n <StyledTreeItem\n nodeId={labelText}\n labelText={intl.formatMessage({ id: `menuTree.${labelText}`, defaultMessage: labelText })}\n onClick={() => to && clearNavigate(to)}\n to={to}\n {...iRest}\n >\n {items &&\n items.map(({ labelText: jLabelText, to: jTo, ...jRest }: JudoTreeItemProps) => (\n <StyledTreeItem\n nodeId={jLabelText}\n labelText={intl.formatMessage({ id: `menuTree.${jLabelText}`, defaultMessage: jLabelText })}\n onClick={() => clearNavigate(jTo)}\n to={jTo}\n {...jRest}\n />\n ))}\n </StyledTreeItem>\n ))}\n </TreeView>\n );\n};\n","import { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { ConfirmationDialog } from './ConfirmationDialog';\nimport { FilterDialog } from './FilterDialog';\nimport { PageDialog } from './PageDialog';\nimport { RangeDialog } from './RangeDialog';\nimport type {\n ConfirmDialogProviderContext,\n DialogProviderProps,\n FilterDialogProviderContext,\n OpenRangeDialogProps,\n PageDialogProviderContext,\n RangeDialogProviderContext,\n} from '@judo/components-api';\nimport type { Filter, FilterOption } from '@judo/components-api';\nimport type { JudoStored, QueryCustomizer } from '@judo/data-api-common';\nimport {\n ConfirmDialogContextState,\n FilterDialogContextState,\n PageDialogContextState,\n RangeDialogContextState,\n} from './hooks';\n\nexport const DialogProvider = ({ children }: DialogProviderProps) => {\n // Page Dialog\n const [isOpenPageDialog, setIsOpenPageDialog] = useState(false);\n const [pageDialog, setPageDialog] = useState<ReactNode>();\n\n const handleClosePageDialog = () => {\n setIsOpenPageDialog(false);\n };\n\n const handleOpenPageDialog = async (page: ReactNode) => {\n setIsOpenPageDialog(true);\n return new Promise<void>((resolve) => {\n setPageDialog(<PageDialog page={page} handleClose={handleClosePageDialog} open={true} resolve={resolve} />);\n });\n };\n\n const pageDialogContext: PageDialogProviderContext = {\n openPageDialog: handleOpenPageDialog,\n };\n\n // Range Dialog\n const [isOpenRangeDialog, setIsOpenRangeDialog] = useState(false);\n const [rangeDialog, setRangeDialog] = useState<ReactNode>();\n\n const handleCloseRangeDialog = () => {\n setIsOpenRangeDialog(false);\n };\n\n const handleOpenRangeDialog = async <T extends JudoStored<T>, U extends QueryCustomizer<T>>({\n columns,\n defaultSortField,\n rangeCall,\n single = false,\n alreadySelectedItems,\n filterOptions,\n initialQueryCustomizer,\n }: OpenRangeDialogProps<T, U>) => {\n setIsOpenRangeDialog(true);\n\n return new Promise<T[] | T>((resolve) => {\n setRangeDialog(\n <RangeDialog<T, U>\n handleClose={handleCloseRangeDialog}\n open={true}\n resolve={resolve}\n columns={columns}\n defaultSortField={defaultSortField}\n rangeCall={rangeCall}\n single={single}\n alreadySelectedItems={alreadySelectedItems}\n filterOptions={filterOptions}\n initalQueryCustomizer={initialQueryCustomizer}\n />,\n );\n });\n };\n\n const customDialogContext: RangeDialogProviderContext = {\n openRangeDialog: handleOpenRangeDialog,\n };\n\n // Confirmation Dialog\n const [isOpenConfirmDialog, setIsOpenConfirmDialog] = useState(false);\n const [confirmDialog, setConfirmDialog] = useState<ReactNode>();\n\n const handleCloseConfirmDialog = () => {\n setIsOpenConfirmDialog(false);\n return false;\n };\n\n const handleOpenConfirmDialog = async (confirmationMessage: string | ReactNode, title?: string | ReactNode) => {\n setIsOpenConfirmDialog(true);\n\n return new Promise<boolean>((resolve) => {\n setConfirmDialog(\n <ConfirmationDialog\n confirmationMessage={confirmationMessage}\n title={title}\n handleClose={handleCloseConfirmDialog}\n open={true}\n resolve={resolve}\n />,\n );\n });\n };\n\n const confirmDialogContext: ConfirmDialogProviderContext = {\n openConfirmDialog: handleOpenConfirmDialog,\n };\n\n // Filter dialog\n const [isOpenFilterDialog, setIsOpenFilterDialog] = useState(false);\n const [filterDialog, setFilterDialog] = useState<ReactNode>();\n\n const handleCloseFilterDialog = () => {\n setIsOpenFilterDialog(false);\n return false;\n };\n\n const handleOpenFilterDialog = async (filterOptions: FilterOption[], filters?: Filter[]) => {\n setIsOpenFilterDialog(true);\n\n return new Promise<Filter[]>((resolve) => {\n setFilterDialog(\n <FilterDialog\n filters={filters}\n filterOptions={filterOptions}\n handleClose={handleCloseFilterDialog}\n open={true}\n resolve={resolve}\n />,\n );\n });\n };\n\n const filterDialogContext: FilterDialogProviderContext = {\n openFilterDialog: handleOpenFilterDialog,\n };\n\n return (\n <PageDialogContextState.Provider value={pageDialogContext}>\n <ConfirmDialogContextState.Provider value={confirmDialogContext}>\n <RangeDialogContextState.Provider value={customDialogContext}>\n <FilterDialogContextState.Provider value={filterDialogContext}>\n {children}\n {isOpenPageDialog && pageDialog}\n {isOpenConfirmDialog && confirmDialog}\n {isOpenRangeDialog && rangeDialog}\n {isOpenFilterDialog && filterDialog}\n </FilterDialogContextState.Provider>\n </RangeDialogContextState.Provider>\n </ConfirmDialogContextState.Provider>\n </PageDialogContextState.Provider>\n );\n};\n","import { Box, Typography } from '@mui/material';\nimport type { HeroProps } from '@judo/components-api';\n\nexport function Hero(props: HeroProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <img\n src={props.imgSrc}\n alt=\"hero\"\n style={{\n width: '4rem',\n marginRight: '1rem',\n }}\n />\n <Typography\n sx={{\n fontSize: 18,\n fontWeight: 'bold',\n color: 'secondary.main',\n }}\n >\n {props.text}\n </Typography>\n </Box>\n );\n}\n","import { Box, Typography } from '@mui/material';\nimport type { LogoProps } from '@judo/components-api';\n\nexport function Logo(props: LogoProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <img\n src={props.imgSrc}\n alt=\"logo\"\n style={{\n width: '100%',\n }}\n />\n <Typography\n sx={{\n fontSize: 18,\n fontWeight: 'bold',\n }}\n >\n {props.subTitle}\n </Typography>\n </Box>\n );\n}\n","import { AppBar, Toolbar, Grid, Typography, Divider } from '@mui/material';\nimport { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\ninterface PageHeaderProps {\n title: string;\n children: ReactNode;\n}\n\nexport const PageHeader = ({ title, children }: PageHeaderProps) => {\n const { setTitle } = useJudoNavigation();\n\n useEffect(() => {\n setTitle(title);\n }, [title]);\n\n return (\n <>\n <AppBar component=\"div\" position=\"static\" elevation={0} sx={{ zIndex: 0 }}>\n <Toolbar>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item xs>\n <Typography component=\"span\" color=\"text.primary\" variant=\"h5\">\n {title}\n </Typography>\n </Grid>\n {children}\n </Grid>\n </Toolbar>\n </AppBar>\n <Divider />\n </>\n );\n};\n"],"names":["ConfirmationDialog","confirmationMessage","title","resolve","open","handleClose","descriptionElementRef","useRef","useEffect","current","descriptionElement","focus","_jsxs","Dialog","onClose","scroll","fullWidth","maxWidth","children","_jsx","jsx","DialogTitle","id","DialogContent","dividers","DialogContentText","ref","tabIndex","DialogActions","Button","variant","onClick","TRINARY_LOGIC","Map","FilterType","e","i","t","r","location","preventDuplicate","persist","duration","autoHideDuration","setValidation","forEach","set","code","a","o","message","marginTop","marginBottom","display","flexDirection","alignItems","palette","mode","primary","main","secondary","text","background","default","subtitleColor","typography","h5","fontWeight","fontSize","letterSpacing","shape","borderRadius","components","MuiTab","defaultProps","disableRipple","mixins","toolbar","minHeight","l","DropdownButton","menuItems","disabled","showDropdownIcon","setOpen","useState","anchorRef","event","contains","target","handleListKeyDown","key","preventDefault","prevOpen","jsxs","_Fragment","Fragment","endIcon","KeyboardArrowDown","Popper","anchorEl","placement","transition","style","zIndex","minWidth","scrollWidth","TransitionProps","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","filter","menuItem","visible","map","index","MenuItem","label","startIcon","alpha","spacing","common","white","breakpoints","up","fontWeightMedium","equals","notEquals","lessThan","greaterThan","lessOrEqual","greaterOrEqual","equal","notEqual","matches","like","TrinaryLogicCombobox","readOnly","value","name","error","helperText","onChange","onChangeHandler","Array","from","values","indexOf","keysArray","keys","undefined","TextField","select","get","className","InputProps","startAdornment","InputAdornment","position","CheckBoxOutlined","getDefaultOperator","filterType","boolean","_BooleanOperation","date","dateTime","_NumericOperation","enumeration","_EnumerationOperation","numeric","string","_StringOperation","trinaryLogic","getOperatorsByFilter","filterOption","Object","FilterOperator","setFilterOperator","filterBy","operator","getOperationEnumValue","item","FilterInput","setFilterValue","exists","enumValues","Error","attributeName","FormControlLabel","control","Checkbox","checked","DatePicker","renderInput","props","newValue","toISOString","substring","dateToJudoDateString","Icon","path","mdiCalendarMonth","size","DateTimePicker","mdiCalendarClock","type","Number","mdiNumeric","mdiFormatTextVariant","FilterRow","closeHandler","Grid","container","xs","IconButton","Close","Transition","forwardRef","Slide","direction","FilterDialog","filters","filterOptions","tempFilters","setTempFilters","updateFilterValue","prevTempFilters","tempFilter","updateFilterOperator","filterCloseHandler","cancel","TransitionComponent","disableEnforceFocus","sx","justifyContent","PaperProps","m","height","Typography","component","color","Container","Box","mainContainerPadding","length","PageDialog","page","ok","CustomTablePagination","TablePagination","count","onPageChange","async","newPage","isNext","setPage","pageChange","rowsPerPage","rowPerPage","rowsPerPageOptions","labelDisplayedRows","to","nextIconButtonProps","isNextButtonEnabled","backIconButtonProps","PageDialogContextState","createContext","ConfirmDialogContextState","RangeDialogContextState","FilterDialogContextState","useFilterDialog","context","useContext","RangeDialog","single","columns","defaultSortField","rangeCall","alreadySelectedItems","initalQueryCustomizer","openFilterDialog","enqueueSnackbar","useSnackbar","isLoading","setIsLoading","rowCount","setRowCount","sortModel","setSortModel","lastItem","setLastItem","firstItem","setFirstItem","setIsNextButtonEnabled","data","setData","selectionModel","setSelectionModel","selectedItems","setSelectedItems","setFilters","queryCustomizer","setQueryCustomizer","_seek","limit","handlePageChange","prevQueryCustomizer","reverse","fetchData","res","pop","s","isAxiosError","n","response","status","errorHandling","DataGrid","autoHeight","getRowId","row","__identifier","loading","paginationMode","rows","sortingOrder","sortingMode","onSortModelChange","newModel","field","sort","_orderBy","attribute","descending","checkboxSelection","onSelectionModelChange","newSelectionModel","isArray","lastId","find","diff","newItemsId","slice","newItems","prevSelectedItems","removedItemsId","isRowSelectable","params","includes","hideFooterSelectedRowCount","keepNonExistentRowsSelected","Toolbar","GridToolbarContainer","newFilters","tempQueryCustomizer","mapFiltersToQueryCustomizerProperty","handleFiltersChange","Pagination","standaloneActions","actions","options","action","headerName","align","renderCell","icon","showLabel","dropdownActions","MoreHoriz","ViewIcons","onCreate","onDelete","onView","icons","Visibility","Delete","NoteAdd","EditIcons","onRemove","LinkOff","JudoNavigationContextState","BreadcrumbContextState","useJudoNavigation","StyledTreeItemRoot","styled","TreeItem","theme","treeItemClasses","content","marginRight","padding","width","fontWeightRegular","backgroundColor","group","marginLeft","paddingLeft","StyledTreeItem","bgColor","labelIcon","LabelIcon","labelInfo","labelText","other","p","pr","flexGrow","readonly","labelList","onSet","focused","setFocused","alignContent","ButtonBase","onFocusCapture","onBlur","join","cursor","navigate","useNavigate","useLocation","breadcrumbItems","setBreadcrumbItems","nextBreadcrumbItem","setNextBreadcrumbItem","prevNextBreadcrumbItem","pathname","judoNavigationContext","clearNavigate","toString","prevBreadCrumbItems","back","prevBreadcrumbItems","isBackDisabled","useMemo","setTitle","pageTitle","Provider","Breadcrumbs","maxItems","separator","Home","isOpenPageDialog","setIsOpenPageDialog","pageDialog","setPageDialog","handleClosePageDialog","pageDialogContext","openPageDialog","Promise","isOpenRangeDialog","setIsOpenRangeDialog","rangeDialog","setRangeDialog","handleCloseRangeDialog","customDialogContext","openRangeDialog","initialQueryCustomizer","isOpenConfirmDialog","setIsOpenConfirmDialog","confirmDialog","setConfirmDialog","handleCloseConfirmDialog","confirmDialogContext","openConfirmDialog","isOpenFilterDialog","setIsOpenFilterDialog","filterDialog","setFilterDialog","handleCloseFilterDialog","filterDialogContext","src","imgSrc","alt","subTitle","items","defaultExpanded","intl","useIntl","TreeView","defaultCollapseIcon","ArrowDropDown","defaultExpandIcon","ArrowRight","defaultEndIcon","overflowY","iRest","nodeId","formatMessage","defaultMessage","jLabelText","jTo","jRest","AppBar","elevation","Divider","shownActionsNumber","shownActions","sliceNumber","standaloneRowActions","dropdownRowActions"],"mappings":"wdAIa,MAAAA,EAAqB,EAChCC,sBACAC,QACAC,UACAC,OACAC,kBAEA,MAAMC,EAAwBC,SAAoB,MAClDC,EAAAA,WAAU,KACR,GAAIJ,EAAM,CACR,MAAQK,QAASC,GAAuBJ,EACb,OAAvBI,GACFA,EAAmBC,OAEtB,IACA,CAACP,IAYJ,OACEQ,EAAAA,KAACC,EAAAA,OAAM,CAACT,KAAMA,EAAMU,QAAST,EAAaU,OAAO,QAAQC,WAAW,EAAMC,SAAU,KACjFC,SAAA,CAAAhB,GAASiB,EAACC,IAAAC,EAAWA,aAACC,GAAG,sBAAuBJ,SAAAhB,IACjDiB,EAAAA,IAACI,EAAaA,cAAC,CAAAC,WAAYtB,EAAKgB,SAC9BC,EAACC,IAAAK,EAAiBA,mBAACH,GAAG,4BAA4BI,IAAKpB,EAAuBqB,UAAW,EACtFT,SAAAjB,MAGLW,OAACgB,EAAaA,cAAA,CAAAV,SAAA,CACZC,EAAAA,IAACU,EAAAA,OAAM,CAACC,QAAQ,OAAOC,QAnBd,KACb1B,IACAF,GAAQ,EAAM,EAmBDe,SAAA,OACTC,EAAAA,IAACU,EAAAA,OAAM,CAACC,QAAQ,OAAOC,QAjBlB,KACT1B,IACAF,GAAQ,EAAK,EAiBAe,SAAA,aAGb,EChDEc,EAAgB,IAAIC,IAAI,CAC1B,CAAC,KAAM,WACP,EAAC,EAAM,OACP,EAAC,EAAO,QAGZ,IAAIC,GACJ,SAAWA,GACPA,EAAWA,EAAoB,QAAI,GAAK,UACxCA,EAAWA,EAAoB,QAAI,GAAK,UACxCA,EAAWA,EAAmB,OAAI,GAAK,SACvCA,EAAWA,EAAwB,YAAI,GAAK,cAC5CA,EAAWA,EAAiB,KAAI,GAAK,OACrCA,EAAWA,EAAqB,SAAI,GAAK,WAEzCA,EAAWA,EAAyB,aAAI,GAAK,cAChD,CATD,CASGA,IAAeA,EAAa,CAAA,IChB/B,MAAMC,EAAEA,GAAG,MAAMA,EAAyZC,EAAE,CAACC,EAAEC,EAAEF,KAAK,GAAGD,EAAEE,EAAE,GAAGE,WAAW,GAAGD,EAAE,uDAAuD,CAACR,QAAQ,QAAQU,kBAAiB,EAAGC,SAASL,GAAGM,SAASC,iBAAiBP,GAAGM,eAAU,SAAS,IAASN,GAAGQ,cAAc,CAAC,IAAIT,EAAE,IAAIF,IAAII,EAAEQ,SAASR,GAAGF,EAAEW,IAAIT,EAAEE,SAASF,EAAEU,QAAQX,GAAGQ,cAAcT,EAAG,OAAMG,EAAED,EAAE,GAAGU,KAAK,CAACjB,QAAQ,QAAQU,kBAAiB,EAAGC,SAASL,GAAGM,SAASC,iBAAiBP,GAAGM,eAAU,GAAQ,EAAEM,EAAEb,IAAIA,EAAE,+DAA+D,CAACL,QAAQ,QAAQU,kBAAiB,EAAGC,SAAQ,GAAI,EAAEQ,EAAEd,IAAC,CAAIe,QAAQf,EAAEY,OCAh5BX,EAAE,CAACe,UAAU,EAAEC,aAAa,EAAEC,QAAQ,OAAOC,cAAc,SAASC,WAAW,UAAUlB,EAAEF,cAAE,CAACqB,QAAQ,CAACC,KAAK,QAAQC,QAAQ,CAACC,KAAK,aAAaC,UAAU,CAACD,KAAK,aAAaE,KAAK,CAACH,QAAQ,YAAYE,UAAU,aAAaE,WAAW,CAACC,QAAQ,aAAaC,cAAc,CAACL,KAAK,YAAYM,WAAW,CAACC,GAAG,CAACC,WAAW,IAAIC,SAAS,GAAGC,cAAc,KAAKC,MAAM,CAACC,aAAa,GAAGC,WAAW,CAACC,OAAO,CAACC,aAAa,CAACC,eAAc,KAAMC,OAAO,CAACC,QAAQ,CAACC,UAAU,OCAjgB,IAAI9B,EAAEb,EAAE4C,EAAEzC,ECwBJ,SAAU0C,GAAe9D,SAC7BA,EAAQI,GACRA,EAAE2D,UACFA,EAASC,SACTA,GAAW,EAAKC,iBAChBA,GAAmB,EAAInE,UACvBA,GAAY,EAAKc,QACjBA,EAAU,cAEV,MAAO1B,EAAMgF,GAAWC,EAAQA,UAAC,GAC3BC,EAAY/E,SAA0B,MAMtCF,EAAekF,IACfD,EAAU7E,SAAW6E,EAAU7E,QAAQ+E,SAASD,EAAME,SAI1DL,GAAQ,EAAM,EAGhB,SAASM,EAAkBH,GACP,QAAdA,EAAMI,KACRJ,EAAMK,iBACNR,GAAQ,IACe,WAAdG,EAAMI,KACfP,GAAQ,EAEX,CAGD,MAAMS,EAAWtF,SAAOH,GASxB,OARAI,EAAAA,WAAU,KACJqF,EAASpF,UAAYL,GACvBkF,EAAU7E,QAASE,QAGrBkF,EAASpF,QAAUL,CAAI,GACtB,CAACA,IAGFQ,EACEkF,KAAAC,EAAAC,SAAA,CAAA9E,SAAA,CAAAC,EAAAA,IAACU,EAAAA,OACC,CAAAH,IAAK4D,EACLhE,GAAIA,EACJS,QApCe,KACnBqD,GAASS,IAAcA,GAAS,EAoC5BI,QAASd,GAAoBhE,MAAC+E,EAAiBA,kBAAA,IAC/ChB,SAAUA,EACVlE,UAAWA,EACXc,QAASA,WAERZ,IAEHC,EAAAA,IAACgF,EAAMA,QACL/F,KAAMA,EACNgG,SAAUd,EAAU7E,QACpB4F,UAAU,SACVC,YACA,EAAAC,MAAO,CAAEC,OAAQ,KAAMC,SAAUnB,EAAU7E,SAASiG,aAAaxF,SAEhE,EAAGyF,kBAAiBN,eACnBlF,EAAAA,IAACyF,EAAAA,SACKD,EACJJ,MAAO,CACLM,gBAA+B,iBAAdR,EAA+B,WAAa,eAG/DnF,SAAAC,EAAAC,IAAC0F,QACC,CAAA5F,SAAAC,MAAC4F,EAAAA,kBAAkB,CAAAC,YAAa3G,EAAWa,SACzCC,MAAC8F,EAAQA,SAAA,CAACC,cAAe9G,EAAM+G,UAAWzB,EAAiBxE,SACxD+D,EACEmC,QAAQC,GAAaA,EAASC,UAAW,IACzCC,KAAI,CAACF,EAAUG,IAEZ5G,EAAAA,KAAC6G,EAAAA,SACC,CAAAnG,GAAI+F,EAASK,OAAS,GAAKF,EAC3BtC,SAAUmC,EAASnC,WAAY,EAC/BnD,QAAUwD,IACRlF,EAAYkF,GACZ8B,EAAStF,SAAS,EAGnBb,SAAA,CAAAmG,EAASM,UACTN,EAASK,MACTL,EAASpB,yBAYpC,CF3HqlB5D,EAAEmB,QAAQM,WAAWC,QAAuUd,EAAC2E,MAACvF,EAAEmB,QAAQE,QAAQC,KAAK,KAAoDtB,EAAEmB,QAAQQ,cAAcL,KAAuDtB,EAAEmB,QAAQQ,cAAcL,KAA4OV,EAAAA,MAAEZ,EAAEmB,QAAQI,UAAUD,KAAK,IAA+HtB,EAAEmB,QAAQI,UAAUD,KAA2QV,EAAAA,MAAEZ,EAAEmB,QAAQE,QAAQC,KAAK,IAAyjBtB,EAAEwF,QAAQ,GAAqFxF,EAAEmB,QAAQsE,OAAOC,MAAkG1F,EAAE2F,YAAYC,GAAG,MAA4E5F,EAAEmB,QAAQI,UAAUD,KAAatB,EAAEwF,QAAQ,GAAwSxF,EAAE4B,WAAWiE,iBAAuG7F,EAAEwF,QAAQ,GCA/kG,SAAS7E,GAAGA,EAAEmF,OAAO,SAArB,CAA+BnF,IAAIA,EAAE,CAAE,IAAG,SAASA,GAAGA,EAAEmF,OAAO,SAASnF,EAAEoF,UAAU,WAAY,CAAtD,CAAuDjG,IAAIA,EAAE,CAAA,IAAK,SAASa,GAAGA,EAAEqF,SAAS,WAAWrF,EAAEsF,YAAY,cAActF,EAAEuF,YAAY,cAAcvF,EAAEwF,eAAe,iBAAiBxF,EAAEyF,MAAM,QAAQzF,EAAE0F,SAAS,UAAW,CAAlK,CAAmK3D,IAAIA,EAAE,CAAA,IAAK,SAAS/B,GAAGA,EAAEqF,SAAS,WAAWrF,EAAEsF,YAAY,cAActF,EAAEuF,YAAY,cAAcvF,EAAEwF,eAAe,iBAAiBxF,EAAEyF,MAAM,QAAQzF,EAAE0F,SAAS,WAAW1F,EAAE2F,QAAQ,UAAU3F,EAAE4F,KAAK,MAAO,CAApM,CAAqMtG,IAAIA,EAAE,CAAA,IEgBlf,MAAMuG,EAAuB,EAC3BC,YAAW,EACXC,QAAQ,KACRzH,KACAoG,QACAsB,OACAC,QACAC,aACAC,eAEA,MAAMC,EAAkBD,EACnB5D,IACC,MAAMiC,EAAQ6B,MAAMC,KAAKtH,EAAcuH,UAAUC,QAAQjE,EAAME,OAAOsD,OAChEU,EAAYJ,MAAMC,KAAKtH,EAAc0H,QAC3CP,EAASM,EAAUjC,GAAO,OAE5BmC,EAEJ,OACExI,EAACC,IAAAwI,EAASA,UACR,CAAAZ,KAAMA,EACN1H,GAAIA,EACJoG,MAAOA,EACPmC,QACA,EAAAd,MAAO/G,EAAc8H,IAAIf,GACzBI,SAAUC,EACVW,UAAWjB,EAAW,oBAAiBa,EACvCV,MAAOA,EACPC,WAAYA,EACZc,WAAY,CACVlB,SAAUA,EACVmB,eACE9I,EAACC,IAAA8I,iBAAe,CAAAC,SAAS,QACvBjJ,SAAAC,MAACiJ,EAAAA,iBAAgB,CAAA,MAKtBlJ,SAAAmI,MAAMC,KAAKtH,EAAc0H,QAAQnC,KAAK5B,GACrCxE,EAAAA,IAACsG,EAAQA,SAA8B,CAAAsB,MAAO/G,EAAc8H,IAAInE,GAAIzE,SACjEc,EAAc8H,IAAInE,IADN3D,EAAc8H,IAAInE,OAKrC,ECnBE0E,EAAsBC,IAC1B,OAAQA,GACN,KAAKpI,EAAWqI,QACd,OAAOC,EAA0B,OACnC,KAAKtI,EAAWuI,KAEhB,KAAKvI,EAAWwI,SACd,OAAOC,EAAyB,MAGlC,KAAKzI,EAAW0I,YACd,OAAOC,EAA8B,OACvC,KAAK3I,EAAW4I,QACd,OAAOH,EAAyB,MAClC,KAAKzI,EAAW6I,OACd,OAAOC,EAAwB,MACjC,KAAK9I,EAAW+I,aACd,OAAOT,EAA0B,OACpC,EAwBGU,EAAwB9D,IAC5B,OAAQA,EAAO+D,aAAab,YAC1B,KAAKpI,EAAWqI,QACd,OAAOa,OAAO7B,OAAOiB,GACvB,KAAKtI,EAAWuI,KAEhB,KAAKvI,EAAWwI,SACd,OAAOU,OAAO7B,OAAOoB,GAGvB,KAAKzI,EAAW0I,YACd,OAAOQ,OAAO7B,OAAOsB,GACvB,KAAK3I,EAAW4I,QACd,OAAOM,OAAO7B,OAAOoB,GACvB,KAAKzI,EAAW6I,OACd,OAAOK,OAAO7B,OAAOyB,GACvB,KAAK9I,EAAW+I,aACd,OAAOG,OAAO7B,OAAOiB,GACxB,EAGGa,EAAiB,EAAGjE,SAAQkE,uBAM9BnK,EAAAA,IAACyI,EAAAA,UACC,CAAAZ,KAAM,YACN1H,GAAI,YACJoG,MAAO,YACPmC,QACA,EAAAd,MAAO3B,EAAOmE,SAASC,SACvBrC,SAXqB5D,IACvB+F,EAAkBlE,EA5CQ,EAACA,EAAgBoE,KAC7C,OAAQpE,EAAO+D,aAAab,YAC1B,KAAKpI,EAAWqI,QACd,OAAOC,EAAkBgB,GAC3B,KAAKtJ,EAAWuI,KAEhB,KAAKvI,EAAWwI,SACd,OAAOC,EAAkBa,GAG3B,KAAKtJ,EAAW0I,YACd,OAAOC,EAAsBW,GAC/B,KAAKtJ,EAAW4I,QACd,OAAOH,EAAkBa,GAC3B,KAAKtJ,EAAW6I,OACd,OAAOC,EAAiBQ,GAC1B,KAAKtJ,EAAW+I,aACd,OAAOT,EAAkBgB,GAC5B,EA0B2BC,CAAsBrE,EAAQ7B,EAAME,OAAOsD,OAAO,WAYzEmC,EAAqB9D,GAAQG,KAAKmE,GACjCvK,EAAAA,IAACsG,EAAQA,SAAA,CAAYsB,MAAO2C,EAAIxK,SAE7BwK,GAFYA,OASjBC,EAAc,EAAGvE,SAAQwE,qBAC7B,GAAIxE,EAAO+D,aAAab,aAAepI,EAAW0I,cAAgBiB,EAAOzE,EAAO+D,aAAaW,YAC3F,MAAM,IAAIC,MAAM,4CAA4C3E,EAAO+D,aAAaa,iBAGlF,OACE7K,MAAA4E,EAAAA,SAAA,CAAA7E,SACG,MACC,OAAQkG,EAAO+D,aAAab,YAC1B,KAAKpI,EAAWqI,QACd,OACEpJ,MAAC8K,EAAgBA,iBAAA,CACfC,QACE/K,EAAAC,IAAC+K,EAAQA,SAAA,CACPC,UAAWhF,EAAOmE,SAASxC,MAC3BI,SAAW5D,GAAUqG,EAAexE,IAAU7B,EAAME,OAAOsD,SAG/DrB,MAAON,EAAO+D,aAAaa,gBAGjC,KAAK9J,EAAWuI,KACd,OACEtJ,EAACC,IAAAiL,EAAUA,WACT,CAAAC,YAAcC,GAAUpL,EAAAA,IAACyI,EAASA,UAAK,IAAA2C,IACvC7E,MAAON,EAAO+D,aAAaa,cAC3BjD,MAAO3B,EAAOmE,SAASxC,OAAS,KAChCI,SAAWqD,GAAaZ,EAAexE,EL3JlCjF,IAAGA,EAAEA,EAAEsK,cAAcC,UAAU,EAAE,IAAIvK,EK2JKwK,CAAqBH,IACpExC,WAAY,CACVC,eACE9I,EAACC,IAAA8I,EAAcA,gBAACC,SAAS,QACvBjJ,SAAAC,EAAAA,IAACyL,EAAAA,QAAK,CAAAC,KAAMC,EAAgBA,iBAAEC,KAAM,SAMhD,KAAK7K,EAAWwI,SACd,OACEvJ,MAAC6L,EAAcA,eAAA,CACbV,YAAcC,GAAUpL,EAAAA,IAACyI,EAASA,UAAA,IAAK2C,IACvC7E,MAAON,EAAO+D,aAAaa,cAC3BjD,MAAO3B,EAAOmE,SAASxC,OAAS,KAChCI,SAAWqD,GAAaZ,EAAexE,EAAQoF,GAC/CxC,WAAY,CACVC,eACE9I,EAACC,IAAA8I,EAAcA,gBAACC,SAAS,QACvBjJ,SAAAC,EAAAA,IAACyL,EAAAA,QAAK,CAAAC,KAAMI,EAAgBA,iBAAEF,KAAM,SAqBhD,KAAK7K,EAAW0I,YACd,OACEzJ,EAAAA,IAACyI,EAAAA,UAAS,CACRlC,MAAON,EAAO+D,aAAaa,cAC3BjD,MAAO3B,EAAOmE,SAASxC,MACvBc,QAAM,EACNV,SAAW5D,GAAUqG,EAAexE,EAAQ7B,EAAME,OAAOsD,OAAM7H,SAE9DkG,EAAO+D,aAAaW,YAAYvE,KAAKmE,GACpCvK,EAACC,IAAAqG,EAAQA,SAAY,CAAAsB,MAAO2C,EAAIxK,SAC7BwK,GADYA,OAMvB,KAAKxJ,EAAW4I,QACd,OACE3J,MAACyI,EAAAA,UAAS,CACRlC,MAAON,EAAO+D,aAAaa,cAC3BkB,KAAK,SACLnE,MAAO3B,EAAOmE,SAASxC,MACvBI,SAAW5D,GAAUqG,EAAexE,EAAQ+F,OAAO5H,EAAME,OAAOsD,QAChEiB,WAAY,CACVC,eACE9I,EAACC,IAAA8I,EAAcA,gBAACC,SAAS,QACvBjJ,SAAAC,EAAAA,IAACyL,EAAAA,QAAK,CAAAC,KAAMO,EAAUA,WAAEL,KAAM,SAM1C,KAAK7K,EAAW6I,OACd,OACE5J,EAACC,IAAAwI,EAASA,UACR,CAAAlC,MAAON,EAAO+D,aAAaa,cAC3BjD,MAAO3B,EAAOmE,SAASxC,MACvBI,SAAW5D,GAAUqG,EAAexE,EAAQ7B,EAAME,OAAOsD,OACzDiB,WAAY,CACVC,eACE9I,EAACC,IAAA8I,EAAcA,gBAACC,SAAS,QACvBjJ,SAAAC,EAAAA,IAACyL,EAAAA,QAAK,CAAAC,KAAMQ,EAAoBA,qBAAEN,KAAM,SAMpD,KAAK7K,EAAW+I,aACd,OACE9J,EAAAA,IAAC0H,EAAoB,CACnBnB,MAAON,EAAO+D,aAAaa,cAC3BjD,MAAO3B,EAAOmE,SAASxC,MACvBI,SAAWJ,GAAU6C,EAAexE,EAAQ2B,KAIrD,EApHA,IAsHH,EAGEuE,EAAY,EAAGlG,SAAQmG,eAAcjC,oBAAmBM,oBAE1DhL,EAAAA,KAAC4M,EAAAA,KAAI,CAAC9B,MAAK,EAAA+B,aAAU5F,QAAS,EAAGtE,WAAY,SAAQrC,SAAA,CACnDC,EAAAA,IAACqM,EAAAA,KAAI,CAAC9B,MAAK,EAAAgC,GAAI,EAACxM,SACbkG,GAAUjG,EAAAA,IAACkK,EAAe,CAAAjE,OAAQA,EAAQkE,kBAAmBA,MAEhEnK,MAACqM,EAAIA,KAAA,CAAC9B,MAAK,EAAAgC,GAAI,EAACxM,SACbkG,GAAUjG,EAAAC,IAACuK,EAAY,CAAAvE,OAAQA,EAAQwE,eAAgBA,MAE1DzK,EAAAA,IAACqM,EAAAA,KAAI,CAAC9B,MAAK,EAAAgC,GAAI,EAACxM,SACdC,EAAAA,IAACwM,EAAAA,WAAU,CAAC5L,QAAS,IAAMwL,EAAanG,YACtCjG,EAAAA,IAACyM,EAAAA,iBAOLC,EAAaC,EAAAA,YAAW,SAC5BvB,EAGA7K,GAEA,OAAOP,EAACC,IAAA2M,QAAM,CAAAC,UAAU,OAAOtM,IAAKA,KAAS6K,GAC/C,IAEa0B,EAAe,EAAGC,UAASC,gBAAehO,UAASC,OAAMC,kBACpE,MAAMC,EAAwBC,SAAoB,OAC3C6N,EAAaC,GAAkBhJ,EAAAA,SAAmB6I,GAAW,IAEpE1N,EAAAA,WAAU,KACR,GAAIJ,EAAM,CACR,MAAQK,QAASC,GAAuBJ,EACb,OAAvBI,GACFA,EAAmBC,OAEtB,IACA,CAACP,IAEJ,MAAMkO,EAAoB,CAAClH,EAAgB2B,KACzCsF,GAAgBE,GACPA,EAAgBhH,KAAKiH,GACtBpH,EAAO9F,KAAOkN,EAAWlN,GACpB,IACFkN,EACHjD,SAAU,CAAExC,MAAOA,EAAOyC,SAAUgD,EAAWjD,SAASC,WAIrDgD,KAET,EAGEC,EAAuB,CAACrH,EAAgBoE,KAC5C6C,GAAgBE,GACPA,EAAgBhH,KAAKiH,GACtBpH,EAAO9F,KAAOkN,EAAWlN,GACpB,IACFkN,EACHjD,SAAU,CAAExC,MAAOyF,EAAWjD,SAASxC,MAAOyC,SAAUA,IAIrDgD,KAET,EAGEE,EAAsBtH,IAC1BiH,GAAgBE,GAAoB,IAAIA,EAAgBnH,QAAQoH,GAAeA,EAAWlN,KAAO8F,EAAO9F,OAAK,EAGzGqN,EAAS,KACbtO,IACAF,OAAQwJ,EAAU,EAQpB,OACE/I,EAAAA,KAACC,EAAAA,OAAM,CACLT,KAAMA,EACNU,QAAS6N,EACT5N,OAAO,QACP6N,oBAAqBf,EACrBgB,qBAAmB,EACnB7N,WAAS,EACTC,SAAS,KACT6N,GAAI,CACF,yBAA0B,CACxBC,eAAgB,aAGpBC,WAAY,CACVF,GAAI,CACFG,EAAG,EACHC,OAAQ,SAEXhO,SAAA,CAEDC,EAACC,IAAAC,cAAY,CAAAC,GAAG,sBACdJ,SAAAC,MAACgO,EAAAA,WAAU,CAACC,UAAU,OAAOC,MAAM,eAAevN,QAAQ,4BAI5DX,EAACC,IAAAG,gBAAc,CAAAC,UAAU,WACvBL,EAACC,IAAAK,oBAAkB,CAAAH,GAAG,4BAA4BI,IAAKpB,EAAuBqB,UAAW,EAACT,SACxFC,MAACmO,EAAAA,UAAS,CAACF,UAAU,OAAOnO,SAAS,KACnCC,SAAAC,MAACoO,EAAAA,IAAG,CAACT,GAAIU,EAAoBtO,SAC3BN,OAAC4M,EAAAA,KAAI,CAACC,WAAS,EAAC5F,QAAS,EAAC3G,SAAA,CACvBkN,EAAY7G,KAAKH,GAChBjG,EAAAA,IAACmM,EAAS,CAERlG,OAAQA,EACRmG,aAAcmB,EACdpD,kBAAmBmD,EACnB7C,eAAgB0C,GAJXlH,EAAO9F,MAOhBH,EAACC,IAAAoM,OAAK,CAAA9B,MAAK,EAAA+B,WACT,EAAAvM,SAAAC,EAAAC,IAAC4D,EACC,CAAAhE,WAAW,EACXmE,kBAAkB,EAClBF,UAAWkJ,EAAc5G,KAAK4D,IACrB,CACLzD,MAAOyD,EAAazD,OAASyD,EAAaa,cAC1CjK,QAAS,IACPsM,GAAgBE,GAAoB,IAC/BA,EACH,CACEjN,GAAIiN,EAAgBkB,OACpBtE,aAAc,CACZa,cAAeb,EAAaa,cAC5BtE,MAAOyD,EAAazD,MACpB4C,WAAYa,EAAab,YAE3BiB,SAAU,CACRC,SAAUnB,EAAmBc,EAAab,8DAepE1J,EAAAA,KAACgB,EAAaA,cACZ,CAAAV,SAAA,CAAAC,EAAAC,IAACS,SAAO,CAAAb,aAAUc,QAAQ,WAAWC,QAAS4M,EAErCzN,SAAA,WACTN,OAACiB,EAAMA,OAAA,CAACb,WAAU,EAAAe,QAlFb,KACT1B,IACAF,EAAQiO,EAAY,EAgFalN,SAAA,CAAA,SACpB,IAAMkN,EAAYqB,OAAS,YAIxC,EC3ZSC,EAAa,EAAGC,OAAMvP,OAAMC,cAAaF,cACpD,MAAMG,EAAwBC,SAAoB,MAClDC,EAAAA,WAAU,KACR,GAAIJ,EAAM,CACR,MAAQK,QAASC,GAAuBJ,EACb,OAAvBI,GACFA,EAAmBC,OAEtB,IACA,CAACP,IAEJ,MAAMwP,EAAK,KACTzP,IACAE,GAAa,EAGf,OACEO,EAACkF,KAAAjF,EAAMA,OAAC,CAAAT,KAAMA,EAAMU,QAAS8O,EAAI7O,OAAO,QACtCG,SAAA,CAAAC,MAACI,EAAAA,cAAa,CAACC,UAAU,EACvBN,SAAAC,EAAAC,IAACK,oBAAiB,CAACC,IAAKpB,EAAuBqB,UAAW,EACvDT,SAAAyO,MAGLxO,EAAAA,IAACS,EAAaA,cACZ,CAAAV,SAAAC,EAAAC,IAACS,SAAM,CAACE,QAAS6N,EAAe1O,SAAA,WAGpC,EC3BS2O,EAAyBtD,GAalCpL,EAACC,IAAA0O,EAAeA,gBACd,CAAAV,UAAU,MACVW,OAAQ,EACRJ,KAAMpD,EAAMoD,KACZK,aAhBqBC,MAAO1K,EAA6C2K,KAC3E,IAAIC,GAAS,EACTD,EAAU3D,EAAMoD,OAClBQ,GAAS,GAGX5D,EAAM6D,QAAQF,SAER3D,EAAM8D,WAAWF,EAAO,EAS5BG,YAAa/D,EAAMgE,WACnBC,mBAAoB,CAACjE,EAAMgE,YAC3BE,mBAAoB,EAAGnH,OAAMoH,QAAS,GAAGpH,KAAQoH,IACjDC,oBAAqB,CACnBzL,UAAWqH,EAAMqE,qBAEnBC,oBAAqB,CACnB3L,SAAyB,IAAfqH,EAAMoD,QC3BXmB,EAAyBC,EAAAA,gBAGzBC,EAA4BD,EAAAA,gBAG5BE,EAA0BF,EAAAA,gBAG1BG,EAA2BH,EAAAA,gBAE3BI,EAAkB,KAC7B,MAAMC,EAAUC,aAAWH,GAE3B,QAAgBvH,IAAZyH,EACF,MAAM,IAAIrF,MAAM,oDAGlB,OAAOqF,CAAO,ECMHE,EAAc,EACzBnR,UACAC,OACAC,cACAkR,UAAS,EACTC,UACAC,mBACAC,YACAC,uBACAC,wBACAzD,oBAEA,MAAM0D,iBAAEA,GAAqBV,KACvBW,gBAAEA,GAAoBC,EAAAA,cAEtBzR,EAAwBC,SAAoB,OAC3CyR,EAAWC,GAAgB5M,EAAQA,UAAU,IAC7C6M,EAAUC,GAAe9M,EAAQA,SAAS,IAC1C+M,EAAWC,GAAgBhN,EAAAA,SAAwB,CAACoM,KACpDa,EAAUC,GAAelN,EAAQA,YACjCmN,EAAWC,GAAgBpN,EAAQA,YACnCuL,EAAqB8B,GAA0BrN,EAAQA,UAAU,IACjEsK,EAAMS,GAAW/K,EAAQA,SAAS,IAClCsN,EAAMC,GAAWvN,EAAQA,SAAoB,KAC7CwN,EAAgBC,GAAqBzN,EAAQA,SAClDsM,IAAyBJ,OAAS5H,EAAY,MAEzCoJ,EAAeC,GAAoB3N,EAAQA,SAAsB,KACjE6I,EAAS+E,GAAc5N,EAAQA,SAAW,KAC1C6N,EAAiBC,GAAsB9N,WAAY,IACrDuM,EACHwB,MAAO,CACLC,MAAO,KAILC,EAAmBrD,MAAOE,IAC9BgD,GAAoBI,IACX,IACFA,EACHH,MAAO,CACLC,MAAOlD,EAAS,EAAI,EACpBqD,SAAUrD,EACVmC,SAAUnC,EAASmC,EAAWE,OAKpCE,GAAwBvC,EAAO,EAG3BsD,EAAYxD,UAChBgC,GAAa,GACb,IACE,MAAMyB,QAAYhC,EAAUwB,GAExBQ,EAAIjE,OAAS,GACfiD,GAAuB,GACvBgB,EAAIC,OACsC,IAAjCT,EAAgBE,OAAOC,OAChCX,GAAuB,GAGzBE,EAAQc,GACRjB,EAAaiB,EAAI,IACjBnB,EAAYmB,EAAIA,EAAIjE,OAAS,IAC7B0C,EAAYuB,EAAIjE,QAAU,EAG3B,CAFC,MAAOxG,GTpGiD,EAAC5G,EAAEC,EAAEsR,KAAK,IAAIvR,GAAG,kBAAkBA,EAAEwR,eAAc,IAAKxR,EAAEwR,aAAa,YAAY7Q,EAAEV,GAAG,MAAMwR,EAAEzR,EAAE0R,SAAS,GAAG5R,EAAE2R,GAAG,GAAGA,GAAGE,OAAO,GAAG,MAAMF,GAAGE,OAAO1R,EAAEW,EAAEZ,EAAE0R,UAAUpB,MAAMzP,QAAQ,CAACpB,QAAQ,QAAQU,kBAAiB,EAAGC,SAAQ,QAAS,CAAC,GAAG,MAAMqR,GAAGE,OAAO,OAAO5R,EAAE0R,EAAEnB,KAAKrQ,EAAEsR,GAAGtR,EAAEW,EAAE6Q,GAAGnB,MAAMzP,QAAQ,CAACpB,QAAQ,QAAQU,kBAAiB,EAAGC,SAAQ,GAAK,MAAKO,EAAEV,QAAQU,EAAEV,EAAE,ESqGla2R,CAAchL,EAAO6I,EACtB,CACDG,GAAa,EAAM,EA2ErBzR,EAAAA,WAAU,KACRiT,GAAW,GACV,CAACP,IAEJ1S,EAAAA,WAAU,KACR,GAAIJ,EAAM,CACR,MAAQK,QAASC,GAAuBJ,EACb,OAAvBI,GACFA,EAAmBC,OAEtB,IACA,CAACP,IAEJ,MAAMuO,EAAS,KACbtO,IACAF,OAAQwJ,EAAU,EA6DpB,OACE/I,EAAAkF,KAACjF,EAAMA,OAAA,CAACT,KAAMA,EAAMU,QAAS6N,EAAQ5N,OAAO,QAAQC,WAAW,EAAMC,SAAU,KAAIC,SAAA,CACjFC,EAAAA,IAACE,EAAAA,YAAY,CAAAC,GAAG,sBAA0CJ,SAAA,WAC1DC,EAACC,IAAAG,EAAaA,cAAC,CAAAC,UAAU,EACvBN,SAAAC,EAAAA,IAACM,EAAiBA,kBAAA,CAACH,GAAG,4BAA4BI,IAAKpB,EAAuBqB,UAAW,EACvFT,SAAAC,MAAC+S,EAAAA,SAAQ,CACPpF,GACEyC,EACI,CACE,4EAA6E,CAC3ElO,QAAS,cAGbsG,EAENwK,cACAC,SAAWC,GAAWA,EAAIC,aAC1BC,QAASvC,EACTwC,eAAe,SACfC,KAAM9B,EACNT,SAAUA,EACVwC,aAAc,CAAC,OAAQ,OACvBC,YAAY,SACZvC,UAAWA,EACXwC,kBA/IqBC,IAC7BzE,EAAQ,GACRiC,EAAawC,GAEb,MAAMC,MAAEA,EAAKC,KAAEA,GAASF,EAAS,GAEjC1B,GAAoBI,IACX,IACFA,EACHyB,SAAU,CAAC,CAAEC,UAAWH,EAAOI,WAAqB,SAATH,OAE7C,EAqIMI,qBACAC,uBAAyB7D,EAnDF8D,IAC/B,GAAIhM,MAAMiM,QAAQzC,GAAiB,OAEnC,GAAiC,IAA7BwC,EAAkB5F,OAGpB,OAFAqD,EAAkB,SAClBE,OAAiBrJ,GAInB,MAAM4L,EAASF,EAAkBA,EAAkB5F,OAAS,GAE5DqD,EAAkByC,GAClBvC,EAAiBL,EAAK6C,MAAMzM,GAAUA,EAAMuL,eAAiBiB,IAAQ,EAxC5CF,IACzB,GAAKhM,MAAMiM,QAAQzC,GAAnB,CAGA,GAAIwC,EAAkB5F,OAASoD,EAAepD,OAAQ,CACpD,MAAMgG,EAAOJ,EAAkB5F,OAASoD,EAAepD,OACjDiG,EAAa,IAAIL,GAAmBM,OAAc,EAARF,GAC1CG,EAAWjD,EAAKvL,QAAQ2B,IAAmE,IAAzD2M,EAAWlM,QAAQT,EAAMuL,gBACjEtB,GAAkB6C,IAChB,GAAKxM,MAAMiM,QAAQO,GAEnB,MAAO,IAAIA,KAAsBD,EAAS,GAE7C,CAGD,GAAIP,EAAkB5F,OAASoD,EAAepD,OAAQ,CACpD,MAAMqG,EAAiBjD,EAAezL,QAAQ2B,IAAgD,IAAtCsM,EAAkB7L,QAAQT,KAClFiK,GAAkB6C,IAChB,GAAKxM,MAAMiM,QAAQO,GAEnB,MAAO,IAAIA,EAAkBzO,QAAQ2B,IAAuE,IAA7D+M,EAAetM,QAAQT,EAAMuL,gBAAmC,GAElH,CAEDxB,EAAkBuC,EAxByB,CAwBP,EAuD5BU,gBAAkBxE,OAAiC5H,EArC9BqM,IAC7B,GAAIrE,EAAsB,CACxB,IAAKtI,MAAMiM,QAAQ3D,GAAuB,MAAM5F,MAAM,iDAEtD,OAAQ4F,EAAqBsE,SAASD,EAAO1U,GAC9C,CAED,OAAO,CAAI,EA+BHuR,eAAgBA,EAChBqD,2BAA4B3E,EAC5BC,QAASA,EACT2E,6BACA,EAAA3R,WAAY,CACV4R,QAAS,IACPjV,EAAAA,IAACkV,EAAoBA,qBACnB,CAAAnV,SAAAN,OAACiB,EAAAA,OACC,CAAAC,QAAQ,WACRC,QAASkO,UACP,MAAMqG,QAAmBzE,EAAiB1D,EAAeD,GAErDoI,GA5LI,CAACA,IAC3BlG,EAAQ,GACR6C,EAAWqD,GAGXnD,GAAoBI,IAClB,MAAMgD,EAAsB,IAAKhD,GAWjC,OATApF,EAActL,SACXuE,GAEEmP,EAAoBnP,EAAO4E,eAAiBwK,oCAC3CF,EACAlP,EAAO4E,iBAIN,IACFuH,EACHH,MAAO,CACLd,cAAU3I,EACV0J,MAAO,EACPG,aAAS7J,MAER4M,EACJ,GACD,EAmKkBE,CAAoBH,EACrB,EAEHpR,SAAU8M,EAAS9Q,SAAA,CAAA,eAEa,IAAnBgN,EAAQuB,OAAe,IAAMvB,EAAQuB,OAAS,IAAM,QAIvEiH,WAAY,IACVvV,EAAAA,IAAC0O,EAAqB,CACpBQ,WAAYiD,EACZ1C,oBAAqBA,EACrBjB,KAAMA,EACNS,QAASA,EACTG,WAAY,WAOxB3P,EAACkF,KAAAlE,EAAaA,yBACZT,EAAAA,IAACU,EAAAA,OAAO,CAAAE,QAAS4M,sBACjBxN,EAAAA,IAACU,EAAMA,OAAA,CAACE,QA3HH,KACT1B,IACAF,EAAQ4S,EAAc,EAyHc7R,SAAA,YAGpC,EC/REyV,EAAoD,CACxDC,EACAC,IAEOD,EAAQrP,KAAI,CAACuP,EAAQtP,KACnB,CACLsN,MAAOgC,EAAOpP,MAAQF,EACtBuP,WAAY,GACZC,MAAO,SACP9J,KAAM,UACN+J,WAAajB,GAETpV,EAACkF,KAAAjE,SAAO,CAAAC,QAAQ,OAAOC,QAAS,IAAM+U,EAAOA,OAAOd,EAAO3B,eACxDyC,EAAOI,MACNL,GAASM,YAAa,IAASL,EAAOpP,aAQ9C0P,EAAmDR,GAChC,IAAnBA,EAAQnH,OAAqB,GAE1B,CACL,CACEqF,MAAO,UACPiC,WAAY,GACZC,MAAO,SACP9J,KAAM,UACN+J,WAAajB,GAET7U,MAAC6D,EAAc,CACblD,QAAQ,OACRqD,kBAAkB,EAClBF,UAAW2R,EAAQrP,KAAKuP,IACf,CACLpP,MAAOoP,EAAOpP,MACdC,UAAWmP,EAAOI,KAClBnV,QAAS,IAAM+U,EAAOA,OAAOd,EAAO3B,SAIxCnT,SAAAC,EAAAC,IAACiW,EAASA,UAAG,CAAA,OCyBnBC,EAAY,EAAGvO,QAAO7D,WAAUqS,WAAUC,WAAUC,aACxD,IAAIC,EA6BJ,OA1BEA,EADE7L,EAAO9C,GAEPnI,EACGkF,KAAAC,EAAAC,SAAA,CAAA9E,SAAA,CAAAuW,GACCtW,MAACwM,EAAAA,WAAW,CAAAzI,SAAUA,EAAUnD,QAAS0V,WACvCtW,EAAAA,IAACwW,EAAAA,iBAGJH,GACCrW,MAACwM,EAAAA,YAAWzI,SAAUA,EAAUnD,QAASyV,EAAQtW,SAC/CC,EAAAA,IAACyW,EAAAA,OAAM,CAAA,QAObzW,EAAAA,IAAA4E,EAAAA,SAAA,CAAA7E,SACGqW,GACCpW,EAACC,IAAAuM,aAAW,CAAAzI,SAAUA,EAAUnD,QAASwV,EAAQrW,SAC/CC,MAAC0W,EAAAA,gBAOJ1W,EAAAC,IAAA2E,EAAAC,SAAA,CAAA9E,SAAGwW,GAAS,EAGfI,EAAY,EAAG/O,QAAO7D,WAAU6S,eACpC,IAAIL,EAgBJ,OAbEA,EADE7L,EAAO9C,GAEP5H,EAAAA,IAAA4E,EAAAA,SAAA,CAAA7E,SACG6W,GACC5W,EAACC,IAAAuM,aAAW,CAAAzI,SAAUA,EAAUnD,QAASgW,EAAQ7W,SAC/CC,MAAC6W,EAAAA,gBAMD7W,qBAGHA,EAAAC,IAAA2E,EAAAC,SAAA,CAAA9E,SAAGwW,GAAS,EC9HfO,EAA6BlH,EAAaA,gBAE1CmH,EAAyBnH,EAAAA,cAAgC,IAElDoH,EAAoB,KAC/B,MAAM/G,EAAUC,aAAW4G,GAE3B,QAAgBtO,IAAZyH,EACF,MAAM,IAAIrF,MAAM,sDAGlB,OAAOqF,CAAO,ECxBhB,MAAMgH,EAAqBC,EAAAA,OAAOC,EAAAA,SAAPD,EAAiB,EAAGE,YAAa,CAC1DlJ,MAAOkJ,EAAM/U,QAAQK,KAAKD,UAC1B,CAAC,MAAM4U,kBAAgBC,WAAY,CACjC,kBAAqB,CACnBC,YAAa,SAEfrJ,MAAOkJ,EAAM/U,QAAQK,KAAKD,UAI1B+U,QAAS,EACTvV,aAAc,OACdwV,MAAO,OACPzU,WAAYoU,EAAMtU,WAAWiE,iBAC7B,iBAAkB,CAChB/D,WAAYoU,EAAMtU,WAAW4U,mBAE/B,UAAW,CAETC,gBAAiB,WAEnB,4DAA6D,CAE3DA,gBAAiB,UACjBzJ,MAAO,0BAET,CAAC,MAAMmJ,kBAAgB9Q,SAAU,CAC/BvD,WAAY,UACZkL,MAAO,YAGX,CAAC,MAAMmJ,kBAAgBO,SAAU,CAC/BC,WAAY,EACZ,CAAC,MAAMR,kBAAgBC,WAAY,CACjCQ,YAAaV,EAAM1Q,QAAQ,SAKjC,SAASqR,EAAe3M,GACtB,MAAM4M,QAAEA,EAAO9J,MAAEA,EAAO+J,UAAWC,EAASC,UAAEA,EAASC,UAAEA,KAAcC,GAAUjN,EAEjF,OACEpL,EAACC,IAAAgX,GACC1Q,MACE9G,OAAC2O,EAAGA,IAAA,CAACT,GAAI,CAAEzL,QAAS,OAAQE,WAAY,SAAUkW,EAAG,GAAKC,GAAI,aAC5DvY,EAACC,IAAAmO,EAAGA,KAACH,UAAWiK,EAAWhK,MAAM,UAAUP,GAAI,CAAE4J,YAAa,KAC9DvX,EAACC,IAAA+N,cAAWrN,QAAQ,QAAQgN,GAAI,CAAE3K,WAAY,UAAWwV,SAAU,GAAGzY,SACnEqY,IAEHpY,EAAAA,IAACgO,EAAAA,WAAU,CAACrN,QAAQ,UAAUuN,MAAM,UACjCnO,SAAAoY,OAIP/S,MAAO,CACL,oBAAqB8I,EACrB,uBAAwB8J,MAEtBK,GAGV,0BFvCgC,EAC9BxQ,OACA1H,KACAoG,QACAqB,QACAE,SAAQ,EACRC,aACAhE,YAAW,EACX0U,YAAW,EACXC,YACA3C,OACA4C,QACArC,SACAF,WACAQ,WACAP,eAEA,MAAOuC,EAASC,GAAc3U,EAAQA,UAAC,GAEvC,IAAIqS,EAQJ,OALEA,EADEkC,EACMzY,EAACC,IAAAkW,EAAU,CAAAvO,MAAOA,EAAO7D,SAAUA,EAAUqS,SAAUA,EAAUE,OAAQA,EAAQD,SAAUA,IAE3FrW,EAACC,IAAA0W,EAAU,CAAA/O,MAAOA,EAAO7D,SAAUA,EAAU6S,SAAUA,IAI/DnX,EAAAA,KAAC4M,EAAAA,KAAK,CAAAC,WAAU,EAAA/B,MAAK,EAAAsC,UAAU,MAAMe,eAAe,UAAUkL,aAAa,UACzE/Y,SAAA,CAAAC,EAAAC,IAAC8Y,EAAUA,WAAA,CACTpL,GAAI,CAAE6J,QAAS,GACfzT,SAAUA,GAAY0U,EACtBO,eAAgB,IAAMH,GAAW,GACjCI,OAAQ,IAAMJ,GAAW,GACzBjY,QAAS+X,WAET3Y,EAACC,IAAAwI,EAASA,UACR,CAAA1E,UAAW4U,GAAS5U,EACpB8D,KAAMA,EACN1H,GAAIA,EACJoG,MAAOA,EACPuB,MAAOA,EACPC,WAAYA,EACZ6Q,QAASA,EACT/Y,WACA,EAAA+H,MAAO8Q,EAAUQ,KAAK,OACtBtQ,UAAY6P,EAAuB,oBAAZjQ,EACvBmF,GAAI,CACF,SAAU,CACRwL,OAAQ,WAEV,8BAA+B,CAC7BA,OAAQ,YAGZtQ,WAAY,CACVlB,UAAU,EACVmB,eAAgB9I,MAAC+I,iBAAc,CAACC,SAAS,QAASjJ,SAAAgW,SAIvDQ,IAEH,6BC3D8B,EAAGxW,eACnC,MAAMqZ,EAAWC,EAAAA,cACXjY,EAAWkY,EAAAA,eAEVC,EAAiBC,GAAsBtV,EAAQA,SAAmB,KAClEuV,EAAoBC,GAAyBxV,EAAQA,SAAiB,CAAS,GAEtF7E,EAAAA,WAAU,KACRqa,GAAuBC,IACd,IACFA,EACHnV,IAAK,KAAOpD,EAASwY,SACrBlO,KAAMtK,EAASwY,YAEjB,GACD,IAEH,MAIMC,EAAwB,CAC5BC,cAAgBvK,IACdiK,EAAmB,IACnBE,EAAsB,CACpBlV,IAAK,KAAO+K,EAAGwK,WACfxT,MAAO,KACPmF,KAAM6D,IAGR6J,EAAS7J,EAAG,EAEd6J,SAAW7J,IACT,GAAiC,OAA7BkK,EAAmBlT,MACrB,MAAMqE,MAAM,gCAGd4O,GAAoBQ,GACX,IAAIA,EAAqBP,KAGlCC,EAAsB,CACpBlV,IAAK+U,EAAgBjL,OAAS,IAAMiB,EAAGwK,WACvCxT,MAAO,KACPmF,KAAM6D,IAGR6J,EAAS7J,EAAG,EAEd0K,KAAM,KACJ,GAA+B,IAA3BV,EAAgBjL,OAAc,CAChC,MAAM6C,EAAWoI,EAAgBA,EAAgBjL,OAAS,GAM1D,OALAoL,EAAsBvI,GACtBqI,GAAoBU,GACX,IAAIA,EAAoB1F,MAAM,EAAG0F,EAAoB5L,OAAS,WAEvE8K,EAASjI,EAASzF,KAEnB,CAED8N,EAAmB,IACnBE,EAAsB,CACpBlV,IAAK,KAAO,IAAIuV,WAChBxT,MAAO,KACPmF,KAAM,MAGR0N,EAAS,IAAI,EAEfe,eApDqBC,EAAAA,SAAQ,IACK,IAA3Bb,EAAgBjL,QACtB,CAACiL,IAmDFc,SAAWC,IACTZ,GAAuBC,IACd,IAAKA,EAAwBpT,MAAO+T,KAC3C,GAIN,OACEta,EAAAA,IAAC+W,EAAuBwD,SAAS,CAAA3S,MAAO2R,EACtCxZ,SAAAC,EAAAC,IAAC6W,EAA2ByD,SAAS,CAAA3S,MAAOiS,WACzC9Z,KAGL,4FAG4B,KAC9B,MAAMwZ,EAAkBrJ,aAAW6G,GAEnC,OACEtX,EAAAkF,KAAC6V,EAAWA,YAAA,CAACC,SAAU,EAAGC,UAAU,IAAG3a,SAAA,CACrCC,EAAAA,IAAC2a,EAAAA,KAAO,CAAA,GACPpB,EAAgBnT,KAAI,EAAGG,QAAO/B,OAAO6B,IAElCrG,EAAAC,IAAC+N,EAAUA,WAAA,CAACE,MAAM,eAAcnO,SAC7BwG,GADmC/B,OAM5C,yDEvH0B,EAAGzE,eAE/B,MAAO6a,EAAkBC,GAAuB3W,EAAQA,UAAC,IAClD4W,EAAYC,GAAiB7W,EAAQA,WAEtC8W,EAAwB,KAC5BH,GAAoB,EAAM,EAUtBI,EAA+C,CACnDC,eAR2BpM,MAAON,IAClCqM,GAAoB,GACb,IAAIM,SAAenc,IACxB+b,EAAc/a,EAAAA,IAACuO,EAAU,CAACC,KAAMA,EAAMtP,YAAa8b,EAAuB/b,MAAM,EAAMD,QAASA,IAAY,OASxGoc,EAAmBC,GAAwBnX,EAAQA,UAAC,IACpDoX,EAAaC,GAAkBrX,EAAQA,WAExCsX,EAAyB,KAC7BH,GAAqB,EAAM,EAgCvBI,EAAkD,CACtDC,gBA9B4B5M,OAC5BuB,UACAC,mBACAC,YACAH,UAAS,EACTI,uBACAxD,gBACA2O,6BAEAN,GAAqB,GAEd,IAAIF,SAAkBnc,IAC3Buc,EACEvb,MAACmQ,EAAW,CACVjR,YAAasc,EACbvc,MAAM,EACND,QAASA,EACTqR,QAASA,EACTC,iBAAkBA,EAClBC,UAAWA,EACXH,OAAQA,EACRI,qBAAsBA,EACtBxD,cAAeA,EACfyD,sBAAuBkL,IAE1B,OASEC,EAAqBC,GAA0B3X,EAAQA,UAAC,IACxD4X,EAAeC,GAAoB7X,EAAQA,WAE5C8X,EAA2B,KAC/BH,GAAuB,IAChB,GAmBHI,EAAqD,CACzDC,kBAjB8BpN,MAAOhQ,EAAyCC,KAC9E8c,GAAuB,GAEhB,IAAIV,SAAkBnc,IAC3B+c,EACE/b,EAACC,IAAApB,EACC,CAAAC,oBAAqBA,EACrBC,MAAOA,EACPG,YAAa8c,EACb/c,MAAM,EACND,QAASA,IAEZ,OASEmd,EAAoBC,GAAyBlY,EAAQA,UAAC,IACtDmY,EAAcC,GAAmBpY,EAAQA,WAE1CqY,EAA0B,KAC9BH,GAAsB,IACf,GAmBHI,EAAmD,CACvD9L,iBAjB6B5B,MAAO9B,EAA+BD,KACnEqP,GAAsB,GAEf,IAAIjB,SAAmBnc,IAC5Bsd,EACEtc,EAACC,IAAA6M,EACC,CAAAC,QAASA,EACTC,cAAeA,EACf9N,YAAaqd,EACbtd,MAAM,EACND,QAASA,IAEZ,MAQL,OACEgB,EAACC,IAAA0P,EAAuB4K,SAAS,CAAA3S,MAAOqT,EACtClb,SAAAC,EAAAC,IAAC4P,EAA0B0K,SAAQ,CAAC3S,MAAOqU,EAAoBlc,SAC7DC,EAACC,IAAA6P,EAAwByK,SAAS,CAAA3S,MAAO6T,EACvC1b,SAAAN,EAAAkF,KAACoL,EAAyBwK,SAAQ,CAAC3S,MAAO4U,EAAmBzc,SAAA,CAC1DA,EACA6a,GAAoBE,EACpBc,GAAuBE,EACvBV,GAAqBE,EACrBa,GAAsBE,UAK/B,kGCzJE,SAAejR,GACnB,OACE3L,EAAAkF,KAACyJ,MAAG,CACFT,GAAI,CACF2K,EAAG,EACHpW,QAAS,OACTC,cAAe,MACfC,WAAY,UACbrC,SAAA,CAEDC,MACE,MAAA,CAAAyc,IAAKrR,EAAMsR,OACXC,IAAI,OACJvX,MAAO,CACLqS,MAAO,OACPF,YAAa,UAGjBvX,EAAAA,IAACgO,EAAUA,WAAA,CACTL,GAAI,CACF1K,SAAU,GACVD,WAAY,OACZkL,MAAO,kBACRnO,SAEAqL,EAAM1I,SAIf,eC7BM,SAAe0I,GACnB,OACE3L,EAAAkF,KAACyJ,MAAG,CACFT,GAAI,CACF2K,EAAG,EACHpW,QAAS,OACTC,cAAe,SACfC,WAAY,UACbrC,SAAA,CAEDC,MACE,MAAA,CAAAyc,IAAKrR,EAAMsR,OACXC,IAAI,OACJvX,MAAO,CACLqS,MAAO,UAGXzX,EAAAA,IAACgO,EAAUA,WAAA,CACTL,GAAI,CACF1K,SAAU,GACVD,WAAY,QACbjD,SAEAqL,EAAMwR,aAIf,mBHiDwB,EAAGC,QAAO9O,SAAQjO,WAAUgd,sBAClD,MAAMhD,cAAEA,GAAkB9C,IACpB+F,EAAOC,EAAAA,UAEb,OACEhd,EAAAA,IAACid,EAAAA,SACY,CAAA,aAAA,WACXH,gBAAiBA,EACjBI,oBAAqBld,EAAAA,IAACmd,EAAAA,cAAa,CAAA,GACnCC,kBAAmBpd,EAAAC,IAACod,EAAUA,WAAA,IAC9BC,eAAgBtd,EAAAC,IAAA,MAAA,CAAKmF,MAAO,CAAEqS,MAAO,MACrC9J,GAAI,CAAEI,SAAQyK,SAAU,EAAG1Y,WAAUyd,UAAW,QAAQxd,SAEvD8c,EAAMzW,KAAI,EAAGgS,YAAW7I,KAAIsN,WAAUW,KACrCxd,EAAAC,IAAC8X,EACC,CAAA0F,OAAQrF,EACRA,UAAW2E,EAAKW,cAAc,CAAEvd,GAAI,YAAYiY,IAAauF,eAAgBvF,IAC7ExX,QAAS,IAAM2O,GAAMuK,EAAcvK,GACnCA,GAAIA,KACAiO,EAAKzd,SAER8c,GACCA,EAAMzW,KAAI,EAAGgS,UAAWwF,EAAYrO,GAAIsO,KAAQC,KAC9C9d,EAAAA,IAAC+X,GACC0F,OAAQG,EACRxF,UAAW2E,EAAKW,cAAc,CAAEvd,GAAI,YAAYyd,IAAcD,eAAgBC,IAC9Ehd,QAAS,IAAMkZ,EAAc+D,GAC7BtO,GAAIsO,KACAC,WAMhB,2EIvGsB,EAAG/e,QAAOgB,eAClC,MAAMsa,SAAEA,GAAarD,IAMrB,OAJA3X,EAAAA,WAAU,KACRgb,EAAStb,EAAM,GACd,CAACA,IAGFU,EACEkF,KAAAC,EAAAC,SAAA,CAAA9E,SAAA,CAAAC,EAAAC,IAAC8d,EAAMA,OAAA,CAAC9P,UAAU,MAAMjF,SAAS,SAASgV,UAAW,EAAGrQ,GAAI,CAAEtI,OAAQ,GAAGtF,SACvEC,MAACiV,EAAOA,QAAA,CAAAlV,SACNN,EAAAA,KAAC4M,EAAAA,MAAKC,WAAS,EAAClK,WAAW,SAASsE,QAAS,YAC3C1G,EAACC,IAAAoM,EAAIA,KAAC,CAAA9B,QAAKgC,IAAE,EAAAxM,SACXC,EAAAA,IAACgO,EAAAA,YAAWC,UAAU,OAAOC,MAAM,eAAevN,QAAQ,KAAIZ,SAC3DhB,MAGJgB,SAIPC,EAAAA,IAACie,EAAAA,QAAU,CAAA,KAEb,0FP1B+D,CACjExI,EACAC,KAEA,IAAKhL,EAAO+K,IAA+B,IAAnBA,EAAQnH,OAC9B,MAAO,GAGT,IAAI4P,EAAqB,EAKzB,GAJIxI,GAASyI,eACXD,EAAqBzI,EAAQnH,OAASoH,EAAQyI,aAAe1I,EAAQnH,OAASoH,EAAQyI,cAGpFD,EAAqB,EACvB,OAAO1I,EAAkBC,EAASC,GAC7B,GAA2B,IAAvBwI,EACT,MAAO,GACF,GAA2B,IAAvBA,EACT,OAAOjI,EAAgBR,GAClB,CACL,MAAM2I,EAAc3I,EAAQnH,SAAW4P,EAAqBA,EAAqBA,EAAqB,EAChGG,EAAuB5I,EAAQjB,MAAM,EAAG4J,GACxCE,EAAqB7I,EAAQjB,MAAM4J,GAEzC,MAAO,IAAI5I,EAAkB6I,EAAsB3I,MAAaO,EAAgBqI,GACjF"}
|