@judo/components 0.2.1 → 0.2.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/CustomLink.tsx","../../src/dialog/DialogProvider.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 { useMatch, useResolvedPath } from 'react-router-dom';\nimport type { LinkProps } from 'react-router-dom';\nimport { theme } from '@judo/theme';\nimport { ListItem, ListItemButton } from '@mui/material';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\nconst customLinkItemStyle = {\n py: '2px',\n px: 3,\n color: theme.palette.text.secondary,\n '&:hover, &:focus': {\n color: theme.palette.secondary.main,\n },\n '&.Mui-selected': {\n color: theme.palette.secondary.main,\n },\n};\n\nexport function CustomLink({ children, to, ...props }: LinkProps) {\n const resolved = useResolvedPath(to);\n const match = useMatch({ path: resolved.pathname, end: true });\n const { clearNavigate } = useJudoNavigation();\n\n const onClickHandler = () => {\n clearNavigate(to);\n };\n\n return (\n <ListItem disablePadding style={{ textDecoration: 'none' }}>\n <ListItemButton selected={!!match} sx={customLinkItemStyle} onClick={onClickHandler}>\n {children}\n </ListItemButton>\n </ListItem>\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 { 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","MuiAppBar","styleOverrides","colorPrimary","backgroundColor","MuiButton","size","root","textTransform","paddingLeft","paddingRight","contained","boxShadow","outlined","border","MuiInputLabel","color","MuiFilledInput","input","WebkitBackgroundClip","alpha","borderBottom","MuiTextField","MuiSelect","filled","MuiDataGrid","toolbarContainer","padding","MuiPaper","rounded","MuiDrawer","paper","MuiTabs","marginLeft","spacing","indicator","height","borderTopLeftRadius","borderTopRightRadius","common","white","margin","minWidth","breakpoints","up","MuiIconButton","MuiTooltip","tooltip","MuiDivider","middle","MuiListItemButton","disableTouchRipple","MuiListItemText","fontWeightMedium","MuiListItemIcon","marginRight","MuiAvatar","width","MuiCard","length","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","scrollWidth","TransitionProps","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","filter","menuItem","visible","map","index","MenuItem","label","startIcon","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","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","Typography","component","Container","Box","mainContainerPadding","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","customLinkItemStyle","py","px","theme","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","resolved","useResolvedPath","match","useMatch","end","ListItem","disablePadding","textDecoration","ListItemButton","selected","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","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/CustomLink.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 { useMatch, useResolvedPath } from 'react-router-dom';\nimport type { LinkProps } from 'react-router-dom';\nimport { theme } from '@judo/theme';\nimport { ListItem, ListItemButton } from '@mui/material';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\nconst customLinkItemStyle = {\n py: '2px',\n px: 3,\n color: theme.palette.text.secondary,\n '&:hover, &:focus': {\n color: theme.palette.secondary.main,\n },\n '&.Mui-selected': {\n color: theme.palette.secondary.main,\n },\n};\n\nexport function CustomLink({ children, to, ...props }: LinkProps) {\n const resolved = useResolvedPath(to);\n const match = useMatch({ path: resolved.pathname, end: true });\n const { clearNavigate } = useJudoNavigation();\n\n const onClickHandler = () => {\n clearNavigate(to);\n };\n\n return (\n <ListItem disablePadding style={{ textDecoration: 'none' }}>\n <ListItemButton selected={!!match} sx={customLinkItemStyle} onClick={onClickHandler}>\n {children}\n </ListItemButton>\n </ListItem>\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","MuiAppBar","styleOverrides","colorPrimary","backgroundColor","MuiButton","size","root","textTransform","paddingLeft","paddingRight","contained","boxShadow","outlined","border","MuiInputLabel","color","MuiFilledInput","input","WebkitBackgroundClip","alpha","borderBottom","MuiTextField","MuiSelect","filled","MuiDataGrid","toolbarContainer","padding","MuiPaper","rounded","MuiDrawer","paper","MuiTabs","marginLeft","spacing","indicator","height","borderTopLeftRadius","borderTopRightRadius","common","white","margin","minWidth","breakpoints","up","MuiIconButton","MuiTooltip","tooltip","MuiDivider","middle","MuiListItemButton","disableTouchRipple","MuiListItemText","fontWeightMedium","MuiListItemIcon","marginRight","MuiAvatar","width","MuiCard","length","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","scrollWidth","TransitionProps","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","filter","menuItem","visible","map","index","MenuItem","label","startIcon","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","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","Typography","component","Container","Box","mainContainerPadding","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","customLinkItemStyle","py","px","theme","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","resolved","useResolvedPath","match","useMatch","end","ListItem","disablePadding","textDecoration","ListItemButton","selected","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","p","src","imgSrc","alt","subTitle","AppBar","elevation","Divider","shownActionsNumber","shownActions","sliceNumber","standaloneRowActions","dropdownRowActions"],"mappings":"0aAIa,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,EAAAA,YAAE,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,OAAOxC,EAAE,IAAID,EAAEmC,WAAW,CAACO,UAAU,CAACC,eAAe,CAACC,aAAa,CAACC,gBAAgB7C,EAAEmB,QAAQM,WAAWC,WAAWoB,UAAU,CAACT,aAAa,CAAC5C,QAAQ,YAAYsD,KAAK,SAASJ,eAAe,CAACK,KAAK,CAACC,cAAc,OAAOf,aAAa,sBAAsBgB,YAAY,GAAGC,aAAa,IAAIC,UAAU,CAACC,UAAU,OAAO,WAAW,CAACA,UAAU,SAASC,SAAS,CAACC,OAAO,YAAYzB,WAAW,OAAO,UAAU,CAACyB,OAAO,YAAY9B,WAAWb,EAAAA,MAAEZ,EAAEmB,QAAQE,QAAQC,KAAK,SAASkC,cAAc,CAACb,eAAe,CAACK,KAAK,CAACS,MAAMzD,EAAEmB,QAAQQ,cAAcL,KAAKQ,WAAW,IAAIC,SAAS,GAAG,gBAAgB,CAAC0B,MAAMzD,EAAEmB,QAAQQ,cAAcL,SAASoC,eAAe,CAACf,eAAe,CAACgB,MAAM,CAAC,qBAAqB,CAACC,qBAAqB,oBAAoBZ,KAAK,CAACvB,WAAW,UAAU,gBAAgB,CAACA,WAAW,WAAW,+CAA+C,CAACA,WAAWb,EAACiD,MAAC7D,EAAEmB,QAAQI,UAAUD,KAAK,KAAK,oCAAoC,CAACwC,aAAa,QAAQ,yDAAyD,CAACL,MAAMzD,EAAEmB,QAAQI,UAAUD,SAASyC,aAAa,CAAC1B,aAAa,CAAC1D,WAAU,EAAGc,QAAQ,SAASgE,MAAM,aAAad,eAAe,CAACK,KAAK,CAACvB,WAAW,QAAQ,qCAAqC,CAACqC,aAAa,QAAQ,sDAAsD,CAACA,aAAa,aAAalD,EAACiD,MAAC7D,EAAEmB,QAAQE,QAAQC,KAAK,MAAMG,WAAW,eAAe,0CAA0C,CAAC4B,UAAU,mCAAmCnB,aAAa,kBAAkB8B,UAAU,CAACrB,eAAe,CAACsB,OAAO,CAAC,UAAU,CAACpB,gBAAgB,YAAYqB,YAAY,CAACvB,eAAe,CAACK,KAAK,CAACO,OAAO,QAAQY,iBAAiB,CAACC,QAAQ,qBAAqBC,SAAS,CAAC1B,eAAe,CAAC2B,QAAQ,CAACjB,UAAU,mCAAmCnB,aAAa,GAAGkC,QAAQ,KAAKG,UAAU,CAAC5B,eAAe,CAAC6B,MAAM,CAACjB,OAAO,OAAOF,UAAU,sCAAsCoB,QAAQ,CAAC9B,eAAe,CAACK,KAAK,CAAC0B,WAAW1E,EAAE2E,QAAQ,IAAIC,UAAU,CAACC,OAAO,EAAEC,oBAAoB,EAAEC,qBAAqB,EAAElC,gBAAgB7C,EAAEmB,QAAQ6D,OAAOC,SAAS7C,OAAO,CAACO,eAAe,CAACK,KAAK,CAACC,cAAc,OAAOiC,OAAO,SAASC,SAAS,EAAEf,QAAQ,EAAE,CAACpE,EAAEoF,YAAYC,GAAG,OAAO,CAACjB,QAAQ,EAAEe,SAAS,MAAMG,cAAc,CAAC3C,eAAe,CAACK,KAAK,CAACS,MAAMzD,EAAEmB,QAAQI,UAAUD,KAAK8C,QAAQpE,EAAE2E,QAAQ,MAAMY,WAAW,CAAC5C,eAAe,CAAC6C,QAAQ,CAACtD,aAAa,KAAKuD,WAAW,CAAC9C,eAAe,CAACK,KAAK,CAACH,gBAAgB,yBAAyB6C,OAAO,CAAC5E,UAAU,EAAEC,aAAa,KAAK4E,kBAAkB,CAACtD,aAAa,CAACuD,oBAAmB,IAAKC,gBAAgB,CAAClD,eAAe,CAACtB,QAAQ,CAACU,SAAS,GAAGD,WAAW9B,EAAE4B,WAAWkE,oBAAoBC,gBAAgB,CAACpD,eAAe,CAACK,KAAK,CAACS,MAAM,UAAU0B,SAAS,OAAOa,YAAYhG,EAAE2E,QAAQ,GAAG,QAAQ,CAAC5C,SAAS,OAAOkE,UAAU,CAACtD,eAAe,CAACK,KAAK,CAACkD,MAAM,GAAGrB,OAAO,MAAMsB,QAAQ,CAACxD,eAAe,CAACK,KAAK,CAACkD,MAAM,OAAOE,OAAO,OAAOhC,QAAQ,QCAjvG,IAAIzD,EAAEb,EAAEuG,EAAEpG,ECwBJ,SAAUqG,GAAezH,SAC7BA,EAAQI,GACRA,EAAEsH,UACFA,EAASC,SACTA,GAAW,EAAKC,iBAChBA,GAAmB,EAAI9H,UACvBA,GAAY,EAAKc,QACjBA,EAAU,cAEV,MAAO1B,EAAM2I,GAAWC,EAAQA,UAAC,GAC3BC,EAAY1I,SAA0B,MAMtCF,EAAe6I,IACfD,EAAUxI,SAAWwI,EAAUxI,QAAQ0I,SAASD,EAAME,SAI1DL,GAAQ,EAAM,EAGhB,SAASM,EAAkBH,GACP,QAAdA,EAAMI,KACRJ,EAAMK,iBACNR,GAAQ,IACe,WAAdG,EAAMI,KACfP,GAAQ,EAEX,CAGD,MAAMS,EAAWjJ,SAAOH,GASxB,OARAI,EAAAA,WAAU,KACJgJ,EAAS/I,UAAYL,GACvB6I,EAAUxI,QAASE,QAGrB6I,EAAS/I,QAAUL,CAAI,GACtB,CAACA,IAGFQ,EACE6I,KAAAC,EAAAC,SAAA,CAAAzI,SAAA,CAAAC,EAAAA,IAACU,EAAAA,OACC,CAAAH,IAAKuH,EACL3H,GAAIA,EACJS,QApCe,KACnBgH,GAASS,IAAcA,GAAS,EAoC5BI,QAASd,GAAoB3H,MAAC0I,EAAiBA,kBAAA,IAC/ChB,SAAUA,EACV7H,UAAWA,EACXc,QAASA,WAERZ,IAEHC,EAAAA,IAAC2I,EAAMA,QACL1J,KAAMA,EACN2J,SAAUd,EAAUxI,QACpBuJ,UAAU,SACVC,YACA,EAAAC,MAAO,CAAEC,OAAQ,KAAM3C,SAAUyB,EAAUxI,SAAS2J,aAAalJ,SAEhE,EAAGmJ,kBAAiBL,eACnB7I,EAAAA,IAACmJ,EAAAA,SACKD,EACJH,MAAO,CACLK,gBAA+B,iBAAdP,EAA+B,WAAa,eAG/D9I,SAAAC,EAAAC,IAACoJ,QACC,CAAAtJ,SAAAC,MAACsJ,EAAAA,kBAAkB,CAAAC,YAAarK,EAAWa,SACzCC,MAACwJ,EAAQA,SAAA,CAACC,cAAexK,EAAMyK,UAAWxB,EAAiBnI,SACxD0H,EACEkC,QAAQC,GAAaA,EAASC,UAAW,IACzCC,KAAI,CAACF,EAAUG,IAEZtK,EAAAA,KAACuK,EAAAA,SACC,CAAA7J,GAAIyJ,EAASK,OAAS,GAAKF,EAC3BrC,SAAUkC,EAASlC,WAAY,EAC/B9G,QAAUmH,IACR7I,EAAY6I,GACZ6B,EAAShJ,SAAS,EAGnBb,SAAA,CAAA6J,EAASM,UACTN,EAASK,MACTL,EAASnB,yBAYpC,ED3Ha,SAAS5G,GAAGA,EAAEsI,OAAO,SAArB,CAA+BtI,IAAIA,EAAE,CAAE,IAAG,SAASA,GAAGA,EAAEsI,OAAO,SAAStI,EAAEuI,UAAU,WAAY,CAAtD,CAAuDpJ,IAAIA,EAAE,CAAA,IAAK,SAASa,GAAGA,EAAEwI,SAAS,WAAWxI,EAAEyI,YAAY,cAAczI,EAAE0I,YAAY,cAAc1I,EAAE2I,eAAe,iBAAiB3I,EAAE4I,MAAM,QAAQ5I,EAAE6I,SAAS,UAAW,CAAlK,CAAmKnD,IAAIA,EAAE,CAAA,IAAK,SAAS1F,GAAGA,EAAEwI,SAAS,WAAWxI,EAAEyI,YAAY,cAAczI,EAAE0I,YAAY,cAAc1I,EAAE2I,eAAe,iBAAiB3I,EAAE4I,MAAM,QAAQ5I,EAAE6I,SAAS,WAAW7I,EAAE8I,QAAQ,UAAU9I,EAAE+I,KAAK,MAAO,CAApM,CAAqMzJ,IAAIA,EAAE,CAAA,IEgBlf,MAAM0J,EAAuB,EAC3BC,YAAW,EACXC,QAAQ,KACR5K,KACA8J,QACAe,OACAC,QACAC,aACAC,eAEA,MAAMC,EAAkBD,EACnBpD,IACC,MAAMgC,EAAQsB,MAAMC,KAAKzK,EAAc0K,UAAUC,QAAQzD,EAAME,OAAO8C,OAChEU,EAAYJ,MAAMC,KAAKzK,EAAc6K,QAC3CP,EAASM,EAAU1B,GAAO,OAE5B4B,EAEJ,OACE3L,EAACC,IAAA2L,EAASA,UACR,CAAAZ,KAAMA,EACN7K,GAAIA,EACJ8J,MAAOA,EACP4B,QACA,EAAAd,MAAOlK,EAAciL,IAAIf,GACzBI,SAAUC,EACVW,UAAWjB,EAAW,oBAAiBa,EACvCV,MAAOA,EACPC,WAAYA,EACZc,WAAY,CACVlB,SAAUA,EACVmB,eACEjM,EAACC,IAAAiM,iBAAe,CAAAC,SAAS,QACvBpM,SAAAC,MAACoM,EAAAA,iBAAgB,CAAA,MAKtBrM,SAAAsL,MAAMC,KAAKzK,EAAc6K,QAAQ5B,KAAK3B,GACrCnI,EAAAA,IAACgK,EAAQA,SAA8B,CAAAe,MAAOlK,EAAciL,IAAI3D,GAAIpI,SACjEc,EAAciL,IAAI3D,IADNtH,EAAciL,IAAI3D,OAKrC,ECnBEkE,EAAsBC,IAC1B,OAAQA,GACN,KAAKvL,EAAWwL,QACd,OAAOC,EAA0B,OACnC,KAAKzL,EAAW0L,KAEhB,KAAK1L,EAAW2L,SACd,OAAOC,EAAyB,MAGlC,KAAK5L,EAAW6L,YACd,OAAOC,EAA8B,OACvC,KAAK9L,EAAW+L,QACd,OAAOH,EAAyB,MAClC,KAAK5L,EAAWgM,OACd,OAAOC,EAAwB,MACjC,KAAKjM,EAAWkM,aACd,OAAOT,EAA0B,OACpC,EAwBGU,EAAwBvD,IAC5B,OAAQA,EAAOwD,aAAab,YAC1B,KAAKvL,EAAWwL,QACd,OAAOa,OAAO7B,OAAOiB,GACvB,KAAKzL,EAAW0L,KAEhB,KAAK1L,EAAW2L,SACd,OAAOU,OAAO7B,OAAOoB,GAGvB,KAAK5L,EAAW6L,YACd,OAAOQ,OAAO7B,OAAOsB,GACvB,KAAK9L,EAAW+L,QACd,OAAOM,OAAO7B,OAAOoB,GACvB,KAAK5L,EAAWgM,OACd,OAAOK,OAAO7B,OAAOyB,GACvB,KAAKjM,EAAWkM,aACd,OAAOG,OAAO7B,OAAOiB,GACxB,EAGGa,EAAiB,EAAG1D,SAAQ2D,uBAM9BtN,EAAAA,IAAC4L,EAAAA,UACC,CAAAZ,KAAM,YACN7K,GAAI,YACJ8J,MAAO,YACP4B,QACA,EAAAd,MAAOpB,EAAO4D,SAASC,SACvBrC,SAXqBpD,IACvBuF,EAAkB3D,EA5CQ,EAACA,EAAgB6D,KAC7C,OAAQ7D,EAAOwD,aAAab,YAC1B,KAAKvL,EAAWwL,QACd,OAAOC,EAAkBgB,GAC3B,KAAKzM,EAAW0L,KAEhB,KAAK1L,EAAW2L,SACd,OAAOC,EAAkBa,GAG3B,KAAKzM,EAAW6L,YACd,OAAOC,EAAsBW,GAC/B,KAAKzM,EAAW+L,QACd,OAAOH,EAAkBa,GAC3B,KAAKzM,EAAWgM,OACd,OAAOC,EAAiBQ,GAC1B,KAAKzM,EAAWkM,aACd,OAAOT,EAAkBgB,GAC5B,EA0B2BC,CAAsB9D,EAAQ5B,EAAME,OAAO8C,OAAO,WAYzEmC,EAAqBvD,GAAQG,KAAK4D,GACjC1N,EAAAA,IAACgK,EAAQA,SAAA,CAAYe,MAAO2C,EAAI3N,SAE7B2N,GAFYA,OASjBC,EAAc,EAAGhE,SAAQiE,qBAC7B,GAAIjE,EAAOwD,aAAab,aAAevL,EAAW6L,cAAgBiB,EAAOlE,EAAOwD,aAAaW,YAC3F,MAAM,IAAIC,MAAM,4CAA4CpE,EAAOwD,aAAaa,iBAGlF,OACEhO,MAAAuI,EAAAA,SAAA,CAAAxI,SACG,MACC,OAAQ4J,EAAOwD,aAAab,YAC1B,KAAKvL,EAAWwL,QACd,OACEvM,MAACiO,EAAgBA,iBAAA,CACfC,QACElO,EAAAC,IAACkO,EAAQA,SAAA,CACPC,UAAWzE,EAAO4D,SAASxC,MAC3BI,SAAWpD,GAAU6F,EAAejE,IAAU5B,EAAME,OAAO8C,SAG/Dd,MAAON,EAAOwD,aAAaa,gBAGjC,KAAKjN,EAAW0L,KACd,OACEzM,EAACC,IAAAoO,EAAUA,WACT,CAAAC,YAAcC,GAAUvO,EAAAA,IAAC4L,EAASA,UAAK,IAAA2C,IACvCtE,MAAON,EAAOwD,aAAaa,cAC3BjD,MAAOpB,EAAO4D,SAASxC,OAAS,KAChCI,SAAWqD,GAAaZ,EAAejE,EL3JlC3I,IAAGA,EAAEA,EAAEyN,cAAcC,UAAU,EAAE,IAAI1N,EK2JK2N,CAAqBH,IACpExC,WAAY,CACVC,eACEjM,EAACC,IAAAiM,EAAcA,gBAACC,SAAS,QACvBpM,SAAAC,EAAAA,IAAC4O,EAAAA,QAAK,CAAAC,KAAMC,EAAgBA,iBAAE7K,KAAM,SAMhD,KAAKlD,EAAW2L,SACd,OACE1M,MAAC+O,EAAcA,eAAA,CACbT,YAAcC,GAAUvO,EAAAA,IAAC4L,EAASA,UAAA,IAAK2C,IACvCtE,MAAON,EAAOwD,aAAaa,cAC3BjD,MAAOpB,EAAO4D,SAASxC,OAAS,KAChCI,SAAWqD,GAAaZ,EAAejE,EAAQ6E,GAC/CxC,WAAY,CACVC,eACEjM,EAACC,IAAAiM,EAAcA,gBAACC,SAAS,QACvBpM,SAAAC,EAAAA,IAAC4O,EAAAA,QAAK,CAAAC,KAAMG,EAAgBA,iBAAE/K,KAAM,SAqBhD,KAAKlD,EAAW6L,YACd,OACE5M,EAAAA,IAAC4L,EAAAA,UAAS,CACR3B,MAAON,EAAOwD,aAAaa,cAC3BjD,MAAOpB,EAAO4D,SAASxC,MACvBc,QAAM,EACNV,SAAWpD,GAAU6F,EAAejE,EAAQ5B,EAAME,OAAO8C,OAAMhL,SAE9D4J,EAAOwD,aAAaW,YAAYhE,KAAK4D,GACpC1N,EAACC,IAAA+J,EAAQA,SAAY,CAAAe,MAAO2C,EAAI3N,SAC7B2N,GADYA,OAMvB,KAAK3M,EAAW+L,QACd,OACE9M,MAAC4L,EAAAA,UAAS,CACR3B,MAAON,EAAOwD,aAAaa,cAC3BiB,KAAK,SACLlE,MAAOpB,EAAO4D,SAASxC,MACvBI,SAAWpD,GAAU6F,EAAejE,EAAQuF,OAAOnH,EAAME,OAAO8C,QAChEiB,WAAY,CACVC,eACEjM,EAACC,IAAAiM,EAAcA,gBAACC,SAAS,QACvBpM,SAAAC,EAAAA,IAAC4O,EAAAA,QAAK,CAAAC,KAAMM,EAAUA,WAAElL,KAAM,SAM1C,KAAKlD,EAAWgM,OACd,OACE/M,EAACC,IAAA2L,EAASA,UACR,CAAA3B,MAAON,EAAOwD,aAAaa,cAC3BjD,MAAOpB,EAAO4D,SAASxC,MACvBI,SAAWpD,GAAU6F,EAAejE,EAAQ5B,EAAME,OAAO8C,OACzDiB,WAAY,CACVC,eACEjM,EAACC,IAAAiM,EAAcA,gBAACC,SAAS,QACvBpM,SAAAC,EAAAA,IAAC4O,EAAAA,QAAK,CAAAC,KAAMO,EAAoBA,qBAAEnL,KAAM,SAMpD,KAAKlD,EAAWkM,aACd,OACEjN,EAAAA,IAAC6K,EAAoB,CACnBZ,MAAON,EAAOwD,aAAaa,cAC3BjD,MAAOpB,EAAO4D,SAASxC,MACvBI,SAAWJ,GAAU6C,EAAejE,EAAQoB,KAIrD,EApHA,IAsHH,EAGEsE,EAAY,EAAG1F,SAAQ2F,eAAchC,oBAAmBM,oBAE1DnO,EAAAA,KAAC8P,EAAAA,KAAI,CAAC7B,MAAK,EAAA8B,aAAU3J,QAAS,EAAGzD,WAAY,SAAQrC,SAAA,CACnDC,EAAAA,IAACuP,EAAAA,KAAI,CAAC7B,MAAK,EAAA+B,GAAI,EAAC1P,SACb4J,GAAU3J,EAAAA,IAACqN,EAAe,CAAA1D,OAAQA,EAAQ2D,kBAAmBA,MAEhEtN,MAACuP,EAAIA,KAAA,CAAC7B,MAAK,EAAA+B,GAAI,EAAC1P,SACb4J,GAAU3J,EAAAC,IAAC0N,EAAY,CAAAhE,OAAQA,EAAQiE,eAAgBA,MAE1D5N,EAAAA,IAACuP,EAAAA,KAAI,CAAC7B,MAAK,EAAA+B,GAAI,EAAC1P,SACdC,EAAAA,IAAC0P,EAAAA,WAAU,CAAC9O,QAAS,IAAM0O,EAAa3F,YACtC3J,EAAAA,IAAC2P,EAAAA,iBAOLC,EAAaC,EAAAA,YAAW,SAC5BtB,EAGAhO,GAEA,OAAOP,EAACC,IAAA6P,QAAM,CAAAC,UAAU,OAAOxP,IAAKA,KAASgO,GAC/C,IAEayB,EAAe,EAAGC,UAASC,gBAAelR,UAASC,OAAMC,kBACpE,MAAMC,EAAwBC,SAAoB,OAC3C+Q,EAAaC,GAAkBvI,EAAAA,SAAmBoI,GAAW,IAEpE5Q,EAAAA,WAAU,KACR,GAAIJ,EAAM,CACR,MAAQK,QAASC,GAAuBJ,EACb,OAAvBI,GACFA,EAAmBC,OAEtB,IACA,CAACP,IAEJ,MAAMoR,EAAoB,CAAC1G,EAAgBoB,KACzCqF,GAAgBE,GACPA,EAAgBxG,KAAKyG,GACtB5G,EAAOxJ,KAAOoQ,EAAWpQ,GACpB,IACFoQ,EACHhD,SAAU,CAAExC,MAAOA,EAAOyC,SAAU+C,EAAWhD,SAASC,WAIrD+C,KAET,EAGEC,EAAuB,CAAC7G,EAAgB6D,KAC5C4C,GAAgBE,GACPA,EAAgBxG,KAAKyG,GACtB5G,EAAOxJ,KAAOoQ,EAAWpQ,GACpB,IACFoQ,EACHhD,SAAU,CAAExC,MAAOwF,EAAWhD,SAASxC,MAAOyC,SAAUA,IAIrD+C,KAET,EAGEE,EAAsB9G,IAC1ByG,GAAgBE,GAAoB,IAAIA,EAAgB3G,QAAQ4G,GAAeA,EAAWpQ,KAAOwJ,EAAOxJ,OAAK,EAGzGuQ,EAAS,KACbxR,IACAF,OAAQ2M,EAAU,EAQpB,OACElM,EAAAA,KAACC,EAAAA,OAAM,CACLT,KAAMA,EACNU,QAAS+Q,EACT9Q,OAAO,QACP+Q,oBAAqBf,EACrBgB,qBAAmB,EACnB/Q,WAAS,EACTC,SAAS,KACT+Q,GAAI,CACF,yBAA0B,CACxBC,eAAgB,aAGpBC,WAAY,CACVF,GAAI,CACFG,EAAG,EACHjL,OAAQ,SAEXhG,SAAA,CAEDC,EAACC,IAAAC,cAAY,CAAAC,GAAG,sBACdJ,SAAAC,MAACiR,EAAAA,WAAU,CAACC,UAAU,OAAOvM,MAAM,eAAehE,QAAQ,4BAI5DX,EAACC,IAAAG,gBAAc,CAAAC,UAAU,WACvBL,EAACC,IAAAK,oBAAkB,CAAAH,GAAG,4BAA4BI,IAAKpB,EAAuBqB,UAAW,EAACT,SACxFC,MAACmR,EAAAA,UAAS,CAACD,UAAU,OAAOpR,SAAS,KACnCC,SAAAC,MAACoR,EAAAA,IAAG,CAACP,GAAIQ,EAAoBtR,SAC3BN,OAAC8P,EAAAA,KAAI,CAACC,WAAS,EAAC3J,QAAS,EAAC9F,SAAA,CACvBoQ,EAAYrG,KAAKH,GAChB3J,EAAAA,IAACqP,EAAS,CAER1F,OAAQA,EACR2F,aAAcmB,EACdnD,kBAAmBkD,EACnB5C,eAAgByC,GAJX1G,EAAOxJ,MAOhBH,EAACC,IAAAsP,OAAK,CAAA7B,MAAK,EAAA8B,WACT,EAAAzP,SAAAC,EAAAC,IAACuH,EACC,CAAA3H,WAAW,EACX8H,kBAAkB,EAClBF,UAAWyI,EAAcpG,KAAKqD,IACrB,CACLlD,MAAOkD,EAAalD,OAASkD,EAAaa,cAC1CpN,QAAS,IACPwP,GAAgBE,GAAoB,IAC/BA,EACH,CACEnQ,GAAImQ,EAAgBhJ,OACpB6F,aAAc,CACZa,cAAeb,EAAaa,cAC5B/D,MAAOkD,EAAalD,MACpBqC,WAAYa,EAAab,YAE3BiB,SAAU,CACRC,SAAUnB,EAAmBc,EAAab,8DAepE7M,EAAAA,KAACgB,EAAaA,cACZ,CAAAV,SAAA,CAAAC,EAAAC,IAACS,SAAO,CAAAb,aAAUc,QAAQ,WAAWC,QAAS8P,EAErC3Q,SAAA,WACTN,OAACiB,EAAMA,OAAA,CAACb,WAAU,EAAAe,QAlFb,KACT1B,IACAF,EAAQmR,EAAY,EAgFapQ,SAAA,CAAA,SACpB,IAAMoQ,EAAY7I,OAAS,YAIxC,EC3ZSgK,EAAa,EAAGC,OAAMtS,OAAMC,cAAaF,cACpD,MAAMG,EAAwBC,SAAoB,MAClDC,EAAAA,WAAU,KACR,GAAIJ,EAAM,CACR,MAAQK,QAASC,GAAuBJ,EACb,OAAvBI,GACFA,EAAmBC,OAEtB,IACA,CAACP,IAEJ,MAAMuS,EAAK,KACTxS,IACAE,GAAa,EAGf,OACEO,EAAC6I,KAAA5I,EAAMA,OAAC,CAAAT,KAAMA,EAAMU,QAAS6R,EAAI5R,OAAO,QACtCG,SAAA,CAAAC,MAACI,EAAAA,cAAa,CAACC,UAAU,EACvBN,SAAAC,EAAAC,IAACK,oBAAiB,CAACC,IAAKpB,EAAuBqB,UAAW,EACvDT,SAAAwR,MAGLvR,EAAAA,IAACS,EAAaA,cACZ,CAAAV,SAAAC,EAAAC,IAACS,SAAM,CAACE,QAAS4Q,EAAezR,SAAA,WAGpC,EC3BS0R,EAAyBlD,GAalCvO,EAACC,IAAAyR,EAAeA,gBACd,CAAAR,UAAU,MACVS,OAAQ,EACRJ,KAAMhD,EAAMgD,KACZK,aAhBqBC,MAAO9J,EAA6C+J,KAC3E,IAAIC,GAAS,EACTD,EAAUvD,EAAMgD,OAClBQ,GAAS,GAGXxD,EAAMyD,QAAQF,SAERvD,EAAM0D,WAAWF,EAAO,EAS5BG,YAAa3D,EAAM4D,WACnBC,mBAAoB,CAAC7D,EAAM4D,YAC3BE,mBAAoB,EAAG/G,OAAMgH,QAAS,GAAGhH,KAAQgH,IACjDC,oBAAqB,CACnB7K,UAAW6G,EAAMiE,qBAEnBC,oBAAqB,CACnB/K,SAAyB,IAAf6G,EAAMgD,QC3BXmB,EAAyBC,EAAAA,gBAGzBC,EAA4BD,EAAAA,gBAG5BE,EAA0BF,EAAAA,gBAG1BG,EAA2BH,EAAAA,gBAE3BI,EAAkB,KAC7B,MAAMC,EAAUC,aAAWH,GAE3B,QAAgBnH,IAAZqH,EACF,MAAM,IAAIjF,MAAM,oDAGlB,OAAOiF,CAAO,ECMHE,EAAc,EACzBlU,UACAC,OACAC,cACAiU,UAAS,EACTC,UACAC,mBACAC,YACAC,uBACAC,wBACAtD,oBAEA,MAAMuD,iBAAEA,GAAqBV,KACvBW,gBAAEA,GAAoBC,EAAAA,cAEtBxU,EAAwBC,SAAoB,OAC3CwU,EAAWC,GAAgBhM,EAAQA,UAAU,IAC7CiM,EAAUC,GAAelM,EAAQA,SAAS,IAC1CmM,EAAWC,GAAgBpM,EAAAA,SAAwB,CAACwL,KACpDa,EAAUC,GAAetM,EAAQA,YACjCuM,EAAWC,GAAgBxM,EAAQA,YACnC2K,EAAqB8B,GAA0BzM,EAAQA,UAAU,IACjE0J,EAAMS,GAAWnK,EAAQA,SAAS,IAClC0M,EAAMC,GAAW3M,EAAQA,SAAoB,KAC7C4M,EAAgBC,GAAqB7M,EAAQA,SAClD0L,IAAyBJ,OAASxH,EAAY,MAEzCgJ,EAAeC,GAAoB/M,EAAQA,SAAsB,KACjEoI,EAAS4E,GAAchN,EAAQA,SAAW,KAC1CiN,EAAiBC,GAAsBlN,WAAY,IACrD2L,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,EAAIhO,OAAS,GACfgN,GAAuB,GACvBgB,EAAIC,OACsC,IAAjCT,EAAgBE,OAAOC,OAChCX,GAAuB,GAGzBE,EAAQc,GACRjB,EAAaiB,EAAI,IACjBnB,EAAYmB,EAAIA,EAAIhO,OAAS,IAC7ByM,EAAYuB,EAAIhO,QAAU,EAG3B,CAFC,MAAO2D,GTpGiD,EAAC/J,EAAEC,EAAEqU,KAAK,IAAItU,GAAG,kBAAkBA,EAAEuU,eAAc,IAAKvU,EAAEuU,aAAa,YAAY5T,EAAEV,GAAG,MAAMuU,EAAExU,EAAEyU,SAAS,GAAG3U,EAAE0U,GAAG,GAAGA,GAAGE,OAAO,GAAG,MAAMF,GAAGE,OAAOzU,EAAEW,EAAEZ,EAAEyU,UAAUpB,MAAMxS,QAAQ,CAACpB,QAAQ,QAAQU,kBAAiB,EAAGC,SAAQ,QAAS,CAAC,GAAG,MAAMoU,GAAGE,OAAO,OAAO3U,EAAEyU,EAAEnB,KAAKpT,EAAEqU,GAAGrU,EAAEW,EAAE4T,GAAGnB,MAAMxS,QAAQ,CAACpB,QAAQ,QAAQU,kBAAiB,EAAGC,SAAQ,GAAK,MAAKO,EAAEV,QAAQU,EAAEV,EAAE,ESqGla0U,CAAc5K,EAAOyI,EACtB,CACDG,GAAa,EAAM,EA2ErBxU,EAAAA,WAAU,KACRgW,GAAW,GACV,CAACP,IAEJzV,EAAAA,WAAU,KACR,GAAIJ,EAAM,CACR,MAAQK,QAASC,GAAuBJ,EACb,OAAvBI,GACFA,EAAmBC,OAEtB,IACA,CAACP,IAEJ,MAAMyR,EAAS,KACbxR,IACAF,OAAQ2M,EAAU,EA6DpB,OACElM,EAAA6I,KAAC5I,EAAMA,OAAA,CAACT,KAAMA,EAAMU,QAAS+Q,EAAQ9Q,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,MAAC8V,EAAAA,SAAQ,CACPjF,GACEsC,EACI,CACE,4EAA6E,CAC3EjR,QAAS,cAGbyJ,EAENoK,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,GAAI5L,MAAM6L,QAAQzC,GAAiB,OAEnC,GAAiC,IAA7BwC,EAAkB3P,OAGpB,OAFAoN,EAAkB,SAClBE,OAAiBjJ,GAInB,MAAMwL,EAASF,EAAkBA,EAAkB3P,OAAS,GAE5DoN,EAAkByC,GAClBvC,EAAiBL,EAAK6C,MAAMrM,GAAUA,EAAMmL,eAAiBiB,IAAQ,EAxC5CF,IACzB,GAAK5L,MAAM6L,QAAQzC,GAAnB,CAGA,GAAIwC,EAAkB3P,OAASmN,EAAenN,OAAQ,CACpD,MAAM+P,EAAOJ,EAAkB3P,OAASmN,EAAenN,OACjDgQ,EAAa,IAAIL,GAAmBM,OAAc,EAARF,GAC1CG,EAAWjD,EAAK5K,QAAQoB,IAAmE,IAAzDuM,EAAW9L,QAAQT,EAAMmL,gBACjEtB,GAAkB6C,IAChB,GAAKpM,MAAM6L,QAAQO,GAEnB,MAAO,IAAIA,KAAsBD,EAAS,GAE7C,CAGD,GAAIP,EAAkB3P,OAASmN,EAAenN,OAAQ,CACpD,MAAMoQ,EAAiBjD,EAAe9K,QAAQoB,IAAgD,IAAtCkM,EAAkBzL,QAAQT,KAClF6J,GAAkB6C,IAChB,GAAKpM,MAAM6L,QAAQO,GAEnB,MAAO,IAAIA,EAAkB9N,QAAQoB,IAAuE,IAA7D2M,EAAelM,QAAQT,EAAMmL,gBAAmC,GAElH,CAEDxB,EAAkBuC,EAxByB,CAwBP,EAuD5BU,gBAAkBxE,OAAiCxH,EArC9BiM,IAC7B,GAAIrE,EAAsB,CACxB,IAAKlI,MAAM6L,QAAQ3D,GAAuB,MAAMxF,MAAM,iDAEtD,OAAQwF,EAAqBsE,SAASD,EAAOzX,GAC9C,CAED,OAAO,CAAI,EA+BHsU,eAAgBA,EAChBqD,2BAA4B3E,EAC5BC,QAASA,EACT2E,6BACA,EAAA1U,WAAY,CACV2U,QAAS,IACPhY,EAAAA,IAACiY,EAAoBA,qBACnB,CAAAlY,SAAAN,OAACiB,EAAAA,OACC,CAAAC,QAAQ,WACRC,QAASiR,UACP,MAAMqG,QAAmBzE,EAAiBvD,EAAeD,GAErDiI,GA5LI,CAACA,IAC3BlG,EAAQ,GACR6C,EAAWqD,GAGXnD,GAAoBI,IAClB,MAAMgD,EAAsB,IAAKhD,GAWjC,OATAjF,EAAcxO,SACXiI,GAEEwO,EAAoBxO,EAAOqE,eAAiBoK,oCAC3CF,EACAvO,EAAOqE,iBAIN,IACFmH,EACHH,MAAO,CACLd,cAAUvI,EACVsJ,MAAO,EACPG,aAASzJ,MAERwM,EACJ,GACD,EAmKkBE,CAAoBH,EACrB,EAEHxQ,SAAUkM,EAAS7T,SAAA,CAAA,eAEa,IAAnBkQ,EAAQ3I,OAAe,IAAM2I,EAAQ3I,OAAS,IAAM,QAIvEgR,WAAY,IACVtY,EAAAA,IAACyR,EAAqB,CACpBQ,WAAYiD,EACZ1C,oBAAqBA,EACrBjB,KAAMA,EACNS,QAASA,EACTG,WAAY,WAOxB1S,EAAC6I,KAAA7H,EAAaA,yBACZT,EAAAA,IAACU,EAAAA,OAAO,CAAAE,QAAS8P,sBACjB1Q,EAAAA,IAACU,EAAMA,OAAA,CAACE,QA3HH,KACT1B,IACAF,EAAQ2V,EAAc,EAyHc5U,SAAA,YAGpC,EC/REwY,EAAoD,CACxDC,EACAC,IAEOD,EAAQ1O,KAAI,CAAC4O,EAAQ3O,KACnB,CACL2M,MAAOgC,EAAOzO,MAAQF,EACtB4O,WAAY,GACZC,MAAO,SACP3J,KAAM,UACN4J,WAAajB,GAETnY,EAAC6I,KAAA5H,SAAO,CAAAC,QAAQ,OAAOC,QAAS,IAAM8X,EAAOA,OAAOd,EAAO3B,eACxDyC,EAAOI,MACNL,GAASM,YAAa,IAASL,EAAOzO,aAQ9C+O,EAAmDR,GAChC,IAAnBA,EAAQlR,OAAqB,GAE1B,CACL,CACEoP,MAAO,UACPiC,WAAY,GACZC,MAAO,SACP3J,KAAM,UACN4J,WAAajB,GAET5X,MAACwH,EAAc,CACb7G,QAAQ,OACRgH,kBAAkB,EAClBF,UAAW+Q,EAAQ1O,KAAK4O,IACf,CACLzO,MAAOyO,EAAOzO,MACdC,UAAWwO,EAAOI,KAClBlY,QAAS,IAAM8X,EAAOA,OAAOd,EAAO3B,SAIxClW,SAAAC,EAAAC,IAACgZ,EAASA,UAAG,CAAA,OCyBnBC,EAAY,EAAGnO,QAAOrD,WAAUyR,WAAUC,WAAUC,aACxD,IAAIC,EA6BJ,OA1BEA,EADEzL,EAAO9C,GAEPtL,EACG6I,KAAAC,EAAAC,SAAA,CAAAzI,SAAA,CAAAsZ,GACCrZ,MAAC0P,EAAAA,WAAW,CAAAhI,SAAUA,EAAU9G,QAASyY,WACvCrZ,EAAAA,IAACuZ,EAAAA,iBAGJH,GACCpZ,MAAC0P,EAAAA,YAAWhI,SAAUA,EAAU9G,QAASwY,EAAQrZ,SAC/CC,EAAAA,IAACwZ,EAAAA,OAAM,CAAA,QAObxZ,EAAAA,IAAAuI,EAAAA,SAAA,CAAAxI,SACGoZ,GACCnZ,EAACC,IAAAyP,aAAW,CAAAhI,SAAUA,EAAU9G,QAASuY,EAAQpZ,SAC/CC,MAACyZ,EAAAA,gBAOJzZ,EAAAC,IAAAsI,EAAAC,SAAA,CAAAzI,SAAGuZ,GAAS,EAGfI,EAAY,EAAG3O,QAAOrD,WAAUiS,eACpC,IAAIL,EAgBJ,OAbEA,EADEzL,EAAO9C,GAEP/K,EAAAA,IAAAuI,EAAAA,SAAA,CAAAxI,SACG4Z,GACC3Z,EAACC,IAAAyP,aAAW,CAAAhI,SAAUA,EAAU9G,QAAS+Y,EAAQ5Z,SAC/CC,MAAC4Z,EAAAA,gBAMD5Z,qBAGHA,EAAAC,IAAAsI,EAAAC,SAAA,CAAAzI,SAAGuZ,GAAS,EC9HfO,EAA6BlH,EAAaA,gBAE1CmH,EAAyBnH,EAAAA,cAAgC,IAElDoH,EAAoB,KAC/B,MAAM/G,EAAUC,aAAW4G,GAE3B,QAAgBlO,IAAZqH,EACF,MAAM,IAAIjF,MAAM,sDAGlB,OAAOiF,CAAO,ECjCVgH,EAAsB,CAC1BC,GAAI,MACJC,GAAI,EACJvV,MAAOwV,EAAM9X,QAAQK,KAAKD,UAC1B,mBAAoB,CAClBkC,MAAOwV,EAAM9X,QAAQI,UAAUD,MAEjC,iBAAkB,CAChBmC,MAAOwV,EAAM9X,QAAQI,UAAUD,gCFwBH,EAC9BwI,OACA7K,KACA8J,QACAc,QACAE,SAAQ,EACRC,aACAxD,YAAW,EACX0S,YAAW,EACXC,YACAvB,OACAwB,QACAjB,SACAF,WACAQ,WACAP,eAEA,MAAOmB,EAASC,GAAc3S,EAAQA,UAAC,GAEvC,IAAIyR,EAQJ,OALEA,EADEc,EACMpa,EAACC,IAAAiZ,EAAU,CAAAnO,MAAOA,EAAOrD,SAAUA,EAAUyR,SAAUA,EAAUE,OAAQA,EAAQD,SAAUA,IAE3FpZ,EAACC,IAAAyZ,EAAU,CAAA3O,MAAOA,EAAOrD,SAAUA,EAAUiS,SAAUA,IAI/Dla,EAAAA,KAAC8P,EAAAA,KAAK,CAAAC,WAAU,EAAA9B,MAAK,EAAAqC,UAAU,MAAMe,eAAe,UAAU2J,aAAa,UACzE1a,SAAA,CAAAC,EAAAC,IAACya,EAAUA,WAAA,CACT7J,GAAI,CAAEvL,QAAS,GACfoC,SAAUA,GAAY0S,EACtBO,eAAgB,IAAMH,GAAW,GACjCI,OAAQ,IAAMJ,GAAW,GACzB5Z,QAAS0Z,WAETta,EAACC,IAAA2L,EAASA,UACR,CAAAlE,UAAW4S,GAAS5S,EACpBsD,KAAMA,EACN7K,GAAIA,EACJ8J,MAAOA,EACPgB,MAAOA,EACPC,WAAYA,EACZqP,QAASA,EACT1a,WACA,EAAAkL,MAAOsP,EAAUQ,KAAK,OACtB9O,UAAYqO,EAAuB,oBAAZzO,EACvBkF,GAAI,CACF,SAAU,CACRiK,OAAQ,WAEV,8BAA+B,CAC7BA,OAAQ,YAGZ9O,WAAY,CACVlB,UAAU,EACVmB,eAAgBjM,MAACkM,iBAAc,CAACC,SAAS,QAASpM,SAAA+Y,SAIvDQ,IAEH,6BC3D8B,EAAGvZ,eACnC,MAAMgb,EAAWC,EAAAA,cACX5Z,EAAW6Z,EAAAA,eAEVC,EAAiBC,GAAsBtT,EAAQA,SAAmB,KAClEuT,EAAoBC,GAAyBxT,EAAQA,SAAiB,CAAS,GAEtFxI,EAAAA,WAAU,KACRgc,GAAuBC,IACd,IACFA,EACHnT,IAAK,KAAO/G,EAASma,SACrB1M,KAAMzN,EAASma,YAEjB,GACD,IAEH,MAIMC,EAAwB,CAC5BC,cAAgBnJ,IACd6I,EAAmB,IACnBE,EAAsB,CACpBlT,IAAK,KAAOmK,EAAGoJ,WACfzR,MAAO,KACP4E,KAAMyD,IAGRyI,EAASzI,EAAG,EAEdyI,SAAWzI,IACT,GAAiC,OAA7B8I,EAAmBnR,MACrB,MAAM8D,MAAM,gCAGdoN,GAAoBQ,GACX,IAAIA,EAAqBP,KAGlCC,EAAsB,CACpBlT,IAAK+S,EAAgB5T,OAAS,IAAMgL,EAAGoJ,WACvCzR,MAAO,KACP4E,KAAMyD,IAGRyI,EAASzI,EAAG,EAEdsJ,KAAM,KACJ,GAA+B,IAA3BV,EAAgB5T,OAAc,CAChC,MAAM4M,EAAWgH,EAAgBA,EAAgB5T,OAAS,GAM1D,OALA+T,EAAsBnH,GACtBiH,GAAoBU,GACX,IAAIA,EAAoBtE,MAAM,EAAGsE,EAAoBvU,OAAS,WAEvEyT,EAAS7G,EAASrF,KAEnB,CAEDsM,EAAmB,IACnBE,EAAsB,CACpBlT,IAAK,KAAO,IAAIuT,WAChBzR,MAAO,KACP4E,KAAM,MAGRkM,EAAS,IAAI,EAEfe,eApDqBC,EAAAA,SAAQ,IACK,IAA3Bb,EAAgB5T,QACtB,CAAC4T,IAmDFc,SAAWC,IACTZ,GAAuBC,IACd,IAAKA,EAAwBrR,MAAOgS,KAC3C,GAIN,OACEjc,EAAAA,IAAC8Z,EAAuBoC,SAAS,CAAAnR,MAAOmQ,EACtCnb,SAAAC,EAAAC,IAAC4Z,EAA2BqC,SAAS,CAAAnR,MAAOyQ,WACzCzb,KAGL,4FAG4B,KAC9B,MAAMmb,EAAkBjI,aAAW6G,GAEnC,OACEra,EAAA6I,KAAC6T,EAAWA,YAAA,CAACC,SAAU,EAAGC,UAAU,IAAGtc,SAAA,CACrCC,EAAAA,IAACsc,EAAAA,KAAO,CAAA,GACPpB,EAAgBpR,KAAI,EAAGG,QAAO9B,OAAO4B,IAElC/J,EAAAC,IAACgR,EAAUA,WAAA,CAACtM,MAAM,eAAc5E,SAC7BkK,GADmC9B,OAM5C,qBC5HE,UAAqBpI,SAAEA,EAAQuS,GAAEA,KAAO/D,IAC5C,MAAMgO,EAAWC,kBAAgBlK,GAC3BmK,EAAQC,EAAQA,SAAC,CAAE7N,KAAM0N,EAAShB,SAAUoB,KAAK,KACjDlB,cAAEA,GAAkB1B,IAM1B,OACE/Z,MAAC4c,EAAAA,SAAQ,CAACC,gBAAe,EAAA9T,MAAO,CAAE+T,eAAgB,QAAQ/c,SACxDC,EAAAA,IAAC+c,EAAAA,eAAc,CAACC,WAAYP,EAAO5L,GAAImJ,EAAqBpZ,QANzC,KACrB6a,EAAcnJ,EAAG,EAMZvS,SAAAA,KAIT,yDCX8B,EAAGA,eAE/B,MAAOkd,EAAkBC,GAAuBrV,EAAQA,UAAC,IAClDsV,EAAYC,GAAiBvV,EAAQA,WAEtCwV,EAAwB,KAC5BH,GAAoB,EAAM,EAUtBI,EAA+C,CACnDC,eAR2B1L,MAAON,IAClC2L,GAAoB,GACb,IAAIM,SAAexe,IACxBoe,EAAcpd,EAAAA,IAACsR,EAAU,CAACC,KAAMA,EAAMrS,YAAame,EAAuBpe,MAAM,EAAMD,QAASA,IAAY,OASxGye,EAAmBC,GAAwB7V,EAAQA,UAAC,IACpD8V,EAAaC,GAAkB/V,EAAQA,WAExCgW,EAAyB,KAC7BH,GAAqB,EAAM,EAgCvBI,EAAkD,CACtDC,gBA9B4BlM,OAC5BuB,UACAC,mBACAC,YACAH,UAAS,EACTI,uBACArD,gBACA8N,6BAEAN,GAAqB,GAEd,IAAIF,SAAkBxe,IAC3B4e,EACE5d,MAACkT,EAAW,CACVhU,YAAa2e,EACb5e,MAAM,EACND,QAASA,EACToU,QAASA,EACTC,iBAAkBA,EAClBC,UAAWA,EACXH,OAAQA,EACRI,qBAAsBA,EACtBrD,cAAeA,EACfsD,sBAAuBwK,IAE1B,OASEC,EAAqBC,GAA0BrW,EAAQA,UAAC,IACxDsW,EAAeC,GAAoBvW,EAAQA,WAE5CwW,EAA2B,KAC/BH,GAAuB,IAChB,GAmBHI,EAAqD,CACzDC,kBAjB8B1M,MAAO/S,EAAyCC,KAC9Emf,GAAuB,GAEhB,IAAIV,SAAkBxe,IAC3Bof,EACEpe,EAACC,IAAApB,EACC,CAAAC,oBAAqBA,EACrBC,MAAOA,EACPG,YAAamf,EACbpf,MAAM,EACND,QAASA,IAEZ,OASEwf,EAAoBC,GAAyB5W,EAAQA,UAAC,IACtD6W,EAAcC,GAAmB9W,EAAQA,WAE1C+W,EAA0B,KAC9BH,GAAsB,IACf,GAmBHI,EAAmD,CACvDpL,iBAjB6B5B,MAAO3B,EAA+BD,KACnEwO,GAAsB,GAEf,IAAIjB,SAAmBxe,IAC5B2f,EACE3e,EAACC,IAAA+P,EACC,CAAAC,QAASA,EACTC,cAAeA,EACfhR,YAAa0f,EACb3f,MAAM,EACND,QAASA,IAEZ,MAQL,OACEgB,EAACC,IAAAyS,EAAuBwJ,SAAS,CAAAnR,MAAOuS,EACtCvd,SAAAC,EAAAC,IAAC2S,EAA0BsJ,SAAQ,CAACnR,MAAOuT,EAAoBve,SAC7DC,EAACC,IAAA4S,EAAwBqJ,SAAS,CAAAnR,MAAO+S,EACvC/d,SAAAN,EAAA6I,KAACwK,EAAyBoJ,SAAQ,CAACnR,MAAO8T,EAAmB9e,SAAA,CAC1DA,EACAkd,GAAoBE,EACpBc,GAAuBE,EACvBV,GAAqBE,EACrBa,GAAsBE,UAK/B,kGCzJE,SAAenQ,GACnB,OACE9O,EAAA6I,KAAC8I,MAAG,CACFP,GAAI,CACFiO,EAAG,EACH5c,QAAS,OACTC,cAAe,MACfC,WAAY,UACbrC,SAAA,CAEDC,MACE,MAAA,CAAA+e,IAAKxQ,EAAMyQ,OACXC,IAAI,OACJlW,MAAO,CACL3B,MAAO,OACPF,YAAa,UAGjBlH,EAAAA,IAACiR,EAAUA,WAAA,CACTJ,GAAI,CACF5N,SAAU,GACVD,WAAY,OACZ2B,MAAO,kBACR5E,SAEAwO,EAAM7L,SAIf,eC7BM,SAAe6L,GACnB,OACE9O,EAAA6I,KAAC8I,MAAG,CACFP,GAAI,CACFiO,EAAG,EACH5c,QAAS,OACTC,cAAe,SACfC,WAAY,UACbrC,SAAA,CAEDC,MACE,MAAA,CAAA+e,IAAKxQ,EAAMyQ,OACXC,IAAI,OACJlW,MAAO,CACL3B,MAAO,UAGXpH,EAAAA,IAACiR,EAAUA,WAAA,CACTJ,GAAI,CACF5N,SAAU,GACVD,WAAY,QACbjD,SAEAwO,EAAM2Q,aAIf,2ECpB0B,EAAGngB,QAAOgB,eAClC,MAAMic,SAAEA,GAAajC,IAMrB,OAJA1a,EAAAA,WAAU,KACR2c,EAASjd,EAAM,GACd,CAACA,IAGFU,EACE6I,KAAAC,EAAAC,SAAA,CAAAzI,SAAA,CAAAC,EAAAC,IAACkf,EAAMA,OAAA,CAACjO,UAAU,MAAM/E,SAAS,SAASiT,UAAW,EAAGvO,GAAI,CAAE7H,OAAQ,GAAGjJ,SACvEC,MAACgY,EAAOA,QAAA,CAAAjY,SACNN,EAAAA,KAAC8P,EAAAA,MAAKC,WAAS,EAACpN,WAAW,SAASyD,QAAS,YAC3C7F,EAACC,IAAAsP,EAAIA,KAAC,CAAA7B,QAAK+B,IAAE,EAAA1P,SACXC,EAAAA,IAACiR,EAAAA,YAAWC,UAAU,OAAOvM,MAAM,eAAehE,QAAQ,KAAIZ,SAC3DhB,MAGJgB,SAIPC,EAAAA,IAACqf,EAAAA,QAAU,CAAA,KAEb,0FP1B+D,CACjE7G,EACAC,KAEA,IAAK5K,EAAO2K,IAA+B,IAAnBA,EAAQlR,OAC9B,MAAO,GAGT,IAAIgY,EAAqB,EAKzB,GAJI7G,GAAS8G,eACXD,EAAqB9G,EAAQlR,OAASmR,EAAQ8G,aAAe/G,EAAQlR,OAASmR,EAAQ8G,cAGpFD,EAAqB,EACvB,OAAO/G,EAAkBC,EAASC,GAC7B,GAA2B,IAAvB6G,EACT,MAAO,GACF,GAA2B,IAAvBA,EACT,OAAOtG,EAAgBR,GAClB,CACL,MAAMgH,EAAchH,EAAQlR,SAAWgY,EAAqBA,EAAqBA,EAAqB,EAChGG,EAAuBjH,EAAQjB,MAAM,EAAGiI,GACxCE,EAAqBlH,EAAQjB,MAAMiI,GAEzC,MAAO,IAAIjH,EAAkBkH,EAAsBhH,MAAaO,EAAgB0G,GACjF"}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ConfirmationDialogProps, DialogProviderProps, FilterDialogProps, ConfirmDialogProviderContext, FilterDialogProviderContext, PageDialogProviderContext, RangeDialogProviderContext, FilterOption } from "@judo/components-api";
2
+ import { ConfirmationDialogProps, DialogProviderProps, FilterDialogProps, ConfirmDialogProviderContext, FilterDialogProviderContext, PageDialogProviderContext, RangeDialogProviderContext, FilterOption, HeroProps, LogoProps } from "@judo/components-api";
3
3
  import { ReactNode, Dispatch, SetStateAction } from "react";
4
4
  import { GridColumns, GridSortItem, GridSelectionModel, GridRowId } from "@mui/x-data-grid";
5
5
  import { JudoStored, QueryCustomizer } from "@judo/data-api-common";
@@ -97,6 +97,8 @@ interface DropdownButtonProps {
97
97
  variant?: "text" | "outlined" | "contained" | undefined;
98
98
  }
99
99
  declare function DropdownButton({ children, id, menuItems, disabled, showDropdownIcon, fullWidth, variant }: DropdownButtonProps): JSX.Element;
100
+ declare function Hero(props: HeroProps): JSX.Element;
101
+ declare function Logo(props: LogoProps): JSX.Element;
100
102
  interface PageHeaderProps {
101
103
  title: string;
102
104
  children: ReactNode;
@@ -113,4 +115,4 @@ interface TrinaryLogicProps {
113
115
  onChange?: (value: boolean | null) => void;
114
116
  }
115
117
  declare const TrinaryLogicCombobox: ({ readOnly, value, id, label, name, error, helperText, onChange }: TrinaryLogicProps) => JSX.Element;
116
- export { ConfirmationDialog, DialogProvider, FilterDialog, PageDialogContextState, ConfirmDialogContextState, RangeDialogContextState, FilterDialogContextState, useFilterDialog, PageDialog, RangeDialog, columnsActionCalculator, AggregationInput, JudoNavigationSetTitle, useJudoNavigation, BreadcrumbProvider, CustomBreadcrumb, CustomLink, CustomTablePaginationProps, CustomTablePagination, DropdownButton, PageHeader, TrinaryLogicCombobox };
118
+ export { ConfirmationDialog, DialogProvider, FilterDialog, PageDialogContextState, ConfirmDialogContextState, RangeDialogContextState, FilterDialogContextState, useFilterDialog, PageDialog, RangeDialog, columnsActionCalculator, AggregationInput, JudoNavigationSetTitle, useJudoNavigation, BreadcrumbProvider, CustomBreadcrumb, CustomLink, CustomTablePaginationProps, CustomTablePagination, DropdownButton, Hero, Logo, PageHeader, TrinaryLogicCombobox };
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ConfirmationDialogProps, DialogProviderProps, FilterDialogProps, ConfirmDialogProviderContext, FilterDialogProviderContext, PageDialogProviderContext, RangeDialogProviderContext, FilterOption } from "@judo/components-api";
2
+ import { ConfirmationDialogProps, DialogProviderProps, FilterDialogProps, ConfirmDialogProviderContext, FilterDialogProviderContext, PageDialogProviderContext, RangeDialogProviderContext, FilterOption, HeroProps, LogoProps } from "@judo/components-api";
3
3
  import { ReactNode, Dispatch, SetStateAction } from "react";
4
4
  import { GridColumns, GridSortItem, GridSelectionModel, GridRowId } from "@mui/x-data-grid";
5
5
  import { JudoStored, QueryCustomizer } from "@judo/data-api-common";
@@ -97,6 +97,8 @@ interface DropdownButtonProps {
97
97
  variant?: "text" | "outlined" | "contained" | undefined;
98
98
  }
99
99
  declare function DropdownButton({ children, id, menuItems, disabled, showDropdownIcon, fullWidth, variant }: DropdownButtonProps): JSX.Element;
100
+ declare function Hero(props: HeroProps): JSX.Element;
101
+ declare function Logo(props: LogoProps): JSX.Element;
100
102
  interface PageHeaderProps {
101
103
  title: string;
102
104
  children: ReactNode;
@@ -113,4 +115,4 @@ interface TrinaryLogicProps {
113
115
  onChange?: (value: boolean | null) => void;
114
116
  }
115
117
  declare const TrinaryLogicCombobox: ({ readOnly, value, id, label, name, error, helperText, onChange }: TrinaryLogicProps) => JSX.Element;
116
- export { ConfirmationDialog, DialogProvider, FilterDialog, PageDialogContextState, ConfirmDialogContextState, RangeDialogContextState, FilterDialogContextState, useFilterDialog, PageDialog, RangeDialog, columnsActionCalculator, AggregationInput, JudoNavigationSetTitle, useJudoNavigation, BreadcrumbProvider, CustomBreadcrumb, CustomLink, CustomTablePaginationProps, CustomTablePagination, DropdownButton, PageHeader, TrinaryLogicCombobox };
118
+ export { ConfirmationDialog, DialogProvider, FilterDialog, PageDialogContextState, ConfirmDialogContextState, RangeDialogContextState, FilterDialogContextState, useFilterDialog, PageDialog, RangeDialog, columnsActionCalculator, AggregationInput, JudoNavigationSetTitle, useJudoNavigation, BreadcrumbProvider, CustomBreadcrumb, CustomLink, CustomTablePaginationProps, CustomTablePagination, DropdownButton, Hero, Logo, PageHeader, TrinaryLogicCombobox };