wcz-test 6.4.11 → 6.5.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.
@@ -142,6 +142,7 @@ import MoreVert from "@mui/icons-material/MoreVert";
142
142
  import { Box as Box2, IconButton, ImageListItem, ImageListItemBar, Stack as Stack2, Tooltip } from "@mui/material";
143
143
  import { grey } from "@mui/material/colors";
144
144
  import { Fragment, useEffect as useEffect2, useState as useState2 } from "react";
145
+ import { useInView } from "react-intersection-observer";
145
146
 
146
147
  // src/components/file/fileViewer/common/ActionsMenu.tsx
147
148
  import Delete from "@mui/icons-material/Delete";
@@ -226,10 +227,11 @@ var GridFileViewerItem = ({ meta, size, itemBar }) => {
226
227
  const { setImageId, actions } = useFile();
227
228
  const [showItemBar, setShowItemBar] = useState2(itemBar === "always");
228
229
  const [menu, setMenu] = useState2(null);
230
+ const { ref, inView } = useInView();
229
231
  useEffect2(() => {
230
232
  setShowItemBar(itemBar === "always");
231
233
  }, [itemBar]);
232
- const { data: source } = useGetFileThumbnail({ meta });
234
+ const { data: source } = useGetFileThumbnail({ meta }, { enabled: inView });
233
235
  const handleOnMouseEnter = () => setShowItemBar(true);
234
236
  const handleOnMouseLeave = () => itemBar !== "always" && setShowItemBar(false);
235
237
  const openMenu = (event) => {
@@ -255,7 +257,7 @@ var GridFileViewerItem = ({ meta, size, itemBar }) => {
255
257
  }
256
258
  };
257
259
  return /* @__PURE__ */ jsxs4(Fragment, { children: [
258
- /* @__PURE__ */ jsxs4(ImageListItem, { sx: { width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }, onMouseEnter: handleOnMouseEnter, onMouseLeave: handleOnMouseLeave, children: [
260
+ /* @__PURE__ */ jsxs4(ImageListItem, { sx: { width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }, onMouseEnter: handleOnMouseEnter, onMouseLeave: handleOnMouseLeave, ref, children: [
259
261
  /* @__PURE__ */ jsx5(
260
262
  Box2,
261
263
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/core/TypographyWithIcon.tsx","../src/components/core/Fullscreen.tsx","../src/components/file/Dropzone.tsx","../src/components/file/FileViewer.tsx","../src/components/file/fileViewer/FileViewerGrid.tsx","../src/components/file/fileViewer/common/ActionsMenu.tsx","../src/contexts/FileContext.ts","../src/components/file/fileViewer/FileViewerList.tsx","../src/components/file/fileViewer/ImageViewer.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 { 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 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 { 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\r\n useEffect(() => {\r\n setShowItemBar(itemBar === \"always\");\r\n }, [itemBar]);\r\n\r\n const { data: source } = useGetFileThumbnail({ meta });\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}>\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 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 { 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 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 { 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"],"mappings":"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","names":["jsx","Typography","jsx","jsxs","useState","Box","Stack","useEffect","useState","useTranslation","jsx","jsxs","useTranslation","jsx","jsxs","Stack","useState","useEffect","Box","MoreVert","IconButton","List","ListItemButton","ListItemIcon","ListItemText","Fragment","useState","jsx","jsxs","List","useState","Fragment","ListItemButton","ListItemIcon","ListItemText","IconButton","MoreVert","Box","useEffect","jsx","jsxs","useEffect","Box","jsx","jsxs","useState","Stack","jsx","jsx","React","jsx","createLink","React","jsx","Component","CreatedComponent","IconButton","createLink","React","jsx","Component","CreatedComponent","createLink","React","jsx","Component","CreatedComponent","createLink","React","jsx","Component","CreatedComponent","Box","Typography","useTranslation","jsx","jsxs","Box","Divider","Typography","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/components/core/TypographyWithIcon.tsx","../src/components/core/Fullscreen.tsx","../src/components/file/Dropzone.tsx","../src/components/file/FileViewer.tsx","../src/components/file/fileViewer/FileViewerGrid.tsx","../src/components/file/fileViewer/common/ActionsMenu.tsx","../src/contexts/FileContext.ts","../src/components/file/fileViewer/FileViewerList.tsx","../src/components/file/fileViewer/ImageViewer.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 { 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 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 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 { 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 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 { 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"],"mappings":"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","names":["jsx","Typography","jsx","jsxs","useState","Box","Stack","useEffect","useState","useTranslation","jsx","jsxs","useTranslation","jsx","jsxs","Stack","useState","useEffect","Box","MoreVert","IconButton","List","ListItemButton","ListItemIcon","ListItemText","Fragment","useState","jsx","jsxs","List","useState","Fragment","ListItemButton","ListItemIcon","ListItemText","IconButton","MoreVert","Box","useEffect","jsx","jsxs","useEffect","Box","jsx","jsxs","useState","Stack","jsx","jsx","React","jsx","createLink","React","jsx","Component","CreatedComponent","IconButton","createLink","React","jsx","Component","CreatedComponent","createLink","React","jsx","Component","CreatedComponent","createLink","React","jsx","Component","CreatedComponent","Box","Typography","useTranslation","jsx","jsxs","Box","Divider","Typography","jsx","jsxs"]}
package/dist/hooks.d.ts CHANGED
@@ -6,6 +6,7 @@ import * as _tanstack_react_form from '@tanstack/react-form';
6
6
  import * as react from 'react';
7
7
  import { ReactNode } from 'react';
8
8
  import * as _tanstack_form_core from '@tanstack/form-core';
9
+ export { useInView } from 'react-intersection-observer';
9
10
  import 'axios';
10
11
  import 'uuidv7';
11
12
  import '@t3-oss/env-core';
package/dist/hooks.js CHANGED
@@ -294,10 +294,14 @@ var { useAppForm: useLayoutForm, withForm: withLayoutForm } = createFormHook({
294
294
  fieldContext,
295
295
  formContext
296
296
  });
297
+
298
+ // src/hooks.ts
299
+ import { useInView } from "react-intersection-observer";
297
300
  export {
298
301
  useDialogs,
299
302
  useFieldContext,
300
303
  useFormContext,
304
+ useInView,
301
305
  useLayoutForm,
302
306
  withLayoutForm
303
307
  };
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/FormHooks.ts","../src/components/form/FormAutocomplete.tsx","../src/components/form/FormCheckbox.tsx","../src/components/form/FormDatePicker.tsx","../src/components/form/FormDateTimePicker.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"],"sourcesContent":["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 { FormDateTimePicker as DateTimePicker } from \"~/components/form/FormDateTimePicker\";\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 DateTimePicker,\r\n },\r\n formComponents: {\r\n SubmitButton,\r\n },\r\n fieldContext,\r\n formContext,\r\n });\r\n","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 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<string | 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 ? dayjs(field.state.value) : null}\r\n onChange={(value) => field.handleChange(value ? value.format() : null)}\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};","import { DateTimePicker } from \"@mui/x-date-pickers-pro\";\r\nimport 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<string | 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 ? dayjs(field.state.value) : null}\r\n onChange={(value) => field.handleChange(value ? value.format() : null)}\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};"],"mappings":";;;;;;;;;;AAAA,SAAS,gBAAgB,8BAA8B;;;ACAvD,SAAS,cAAc,iBAAiB;AAwBxB;AAbT,IAAM,mBAA8C,CAAC,EAAE,gBAAgB,GAAG,kBAAkB,MAAM;AACrG,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACI;AAAA,IAAC;AAAA;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;AAAA,UACI,GAAG;AAAA,UACJ,MAAM,MAAM;AAAA,UACZ,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACxB,GAAG;AAAA;AAAA,MACR;AAAA;AAAA,EAER;AAER;;;AClCA,SAAS,UAAU,aAAa,kBAAkB,sBAAsB;AAgBhE,SAGY,OAAAA,MAHZ;AALD,IAAM,eAAsC,CAAC,UAAU;AAC1D,QAAM,QAAQ,gBAA4C;AAC1D,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACI,qBAAC,eAAY,WAAU,YACnB;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACG,SACI,gBAAAA;AAAA,UAAC;AAAA;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;AAAA,QACR;AAAA,QAEJ,OAAO,MAAM,SAAS;AAAA;AAAA,IAC1B;AAAA,IACC,aAAa,YAAY,gBAAAA,KAAC,kBAAe,OAAO,UAAW,sBAAW;AAAA,KAC3E;AAER;;;ACjCA,SAAS,kBAAkB;AAC3B,OAAO,WAAW;AAiBV,gBAAAC,YAAA;AALD,IAAM,iBAA0C,CAAC,UAAU;AAC9D,QAAM,QAAQ,gBAA2C;AACzD,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACI,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,IAAI;AAAA,MACtD,UAAU,CAAC,UAAU,MAAM,aAAa,QAAQ,MAAM,OAAO,IAAI,IAAI;AAAA,MACrE,WAAW;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACzB,GAAG,MAAM;AAAA,QACb;AAAA,QACA,GAAG,MAAM;AAAA,MACb;AAAA,MACA,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA;AAAA,EACR;AAER;;;ACnCA,SAAS,sBAAsB;AAC/B,OAAOC,YAAW;AAiBV,gBAAAC,YAAA;AALD,IAAM,qBAAkD,CAAC,UAAU;AACtE,QAAM,QAAQ,gBAA2C;AACzD,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACI,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM,QAAQC,OAAM,MAAM,MAAM,KAAK,IAAI;AAAA,MACtD,UAAU,CAAC,UAAU,MAAM,aAAa,QAAQ,MAAM,OAAO,IAAI,IAAI;AAAA,MACrE,WAAW;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,OAAO,aAAa;AAAA,UACpB,YAAY,aAAa;AAAA,UACzB,GAAG,MAAM;AAAA,QACb;AAAA,QACA,GAAG,MAAM;AAAA,MACb;AAAA,MACA,cAAY,MAAM;AAAA,MACjB,GAAG;AAAA;AAAA,EACR;AAER;;;ACnCA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,qBAAqB;AAkB5B,gBAAAC,YAAA;AALK,IAAM,kBAA4C,CAAC,EAAE,SAAS,GAAG,MAAM,MAAM;AACnF,QAAM,QAAQ,gBAA2C;AACzD,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACC,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACA,aAAaC;AAAA,MACb,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM,SAAS;AAAA,MAC5B,eAAe,CAAC,EAAE,WAAW,MAAM,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;AAAA,EACL;AAEF;;;AChCA,SAAS,eAAAC,cAAa,oBAAAC,mBAAkB,kBAAAC,iBAAgB,WAAW,OAAO,kBAAkB;AAsBpF,SACc,OAAAC,MADd,QAAAC,aAAA;AALD,IAAM,iBAA0C,CAAC,EAAE,OAAO,SAAS,GAAG,MAAM,MAAM;AACrF,QAAM,QAAQ,gBAAoD;AAClE,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACI,gBAAAA,MAACC,cAAA,EAAY,WAAU,YAClB;AAAA,aAAS,gBAAAF,KAAC,aAAU,WAAU,UAAU,iBAAM;AAAA,IAC/C,gBAAAA;AAAA,MAAC;AAAA;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,kBAAQ,IAAI,CAAC,WACV,gBAAAA;AAAA,UAACG;AAAA,UAAA;AAAA,YAEG,OAAO,OAAO;AAAA,YACd,SAAS,gBAAAH,KAAC,SAAM;AAAA,YAChB,OAAO,OAAO;AAAA;AAAA,UAHT,OAAO;AAAA,QAIhB,CACH;AAAA;AAAA,IACL;AAAA,IACC,aAAa,YAAY,gBAAAA,KAACI,iBAAA,EAAe,OAAO,UAAW,sBAAW;AAAA,KAC3E;AAER;;;AC5CA,SAAS,eAAAC,cAAa,kBAAAC,iBAAgB,aAAAC,YAAW,cAAc;AAgBvD,SACc,OAAAC,MADd,QAAAC,aAAA;AALD,IAAM,aAAkC,CAAC,EAAE,OAAO,GAAG,MAAM,MAAM;AACpE,QAAM,QAAQ,gBAA2C;AACzD,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACI,gBAAAA,MAACC,cAAA,EAAY,WAAU,YAClB;AAAA,aAAS,gBAAAF,KAACG,YAAA,EAAW,iBAAM;AAAA,IAC5B,gBAAAH;AAAA,MAAC;AAAA;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;AAAA,IACR;AAAA,IACC,aAAa,YAAY,gBAAAA,KAACI,iBAAA,EAAe,OAAO,UAAW,sBAAW;AAAA,KAC3E;AAER;;;AC7BA,SAAS,cAAc;AAmBP,gBAAAC,YAAA;AAZT,IAAM,mBAA8C,CAAC,UAAU;AAClE,QAAM,OAAO,eAAe;AAE5B,QAAM,cAAc,CAAC,UAA+C;AAChE,UAAM,eAAe;AACrB,UAAM,gBAAgB;AACtB,SAAK,aAAa;AAAA,EACtB;AAEA,SACI,gBAAAA,KAAC,KAAK,WAAL,EAAe,UAAU,CAAC,UAAU,CAAC,MAAM,WAAW,MAAM,YAAY,GACpE,WAAC,CAAC,WAAW,YAAY,MACtB,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACG,SAAS;AAAA,MACT,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,MACT,MAAK;AAAA,MACL,cAAW;AAAA,MACV,GAAG;AAAA;AAAA,EACR,GAER;AAER;;;AC9BA,SAAS,eAAAC,cAAa,oBAAAC,mBAAkB,kBAAAC,iBAAgB,cAAc;AAgB9D,SAGY,OAAAC,MAHZ,QAAAC,aAAA;AALD,IAAM,aAAkC,CAAC,UAAU;AACtD,QAAM,QAAQ,gBAA4C;AAC1D,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACI,gBAAAA,MAACC,cAAA,EAAY,WAAU,YACnB;AAAA,oBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACG,SACI,gBAAAH;AAAA,UAAC;AAAA;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;AAAA,QACR;AAAA,QAEJ,OAAO,MAAM,SAAS;AAAA;AAAA,IAC1B;AAAA,IACC,aAAa,YAAY,gBAAAA,KAACI,iBAAA,EAAe,OAAO,UAAW,sBAAW;AAAA,KAC3E;AAER;;;ACjCA,SAAS,aAAAC,kBAAiB;AAgBlB,gBAAAC,aAAA;AALD,IAAM,gBAAwC,CAAC,UAAU;AAC5D,QAAM,QAAQ,gBAAoD;AAClE,QAAM,EAAE,WAAW,UAAU,WAAW,IAAI,eAAe,KAAK;AAEhE,SACI,gBAAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,MAAM,SAAS;AAAA,MAC5B,UAAU,WAAS,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;AAAA,EACR;AAER;;;AVfO,IAAM,EAAE,cAAc,iBAAiB,aAAa,eAAe,IAAI,uBAAuB;AAE9F,IAAM,EAAE,YAAY,eAAe,UAAU,eAAe,IAC/D,eAAe;AAAA,EACX,iBAAiB;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EACA,gBAAgB;AAAA,IACZ;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AACJ,CAAC;","names":["jsx","jsx","dayjs","jsx","dayjs","TextField","jsx","TextField","FormControl","FormControlLabel","FormHelperText","jsx","jsxs","FormControl","FormControlLabel","FormHelperText","FormControl","FormHelperText","FormLabel","jsx","jsxs","FormControl","FormLabel","FormHelperText","jsx","FormControl","FormControlLabel","FormHelperText","jsx","jsxs","FormControl","FormControlLabel","FormHelperText","TextField","jsx","TextField"]}
1
+ {"version":3,"sources":["../src/hooks/FormHooks.ts","../src/components/form/FormAutocomplete.tsx","../src/components/form/FormCheckbox.tsx","../src/components/form/FormDatePicker.tsx","../src/components/form/FormDateTimePicker.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.ts"],"sourcesContent":["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 { FormDateTimePicker as DateTimePicker } from \"~/components/form/FormDateTimePicker\";\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 DateTimePicker,\r\n },\r\n formComponents: {\r\n SubmitButton,\r\n },\r\n fieldContext,\r\n formContext,\r\n });\r\n","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 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<string | 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 ? dayjs(field.state.value) : null}\r\n onChange={(value) => field.handleChange(value ? value.format() : null)}\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};","import { DateTimePicker } from \"@mui/x-date-pickers-pro\";\r\nimport 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<string | 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 ? dayjs(field.state.value) : null}\r\n onChange={(value) => field.handleChange(value ? value.format() : null)}\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};","export { useFieldContext, useFormContext, useLayoutForm, withLayoutForm } from \"./hooks/FormHooks\";\r\nexport { useDialogs } from \"./hooks/DialogsHooks\";\r\nexport type { DialogProps } from \"./hooks/DialogsHooks\";\r\nexport { useInView } from \"react-intersection-observer\";\r\n"],"mappings":"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","names":["jsx","jsx","dayjs","jsx","dayjs","TextField","jsx","TextField","FormControl","FormControlLabel","FormHelperText","jsx","jsxs","FormControl","FormControlLabel","FormHelperText","FormControl","FormHelperText","FormLabel","jsx","jsxs","FormControl","FormLabel","FormHelperText","jsx","FormControl","FormControlLabel","FormHelperText","jsx","jsxs","FormControl","FormControlLabel","FormHelperText","TextField","jsx","TextField"]}
package/dist/index.d.ts CHANGED
@@ -2,9 +2,9 @@ import { LinkOptions } from '@tanstack/react-router';
2
2
  import { FC, ReactNode } from 'react';
3
3
  import { CssVarsThemeOptions } from '@mui/material';
4
4
  export { r as rootRouteHead } from './utils-ChipkRJ9.js';
5
- export { createEnv } from '@t3-oss/env-core';
6
5
  import 'axios';
7
6
  import 'uuidv7';
7
+ import '@t3-oss/env-core';
8
8
 
9
9
  interface NavigationPageItem extends Partial<Pick<LinkOptions, "to" | "href" | "params" | "search">> {
10
10
  title: string;
package/dist/index.js CHANGED
@@ -2314,12 +2314,8 @@ var LayoutProvider = ({ navigation, theme, children }) => {
2314
2314
  }, []);
2315
2315
  return /* @__PURE__ */ jsx8(ThemeProvider, { theme: createdTheme, children: /* @__PURE__ */ jsx8(LocalizationProvider, { dateAdapter: AdapterDayjs, adapterLocale: i18n.resolvedLanguage, children: /* @__PURE__ */ jsx8(DialogsProvider, { children: /* @__PURE__ */ jsx8(Layout, { navigation, children }) }) }) });
2316
2316
  };
2317
-
2318
- // src/index.ts
2319
- import { createEnv } from "@t3-oss/env-core";
2320
2317
  export {
2321
2318
  LayoutProvider,
2322
- createEnv,
2323
2319
  rootRouteHead
2324
2320
  };
2325
2321
  /*! Bundled license information: