wcz-test 6.12.9 → 6.13.0

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.js","sources":["../src/components/core/TypographyWithIcon.tsx","../src/components/core/Fullscreen.tsx","../src/components/file/Dropzone.tsx","../src/contexts/FileContext.ts","../src/components/file/fileViewer/common/ActionsMenu.tsx","../src/components/file/fileViewer/FileViewerGrid.tsx","../src/components/file/fileViewer/FileViewerList.tsx","../src/components/file/fileViewer/ImageViewer.tsx","../src/components/file/FileViewer.tsx","../src/components/data-grid/ChipInputCell.tsx","../src/components/data-grid/EditableColumnHeader.tsx","../src/components/router/RouterButton.tsx","../src/components/router/RouterGridActionsCellItem.tsx","../src/components/router/RouterIconButton.tsx","../src/components/router/RouterLink.tsx","../src/components/router/RouterTab.tsx","../src/components/router/RouterNotFound.tsx","../src/components/router/RouterError.tsx"],"sourcesContent":["import { Stack, Typography } from \"@mui/material\";\r\nimport type { SxProps, Theme, TypographyProps } from \"@mui/material\";\r\n\r\ninterface TypographyWithIconProps extends TypographyProps {\r\n startIcon?: React.ReactNode;\r\n endIcon?: React.ReactNode;\r\n}\r\n\r\nexport const TypographyWithIcon: React.FC<TypographyWithIconProps> = ({ startIcon, endIcon, children, sx, ...props }) => {\r\n const iconSx: SxProps<Theme> = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexShrink: 0,\r\n lineHeight: 0,\r\n \"& > svg\": {\r\n display: \"block\",\r\n },\r\n };\r\n\r\n return (\r\n <Typography\r\n component=\"span\"\r\n sx={{\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n verticalAlign: \"middle\",\r\n ...sx,\r\n }}\r\n gap={1}\r\n {...props}\r\n >\r\n {startIcon && (\r\n <Stack component=\"span\" sx={iconSx}>\r\n {startIcon}\r\n </Stack>\r\n )}\r\n <Stack component=\"span\" sx={{ display: \"inline\", lineHeight: \"inherit\" }}>\r\n {children}\r\n </Stack>\r\n {endIcon && (\r\n <Stack component=\"span\" sx={iconSx}>\r\n {endIcon}\r\n </Stack>\r\n )}\r\n </Typography>\r\n );\r\n};","import { Box } from \"@mui/material\";\r\nimport { useEffect, useEffectEvent, useRef, useState } from \"react\";\r\nimport type { BoxProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\n\r\nexport const Fullscreen: FC<BoxProps> = ({ children, sx, ...props }) => {\r\n const reference = useRef<HTMLDivElement | null>(null);\r\n const [height, setHeight] = useState<number>();\r\n\r\n const recompute = useEffectEvent(() => {\r\n if (!reference.current) return;\r\n const top = Math.ceil(reference.current.getBoundingClientRect().top);\r\n const avail = Math.max(0, window.innerHeight - top);\r\n setHeight(avail);\r\n });\r\n\r\n useEffect(() => {\r\n const element = reference.current;\r\n if (!element) return;\r\n\r\n recompute();\r\n\r\n window.addEventListener(\"resize\", recompute);\r\n\r\n const ro = new ResizeObserver(recompute);\r\n ro.observe(document.documentElement);\r\n ro.observe(document.body);\r\n ro.observe(element);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", recompute);\r\n ro.disconnect();\r\n };\r\n }, []);\r\n\r\n return (\r\n <Box\r\n ref={reference}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n minHeight: 0,\r\n width: \"100%\",\r\n overflow: \"auto\",\r\n ...sx,\r\n }}\r\n height={height}\r\n {...props}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};","import CloudUpload from \"@mui/icons-material/CloudUpload\";\r\nimport { Paper, Typography, useTheme } from \"@mui/material\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport type { SxProps, Theme} from \"@mui/material\";\r\nimport type { CSSProperties, FC } from \"react\";\r\nimport type { DropzoneOptions} from \"react-dropzone\";\r\n\r\nconst baseStyle: CSSProperties = {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: \"20px\",\r\n borderWidth: 2,\r\n borderRadius: 2,\r\n borderStyle: \"dashed\",\r\n outline: \"none\",\r\n transition: \"border .24s ease-in-out\",\r\n cursor: \"pointer\",\r\n};\r\n\r\ninterface DropzoneProps extends DropzoneOptions {\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const Dropzone: FC<DropzoneProps> = ({ sx, ...props }) => {\r\n const { getRootProps, getInputProps, isFocused, isDragAccept, isDragReject, } = useDropzone(props);\r\n const { t } = useTranslation();\r\n const theme = useTheme();\r\n\r\n const style = {\r\n ...baseStyle,\r\n ...(isFocused ? { borderColor: theme.palette.primary.main } : {}),\r\n ...(isDragAccept ? { borderColor: theme.palette.success.main } : {}),\r\n ...(isDragReject ? { borderColor: theme.palette.error.main } : {})\r\n };\r\n\r\n return (\r\n <Paper variant=\"outlined\" {...getRootProps({ style })} sx={sx}>\r\n <input {...getInputProps()} style={{ display: \"none\" }} />\r\n <CloudUpload />\r\n <Typography>{t(\"Layout.File.DragSomeFilesHereOrClickToSelectThem\")}</Typography>\r\n </Paper>\r\n );\r\n};","import { createContext, useContext } from \"react\";\r\nimport type { FileMeta } from \"../models/file/FileMeta\";\r\nimport type { FileActions } from \"~/models/file/FileActions\";\r\n\r\nexport interface FileContextValue {\r\n fileMetas: Array<FileMeta>;\r\n onDelete?: (params: { remainingFileMetas: Array<FileMeta>; deletedFileMeta: FileMeta }) => void;\r\n actions?: FileActions;\r\n setImageId: (imageId: string) => void;\r\n};\r\n\r\nexport const FileContext = createContext<FileContextValue | null>(null);\r\n\r\nexport const useFile = () => {\r\n const context = useContext(FileContext);\r\n if (!context) {\r\n throw new Error(\"FileViewer components must be used within FileViewer\");\r\n }\r\n return context;\r\n};","import Delete from \"@mui/icons-material/Delete\";\r\nimport FileDownload from \"@mui/icons-material/FileDownload\";\r\nimport { List, ListItemButton, ListItemIcon, ListItemText, Menu } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport type { FC } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\nimport { useDeleteFile, useDownloadFile } from \"~/queries/FileHooks\";\r\n\r\ninterface ActionsMenuProps {\r\n meta: FileMeta;\r\n menu: { mouseX: number; mouseY: number } | null;\r\n setMenu: (menu: { mouseX: number; mouseY: number } | null) => void;\r\n}\r\n\r\nexport const ActionsMenu: FC<ActionsMenuProps> = ({ meta, menu, setMenu }) => {\r\n const { t } = useTranslation();\r\n const { fileMetas, onDelete, actions } = useFile();\r\n const { confirm } = useDialogs();\r\n\r\n const handleMenuClose = () => { setMenu(null); };\r\n\r\n const { mutate: download, isPending: isDownloading } = useDownloadFile();\r\n const { mutate: deleteFile, isPending: isDeleting } = useDeleteFile();\r\n\r\n const handleOnDownload = () => {\r\n handleMenuClose();\r\n download(meta);\r\n };\r\n\r\n const handleOnDelete = async () => {\r\n if (!await confirm(t(\"Layout.File.AreYouSureYouWantToDelete\", { fileName: meta.fileName })))\r\n return;\r\n\r\n deleteFile(meta);\r\n handleMenuClose();\r\n\r\n if (onDelete) {\r\n const remainingFileMetas: Array<FileMeta> = fileMetas.filter(m => m.id !== meta.id);\r\n onDelete({ remainingFileMetas, deletedFileMeta: meta });\r\n }\r\n };\r\n\r\n return (\r\n <Menu open={menu !== null} onClose={handleMenuClose} anchorReference=\"anchorPosition\" variant=\"menu\"\r\n anchorPosition={menu === null ? undefined : { top: menu.mouseY, left: menu.mouseX }}>\r\n <List disablePadding>\r\n {actions?.download !== false &&\r\n <ListItemButton onClick={handleOnDownload} disabled={isDownloading}>\r\n <ListItemIcon>\r\n <FileDownload />\r\n </ListItemIcon>\r\n <ListItemText>{t(\"Layout.File.Download\")}</ListItemText>\r\n </ListItemButton>\r\n }\r\n {actions?.delete !== false &&\r\n <ListItemButton onClick={handleOnDelete} disabled={isDeleting}>\r\n <ListItemIcon>\r\n <Delete />\r\n </ListItemIcon>\r\n <ListItemText>{t(\"Layout.File.Delete\")}</ListItemText>\r\n </ListItemButton>\r\n }\r\n </List>\r\n </Menu>\r\n );\r\n};\r\n","import MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport { Box, IconButton, ImageListItem, ImageListItemBar, Stack, Tooltip } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport React, { Fragment, useEffect, useState } from \"react\";\r\nimport { useInView } from \"react-intersection-observer\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\nimport type { SxProps, Theme } from \"@mui/material\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useGetFileThumbnail, useOpenFile } from \"~/queries/FileHooks\";\r\n\r\nconst IMAGE_SIZE = 150;\r\n\r\ntype FileViewerGridItemBar = \"hidden\" | \"always\" | \"onMouseEnter\";\r\n\r\nexport interface FileViewerGridProps {\r\n size?: number;\r\n itemBar?: FileViewerGridItemBar;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const FileViewerGrid: React.FC<FileViewerGridProps> = ({ sx, size, itemBar }) => {\r\n const { fileMetas } = useFile();\r\n\r\n return (\r\n <Stack direction=\"row\" spacing={1} sx={{ overflow: \"auto\", ...sx }}>\r\n {fileMetas.map(fileMeta => (\r\n <GridFileViewerItem\r\n key={fileMeta.id}\r\n meta={fileMeta}\r\n size={size}\r\n itemBar={itemBar}\r\n />\r\n ))}\r\n </Stack>\r\n );\r\n};\r\n\r\ninterface GridFileViewerItemProps {\r\n meta: FileMeta;\r\n size?: number;\r\n itemBar?: FileViewerGridItemBar;\r\n}\r\n\r\nexport const GridFileViewerItem: React.FC<GridFileViewerItemProps> = ({ meta, size, itemBar }) => {\r\n const { setImageId, actions } = useFile();\r\n const [showItemBar, setShowItemBar] = useState<boolean>(itemBar === \"always\");\r\n const [menu, setMenu] = useState<{ mouseX: number; mouseY: number; } | null>(null);\r\n const { ref, inView } = useInView();\r\n\r\n useEffect(() => {\r\n setShowItemBar(itemBar === \"always\");\r\n }, [itemBar]);\r\n\r\n const { data: source } = useGetFileThumbnail({ meta }, { enabled: inView });\r\n\r\n const handleOnMouseEnter = () => setShowItemBar(true);\r\n const handleOnMouseLeave = () => itemBar !== \"always\" && setShowItemBar(false);\r\n\r\n const openMenu = (event: React.MouseEvent) => {\r\n setMenu(menu === null ? { mouseX: event.clientX, mouseY: event.clientY, } : null);\r\n setTimeout(() => setShowItemBar(true));\r\n };\r\n\r\n const { mutate: openFile } = useOpenFile();\r\n const { mutate: download } = useDownloadFile();\r\n\r\n const onClick = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": { return setImageId(meta.id); }\r\n case \"application\": { return openFile(meta); }\r\n case \"video\": { return openFile(meta); }\r\n default: { return download(meta); }\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <ImageListItem sx={{ width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }} onMouseEnter={handleOnMouseEnter} onMouseLeave={handleOnMouseLeave} ref={ref}>\r\n <Box\r\n component=\"img\"\r\n src={source}\r\n loading=\"lazy\"\r\n alt={\"thumbnail-\" + meta.id}\r\n onClick={onClick}\r\n sx={{ cursor: \"pointer\", objectFit: \"contain\", width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }}\r\n />\r\n {(itemBar !== \"hidden\" && showItemBar) &&\r\n <ImageListItemBar\r\n title={\r\n <Tooltip title={meta.fileName}>\r\n <Box>\r\n {meta.fileName}\r\n </Box>\r\n </Tooltip>\r\n }\r\n actionIcon={\r\n (actions?.download !== false || actions.delete !== false) &&\r\n <IconButton sx={{ color: grey[100] }} onClick={openMenu}>\r\n <MoreVert />\r\n </IconButton>\r\n }\r\n />\r\n }\r\n </ImageListItem>\r\n\r\n {(actions?.download !== false || actions.delete !== false) && <ActionsMenu meta={meta} menu={menu} setMenu={setMenu} />}\r\n </Fragment>\r\n );\r\n};\r\n","import AttachFile from \"@mui/icons-material/AttachFile\";\r\nimport Image from \"@mui/icons-material/Image\";\r\nimport MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport SmartDisplay from \"@mui/icons-material/SmartDisplay\";\r\nimport { IconButton, List, ListItemButton, ListItemIcon, ListItemText } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\nimport type { FC } from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useOpenFile } from \"~/queries/FileHooks\";\r\n\r\nexport interface FileViewerListProps {\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const FileViewerList: FC<FileViewerListProps> = ({ sx }) => {\r\n const { fileMetas } = useFile();\r\n\r\n return (\r\n <List dense sx={sx}>\r\n {fileMetas.map(fileMeta =>\r\n <ListFileViewerItem\r\n key={fileMeta.id}\r\n meta={fileMeta}\r\n />\r\n )}\r\n </List>\r\n );\r\n};\r\n\r\ninterface ListFileViewerItemProps {\r\n meta: FileMeta;\r\n}\r\n\r\nexport const ListFileViewerItem: React.FC<ListFileViewerItemProps> = ({ meta }) => {\r\n const { setImageId, actions } = useFile();\r\n const [menu, setMenu] = useState<{ mouseX: number; mouseY: number; } | null>(null);\r\n\r\n const openMenu = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n setMenu(menu === null ? { mouseX: event.clientX, mouseY: event.clientY, } : null);\r\n };\r\n\r\n const { mutate: openFile } = useOpenFile();\r\n const { mutate: download } = useDownloadFile();\r\n\r\n const onClick = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": { return setImageId(meta.id); }\r\n case \"application\": { return openFile(meta); }\r\n case \"video\": { return openFile(meta); }\r\n default: { return download(meta); }\r\n }\r\n };\r\n\r\n const icon = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": {\r\n return <Image />;\r\n }\r\n case \"video\": {\r\n return <SmartDisplay />;\r\n }\r\n default: {\r\n return <AttachFile />;\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <ListItemButton key={meta.id} onClick={onClick}>\r\n <ListItemIcon>\r\n {icon()}\r\n </ListItemIcon>\r\n <ListItemText primary={`${meta.fileName}.${meta.fileExtension}`} />\r\n {(actions?.download !== false || actions.delete !== false) &&\r\n <IconButton edge=\"end\" onClick={openMenu}>\r\n <MoreVert />\r\n </IconButton>\r\n }\r\n </ListItemButton>\r\n\r\n {(actions?.download !== false || actions.delete !== false) && <ActionsMenu meta={meta} menu={menu} setMenu={setMenu} />}\r\n </Fragment>\r\n );\r\n};\r\n","import Close from \"@mui/icons-material/Close\";\r\nimport { Box, Dialog, Fab } from \"@mui/material\";\r\nimport React, { useEffect } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useGetFile } from \"~/queries/FileHooks\";\r\n\r\ninterface ImageViewerProps {\r\n metaId: string;\r\n}\r\n\r\nexport const ImageViewer: React.FC<ImageViewerProps> = ({ metaId }) => {\r\n const { fileMetas, setImageId } = useFile();\r\n\r\n const meta = fileMetas.find(m => m.id === metaId)!;\r\n\r\n const { data: source } = useGetFile({ meta });\r\n\r\n useEffect(() => {\r\n if (metaId)\r\n globalThis.addEventListener(\"keydown\", handleOnKeydown);\r\n\r\n return () => { globalThis.removeEventListener(\"keydown\", handleOnKeydown); };\r\n }, [metaId]);\r\n\r\n const handleOnKeydown = (event: KeyboardEvent) => {\r\n const images: Array<FileMeta> = fileMetas.filter(m => m.mediaType === \"image\");\r\n const imageIndex: number = images.findIndex(m => m.id === metaId);\r\n\r\n switch (event.key) {\r\n case \"ArrowLeft\": {\r\n return handleOnArrowLeft(images, imageIndex);\r\n }\r\n case \"ArrowRight\": {\r\n return handleOnArrowRight(images, imageIndex);\r\n }\r\n case \"Backspace\":\r\n case \"Escape\": {\r\n event.preventDefault();\r\n return onClose();\r\n }\r\n }\r\n };\r\n\r\n const handleOnArrowLeft = (images: Array<FileMeta>, index: number) => {\r\n if (index > 0) {\r\n const previousFile: FileMeta = images[index - 1];\r\n setImageId(previousFile.id);\r\n }\r\n };\r\n\r\n const handleOnArrowRight = (images: Array<FileMeta>, index: number) => {\r\n if (index < images.length - 1) {\r\n const nextFile: FileMeta = images[index + 1];\r\n setImageId(nextFile.id);\r\n }\r\n };\r\n\r\n const onClose = () => setImageId(\"\");\r\n\r\n if (!metaId) return null;\r\n\r\n return (\r\n <Dialog open onClose={onClose} maxWidth=\"xl\">\r\n <Box component=\"img\" src={source} alt={metaId} sx={{ maxWidth: \"100vw\", maxHeight: { xs: \"calc(100vh - 56px)\", sm: \"calc(100vh - 64px)\" } }} />\r\n\r\n <Fab size=\"medium\" onClick={onClose} sx={{ position: \"fixed\", top: 8, right: 8 }}>\r\n <Close />\r\n </Fab>\r\n </Dialog>\r\n );\r\n};\r\n","import { useState } from \"react\";\r\nimport { FileViewerGrid } from \"./fileViewer/FileViewerGrid\";\r\nimport { FileViewerList } from \"./fileViewer/FileViewerList\";\r\nimport { ImageViewer } from \"./fileViewer/ImageViewer\";\r\nimport type { FileViewerGridProps } from \"./fileViewer/FileViewerGrid\";\r\nimport type { ComponentType, FC, ReactNode } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport type { FileActions } from \"~/models/file/FileActions\";\r\nimport type { FileViewerListProps } from \"./fileViewer/FileViewerList\";\r\nimport { FileContext } from \"~/contexts/FileContext\";\r\nimport { useGetFileMetas } from \"~/queries/FileHooks\";\r\n\r\ninterface FileViewerComponent {\r\n Grid: ComponentType<FileViewerGridProps>;\r\n List: ComponentType<FileViewerListProps>;\r\n}\r\n\r\ninterface FileViewerProps {\r\n subId: string;\r\n onDelete?: (params: { remainingFileMetas: Array<FileMeta>; deletedFileMeta: FileMeta }) => void;\r\n actions?: FileActions;\r\n children: (component: FileViewerComponent) => ReactNode;\r\n}\r\n\r\nexport const FileViewer: FC<FileViewerProps> = ({ subId, onDelete, actions, children }) => {\r\n const { data: fileMetas = [] } = useGetFileMetas({ subId }, { enabled: !!subId });\r\n const [imageId, setImageId] = useState<string>(\"\");\r\n\r\n const components: FileViewerComponent = { Grid: FileViewerGrid, List: FileViewerList };\r\n\r\n if (fileMetas.length === 0) return null;\r\n\r\n return (\r\n <FileContext.Provider value={{ fileMetas, onDelete, actions, setImageId }}>\r\n {children(components)}\r\n <ImageViewer metaId={imageId} />\r\n </FileContext.Provider>\r\n );\r\n};\r\n","import { Chip, Stack } from \"@mui/material\";\r\nimport type { ChipProps} from \"@mui/material\";\r\nimport type { GridRenderCellParams, GridValidRowModel } from \"@mui/x-data-grid-premium\";\r\n\r\nconst isArray = (value: any) => Array.isArray(value);\r\n\r\ninterface ChipInputCellProps<T extends GridValidRowModel> {\r\n params: GridRenderCellParams<T>;\r\n slotProps?: ChipProps;\r\n getLabel?: (object: T) => string | number;\r\n}\r\n\r\nexport const ChipInputCell = <T extends GridValidRowModel>({ params, slotProps, getLabel }: ChipInputCellProps<T>) => {\r\n if (!params.value) return null;\r\n\r\n const getLabelValue = (value: any) => {\r\n if (getLabel) return getLabel(value);\r\n return value;\r\n };\r\n\r\n if (isArray(params.value))\r\n return (\r\n <Stack direction=\"row\" alignItems=\"center\" gap={1} sx={{ overflowX: \"auto\", height: \"100%\", width: params.colDef.computedWidth }}>\r\n {params.value.map((value: any, index) =>\r\n <Chip key={`${index + 1}-chip-input-cell`} label={getLabelValue(value)} {...slotProps} />\r\n )}\r\n </Stack>\r\n );\r\n\r\n return <Chip label={getLabelValue(params.value)} {...slotProps} />;\r\n};","import Edit from \"@mui/icons-material/Edit\";\r\nimport { TypographyWithIcon } from \"../core/TypographyWithIcon\";\r\nimport type { GridColumnHeaderParams, GridValidRowModel } from \"@mui/x-data-grid-premium\";\r\n\r\nexport const EditableColumnHeader = <T extends GridValidRowModel>({ colDef }: GridColumnHeaderParams<T>) => {\r\n return <TypographyWithIcon endIcon={<Edit color=\"disabled\" fontSize=\"small\" />} variant=\"body2\" className=\"MuiDataGrid-columnHeaderTitle\">{colDef.headerName}</TypographyWithIcon>;\r\n};","import { Button } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { ButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, ButtonProps<\"a\">>(function ButtonComponent(props, reference) {\r\n return <Button ref={reference} component=\"a\" {...props} />;\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterButton: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { GridActionsCellItem } from \"@mui/x-data-grid-premium\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { GridActionsCellItemProps } from \"@mui/x-data-grid-premium\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLButtonElement, GridActionsCellItemProps>(\r\n function GridActionsCellItemComponent(props, reference) {\r\n return <GridActionsCellItem ref={reference} component=\"a\" {...props} />;\r\n }\r\n) as React.ForwardRefExoticComponent<GridActionsCellItemProps & React.RefAttributes<HTMLButtonElement>>;\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterGridActionsCellItem: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { IconButton } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { IconButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, IconButtonProps<\"a\">>(function IconButtonComponent(props, reference) {\r\n return <IconButton ref={reference} component=\"a\" {...props} />;\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterIconButton: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { Link } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { LinkProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, LinkProps>(function LinkComponent(props, reference) {\r\n return <Link ref={reference} {...props} />;\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterLink: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { Tab } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { TabProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, TabProps<\"a\">>(function TabComponent(props, reference) {\r\n return <Tab ref={reference} component=\"a\" {...props} />;\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterTab: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { Box, Divider, Typography } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport function RouterNotFound() {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <Box height=\"100vh\" display=\"flex\" flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\" textAlign=\"center\" px={2} >\r\n <Box display=\"flex\" alignItems=\"center\" mb={4}>\r\n <Typography variant=\"h3\" component=\"span\" fontWeight={500} sx={{ lineHeight: 1 }}>404</Typography>\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 3 }} />\r\n <Typography variant=\"h5\" component=\"span\">{t(\"Layout.ThisPageCouldNotBeFound\")}</Typography>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import { Box, Divider, Typography } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\r\n\r\ninterface RouterErrorProps {\r\n error: ErrorComponentProps[\"error\"];\r\n}\r\n\r\nexport const RouterError: FC<RouterErrorProps> = ({ error }) => {\r\n\r\n return (\r\n <Box height=\"100vh\" display=\"flex\" flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\" textAlign=\"center\" px={2} >\r\n <Box display=\"flex\" alignItems=\"center\" mb={4}>\r\n <Typography variant=\"h3\" component=\"span\" fontWeight={500} sx={{ lineHeight: 1 }}>{error.name || \"500\"}</Typography>\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 3 }} />\r\n <Typography variant=\"h5\" component=\"span\">{error.message}</Typography>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n"],"names":["jsxs","jsx","Component","CreatedComponent"],"mappings":"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"}
1
+ {"version":3,"file":"components.js","sources":["../src/components/core/TypographyWithIcon.tsx","../src/components/core/Fullscreen.tsx","../src/components/file/Dropzone.tsx","../src/contexts/FileContext.ts","../src/components/file/fileViewer/common/ActionsMenu.tsx","../src/components/file/fileViewer/FileViewerGrid.tsx","../src/components/file/fileViewer/FileViewerList.tsx","../src/components/file/fileViewer/ImageViewer.tsx","../src/components/file/FileViewer.tsx","../src/components/data-grid/ChipInputCell.tsx","../src/components/data-grid/EditableColumnHeader.tsx","../src/components/router/RouterButton.tsx","../src/components/router/RouterGridActionsCellItem.tsx","../src/components/router/RouterIconButton.tsx","../src/components/router/RouterLink.tsx","../src/components/router/RouterTab.tsx","../src/components/router/RouterNotFound.tsx","../src/components/router/RouterError.tsx"],"sourcesContent":["import { Stack, Typography } from \"@mui/material\";\r\nimport type { SxProps, Theme, TypographyProps } from \"@mui/material\";\r\n\r\ninterface TypographyWithIconProps extends TypographyProps {\r\n startIcon?: React.ReactNode;\r\n endIcon?: React.ReactNode;\r\n}\r\n\r\nexport const TypographyWithIcon: React.FC<TypographyWithIconProps> = ({ startIcon, endIcon, children, sx, ...props }) => {\r\n const iconSx: SxProps<Theme> = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexShrink: 0,\r\n lineHeight: 0,\r\n \"& > svg\": {\r\n display: \"block\",\r\n },\r\n };\r\n\r\n return (\r\n <Typography\r\n component=\"span\"\r\n sx={{\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n verticalAlign: \"middle\",\r\n ...sx,\r\n }}\r\n gap={1}\r\n {...props}\r\n >\r\n {startIcon && (\r\n <Stack component=\"span\" sx={iconSx}>\r\n {startIcon}\r\n </Stack>\r\n )}\r\n <Stack component=\"span\" sx={{ display: \"inline\", lineHeight: \"inherit\" }}>\r\n {children}\r\n </Stack>\r\n {endIcon && (\r\n <Stack component=\"span\" sx={iconSx}>\r\n {endIcon}\r\n </Stack>\r\n )}\r\n </Typography>\r\n );\r\n};","import { Box } from \"@mui/material\";\r\nimport { useEffect, useEffectEvent, useRef, useState } from \"react\";\r\nimport type { BoxProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\n\r\nexport const Fullscreen: FC<BoxProps> = ({ children, sx, ...props }) => {\r\n const reference = useRef<HTMLDivElement | null>(null);\r\n const [height, setHeight] = useState<number>();\r\n\r\n const recompute = useEffectEvent(() => {\r\n if (!reference.current) return;\r\n const top = Math.ceil(reference.current.getBoundingClientRect().top);\r\n const avail = Math.max(0, window.innerHeight - top);\r\n setHeight(avail);\r\n });\r\n\r\n useEffect(() => {\r\n const element = reference.current;\r\n if (!element) return;\r\n\r\n recompute();\r\n\r\n window.addEventListener(\"resize\", recompute);\r\n\r\n const ro = new ResizeObserver(recompute);\r\n ro.observe(document.documentElement);\r\n ro.observe(document.body);\r\n ro.observe(element);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", recompute);\r\n ro.disconnect();\r\n };\r\n }, []);\r\n\r\n return (\r\n <Box\r\n ref={reference}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n minHeight: 0,\r\n width: \"100%\",\r\n overflow: \"auto\",\r\n ...sx,\r\n }}\r\n height={height}\r\n {...props}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};","import CloudUpload from \"@mui/icons-material/CloudUpload\";\r\nimport { Paper, Typography, useTheme } from \"@mui/material\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport type { SxProps, Theme} from \"@mui/material\";\r\nimport type { CSSProperties, FC } from \"react\";\r\nimport type { DropzoneOptions} from \"react-dropzone\";\r\n\r\nconst baseStyle: CSSProperties = {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: \"20px\",\r\n borderWidth: 2,\r\n borderRadius: 2,\r\n borderStyle: \"dashed\",\r\n outline: \"none\",\r\n transition: \"border .24s ease-in-out\",\r\n cursor: \"pointer\",\r\n};\r\n\r\ninterface DropzoneProps extends DropzoneOptions {\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const Dropzone: FC<DropzoneProps> = ({ sx, ...props }) => {\r\n const { getRootProps, getInputProps, isFocused, isDragAccept, isDragReject, } = useDropzone(props);\r\n const { t } = useTranslation();\r\n const theme = useTheme();\r\n\r\n const style = {\r\n ...baseStyle,\r\n ...(isFocused ? { borderColor: theme.palette.primary.main } : {}),\r\n ...(isDragAccept ? { borderColor: theme.palette.success.main } : {}),\r\n ...(isDragReject ? { borderColor: theme.palette.error.main } : {})\r\n };\r\n\r\n return (\r\n <Paper variant=\"outlined\" {...getRootProps({ style })} sx={sx}>\r\n <input {...getInputProps()} style={{ display: \"none\" }} />\r\n <CloudUpload />\r\n <Typography>{t(\"Layout.File.DragSomeFilesHereOrClickToSelectThem\")}</Typography>\r\n </Paper>\r\n );\r\n};","import { createContext, useContext } from \"react\";\r\nimport type { FileMeta } from \"../models/file/FileMeta\";\r\nimport type { FileActions } from \"~/models/file/FileActions\";\r\n\r\nexport interface FileContextValue {\r\n fileMetas: Array<FileMeta>;\r\n onDelete?: (params: { remainingFileMetas: Array<FileMeta>; deletedFileMeta: FileMeta }) => void;\r\n actions?: FileActions;\r\n setImageId: (imageId: string) => void;\r\n};\r\n\r\nexport const FileContext = createContext<FileContextValue | null>(null);\r\n\r\nexport const useFile = () => {\r\n const context = useContext(FileContext);\r\n if (!context) {\r\n throw new Error(\"FileViewer components must be used within FileViewer\");\r\n }\r\n return context;\r\n};","import Delete from \"@mui/icons-material/Delete\";\r\nimport FileDownload from \"@mui/icons-material/FileDownload\";\r\nimport { List, ListItemButton, ListItemIcon, ListItemText, Menu } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport type { FC } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\nimport { useDeleteFile, useDownloadFile } from \"~/queries/FileHooks\";\r\n\r\ninterface ActionsMenuProps {\r\n meta: FileMeta;\r\n menu: { mouseX: number; mouseY: number } | null;\r\n setMenu: (menu: { mouseX: number; mouseY: number } | null) => void;\r\n}\r\n\r\nexport const ActionsMenu: FC<ActionsMenuProps> = ({ meta, menu, setMenu }) => {\r\n const { t } = useTranslation();\r\n const { fileMetas, onDelete, actions } = useFile();\r\n const { confirm } = useDialogs();\r\n\r\n const handleMenuClose = () => { setMenu(null); };\r\n\r\n const { mutate: download, isPending: isDownloading } = useDownloadFile();\r\n const { mutate: deleteFile, isPending: isDeleting } = useDeleteFile();\r\n\r\n const handleOnDownload = () => {\r\n handleMenuClose();\r\n download(meta);\r\n };\r\n\r\n const handleOnDelete = async () => {\r\n if (!await confirm(t(\"Layout.File.AreYouSureYouWantToDelete\", { fileName: meta.fileName })))\r\n return;\r\n\r\n deleteFile(meta);\r\n handleMenuClose();\r\n\r\n if (onDelete) {\r\n const remainingFileMetas: Array<FileMeta> = fileMetas.filter(m => m.id !== meta.id);\r\n onDelete({ remainingFileMetas, deletedFileMeta: meta });\r\n }\r\n };\r\n\r\n return (\r\n <Menu open={menu !== null} onClose={handleMenuClose} anchorReference=\"anchorPosition\" variant=\"menu\"\r\n anchorPosition={menu === null ? undefined : { top: menu.mouseY, left: menu.mouseX }}>\r\n <List disablePadding>\r\n {actions?.download !== false &&\r\n <ListItemButton onClick={handleOnDownload} disabled={isDownloading}>\r\n <ListItemIcon>\r\n <FileDownload />\r\n </ListItemIcon>\r\n <ListItemText>{t(\"Layout.File.Download\")}</ListItemText>\r\n </ListItemButton>\r\n }\r\n {actions?.delete !== false &&\r\n <ListItemButton onClick={handleOnDelete} disabled={isDeleting}>\r\n <ListItemIcon>\r\n <Delete />\r\n </ListItemIcon>\r\n <ListItemText>{t(\"Layout.File.Delete\")}</ListItemText>\r\n </ListItemButton>\r\n }\r\n </List>\r\n </Menu>\r\n );\r\n};\r\n","import MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport { Box, IconButton, ImageListItem, ImageListItemBar, Stack, Tooltip } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport React, { Fragment, useEffect, useState } from \"react\";\r\nimport { useInView } from \"react-intersection-observer\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\nimport type { SxProps, Theme } from \"@mui/material\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useGetFileThumbnail, useOpenFile } from \"~/queries/FileHooks\";\r\n\r\nconst IMAGE_SIZE = 150;\r\n\r\ntype FileViewerGridItemBar = \"hidden\" | \"always\" | \"onMouseEnter\";\r\n\r\nexport interface FileViewerGridProps {\r\n size?: number;\r\n itemBar?: FileViewerGridItemBar;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const FileViewerGrid: React.FC<FileViewerGridProps> = ({ sx, size, itemBar }) => {\r\n const { fileMetas } = useFile();\r\n\r\n return (\r\n <Stack direction=\"row\" spacing={1} sx={{ overflow: \"auto\", ...sx }}>\r\n {fileMetas.map(fileMeta => (\r\n <GridFileViewerItem\r\n key={fileMeta.id}\r\n meta={fileMeta}\r\n size={size}\r\n itemBar={itemBar}\r\n />\r\n ))}\r\n </Stack>\r\n );\r\n};\r\n\r\ninterface GridFileViewerItemProps {\r\n meta: FileMeta;\r\n size?: number;\r\n itemBar?: FileViewerGridItemBar;\r\n}\r\n\r\nexport const GridFileViewerItem: React.FC<GridFileViewerItemProps> = ({ meta, size, itemBar }) => {\r\n const { setImageId, actions } = useFile();\r\n const [showItemBar, setShowItemBar] = useState<boolean>(itemBar === \"always\");\r\n const [menu, setMenu] = useState<{ mouseX: number; mouseY: number; } | null>(null);\r\n const { ref, inView } = useInView();\r\n\r\n useEffect(() => {\r\n setShowItemBar(itemBar === \"always\");\r\n }, [itemBar]);\r\n\r\n const { data: source } = useGetFileThumbnail({ meta }, { enabled: inView });\r\n\r\n const handleOnMouseEnter = () => setShowItemBar(true);\r\n const handleOnMouseLeave = () => itemBar !== \"always\" && setShowItemBar(false);\r\n\r\n const openMenu = (event: React.MouseEvent) => {\r\n setMenu(menu === null ? { mouseX: event.clientX, mouseY: event.clientY, } : null);\r\n setTimeout(() => setShowItemBar(true));\r\n };\r\n\r\n const { mutate: openFile } = useOpenFile();\r\n const { mutate: download } = useDownloadFile();\r\n\r\n const onClick = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": { return setImageId(meta.id); }\r\n case \"application\": { return openFile(meta); }\r\n case \"video\": { return openFile(meta); }\r\n default: { return download(meta); }\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <ImageListItem sx={{ width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }} onMouseEnter={handleOnMouseEnter} onMouseLeave={handleOnMouseLeave} ref={ref}>\r\n <Box\r\n component=\"img\"\r\n src={source}\r\n loading=\"lazy\"\r\n alt={\"thumbnail-\" + meta.id}\r\n onClick={onClick}\r\n sx={{ cursor: \"pointer\", objectFit: \"contain\", width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }}\r\n />\r\n {(itemBar !== \"hidden\" && showItemBar) &&\r\n <ImageListItemBar\r\n title={\r\n <Tooltip title={meta.fileName}>\r\n <Box>\r\n {meta.fileName}\r\n </Box>\r\n </Tooltip>\r\n }\r\n actionIcon={\r\n (actions?.download !== false || actions.delete !== false) &&\r\n <IconButton sx={{ color: grey[100] }} onClick={openMenu}>\r\n <MoreVert />\r\n </IconButton>\r\n }\r\n />\r\n }\r\n </ImageListItem>\r\n\r\n {(actions?.download !== false || actions.delete !== false) && <ActionsMenu meta={meta} menu={menu} setMenu={setMenu} />}\r\n </Fragment>\r\n );\r\n};\r\n","import AttachFile from \"@mui/icons-material/AttachFile\";\r\nimport Image from \"@mui/icons-material/Image\";\r\nimport MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport SmartDisplay from \"@mui/icons-material/SmartDisplay\";\r\nimport { IconButton, List, ListItemButton, ListItemIcon, ListItemText } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\nimport type { FC } from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useOpenFile } from \"~/queries/FileHooks\";\r\n\r\nexport interface FileViewerListProps {\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const FileViewerList: FC<FileViewerListProps> = ({ sx }) => {\r\n const { fileMetas } = useFile();\r\n\r\n return (\r\n <List dense sx={sx}>\r\n {fileMetas.map(fileMeta =>\r\n <ListFileViewerItem\r\n key={fileMeta.id}\r\n meta={fileMeta}\r\n />\r\n )}\r\n </List>\r\n );\r\n};\r\n\r\ninterface ListFileViewerItemProps {\r\n meta: FileMeta;\r\n}\r\n\r\nexport const ListFileViewerItem: React.FC<ListFileViewerItemProps> = ({ meta }) => {\r\n const { setImageId, actions } = useFile();\r\n const [menu, setMenu] = useState<{ mouseX: number; mouseY: number; } | null>(null);\r\n\r\n const openMenu = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n setMenu(menu === null ? { mouseX: event.clientX, mouseY: event.clientY, } : null);\r\n };\r\n\r\n const { mutate: openFile } = useOpenFile();\r\n const { mutate: download } = useDownloadFile();\r\n\r\n const onClick = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": { return setImageId(meta.id); }\r\n case \"application\": { return openFile(meta); }\r\n case \"video\": { return openFile(meta); }\r\n default: { return download(meta); }\r\n }\r\n };\r\n\r\n const icon = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": {\r\n return <Image />;\r\n }\r\n case \"video\": {\r\n return <SmartDisplay />;\r\n }\r\n default: {\r\n return <AttachFile />;\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <ListItemButton key={meta.id} onClick={onClick}>\r\n <ListItemIcon>\r\n {icon()}\r\n </ListItemIcon>\r\n <ListItemText primary={`${meta.fileName}.${meta.fileExtension}`} />\r\n {(actions?.download !== false || actions.delete !== false) &&\r\n <IconButton edge=\"end\" onClick={openMenu}>\r\n <MoreVert />\r\n </IconButton>\r\n }\r\n </ListItemButton>\r\n\r\n {(actions?.download !== false || actions.delete !== false) && <ActionsMenu meta={meta} menu={menu} setMenu={setMenu} />}\r\n </Fragment>\r\n );\r\n};\r\n","import Close from \"@mui/icons-material/Close\";\r\nimport { Box, Dialog, Fab } from \"@mui/material\";\r\nimport React, { useEffect } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useGetFile } from \"~/queries/FileHooks\";\r\n\r\ninterface ImageViewerProps {\r\n metaId: string;\r\n}\r\n\r\nexport const ImageViewer: React.FC<ImageViewerProps> = ({ metaId }) => {\r\n const { fileMetas, setImageId } = useFile();\r\n\r\n const meta = fileMetas.find(m => m.id === metaId)!;\r\n\r\n const { data: source } = useGetFile({ meta });\r\n\r\n useEffect(() => {\r\n if (metaId)\r\n globalThis.addEventListener(\"keydown\", handleOnKeydown);\r\n\r\n return () => { globalThis.removeEventListener(\"keydown\", handleOnKeydown); };\r\n }, [metaId]);\r\n\r\n const handleOnKeydown = (event: KeyboardEvent) => {\r\n const images: Array<FileMeta> = fileMetas.filter(m => m.mediaType === \"image\");\r\n const imageIndex: number = images.findIndex(m => m.id === metaId);\r\n\r\n switch (event.key) {\r\n case \"ArrowLeft\": {\r\n return handleOnArrowLeft(images, imageIndex);\r\n }\r\n case \"ArrowRight\": {\r\n return handleOnArrowRight(images, imageIndex);\r\n }\r\n case \"Backspace\":\r\n case \"Escape\": {\r\n event.preventDefault();\r\n return onClose();\r\n }\r\n }\r\n };\r\n\r\n const handleOnArrowLeft = (images: Array<FileMeta>, index: number) => {\r\n if (index > 0) {\r\n const previousFile: FileMeta = images[index - 1];\r\n setImageId(previousFile.id);\r\n }\r\n };\r\n\r\n const handleOnArrowRight = (images: Array<FileMeta>, index: number) => {\r\n if (index < images.length - 1) {\r\n const nextFile: FileMeta = images[index + 1];\r\n setImageId(nextFile.id);\r\n }\r\n };\r\n\r\n const onClose = () => setImageId(\"\");\r\n\r\n if (!metaId) return null;\r\n\r\n return (\r\n <Dialog open onClose={onClose} maxWidth=\"xl\">\r\n <Box component=\"img\" src={source} alt={metaId} sx={{ maxWidth: \"100vw\", maxHeight: { xs: \"calc(100vh - 56px)\", sm: \"calc(100vh - 64px)\" } }} />\r\n\r\n <Fab size=\"medium\" onClick={onClose} sx={{ position: \"fixed\", top: 8, right: 8 }}>\r\n <Close />\r\n </Fab>\r\n </Dialog>\r\n );\r\n};\r\n","import { useState } from \"react\";\r\nimport { FileViewerGrid } from \"./fileViewer/FileViewerGrid\";\r\nimport { FileViewerList } from \"./fileViewer/FileViewerList\";\r\nimport { ImageViewer } from \"./fileViewer/ImageViewer\";\r\nimport type { FileViewerGridProps } from \"./fileViewer/FileViewerGrid\";\r\nimport type { ComponentType, FC, ReactNode } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport type { FileActions } from \"~/models/file/FileActions\";\r\nimport type { FileViewerListProps } from \"./fileViewer/FileViewerList\";\r\nimport { FileContext } from \"~/contexts/FileContext\";\r\nimport { useGetFileMetas } from \"~/queries/FileHooks\";\r\n\r\ninterface FileViewerComponent {\r\n Grid: ComponentType<FileViewerGridProps>;\r\n List: ComponentType<FileViewerListProps>;\r\n}\r\n\r\ninterface FileViewerProps {\r\n subId: string;\r\n onDelete?: (params: { remainingFileMetas: Array<FileMeta>; deletedFileMeta: FileMeta }) => void;\r\n actions?: FileActions;\r\n children: (component: FileViewerComponent) => ReactNode;\r\n}\r\n\r\nexport const FileViewer: FC<FileViewerProps> = ({ subId, onDelete, actions, children }) => {\r\n const { data: fileMetas = [] } = useGetFileMetas({ subId }, { enabled: !!subId });\r\n const [imageId, setImageId] = useState<string>(\"\");\r\n\r\n const components: FileViewerComponent = { Grid: FileViewerGrid, List: FileViewerList };\r\n\r\n if (fileMetas.length === 0) return null;\r\n\r\n return (\r\n <FileContext.Provider value={{ fileMetas, onDelete, actions, setImageId }}>\r\n {children(components)}\r\n <ImageViewer metaId={imageId} />\r\n </FileContext.Provider>\r\n );\r\n};\r\n","import { Chip, Stack } from \"@mui/material\";\r\nimport type { ChipProps} from \"@mui/material\";\r\nimport type { GridRenderCellParams, GridValidRowModel } from \"@mui/x-data-grid-premium\";\r\n\r\nconst isArray = (value: any) => Array.isArray(value);\r\n\r\ninterface ChipInputCellProps<T extends GridValidRowModel> {\r\n params: GridRenderCellParams<T>;\r\n slotProps?: ChipProps;\r\n getLabel?: (object: T) => string | number;\r\n}\r\n\r\nexport const ChipInputCell = <T extends GridValidRowModel>({ params, slotProps, getLabel }: ChipInputCellProps<T>) => {\r\n if (!params.value) return null;\r\n\r\n const getLabelValue = (value: any) => {\r\n if (getLabel) return getLabel(value);\r\n return value;\r\n };\r\n\r\n if (isArray(params.value))\r\n return (\r\n <Stack direction=\"row\" alignItems=\"center\" gap={1} sx={{ overflowX: \"auto\", height: \"100%\", width: params.colDef.computedWidth }}>\r\n {params.value.map((value: any, index) =>\r\n <Chip key={`${index + 1}-chip-input-cell`} label={getLabelValue(value)} {...slotProps} />\r\n )}\r\n </Stack>\r\n );\r\n\r\n return <Chip label={getLabelValue(params.value)} {...slotProps} />;\r\n};","import Edit from \"@mui/icons-material/Edit\";\r\nimport { TypographyWithIcon } from \"../core/TypographyWithIcon\";\r\nimport type { GridColumnHeaderParams, GridValidRowModel } from \"@mui/x-data-grid-premium\";\r\n\r\nexport const EditableColumnHeader = <T extends GridValidRowModel>({ colDef }: GridColumnHeaderParams<T>) => {\r\n return <TypographyWithIcon endIcon={<Edit color=\"disabled\" fontSize=\"small\" />} variant=\"body2\" className=\"MuiDataGrid-columnHeaderTitle\">{colDef.headerName}</TypographyWithIcon>;\r\n};","import { Button } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { ButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, ButtonProps<\"a\">>(function ButtonComponent(props, reference) {\r\n return <Button ref={reference} component=\"a\" {...props} />;\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterButton: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { GridActionsCellItem } from \"@mui/x-data-grid-premium\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { GridActionsCellItemProps } from \"@mui/x-data-grid-premium\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLButtonElement, GridActionsCellItemProps>(\r\n function GridActionsCellItemComponent(props, reference) {\r\n return <GridActionsCellItem ref={reference} component=\"a\" {...props} />;\r\n }\r\n) as React.ForwardRefExoticComponent<GridActionsCellItemProps & React.RefAttributes<HTMLButtonElement>>;\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterGridActionsCellItem: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { IconButton } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { IconButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, IconButtonProps<\"a\">>(function IconButtonComponent(props, reference) {\r\n return <IconButton ref={reference} component=\"a\" {...props} />;\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterIconButton: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { Link } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { LinkProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, LinkProps>(function LinkComponent(props, reference) {\r\n return <Link ref={reference} {...props} />;\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterLink: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { Tab } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { TabProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, TabProps<\"a\">>(function TabComponent(props, reference) {\r\n return <Tab ref={reference} component=\"a\" {...props} />;\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterTab: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />;\r\n};","import { Box, Divider, Typography } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport function RouterNotFound() {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <Box height=\"100vh\" display=\"flex\" flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\" textAlign=\"center\" px={2} >\r\n <Box display=\"flex\" alignItems=\"center\" mb={4}>\r\n <Typography variant=\"h3\" component=\"span\" fontWeight={500} sx={{ lineHeight: 1 }}>404</Typography>\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 3 }} />\r\n <Typography variant=\"h5\" component=\"span\">{t(\"Layout.ThisPageCouldNotBeFound\")}</Typography>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import { Box, Divider, Typography } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\r\n\r\ninterface RouterErrorProps {\r\n error: ErrorComponentProps[\"error\"];\r\n}\r\n\r\nexport const RouterError: FC<RouterErrorProps> = ({ error }) => {\r\n\r\n return (\r\n <Box height=\"100vh\" display=\"flex\" flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\" textAlign=\"center\" px={2} >\r\n <Box display=\"flex\" alignItems=\"center\" mb={4}>\r\n <Typography variant=\"h3\" component=\"span\" fontWeight={500} sx={{ lineHeight: 1 }}>{error.name || \"500\"}</Typography>\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 3 }} />\r\n <Typography variant=\"h5\" component=\"span\">{error.message}</Typography>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n"],"names":["Component","CreatedComponent"],"mappings":"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"}
package/dist/hooks.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import { createFormHookContexts, createFormHook } from "@tanstack/react-form";
2
- import { j as jsxRuntimeExports } from "./DialogsHooks-Bi8dZoyu.js";
3
- import { u } from "./DialogsHooks-Bi8dZoyu.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
4
3
  import { Autocomplete, TextField, FormControl, FormControlLabel, Checkbox, FormHelperText, FormLabel, RadioGroup, Radio, Slider, Button, Switch } from "@mui/material";
5
4
  import { g as getFieldStatus } from "./utils-JYv9O0GI.js";
6
5
  import { DatePicker, DateRangePicker, TimePicker, TimeRangePicker, DateTimePicker, DateTimeRangePicker } from "@mui/x-date-pickers-pro";
7
6
  import { NumericFormat } from "react-number-format";
7
+ import { u } from "./DialogsHooks-BlUsVlfv.js";
8
8
  const FormAutocomplete = ({ textFieldProps, ...autocompleteProps }) => {
9
9
  const field = useFieldContext();
10
10
  const { isTouched, hasError, helperText } = getFieldStatus(field);
11
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
11
+ return /* @__PURE__ */ jsx(
12
12
  Autocomplete,
13
13
  {
14
14
  value: field.state.value,
@@ -17,7 +17,7 @@ const FormAutocomplete = ({ textFieldProps, ...autocompleteProps }) => {
17
17
  onBlur: field.handleBlur,
18
18
  "aria-label": field.name,
19
19
  ...autocompleteProps,
20
- renderInput: (parameters) => /* @__PURE__ */ jsxRuntimeExports.jsx(
20
+ renderInput: (parameters) => /* @__PURE__ */ jsx(
21
21
  TextField,
22
22
  {
23
23
  ...parameters,
@@ -33,11 +33,11 @@ const FormAutocomplete = ({ textFieldProps, ...autocompleteProps }) => {
33
33
  const FormCheckbox = (props) => {
34
34
  const field = useFieldContext();
35
35
  const { isTouched, hasError, helperText } = getFieldStatus(field);
36
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(FormControl, { component: "fieldset", children: [
37
- /* @__PURE__ */ jsxRuntimeExports.jsx(
36
+ return /* @__PURE__ */ jsxs(FormControl, { component: "fieldset", children: [
37
+ /* @__PURE__ */ jsx(
38
38
  FormControlLabel,
39
39
  {
40
- control: /* @__PURE__ */ jsxRuntimeExports.jsx(
40
+ control: /* @__PURE__ */ jsx(
41
41
  Checkbox,
42
42
  {
43
43
  name: field.name,
@@ -51,13 +51,13 @@ const FormCheckbox = (props) => {
51
51
  label: props.label ?? ""
52
52
  }
53
53
  ),
54
- isTouched && hasError && /* @__PURE__ */ jsxRuntimeExports.jsx(FormHelperText, { error: hasError, children: helperText })
54
+ isTouched && hasError && /* @__PURE__ */ jsx(FormHelperText, { error: hasError, children: helperText })
55
55
  ] });
56
56
  };
57
57
  const FormDatePicker = (props) => {
58
58
  const field = useFieldContext();
59
59
  const { isTouched, hasError, helperText } = getFieldStatus(field);
60
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
60
+ return /* @__PURE__ */ jsx(
61
61
  DatePicker,
62
62
  {
63
63
  name: field.name,
@@ -80,7 +80,7 @@ const FormDatePicker = (props) => {
80
80
  const FormDateRangePicker = (props) => {
81
81
  const field = useFieldContext();
82
82
  const { isTouched, hasError, helperText } = getFieldStatus(field);
83
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
83
+ return /* @__PURE__ */ jsx(
84
84
  DateRangePicker,
85
85
  {
86
86
  name: field.name,
@@ -103,7 +103,7 @@ const FormDateRangePicker = (props) => {
103
103
  const FormTimePicker = (props) => {
104
104
  const field = useFieldContext();
105
105
  const { isTouched, hasError, helperText } = getFieldStatus(field);
106
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
106
+ return /* @__PURE__ */ jsx(
107
107
  TimePicker,
108
108
  {
109
109
  name: field.name,
@@ -126,7 +126,7 @@ const FormTimePicker = (props) => {
126
126
  const FormTimeRangePicker = (props) => {
127
127
  const field = useFieldContext();
128
128
  const { isTouched, hasError, helperText } = getFieldStatus(field);
129
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
129
+ return /* @__PURE__ */ jsx(
130
130
  TimeRangePicker,
131
131
  {
132
132
  name: field.name,
@@ -149,7 +149,7 @@ const FormTimeRangePicker = (props) => {
149
149
  const FormDateTimePicker = (props) => {
150
150
  const field = useFieldContext();
151
151
  const { isTouched, hasError, helperText } = getFieldStatus(field);
152
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
152
+ return /* @__PURE__ */ jsx(
153
153
  DateTimePicker,
154
154
  {
155
155
  name: field.name,
@@ -172,7 +172,7 @@ const FormDateTimePicker = (props) => {
172
172
  const FormDateTimeRangePicker = (props) => {
173
173
  const field = useFieldContext();
174
174
  const { isTouched, hasError, helperText } = getFieldStatus(field);
175
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
175
+ return /* @__PURE__ */ jsx(
176
176
  DateTimeRangePicker,
177
177
  {
178
178
  name: field.name,
@@ -195,7 +195,7 @@ const FormDateTimeRangePicker = (props) => {
195
195
  const FormNumberField = ({ options, ...props }) => {
196
196
  const field = useFieldContext();
197
197
  const { isTouched, hasError, helperText } = getFieldStatus(field);
198
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
198
+ return /* @__PURE__ */ jsx(
199
199
  NumericFormat,
200
200
  {
201
201
  customInput: TextField,
@@ -214,9 +214,9 @@ const FormNumberField = ({ options, ...props }) => {
214
214
  const FormRadioGroup = ({ label, options, ...props }) => {
215
215
  const field = useFieldContext();
216
216
  const { isTouched, hasError, helperText } = getFieldStatus(field);
217
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(FormControl, { component: "fieldset", children: [
218
- label && /* @__PURE__ */ jsxRuntimeExports.jsx(FormLabel, { component: "legend", children: label }),
219
- /* @__PURE__ */ jsxRuntimeExports.jsx(
217
+ return /* @__PURE__ */ jsxs(FormControl, { component: "fieldset", children: [
218
+ label && /* @__PURE__ */ jsx(FormLabel, { component: "legend", children: label }),
219
+ /* @__PURE__ */ jsx(
220
220
  RadioGroup,
221
221
  {
222
222
  name: field.name,
@@ -225,26 +225,26 @@ const FormRadioGroup = ({ label, options, ...props }) => {
225
225
  onBlur: field.handleBlur,
226
226
  "aria-label": field.name,
227
227
  ...props,
228
- children: options.map((option) => /* @__PURE__ */ jsxRuntimeExports.jsx(
228
+ children: options.map((option) => /* @__PURE__ */ jsx(
229
229
  FormControlLabel,
230
230
  {
231
231
  value: option.value,
232
- control: /* @__PURE__ */ jsxRuntimeExports.jsx(Radio, {}),
232
+ control: /* @__PURE__ */ jsx(Radio, {}),
233
233
  label: option.label
234
234
  },
235
235
  option.value
236
236
  ))
237
237
  }
238
238
  ),
239
- isTouched && hasError && /* @__PURE__ */ jsxRuntimeExports.jsx(FormHelperText, { error: hasError, children: helperText })
239
+ isTouched && hasError && /* @__PURE__ */ jsx(FormHelperText, { error: hasError, children: helperText })
240
240
  ] });
241
241
  };
242
242
  const FormSlider = ({ label, ...props }) => {
243
243
  const field = useFieldContext();
244
244
  const { isTouched, hasError, helperText } = getFieldStatus(field);
245
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(FormControl, { component: "fieldset", children: [
246
- label && /* @__PURE__ */ jsxRuntimeExports.jsx(FormLabel, { children: label }),
247
- /* @__PURE__ */ jsxRuntimeExports.jsx(
245
+ return /* @__PURE__ */ jsxs(FormControl, { component: "fieldset", children: [
246
+ label && /* @__PURE__ */ jsx(FormLabel, { children: label }),
247
+ /* @__PURE__ */ jsx(
248
248
  Slider,
249
249
  {
250
250
  name: field.name,
@@ -255,7 +255,7 @@ const FormSlider = ({ label, ...props }) => {
255
255
  ...props
256
256
  }
257
257
  ),
258
- isTouched && hasError && /* @__PURE__ */ jsxRuntimeExports.jsx(FormHelperText, { error: hasError, children: helperText })
258
+ isTouched && hasError && /* @__PURE__ */ jsx(FormHelperText, { error: hasError, children: helperText })
259
259
  ] });
260
260
  };
261
261
  const FormSubmitButton = (props) => {
@@ -265,7 +265,7 @@ const FormSubmitButton = (props) => {
265
265
  event.stopPropagation();
266
266
  form.handleSubmit();
267
267
  };
268
- return /* @__PURE__ */ jsxRuntimeExports.jsx(form.Subscribe, { selector: (state) => [state.canSubmit, state.isSubmitting], children: ([canSubmit, isSubmitting]) => /* @__PURE__ */ jsxRuntimeExports.jsx(
268
+ return /* @__PURE__ */ jsx(form.Subscribe, { selector: (state) => [state.canSubmit, state.isSubmitting], children: ([canSubmit, isSubmitting]) => /* @__PURE__ */ jsx(
269
269
  Button,
270
270
  {
271
271
  loading: isSubmitting,
@@ -280,11 +280,11 @@ const FormSubmitButton = (props) => {
280
280
  const FormSwitch = (props) => {
281
281
  const field = useFieldContext();
282
282
  const { isTouched, hasError, helperText } = getFieldStatus(field);
283
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(FormControl, { component: "fieldset", children: [
284
- /* @__PURE__ */ jsxRuntimeExports.jsx(
283
+ return /* @__PURE__ */ jsxs(FormControl, { component: "fieldset", children: [
284
+ /* @__PURE__ */ jsx(
285
285
  FormControlLabel,
286
286
  {
287
- control: /* @__PURE__ */ jsxRuntimeExports.jsx(
287
+ control: /* @__PURE__ */ jsx(
288
288
  Switch,
289
289
  {
290
290
  name: field.name,
@@ -298,13 +298,13 @@ const FormSwitch = (props) => {
298
298
  label: props.label ?? ""
299
299
  }
300
300
  ),
301
- isTouched && hasError && /* @__PURE__ */ jsxRuntimeExports.jsx(FormHelperText, { error: hasError, children: helperText })
301
+ isTouched && hasError && /* @__PURE__ */ jsx(FormHelperText, { error: hasError, children: helperText })
302
302
  ] });
303
303
  };
304
304
  const FormTextField = (props) => {
305
305
  const field = useFieldContext();
306
306
  const { isTouched, hasError, helperText } = getFieldStatus(field);
307
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
307
+ return /* @__PURE__ */ jsx(
308
308
  TextField,
309
309
  {
310
310
  name: field.name,
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":["../src/components/form/FormAutocomplete.tsx","../src/components/form/FormCheckbox.tsx","../src/components/form/FormDatePicker.tsx","../src/components/form/FormDateRangePicker.tsx","../src/components/form/FormTimePicker.tsx","../src/components/form/FormTimeRangePicker.tsx","../src/components/form/FormDateTimePicker.tsx","../src/components/form/FormDateTimeRangePicker.tsx","../src/components/form/FormNumberField.tsx","../src/components/form/FormRadioGroup.tsx","../src/components/form/FormSlider.tsx","../src/components/form/FormSubmitButton.tsx","../src/components/form/FormSwitch.tsx","../src/components/form/FormTextField.tsx","../src/hooks/FormHooks.ts"],"sourcesContent":["import { Autocomplete, TextField } from \"@mui/material\";\r\nimport type { AutocompleteProps, TextFieldProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormAutocompleteProps extends Omit<AutocompleteProps<any, boolean, boolean, boolean>, FormOmittedProps> {\r\n textFieldProps?: Omit<TextFieldProps, FormOmittedProps>;\r\n}\r\n\r\nexport const FormAutocomplete: FC<FormAutocompleteProps> = ({ textFieldProps, ...autocompleteProps }) => {\r\n const field = useFieldContext();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <Autocomplete\r\n value={field.state.value}\r\n onChange={(_, value) => !autocompleteProps.freeSolo && field.handleChange(value)}\r\n onInputChange={(_, value, reason) => reason !== \"reset\" && autocompleteProps.freeSolo && field.handleChange(value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...autocompleteProps}\r\n renderInput={(parameters) =>\r\n <TextField\r\n {...parameters}\r\n name={field.name}\r\n error={isTouched && hasError}\r\n helperText={isTouched && helperText}\r\n {...textFieldProps}\r\n />\r\n }\r\n />\r\n );\r\n};","import { Checkbox, FormControl, FormControlLabel, FormHelperText } from \"@mui/material\";\r\nimport type { CheckboxProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormCheckboxProps extends Omit<CheckboxProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormCheckbox: FC<FormCheckboxProps> = (props) => {\r\n const field = useFieldContext<boolean | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n name={field.name}\r\n checked={Boolean(field.state.value)}\r\n onChange={(event) => field.handleChange(event.target.checked)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n }\r\n label={props.label ?? \"\"}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};","import { DatePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DatePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDatePickerProps extends Omit<DatePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDatePicker: FC<FormDatePickerProps> = (props) => {\r\n const field = useFieldContext<Dayjs | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DatePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { DateRangePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DateRangePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDateRangePickerProps extends Omit<DateRangePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDateRangePicker: FC<FormDateRangePickerProps> = (props) => {\r\n const field = useFieldContext<[Dayjs | null, Dayjs | null] | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DateRangePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { TimePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { TimePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormTimePickerProps extends Omit<TimePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormTimePicker: FC<FormTimePickerProps> = (props) => {\r\n const field = useFieldContext<Dayjs | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <TimePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { TimeRangePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { TimeRangePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormTimeRangePickerProps extends Omit<TimeRangePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormTimeRangePicker: FC<FormTimeRangePickerProps> = (props) => {\r\n const field = useFieldContext<[Dayjs | null, Dayjs | null] | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <TimeRangePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { DateTimePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DateTimePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDateTimePickerProps extends Omit<DateTimePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDateTimePicker: FC<FormDateTimePickerProps> = (props) => {\r\n const field = useFieldContext<Dayjs | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DateTimePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps,\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { DateTimeRangePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DateTimeRangePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDateTimeRangePickerProps extends Omit<DateTimeRangePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDateTimeRangePicker: FC<FormDateTimeRangePickerProps> = (props) => {\r\n const field = useFieldContext<[Dayjs | null, Dayjs | null] | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DateTimeRangePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport { NumericFormat } from \"react-number-format\";\r\nimport type { InputAttributes, NumericFormatProps } from \"react-number-format/types/types\";\r\nimport type { FC } from \"react\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormNumberFieldProps extends Omit<TextFieldProps, FormOmittedProps> {\r\n\tdefaultValue?: number | null;\r\n\toptions?: Omit<NumericFormatProps<InputAttributes>, \"customInput\" | \"onValueChange\" | keyof InputAttributes>;\r\n}\r\n\r\nexport const FormNumberField: FC<FormNumberFieldProps> = ({ options, ...props }) => {\r\n\tconst field = useFieldContext<number | null | undefined>();\r\n\tconst { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n\treturn (\r\n\t\t<NumericFormat\r\n\t\t\tcustomInput={TextField}\r\n\t\t\tname={field.name}\r\n\t\t\tvalue={field.state.value ?? \"\"}\r\n\t\t\tonValueChange={({ floatValue }) => field.handleChange(floatValue)}\r\n\t\t\tonBlur={field.handleBlur}\r\n\t\t\terror={isTouched && hasError}\r\n\t\t\thelperText={isTouched && helperText}\r\n\t\t\taria-label={field.name}\r\n\t\t\t{...props}\r\n\t\t\t{...options}\r\n\t\t/>\r\n\t);\r\n};\r\n","import { FormControl, FormControlLabel, FormHelperText, FormLabel, Radio, RadioGroup } from \"@mui/material\";\r\nimport type { RadioGroupProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\nexport interface FormRadioGroupProps extends Omit<RadioGroupProps, FormOmittedProps> {\r\n label?: string;\r\n options: Array<Option>;\r\n}\r\n\r\nexport const FormRadioGroup: FC<FormRadioGroupProps> = ({ label, options, ...props }) => {\r\n const field = useFieldContext<string | number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n {label && <FormLabel component=\"legend\">{label}</FormLabel>}\r\n <RadioGroup\r\n name={field.name}\r\n value={field.state.value ?? \"\"}\r\n onChange={(event) => field.handleChange(event.target.value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n >\r\n {options.map((option) => (\r\n <FormControlLabel\r\n key={option.value}\r\n value={option.value}\r\n control={<Radio />}\r\n label={option.label}\r\n />\r\n ))}\r\n </RadioGroup>\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { FormControl, FormHelperText, FormLabel, Slider } from \"@mui/material\";\r\nimport type { SliderProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormSliderProps extends Omit<SliderProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormSlider: FC<FormSliderProps> = ({ label, ...props }) => {\r\n const field = useFieldContext<number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n {label && <FormLabel>{label}</FormLabel>}\r\n <Slider\r\n name={field.name}\r\n value={field.state.value ?? 0}\r\n onChange={(_, value) => field.handleChange(Array.isArray(value) ? value[0] : value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { Button } from \"@mui/material\";\r\nimport type { ButtonProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport { useFormContext } from \"~/hooks/FormHooks\";\r\n\r\nexport type FormSubmitButtonProps = Omit<ButtonProps, \"loading\" | \"disabled\" | \"onClick\" | \"type\">;\r\n\r\nexport const FormSubmitButton: FC<FormSubmitButtonProps> = (props) => {\r\n const form = useFormContext();\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n form.handleSubmit();\r\n };\r\n\r\n return (\r\n <form.Subscribe selector={(state) => [state.canSubmit, state.isSubmitting]}>\r\n {([canSubmit, isSubmitting]) => (\r\n <Button\r\n loading={isSubmitting}\r\n disabled={!canSubmit}\r\n onClick={handleClick}\r\n type=\"submit\"\r\n aria-label=\"submit\"\r\n {...props}\r\n />\r\n )}\r\n </form.Subscribe>\r\n );\r\n};","import { FormControl, FormControlLabel, FormHelperText, Switch } from \"@mui/material\";\r\nimport type { SwitchProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormSwitchProps extends Omit<SwitchProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormSwitch: FC<FormSwitchProps> = (props) => {\r\n const field = useFieldContext<boolean | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n <FormControlLabel\r\n control={\r\n <Switch\r\n name={field.name}\r\n checked={Boolean(field.state.value)}\r\n onChange={(event) => field.handleChange(event.target.checked)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n }\r\n label={props.label ?? \"\"}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormTextFieldProps extends Omit<TextFieldProps, FormOmittedProps> {\r\n type?: \"color\" | \"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\"\r\n}\r\n\r\nexport const FormTextField: FC<FormTextFieldProps> = (props) => {\r\n const field = useFieldContext<string | number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <TextField\r\n name={field.name}\r\n value={field.state.value ?? \"\"}\r\n onChange={event => field.handleChange(event.target.value)}\r\n onBlur={field.handleBlur}\r\n error={isTouched && hasError}\r\n helperText={isTouched && helperText}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};","import { createFormHook, createFormHookContexts } from \"@tanstack/react-form\";\r\nimport { FormAutocomplete as Autocomplete } from \"~/components/form/FormAutocomplete\";\r\nimport { FormCheckbox as Checkbox } from \"~/components/form/FormCheckbox\";\r\nimport { FormDatePicker as DatePicker } from \"~/components/form/FormDatePicker\";\r\nimport { FormDateRangePicker as DateRangePicker } from \"~/components/form/FormDateRangePicker\";\r\nimport { FormTimePicker as TimePicker } from \"~/components/form/FormTimePicker\";\r\nimport { FormTimeRangePicker as TimeRangePicker } from \"~/components/form/FormTimeRangePicker\";\r\nimport { FormDateTimePicker as DateTimePicker } from \"~/components/form/FormDateTimePicker\";\r\nimport { FormDateTimeRangePicker as DateTimeRangePicker } from \"~/components/form/FormDateTimeRangePicker\";\r\nimport { FormNumberField as NumberField } from \"~/components/form/FormNumberField\";\r\nimport { FormRadioGroup as RadioGroup } from \"~/components/form/FormRadioGroup\";\r\nimport { FormSlider as Slider } from \"~/components/form/FormSlider\";\r\nimport { FormSubmitButton as SubmitButton } from \"~/components/form/FormSubmitButton\";\r\nimport { FormSwitch as Switch } from \"~/components/form/FormSwitch\";\r\nimport { FormTextField as TextField } from \"~/components/form/FormTextField\";\r\n\r\nexport const { fieldContext, useFieldContext, formContext, useFormContext } = createFormHookContexts();\r\n\r\nexport const { useAppForm: useLayoutForm, withForm: withLayoutForm } =\r\n createFormHook({\r\n fieldComponents: {\r\n TextField,\r\n NumberField,\r\n Autocomplete,\r\n Checkbox,\r\n Switch,\r\n RadioGroup,\r\n Slider,\r\n DatePicker,\r\n DateRangePicker,\r\n TimePicker,\r\n TimeRangePicker,\r\n DateTimePicker,\r\n DateTimeRangePicker,\r\n },\r\n formComponents: {\r\n SubmitButton,\r\n },\r\n fieldContext,\r\n formContext,\r\n });\r\n"],"names":["jsx","jsxs","TextField","NumberField","Autocomplete","Checkbox","Switch","RadioGroup","Slider","DatePicker","DateRangePicker","TimePicker","TimeRangePicker","DateTimePicker","DateTimeRangePicker","SubmitButton"],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sources":["../src/components/form/FormAutocomplete.tsx","../src/components/form/FormCheckbox.tsx","../src/components/form/FormDatePicker.tsx","../src/components/form/FormDateRangePicker.tsx","../src/components/form/FormTimePicker.tsx","../src/components/form/FormTimeRangePicker.tsx","../src/components/form/FormDateTimePicker.tsx","../src/components/form/FormDateTimeRangePicker.tsx","../src/components/form/FormNumberField.tsx","../src/components/form/FormRadioGroup.tsx","../src/components/form/FormSlider.tsx","../src/components/form/FormSubmitButton.tsx","../src/components/form/FormSwitch.tsx","../src/components/form/FormTextField.tsx","../src/hooks/FormHooks.ts"],"sourcesContent":["import { Autocomplete, TextField } from \"@mui/material\";\r\nimport type { AutocompleteProps, TextFieldProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormAutocompleteProps extends Omit<AutocompleteProps<any, boolean, boolean, boolean>, FormOmittedProps> {\r\n textFieldProps?: Omit<TextFieldProps, FormOmittedProps>;\r\n}\r\n\r\nexport const FormAutocomplete: FC<FormAutocompleteProps> = ({ textFieldProps, ...autocompleteProps }) => {\r\n const field = useFieldContext();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <Autocomplete\r\n value={field.state.value}\r\n onChange={(_, value) => !autocompleteProps.freeSolo && field.handleChange(value)}\r\n onInputChange={(_, value, reason) => reason !== \"reset\" && autocompleteProps.freeSolo && field.handleChange(value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...autocompleteProps}\r\n renderInput={(parameters) =>\r\n <TextField\r\n {...parameters}\r\n name={field.name}\r\n error={isTouched && hasError}\r\n helperText={isTouched && helperText}\r\n {...textFieldProps}\r\n />\r\n }\r\n />\r\n );\r\n};","import { Checkbox, FormControl, FormControlLabel, FormHelperText } from \"@mui/material\";\r\nimport type { CheckboxProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormCheckboxProps extends Omit<CheckboxProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormCheckbox: FC<FormCheckboxProps> = (props) => {\r\n const field = useFieldContext<boolean | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n name={field.name}\r\n checked={Boolean(field.state.value)}\r\n onChange={(event) => field.handleChange(event.target.checked)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n }\r\n label={props.label ?? \"\"}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};","import { DatePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DatePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDatePickerProps extends Omit<DatePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDatePicker: FC<FormDatePickerProps> = (props) => {\r\n const field = useFieldContext<Dayjs | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DatePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { DateRangePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DateRangePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDateRangePickerProps extends Omit<DateRangePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDateRangePicker: FC<FormDateRangePickerProps> = (props) => {\r\n const field = useFieldContext<[Dayjs | null, Dayjs | null] | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DateRangePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { TimePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { TimePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormTimePickerProps extends Omit<TimePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormTimePicker: FC<FormTimePickerProps> = (props) => {\r\n const field = useFieldContext<Dayjs | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <TimePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { TimeRangePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { TimeRangePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormTimeRangePickerProps extends Omit<TimeRangePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormTimeRangePicker: FC<FormTimeRangePickerProps> = (props) => {\r\n const field = useFieldContext<[Dayjs | null, Dayjs | null] | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <TimeRangePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { DateTimePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DateTimePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDateTimePickerProps extends Omit<DateTimePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDateTimePicker: FC<FormDateTimePickerProps> = (props) => {\r\n const field = useFieldContext<Dayjs | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DateTimePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps,\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { DateTimeRangePicker } from \"@mui/x-date-pickers-pro\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DateTimeRangePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { Dayjs } from \"dayjs\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDateTimeRangePickerProps extends Omit<DateTimeRangePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDateTimeRangePicker: FC<FormDateTimeRangePickerProps> = (props) => {\r\n const field = useFieldContext<[Dayjs | null, Dayjs | null] | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DateTimeRangePicker\r\n name={field.name}\r\n value={field.state.value}\r\n onChange={(value) => field.handleChange(value)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport { NumericFormat } from \"react-number-format\";\r\nimport type { InputAttributes, NumericFormatProps } from \"react-number-format/types/types\";\r\nimport type { FC } from \"react\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormNumberFieldProps extends Omit<TextFieldProps, FormOmittedProps> {\r\n\tdefaultValue?: number | null;\r\n\toptions?: Omit<NumericFormatProps<InputAttributes>, \"customInput\" | \"onValueChange\" | keyof InputAttributes>;\r\n}\r\n\r\nexport const FormNumberField: FC<FormNumberFieldProps> = ({ options, ...props }) => {\r\n\tconst field = useFieldContext<number | null | undefined>();\r\n\tconst { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n\treturn (\r\n\t\t<NumericFormat\r\n\t\t\tcustomInput={TextField}\r\n\t\t\tname={field.name}\r\n\t\t\tvalue={field.state.value ?? \"\"}\r\n\t\t\tonValueChange={({ floatValue }) => field.handleChange(floatValue)}\r\n\t\t\tonBlur={field.handleBlur}\r\n\t\t\terror={isTouched && hasError}\r\n\t\t\thelperText={isTouched && helperText}\r\n\t\t\taria-label={field.name}\r\n\t\t\t{...props}\r\n\t\t\t{...options}\r\n\t\t/>\r\n\t);\r\n};\r\n","import { FormControl, FormControlLabel, FormHelperText, FormLabel, Radio, RadioGroup } from \"@mui/material\";\r\nimport type { RadioGroupProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\nexport interface FormRadioGroupProps extends Omit<RadioGroupProps, FormOmittedProps> {\r\n label?: string;\r\n options: Array<Option>;\r\n}\r\n\r\nexport const FormRadioGroup: FC<FormRadioGroupProps> = ({ label, options, ...props }) => {\r\n const field = useFieldContext<string | number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n {label && <FormLabel component=\"legend\">{label}</FormLabel>}\r\n <RadioGroup\r\n name={field.name}\r\n value={field.state.value ?? \"\"}\r\n onChange={(event) => field.handleChange(event.target.value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n >\r\n {options.map((option) => (\r\n <FormControlLabel\r\n key={option.value}\r\n value={option.value}\r\n control={<Radio />}\r\n label={option.label}\r\n />\r\n ))}\r\n </RadioGroup>\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { FormControl, FormHelperText, FormLabel, Slider } from \"@mui/material\";\r\nimport type { SliderProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormSliderProps extends Omit<SliderProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormSlider: FC<FormSliderProps> = ({ label, ...props }) => {\r\n const field = useFieldContext<number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n {label && <FormLabel>{label}</FormLabel>}\r\n <Slider\r\n name={field.name}\r\n value={field.state.value ?? 0}\r\n onChange={(_, value) => field.handleChange(Array.isArray(value) ? value[0] : value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { Button } from \"@mui/material\";\r\nimport type { ButtonProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport { useFormContext } from \"~/hooks/FormHooks\";\r\n\r\nexport type FormSubmitButtonProps = Omit<ButtonProps, \"loading\" | \"disabled\" | \"onClick\" | \"type\">;\r\n\r\nexport const FormSubmitButton: FC<FormSubmitButtonProps> = (props) => {\r\n const form = useFormContext();\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n form.handleSubmit();\r\n };\r\n\r\n return (\r\n <form.Subscribe selector={(state) => [state.canSubmit, state.isSubmitting]}>\r\n {([canSubmit, isSubmitting]) => (\r\n <Button\r\n loading={isSubmitting}\r\n disabled={!canSubmit}\r\n onClick={handleClick}\r\n type=\"submit\"\r\n aria-label=\"submit\"\r\n {...props}\r\n />\r\n )}\r\n </form.Subscribe>\r\n );\r\n};","import { FormControl, FormControlLabel, FormHelperText, Switch } from \"@mui/material\";\r\nimport type { SwitchProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormSwitchProps extends Omit<SwitchProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormSwitch: FC<FormSwitchProps> = (props) => {\r\n const field = useFieldContext<boolean | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n <FormControlLabel\r\n control={\r\n <Switch\r\n name={field.name}\r\n checked={Boolean(field.state.value)}\r\n onChange={(event) => field.handleChange(event.target.checked)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n }\r\n label={props.label ?? \"\"}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormTextFieldProps extends Omit<TextFieldProps, FormOmittedProps> {\r\n type?: \"color\" | \"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\"\r\n}\r\n\r\nexport const FormTextField: FC<FormTextFieldProps> = (props) => {\r\n const field = useFieldContext<string | number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <TextField\r\n name={field.name}\r\n value={field.state.value ?? \"\"}\r\n onChange={event => field.handleChange(event.target.value)}\r\n onBlur={field.handleBlur}\r\n error={isTouched && hasError}\r\n helperText={isTouched && helperText}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};","import { createFormHook, createFormHookContexts } from \"@tanstack/react-form\";\r\nimport { FormAutocomplete as Autocomplete } from \"~/components/form/FormAutocomplete\";\r\nimport { FormCheckbox as Checkbox } from \"~/components/form/FormCheckbox\";\r\nimport { FormDatePicker as DatePicker } from \"~/components/form/FormDatePicker\";\r\nimport { FormDateRangePicker as DateRangePicker } from \"~/components/form/FormDateRangePicker\";\r\nimport { FormTimePicker as TimePicker } from \"~/components/form/FormTimePicker\";\r\nimport { FormTimeRangePicker as TimeRangePicker } from \"~/components/form/FormTimeRangePicker\";\r\nimport { FormDateTimePicker as DateTimePicker } from \"~/components/form/FormDateTimePicker\";\r\nimport { FormDateTimeRangePicker as DateTimeRangePicker } from \"~/components/form/FormDateTimeRangePicker\";\r\nimport { FormNumberField as NumberField } from \"~/components/form/FormNumberField\";\r\nimport { FormRadioGroup as RadioGroup } from \"~/components/form/FormRadioGroup\";\r\nimport { FormSlider as Slider } from \"~/components/form/FormSlider\";\r\nimport { FormSubmitButton as SubmitButton } from \"~/components/form/FormSubmitButton\";\r\nimport { FormSwitch as Switch } from \"~/components/form/FormSwitch\";\r\nimport { FormTextField as TextField } from \"~/components/form/FormTextField\";\r\n\r\nexport const { fieldContext, useFieldContext, formContext, useFormContext } = createFormHookContexts();\r\n\r\nexport const { useAppForm: useLayoutForm, withForm: withLayoutForm } =\r\n createFormHook({\r\n fieldComponents: {\r\n TextField,\r\n NumberField,\r\n Autocomplete,\r\n Checkbox,\r\n Switch,\r\n RadioGroup,\r\n Slider,\r\n DatePicker,\r\n DateRangePicker,\r\n TimePicker,\r\n TimeRangePicker,\r\n DateTimePicker,\r\n DateTimeRangePicker,\r\n },\r\n formComponents: {\r\n SubmitButton,\r\n },\r\n fieldContext,\r\n formContext,\r\n });\r\n"],"names":["TextField","NumberField","Autocomplete","Checkbox","Switch","RadioGroup","Slider","DatePicker","DateRangePicker","TimePicker","TimeRangePicker","DateTimePicker","DateTimeRangePicker","SubmitButton"],"mappings":";;;;;;;AAWO,MAAM,mBAA8C,CAAC,EAAE,gBAAgB,GAAG,wBAAwB;AACrG,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,OAAO,MAAM,MAAM;AAAA,MACnB,UAAU,CAAC,GAAG,UAAU,CAAC,kBAAkB,YAAY,MAAM,aAAa,KAAK;AAAA,MAC/E,eAAe,CAAC,GAAG,OAAO,WAAW,WAAW,WAAW,kBAAkB,YAAY,MAAM,aAAa,KAAK;AAAA,MACjH,QAAQ,MAAM;AAAA,MACd,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,MACJ,aAAa,CAAC,eACV;AAAA,QAAC;AAAA,QAAA;AAAA,UACI,GAAG;AAAA,UACJ,MAAM,MAAM;AAAA,UACZ,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACxB,GAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IACR;AAAA,EAAA;AAIhB;ACvBO,MAAM,eAAsC,CAAC,UAAU;AAC1D,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI,qBAAC,aAAA,EAAY,WAAU,YACnB,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,SACI;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,MAAM,MAAM;AAAA,YACZ,SAAS,QAAQ,MAAM,MAAM,KAAK;AAAA,YAClC,UAAU,CAAC,UAAU,MAAM,aAAa,MAAM,OAAO,OAAO;AAAA,YAC5D,QAAQ,MAAM;AAAA,YACd,cAAY,MAAM;AAAA,YACjB,GAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAGZ,OAAO,MAAM,SAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEzB,aAAa,YAAY,oBAAC,gBAAA,EAAe,OAAO,UAAW,UAAA,WAAA,CAAW;AAAA,EAAA,GAC3E;AAER;ACpBO,MAAM,iBAA0C,CAAC,UAAU;AAC9D,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM;AAAA,MACnB,UAAU,CAAC,UAAU,MAAM,aAAa,KAAK;AAAA,MAC7C,WAAW;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACzB,GAAG,MAAM;AAAA,QAAA;AAAA,QAEb,GAAG,MAAM;AAAA,MAAA;AAAA,MAEb,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGhB;ACtBO,MAAM,sBAAoD,CAAC,UAAU;AACxE,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM;AAAA,MACnB,UAAU,CAAC,UAAU,MAAM,aAAa,KAAK;AAAA,MAC7C,WAAW;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACzB,GAAG,MAAM;AAAA,QAAA;AAAA,QAEb,GAAG,MAAM;AAAA,MAAA;AAAA,MAEb,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGhB;ACtBO,MAAM,iBAA0C,CAAC,UAAU;AAC9D,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM;AAAA,MACnB,UAAU,CAAC,UAAU,MAAM,aAAa,KAAK;AAAA,MAC7C,WAAW;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACzB,GAAG,MAAM;AAAA,QAAA;AAAA,QAEb,GAAG,MAAM;AAAA,MAAA;AAAA,MAEb,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGhB;ACtBO,MAAM,sBAAoD,CAAC,UAAU;AACxE,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM;AAAA,MACnB,UAAU,CAAC,UAAU,MAAM,aAAa,KAAK;AAAA,MAC7C,WAAW;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACzB,GAAG,MAAM;AAAA,QAAA;AAAA,QAEb,GAAG,MAAM;AAAA,MAAA;AAAA,MAEb,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGhB;ACtBO,MAAM,qBAAkD,CAAC,UAAU;AACtE,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM;AAAA,MACnB,UAAU,CAAC,UAAU,MAAM,aAAa,KAAK;AAAA,MAC7C,WAAW;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACzB,GAAG,MAAM;AAAA,QAAA;AAAA,QAEb,GAAG,MAAM;AAAA,MAAA;AAAA,MAEb,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGhB;ACtBO,MAAM,0BAA4D,CAAC,UAAU;AAChF,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM;AAAA,MACnB,UAAU,CAAC,UAAU,MAAM,aAAa,KAAK;AAAA,MAC7C,WAAW;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACzB,GAAG,MAAM;AAAA,QAAA;AAAA,QAEb,GAAG,MAAM;AAAA,MAAA;AAAA,MAEb,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGhB;ACrBO,MAAM,kBAA4C,CAAC,EAAE,SAAS,GAAG,YAAY;AACnF,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACC;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAa;AAAA,MACb,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM,SAAS;AAAA,MAC5B,eAAe,CAAC,EAAE,iBAAiB,MAAM,aAAa,UAAU;AAAA,MAChE,QAAQ,MAAM;AAAA,MACd,OAAO,aAAa;AAAA,MACpB,YAAY,aAAa;AAAA,MACzB,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EAAA;AAGP;ACfO,MAAM,iBAA0C,CAAC,EAAE,OAAO,SAAS,GAAG,YAAY;AACrF,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI,qBAAC,aAAA,EAAY,WAAU,YAClB,UAAA;AAAA,IAAA,SAAS,oBAAC,WAAA,EAAU,WAAU,UAAU,UAAA,OAAM;AAAA,IAC/C;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM,MAAM,SAAS;AAAA,QAC5B,UAAU,CAAC,UAAU,MAAM,aAAa,MAAM,OAAO,KAAK;AAAA,QAC1D,QAAQ,MAAM;AAAA,QACd,cAAY,MAAM;AAAA,QACjB,GAAG;AAAA,QAEH,UAAA,QAAQ,IAAI,CAAC,WACV;AAAA,UAAC;AAAA,UAAA;AAAA,YAEG,OAAO,OAAO;AAAA,YACd,6BAAU,OAAA,EAAM;AAAA,YAChB,OAAO,OAAO;AAAA,UAAA;AAAA,UAHT,OAAO;AAAA,QAAA,CAKnB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEJ,aAAa,YAAY,oBAAC,gBAAA,EAAe,OAAO,UAAW,UAAA,WAAA,CAAW;AAAA,EAAA,GAC3E;AAER;ACjCO,MAAM,aAAkC,CAAC,EAAE,OAAO,GAAG,YAAY;AACpE,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI,qBAAC,aAAA,EAAY,WAAU,YAClB,UAAA;AAAA,IAAA,SAAS,oBAAC,aAAW,UAAA,MAAA,CAAM;AAAA,IAC5B;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM,MAAM,SAAS;AAAA,QAC5B,UAAU,CAAC,GAAG,UAAU,MAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK;AAAA,QAClF,QAAQ,MAAM;AAAA,QACd,cAAY,MAAM;AAAA,QACjB,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,IAEP,aAAa,YAAY,oBAAC,gBAAA,EAAe,OAAO,UAAW,UAAA,WAAA,CAAW;AAAA,EAAA,GAC3E;AAER;ACtBO,MAAM,mBAA8C,CAAC,UAAU;AAClE,QAAM,OAAO,eAAA;AAEb,QAAM,cAAc,CAAC,UAA+C;AAChE,UAAM,eAAA;AACN,UAAM,gBAAA;AACN,SAAK,aAAA;AAAA,EACT;AAEA,6BACK,KAAK,WAAL,EAAe,UAAU,CAAC,UAAU,CAAC,MAAM,WAAW,MAAM,YAAY,GACpE,WAAC,CAAC,WAAW,YAAY,MACtB;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,SAAS;AAAA,MACT,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,MACT,MAAK;AAAA,MACL,cAAW;AAAA,MACV,GAAG;AAAA,IAAA;AAAA,EAAA,GAGhB;AAER;ACnBO,MAAM,aAAkC,CAAC,UAAU;AACtD,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI,qBAAC,aAAA,EAAY,WAAU,YACnB,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,SACI;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,MAAM,MAAM;AAAA,YACZ,SAAS,QAAQ,MAAM,MAAM,KAAK;AAAA,YAClC,UAAU,CAAC,UAAU,MAAM,aAAa,MAAM,OAAO,OAAO;AAAA,YAC5D,QAAQ,MAAM;AAAA,YACd,cAAY,MAAM;AAAA,YACjB,GAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAGZ,OAAO,MAAM,SAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEzB,aAAa,YAAY,oBAAC,gBAAA,EAAe,OAAO,UAAW,UAAA,WAAA,CAAW;AAAA,EAAA,GAC3E;AAER;ACtBO,MAAM,gBAAwC,CAAC,UAAU;AAC5D,QAAM,QAAQ,gBAAA;AACd,QAAM,EAAE,WAAW,UAAU,WAAA,IAAe,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM,SAAS;AAAA,MAC5B,UAAU,CAAA,UAAS,MAAM,aAAa,MAAM,OAAO,KAAK;AAAA,MACxD,QAAQ,MAAM;AAAA,MACd,OAAO,aAAa;AAAA,MACpB,YAAY,aAAa;AAAA,MACzB,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGhB;ACXO,MAAM,EAAE,cAAc,iBAAiB,aAAa,eAAA,IAAmB,uBAAA;AAEvE,MAAM,EAAE,YAAY,eAAe,UAAU,eAAA,IAChD,eAAe;AAAA,EACX,iBAAiB;AAAA,IAAA,WACbA;AAAAA,IAAA,aACAC;AAAAA,IAAA,cACAC;AAAAA,IAAA,UACAC;AAAAA,IAAA,QACAC;AAAAA,IAAA,YACAC;AAAAA,IAAA,QACAC;AAAAA,IAAA,YACAC;AAAAA,IAAA,iBACAC;AAAAA,IAAA,YACAC;AAAAA,IAAA,iBACAC;AAAAA,IAAA,gBACAC;AAAAA,IAAA,qBACAC;AAAAA,EAAA;AAAA,EAEJ,gBAAgB;AAAA,IAAA,cACZC;AAAAA,EAAA;AAAA,EAEJ;AAAA,EACA;AACJ,CAAC;"}