@liberfi.io/ui-scaffold 0.1.8 → 0.1.10

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,"sources":["../src/components/draggable/states.ts","../src/components/draggable/useDraggableModalDisclosure.ts","../src/components/draggable/useDraggablePanelDisclosure.ts","../src/components/draggable/DraggableModal.tsx","../src/components/draggable/DraggablePanel.tsx","../src/components/draggable/DraggablePanelProvider.tsx","../src/components/draggable/useDraggableDisclosure.ts","../src/components/layout/Header.tsx","../src/components/layout/MobileHeader.tsx","../src/components/layout/Footer.tsx","../src/components/layout/Page.tsx","../src/components/layout/PageContent.tsx","../src/components/layout/Logo.tsx","../src/components/layout/HeaderNavigation.tsx","../src/components/scroll/useHorizontalScroll.ts","../src/components/scroll/HorizontalScrollContainer.tsx","../src/components/modal/AsyncModal.tsx","../src/components/modal/useAsyncModal.ts","../src/version.ts"],"names":["panelStateFamily","atomFamily","id","atomWithStorage","panelWidthFamily","panelMinWidthFamily","panelMaxWidthFamily","modalOpenFamily","modalShouldStartDraggingFamily","modalSizeFamily","modalRestoreSizeFamily","modalPositionFamily","modalRestorePositionFamily","modalMinimizedFamily","modalMinWidthFamily","modalMaxWidthFamily","lastDraggableTypeFamily","panelOrdersAtom","useDraggableModalDisclosure","isOpen","setIsOpen","useAtom","isMinimized","setIsMinimized","restoreSize","useAtomValue","restorePosition","setSize","useSetAtom","setPosition","setShouldStartDragging","setLastDraggableType","onOpen","useCallback","options","shouldStartDragging","position","size","prev","onClose","useMemo","useDraggablePanelDisclosure","panelState","setPanelState","setPanelWidth","setPanelOrders","left","right","MINIMIZED_SIZE","MAXIMIZED_SIZE","MAXIMIZED_POSITION","DraggableModal","memo","title","minWidth","maxWidth","minHeight","maxHeight","leftSidebar","leftSidebarWidth","rightSidebar","rightSidebarWidth","aspectRatio","showHeader","header","headerHeight","children","t","useTranslation","onOpenPanel","setRestoreSize","setRestorePosition","isDragging","setIsDragging","useState","isResizing","setIsResizing","resizeDirection","setResizeDirection","currentEdge","setCurrentEdge","dockAnimationEdge","setDockAnimationEdge","dockToEdge","setDockToEdge","dockToEdgeTimeoutRef","useRef","panelMinWidth","panelMaxWidth","positionRef","useValueRef","setPositionRef","useCallbackRef","sizeRef","setSizeRef","leftSidebarWidthRef","hasLeftSidebarRef","rightSidebarWidthRef","hasRightSidebarRef","aspectRatioRef","headerHeightRef","minWidthRef","maxWidthRef","minHeightRef","maxHeightRef","isDraggingRef","currentEdgeRef","dockToEdgeRef","onCloseRef","onOpenPanelRef","panelMinWidthRef","panelMaxWidthRef","isMaximized","useEffect","bottom","handleMouseMove","e","handleMouseUp","startInteraction","interactionType","direction","startX","startY","startWidth","startHeight","startPosition","cleanup","deltaX","deltaY","newX","newY","leftOffset","minX","rightOffset","maxX","maxY","edge","calculateNewSize","width","height","constraint","newWidth","newHeight","widthBasedHeight","heightBasedWidth","absDeltaX","absDeltaY","avgHeight","newSize","handleMinimize","handleMaximize","handleResize","throttle","jsxs","Fragment","createPortal","jsx","clsx","StyledTooltip","DraggableIcon","Button","RestoreWindowIcon","MinimizeIcon","UnMaximizeIcon","MaximizeIcon","XCloseIcon","DraggablePanel","setWidth","openModal","closePanel","modalMinWidth","modalMaxWidth","widthRef","isResizingRef","setWidthRef","openModalRef","closePanelRef","modalMinWidthRef","modalMaxWidthRef","handleResizeStart","onResize","distance","onResizeEnd","handleDragStart","onDragMove","onDragEnd","handleClose","ResizeHandle","DraggablePanelProvider","contents","className","classNames","panelOrders","store","getDefaultStore","content","leftOpenPanels","a","b","rightOpenPanels","props","useDraggableDisclosure","isModalOpen","onOpenModal","onCloseModal","isPanelOpen","onClosePanel","lastDraggableType","Header","MobileHeader","Footer","Page","PageContent","Logo","href","icon","miniIcon","Link","HeaderNavigation","active","useHorizontalScroll","scrollAmount","dependencies","containerRef","showLeftArrow","setShowLeftArrow","showRightArrow","setShowRightArrow","checkScrollPosition","container","scrollLeft","scrollWidth","clientWidth","scroll","scrollOffset","resizeObserver","HorizontalScrollContainer","isHovered","setIsHovered","handleMouseEnter","handleMouseLeave","handleScrollLeft","handleScrollRight","StyledButton","ChevronLeftIcon","ChevronRightIcon","AsyncModal","events","useEventEmitter","onOpenChange","useDisclosure","params","setParams","onResult","setOnResult","handler","useAsyncModal","version_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport { atomFamily, atomWithStorage } from \"@liberfi.io/ui\";\n\n/** whether the panel is docked or not */\nexport const panelStateFamily = atomFamily((id: string | null) =>\n atomWithStorage<\"none\" | \"left\" | \"right\">(\n `panelState.${id ?? \"default\"}`,\n \"none\",\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** width of the panel */\nexport const panelWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage(`panelWidth.${id ?? \"default\"}`, 350, undefined, {\n getOnInit: true,\n }),\n);\n\nexport const panelMinWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage(`panelMinWidth.${id ?? \"default\"}`, 320, undefined, {\n getOnInit: true,\n }),\n);\n\nexport const panelMaxWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage(`panelMaxWidth.${id ?? \"default\"}`, 440, undefined, {\n getOnInit: true,\n }),\n);\n\n/** whether the modal is open */\nexport const modalOpenFamily = atomFamily((id: string | null) =>\n atomWithStorage(`modalOpen.${id ?? \"default\"}`, false, undefined, {\n getOnInit: true,\n }),\n);\n\n/** whether the modal should start dragging automatically when opened */\nexport const modalShouldStartDraggingFamily = atomFamily((id: string | null) =>\n atomWithStorage(\n `modalShouldStartDragging.${id ?? \"default\"}`,\n false,\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** size of the modal */\nexport const modalSizeFamily = atomFamily((id: string | null) =>\n atomWithStorage<{ width: number; height: number }>(\n `modalSize.${id ?? \"default\"}`,\n { width: 350, height: 580 },\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** restore size of the modal when maximized or minimized */\nexport const modalRestoreSizeFamily = atomFamily((id: string | null) =>\n atomWithStorage<{ width: number; height: number }>(\n `modalRestoreSize.${id ?? \"default\"}`,\n { width: 350, height: 580 },\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** position of the modal */\nexport const modalPositionFamily = atomFamily((id: string | null) =>\n atomWithStorage<{ x: number; y: number }>(\n `modalPosition.${id ?? \"default\"}`,\n {\n x:\n typeof window !== \"undefined\"\n ? Math.max(0, (window.innerWidth - 350) / 2)\n : 0,\n y:\n typeof window !== \"undefined\"\n ? Math.max(0, (window.innerHeight - 580) / 2)\n : 0,\n },\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** restore position of the modal when maximized or minimized */\nexport const modalRestorePositionFamily = atomFamily((id: string | null) =>\n atomWithStorage<{ x: number; y: number }>(\n `modalRestorePosition.${id ?? \"default\"}`,\n {\n x:\n typeof window !== \"undefined\"\n ? Math.max(0, (window.innerWidth - 350) / 2)\n : 0,\n y:\n typeof window !== \"undefined\"\n ? Math.max(0, (window.innerHeight - 580) / 2)\n : 0,\n },\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\nexport const modalMinimizedFamily = atomFamily((id: string | null) =>\n atomWithStorage<boolean>(\n `modalMinimized.${id ?? \"default\"}`,\n false,\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\nexport const modalMinWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage<number>(`modalMinWidth.${id ?? \"default\"}`, 200, undefined, {\n getOnInit: true,\n }),\n);\n\nexport const modalMaxWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage<number>(\n `modalMaxWidth.${id ?? \"default\"}`,\n typeof window !== \"undefined\" ? window.innerWidth - 40 : 0,\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\nexport const lastDraggableTypeFamily = atomFamily((id: string | null) =>\n atomWithStorage<\"left\" | \"right\" | \"modal\">(\n `lastPanelType.${id ?? \"default\"}`,\n \"modal\",\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\nexport const panelOrdersAtom = atomWithStorage<{\n // left panel open timestamps, latest opened on the left\n left: { [id: string]: number };\n // right panel open timestamps, latest opened on the right\n right: { [id: string]: number };\n}>(\n \"panelOrders\",\n {\n left: {},\n right: {},\n },\n undefined,\n {\n getOnInit: true,\n },\n);\n","\"use client\";\n\nimport { useCallback, useMemo } from \"react\";\nimport { useAtom, useAtomValue, useSetAtom } from \"@liberfi.io/ui\";\nimport {\n lastDraggableTypeFamily,\n modalMinimizedFamily,\n modalOpenFamily,\n modalPositionFamily,\n modalRestorePositionFamily,\n modalRestoreSizeFamily,\n modalShouldStartDraggingFamily,\n modalSizeFamily,\n} from \"./states\";\n\nexport type OpenDraggableModalOptions = {\n /** should start dragging automatically when the modal is opened */\n shouldStartDragging?: boolean;\n /** adjust position of the modal when it is opened */\n position?: { x?: number; y?: number };\n /** adjust size of the modal when it is opened */\n size?: { width?: number; height?: number };\n};\n\nexport type UseDraggableModalDisclosureReturnType = {\n isOpen: boolean;\n onOpen: (options?: OpenDraggableModalOptions) => void;\n onClose: () => void;\n};\n\nexport function useDraggableModalDisclosure(\n id: string,\n): UseDraggableModalDisclosureReturnType {\n const [isOpen, setIsOpen] = useAtom(modalOpenFamily(id));\n const [isMinimized, setIsMinimized] = useAtom(modalMinimizedFamily(id));\n const restoreSize = useAtomValue(modalRestoreSizeFamily(id));\n const restorePosition = useAtomValue(modalRestorePositionFamily(id));\n const setSize = useSetAtom(modalSizeFamily(id));\n const setPosition = useSetAtom(modalPositionFamily(id));\n const setShouldStartDragging = useSetAtom(modalShouldStartDraggingFamily(id));\n const setLastDraggableType = useSetAtom(lastDraggableTypeFamily(id));\n\n const onOpen = useCallback(\n (options: OpenDraggableModalOptions = {}) => {\n const { shouldStartDragging, position, size } = options;\n if (position) setPosition((prev) => ({ ...prev, ...position }));\n if (size) setSize((prev) => ({ ...prev, ...size }));\n setShouldStartDragging(shouldStartDragging ?? false);\n setIsOpen(true);\n setLastDraggableType(\"modal\");\n },\n [setIsOpen, setPosition, setSize, setShouldStartDragging],\n );\n\n const onClose = useCallback(() => {\n setIsOpen(false);\n // restore the modal if it is minimized when closing\n if (isMinimized) {\n setSize({ ...restoreSize });\n setPosition({ ...restorePosition });\n setIsMinimized(false);\n }\n }, [\n isMinimized,\n restoreSize,\n restorePosition,\n setIsMinimized,\n setIsOpen,\n setSize,\n setPosition,\n ]);\n\n return useMemo(\n () => ({\n isOpen,\n onOpen,\n onClose,\n }),\n [isOpen, onOpen, onClose],\n );\n}\n","\"use client\";\n\nimport { useCallback, useMemo } from \"react\";\nimport { useAtom, useSetAtom } from \"@liberfi.io/ui\";\nimport {\n lastDraggableTypeFamily,\n panelOrdersAtom,\n panelStateFamily,\n panelWidthFamily,\n} from \"./states\";\n\nexport type OpenDraggablePanelOptions = {\n /** which side the panel is docked on */\n position?: \"left\" | \"right\";\n /** adjust size of the modal when it is opened */\n width?: number;\n};\n\nexport type UseDraggablePanelDisclosureReturnType = {\n isOpen: boolean;\n position?: \"left\" | \"right\";\n onOpen: (options?: OpenDraggablePanelOptions) => void;\n onClose: () => void;\n};\n\nexport function useDraggablePanelDisclosure(\n id: string,\n): UseDraggablePanelDisclosureReturnType {\n const [panelState, setPanelState] = useAtom(panelStateFamily(id));\n const setPanelWidth = useSetAtom(panelWidthFamily(id));\n const setLastDraggableType = useSetAtom(lastDraggableTypeFamily(id));\n const setPanelOrders = useSetAtom(panelOrdersAtom);\n\n const onOpen = useCallback(\n (options: OpenDraggablePanelOptions = {}) => {\n const position = options.position ?? \"left\";\n setPanelWidth(options.width ?? 320);\n setPanelState(position);\n setLastDraggableType(position);\n setPanelOrders(({ left, right }) => {\n if (position === \"left\") {\n return { left: { ...left, [id]: Date.now() }, right };\n } else {\n return { left, right: { ...right, [id]: Date.now() } };\n }\n });\n },\n [id, setPanelState, setPanelWidth],\n );\n\n const onClose = useCallback(() => {\n setPanelState(\"none\");\n }, [setPanelState]);\n\n const isOpen = useMemo(() => panelState !== \"none\", [panelState]);\n\n const position = useMemo(\n () => (panelState !== \"none\" ? panelState : undefined),\n [panelState],\n );\n\n return useMemo(\n () => ({\n isOpen,\n position,\n onOpen,\n onClose,\n }),\n [isOpen, onOpen, onClose],\n );\n}\n","\"use client\";\n\nimport {\n memo,\n useState,\n useEffect,\n useRef,\n PropsWithChildren,\n useMemo,\n useCallback,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useCallbackRef, useValueRef } from \"@liberfi.io/hooks\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n Button,\n clsx,\n DraggableIcon,\n MaximizeIcon,\n MinimizeIcon,\n RestoreWindowIcon,\n StyledTooltip,\n UnMaximizeIcon,\n useAtom,\n useAtomValue,\n XCloseIcon,\n} from \"@liberfi.io/ui\";\nimport { throttle } from \"@liberfi.io/utils\";\nimport {\n modalMinimizedFamily,\n modalPositionFamily,\n modalRestorePositionFamily,\n modalRestoreSizeFamily,\n modalShouldStartDraggingFamily,\n modalSizeFamily,\n panelMaxWidthFamily,\n panelMinWidthFamily,\n} from \"./states\";\nimport { useDraggableModalDisclosure } from \"./useDraggableModalDisclosure\";\nimport { useDraggablePanelDisclosure } from \"./useDraggablePanelDisclosure\";\n\nconst MINIMIZED_SIZE = {\n width: 200,\n height: 48,\n};\n\nconst MAXIMIZED_SIZE = {\n width: typeof window !== \"undefined\" ? window.innerWidth - 40 : 0,\n height: typeof window !== \"undefined\" ? window.innerHeight - 40 : 0,\n};\n\nconst MAXIMIZED_POSITION = {\n x: 20,\n y: 20,\n};\n\ntype ResizeDirection =\n | \"topLeft\"\n | \"topRight\"\n | \"bottomLeft\"\n | \"bottomRight\"\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\";\n\nexport type DraggableModalProps = PropsWithChildren<{\n /** unique identifier for the modal, must be the same with the panel */\n id: string;\n /** title of the modal */\n title?: React.ReactNode;\n /** constraints for the minimum width */\n minWidth?: number;\n /** constraints for the maximum width */\n maxWidth?: number;\n /** constraints for the minimum height */\n minHeight?: number;\n /** constraints for the maximum height */\n maxHeight?: number;\n /** left sidebar of the modal */\n leftSidebar?: React.ReactNode;\n /** width of the left sidebar */\n leftSidebarWidth?: number;\n /** right sidebar of the modal */\n rightSidebar?: React.ReactNode;\n /** width of the right sidebar */\n rightSidebarWidth?: number;\n /** constraints for the aspect ratio when resizing */\n aspectRatio?: number;\n /** whether to show the header */\n showHeader?: boolean;\n /** custom header content */\n header?: React.ReactNode;\n /** height of the modal header */\n headerHeight?: number;\n}>;\n\nexport const DraggableModal = memo(function DraggablePopup({\n id,\n title,\n minWidth = 504,\n maxWidth = MAXIMIZED_SIZE.width,\n minHeight = 200,\n maxHeight = MAXIMIZED_SIZE.height,\n leftSidebar,\n leftSidebarWidth = 200,\n rightSidebar,\n rightSidebarWidth = 200,\n aspectRatio,\n showHeader = true,\n header,\n headerHeight = 44,\n children,\n}: DraggableModalProps) {\n const { t } = useTranslation();\n\n // control the open state of the modal\n const { isOpen, onClose } = useDraggableModalDisclosure(id);\n\n // control the open state of the panel\n const { onOpen: onOpenPanel } = useDraggablePanelDisclosure(id);\n\n // whether the modal is minimized\n const [isMinimized, setIsMinimized] = useAtom(modalMinimizedFamily(id));\n\n // latest position\n const [position, setPosition] = useAtom(modalPositionFamily(id));\n\n // latest modal size\n const [size, setSize] = useAtom(modalSizeFamily(id));\n\n // restore size when maximized or minimized\n const [restoreSize, setRestoreSize] = useAtom(modalRestoreSizeFamily(id));\n\n // restore position when maximized or minimized\n const [restorePosition, setRestorePosition] = useAtom(\n modalRestorePositionFamily(id),\n );\n\n // start dragging automatically when the component is mounted\n const [shouldStartDragging, setShouldStartDragging] = useAtom(\n modalShouldStartDraggingFamily(id),\n );\n\n // whether the modal is being dragged\n const [isDragging, setIsDragging] = useState(shouldStartDragging);\n\n // whether the modal is being resized\n const [isResizing, setIsResizing] = useState(false);\n\n // direction of the resize\n const [resizeDirection, setResizeDirection] =\n useState<ResizeDirection | null>(null);\n\n // which edge is the modal near\n const [currentEdge, setCurrentEdge] = useState<\"left\" | \"right\" | null>(null);\n\n // which edge to display docking animation\n const [dockAnimationEdge, setDockAnimationEdge] = useState<\n \"left\" | \"right\" | null\n >(null);\n\n // which edge is waiting for the timeout to dock on\n const [dockToEdge, setDockToEdge] = useState<\"left\" | \"right\" | null>(null);\n\n // timeout for docking to the edge\n const dockToEdgeTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const panelMinWidth = useAtomValue(panelMinWidthFamily(id));\n\n const panelMaxWidth = useAtomValue(panelMaxWidthFamily(id));\n\n // refs for props & states to avoid re-rendering\n const positionRef = useValueRef(position);\n const setPositionRef = useCallbackRef(setPosition);\n const sizeRef = useValueRef(size);\n const setSizeRef = useCallbackRef(setSize);\n const leftSidebarWidthRef = useValueRef(leftSidebarWidth);\n const hasLeftSidebarRef = useValueRef(!!leftSidebar);\n const rightSidebarWidthRef = useValueRef(rightSidebarWidth);\n const hasRightSidebarRef = useValueRef(!!rightSidebar);\n const aspectRatioRef = useValueRef(aspectRatio);\n const headerHeightRef = useValueRef(headerHeight);\n const minWidthRef = useValueRef(minWidth);\n const maxWidthRef = useValueRef(maxWidth);\n const minHeightRef = useValueRef(minHeight);\n const maxHeightRef = useValueRef(maxHeight);\n const isDraggingRef = useValueRef(isDragging);\n const currentEdgeRef = useValueRef(currentEdge);\n const dockToEdgeRef = useValueRef(dockToEdge);\n const onCloseRef = useCallbackRef(onClose);\n const onOpenPanelRef = useCallbackRef(onOpenPanel);\n const panelMinWidthRef = useValueRef(panelMinWidth);\n const panelMaxWidthRef = useValueRef(panelMaxWidth);\n\n // whether the modal is maximized\n const isMaximized = useMemo(\n () =>\n size.width === MAXIMIZED_SIZE.width &&\n size.height === MAXIMIZED_SIZE.height,\n [size.width, size.height],\n );\n\n // adjust position to the boundary when the component is mounted\n useEffect(() => {\n if (position.x < 0 || position.y < 0) {\n setPositionRef({\n x: Math.max(0, position.x),\n y: Math.max(0, position.y),\n });\n }\n const right = position.x + size.width;\n const bottom = position.y + size.height;\n if (right > window.innerWidth || bottom > window.innerHeight) {\n setPositionRef({\n x: Math.min(position.x, Math.max(0, window.innerWidth - size.width)),\n y: Math.min(position.y, Math.max(0, window.innerHeight - size.height)),\n });\n }\n }, [id]);\n\n // start dragging automatically when the component is mounted, just follow the mouse movement\n useEffect(() => {\n if (isOpen && shouldStartDragging) {\n setIsDragging(true);\n\n const handleMouseMove = (e: MouseEvent) => {\n setPositionRef({\n x: e.clientX - size.width / 2,\n y: e.clientY - 20,\n });\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n // finish start dragging\n setShouldStartDragging(false);\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.body.style.cursor = \"grabbing\";\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.body.style.cursor = \"\";\n };\n }\n }, [isOpen, shouldStartDragging, setShouldStartDragging, size.width]);\n\n const startInteraction = (\n e: React.MouseEvent,\n interactionType: \"drag\" | \"resize\",\n direction?: ResizeDirection,\n ) => {\n // user interaction starts, stop auto-dragging which is triggered when the component is mounted\n setShouldStartDragging(false);\n\n // reset states\n setIsDragging(false);\n setIsResizing(false);\n setResizeDirection(null);\n\n // set states according to interaction type\n if (interactionType === \"drag\") {\n setIsDragging(true);\n } else if (interactionType === \"resize\") {\n setResizeDirection(direction || null);\n setIsResizing(true);\n }\n\n // save start position and size in closure\n const startX = e.clientX;\n const startY = e.clientY;\n const startWidth = sizeRef.current.width;\n const startHeight = sizeRef.current.height;\n const startPosition = { ...positionRef.current };\n\n const cleanup = () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.body.style.cursor = \"\";\n\n setIsDragging(false);\n setIsResizing(false);\n setResizeDirection(null);\n setCurrentEdge(null);\n\n if (dockToEdgeTimeoutRef.current) {\n clearTimeout(dockToEdgeTimeoutRef.current);\n dockToEdgeTimeoutRef.current = null;\n }\n setDockToEdge(null);\n setDockAnimationEdge(null);\n };\n\n const handleMouseMove = (e: MouseEvent) => {\n if (interactionType === \"drag\") {\n const deltaX = e.clientX - startX;\n const deltaY = e.clientY - startY;\n let newX = startPosition.x + deltaX;\n let newY = startPosition.y + deltaY;\n\n // calculate boundaries\n const leftOffset = hasLeftSidebarRef.current\n ? leftSidebarWidthRef.current\n : 0;\n const minX = 12 + leftOffset;\n\n const rightOffset = hasRightSidebarRef.current\n ? rightSidebarWidthRef.current\n : 0;\n const maxX = window.innerWidth - 12 - startWidth - rightOffset;\n\n // display 44px for header\n const maxY = window.innerHeight - 12 - 44;\n\n // check if near the edge\n const edge = newX <= minX ? \"left\" : newX >= maxX ? \"right\" : null;\n if (edge !== currentEdgeRef.current) {\n setCurrentEdge(edge);\n }\n\n // if is waiting for the timeout to dock on the edge, display the animation\n if (dockToEdgeTimeoutRef.current && edge) {\n setDockAnimationEdge(edge);\n }\n\n // interrupt the timeout if the modal is moved away from the edge\n if (dockToEdgeTimeoutRef.current) {\n if (\n (dockToEdgeRef.current === \"left\" &&\n (newX > minX || edge !== \"left\")) ||\n (dockToEdgeRef.current === \"right\" &&\n (newX < maxX || edge !== \"right\"))\n ) {\n clearTimeout(dockToEdgeTimeoutRef.current);\n dockToEdgeTimeoutRef.current = null;\n setDockToEdge(null);\n setDockAnimationEdge(null);\n }\n }\n\n // wait for the timeout to dock on the edge\n if (!dockToEdgeTimeoutRef.current && edge) {\n if (dockToEdgeRef.current !== edge) {\n setDockToEdge(edge);\n setDockAnimationEdge(edge);\n dockToEdgeTimeoutRef.current = setTimeout(() => {\n if (isDraggingRef.current && currentEdgeRef.current === edge) {\n // still dragging & near the edge, convert to panel\n cleanup();\n // close modal\n onCloseRef();\n // open panel\n onOpenPanelRef({\n position: edge,\n width: Math.min(\n Math.max(sizeRef.current.width, panelMinWidthRef.current),\n panelMaxWidthRef.current,\n ),\n });\n } else {\n setDockToEdge(null);\n }\n }, 350);\n }\n }\n\n // limit within the boundaries\n newX = Math.min(Math.max(newX, 12 + leftOffset), maxX);\n newY = Math.min(Math.max(newY, 12), maxY);\n setPositionRef({ x: newX, y: newY });\n } else if (interactionType === \"resize\" && direction) {\n const deltaX = e.clientX - startX;\n const deltaY = e.clientY - startY;\n\n // calculate new size (considering aspect ratio)\n const calculateNewSize = (\n width: number,\n height: number,\n constraint: \"width\" | \"height\" | \"both\",\n ) => {\n let newWidth = Math.min(\n Math.max(width, minWidthRef.current),\n maxWidthRef.current,\n );\n let newHeight = Math.min(\n Math.max(height, minHeightRef.current),\n maxHeightRef.current,\n );\n\n if (aspectRatioRef.current) {\n if (constraint === \"width\") {\n newHeight = Math.min(\n Math.max(\n width / aspectRatioRef.current + headerHeightRef.current,\n minHeightRef.current,\n ),\n maxHeightRef.current,\n );\n newWidth =\n (newHeight - headerHeightRef.current) * aspectRatioRef.current;\n } else if (constraint === \"height\") {\n newWidth = Math.min(\n Math.max(\n (height - headerHeightRef.current) * aspectRatioRef.current,\n minWidthRef.current,\n ),\n maxWidthRef.current,\n );\n newHeight =\n newWidth / aspectRatioRef.current + headerHeightRef.current;\n } else {\n const widthBasedHeight =\n width / aspectRatioRef.current + headerHeightRef.current;\n const heightBasedWidth =\n (height - headerHeightRef.current) * aspectRatioRef.current;\n const absDeltaX = Math.abs(deltaX);\n const absDeltaY = Math.abs(deltaY);\n\n if (absDeltaX > 1.1 * absDeltaY) {\n newHeight = Math.min(\n Math.max(widthBasedHeight, minHeightRef.current),\n maxHeightRef.current,\n );\n newWidth =\n (newHeight - headerHeightRef.current) *\n aspectRatioRef.current;\n } else if (absDeltaY > 1.1 * absDeltaX) {\n newWidth = Math.min(\n Math.max(heightBasedWidth, minWidthRef.current),\n maxWidthRef.current,\n );\n newHeight =\n newWidth / aspectRatioRef.current + headerHeightRef.current;\n } else {\n const avgHeight = (newHeight + widthBasedHeight) / 2;\n newWidth = Math.min(\n Math.max(\n (newWidth + heightBasedWidth) / 2,\n minWidthRef.current,\n ),\n maxWidthRef.current,\n );\n newHeight = Math.min(\n Math.max(avgHeight, minHeightRef.current),\n maxHeightRef.current,\n );\n newWidth =\n (newHeight - headerHeightRef.current) *\n aspectRatioRef.current;\n }\n }\n\n newWidth = Math.min(\n Math.max(newWidth, minWidthRef.current),\n maxWidthRef.current,\n );\n newHeight = Math.min(\n Math.max(newHeight, minHeightRef.current),\n maxHeightRef.current,\n );\n }\n\n return { width: newWidth, height: newHeight };\n };\n\n // handle the resize direction\n switch (direction) {\n case \"topLeft\": {\n const newSize = calculateNewSize(\n startWidth - deltaX,\n startHeight - deltaY,\n \"both\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x + (startWidth - newSize.width),\n y: startPosition.y + (startHeight - newSize.height),\n });\n break;\n }\n case \"topRight\": {\n const newSize = calculateNewSize(\n startWidth + deltaX,\n startHeight - deltaY,\n \"both\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x,\n y: startPosition.y + (startHeight - newSize.height),\n });\n break;\n }\n case \"bottomLeft\": {\n const newSize = calculateNewSize(\n startWidth - deltaX,\n startHeight + deltaY,\n \"both\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x + (startWidth - newSize.width),\n y: startPosition.y,\n });\n break;\n }\n case \"bottomRight\": {\n setSizeRef(\n calculateNewSize(\n startWidth + deltaX,\n startHeight + deltaY,\n \"both\",\n ),\n );\n break;\n }\n case \"top\": {\n const newSize = calculateNewSize(\n startWidth,\n startHeight - deltaY,\n \"height\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x,\n y: startPosition.y + (startHeight - newSize.height),\n });\n break;\n }\n case \"bottom\": {\n setSizeRef(\n calculateNewSize(startWidth, startHeight + deltaY, \"height\"),\n );\n break;\n }\n case \"left\": {\n const newSize = calculateNewSize(\n startWidth - deltaX,\n startHeight,\n \"width\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x + (startWidth - newSize.width),\n y: startPosition.y,\n });\n break;\n }\n case \"right\": {\n setSizeRef(\n calculateNewSize(startWidth + deltaX, startHeight, \"width\"),\n );\n break;\n }\n }\n }\n };\n\n const handleMouseUp = () => {\n // limit the position within the boundaries\n if (position.x < 0 || position.y < 0) {\n setPositionRef({\n x: Math.max(0, position.x),\n y: Math.max(0, position.y),\n });\n }\n cleanup();\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n };\n\n const handleMinimize = useCallback(() => {\n if (isMinimized) {\n // already minimized, restore to the previous size and position\n setSizeRef({ ...restoreSize });\n setPositionRef({ ...restorePosition });\n setIsMinimized(false);\n } else {\n // minimize\n if (isMaximized) {\n // if minimized from maximized directly, use the size and position which is stored before maximized\n setPositionRef({ ...restorePosition });\n } else {\n // otherwise store the current size and position\n setRestoreSize({ ...size });\n setRestorePosition({ ...position });\n }\n setSizeRef({ ...MINIMIZED_SIZE });\n setIsMinimized(true);\n }\n }, [\n isMinimized,\n isMaximized,\n size,\n position,\n restoreSize,\n restorePosition,\n setIsMinimized,\n setRestoreSize,\n setRestorePosition,\n ]);\n\n const handleMaximize = useCallback(() => {\n if (isMaximized) {\n // already maximized, restore to the previous size and position\n setSizeRef({ ...restoreSize });\n setPositionRef({ ...restorePosition });\n } else {\n // maximize\n if (isMinimized) {\n // if maximized from minimized directly, use the stored size and position before minimized\n setIsMinimized(false);\n } else {\n // otherwise store the current size and position\n setRestoreSize({ ...size });\n setRestorePosition({ ...position });\n }\n setSizeRef({ ...MAXIMIZED_SIZE });\n setPositionRef({ ...MAXIMIZED_POSITION });\n }\n }, [\n isMaximized,\n isMinimized,\n size,\n position,\n restoreSize,\n restorePosition,\n setIsMinimized,\n setRestoreSize,\n setRestorePosition,\n ]);\n\n // adjust position to the boundary when the window is resized\n useEffect(() => {\n const handleResize = throttle(() => {\n if (positionRef.current.x < 0 || positionRef.current.y < 0) {\n setPositionRef({\n x: Math.max(0, positionRef.current.x),\n y: Math.max(0, positionRef.current.y),\n });\n }\n const right = positionRef.current.x + sizeRef.current.width;\n const bottom = positionRef.current.y + sizeRef.current.height;\n if (right > window.innerWidth || bottom > window.innerHeight) {\n setPositionRef({\n x: Math.min(\n positionRef.current.x,\n Math.max(0, window.innerWidth - sizeRef.current.width),\n ),\n y: Math.min(\n positionRef.current.y,\n Math.max(0, window.innerHeight - sizeRef.current.height),\n ),\n });\n }\n }, 100);\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <>\n {/* Overlay when dragging or resizing */}\n {(isDragging || isResizing) &&\n createPortal(\n <div\n className={clsx(\n \"max-sm:hidden fixed inset-0 z-9999 bg-transparent w-full h-full select-none\",\n isDragging && (dockToEdge ? \"cursor-grabbing\" : \"cursor-move\"),\n !isDragging && {\n \"cursor-ns-resize\":\n resizeDirection === \"top\" || resizeDirection === \"bottom\",\n \"cursor-ew-resize\":\n resizeDirection === \"left\" || resizeDirection === \"right\",\n \"cursor-nwse-resize\":\n resizeDirection === \"topLeft\" ||\n resizeDirection === \"bottomRight\",\n \"cursor-nesw-resize\":\n resizeDirection === \"topRight\" ||\n resizeDirection === \"bottomLeft\",\n \"cursor-auto\": resizeDirection === null,\n },\n )}\n />,\n document.body,\n )}\n\n {/* Modal container */}\n <div\n className={clsx(\n \"max-sm:hidden fixed z-50 left-0 top-0\",\n isDragging ? \"will-change-transform\" : \"will-change-auto\",\n isResizing || isDragging\n ? \"transition-none\"\n : \"transition-transform duration-250 ease-[cubic-bezier(0.16,1,0.3,1)]\",\n )}\n style={{\n transform: `translate(${Math.round(position.x - (leftSidebar ? leftSidebarWidth : 0))}px, ${Math.round(position.y)}px)`,\n }}\n >\n <div className=\"flex relative z-50\">\n {leftSidebar && (\n <div\n className={clsx(\n \"relative mt-1 z-10 transition-all duration-250 ease-[cubic-bezier(0.16,1,0.3,1)]\",\n isDragging\n ? \"opacity-40 translate-x-4\"\n : \"opacity-100 translate-x-0\",\n )}\n style={{\n width: leftSidebarWidth,\n height: isMinimized ? 40 : size.height - 8,\n }}\n >\n {leftSidebar}\n </div>\n )}\n\n {/* modal content */}\n <div\n className={clsx(\n \"z-50 relative bg-content1 border border-border rounded-lg overflow-hidden\",\n isDragging\n ? \"opacity-80 shadow-md scale-102 blur-[0.5px]\"\n : \"opacity-100 shadow-lg scale-100 blur-none\",\n )}\n style={{\n width: size.width,\n height: size.height,\n transition:\n isResizing || isDragging\n ? \"none\"\n : \"transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s cubic-bezier(0.33, 1, 0.68, 1), height 0.25s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s cubic-bezier(0.33, 1, 0.68, 1)\",\n contain: \"content\",\n }}\n >\n <div\n className={clsx(\n \"w-full h-full\",\n dockAnimationEdge && \"animate-modal-shrink\",\n dockAnimationEdge === \"left\" ? \"origin-left\" : \"origin-right\",\n )}\n style={{ contain: \"paint\" }}\n >\n {/* resize handles */}\n {!isMinimized && (\n <>\n <div\n className=\"absolute top-0 left-0 w-3 h-3 cursor-nw-resize z-20\"\n onMouseDown={(e) =>\n startInteraction(e, \"resize\", \"topLeft\")\n }\n />\n <div\n className=\"absolute top-0 right-0 w-3 h-3 cursor-ne-resize z-20\"\n onMouseDown={(e) =>\n startInteraction(e, \"resize\", \"topRight\")\n }\n />\n <div\n className=\"absolute bottom-0 left-0 w-3 h-3 cursor-sw-resize z-20\"\n onMouseDown={(e) =>\n startInteraction(e, \"resize\", \"bottomLeft\")\n }\n />\n <div\n className=\"absolute bottom-0 right-0 w-3 h-3 cursor-se-resize z-20\"\n onMouseDown={(e) =>\n startInteraction(e, \"resize\", \"bottomRight\")\n }\n />\n <div\n className=\"absolute top-0 left-3 right-3 h-1.5 cursor-n-resize z-20\"\n onMouseDown={(e) => startInteraction(e, \"resize\", \"top\")}\n />\n <div\n className=\"absolute bottom-0 left-3 right-3 h-1.5 cursor-s-resize z-20\"\n onMouseDown={(e) => startInteraction(e, \"resize\", \"bottom\")}\n />\n <div\n className=\"absolute left-0 top-3 bottom-3 w-1.5 cursor-w-resize z-20\"\n onMouseDown={(e) => startInteraction(e, \"resize\", \"left\")}\n />\n <div\n className=\"absolute right-0 top-3 bottom-3 w-1.5 cursor-e-resize z-20\"\n onMouseDown={(e) => startInteraction(e, \"resize\", \"right\")}\n />\n </>\n )}\n\n {/* header */}\n {showHeader && (\n <div\n className=\"relative border-b border-border/80 px-3 gap-4 flex items-center justify-between cursor-move select-none\"\n onMouseDown={(e) => startInteraction(e, \"drag\")}\n style={{ height: headerHeight }}\n >\n {/* drag tooltip */}\n <StyledTooltip\n placement=\"top\"\n closeDelay={0}\n content={t(\"scaffold.draggableModal.snapToEdge\")}\n >\n <DraggableIcon className=\"text-neutral absolute left-1/2 -translate-x-1/2 top-0\" />\n </StyledTooltip>\n\n {header || (\n <>\n <div\n className=\"min-w-0 flex-initial text-sm font-medium truncate cursor-auto\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n {title}\n </div>\n <div\n className=\"flex-none flex items-center justify-end gap-1\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n {/* minimize button */}\n <Button\n size=\"sm\"\n variant=\"light\"\n radius=\"lg\"\n isIconOnly\n onPress={handleMinimize}\n >\n {isMinimized ? (\n <RestoreWindowIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n ) : (\n <MinimizeIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n )}\n </Button>\n {/* maximize button */}\n <Button\n size=\"sm\"\n variant=\"light\"\n radius=\"lg\"\n isIconOnly\n onPress={handleMaximize}\n >\n {isMaximized ? (\n <UnMaximizeIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n ) : (\n <MaximizeIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n )}\n </Button>\n {/* close button */}\n <Button\n size=\"sm\"\n variant=\"light\"\n radius=\"lg\"\n isIconOnly\n onPress={onClose}\n >\n <XCloseIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n </Button>\n </div>\n </>\n )}\n </div>\n )}\n\n {/* content */}\n {!isMinimized && (\n <div\n className={\n showHeader\n ? \"h-[calc(100%-44px)] overflow-x-hidden overflow-y-auto\"\n : \"h-full overflow-x-hidden overflow-y-auto cursor-move\"\n }\n onMouseDown={\n showHeader ? undefined : (e) => startInteraction(e, \"drag\")\n }\n >\n {children}\n </div>\n )}\n </div>\n </div>\n\n {rightSidebar && (\n <div\n className={clsx(\n \"relative mt-1 z-10 transition-all duration-250 ease-[cubic-bezier(0.16,1,0.3,1)]\",\n isDragging\n ? \"opacity-40 -translate-x-4\"\n : \"opacity-100 translate-x-0\",\n )}\n style={{\n width: rightSidebarWidth,\n height: isMinimized ? 40 : size.height - 8,\n }}\n >\n {rightSidebar}\n </div>\n )}\n </div>\n </div>\n </>\n );\n});\n","\"use client\";\n\nimport { useState, PropsWithChildren } from \"react\";\nimport { useCallbackRef, useValueRef } from \"@liberfi.io/hooks\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n Button,\n clsx,\n DraggableIcon,\n StyledTooltip,\n useAtom,\n useAtomValue,\n XCloseIcon,\n} from \"@liberfi.io/ui\";\nimport {\n modalMaxWidthFamily,\n modalMinWidthFamily,\n panelStateFamily,\n panelWidthFamily,\n} from \"./states\";\nimport { useDraggableModalDisclosure } from \"./useDraggableModalDisclosure\";\nimport { useDraggablePanelDisclosure } from \"./useDraggablePanelDisclosure\";\n\nexport type DraggablePanelProps = PropsWithChildren<{\n /** unique id for the panel, must be the same with the modal */\n id: string;\n /** title of the modal */\n title?: React.ReactNode;\n /** maximum width of the panel */\n maxWidth?: number;\n /** minimum width of the panel */\n minWidth?: number;\n /** which side the panel is docked on */\n position: \"left\" | \"right\";\n /** whether to show the header */\n showHeader?: boolean;\n /** custom header content */\n header?: React.ReactNode;\n /** height of the modal header */\n headerHeight?: number;\n}>;\n\nexport function DraggablePanel({\n id,\n title,\n maxWidth = 440,\n minWidth = 320,\n position,\n showHeader = true,\n header,\n headerHeight = 44,\n children,\n}: DraggablePanelProps) {\n const { t } = useTranslation();\n\n // whether the panel is docked or not\n const panelState = useAtomValue(panelStateFamily(id));\n\n // whether the panel is being resized or not\n const [isResizing, setIsResizing] = useState(false);\n\n // whether the panel is being dragged or not\n const [isDragging, setIsDragging] = useState(false);\n\n // panel width\n const [width, setWidth] = useAtom(panelWidthFamily(id));\n\n // converting to modal\n const { onOpen: openModal } = useDraggableModalDisclosure(id);\n\n // control the close state of the panel\n const { onClose: closePanel } = useDraggablePanelDisclosure(id);\n\n const modalMinWidth = useAtomValue(modalMinWidthFamily(id));\n\n const modalMaxWidth = useAtomValue(modalMaxWidthFamily(id));\n\n // refs for props & states to avoid re-rendering\n const widthRef = useValueRef(width);\n const maxWidthRef = useValueRef(maxWidth);\n const minWidthRef = useValueRef(minWidth);\n const positionRef = useValueRef(position);\n const isResizingRef = useValueRef(isResizing);\n const isDraggingRef = useValueRef(isDragging);\n const setWidthRef = useCallbackRef(setWidth);\n const openModalRef = useCallbackRef(openModal);\n const closePanelRef = useCallbackRef(closePanel);\n const modalMinWidthRef = useValueRef(modalMinWidth);\n const modalMaxWidthRef = useValueRef(modalMaxWidth);\n\n const handleResizeStart = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsResizing(true);\n document.body.style.cursor = \"ew-resize\";\n document.body.style.userSelect = \"none\";\n document.body.style.overflow = \"hidden\";\n document.body.style.position = \"fixed\";\n document.body.style.width = \"100%\";\n document.body.style.height = \"100%\";\n\n // save start size & position in closure\n const startX = e.clientX;\n const startWidth = widthRef.current;\n\n const onResize = (e: MouseEvent) => {\n if (!isResizingRef.current) return;\n\n const deltaX = e.clientX - startX;\n\n const distance =\n positionRef.current === \"right\"\n ? startWidth - deltaX\n : startWidth + deltaX;\n\n const width = Math.min(\n Math.max(distance, minWidthRef.current),\n maxWidthRef.current,\n );\n setWidthRef(width);\n };\n\n const onResizeEnd = () => {\n setIsResizing(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n document.body.style.overflow = \"\";\n document.body.style.position = \"\";\n document.body.style.width = \"\";\n document.body.style.height = \"\";\n document.removeEventListener(\"mousemove\", onResize);\n document.removeEventListener(\"mouseup\", onResizeEnd);\n };\n\n document.addEventListener(\"mousemove\", onResize);\n document.addEventListener(\"mouseup\", onResizeEnd);\n };\n\n const handleDragStart = (e: React.MouseEvent) => {\n // if the target is a button, don't trigger drag\n if (e.target instanceof HTMLElement && e.target.closest(\"button\")) {\n return;\n }\n e.preventDefault();\n\n setIsDragging(true);\n\n // save start position in closure\n const startX = e.clientX;\n const startY = e.clientY;\n\n const cleanup = () => {\n document.removeEventListener(\"mousemove\", onDragMove);\n document.removeEventListener(\"mouseup\", onDragEnd);\n setIsDragging(false);\n };\n\n const onDragMove = (e: MouseEvent) => {\n if (!isDraggingRef.current) return;\n\n const deltaX = Math.abs(e.clientX - startX);\n const deltaY = Math.abs(e.clientY - startY);\n\n // if the drag distance is greater than 10px, convert to modal\n if (deltaX > 10 || deltaY > 10) {\n cleanup();\n // close the panel\n closePanelRef();\n // open the modal\n openModalRef({\n // modal should follow the cursor\n shouldStartDragging: true,\n position: {\n x: e.clientX - widthRef.current / 2 + 20,\n y: e.clientY - 20,\n },\n // adjust modal's width to the panel's width\n size: {\n width: Math.min(\n Math.max(widthRef.current, modalMinWidthRef.current),\n modalMaxWidthRef.current,\n ),\n },\n });\n }\n };\n\n const onDragEnd = () => {\n cleanup();\n };\n\n document.addEventListener(\"mousemove\", onDragMove);\n document.addEventListener(\"mouseup\", onDragEnd);\n };\n\n const handleClose = () => {\n closePanelRef();\n };\n\n if (panelState !== position) {\n return null;\n }\n\n return (\n <div className=\"max-sm:hidden flex-none flex flex-row overflow-hidden\">\n {/* when the panel is on the right, show the resize handle on the left */}\n {position === \"right\" && (\n <ResizeHandle\n isResizing={isResizing}\n handleResizeStart={handleResizeStart}\n />\n )}\n\n {/* panel content container */}\n <div\n className={clsx(\n \"flex flex-col min-h-0 overflow-hidden bg-content1\",\n isDragging\n ? \"opacity-80 scale-98 blur-[1px]\"\n : \"opacity-100 scale-100 blur-none\",\n )}\n style={{\n width: `${width}px`,\n transition:\n isResizing || isDragging\n ? \"none\"\n : \"transform 0.4s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s cubic-bezier(0.33, 1, 0.68, 1), height 0.4s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s cubic-bezier(0.33, 1, 0.68, 1)\",\n contain: \"content\",\n }}\n >\n {/* header */}\n {showHeader && (\n <div\n className=\"flex-none relative border-b border-border/80 px-3 gap-4 flex items-center justify-between cursor-move select-none\"\n onMouseDown={handleDragStart}\n style={{ height: headerHeight }}\n >\n {/* drag tooltip */}\n <StyledTooltip\n placement=\"top\"\n closeDelay={0}\n content={t(\"scaffold.draggablePanel.snapToModal\")}\n >\n <DraggableIcon className=\"text-neutral absolute left-1/2 -translate-x-1/2 top-0\" />\n </StyledTooltip>\n\n {header || (\n <>\n <div\n className=\"min-w-0 flex-initial text-sm font-medium truncate cursor-auto\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n {title}\n </div>\n <div\n className=\"flex-none flex items-center justify-end gap-1\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n {/* close button */}\n <Button\n size=\"sm\"\n variant=\"light\"\n radius=\"lg\"\n isIconOnly\n onPress={handleClose}\n >\n <XCloseIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n </Button>\n </div>\n </>\n )}\n </div>\n )}\n\n <div className=\"flex-auto min-h-0 overflow-y-auto\">{children}</div>\n </div>\n\n {/* when the panel is on the left, show the resize handle on the right */}\n {position === \"left\" && (\n <ResizeHandle\n isResizing={isResizing}\n handleResizeStart={handleResizeStart}\n />\n )}\n </div>\n );\n}\n\ntype ResizeHandleProps = {\n isResizing: boolean;\n handleResizeStart: (e: React.MouseEvent) => void;\n};\n\nfunction ResizeHandle({ isResizing, handleResizeStart }: ResizeHandleProps) {\n return (\n <div className=\"relative\">\n <div className=\"relative w-1 h-full cursor-ew-resize bg-border/80 hover:bg-border transition-colors duration-150 ease-in-out group flex flex-col items-center justify-center gap-1\">\n <i className=\"rounded-full w-0.5 h-0.5 bg-neutral\" />\n <i className=\"rounded-full w-0.5 h-0.5 bg-neutral\" />\n <i className=\"rounded-full w-0.5 h-0.5 bg-neutral\" />\n\n {/* expend click area */}\n <div\n className=\"absolute inset-0 -left-1.5 -right-1.5 cursor-ew-resize\"\n onMouseDown={handleResizeStart}\n />\n </div>\n\n {isResizing && <div className=\"fixed inset-0 z-50 cursor-ew-resize\" />}\n </div>\n );\n}\n","\"use client\";\n\nimport { PropsWithChildren, useEffect, useMemo } from \"react\";\nimport { clsx, getDefaultStore, useAtomValue } from \"@liberfi.io/ui\";\nimport { DraggableModal } from \"./DraggableModal\";\nimport { DraggablePanel } from \"./DraggablePanel\";\nimport {\n modalMaxWidthFamily,\n modalMinWidthFamily,\n panelMaxWidthFamily,\n panelMinWidthFamily,\n panelOrdersAtom,\n panelStateFamily,\n} from \"./states\";\n\nexport type DraggableContentProps = PropsWithChildren<{\n /** unique identifier for both the modal & panel */\n id: string;\n /** title of both the modal & panel */\n title?: React.ReactNode;\n /** whether to show the header for both the modal & panel */\n showHeader?: boolean;\n /** custom header content for both the modal & panel */\n header?: React.ReactNode;\n /** height of the modal header for both the modal & panel */\n headerHeight?: number;\n /** constraints for the minimum width of the modal */\n modalMinWidth?: number;\n /** constraints for the maximum width of the modal */\n modalMaxWidth?: number;\n /** constraints for the minimum width of the panel */\n panelMinWidth?: number;\n /** constraints for the maximum width of the panel */\n panelMaxWidth?: number;\n /** constraints for the minimum height of the modal */\n minHeight?: number;\n /** constraints for the maximum height of the modal */\n maxHeight?: number;\n /** left sidebar of the modal */\n leftSidebar?: React.ReactNode;\n /** width of the left sidebar */\n leftSidebarWidth?: number;\n /** right sidebar of the modal */\n rightSidebar?: React.ReactNode;\n /** width of the right sidebar */\n rightSidebarWidth?: number;\n /** constraints for the aspect ratio when resizing modal */\n aspectRatio?: number;\n}>;\n\nexport type DraggablePanelProviderProps = PropsWithChildren<{\n /** draggable contents */\n contents?: Array<DraggableContentProps>;\n /** root container class name */\n className?: string;\n /** class names slots*/\n classNames?: {\n root?: string;\n left?: string;\n right?: string;\n content?: string;\n };\n}>;\n\nexport function DraggablePanelProvider({\n contents = [],\n className,\n classNames,\n children,\n}: DraggablePanelProviderProps) {\n const panelOrders = useAtomValue(panelOrdersAtom);\n\n // sync panel & order widths\n useEffect(() => {\n const store = getDefaultStore();\n contents.forEach((content) => {\n store.set(panelMinWidthFamily(content.id), content.panelMinWidth ?? 320);\n store.set(panelMaxWidthFamily(content.id), content.panelMaxWidth ?? 440);\n store.set(modalMinWidthFamily(content.id), content.modalMinWidth ?? 504);\n store.set(\n modalMaxWidthFamily(content.id),\n content.modalMaxWidth ?? window.innerWidth - 40,\n );\n });\n }, [contents]);\n\n // latest opened on the left\n const leftOpenPanels = useMemo(\n () =>\n contents\n .filter((content) => {\n const store = getDefaultStore();\n // hasn't been opened on the left\n if (!panelOrders.left[content.id]) return false;\n // whether the panel is opened on the left\n return store.get(panelStateFamily(content.id)) === \"left\";\n })\n .sort((a, b) => panelOrders.left[b.id] - panelOrders.left[a.id]),\n [contents, panelOrders.left],\n );\n\n // latest opened on the right\n const rightOpenPanels = useMemo(\n () =>\n contents\n .filter((content) => {\n const store = getDefaultStore();\n // hasn't been opened on the right\n if (!panelOrders.right[content.id]) return false;\n // whether the panel is opened on the right\n return store.get(panelStateFamily(content.id)) === \"right\";\n })\n .sort(\n (a, b) =>\n (panelOrders.right[a.id] ?? 0) - (panelOrders.right[b.id] ?? 0),\n ),\n [contents, panelOrders.right],\n );\n\n return (\n <>\n <div\n className={clsx(\n \"w-full h-full flex flex-row overflow-hidden\",\n className,\n classNames?.root,\n )}\n >\n {/* left panels */}\n <div\n className={clsx(\"flex-none h-full flex flex-row\", classNames?.left)}\n >\n {leftOpenPanels.map((props) => (\n <DraggablePanel\n key={`left-${props.id}`}\n {...props}\n position=\"left\"\n minWidth={props.panelMinWidth ?? 320}\n maxWidth={props.panelMaxWidth ?? 440}\n />\n ))}\n </div>\n {/* main content */}\n <div className={clsx(\"flex-auto min-w-0 h-full\", classNames?.content)}>\n {children}\n </div>\n {/* right panels */}\n <div\n className={clsx(\"flex-none h-full flex flex-row\", classNames?.right)}\n >\n {rightOpenPanels.map((props) => (\n <DraggablePanel\n key={`right-${props.id}`}\n {...props}\n position=\"right\"\n minWidth={props.panelMinWidth ?? 320}\n maxWidth={props.panelMaxWidth ?? 440}\n />\n ))}\n </div>\n </div>\n {/* modals */}\n {contents.map((props) => (\n <DraggableModal\n key={`modal-${props.id}`}\n {...props}\n minWidth={props.modalMinWidth ?? 504}\n maxWidth={props.modalMaxWidth ?? window.innerWidth - 40}\n />\n ))}\n </>\n );\n}\n","\"use client\";\n\nimport { useCallback, useMemo } from \"react\";\nimport { useAtomValue } from \"@liberfi.io/ui\";\nimport { lastDraggableTypeFamily } from \"./states\";\nimport { useDraggableModalDisclosure } from \"./useDraggableModalDisclosure\";\nimport { useDraggablePanelDisclosure } from \"./useDraggablePanelDisclosure\";\n\nexport type UseDraggableDisclosureReturnType = {\n isOpen: boolean;\n onOpen: () => void;\n onClose: () => void;\n};\n\nexport function useDraggableDisclosure(\n id: string,\n): UseDraggableDisclosureReturnType {\n const {\n isOpen: isModalOpen,\n onOpen: onOpenModal,\n onClose: onCloseModal,\n } = useDraggableModalDisclosure(id);\n\n const {\n isOpen: isPanelOpen,\n onOpen: onOpenPanel,\n onClose: onClosePanel,\n } = useDraggablePanelDisclosure(id);\n\n const lastDraggableType = useAtomValue(lastDraggableTypeFamily(id));\n\n const onOpen = useCallback(() => {\n if (isModalOpen || isPanelOpen) return;\n if (lastDraggableType === \"modal\") {\n onOpenModal();\n } else {\n onOpenPanel({ position: lastDraggableType });\n }\n }, [isModalOpen, isPanelOpen, lastDraggableType, onOpenModal, onOpenPanel]);\n\n const onClose = useCallback(() => {\n if (isModalOpen) {\n onCloseModal();\n } else if (isPanelOpen) {\n onClosePanel();\n }\n }, [isModalOpen, isPanelOpen, onCloseModal, onClosePanel]);\n\n const isOpen = useMemo(\n () => isModalOpen || isPanelOpen,\n [isModalOpen, isPanelOpen],\n );\n\n return useMemo(\n () => ({\n isOpen,\n onOpen,\n onClose,\n }),\n [isOpen, onOpen, onClose],\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type HeaderProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Header({ children, className }: HeaderProps) {\n return (\n <div\n className={clsx(\n \"max-sm:hidden flex-none w-full h-15 px-6 max-lg:px-4 gap-6 max-lg:gap-4 flex justify-between items-center border-b border-border bg-background\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type MobileHeaderProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function MobileHeader({ children, className }: MobileHeaderProps) {\n return (\n <div\n className={clsx(\n \"sm:hidden flex-none w-full h-11 px-2 flex justify-between items-center border-b border-border bg-background\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type FooterProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Footer({ children, className }: FooterProps) {\n return (\n <div\n className={clsx(\n \"sm:hidden flex-none w-full h-14 flex justify-evenly items-center border-t border-border bg-background\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type PageProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Page({ children, className }: PageProps) {\n return (\n <div\n className={clsx(\n \"flex flex-col w-full h-screen max-sm:h-dvh overflow-hidden bg-background\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type PageContentProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function PageContent({ className, children }: PageContentProps) {\n return (\n <div className={clsx(\"flex-auto w-full min-h-0\", className)}>\n {children}\n </div>\n );\n}\n","import { useTranslation } from \"@liberfi.io/i18n\";\nimport { clsx, Link } from \"@liberfi.io/ui\";\n\nexport type LogoProps = {\n /** icon for desktop */\n icon: React.ReactNode;\n /** icon for mobile & desktop */\n miniIcon?: React.ReactNode;\n /** url when clicking the logo image */\n href?: string;\n /** custom styles */\n className?: string;\n};\n\nexport function Logo({ href = \"/\", icon, miniIcon, className }: LogoProps) {\n const { t } = useTranslation();\n return (\n <Link\n href={href}\n className={clsx(\"flex-none flex justify-center items-center\", className)}\n aria-label={t(\"scaffold.home\")}\n >\n <div\n className={clsx(\n \"flex justify-center items-center\",\n !!miniIcon && \"max-xl:hidden\",\n )}\n >\n {icon}\n </div>\n {miniIcon && (\n <div className=\"flex justify-center items-center xl:hidden\">\n {miniIcon}\n </div>\n )}\n </Link>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx, Link } from \"@liberfi.io/ui\";\n\nexport type HeaderNavigationProps = PropsWithChildren<{\n href: string;\n title: string;\n active?: boolean;\n className?: string;\n}>;\n\nexport function HeaderNavigation({\n href,\n title,\n active = false,\n className,\n}: HeaderNavigationProps) {\n return (\n <Link\n data-active={active}\n href={href}\n className={clsx(\n \"h-8 text-sm font-medium px-2 xl:px-3 data-[active=true]:text-primary hover:text-primary text-foreground hover:bg-primary-50 rounded-sm\",\n className,\n )}\n aria-label={title}\n >\n {title}\n </Link>\n );\n}\n","\"use client\";\n\nimport {\n useRef,\n useState,\n useEffect,\n useCallback,\n DependencyList,\n RefObject,\n} from \"react\";\n\nexport interface UseHorizontalScrollOptions {\n /** the amount of pixels to scroll when the user clicks the arrow buttons. */\n scrollAmount: number;\n /** the dependencies to watch for the scroll position and the size of the container. */\n dependencies?: DependencyList;\n}\n\nexport interface UseHorizontalScrollReturn {\n /** should show the left arrow. */\n showLeftArrow: boolean;\n /** should show the right arrow. */\n showRightArrow: boolean;\n /** scroll the container to the left or right. */\n scroll: (direction: \"left\" | \"right\") => void;\n /** the ref to the container element. */\n containerRef: RefObject<HTMLDivElement | null>;\n}\n\nexport function useHorizontalScroll({\n scrollAmount,\n dependencies = [],\n}: UseHorizontalScrollOptions): UseHorizontalScrollReturn {\n /** will return to the caller for binding to the container element. */\n const containerRef = useRef<HTMLDivElement>(null);\n /** should show the left arrow. */\n const [showLeftArrow, setShowLeftArrow] = useState(false);\n /** should show the right arrow. */\n const [showRightArrow, setShowRightArrow] = useState(false);\n\n const checkScrollPosition = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n const { scrollLeft, scrollWidth, clientWidth } = container;\n // not at the leftmost position, show the left arrow.\n setShowLeftArrow(scrollLeft > 0);\n // not at the rightmost position, show the right arrow.\n setShowRightArrow(scrollLeft < scrollWidth - clientWidth - 1);\n }, []);\n\n /** scroll the container to the left or right. */\n const scroll = useCallback(\n (direction: \"left\" | \"right\") => {\n const container = containerRef.current;\n if (!container) return;\n\n const scrollOffset = direction === \"left\" ? -scrollAmount : scrollAmount;\n container.scrollBy({\n left: scrollOffset,\n behavior: \"smooth\",\n });\n },\n [scrollAmount],\n );\n\n /** observe the scroll position and the size of the container. */\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n checkScrollPosition();\n container.addEventListener(\"scroll\", checkScrollPosition);\n\n const resizeObserver = new ResizeObserver(checkScrollPosition);\n resizeObserver.observe(container);\n\n return () => {\n container.removeEventListener(\"scroll\", checkScrollPosition);\n resizeObserver.disconnect();\n };\n }, [checkScrollPosition, ...dependencies]);\n\n return {\n showLeftArrow,\n showRightArrow,\n scroll,\n containerRef,\n };\n}\n","\"use client\";\n\nimport { PropsWithChildren, useCallback, useState } from \"react\";\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n clsx,\n StyledButton,\n} from \"@liberfi.io/ui\";\nimport { useHorizontalScroll } from \"./useHorizontalScroll\";\n\nexport type HorizontalScrollContainerProps = PropsWithChildren<{\n /** the amount of pixels to scroll when the user clicks the arrow buttons. */\n scrollAmount?: number;\n /** custom styles */\n className?: string;\n classNames?: {\n root?: string;\n content?: string;\n leftArrow?: string;\n leftArrowButton?: string;\n leftArrowIcon?: string;\n rightArrow?: string;\n rightArrowButton?: string;\n rightArrowIcon?: string;\n };\n}>;\n\nexport function HorizontalScrollContainer({\n scrollAmount = 150,\n className,\n classNames,\n children,\n}: HorizontalScrollContainerProps) {\n /** the horizontal scroll calculations. */\n const { showLeftArrow, showRightArrow, scroll, containerRef } =\n useHorizontalScroll({\n scrollAmount: scrollAmount,\n dependencies: [children],\n });\n\n /** hover state to show/hide the arrows. */\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const handleScrollLeft = useCallback(() => {\n scroll(\"left\");\n }, [scroll]);\n\n const handleScrollRight = useCallback(() => {\n scroll(\"right\");\n }, [scroll]);\n\n return (\n <div\n className={clsx(\"relative flex\", className, classNames?.root)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* left arrow & gradient mask */}\n {showLeftArrow && (\n <div\n className={clsx(\n \"absolute left-0 top-0 w-8 h-full z-40 bg-gradient-to-r from-background/60 to-transparent flex items-center pointer-events-none\",\n classNames?.leftArrow,\n )}\n >\n <StyledButton\n onPress={handleScrollLeft}\n isIconOnly\n disableRipple\n disableAnimation\n className={clsx(\n \"absolute left-0 w-6 h-6 bg-transparent flex items-center justify-center text-foreground/40 hover:text-foreground transition-all duration-125 ease-in-out opacity-0\",\n isHovered && \"opacity-100 pointer-events-auto\",\n classNames?.leftArrowButton,\n )}\n >\n <ChevronLeftIcon\n width={18}\n height={18}\n className={classNames?.leftArrowIcon}\n />\n </StyledButton>\n </div>\n )}\n\n {/* right arrow & gradient mask */}\n {showRightArrow && (\n <div\n className={clsx(\n \"absolute right-0 top-0 w-8 h-full z-40 bg-gradient-to-l from-background/60 to-transparent flex items-center justify-end pointer-events-none\",\n classNames?.rightArrow,\n )}\n >\n <StyledButton\n onPress={handleScrollRight}\n isIconOnly\n disableRipple\n disableAnimation\n className={clsx(\n \"absolute right-0 w-6 h-6 bg-transparent flex items-center justify-center text-foreground/40 hover:text-foreground transition-all duration-125 ease-in-out opacity-0\",\n isHovered && \"opacity-100 pointer-events-auto\",\n classNames?.rightArrowButton,\n )}\n >\n <ChevronRightIcon\n width={18}\n height={18}\n className={classNames?.rightArrowIcon}\n />\n </StyledButton>\n </div>\n )}\n\n {/* scroll content */}\n <div\n // bind the container element to the ref.\n ref={containerRef}\n className={clsx(\n \"flex overflow-x-auto overflow-y-hidden no-scrollbar\",\n classNames?.content,\n )}\n >\n {children}\n </div>\n </div>\n );\n}\n","import { ReactNode, useEffect, useState } from \"react\";\nimport { useEventEmitter } from \"@liberfi.io/hooks\";\nimport { useDisclosure } from \"@liberfi.io/ui\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type RenderAsyncModalProps<P = any, R = any> = {\n /** custom parameters for the modal */\n params?: P;\n /** whether the modal is open */\n isOpen: boolean;\n /** close the modal */\n onClose: () => void;\n /** change the open state of the modal */\n onOpenChange: (isOpen: boolean) => void;\n /** callback when the modal is closed with the result */\n onResult?: (result: R) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AsyncModalProps<P = any, R = any> = {\n /** unique identifier for the modal */\n id: string;\n /** render the modal content */\n children: (props: RenderAsyncModalProps<P, R>) => ReactNode;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type OpenAsyncModalOptions<P = any, R = any> = {\n /** custom parameters for the modal */\n params?: P;\n /** callback when the modal is closed with the result */\n onResult?: (result: R) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function AsyncModal<P = any, R = any>({\n id,\n children,\n}: AsyncModalProps<P, R>) {\n const events = useEventEmitter();\n\n const { isOpen, onOpen, onClose, onOpenChange } = useDisclosure();\n\n const [params, setParams] = useState<P | undefined>(undefined);\n\n const [onResult, setOnResult] = useState<((result: R) => void) | undefined>(\n undefined,\n );\n\n // listen to open modal events\n useEffect(() => {\n const handler = ({ params, onResult }: OpenAsyncModalOptions<P, R>) => {\n setParams(params);\n setOnResult(onResult);\n onOpen();\n };\n events.on(`open_modal:${id}`, handler);\n return () => {\n events.off(`open_modal:${id}`, handler);\n };\n }, [id, onOpen, events]);\n\n // listen to close modal events\n useEffect(() => {\n const handler = () => {\n onClose();\n };\n events.on(`close_modal:${id}`, handler);\n return () => {\n events.off(`close_modal:${id}`, handler);\n };\n }, [id, onClose, events]);\n\n return children({\n params,\n isOpen,\n onClose,\n onOpenChange,\n onResult,\n });\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback } from \"react\";\nimport { useEventEmitter } from \"@liberfi.io/hooks\";\nimport { OpenAsyncModalOptions } from \"./AsyncModal\";\n\nexport type UseAsyncModalReturnType<P = any, R = any> = {\n onOpen: (options?: OpenAsyncModalOptions<P, R>) => void;\n onClose: () => void;\n};\n\nexport function useAsyncModal<P = any, R = any>(\n id: string,\n): UseAsyncModalReturnType<P, R> {\n const events = useEventEmitter();\n\n const onOpen = useCallback(\n (options?: OpenAsyncModalOptions<P, R>) => {\n events.emit(`open_modal:${id}`, options);\n },\n [id, events],\n );\n\n const onClose = useCallback(() => {\n events.emit(`close_modal:${id}`);\n }, [id, events]);\n\n return { onOpen, onClose };\n}\n","declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/ui-scaffold\"] = \"0.1.8\";\n}\n\nexport default \"0.1.8\";\n"]}
1
+ {"version":3,"sources":["../src/components/draggable/states.ts","../src/components/draggable/useDraggableModalDisclosure.ts","../src/components/draggable/useDraggablePanelDisclosure.ts","../src/components/draggable/DraggableModal.tsx","../src/components/draggable/DraggablePanel.tsx","../src/components/draggable/DraggablePanelProvider.tsx","../src/components/draggable/useDraggableDisclosure.ts","../src/components/layout/Header.tsx","../src/components/layout/MobileHeader.tsx","../src/components/layout/Footer.tsx","../src/components/layout/Page.tsx","../src/components/layout/PageContent.tsx","../src/components/layout/Logo.tsx","../src/components/layout/HeaderNavigation.tsx","../src/components/modal/AsyncModal.tsx","../src/components/modal/useAsyncModal.ts","../src/version.ts"],"names":["panelStateFamily","atomFamily","id","atomWithStorage","panelWidthFamily","panelMinWidthFamily","panelMaxWidthFamily","modalOpenFamily","modalShouldStartDraggingFamily","modalSizeFamily","modalRestoreSizeFamily","modalPositionFamily","modalRestorePositionFamily","modalMinimizedFamily","modalMinWidthFamily","modalMaxWidthFamily","lastDraggableTypeFamily","panelOrdersAtom","useDraggableModalDisclosure","isOpen","setIsOpen","useAtom","isMinimized","setIsMinimized","restoreSize","useAtomValue","restorePosition","setSize","useSetAtom","setPosition","setShouldStartDragging","setLastDraggableType","onOpen","useCallback","options","shouldStartDragging","position","size","prev","onClose","useMemo","useDraggablePanelDisclosure","panelState","setPanelState","setPanelWidth","setPanelOrders","left","right","MINIMIZED_SIZE","MAXIMIZED_SIZE","MAXIMIZED_POSITION","DraggableModal","memo","title","minWidth","maxWidth","minHeight","maxHeight","leftSidebar","leftSidebarWidth","rightSidebar","rightSidebarWidth","aspectRatio","showHeader","header","headerHeight","children","t","useTranslation","onOpenPanel","setRestoreSize","setRestorePosition","isDragging","setIsDragging","useState","isResizing","setIsResizing","resizeDirection","setResizeDirection","currentEdge","setCurrentEdge","dockAnimationEdge","setDockAnimationEdge","dockToEdge","setDockToEdge","dockToEdgeTimeoutRef","useRef","panelMinWidth","panelMaxWidth","positionRef","useValueRef","setPositionRef","useCallbackRef","sizeRef","setSizeRef","leftSidebarWidthRef","hasLeftSidebarRef","rightSidebarWidthRef","hasRightSidebarRef","aspectRatioRef","headerHeightRef","minWidthRef","maxWidthRef","minHeightRef","maxHeightRef","isDraggingRef","currentEdgeRef","dockToEdgeRef","onCloseRef","onOpenPanelRef","panelMinWidthRef","panelMaxWidthRef","isMaximized","useEffect","bottom","handleMouseMove","e","handleMouseUp","startInteraction","interactionType","direction","startX","startY","startWidth","startHeight","startPosition","cleanup","deltaX","deltaY","newX","newY","leftOffset","minX","rightOffset","maxX","maxY","edge","calculateNewSize","width","height","constraint","newWidth","newHeight","widthBasedHeight","heightBasedWidth","absDeltaX","absDeltaY","avgHeight","newSize","handleMinimize","handleMaximize","handleResize","throttle","jsxs","Fragment","createPortal","jsx","clsx","StyledTooltip","DraggableIcon","Button","RestoreWindowIcon","MinimizeIcon","UnMaximizeIcon","MaximizeIcon","XCloseIcon","DraggablePanel","setWidth","openModal","closePanel","modalMinWidth","modalMaxWidth","widthRef","isResizingRef","setWidthRef","openModalRef","closePanelRef","modalMinWidthRef","modalMaxWidthRef","handleResizeStart","onResize","distance","onResizeEnd","handleDragStart","onDragMove","onDragEnd","handleClose","ResizeHandle","DraggablePanelProvider","contents","className","classNames","panelOrders","store","getDefaultStore","content","leftOpenPanels","a","b","rightOpenPanels","props","useDraggableDisclosure","isModalOpen","onOpenModal","onCloseModal","isPanelOpen","onClosePanel","lastDraggableType","Header","MobileHeader","Footer","Page","PageContent","Logo","href","icon","miniIcon","Link","HeaderNavigation","active","AsyncModal","events","useEventEmitter","onOpenChange","useDisclosure","params","setParams","onResult","setOnResult","handler","useAsyncModal","version_default"],"mappings":"yiBAKO,IAAMA,EAAAA,CAAmBC,UAAAA,CAAYC,CAAAA,EAC1CC,eAAAA,CACE,CAAA,WAAA,EAAcD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAC7B,MAAA,CACA,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAGaE,EAAAA,CAAmBH,UAAAA,CAAYC,CAAAA,EAC1CC,eAAAA,CAAgB,CAAA,WAAA,EAAcD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAAI,GAAA,CAAK,MAAA,CAAW,CAC/D,SAAA,CAAW,IACb,CAAC,CACH,CAAA,CAEaG,GAAsBJ,UAAAA,CAAYC,CAAAA,EAC7CC,eAAAA,CAAgB,CAAA,cAAA,EAAiBD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAAI,GAAA,CAAK,MAAA,CAAW,CAClE,SAAA,CAAW,IACb,CAAC,CACH,CAAA,CAEaI,EAAAA,CAAsBL,UAAAA,CAAYC,CAAAA,EAC7CC,eAAAA,CAAgB,CAAA,cAAA,EAAiBD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAAI,GAAA,CAAK,MAAA,CAAW,CAClE,SAAA,CAAW,IACb,CAAC,CACH,CAAA,CAGaK,EAAAA,CAAkBN,WAAYC,CAAAA,EACzCC,eAAAA,CAAgB,CAAA,UAAA,EAAaD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAAI,KAAA,CAAO,MAAA,CAAW,CAChE,SAAA,CAAW,IACb,CAAC,CACH,CAAA,CAGaM,EAAAA,CAAiCP,UAAAA,CAAYC,CAAAA,EACxDC,eAAAA,CACE,CAAA,yBAAA,EAA4BD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAC3C,KAAA,CACA,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAGaO,EAAAA,CAAkBR,UAAAA,CAAYC,GACzCC,eAAAA,CACE,CAAA,UAAA,EAAaD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAC5B,CAAE,KAAA,CAAO,GAAA,CAAK,MAAA,CAAQ,GAAI,CAAA,CAC1B,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAGaQ,EAAAA,CAAyBT,UAAAA,CAAYC,CAAAA,EAChDC,eAAAA,CACE,CAAA,iBAAA,EAAoBD,CAAAA,EAAM,SAAS,CAAA,CAAA,CACnC,CAAE,KAAA,CAAO,GAAA,CAAK,MAAA,CAAQ,GAAI,CAAA,CAC1B,OACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAGaS,EAAAA,CAAsBV,UAAAA,CAAYC,CAAAA,EAC7CC,eAAAA,CACE,CAAA,cAAA,EAAiBD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAChC,CACE,CAAA,CACE,OAAO,MAAA,CAAW,GAAA,CACd,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,CAAI,MAAA,CAAO,UAAA,CAAa,GAAA,EAAO,CAAC,CAAA,CACzC,CAAA,CACN,CAAA,CACE,OAAO,MAAA,CAAW,GAAA,CACd,KAAK,GAAA,CAAI,CAAA,CAAA,CAAI,MAAA,CAAO,WAAA,CAAc,GAAA,EAAO,CAAC,CAAA,CAC1C,CACR,CAAA,CACA,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAGaU,GAA6BX,UAAAA,CAAYC,CAAAA,EACpDC,eAAAA,CACE,CAAA,qBAAA,EAAwBD,CAAAA,EAAM,SAAS,CAAA,CAAA,CACvC,CACE,CAAA,CACE,OAAO,MAAA,CAAW,GAAA,CACd,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,CAAI,MAAA,CAAO,WAAa,GAAA,EAAO,CAAC,CAAA,CACzC,CAAA,CACN,CAAA,CACE,OAAO,MAAA,CAAW,GAAA,CACd,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,CAAI,MAAA,CAAO,WAAA,CAAc,GAAA,EAAO,CAAC,CAAA,CAC1C,CACR,CAAA,CACA,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAEaW,EAAAA,CAAuBZ,UAAAA,CAAYC,CAAAA,EAC9CC,eAAAA,CACE,CAAA,eAAA,EAAkBD,CAAAA,EAAM,SAAS,GACjC,KAAA,CACA,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAEaY,EAAAA,CAAsBb,UAAAA,CAAYC,CAAAA,EAC7CC,eAAAA,CAAwB,CAAA,cAAA,EAAiBD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAAI,GAAA,CAAK,MAAA,CAAW,CAC1E,SAAA,CAAW,IACb,CAAC,CACH,CAAA,CAEaa,EAAAA,CAAsBd,UAAAA,CAAYC,CAAAA,EAC7CC,eAAAA,CACE,CAAA,cAAA,EAAiBD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAChC,OAAO,MAAA,CAAW,GAAA,CAAc,MAAA,CAAO,UAAA,CAAa,EAAA,CAAK,CAAA,CACzD,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAEac,EAAAA,CAA0Bf,UAAAA,CAAYC,CAAAA,EACjDC,eAAAA,CACE,CAAA,cAAA,EAAiBD,CAAAA,EAAM,SAAS,CAAA,CAAA,CAChC,OAAA,CACA,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CACF,CAAA,CAEae,EAAAA,CAAkBd,eAAAA,CAM7B,aAAA,CACA,CACE,IAAA,CAAM,EAAC,CACP,KAAA,CAAO,EACT,CAAA,CACA,MAAA,CACA,CACE,SAAA,CAAW,IACb,CACF,CAAA,CChJO,SAASe,EAAAA,CACdhB,CAAAA,CACuC,CACvC,GAAM,CAACiB,EAAQC,CAAS,CAAA,CAAIC,OAAAA,CAAQd,EAAAA,CAAgBL,CAAE,CAAC,CAAA,CACjD,CAACoB,CAAAA,CAAaC,CAAc,CAAA,CAAIF,OAAAA,CAAQR,EAAAA,CAAqBX,CAAE,CAAC,CAAA,CAChEsB,CAAAA,CAAcC,YAAAA,CAAaf,EAAAA,CAAuBR,CAAE,CAAC,CAAA,CACrDwB,CAAAA,CAAkBD,YAAAA,CAAab,EAAAA,CAA2BV,CAAE,CAAC,CAAA,CAC7DyB,CAAAA,CAAUC,UAAAA,CAAWnB,EAAAA,CAAgBP,CAAE,CAAC,CAAA,CACxC2B,CAAAA,CAAcD,UAAAA,CAAWjB,EAAAA,CAAoBT,CAAE,CAAC,CAAA,CAChD4B,CAAAA,CAAyBF,UAAAA,CAAWpB,EAAAA,CAA+BN,CAAE,CAAC,CAAA,CACtE6B,CAAAA,CAAuBH,UAAAA,CAAWZ,EAAAA,CAAwBd,CAAE,CAAC,CAAA,CAE7D8B,CAAAA,CAASC,WAAAA,CACb,CAACC,CAAAA,CAAqC,EAAC,GAAM,CAC3C,GAAM,CAAE,mBAAA,CAAAC,CAAAA,CAAqB,QAAA,CAAAC,CAAAA,CAAU,KAAAC,EAAK,CAAA,CAAIH,CAAAA,CAC5CE,CAAAA,EAAUP,CAAAA,CAAaS,CAAAA,GAAU,CAAE,GAAGA,CAAAA,CAAM,GAAGF,CAAS,CAAA,CAAE,CAAA,CAC1DC,EAAAA,EAAMV,CAAAA,CAASW,CAAAA,GAAU,CAAE,GAAGA,CAAAA,CAAM,GAAGD,EAAK,CAAA,CAAE,CAAA,CAClDP,CAAAA,CAAuBK,CAAAA,EAAuB,KAAK,CAAA,CACnDf,CAAAA,CAAU,IAAI,CAAA,CACdW,CAAAA,CAAqB,OAAO,EAC9B,CAAA,CACA,CAACX,CAAAA,CAAWS,CAAAA,CAAaF,CAAAA,CAASG,CAAsB,CAC1D,CAAA,CAEMS,CAAAA,CAAUN,WAAAA,CAAY,IAAM,CAChCb,CAAAA,CAAU,KAAK,CAAA,CAEXE,CAAAA,GACFK,EAAQ,CAAE,GAAGH,CAAY,CAAC,CAAA,CAC1BK,CAAAA,CAAY,CAAE,GAAGH,CAAgB,CAAC,CAAA,CAClCH,CAAAA,CAAe,KAAK,CAAA,EAExB,CAAA,CAAG,CACDD,EACAE,CAAAA,CACAE,CAAAA,CACAH,CAAAA,CACAH,CAAAA,CACAO,CAAAA,CACAE,CACF,CAAC,CAAA,CAED,OAAOW,OAAAA,CACL,KAAO,CACL,MAAA,CAAArB,CAAAA,CACA,MAAA,CAAAa,CAAAA,CACA,OAAA,CAAAO,CACF,CAAA,CAAA,CACA,CAACpB,CAAAA,CAAQa,CAAAA,CAAQO,CAAO,CAC1B,CACF,CCvDO,SAASE,EAAAA,CACdvC,CAAAA,CACuC,CACvC,GAAM,CAACwC,CAAAA,CAAYC,CAAa,CAAA,CAAItB,OAAAA,CAAQrB,EAAAA,CAAiBE,CAAE,CAAC,CAAA,CAC1D0C,CAAAA,CAAgBhB,UAAAA,CAAWxB,EAAAA,CAAiBF,CAAE,CAAC,CAAA,CAC/C6B,CAAAA,CAAuBH,UAAAA,CAAWZ,EAAAA,CAAwBd,CAAE,CAAC,CAAA,CAC7D2C,CAAAA,CAAiBjB,WAAWX,EAAe,CAAA,CAE3Ce,CAAAA,CAASC,WAAAA,CACb,CAACC,CAAAA,CAAqC,EAAC,GAAM,CAC3C,IAAME,CAAAA,CAAWF,CAAAA,CAAQ,QAAA,EAAY,MAAA,CACrCU,CAAAA,CAAcV,CAAAA,CAAQ,KAAA,EAAS,GAAG,CAAA,CAClCS,CAAAA,CAAcP,CAAQ,CAAA,CACtBL,CAAAA,CAAqBK,CAAQ,CAAA,CAC7BS,CAAAA,CAAe,CAAC,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAM,IACxBX,CAAAA,GAAa,MAAA,CACR,CAAE,IAAA,CAAM,CAAE,GAAGU,CAAAA,CAAM,CAAC5C,CAAE,EAAG,IAAA,CAAK,GAAA,EAAM,CAAA,CAAG,KAAA,CAAA6C,CAAM,EAE7C,CAAE,IAAA,CAAAD,CAAAA,CAAM,KAAA,CAAO,CAAE,GAAGC,CAAAA,CAAO,CAAC7C,CAAE,EAAG,IAAA,CAAK,GAAA,EAAM,CAAE,CAExD,EACH,EACA,CAACA,CAAAA,CAAIyC,CAAAA,CAAeC,CAAa,CACnC,CAAA,CAEML,CAAAA,CAAUN,WAAAA,CAAY,IAAM,CAChCU,CAAAA,CAAc,MAAM,EACtB,CAAA,CAAG,CAACA,CAAa,CAAC,CAAA,CAEZxB,CAAAA,CAASqB,OAAAA,CAAQ,IAAME,CAAAA,GAAe,MAAA,CAAQ,CAACA,CAAU,CAAC,CAAA,CAE1DN,CAAAA,CAAWI,OAAAA,CACf,IAAOE,CAAAA,GAAe,MAAA,CAASA,EAAa,MAAA,CAC5C,CAACA,CAAU,CACb,CAAA,CAEA,OAAOF,OAAAA,CACL,KAAO,CACL,MAAA,CAAArB,CAAAA,CACA,QAAA,CAAAiB,CAAAA,CACA,MAAA,CAAAJ,CAAAA,CACA,OAAA,CAAAO,CACF,CAAA,CAAA,CACA,CAACpB,CAAAA,CAAQa,CAAAA,CAAQO,CAAO,CAC1B,CACF,CC7BA,IAAMS,EAAAA,CAAiB,CACrB,KAAA,CAAO,GAAA,CACP,MAAA,CAAQ,EACV,CAAA,CAEMC,EAAAA,CAAiB,CACrB,KAAA,CAAO,OAAO,MAAA,CAAW,GAAA,CAAc,MAAA,CAAO,UAAA,CAAa,EAAA,CAAK,CAAA,CAChE,MAAA,CAAQ,OAAO,MAAA,CAAW,GAAA,CAAc,MAAA,CAAO,WAAA,CAAc,EAAA,CAAK,CACpE,CAAA,CAEMC,EAAAA,CAAqB,CACzB,CAAA,CAAG,EAAA,CACH,CAAA,CAAG,EACL,CAAA,CA2CaC,EAAAA,CAAiBC,IAAAA,CAAK,SAAwB,CACzD,EAAA,CAAAlD,CAAAA,CACA,KAAA,CAAAmD,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAAW,GAAA,CACX,QAAA,CAAAC,CAAAA,CAAWN,EAAAA,CAAe,KAAA,CAC1B,UAAAO,CAAAA,CAAY,GAAA,CACZ,SAAA,CAAAC,CAAAA,CAAYR,EAAAA,CAAe,MAAA,CAC3B,WAAA,CAAAS,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CAAmB,GAAA,CACnB,YAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,CAAAA,CAAoB,GAAA,CACpB,YAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,MAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CAAe,EAAA,CACf,QAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,GAAM,CAAE,CAAA,CAAAC,EAAE,CAAA,CAAIC,cAAAA,EAAe,CAGvB,CAAE,MAAA,CAAAjD,CAAAA,CAAQ,OAAA,CAAAoB,EAAQ,CAAA,CAAIrB,EAAAA,CAA4BhB,CAAE,CAAA,CAGpD,CAAE,MAAA,CAAQmE,EAAY,EAAI5B,EAAAA,CAA4BvC,CAAE,CAAA,CAGxD,CAACoB,CAAAA,CAAaC,CAAc,CAAA,CAAIF,OAAAA,CAAQR,EAAAA,CAAqBX,CAAE,CAAC,CAAA,CAGhE,CAACkC,CAAAA,CAAUP,EAAW,CAAA,CAAIR,OAAAA,CAAQV,EAAAA,CAAoBT,CAAE,CAAC,CAAA,CAGzD,CAACmC,CAAAA,CAAMV,EAAO,CAAA,CAAIN,OAAAA,CAAQZ,EAAAA,CAAgBP,CAAE,CAAC,CAAA,CAG7C,CAACsB,EAAAA,CAAa8C,EAAc,CAAA,CAAIjD,OAAAA,CAAQX,EAAAA,CAAuBR,CAAE,CAAC,CAAA,CAGlE,CAACwB,EAAAA,CAAiB6C,EAAkB,CAAA,CAAIlD,OAAAA,CAC5CT,EAAAA,CAA2BV,CAAE,CAC/B,CAAA,CAGM,CAACiC,EAAAA,CAAqBL,EAAsB,CAAA,CAAIT,OAAAA,CACpDb,EAAAA,CAA+BN,CAAE,CACnC,CAAA,CAGM,CAACsE,CAAAA,CAAYC,EAAa,CAAA,CAAIC,QAAAA,CAASvC,EAAmB,CAAA,CAG1D,CAACwC,GAAYC,CAAa,CAAA,CAAIF,QAAAA,CAAS,KAAK,CAAA,CAG5C,CAACG,CAAAA,CAAiBC,CAAkB,CAAA,CACxCJ,QAAAA,CAAiC,IAAI,CAAA,CAGjC,CAACK,EAAAA,CAAaC,CAAc,CAAA,CAAIN,SAAkC,IAAI,CAAA,CAGtE,CAACO,EAAAA,CAAmBC,CAAoB,CAAA,CAAIR,QAAAA,CAEhD,IAAI,CAAA,CAGA,CAACS,EAAAA,CAAYC,CAAa,CAAA,CAAIV,QAAAA,CAAkC,IAAI,CAAA,CAGpEW,EAAuBC,MAAAA,CAA8B,IAAI,CAAA,CAEzDC,EAAAA,CAAgB9D,YAAAA,CAAapB,EAAAA,CAAoBH,CAAE,CAAC,CAAA,CAEpDsF,EAAAA,CAAgB/D,YAAAA,CAAanB,EAAAA,CAAoBJ,CAAE,CAAC,CAAA,CAGpDuF,CAAAA,CAAcC,WAAAA,CAAYtD,CAAQ,CAAA,CAClCuD,CAAAA,CAAiBC,cAAAA,CAAe/D,EAAW,CAAA,CAC3CgE,EAAAA,CAAUH,WAAAA,CAAYrD,CAAI,CAAA,CAC1ByD,CAAAA,CAAaF,cAAAA,CAAejE,EAAO,CAAA,CACnCoE,EAAAA,CAAsBL,YAAY/B,CAAgB,CAAA,CAClDqC,EAAAA,CAAoBN,WAAAA,CAAY,CAAC,CAAChC,CAAW,CAAA,CAC7CuC,EAAAA,CAAuBP,WAAAA,CAAY7B,CAAiB,CAAA,CACpDqC,EAAAA,CAAqBR,WAAAA,CAAY,CAAC,CAAC9B,CAAY,CAAA,CAC/CuC,CAAAA,CAAiBT,WAAAA,CAAY5B,CAAW,CAAA,CACxCsC,CAAAA,CAAkBV,WAAAA,CAAYzB,CAAY,CAAA,CAC1CoC,EAAAA,CAAcX,WAAAA,CAAYpC,CAAQ,CAAA,CAClCgD,EAAAA,CAAcZ,WAAAA,CAAYnC,CAAQ,CAAA,CAClCgD,EAAAA,CAAeb,WAAAA,CAAYlC,CAAS,CAAA,CACpCgD,EAAAA,CAAed,WAAAA,CAAYjC,CAAS,CAAA,CACpCgD,EAAAA,CAAgBf,WAAAA,CAAYlB,CAAU,CAAA,CACtCkC,EAAAA,CAAiBhB,WAAAA,CAAYX,EAAW,CAAA,CACxC4B,EAAAA,CAAgBjB,WAAAA,CAAYP,EAAU,CAAA,CACtCyB,EAAAA,CAAahB,cAAAA,CAAerD,EAAO,CAAA,CACnCsE,EAAAA,CAAiBjB,cAAAA,CAAevB,EAAW,CAAA,CAC3CyC,EAAAA,CAAmBpB,WAAAA,CAAYH,EAAa,EAC5CwB,EAAAA,CAAmBrB,WAAAA,CAAYF,EAAa,CAAA,CAG5CwB,EAAAA,CAAcxE,OAAAA,CAClB,IACEH,CAAAA,CAAK,KAAA,GAAUY,EAAAA,CAAe,KAAA,EAC9BZ,CAAAA,CAAK,MAAA,GAAWY,EAAAA,CAAe,MAAA,CACjC,CAACZ,EAAK,KAAA,CAAOA,CAAAA,CAAK,MAAM,CAC1B,CAAA,CAGA4E,SAAAA,CAAU,IAAM,CAAA,CACV7E,CAAAA,CAAS,CAAA,CAAI,CAAA,EAAKA,CAAAA,CAAS,CAAA,CAAI,CAAA,GACjCuD,CAAAA,CAAe,CACb,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGvD,CAAAA,CAAS,CAAC,CAAA,CACzB,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGA,CAAAA,CAAS,CAAC,CAC3B,CAAC,CAAA,CAEH,IAAMW,CAAAA,CAAQX,CAAAA,CAAS,CAAA,CAAIC,CAAAA,CAAK,KAAA,CAC1B6E,CAAAA,CAAS9E,CAAAA,CAAS,CAAA,CAAIC,CAAAA,CAAK,MAAA,CAAA,CAC7BU,CAAAA,CAAQ,MAAA,CAAO,UAAA,EAAcmE,CAAAA,CAAS,MAAA,CAAO,WAAA,GAC/CvB,EAAe,CACb,CAAA,CAAG,IAAA,CAAK,GAAA,CAAIvD,CAAAA,CAAS,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,MAAA,CAAO,UAAA,CAAaC,CAAAA,CAAK,KAAK,CAAC,CAAA,CACnE,CAAA,CAAG,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAS,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,MAAA,CAAO,WAAA,CAAcC,CAAAA,CAAK,MAAM,CAAC,CACvE,CAAC,EAEL,CAAA,CAAG,CAACnC,CAAE,CAAC,CAAA,CAGP+G,SAAAA,CAAU,IAAM,CACd,GAAI9F,CAAAA,EAAUgB,EAAAA,CAAqB,CACjCsC,EAAAA,CAAc,IAAI,CAAA,CAElB,IAAM0C,CAAAA,CAAmBC,CAAAA,EAAkB,CACzCzB,CAAAA,CAAe,CACb,CAAA,CAAGyB,CAAAA,CAAE,OAAA,CAAU/E,CAAAA,CAAK,KAAA,CAAQ,CAAA,CAC5B,CAAA,CAAG+E,CAAAA,CAAE,OAAA,CAAU,EACjB,CAAC,EACH,CAAA,CAEMC,EAAgB,IAAM,CAC1B5C,EAAAA,CAAc,KAAK,CAAA,CAEnB3C,EAAAA,CAAuB,KAAK,CAAA,CAC5B,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaqF,CAAe,CAAA,CACzD,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWE,CAAa,EACvD,CAAA,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaF,CAAe,CAAA,CACtD,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWE,CAAa,CAAA,CAClD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,WAEtB,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaF,CAAe,CAAA,CACzD,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWE,CAAa,CAAA,CACrD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,GAC/B,CACF,CACF,CAAA,CAAG,CAAClG,CAAAA,CAAQgB,EAAAA,CAAqBL,EAAAA,CAAwBO,CAAAA,CAAK,KAAK,CAAC,CAAA,CAEpE,IAAMiF,CAAAA,CAAmB,CACvBF,CAAAA,CACAG,EACAC,CAAAA,GACG,CAEH1F,EAAAA,CAAuB,KAAK,CAAA,CAG5B2C,EAAAA,CAAc,KAAK,CAAA,CACnBG,CAAAA,CAAc,KAAK,CAAA,CACnBE,CAAAA,CAAmB,IAAI,CAAA,CAGnByC,CAAAA,GAAoB,MAAA,CACtB9C,EAAAA,CAAc,IAAI,CAAA,CACT8C,CAAAA,GAAoB,QAAA,GAC7BzC,CAAAA,CAAmB0C,CAAAA,EAAa,IAAI,CAAA,CACpC5C,CAAAA,CAAc,IAAI,CAAA,CAAA,CAIpB,IAAM6C,EAAAA,CAASL,CAAAA,CAAE,OAAA,CACXM,GAASN,CAAAA,CAAE,OAAA,CACXO,CAAAA,CAAa9B,EAAAA,CAAQ,OAAA,CAAQ,KAAA,CAC7B+B,CAAAA,CAAc/B,EAAAA,CAAQ,OAAA,CAAQ,MAAA,CAC9BgC,CAAAA,CAAgB,CAAE,GAAGpC,CAAAA,CAAY,OAAQ,CAAA,CAEzCqC,EAAAA,CAAU,IAAM,CACpB,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaX,EAAe,CAAA,CACzD,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWE,EAAa,CAAA,CACrD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,OAAS,EAAA,CAE7B5C,EAAAA,CAAc,KAAK,CAAA,CACnBG,CAAAA,CAAc,KAAK,CAAA,CACnBE,CAAAA,CAAmB,IAAI,CAAA,CACvBE,CAAAA,CAAe,IAAI,CAAA,CAEfK,CAAAA,CAAqB,OAAA,GACvB,YAAA,CAAaA,EAAqB,OAAO,CAAA,CACzCA,CAAAA,CAAqB,OAAA,CAAU,IAAA,CAAA,CAEjCD,CAAAA,CAAc,IAAI,CAAA,CAClBF,CAAAA,CAAqB,IAAI,EAC3B,CAAA,CAEMiC,EAAAA,CAAmBC,EAAAA,EAAkB,CACzC,GAAIG,IAAoB,MAAA,CAAQ,CAC9B,IAAMQ,CAAAA,CAASX,EAAAA,CAAE,OAAA,CAAUK,EAAAA,CACrBO,CAAAA,CAASZ,EAAAA,CAAE,OAAA,CAAUM,EAAAA,CACvBO,CAAAA,CAAOJ,CAAAA,CAAc,CAAA,CAAIE,CAAAA,CACzBG,CAAAA,CAAOL,CAAAA,CAAc,CAAA,CAAIG,CAAAA,CAGvBG,EAAAA,CAAanC,EAAAA,CAAkB,OAAA,CACjCD,EAAAA,CAAoB,OAAA,CACpB,CAAA,CACEqC,EAAAA,CAAO,EAAA,CAAKD,EAAAA,CAEZE,CAAAA,CAAcnC,EAAAA,CAAmB,OAAA,CACnCD,EAAAA,CAAqB,QACrB,CAAA,CACEqC,CAAAA,CAAO,MAAA,CAAO,UAAA,CAAa,EAAA,CAAKX,CAAAA,CAAaU,CAAAA,CAG7CE,EAAAA,CAAO,MAAA,CAAO,WAAA,CAAc,EAAA,CAAK,EAAA,CAGjCC,CAAAA,CAAOP,CAAAA,EAAQG,EAAAA,CAAO,MAAA,CAASH,CAAAA,EAAQK,CAAAA,CAAO,OAAA,CAAU,IAAA,CAC1DE,CAAAA,GAAS9B,EAAAA,CAAe,OAAA,EAC1B1B,CAAAA,CAAewD,CAAI,CAAA,CAIjBnD,CAAAA,CAAqB,OAAA,EAAWmD,CAAAA,EAClCtD,CAAAA,CAAqBsD,CAAI,CAAA,CAIvBnD,EAAqB,OAAA,GAEpBsB,EAAAA,CAAc,OAAA,GAAY,MAAA,GACxBsB,CAAAA,CAAOG,EAAAA,EAAQI,CAAAA,GAAS,MAAA,CAAA,EAC1B7B,EAAAA,CAAc,OAAA,GAAY,OAAA,GACxBsB,CAAAA,CAAOK,CAAAA,EAAQE,CAAAA,GAAS,OAAA,CAAA,CAAA,GAE3B,YAAA,CAAanD,CAAAA,CAAqB,OAAO,CAAA,CACzCA,CAAAA,CAAqB,OAAA,CAAU,IAAA,CAC/BD,CAAAA,CAAc,IAAI,CAAA,CAClBF,CAAAA,CAAqB,IAAI,CAAA,CAAA,CAKzB,CAACG,CAAAA,CAAqB,OAAA,EAAWmD,CAAAA,EAC/B7B,GAAc,OAAA,GAAY6B,CAAAA,GAC5BpD,CAAAA,CAAcoD,CAAI,CAAA,CAClBtD,CAAAA,CAAqBsD,CAAI,CAAA,CACzBnD,CAAAA,CAAqB,OAAA,CAAU,UAAA,CAAW,IAAM,CAC1CoB,EAAAA,CAAc,OAAA,EAAWC,EAAAA,CAAe,UAAY8B,CAAAA,EAEtDV,EAAAA,EAAQ,CAERlB,EAAAA,EAAW,CAEXC,EAAAA,CAAe,CACb,QAAA,CAAU2B,CAAAA,CACV,KAAA,CAAO,IAAA,CAAK,GAAA,CACV,IAAA,CAAK,GAAA,CAAI3C,EAAAA,CAAQ,OAAA,CAAQ,MAAOiB,EAAAA,CAAiB,OAAO,CAAA,CACxDC,EAAAA,CAAiB,OACnB,CACF,CAAC,CAAA,EAED3B,CAAAA,CAAc,IAAI,EAEtB,CAAA,CAAG,GAAG,CAAA,CAAA,CAKV6C,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAM,EAAA,CAAKE,EAAU,CAAA,CAAGG,CAAI,CAAA,CACrDJ,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAM,EAAE,EAAGK,EAAI,CAAA,CACxC5C,CAAAA,CAAe,CAAE,CAAA,CAAGsC,CAAAA,CAAM,CAAA,CAAGC,CAAK,CAAC,EACrC,CAAA,KAAA,GAAWX,CAAAA,GAAoB,QAAA,EAAYC,CAAAA,CAAW,CACpD,IAAMO,CAAAA,CAASX,EAAAA,CAAE,OAAA,CAAUK,EAAAA,CACrBO,CAAAA,CAASZ,EAAAA,CAAE,OAAA,CAAUM,EAAAA,CAGrBe,CAAAA,CAAmB,CACvBC,CAAAA,CACAC,EAAAA,CACAC,EAAAA,GACG,CACH,IAAIC,CAAAA,CAAW,KAAK,GAAA,CAClB,IAAA,CAAK,GAAA,CAAIH,CAAAA,CAAOrC,EAAAA,CAAY,OAAO,CAAA,CACnCC,EAAAA,CAAY,OACd,CAAA,CACIwC,CAAAA,CAAY,IAAA,CAAK,GAAA,CACnB,IAAA,CAAK,GAAA,CAAIH,EAAAA,CAAQpC,EAAAA,CAAa,OAAO,CAAA,CACrCC,EAAAA,CAAa,OACf,CAAA,CAEA,GAAIL,CAAAA,CAAe,OAAA,CAAS,CAC1B,GAAIyC,EAAAA,GAAe,OAAA,CACjBE,CAAAA,CAAY,IAAA,CAAK,GAAA,CACf,KAAK,GAAA,CACHJ,CAAAA,CAAQvC,CAAAA,CAAe,OAAA,CAAUC,CAAAA,CAAgB,OAAA,CACjDG,EAAAA,CAAa,OACf,CAAA,CACAC,EAAAA,CAAa,OACf,CAAA,CACAqC,CAAAA,CAAAA,CACGC,CAAAA,CAAY1C,CAAAA,CAAgB,OAAA,EAAWD,EAAe,OAAA,CAAA,KAAA,GAChDyC,EAAAA,GAAe,QAAA,CACxBC,CAAAA,CAAW,IAAA,CAAK,GAAA,CACd,IAAA,CAAK,GAAA,CAAA,CACFF,EAAAA,CAASvC,CAAAA,CAAgB,OAAA,EAAWD,CAAAA,CAAe,OAAA,CACpDE,EAAAA,CAAY,OACd,CAAA,CACAC,GAAY,OACd,CAAA,CACAwC,CAAAA,CACED,CAAAA,CAAW1C,CAAAA,CAAe,OAAA,CAAUC,CAAAA,CAAgB,OAAA,CAAA,KACjD,CACL,IAAM2C,EAAAA,CACJL,CAAAA,CAAQvC,CAAAA,CAAe,OAAA,CAAUC,CAAAA,CAAgB,OAAA,CAC7C4C,CAAAA,CAAAA,CACHL,EAAAA,CAASvC,CAAAA,CAAgB,OAAA,EAAWD,CAAAA,CAAe,OAAA,CAChD8C,EAAAA,CAAY,IAAA,CAAK,GAAA,CAAIlB,CAAM,CAAA,CAC3BmB,EAAAA,CAAY,IAAA,CAAK,GAAA,CAAIlB,CAAM,CAAA,CAEjC,GAAIiB,EAAAA,CAAY,GAAA,CAAMC,EAAAA,CACpBJ,CAAAA,CAAY,IAAA,CAAK,GAAA,CACf,IAAA,CAAK,GAAA,CAAIC,EAAAA,CAAkBxC,EAAAA,CAAa,OAAO,CAAA,CAC/CC,EAAAA,CAAa,OACf,CAAA,CACAqC,CAAAA,CAAAA,CACGC,CAAAA,CAAY1C,CAAAA,CAAgB,OAAA,EAC7BD,CAAAA,CAAe,OAAA,CAAA,KAAA,GACR+C,EAAAA,CAAY,GAAA,CAAMD,EAAAA,CAC3BJ,CAAAA,CAAW,IAAA,CAAK,GAAA,CACd,IAAA,CAAK,GAAA,CAAIG,CAAAA,CAAkB3C,EAAAA,CAAY,OAAO,EAC9CC,EAAAA,CAAY,OACd,CAAA,CACAwC,CAAAA,CACED,CAAAA,CAAW1C,CAAAA,CAAe,OAAA,CAAUC,CAAAA,CAAgB,OAAA,CAAA,KACjD,CACL,IAAM+C,EAAAA,CAAAA,CAAaL,CAAAA,CAAYC,EAAAA,EAAoB,CAAA,CACnDF,CAAAA,CAAW,IAAA,CAAK,GAAA,CACd,IAAA,CAAK,GAAA,CAAA,CACFA,CAAAA,CAAWG,CAAAA,EAAoB,CAAA,CAChC3C,EAAAA,CAAY,OACd,CAAA,CACAC,EAAAA,CAAY,OACd,CAAA,CACAwC,CAAAA,CAAY,IAAA,CAAK,GAAA,CACf,KAAK,GAAA,CAAIK,EAAAA,CAAW5C,EAAAA,CAAa,OAAO,CAAA,CACxCC,EAAAA,CAAa,OACf,CAAA,CACAqC,CAAAA,CAAAA,CACGC,CAAAA,CAAY1C,CAAAA,CAAgB,OAAA,EAC7BD,CAAAA,CAAe,QACnB,CACF,CAEA0C,EAAW,IAAA,CAAK,GAAA,CACd,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAUxC,EAAAA,CAAY,OAAO,CAAA,CACtCC,EAAAA,CAAY,OACd,CAAA,CACAwC,CAAAA,CAAY,IAAA,CAAK,GAAA,CACf,IAAA,CAAK,GAAA,CAAIA,EAAWvC,EAAAA,CAAa,OAAO,CAAA,CACxCC,EAAAA,CAAa,OACf,EACF,CAEA,OAAO,CAAE,KAAA,CAAOqC,CAAAA,CAAU,MAAA,CAAQC,CAAU,CAC9C,CAAA,CAGA,OAAQtB,CAAAA,EACN,KAAK,SAAA,CAAW,CACd,IAAM4B,CAAAA,CAAUX,CAAAA,CACdd,CAAAA,CAAaI,CAAAA,CACbH,CAAAA,CAAcI,CAAAA,CACd,MACF,CAAA,CACAlC,CAAAA,CAAWsD,CAAO,EAClBzD,CAAAA,CAAe,CACb,CAAA,CAAGkC,CAAAA,CAAc,CAAA,EAAKF,CAAAA,CAAayB,CAAAA,CAAQ,KAAA,CAAA,CAC3C,CAAA,CAAGvB,CAAAA,CAAc,CAAA,EAAKD,CAAAA,CAAcwB,CAAAA,CAAQ,MAAA,CAC9C,CAAC,CAAA,CACD,KACF,CACA,KAAK,UAAA,CAAY,CACf,IAAMA,CAAAA,CAAUX,CAAAA,CACdd,CAAAA,CAAaI,CAAAA,CACbH,CAAAA,CAAcI,CAAAA,CACd,MACF,CAAA,CACAlC,CAAAA,CAAWsD,CAAO,EAClBzD,CAAAA,CAAe,CACb,CAAA,CAAGkC,CAAAA,CAAc,CAAA,CACjB,CAAA,CAAGA,CAAAA,CAAc,CAAA,EAAKD,CAAAA,CAAcwB,CAAAA,CAAQ,MAAA,CAC9C,CAAC,CAAA,CACD,KACF,CACA,KAAK,YAAA,CAAc,CACjB,IAAMA,CAAAA,CAAUX,CAAAA,CACdd,CAAAA,CAAaI,CAAAA,CACbH,CAAAA,CAAcI,CAAAA,CACd,MACF,CAAA,CACAlC,CAAAA,CAAWsD,CAAO,CAAA,CAClBzD,CAAAA,CAAe,CACb,EAAGkC,CAAAA,CAAc,CAAA,EAAKF,CAAAA,CAAayB,CAAAA,CAAQ,KAAA,CAAA,CAC3C,CAAA,CAAGvB,CAAAA,CAAc,CACnB,CAAC,CAAA,CACD,KACF,CACA,KAAK,aAAA,CAAe,CAClB/B,CAAAA,CACE2C,EACEd,CAAAA,CAAaI,CAAAA,CACbH,CAAAA,CAAcI,CAAAA,CACd,MACF,CACF,CAAA,CACA,KACF,CACA,KAAK,KAAA,CAAO,CACV,IAAMoB,CAAAA,CAAUX,CAAAA,CACdd,CAAAA,CACAC,EAAcI,CAAAA,CACd,QACF,CAAA,CACAlC,CAAAA,CAAWsD,CAAO,CAAA,CAClBzD,CAAAA,CAAe,CACb,CAAA,CAAGkC,CAAAA,CAAc,CAAA,CACjB,CAAA,CAAGA,CAAAA,CAAc,CAAA,EAAKD,CAAAA,CAAcwB,CAAAA,CAAQ,MAAA,CAC9C,CAAC,CAAA,CACD,KACF,CACA,KAAK,QAAA,CAAU,CACbtD,CAAAA,CACE2C,CAAAA,CAAiBd,CAAAA,CAAYC,CAAAA,CAAcI,CAAAA,CAAQ,QAAQ,CAC7D,CAAA,CACA,KACF,CACA,KAAK,MAAA,CAAQ,CACX,IAAMoB,CAAAA,CAAUX,CAAAA,CACdd,CAAAA,CAAaI,CAAAA,CACbH,CAAAA,CACA,OACF,CAAA,CACA9B,CAAAA,CAAWsD,CAAO,CAAA,CAClBzD,CAAAA,CAAe,CACb,CAAA,CAAGkC,CAAAA,CAAc,CAAA,EAAKF,CAAAA,CAAayB,CAAAA,CAAQ,KAAA,CAAA,CAC3C,CAAA,CAAGvB,CAAAA,CAAc,CACnB,CAAC,CAAA,CACD,KACF,CACA,KAAK,OAAA,CAAS,CACZ/B,CAAAA,CACE2C,CAAAA,CAAiBd,CAAAA,CAAaI,CAAAA,CAAQH,CAAAA,CAAa,OAAO,CAC5D,CAAA,CACA,KACF,CACF,CACF,CACF,CAAA,CAEMP,EAAAA,CAAgB,IAAM,CAAA,CAEtBjF,CAAAA,CAAS,CAAA,CAAI,CAAA,EAAKA,CAAAA,CAAS,CAAA,CAAI,CAAA,GACjCuD,CAAAA,CAAe,CACb,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGvD,CAAAA,CAAS,CAAC,CAAA,CACzB,CAAA,CAAG,KAAK,GAAA,CAAI,CAAA,CAAGA,CAAAA,CAAS,CAAC,CAC3B,CAAC,CAAA,CAEH0F,EAAAA,GACF,CAAA,CAEA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaX,EAAe,CAAA,CACtD,QAAA,CAAS,iBAAiB,SAAA,CAAWE,EAAa,EACpD,CAAA,CAEMgC,EAAAA,CAAiBpH,WAAAA,CAAY,IAAM,CACnCX,CAAAA,EAEFwE,CAAAA,CAAW,CAAE,GAAGtE,EAAY,CAAC,CAAA,CAC7BmE,CAAAA,CAAe,CAAE,GAAGjE,EAAgB,CAAC,CAAA,CACrCH,CAAAA,CAAe,KAAK,CAAA,GAGhByF,EAAAA,CAEFrB,CAAAA,CAAe,CAAE,GAAGjE,EAAgB,CAAC,CAAA,EAGrC4C,EAAAA,CAAe,CAAE,GAAGjC,CAAK,CAAC,CAAA,CAC1BkC,EAAAA,CAAmB,CAAE,GAAGnC,CAAS,CAAC,CAAA,CAAA,CAEpC0D,CAAAA,CAAW,CAAE,GAAG9C,EAAe,CAAC,CAAA,CAChCzB,EAAe,IAAI,CAAA,EAEvB,CAAA,CAAG,CACDD,CAAAA,CACA0F,EAAAA,CACA3E,CAAAA,CACAD,CAAAA,CACAZ,EAAAA,CACAE,EAAAA,CACAH,CAAAA,CACA+C,EAAAA,CACAC,EACF,CAAC,CAAA,CAEK+E,EAAAA,CAAiBrH,WAAAA,CAAY,IAAM,CACnC+E,EAAAA,EAEFlB,CAAAA,CAAW,CAAE,GAAGtE,EAAY,CAAC,CAAA,CAC7BmE,CAAAA,CAAe,CAAE,GAAGjE,EAAgB,CAAC,CAAA,GAGjCJ,EAEFC,CAAAA,CAAe,KAAK,CAAA,EAGpB+C,EAAAA,CAAe,CAAE,GAAGjC,CAAK,CAAC,CAAA,CAC1BkC,EAAAA,CAAmB,CAAE,GAAGnC,CAAS,CAAC,CAAA,CAAA,CAEpC0D,CAAAA,CAAW,CAAE,GAAG7C,EAAe,CAAC,CAAA,CAChC0C,CAAAA,CAAe,CAAE,GAAGzC,EAAmB,CAAC,CAAA,EAE5C,CAAA,CAAG,CACD8D,EAAAA,CACA1F,CAAAA,CACAe,CAAAA,CACAD,EACAZ,EAAAA,CACAE,EAAAA,CACAH,CAAAA,CACA+C,EAAAA,CACAC,EACF,CAAC,CAAA,CAiCD,OA9BA0C,SAAAA,CAAU,IAAM,CACd,IAAMsC,CAAAA,CAAeC,QAAAA,CAAS,IAAM,CAAA,CAC9B/D,EAAY,OAAA,CAAQ,CAAA,CAAI,CAAA,EAAKA,CAAAA,CAAY,OAAA,CAAQ,CAAA,CAAI,CAAA,GACvDE,CAAAA,CAAe,CACb,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGF,CAAAA,CAAY,OAAA,CAAQ,CAAC,EACpC,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGA,CAAAA,CAAY,OAAA,CAAQ,CAAC,CACtC,CAAC,CAAA,CAEH,IAAM1C,CAAAA,CAAQ0C,CAAAA,CAAY,OAAA,CAAQ,CAAA,CAAII,EAAAA,CAAQ,OAAA,CAAQ,KAAA,CAChDqB,CAAAA,CAASzB,CAAAA,CAAY,OAAA,CAAQ,CAAA,CAAII,EAAAA,CAAQ,OAAA,CAAQ,MAAA,CAAA,CACnD9C,CAAAA,CAAQ,MAAA,CAAO,UAAA,EAAcmE,CAAAA,CAAS,MAAA,CAAO,WAAA,GAC/CvB,CAAAA,CAAe,CACb,CAAA,CAAG,IAAA,CAAK,GAAA,CACNF,CAAAA,CAAY,OAAA,CAAQ,CAAA,CACpB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,MAAA,CAAO,UAAA,CAAaI,EAAAA,CAAQ,OAAA,CAAQ,KAAK,CACvD,CAAA,CACA,CAAA,CAAG,IAAA,CAAK,GAAA,CACNJ,CAAAA,CAAY,OAAA,CAAQ,CAAA,CACpB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,MAAA,CAAO,WAAA,CAAcI,EAAAA,CAAQ,OAAA,CAAQ,MAAM,CACzD,CACF,CAAC,EAEL,CAAA,CAAG,GAAG,CAAA,CAEN,OAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAU0D,CAAY,CAAA,CACvC,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAY,EACnD,CACF,CAAA,CAAG,EAAE,CAAA,CAEApI,CAAAA,CAKHsI,IAAAA,CAAAC,QAAAA,CAAA,CAEI,QAAA,CAAA,CAAA,CAAAlF,CAAAA,EAAcG,EAAAA,GACdgF,YAAAA,CACEC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,KACT,6EAAA,CACArF,CAAAA,GAAeW,EAAAA,CAAa,iBAAA,CAAoB,aAAA,CAAA,CAChD,CAACX,CAAAA,EAAc,CACb,kBAAA,CACEK,CAAAA,GAAoB,KAAA,EAASA,CAAAA,GAAoB,QAAA,CACnD,kBAAA,CACEA,CAAAA,GAAoB,MAAA,EAAUA,CAAAA,GAAoB,OAAA,CACpD,oBAAA,CACEA,CAAAA,GAAoB,SAAA,EACpBA,CAAAA,GAAoB,aAAA,CACtB,oBAAA,CACEA,CAAAA,GAAoB,UAAA,EACpBA,CAAAA,GAAoB,YAAA,CACtB,aAAA,CAAeA,CAAAA,GAAoB,IACrC,CACF,EACF,CAAA,CACA,QAAA,CAAS,IACX,CAAA,CAGF+E,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CACT,uCAAA,CACArF,CAAAA,CAAa,uBAAA,CAA0B,kBAAA,CACvCG,EAAAA,EAAcH,CAAAA,CACV,iBAAA,CACA,qEACN,CAAA,CACA,KAAA,CAAO,CACL,SAAA,CAAW,CAAA,UAAA,EAAa,IAAA,CAAK,KAAA,CAAMpC,CAAAA,CAAS,CAAA,EAAKsB,CAAAA,CAAcC,CAAAA,CAAmB,CAAA,CAAE,CAAC,CAAA,IAAA,EAAO,IAAA,CAAK,KAAA,CAAMvB,EAAS,CAAC,CAAC,CAAA,GAAA,CACpH,CAAA,CAEA,QAAA,CAAAqH,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oBAAA,CACZ,QAAA,CAAA,CAAA/F,CAAAA,EACCkG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CACT,kFAAA,CACArF,CAAAA,CACI,0BAAA,CACA,2BACN,CAAA,CACA,KAAA,CAAO,CACL,KAAA,CAAOb,CAAAA,CACP,MAAA,CAAQrC,CAAAA,CAAc,EAAA,CAAKe,CAAAA,CAAK,MAAA,CAAS,CAC3C,CAAA,CAEC,QAAA,CAAAqB,EACH,CAAA,CAIFkG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CACT,2EAAA,CACArF,CAAAA,CACI,6CAAA,CACA,2CACN,CAAA,CACA,KAAA,CAAO,CACL,KAAA,CAAOnC,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAQA,CAAAA,CAAK,MAAA,CACb,UAAA,CACEsC,EAAAA,EAAcH,CAAAA,CACV,MAAA,CACA,wLAAA,CACN,OAAA,CAAS,SACX,CAAA,CAEA,QAAA,CAAAiF,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWI,IAAAA,CACT,eAAA,CACA5E,IAAqB,sBAAA,CACrBA,EAAAA,GAAsB,MAAA,CAAS,aAAA,CAAgB,cACjD,CAAA,CACA,KAAA,CAAO,CAAE,OAAA,CAAS,OAAQ,CAAA,CAGzB,QAAA,CAAA,CAAA,CAAC3D,CAAAA,EACAmI,IAAAA,CAAAC,QAAAA,CAAA,CACE,UAAAE,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,qDAAA,CACV,WAAA,CAAcxC,CAAAA,EACZE,CAAAA,CAAiBF,CAAAA,CAAG,QAAA,CAAU,SAAS,CAAA,CAE3C,CAAA,CACAwC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,sDAAA,CACV,YAAcxC,CAAAA,EACZE,CAAAA,CAAiBF,CAAAA,CAAG,QAAA,CAAU,UAAU,CAAA,CAE5C,CAAA,CACAwC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,wDAAA,CACV,WAAA,CAAcxC,CAAAA,EACZE,CAAAA,CAAiBF,CAAAA,CAAG,QAAA,CAAU,YAAY,CAAA,CAE9C,CAAA,CACAwC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,yDAAA,CACV,WAAA,CAAcxC,CAAAA,EACZE,CAAAA,CAAiBF,CAAAA,CAAG,QAAA,CAAU,aAAa,CAAA,CAE/C,CAAA,CACAwC,GAAAA,CAAC,OACC,SAAA,CAAU,0DAAA,CACV,WAAA,CAAcxC,CAAAA,EAAME,CAAAA,CAAiBF,CAAAA,CAAG,QAAA,CAAU,KAAK,CAAA,CACzD,CAAA,CACAwC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,6DAAA,CACV,WAAA,CAAcxC,CAAAA,EAAME,CAAAA,CAAiBF,CAAAA,CAAG,QAAA,CAAU,QAAQ,CAAA,CAC5D,CAAA,CACAwC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,2DAAA,CACV,WAAA,CAAcxC,CAAAA,EAAME,CAAAA,CAAiBF,CAAAA,CAAG,QAAA,CAAU,MAAM,EAC1D,CAAA,CACAwC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,4DAAA,CACV,WAAA,CAAcxC,CAAAA,EAAME,CAAAA,CAAiBF,CAAAA,CAAG,QAAA,CAAU,OAAO,CAAA,CAC3D,CAAA,CAAA,CACF,CAAA,CAIDrD,CAAAA,EACC0F,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,yGAAA,CACV,WAAA,CAAcrC,CAAAA,EAAME,CAAAA,CAAiBF,CAAAA,CAAG,MAAM,CAAA,CAC9C,KAAA,CAAO,CAAE,MAAA,CAAQnD,CAAa,CAAA,CAG9B,QAAA,CAAA,CAAA2F,GAAAA,CAACE,cAAA,CACC,SAAA,CAAU,KAAA,CACV,UAAA,CAAY,CAAA,CACZ,OAAA,CAAS3F,EAAAA,CAAE,oCAAoC,CAAA,CAE/C,QAAA,CAAAyF,GAAAA,CAACG,aAAAA,CAAA,CAAc,SAAA,CAAU,uDAAA,CAAwD,CAAA,CACnF,EAEC/F,CAAAA,EACCyF,IAAAA,CAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,+DAAA,CACV,WAAA,CAAcxC,CAAAA,EAAMA,CAAAA,CAAE,eAAA,EAAgB,CAErC,QAAA,CAAA/D,CAAAA,CACH,EACAoG,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,+CAAA,CACV,WAAA,CAAcrC,CAAAA,EAAMA,CAAAA,CAAE,eAAA,EAAgB,CAGtC,QAAA,CAAA,CAAAwC,GAAAA,CAACI,MAAAA,CAAA,CACC,IAAA,CAAK,IAAA,CACL,OAAA,CAAQ,OAAA,CACR,MAAA,CAAO,IAAA,CACP,UAAA,CAAU,IAAA,CACV,OAAA,CAASX,EAAAA,CAER,QAAA,CAAA/H,CAAAA,CACCsI,GAAAA,CAACK,iBAAAA,CAAA,CACC,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,UAAU,cAAA,CACZ,CAAA,CAEAL,GAAAA,CAACM,YAAAA,CAAA,CACC,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,SAAA,CAAU,cAAA,CACZ,CAAA,CAEJ,CAAA,CAEAN,GAAAA,CAACI,MAAAA,CAAA,CACC,IAAA,CAAK,IAAA,CACL,OAAA,CAAQ,OAAA,CACR,MAAA,CAAO,IAAA,CACP,UAAA,CAAU,IAAA,CACV,OAAA,CAASV,EAAAA,CAER,QAAA,CAAAtC,EAAAA,CACC4C,GAAAA,CAACO,cAAAA,CAAA,CACC,KAAA,CAAO,GACP,MAAA,CAAQ,EAAA,CACR,SAAA,CAAU,cAAA,CACZ,CAAA,CAEAP,GAAAA,CAACQ,YAAAA,CAAA,CACC,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,SAAA,CAAU,cAAA,CACZ,CAAA,CAEJ,CAAA,CAEAR,GAAAA,CAACI,MAAAA,CAAA,CACC,IAAA,CAAK,IAAA,CACL,OAAA,CAAQ,OAAA,CACR,MAAA,CAAO,IAAA,CACP,UAAA,CAAU,IAAA,CACV,OAAA,CAASzH,EAAAA,CAET,QAAA,CAAAqH,GAAAA,CAACS,UAAAA,CAAA,CACC,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,SAAA,CAAU,cAAA,CACZ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAID,CAAC/I,CAAAA,EACAsI,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CACE7F,EACI,uDAAA,CACA,sDAAA,CAEN,WAAA,CACEA,CAAAA,CAAa,MAAA,CAAaqD,CAAAA,EAAME,CAAAA,CAAiBF,CAAAA,CAAG,MAAM,CAAA,CAG3D,QAAA,CAAAlD,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CAECN,CAAAA,EACCgG,IAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CACT,kFAAA,CACArF,CAAAA,CACI,2BAAA,CACA,2BACN,CAAA,CACA,KAAA,CAAO,CACL,KAAA,CAAOX,CAAAA,CACP,MAAA,CAAQvC,CAAAA,CAAc,EAAA,CAAKe,CAAAA,CAAK,MAAA,CAAS,CAC3C,CAAA,CAEC,QAAA,CAAAuB,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CArQO,IAuQX,CAAC,EC73BM,SAAS0G,EAAAA,CAAe,CAC7B,EAAA,CAAApK,CAAAA,CACA,KAAA,CAAAmD,CAAAA,CACA,QAAA,CAAAE,CAAAA,CAAW,GAAA,CACX,QAAA,CAAAD,CAAAA,CAAW,GAAA,CACX,QAAA,CAAAlB,CAAAA,CACA,UAAA,CAAA2B,CAAAA,CAAa,IAAA,CACb,MAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CAAe,EAAA,CACf,QAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,GAAM,CAAE,CAAA,CAAAC,CAAE,CAAA,CAAIC,gBAAe,CAGvB1B,CAAAA,CAAajB,YAAAA,CAAazB,EAAAA,CAAiBE,CAAE,CAAC,CAAA,CAG9C,CAACyE,CAAAA,CAAYC,CAAa,CAAA,CAAIF,QAAAA,CAAS,KAAK,CAAA,CAG5C,CAACF,CAAAA,CAAYC,CAAa,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAG5C,CAACgE,CAAAA,CAAO6B,EAAQ,CAAA,CAAIlJ,OAAAA,CAAQjB,EAAAA,CAAiBF,CAAE,CAAC,CAAA,CAGhD,CAAE,MAAA,CAAQsK,CAAU,EAAItJ,EAAAA,CAA4BhB,CAAE,CAAA,CAGtD,CAAE,OAAA,CAASuK,EAAW,CAAA,CAAIhI,EAAAA,CAA4BvC,CAAE,CAAA,CAExDwK,EAAAA,CAAgBjJ,YAAAA,CAAaX,EAAAA,CAAoBZ,CAAE,CAAC,CAAA,CAEpDyK,CAAAA,CAAgBlJ,YAAAA,CAAaV,EAAAA,CAAoBb,CAAE,CAAC,CAAA,CAGpD0K,CAAAA,CAAWlF,WAAAA,CAAYgD,CAAK,CAAA,CAC5BpC,CAAAA,CAAcZ,WAAAA,CAAYnC,CAAQ,CAAA,CAClC8C,EAAAA,CAAcX,WAAAA,CAAYpC,CAAQ,CAAA,CAClCmC,CAAAA,CAAcC,WAAAA,CAAYtD,CAAQ,CAAA,CAClCyI,EAAAA,CAAgBnF,WAAAA,CAAYf,CAAU,CAAA,CACtC8B,EAAAA,CAAgBf,WAAAA,CAAYlB,CAAU,CAAA,CACtCsG,EAAAA,CAAclF,cAAAA,CAAe2E,EAAQ,CAAA,CACrCQ,EAAAA,CAAenF,cAAAA,CAAe4E,CAAS,CAAA,CACvCQ,EAAAA,CAAgBpF,cAAAA,CAAe6E,EAAU,CAAA,CACzCQ,EAAAA,CAAmBvF,WAAAA,CAAYgF,EAAa,CAAA,CAC5CQ,EAAAA,CAAmBxF,WAAAA,CAAYiF,CAAa,EAE5CQ,CAAAA,CAAqB/D,CAAAA,EAAwB,CACjDA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBxC,CAAAA,CAAc,IAAI,CAAA,CAClB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,WAAA,CAC7B,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,UAAA,CAAa,MAAA,CACjC,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAC/B,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,OAAA,CAC/B,SAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAQ,MAAA,CAC5B,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,MAAA,CAG7B,IAAM6C,CAAAA,CAASL,CAAAA,CAAE,OAAA,CACXO,CAAAA,CAAaiD,CAAAA,CAAS,OAAA,CAEtBQ,GAAYhE,EAAAA,EAAkB,CAClC,GAAI,CAACyD,EAAAA,CAAc,OAAA,CAAS,OAE5B,IAAM9C,CAAAA,CAASX,EAAAA,CAAE,OAAA,CAAUK,CAAAA,CAErB4D,EAAAA,CACJ5F,CAAAA,CAAY,OAAA,GAAY,OAAA,CACpBkC,EAAaI,CAAAA,CACbJ,CAAAA,CAAaI,CAAAA,CAEbW,CAAAA,CAAQ,IAAA,CAAK,GAAA,CACjB,IAAA,CAAK,GAAA,CAAI2C,EAAAA,CAAUhF,EAAAA,CAAY,OAAO,CAAA,CACtCC,CAAAA,CAAY,OACd,CAAA,CACAwE,EAAAA,CAAYpC,CAAK,EACnB,CAAA,CAEM4C,CAAAA,CAAc,IAAM,CACxB1G,CAAAA,CAAc,KAAK,CAAA,CACnB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,EAAA,CAC7B,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,CAAa,EAAA,CACjC,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,EAAA,CAC/B,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,EAAA,CAC/B,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAQ,EAAA,CAC5B,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,EAAA,CAC7B,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAawG,EAAQ,CAAA,CAClD,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWE,CAAW,EACrD,EAEA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaF,EAAQ,CAAA,CAC/C,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWE,CAAW,EAClD,CAAA,CAEMC,EAAAA,CAAmBnE,CAAAA,EAAwB,CAE/C,GAAIA,CAAAA,CAAE,MAAA,YAAkB,WAAA,EAAeA,CAAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAC9D,OAEFA,CAAAA,CAAE,cAAA,EAAe,CAEjB3C,CAAAA,CAAc,IAAI,CAAA,CAGlB,IAAMgD,CAAAA,CAASL,EAAE,OAAA,CACXM,CAAAA,CAASN,CAAAA,CAAE,OAAA,CAEXU,EAAAA,CAAU,IAAM,CACpB,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAa0D,CAAU,CAAA,CACpD,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWC,EAAS,EACjDhH,CAAAA,CAAc,KAAK,EACrB,CAAA,CAEM+G,CAAAA,CAAcpE,CAAAA,EAAkB,CACpC,GAAI,CAACX,EAAAA,CAAc,OAAA,CAAS,OAE5B,IAAMsB,EAAAA,CAAS,IAAA,CAAK,GAAA,CAAIX,EAAE,OAAA,CAAUK,CAAM,CAAA,CACpCO,CAAAA,CAAS,IAAA,CAAK,GAAA,CAAIZ,CAAAA,CAAE,OAAA,CAAUM,CAAM,CAAA,CAAA,CAGtCK,EAAAA,CAAS,EAAA,EAAMC,CAAAA,CAAS,EAAA,IAC1BF,EAAAA,EAAQ,CAERkD,EAAAA,EAAc,CAEdD,EAAAA,CAAa,CAEX,mBAAA,CAAqB,IAAA,CACrB,QAAA,CAAU,CACR,CAAA,CAAG3D,CAAAA,CAAE,OAAA,CAAUwD,CAAAA,CAAS,OAAA,CAAU,CAAA,CAAI,EAAA,CACtC,CAAA,CAAGxD,EAAE,OAAA,CAAU,EACjB,CAAA,CAEA,IAAA,CAAM,CACJ,KAAA,CAAO,IAAA,CAAK,GAAA,CACV,IAAA,CAAK,GAAA,CAAIwD,CAAAA,CAAS,OAAA,CAASK,EAAAA,CAAiB,OAAO,CAAA,CACnDC,EAAAA,CAAiB,OACnB,CACF,CACF,CAAC,CAAA,EAEL,CAAA,CAEMO,EAAAA,CAAY,IAAM,CACtB3D,EAAAA,GACF,CAAA,CAEA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAa0D,CAAU,EACjD,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWC,EAAS,EAChD,CAAA,CAEMC,EAAAA,CAAc,IAAM,CACxBV,EAAAA,GACF,CAAA,CAEA,OAAItI,CAAAA,GAAeN,CAAAA,CACV,IAAA,CAIPqH,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uDAAA,CAEZ,QAAA,CAAA,CAAArH,CAAAA,GAAa,OAAA,EACZwH,GAAAA,CAAC+B,EAAAA,CAAA,CACC,UAAA,CAAYhH,CAAAA,CACZ,iBAAA,CAAmBwG,CAAAA,CACrB,CAAA,CAIF1B,IAAAA,CAAC,OACC,SAAA,CAAWI,IAAAA,CACT,mDAAA,CACArF,CAAAA,CACI,gCAAA,CACA,iCACN,CAAA,CACA,KAAA,CAAO,CACL,KAAA,CAAO,CAAA,EAAGkE,CAAK,CAAA,EAAA,CAAA,CACf,UAAA,CACE/D,CAAAA,EAAcH,CAAAA,CACV,OACA,sLAAA,CACN,OAAA,CAAS,SACX,CAAA,CAGC,QAAA,CAAA,CAAAT,CAAAA,EACC0F,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,mHAAA,CACV,WAAA,CAAa8B,EAAAA,CACb,KAAA,CAAO,CAAE,MAAA,CAAQtH,CAAa,EAG9B,QAAA,CAAA,CAAA2F,GAAAA,CAACE,aAAAA,CAAA,CACC,SAAA,CAAU,KAAA,CACV,UAAA,CAAY,CAAA,CACZ,OAAA,CAAS3F,CAAAA,CAAE,qCAAqC,CAAA,CAEhD,QAAA,CAAAyF,GAAAA,CAACG,aAAAA,CAAA,CAAc,SAAA,CAAU,uDAAA,CAAwD,CAAA,CACnF,CAAA,CAEC/F,CAAAA,EACCyF,IAAAA,CAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,+DAAA,CACV,WAAA,CAAcxC,CAAAA,EAAMA,CAAAA,CAAE,iBAAgB,CAErC,QAAA,CAAA/D,CAAAA,CACH,CAAA,CACAuG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,+CAAA,CACV,WAAA,CAAcxC,CAAAA,EAAMA,CAAAA,CAAE,eAAA,EAAgB,CAGtC,QAAA,CAAAwC,GAAAA,CAACI,MAAAA,CAAA,CACC,IAAA,CAAK,IAAA,CACL,OAAA,CAAQ,OAAA,CACR,MAAA,CAAO,IAAA,CACP,UAAA,CAAU,IAAA,CACV,OAAA,CAAS0B,EAAAA,CAET,QAAA,CAAA9B,GAAAA,CAACS,UAAAA,CAAA,CACC,KAAA,CAAO,GACP,MAAA,CAAQ,EAAA,CACR,SAAA,CAAU,cAAA,CACZ,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAGFT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CAAqC,QAAA,CAAA1F,CAAAA,CAAS,CAAA,CAAA,CAC/D,CAAA,CAGC9B,CAAAA,GAAa,MAAA,EACZwH,GAAAA,CAAC+B,EAAAA,CAAA,CACC,UAAA,CAAYhH,CAAAA,CACZ,iBAAA,CAAmBwG,CAAAA,CACrB,CAAA,CAAA,CAEJ,CAEJ,CAOA,SAASQ,EAAAA,CAAa,CAAE,WAAAhH,CAAAA,CAAY,iBAAA,CAAAwG,CAAkB,CAAA,CAAsB,CAC1E,OACE1B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,UAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oKAAA,CACb,QAAA,CAAA,CAAAG,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qCAAA,CAAsC,CAAA,CACnDA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qCAAA,CAAsC,CAAA,CACnDA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qCAAA,CAAsC,CAAA,CAGnDA,GAAAA,CAAC,KAAA,CAAA,CACC,UAAU,wDAAA,CACV,WAAA,CAAauB,CAAAA,CACf,CAAA,CAAA,CACF,CAAA,CAECxG,CAAAA,EAAciF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CAAsC,CAAA,CAAA,CACtE,CAEJ,CC3PO,SAASgC,EAAAA,CAAuB,CACrC,QAAA,CAAAC,CAAAA,CAAW,EAAC,CACZ,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,QAAA,CAAA7H,CACF,CAAA,CAAgC,CAC9B,IAAM8H,CAAAA,CAAcvK,YAAAA,CAAaR,EAAe,CAAA,CAGhDgG,SAAAA,CAAU,IAAM,CACd,IAAMgF,CAAAA,CAAQC,eAAAA,EAAgB,CAC9BL,CAAAA,CAAS,OAAA,CAASM,CAAAA,EAAY,CAC5BF,EAAM,GAAA,CAAI5L,EAAAA,CAAoB8L,CAAAA,CAAQ,EAAE,CAAA,CAAGA,CAAAA,CAAQ,aAAA,EAAiB,GAAG,CAAA,CACvEF,CAAAA,CAAM,GAAA,CAAI3L,EAAAA,CAAoB6L,CAAAA,CAAQ,EAAE,CAAA,CAAGA,CAAAA,CAAQ,aAAA,EAAiB,GAAG,CAAA,CACvEF,CAAAA,CAAM,GAAA,CAAInL,EAAAA,CAAoBqL,CAAAA,CAAQ,EAAE,CAAA,CAAGA,CAAAA,CAAQ,aAAA,EAAiB,GAAG,CAAA,CACvEF,CAAAA,CAAM,GAAA,CACJlL,EAAAA,CAAoBoL,EAAQ,EAAE,CAAA,CAC9BA,CAAAA,CAAQ,aAAA,EAAiB,MAAA,CAAO,UAAA,CAAa,EAC/C,EACF,CAAC,EACH,CAAA,CAAG,CAACN,CAAQ,CAAC,CAAA,CAGb,IAAMO,EAAiB5J,OAAAA,CACrB,IACEqJ,CAAAA,CACG,MAAA,CAAQM,CAAAA,EAAY,CACnB,IAAMF,CAAAA,CAAQC,eAAAA,EAAgB,CAE9B,OAAKF,CAAAA,CAAY,IAAA,CAAKG,CAAAA,CAAQ,EAAE,CAAA,CAEzBF,EAAM,GAAA,CAAIjM,EAAAA,CAAiBmM,CAAAA,CAAQ,EAAE,CAAC,CAAA,GAAM,MAAA,CAFT,KAG5C,CAAC,CAAA,CACA,IAAA,CAAK,CAACE,CAAAA,CAAGC,CAAAA,GAAMN,CAAAA,CAAY,IAAA,CAAKM,CAAAA,CAAE,EAAE,CAAA,CAAIN,CAAAA,CAAY,IAAA,CAAKK,CAAAA,CAAE,EAAE,CAAC,CAAA,CACnE,CAACR,CAAAA,CAAUG,CAAAA,CAAY,IAAI,CAC7B,CAAA,CAGMO,CAAAA,CAAkB/J,QACtB,IACEqJ,CAAAA,CACG,MAAA,CAAQM,CAAAA,EAAY,CACnB,IAAMF,CAAAA,CAAQC,eAAAA,EAAgB,CAE9B,OAAKF,CAAAA,CAAY,KAAA,CAAMG,CAAAA,CAAQ,EAAE,CAAA,CAE1BF,CAAAA,CAAM,GAAA,CAAIjM,EAAAA,CAAiBmM,CAAAA,CAAQ,EAAE,CAAC,CAAA,GAAM,OAAA,CAFR,KAG7C,CAAC,CAAA,CACA,IAAA,CACC,CAACE,CAAAA,CAAGC,CAAAA,GAAAA,CACDN,CAAAA,CAAY,KAAA,CAAMK,EAAE,EAAE,CAAA,EAAK,CAAA,GAAML,CAAAA,CAAY,KAAA,CAAMM,CAAAA,CAAE,EAAE,CAAA,EAAK,CAAA,CACjE,CAAA,CACJ,CAACT,CAAAA,CAAUG,CAAAA,CAAY,KAAK,CAC9B,CAAA,CAEA,OACEvC,IAAAA,CAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAD,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWI,IAAAA,CACT,6CAAA,CACAiC,CAAAA,CACAC,CAAAA,EAAY,IACd,CAAA,CAGA,QAAA,CAAA,CAAAnC,GAAAA,CAAC,OACC,SAAA,CAAWC,IAAAA,CAAK,gCAAA,CAAkCkC,CAAAA,EAAY,IAAI,CAAA,CAEjE,QAAA,CAAAK,CAAAA,CAAe,GAAA,CAAKI,CAAAA,EACnB5C,GAAAA,CAACU,EAAAA,CAAA,CAEE,GAAGkC,CAAAA,CACJ,QAAA,CAAS,OACT,QAAA,CAAUA,CAAAA,CAAM,aAAA,EAAiB,GAAA,CACjC,QAAA,CAAUA,CAAAA,CAAM,aAAA,EAAiB,GAAA,CAAA,CAJ5B,CAAA,KAAA,EAAQA,CAAAA,CAAM,EAAE,CAAA,CAKvB,CACD,CAAA,CACH,CAAA,CAEA5C,GAAAA,CAAC,OAAI,SAAA,CAAWC,IAAAA,CAAK,0BAAA,CAA4BkC,CAAAA,EAAY,OAAO,CAAA,CACjE,QAAA,CAAA7H,CAAAA,CACH,CAAA,CAEA0F,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CAAK,gCAAA,CAAkCkC,CAAAA,EAAY,KAAK,CAAA,CAElE,QAAA,CAAAQ,CAAAA,CAAgB,GAAA,CAAKC,CAAAA,EACpB5C,GAAAA,CAACU,EAAAA,CAAA,CAEE,GAAGkC,CAAAA,CACJ,QAAA,CAAS,OAAA,CACT,QAAA,CAAUA,CAAAA,CAAM,aAAA,EAAiB,GAAA,CACjC,SAAUA,CAAAA,CAAM,aAAA,EAAiB,GAAA,CAAA,CAJ5B,CAAA,MAAA,EAASA,CAAAA,CAAM,EAAE,CAAA,CAKxB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAECX,CAAAA,CAAS,GAAA,CAAKW,CAAAA,EACb5C,GAAAA,CAACzG,EAAAA,CAAA,CAEE,GAAGqJ,CAAAA,CACJ,QAAA,CAAUA,CAAAA,CAAM,aAAA,EAAiB,GAAA,CACjC,QAAA,CAAUA,CAAAA,CAAM,aAAA,EAAiB,MAAA,CAAO,UAAA,CAAa,EAAA,CAAA,CAHhD,CAAA,MAAA,EAASA,CAAAA,CAAM,EAAE,EAIxB,CACD,CAAA,CAAA,CACH,CAEJ,CC9JO,SAASC,EAAAA,CACdvM,CAAAA,CACkC,CAClC,GAAM,CACJ,MAAA,CAAQwM,CAAAA,CACR,MAAA,CAAQC,CAAAA,CACR,OAAA,CAASC,CACX,CAAA,CAAI1L,EAAAA,CAA4BhB,CAAE,CAAA,CAE5B,CACJ,MAAA,CAAQ2M,EACR,MAAA,CAAQxI,CAAAA,CACR,OAAA,CAASyI,CACX,CAAA,CAAIrK,EAAAA,CAA4BvC,CAAE,CAAA,CAE5B6M,CAAAA,CAAoBtL,YAAAA,CAAaT,EAAAA,CAAwBd,CAAE,CAAC,CAAA,CAE5D8B,CAAAA,CAASC,WAAAA,CAAY,IAAM,CAC3ByK,CAAAA,EAAeG,CAAAA,GACfE,CAAAA,GAAsB,OAAA,CACxBJ,CAAAA,EAAY,CAEZtI,CAAAA,CAAY,CAAE,QAAA,CAAU0I,CAAkB,CAAC,CAAA,EAE/C,CAAA,CAAG,CAACL,CAAAA,CAAaG,EAAaE,CAAAA,CAAmBJ,CAAAA,CAAatI,CAAW,CAAC,CAAA,CAEpE9B,CAAAA,CAAUN,WAAAA,CAAY,IAAM,CAC5ByK,CAAAA,CACFE,CAAAA,EAAa,CACJC,CAAAA,EACTC,CAAAA,GAEJ,CAAA,CAAG,CAACJ,CAAAA,CAAaG,CAAAA,CAAaD,CAAAA,CAAcE,CAAY,CAAC,CAAA,CAEnD3L,CAAAA,CAASqB,OAAAA,CACb,IAAMkK,CAAAA,EAAeG,CAAAA,CACrB,CAACH,CAAAA,CAAaG,CAAW,CAC3B,EAEA,OAAOrK,OAAAA,CACL,KAAO,CACL,MAAA,CAAArB,CAAAA,CACA,MAAA,CAAAa,CAAAA,CACA,OAAA,CAAAO,CACF,CAAA,CAAA,CACA,CAACpB,CAAAA,CAAQa,CAAAA,CAAQO,CAAO,CAC1B,CACF,CCtDO,SAASyK,EAAAA,CAAO,CAAE,QAAA,CAAA9I,CAAAA,CAAU,SAAA,CAAA4H,CAAU,EAAgB,CAC3D,OACElC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CACT,gJAAA,CACAiC,CACF,CAAA,CAEC,QAAA,CAAA5H,CAAAA,CACH,CAEJ,CCXO,SAAS+I,EAAAA,CAAa,CAAE,QAAA,CAAA/I,CAAAA,CAAU,SAAA,CAAA4H,CAAU,CAAA,CAAsB,CACvE,OACElC,GAAAA,CAAC,KAAA,CAAA,CACC,UAAWC,IAAAA,CACT,6GAAA,CACAiC,CACF,CAAA,CAEC,QAAA,CAAA5H,CAAAA,CACH,CAEJ,CCXO,SAASgJ,GAAO,CAAE,QAAA,CAAAhJ,CAAAA,CAAU,SAAA,CAAA4H,CAAU,CAAA,CAAgB,CAC3D,OACElC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CACT,uGAAA,CACAiC,CACF,CAAA,CAEC,QAAA,CAAA5H,EACH,CAEJ,CCXO,SAASiJ,EAAAA,CAAK,CAAE,QAAA,CAAAjJ,CAAAA,CAAU,SAAA,CAAA4H,CAAU,CAAA,CAAc,CACvD,OACElC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CACT,0EAAA,CACAiC,CACF,CAAA,CAEC,QAAA,CAAA5H,CAAAA,CACH,CAEJ,CCXO,SAASkJ,EAAAA,CAAY,CAAE,SAAA,CAAAtB,CAAAA,CAAW,QAAA,CAAA5H,CAAS,CAAA,CAAqB,CACrE,OACE0F,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWC,IAAAA,CAAK,0BAAA,CAA4BiC,CAAS,CAAA,CACvD,QAAA,CAAA5H,CAAAA,CACH,CAEJ,CCCO,SAASmJ,EAAAA,CAAK,CAAE,IAAA,CAAAC,CAAAA,CAAO,GAAA,CAAK,IAAA,CAAAC,CAAAA,CAAM,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAA1B,CAAU,CAAA,CAAc,CACzE,GAAM,CAAE,CAAA,CAAA3H,CAAE,CAAA,CAAIC,cAAAA,EAAe,CAC7B,OACEqF,IAAAA,CAACgE,IAAAA,CAAA,CACC,IAAA,CAAMH,CAAAA,CACN,SAAA,CAAWzD,IAAAA,CAAK,4CAAA,CAA8CiC,CAAS,CAAA,CACvE,YAAA,CAAY3H,CAAAA,CAAE,eAAe,CAAA,CAE7B,QAAA,CAAA,CAAAyF,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,IAAAA,CACT,mCACA,CAAC,CAAC2D,CAAAA,EAAY,eAChB,CAAA,CAEC,QAAA,CAAAD,CAAAA,CACH,CAAA,CACCC,CAAAA,EACC5D,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CACZ,QAAA,CAAA4D,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CC3BO,SAASE,EAAAA,CAAiB,CAC/B,IAAA,CAAAJ,CAAAA,CACA,KAAA,CAAAjK,CAAAA,CACA,MAAA,CAAAsK,CAAAA,CAAS,KAAA,CACT,SAAA,CAAA7B,CACF,CAAA,CAA0B,CACxB,OACElC,GAAAA,CAAC6D,IAAAA,CAAA,CACC,aAAA,CAAaE,CAAAA,CACb,IAAA,CAAML,CAAAA,CACN,UAAWzD,IAAAA,CACT,wIAAA,CACAiC,CACF,CAAA,CACA,YAAA,CAAYzI,CAAAA,CAEX,QAAA,CAAAA,CAAAA,CACH,CAEJ,CCMO,SAASuK,EAAAA,CAA6B,CAC3C,EAAA,CAAA1N,CAAAA,CACA,QAAA,CAAAgE,CACF,CAAA,CAA0B,CACxB,IAAM2J,CAAAA,CAASC,eAAAA,EAAgB,CAEzB,CAAE,MAAA,CAAA3M,CAAAA,CAAQ,MAAA,CAAAa,CAAAA,CAAQ,OAAA,CAAAO,CAAAA,CAAS,YAAA,CAAAwL,CAAa,CAAA,CAAIC,aAAAA,EAAc,CAE1D,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIxJ,QAAAA,CAAwB,MAAS,CAAA,CAEvD,CAACyJ,CAAAA,CAAUC,CAAW,CAAA,CAAI1J,QAAAA,CAC9B,MACF,CAAA,CAGA,OAAAuC,SAAAA,CAAU,IAAM,CACd,IAAMoH,CAAAA,CAAU,CAAC,CAAE,MAAA,CAAAJ,CAAAA,CAAQ,QAAA,CAAAE,CAAS,CAAA,GAAmC,CACrED,CAAAA,CAAUD,CAAM,CAAA,CAChBG,CAAAA,CAAYD,CAAQ,EACpBnM,CAAAA,GACF,CAAA,CACA,OAAA6L,CAAAA,CAAO,EAAA,CAAG,CAAA,WAAA,EAAc3N,CAAE,CAAA,CAAA,CAAImO,CAAO,CAAA,CAC9B,IAAM,CACXR,CAAAA,CAAO,GAAA,CAAI,CAAA,WAAA,EAAc3N,CAAE,CAAA,CAAA,CAAImO,CAAO,EACxC,CACF,CAAA,CAAG,CAACnO,CAAAA,CAAI8B,CAAAA,CAAQ6L,CAAM,CAAC,CAAA,CAGvB5G,SAAAA,CAAU,IAAM,CACd,IAAMoH,CAAAA,CAAU,IAAM,CACpB9L,CAAAA,GACF,CAAA,CACA,OAAAsL,CAAAA,CAAO,EAAA,CAAG,CAAA,YAAA,EAAe3N,CAAE,CAAA,CAAA,CAAImO,CAAO,CAAA,CAC/B,IAAM,CACXR,CAAAA,CAAO,IAAI,CAAA,YAAA,EAAe3N,CAAE,CAAA,CAAA,CAAImO,CAAO,EACzC,CACF,CAAA,CAAG,CAACnO,CAAAA,CAAIqC,CAAAA,CAASsL,CAAM,CAAC,CAAA,CAEjB3J,CAAAA,CAAS,CACd,MAAA,CAAA+J,CAAAA,CACA,MAAA,CAAA9M,CAAAA,CACA,OAAA,CAAAoB,CAAAA,CACA,YAAA,CAAAwL,CAAAA,CACA,QAAA,CAAAI,CACF,CAAC,CACH,CCtEO,SAASG,EAAAA,CACdpO,CAAAA,CAC+B,CAC/B,IAAM2N,CAAAA,CAASC,eAAAA,EAAgB,CAEzB9L,CAAAA,CAASC,WAAAA,CACZC,CAAAA,EAA0C,CACzC2L,CAAAA,CAAO,IAAA,CAAK,CAAA,WAAA,EAAc3N,CAAE,CAAA,CAAA,CAAIgC,CAAO,EACzC,CAAA,CACA,CAAChC,CAAAA,CAAI2N,CAAM,CACb,CAAA,CAEMtL,CAAAA,CAAUN,WAAAA,CAAY,IAAM,CAChC4L,EAAO,IAAA,CAAK,CAAA,YAAA,EAAe3N,CAAE,CAAA,CAAE,EACjC,CAAA,CAAG,CAACA,CAAAA,CAAI2N,CAAM,CAAC,CAAA,CAEf,OAAO,CAAE,MAAA,CAAA7L,CAAAA,CAAQ,OAAA,CAAAO,CAAQ,CAC3B,CCpBI,OAAO,MAAA,CAAW,GAAA,GACpB,MAAA,CAAO,mBAAA,CAAsB,MAAA,CAAO,mBAAA,EAAuB,EAAC,CAC5D,MAAA,CAAO,mBAAA,CAAoB,yBAAyB,CAAA,CAAI,OAAA,CAAA,KAGnDgM,EAAAA,CAAQ","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport { atomFamily, atomWithStorage } from \"@liberfi.io/ui\";\n\n/** whether the panel is docked or not */\nexport const panelStateFamily = atomFamily((id: string | null) =>\n atomWithStorage<\"none\" | \"left\" | \"right\">(\n `panelState.${id ?? \"default\"}`,\n \"none\",\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** width of the panel */\nexport const panelWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage(`panelWidth.${id ?? \"default\"}`, 350, undefined, {\n getOnInit: true,\n }),\n);\n\nexport const panelMinWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage(`panelMinWidth.${id ?? \"default\"}`, 320, undefined, {\n getOnInit: true,\n }),\n);\n\nexport const panelMaxWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage(`panelMaxWidth.${id ?? \"default\"}`, 440, undefined, {\n getOnInit: true,\n }),\n);\n\n/** whether the modal is open */\nexport const modalOpenFamily = atomFamily((id: string | null) =>\n atomWithStorage(`modalOpen.${id ?? \"default\"}`, false, undefined, {\n getOnInit: true,\n }),\n);\n\n/** whether the modal should start dragging automatically when opened */\nexport const modalShouldStartDraggingFamily = atomFamily((id: string | null) =>\n atomWithStorage(\n `modalShouldStartDragging.${id ?? \"default\"}`,\n false,\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** size of the modal */\nexport const modalSizeFamily = atomFamily((id: string | null) =>\n atomWithStorage<{ width: number; height: number }>(\n `modalSize.${id ?? \"default\"}`,\n { width: 350, height: 580 },\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** restore size of the modal when maximized or minimized */\nexport const modalRestoreSizeFamily = atomFamily((id: string | null) =>\n atomWithStorage<{ width: number; height: number }>(\n `modalRestoreSize.${id ?? \"default\"}`,\n { width: 350, height: 580 },\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** position of the modal */\nexport const modalPositionFamily = atomFamily((id: string | null) =>\n atomWithStorage<{ x: number; y: number }>(\n `modalPosition.${id ?? \"default\"}`,\n {\n x:\n typeof window !== \"undefined\"\n ? Math.max(0, (window.innerWidth - 350) / 2)\n : 0,\n y:\n typeof window !== \"undefined\"\n ? Math.max(0, (window.innerHeight - 580) / 2)\n : 0,\n },\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\n/** restore position of the modal when maximized or minimized */\nexport const modalRestorePositionFamily = atomFamily((id: string | null) =>\n atomWithStorage<{ x: number; y: number }>(\n `modalRestorePosition.${id ?? \"default\"}`,\n {\n x:\n typeof window !== \"undefined\"\n ? Math.max(0, (window.innerWidth - 350) / 2)\n : 0,\n y:\n typeof window !== \"undefined\"\n ? Math.max(0, (window.innerHeight - 580) / 2)\n : 0,\n },\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\nexport const modalMinimizedFamily = atomFamily((id: string | null) =>\n atomWithStorage<boolean>(\n `modalMinimized.${id ?? \"default\"}`,\n false,\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\nexport const modalMinWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage<number>(`modalMinWidth.${id ?? \"default\"}`, 200, undefined, {\n getOnInit: true,\n }),\n);\n\nexport const modalMaxWidthFamily = atomFamily((id: string | null) =>\n atomWithStorage<number>(\n `modalMaxWidth.${id ?? \"default\"}`,\n typeof window !== \"undefined\" ? window.innerWidth - 40 : 0,\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\nexport const lastDraggableTypeFamily = atomFamily((id: string | null) =>\n atomWithStorage<\"left\" | \"right\" | \"modal\">(\n `lastPanelType.${id ?? \"default\"}`,\n \"modal\",\n undefined,\n {\n getOnInit: true,\n },\n ),\n);\n\nexport const panelOrdersAtom = atomWithStorage<{\n // left panel open timestamps, latest opened on the left\n left: { [id: string]: number };\n // right panel open timestamps, latest opened on the right\n right: { [id: string]: number };\n}>(\n \"panelOrders\",\n {\n left: {},\n right: {},\n },\n undefined,\n {\n getOnInit: true,\n },\n);\n","\"use client\";\n\nimport { useCallback, useMemo } from \"react\";\nimport { useAtom, useAtomValue, useSetAtom } from \"@liberfi.io/ui\";\nimport {\n lastDraggableTypeFamily,\n modalMinimizedFamily,\n modalOpenFamily,\n modalPositionFamily,\n modalRestorePositionFamily,\n modalRestoreSizeFamily,\n modalShouldStartDraggingFamily,\n modalSizeFamily,\n} from \"./states\";\n\nexport type OpenDraggableModalOptions = {\n /** should start dragging automatically when the modal is opened */\n shouldStartDragging?: boolean;\n /** adjust position of the modal when it is opened */\n position?: { x?: number; y?: number };\n /** adjust size of the modal when it is opened */\n size?: { width?: number; height?: number };\n};\n\nexport type UseDraggableModalDisclosureReturnType = {\n isOpen: boolean;\n onOpen: (options?: OpenDraggableModalOptions) => void;\n onClose: () => void;\n};\n\nexport function useDraggableModalDisclosure(\n id: string,\n): UseDraggableModalDisclosureReturnType {\n const [isOpen, setIsOpen] = useAtom(modalOpenFamily(id));\n const [isMinimized, setIsMinimized] = useAtom(modalMinimizedFamily(id));\n const restoreSize = useAtomValue(modalRestoreSizeFamily(id));\n const restorePosition = useAtomValue(modalRestorePositionFamily(id));\n const setSize = useSetAtom(modalSizeFamily(id));\n const setPosition = useSetAtom(modalPositionFamily(id));\n const setShouldStartDragging = useSetAtom(modalShouldStartDraggingFamily(id));\n const setLastDraggableType = useSetAtom(lastDraggableTypeFamily(id));\n\n const onOpen = useCallback(\n (options: OpenDraggableModalOptions = {}) => {\n const { shouldStartDragging, position, size } = options;\n if (position) setPosition((prev) => ({ ...prev, ...position }));\n if (size) setSize((prev) => ({ ...prev, ...size }));\n setShouldStartDragging(shouldStartDragging ?? false);\n setIsOpen(true);\n setLastDraggableType(\"modal\");\n },\n [setIsOpen, setPosition, setSize, setShouldStartDragging],\n );\n\n const onClose = useCallback(() => {\n setIsOpen(false);\n // restore the modal if it is minimized when closing\n if (isMinimized) {\n setSize({ ...restoreSize });\n setPosition({ ...restorePosition });\n setIsMinimized(false);\n }\n }, [\n isMinimized,\n restoreSize,\n restorePosition,\n setIsMinimized,\n setIsOpen,\n setSize,\n setPosition,\n ]);\n\n return useMemo(\n () => ({\n isOpen,\n onOpen,\n onClose,\n }),\n [isOpen, onOpen, onClose],\n );\n}\n","\"use client\";\n\nimport { useCallback, useMemo } from \"react\";\nimport { useAtom, useSetAtom } from \"@liberfi.io/ui\";\nimport {\n lastDraggableTypeFamily,\n panelOrdersAtom,\n panelStateFamily,\n panelWidthFamily,\n} from \"./states\";\n\nexport type OpenDraggablePanelOptions = {\n /** which side the panel is docked on */\n position?: \"left\" | \"right\";\n /** adjust size of the modal when it is opened */\n width?: number;\n};\n\nexport type UseDraggablePanelDisclosureReturnType = {\n isOpen: boolean;\n position?: \"left\" | \"right\";\n onOpen: (options?: OpenDraggablePanelOptions) => void;\n onClose: () => void;\n};\n\nexport function useDraggablePanelDisclosure(\n id: string,\n): UseDraggablePanelDisclosureReturnType {\n const [panelState, setPanelState] = useAtom(panelStateFamily(id));\n const setPanelWidth = useSetAtom(panelWidthFamily(id));\n const setLastDraggableType = useSetAtom(lastDraggableTypeFamily(id));\n const setPanelOrders = useSetAtom(panelOrdersAtom);\n\n const onOpen = useCallback(\n (options: OpenDraggablePanelOptions = {}) => {\n const position = options.position ?? \"left\";\n setPanelWidth(options.width ?? 320);\n setPanelState(position);\n setLastDraggableType(position);\n setPanelOrders(({ left, right }) => {\n if (position === \"left\") {\n return { left: { ...left, [id]: Date.now() }, right };\n } else {\n return { left, right: { ...right, [id]: Date.now() } };\n }\n });\n },\n [id, setPanelState, setPanelWidth],\n );\n\n const onClose = useCallback(() => {\n setPanelState(\"none\");\n }, [setPanelState]);\n\n const isOpen = useMemo(() => panelState !== \"none\", [panelState]);\n\n const position = useMemo(\n () => (panelState !== \"none\" ? panelState : undefined),\n [panelState],\n );\n\n return useMemo(\n () => ({\n isOpen,\n position,\n onOpen,\n onClose,\n }),\n [isOpen, onOpen, onClose],\n );\n}\n","\"use client\";\n\nimport {\n memo,\n useState,\n useEffect,\n useRef,\n PropsWithChildren,\n useMemo,\n useCallback,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useCallbackRef, useValueRef } from \"@liberfi.io/hooks\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n Button,\n clsx,\n DraggableIcon,\n MaximizeIcon,\n MinimizeIcon,\n RestoreWindowIcon,\n StyledTooltip,\n UnMaximizeIcon,\n useAtom,\n useAtomValue,\n XCloseIcon,\n} from \"@liberfi.io/ui\";\nimport { throttle } from \"@liberfi.io/utils\";\nimport {\n modalMinimizedFamily,\n modalPositionFamily,\n modalRestorePositionFamily,\n modalRestoreSizeFamily,\n modalShouldStartDraggingFamily,\n modalSizeFamily,\n panelMaxWidthFamily,\n panelMinWidthFamily,\n} from \"./states\";\nimport { useDraggableModalDisclosure } from \"./useDraggableModalDisclosure\";\nimport { useDraggablePanelDisclosure } from \"./useDraggablePanelDisclosure\";\n\nconst MINIMIZED_SIZE = {\n width: 200,\n height: 48,\n};\n\nconst MAXIMIZED_SIZE = {\n width: typeof window !== \"undefined\" ? window.innerWidth - 40 : 0,\n height: typeof window !== \"undefined\" ? window.innerHeight - 40 : 0,\n};\n\nconst MAXIMIZED_POSITION = {\n x: 20,\n y: 20,\n};\n\ntype ResizeDirection =\n | \"topLeft\"\n | \"topRight\"\n | \"bottomLeft\"\n | \"bottomRight\"\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\";\n\nexport type DraggableModalProps = PropsWithChildren<{\n /** unique identifier for the modal, must be the same with the panel */\n id: string;\n /** title of the modal */\n title?: React.ReactNode;\n /** constraints for the minimum width */\n minWidth?: number;\n /** constraints for the maximum width */\n maxWidth?: number;\n /** constraints for the minimum height */\n minHeight?: number;\n /** constraints for the maximum height */\n maxHeight?: number;\n /** left sidebar of the modal */\n leftSidebar?: React.ReactNode;\n /** width of the left sidebar */\n leftSidebarWidth?: number;\n /** right sidebar of the modal */\n rightSidebar?: React.ReactNode;\n /** width of the right sidebar */\n rightSidebarWidth?: number;\n /** constraints for the aspect ratio when resizing */\n aspectRatio?: number;\n /** whether to show the header */\n showHeader?: boolean;\n /** custom header content */\n header?: React.ReactNode;\n /** height of the modal header */\n headerHeight?: number;\n}>;\n\nexport const DraggableModal = memo(function DraggablePopup({\n id,\n title,\n minWidth = 504,\n maxWidth = MAXIMIZED_SIZE.width,\n minHeight = 200,\n maxHeight = MAXIMIZED_SIZE.height,\n leftSidebar,\n leftSidebarWidth = 200,\n rightSidebar,\n rightSidebarWidth = 200,\n aspectRatio,\n showHeader = true,\n header,\n headerHeight = 44,\n children,\n}: DraggableModalProps) {\n const { t } = useTranslation();\n\n // control the open state of the modal\n const { isOpen, onClose } = useDraggableModalDisclosure(id);\n\n // control the open state of the panel\n const { onOpen: onOpenPanel } = useDraggablePanelDisclosure(id);\n\n // whether the modal is minimized\n const [isMinimized, setIsMinimized] = useAtom(modalMinimizedFamily(id));\n\n // latest position\n const [position, setPosition] = useAtom(modalPositionFamily(id));\n\n // latest modal size\n const [size, setSize] = useAtom(modalSizeFamily(id));\n\n // restore size when maximized or minimized\n const [restoreSize, setRestoreSize] = useAtom(modalRestoreSizeFamily(id));\n\n // restore position when maximized or minimized\n const [restorePosition, setRestorePosition] = useAtom(\n modalRestorePositionFamily(id),\n );\n\n // start dragging automatically when the component is mounted\n const [shouldStartDragging, setShouldStartDragging] = useAtom(\n modalShouldStartDraggingFamily(id),\n );\n\n // whether the modal is being dragged\n const [isDragging, setIsDragging] = useState(shouldStartDragging);\n\n // whether the modal is being resized\n const [isResizing, setIsResizing] = useState(false);\n\n // direction of the resize\n const [resizeDirection, setResizeDirection] =\n useState<ResizeDirection | null>(null);\n\n // which edge is the modal near\n const [currentEdge, setCurrentEdge] = useState<\"left\" | \"right\" | null>(null);\n\n // which edge to display docking animation\n const [dockAnimationEdge, setDockAnimationEdge] = useState<\n \"left\" | \"right\" | null\n >(null);\n\n // which edge is waiting for the timeout to dock on\n const [dockToEdge, setDockToEdge] = useState<\"left\" | \"right\" | null>(null);\n\n // timeout for docking to the edge\n const dockToEdgeTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const panelMinWidth = useAtomValue(panelMinWidthFamily(id));\n\n const panelMaxWidth = useAtomValue(panelMaxWidthFamily(id));\n\n // refs for props & states to avoid re-rendering\n const positionRef = useValueRef(position);\n const setPositionRef = useCallbackRef(setPosition);\n const sizeRef = useValueRef(size);\n const setSizeRef = useCallbackRef(setSize);\n const leftSidebarWidthRef = useValueRef(leftSidebarWidth);\n const hasLeftSidebarRef = useValueRef(!!leftSidebar);\n const rightSidebarWidthRef = useValueRef(rightSidebarWidth);\n const hasRightSidebarRef = useValueRef(!!rightSidebar);\n const aspectRatioRef = useValueRef(aspectRatio);\n const headerHeightRef = useValueRef(headerHeight);\n const minWidthRef = useValueRef(minWidth);\n const maxWidthRef = useValueRef(maxWidth);\n const minHeightRef = useValueRef(minHeight);\n const maxHeightRef = useValueRef(maxHeight);\n const isDraggingRef = useValueRef(isDragging);\n const currentEdgeRef = useValueRef(currentEdge);\n const dockToEdgeRef = useValueRef(dockToEdge);\n const onCloseRef = useCallbackRef(onClose);\n const onOpenPanelRef = useCallbackRef(onOpenPanel);\n const panelMinWidthRef = useValueRef(panelMinWidth);\n const panelMaxWidthRef = useValueRef(panelMaxWidth);\n\n // whether the modal is maximized\n const isMaximized = useMemo(\n () =>\n size.width === MAXIMIZED_SIZE.width &&\n size.height === MAXIMIZED_SIZE.height,\n [size.width, size.height],\n );\n\n // adjust position to the boundary when the component is mounted\n useEffect(() => {\n if (position.x < 0 || position.y < 0) {\n setPositionRef({\n x: Math.max(0, position.x),\n y: Math.max(0, position.y),\n });\n }\n const right = position.x + size.width;\n const bottom = position.y + size.height;\n if (right > window.innerWidth || bottom > window.innerHeight) {\n setPositionRef({\n x: Math.min(position.x, Math.max(0, window.innerWidth - size.width)),\n y: Math.min(position.y, Math.max(0, window.innerHeight - size.height)),\n });\n }\n }, [id]);\n\n // start dragging automatically when the component is mounted, just follow the mouse movement\n useEffect(() => {\n if (isOpen && shouldStartDragging) {\n setIsDragging(true);\n\n const handleMouseMove = (e: MouseEvent) => {\n setPositionRef({\n x: e.clientX - size.width / 2,\n y: e.clientY - 20,\n });\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n // finish start dragging\n setShouldStartDragging(false);\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.body.style.cursor = \"grabbing\";\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.body.style.cursor = \"\";\n };\n }\n }, [isOpen, shouldStartDragging, setShouldStartDragging, size.width]);\n\n const startInteraction = (\n e: React.MouseEvent,\n interactionType: \"drag\" | \"resize\",\n direction?: ResizeDirection,\n ) => {\n // user interaction starts, stop auto-dragging which is triggered when the component is mounted\n setShouldStartDragging(false);\n\n // reset states\n setIsDragging(false);\n setIsResizing(false);\n setResizeDirection(null);\n\n // set states according to interaction type\n if (interactionType === \"drag\") {\n setIsDragging(true);\n } else if (interactionType === \"resize\") {\n setResizeDirection(direction || null);\n setIsResizing(true);\n }\n\n // save start position and size in closure\n const startX = e.clientX;\n const startY = e.clientY;\n const startWidth = sizeRef.current.width;\n const startHeight = sizeRef.current.height;\n const startPosition = { ...positionRef.current };\n\n const cleanup = () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.body.style.cursor = \"\";\n\n setIsDragging(false);\n setIsResizing(false);\n setResizeDirection(null);\n setCurrentEdge(null);\n\n if (dockToEdgeTimeoutRef.current) {\n clearTimeout(dockToEdgeTimeoutRef.current);\n dockToEdgeTimeoutRef.current = null;\n }\n setDockToEdge(null);\n setDockAnimationEdge(null);\n };\n\n const handleMouseMove = (e: MouseEvent) => {\n if (interactionType === \"drag\") {\n const deltaX = e.clientX - startX;\n const deltaY = e.clientY - startY;\n let newX = startPosition.x + deltaX;\n let newY = startPosition.y + deltaY;\n\n // calculate boundaries\n const leftOffset = hasLeftSidebarRef.current\n ? leftSidebarWidthRef.current\n : 0;\n const minX = 12 + leftOffset;\n\n const rightOffset = hasRightSidebarRef.current\n ? rightSidebarWidthRef.current\n : 0;\n const maxX = window.innerWidth - 12 - startWidth - rightOffset;\n\n // display 44px for header\n const maxY = window.innerHeight - 12 - 44;\n\n // check if near the edge\n const edge = newX <= minX ? \"left\" : newX >= maxX ? \"right\" : null;\n if (edge !== currentEdgeRef.current) {\n setCurrentEdge(edge);\n }\n\n // if is waiting for the timeout to dock on the edge, display the animation\n if (dockToEdgeTimeoutRef.current && edge) {\n setDockAnimationEdge(edge);\n }\n\n // interrupt the timeout if the modal is moved away from the edge\n if (dockToEdgeTimeoutRef.current) {\n if (\n (dockToEdgeRef.current === \"left\" &&\n (newX > minX || edge !== \"left\")) ||\n (dockToEdgeRef.current === \"right\" &&\n (newX < maxX || edge !== \"right\"))\n ) {\n clearTimeout(dockToEdgeTimeoutRef.current);\n dockToEdgeTimeoutRef.current = null;\n setDockToEdge(null);\n setDockAnimationEdge(null);\n }\n }\n\n // wait for the timeout to dock on the edge\n if (!dockToEdgeTimeoutRef.current && edge) {\n if (dockToEdgeRef.current !== edge) {\n setDockToEdge(edge);\n setDockAnimationEdge(edge);\n dockToEdgeTimeoutRef.current = setTimeout(() => {\n if (isDraggingRef.current && currentEdgeRef.current === edge) {\n // still dragging & near the edge, convert to panel\n cleanup();\n // close modal\n onCloseRef();\n // open panel\n onOpenPanelRef({\n position: edge,\n width: Math.min(\n Math.max(sizeRef.current.width, panelMinWidthRef.current),\n panelMaxWidthRef.current,\n ),\n });\n } else {\n setDockToEdge(null);\n }\n }, 350);\n }\n }\n\n // limit within the boundaries\n newX = Math.min(Math.max(newX, 12 + leftOffset), maxX);\n newY = Math.min(Math.max(newY, 12), maxY);\n setPositionRef({ x: newX, y: newY });\n } else if (interactionType === \"resize\" && direction) {\n const deltaX = e.clientX - startX;\n const deltaY = e.clientY - startY;\n\n // calculate new size (considering aspect ratio)\n const calculateNewSize = (\n width: number,\n height: number,\n constraint: \"width\" | \"height\" | \"both\",\n ) => {\n let newWidth = Math.min(\n Math.max(width, minWidthRef.current),\n maxWidthRef.current,\n );\n let newHeight = Math.min(\n Math.max(height, minHeightRef.current),\n maxHeightRef.current,\n );\n\n if (aspectRatioRef.current) {\n if (constraint === \"width\") {\n newHeight = Math.min(\n Math.max(\n width / aspectRatioRef.current + headerHeightRef.current,\n minHeightRef.current,\n ),\n maxHeightRef.current,\n );\n newWidth =\n (newHeight - headerHeightRef.current) * aspectRatioRef.current;\n } else if (constraint === \"height\") {\n newWidth = Math.min(\n Math.max(\n (height - headerHeightRef.current) * aspectRatioRef.current,\n minWidthRef.current,\n ),\n maxWidthRef.current,\n );\n newHeight =\n newWidth / aspectRatioRef.current + headerHeightRef.current;\n } else {\n const widthBasedHeight =\n width / aspectRatioRef.current + headerHeightRef.current;\n const heightBasedWidth =\n (height - headerHeightRef.current) * aspectRatioRef.current;\n const absDeltaX = Math.abs(deltaX);\n const absDeltaY = Math.abs(deltaY);\n\n if (absDeltaX > 1.1 * absDeltaY) {\n newHeight = Math.min(\n Math.max(widthBasedHeight, minHeightRef.current),\n maxHeightRef.current,\n );\n newWidth =\n (newHeight - headerHeightRef.current) *\n aspectRatioRef.current;\n } else if (absDeltaY > 1.1 * absDeltaX) {\n newWidth = Math.min(\n Math.max(heightBasedWidth, minWidthRef.current),\n maxWidthRef.current,\n );\n newHeight =\n newWidth / aspectRatioRef.current + headerHeightRef.current;\n } else {\n const avgHeight = (newHeight + widthBasedHeight) / 2;\n newWidth = Math.min(\n Math.max(\n (newWidth + heightBasedWidth) / 2,\n minWidthRef.current,\n ),\n maxWidthRef.current,\n );\n newHeight = Math.min(\n Math.max(avgHeight, minHeightRef.current),\n maxHeightRef.current,\n );\n newWidth =\n (newHeight - headerHeightRef.current) *\n aspectRatioRef.current;\n }\n }\n\n newWidth = Math.min(\n Math.max(newWidth, minWidthRef.current),\n maxWidthRef.current,\n );\n newHeight = Math.min(\n Math.max(newHeight, minHeightRef.current),\n maxHeightRef.current,\n );\n }\n\n return { width: newWidth, height: newHeight };\n };\n\n // handle the resize direction\n switch (direction) {\n case \"topLeft\": {\n const newSize = calculateNewSize(\n startWidth - deltaX,\n startHeight - deltaY,\n \"both\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x + (startWidth - newSize.width),\n y: startPosition.y + (startHeight - newSize.height),\n });\n break;\n }\n case \"topRight\": {\n const newSize = calculateNewSize(\n startWidth + deltaX,\n startHeight - deltaY,\n \"both\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x,\n y: startPosition.y + (startHeight - newSize.height),\n });\n break;\n }\n case \"bottomLeft\": {\n const newSize = calculateNewSize(\n startWidth - deltaX,\n startHeight + deltaY,\n \"both\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x + (startWidth - newSize.width),\n y: startPosition.y,\n });\n break;\n }\n case \"bottomRight\": {\n setSizeRef(\n calculateNewSize(\n startWidth + deltaX,\n startHeight + deltaY,\n \"both\",\n ),\n );\n break;\n }\n case \"top\": {\n const newSize = calculateNewSize(\n startWidth,\n startHeight - deltaY,\n \"height\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x,\n y: startPosition.y + (startHeight - newSize.height),\n });\n break;\n }\n case \"bottom\": {\n setSizeRef(\n calculateNewSize(startWidth, startHeight + deltaY, \"height\"),\n );\n break;\n }\n case \"left\": {\n const newSize = calculateNewSize(\n startWidth - deltaX,\n startHeight,\n \"width\",\n );\n setSizeRef(newSize);\n setPositionRef({\n x: startPosition.x + (startWidth - newSize.width),\n y: startPosition.y,\n });\n break;\n }\n case \"right\": {\n setSizeRef(\n calculateNewSize(startWidth + deltaX, startHeight, \"width\"),\n );\n break;\n }\n }\n }\n };\n\n const handleMouseUp = () => {\n // limit the position within the boundaries\n if (position.x < 0 || position.y < 0) {\n setPositionRef({\n x: Math.max(0, position.x),\n y: Math.max(0, position.y),\n });\n }\n cleanup();\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n };\n\n const handleMinimize = useCallback(() => {\n if (isMinimized) {\n // already minimized, restore to the previous size and position\n setSizeRef({ ...restoreSize });\n setPositionRef({ ...restorePosition });\n setIsMinimized(false);\n } else {\n // minimize\n if (isMaximized) {\n // if minimized from maximized directly, use the size and position which is stored before maximized\n setPositionRef({ ...restorePosition });\n } else {\n // otherwise store the current size and position\n setRestoreSize({ ...size });\n setRestorePosition({ ...position });\n }\n setSizeRef({ ...MINIMIZED_SIZE });\n setIsMinimized(true);\n }\n }, [\n isMinimized,\n isMaximized,\n size,\n position,\n restoreSize,\n restorePosition,\n setIsMinimized,\n setRestoreSize,\n setRestorePosition,\n ]);\n\n const handleMaximize = useCallback(() => {\n if (isMaximized) {\n // already maximized, restore to the previous size and position\n setSizeRef({ ...restoreSize });\n setPositionRef({ ...restorePosition });\n } else {\n // maximize\n if (isMinimized) {\n // if maximized from minimized directly, use the stored size and position before minimized\n setIsMinimized(false);\n } else {\n // otherwise store the current size and position\n setRestoreSize({ ...size });\n setRestorePosition({ ...position });\n }\n setSizeRef({ ...MAXIMIZED_SIZE });\n setPositionRef({ ...MAXIMIZED_POSITION });\n }\n }, [\n isMaximized,\n isMinimized,\n size,\n position,\n restoreSize,\n restorePosition,\n setIsMinimized,\n setRestoreSize,\n setRestorePosition,\n ]);\n\n // adjust position to the boundary when the window is resized\n useEffect(() => {\n const handleResize = throttle(() => {\n if (positionRef.current.x < 0 || positionRef.current.y < 0) {\n setPositionRef({\n x: Math.max(0, positionRef.current.x),\n y: Math.max(0, positionRef.current.y),\n });\n }\n const right = positionRef.current.x + sizeRef.current.width;\n const bottom = positionRef.current.y + sizeRef.current.height;\n if (right > window.innerWidth || bottom > window.innerHeight) {\n setPositionRef({\n x: Math.min(\n positionRef.current.x,\n Math.max(0, window.innerWidth - sizeRef.current.width),\n ),\n y: Math.min(\n positionRef.current.y,\n Math.max(0, window.innerHeight - sizeRef.current.height),\n ),\n });\n }\n }, 100);\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <>\n {/* Overlay when dragging or resizing */}\n {(isDragging || isResizing) &&\n createPortal(\n <div\n className={clsx(\n \"max-sm:hidden fixed inset-0 z-9999 bg-transparent w-full h-full select-none\",\n isDragging && (dockToEdge ? \"cursor-grabbing\" : \"cursor-move\"),\n !isDragging && {\n \"cursor-ns-resize\":\n resizeDirection === \"top\" || resizeDirection === \"bottom\",\n \"cursor-ew-resize\":\n resizeDirection === \"left\" || resizeDirection === \"right\",\n \"cursor-nwse-resize\":\n resizeDirection === \"topLeft\" ||\n resizeDirection === \"bottomRight\",\n \"cursor-nesw-resize\":\n resizeDirection === \"topRight\" ||\n resizeDirection === \"bottomLeft\",\n \"cursor-auto\": resizeDirection === null,\n },\n )}\n />,\n document.body,\n )}\n\n {/* Modal container */}\n <div\n className={clsx(\n \"max-sm:hidden fixed z-50 left-0 top-0\",\n isDragging ? \"will-change-transform\" : \"will-change-auto\",\n isResizing || isDragging\n ? \"transition-none\"\n : \"transition-transform duration-250 ease-[cubic-bezier(0.16,1,0.3,1)]\",\n )}\n style={{\n transform: `translate(${Math.round(position.x - (leftSidebar ? leftSidebarWidth : 0))}px, ${Math.round(position.y)}px)`,\n }}\n >\n <div className=\"flex relative z-50\">\n {leftSidebar && (\n <div\n className={clsx(\n \"relative mt-1 z-10 transition-all duration-250 ease-[cubic-bezier(0.16,1,0.3,1)]\",\n isDragging\n ? \"opacity-40 translate-x-4\"\n : \"opacity-100 translate-x-0\",\n )}\n style={{\n width: leftSidebarWidth,\n height: isMinimized ? 40 : size.height - 8,\n }}\n >\n {leftSidebar}\n </div>\n )}\n\n {/* modal content */}\n <div\n className={clsx(\n \"z-50 relative bg-content1 border border-border rounded-lg overflow-hidden\",\n isDragging\n ? \"opacity-80 shadow-md scale-102 blur-[0.5px]\"\n : \"opacity-100 shadow-lg scale-100 blur-none\",\n )}\n style={{\n width: size.width,\n height: size.height,\n transition:\n isResizing || isDragging\n ? \"none\"\n : \"transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s cubic-bezier(0.33, 1, 0.68, 1), height 0.25s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s cubic-bezier(0.33, 1, 0.68, 1)\",\n contain: \"content\",\n }}\n >\n <div\n className={clsx(\n \"w-full h-full\",\n dockAnimationEdge && \"animate-modal-shrink\",\n dockAnimationEdge === \"left\" ? \"origin-left\" : \"origin-right\",\n )}\n style={{ contain: \"paint\" }}\n >\n {/* resize handles */}\n {!isMinimized && (\n <>\n <div\n className=\"absolute top-0 left-0 w-3 h-3 cursor-nw-resize z-20\"\n onMouseDown={(e) =>\n startInteraction(e, \"resize\", \"topLeft\")\n }\n />\n <div\n className=\"absolute top-0 right-0 w-3 h-3 cursor-ne-resize z-20\"\n onMouseDown={(e) =>\n startInteraction(e, \"resize\", \"topRight\")\n }\n />\n <div\n className=\"absolute bottom-0 left-0 w-3 h-3 cursor-sw-resize z-20\"\n onMouseDown={(e) =>\n startInteraction(e, \"resize\", \"bottomLeft\")\n }\n />\n <div\n className=\"absolute bottom-0 right-0 w-3 h-3 cursor-se-resize z-20\"\n onMouseDown={(e) =>\n startInteraction(e, \"resize\", \"bottomRight\")\n }\n />\n <div\n className=\"absolute top-0 left-3 right-3 h-1.5 cursor-n-resize z-20\"\n onMouseDown={(e) => startInteraction(e, \"resize\", \"top\")}\n />\n <div\n className=\"absolute bottom-0 left-3 right-3 h-1.5 cursor-s-resize z-20\"\n onMouseDown={(e) => startInteraction(e, \"resize\", \"bottom\")}\n />\n <div\n className=\"absolute left-0 top-3 bottom-3 w-1.5 cursor-w-resize z-20\"\n onMouseDown={(e) => startInteraction(e, \"resize\", \"left\")}\n />\n <div\n className=\"absolute right-0 top-3 bottom-3 w-1.5 cursor-e-resize z-20\"\n onMouseDown={(e) => startInteraction(e, \"resize\", \"right\")}\n />\n </>\n )}\n\n {/* header */}\n {showHeader && (\n <div\n className=\"relative border-b border-border/80 px-3 gap-4 flex items-center justify-between cursor-move select-none\"\n onMouseDown={(e) => startInteraction(e, \"drag\")}\n style={{ height: headerHeight }}\n >\n {/* drag tooltip */}\n <StyledTooltip\n placement=\"top\"\n closeDelay={0}\n content={t(\"scaffold.draggableModal.snapToEdge\")}\n >\n <DraggableIcon className=\"text-neutral absolute left-1/2 -translate-x-1/2 top-0\" />\n </StyledTooltip>\n\n {header || (\n <>\n <div\n className=\"min-w-0 flex-initial text-sm font-medium truncate cursor-auto\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n {title}\n </div>\n <div\n className=\"flex-none flex items-center justify-end gap-1\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n {/* minimize button */}\n <Button\n size=\"sm\"\n variant=\"light\"\n radius=\"lg\"\n isIconOnly\n onPress={handleMinimize}\n >\n {isMinimized ? (\n <RestoreWindowIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n ) : (\n <MinimizeIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n )}\n </Button>\n {/* maximize button */}\n <Button\n size=\"sm\"\n variant=\"light\"\n radius=\"lg\"\n isIconOnly\n onPress={handleMaximize}\n >\n {isMaximized ? (\n <UnMaximizeIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n ) : (\n <MaximizeIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n )}\n </Button>\n {/* close button */}\n <Button\n size=\"sm\"\n variant=\"light\"\n radius=\"lg\"\n isIconOnly\n onPress={onClose}\n >\n <XCloseIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n </Button>\n </div>\n </>\n )}\n </div>\n )}\n\n {/* content */}\n {!isMinimized && (\n <div\n className={\n showHeader\n ? \"h-[calc(100%-44px)] overflow-x-hidden overflow-y-auto\"\n : \"h-full overflow-x-hidden overflow-y-auto cursor-move\"\n }\n onMouseDown={\n showHeader ? undefined : (e) => startInteraction(e, \"drag\")\n }\n >\n {children}\n </div>\n )}\n </div>\n </div>\n\n {rightSidebar && (\n <div\n className={clsx(\n \"relative mt-1 z-10 transition-all duration-250 ease-[cubic-bezier(0.16,1,0.3,1)]\",\n isDragging\n ? \"opacity-40 -translate-x-4\"\n : \"opacity-100 translate-x-0\",\n )}\n style={{\n width: rightSidebarWidth,\n height: isMinimized ? 40 : size.height - 8,\n }}\n >\n {rightSidebar}\n </div>\n )}\n </div>\n </div>\n </>\n );\n});\n","\"use client\";\n\nimport { useState, PropsWithChildren } from \"react\";\nimport { useCallbackRef, useValueRef } from \"@liberfi.io/hooks\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n Button,\n clsx,\n DraggableIcon,\n StyledTooltip,\n useAtom,\n useAtomValue,\n XCloseIcon,\n} from \"@liberfi.io/ui\";\nimport {\n modalMaxWidthFamily,\n modalMinWidthFamily,\n panelStateFamily,\n panelWidthFamily,\n} from \"./states\";\nimport { useDraggableModalDisclosure } from \"./useDraggableModalDisclosure\";\nimport { useDraggablePanelDisclosure } from \"./useDraggablePanelDisclosure\";\n\nexport type DraggablePanelProps = PropsWithChildren<{\n /** unique id for the panel, must be the same with the modal */\n id: string;\n /** title of the modal */\n title?: React.ReactNode;\n /** maximum width of the panel */\n maxWidth?: number;\n /** minimum width of the panel */\n minWidth?: number;\n /** which side the panel is docked on */\n position: \"left\" | \"right\";\n /** whether to show the header */\n showHeader?: boolean;\n /** custom header content */\n header?: React.ReactNode;\n /** height of the modal header */\n headerHeight?: number;\n}>;\n\nexport function DraggablePanel({\n id,\n title,\n maxWidth = 440,\n minWidth = 320,\n position,\n showHeader = true,\n header,\n headerHeight = 44,\n children,\n}: DraggablePanelProps) {\n const { t } = useTranslation();\n\n // whether the panel is docked or not\n const panelState = useAtomValue(panelStateFamily(id));\n\n // whether the panel is being resized or not\n const [isResizing, setIsResizing] = useState(false);\n\n // whether the panel is being dragged or not\n const [isDragging, setIsDragging] = useState(false);\n\n // panel width\n const [width, setWidth] = useAtom(panelWidthFamily(id));\n\n // converting to modal\n const { onOpen: openModal } = useDraggableModalDisclosure(id);\n\n // control the close state of the panel\n const { onClose: closePanel } = useDraggablePanelDisclosure(id);\n\n const modalMinWidth = useAtomValue(modalMinWidthFamily(id));\n\n const modalMaxWidth = useAtomValue(modalMaxWidthFamily(id));\n\n // refs for props & states to avoid re-rendering\n const widthRef = useValueRef(width);\n const maxWidthRef = useValueRef(maxWidth);\n const minWidthRef = useValueRef(minWidth);\n const positionRef = useValueRef(position);\n const isResizingRef = useValueRef(isResizing);\n const isDraggingRef = useValueRef(isDragging);\n const setWidthRef = useCallbackRef(setWidth);\n const openModalRef = useCallbackRef(openModal);\n const closePanelRef = useCallbackRef(closePanel);\n const modalMinWidthRef = useValueRef(modalMinWidth);\n const modalMaxWidthRef = useValueRef(modalMaxWidth);\n\n const handleResizeStart = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsResizing(true);\n document.body.style.cursor = \"ew-resize\";\n document.body.style.userSelect = \"none\";\n document.body.style.overflow = \"hidden\";\n document.body.style.position = \"fixed\";\n document.body.style.width = \"100%\";\n document.body.style.height = \"100%\";\n\n // save start size & position in closure\n const startX = e.clientX;\n const startWidth = widthRef.current;\n\n const onResize = (e: MouseEvent) => {\n if (!isResizingRef.current) return;\n\n const deltaX = e.clientX - startX;\n\n const distance =\n positionRef.current === \"right\"\n ? startWidth - deltaX\n : startWidth + deltaX;\n\n const width = Math.min(\n Math.max(distance, minWidthRef.current),\n maxWidthRef.current,\n );\n setWidthRef(width);\n };\n\n const onResizeEnd = () => {\n setIsResizing(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n document.body.style.overflow = \"\";\n document.body.style.position = \"\";\n document.body.style.width = \"\";\n document.body.style.height = \"\";\n document.removeEventListener(\"mousemove\", onResize);\n document.removeEventListener(\"mouseup\", onResizeEnd);\n };\n\n document.addEventListener(\"mousemove\", onResize);\n document.addEventListener(\"mouseup\", onResizeEnd);\n };\n\n const handleDragStart = (e: React.MouseEvent) => {\n // if the target is a button, don't trigger drag\n if (e.target instanceof HTMLElement && e.target.closest(\"button\")) {\n return;\n }\n e.preventDefault();\n\n setIsDragging(true);\n\n // save start position in closure\n const startX = e.clientX;\n const startY = e.clientY;\n\n const cleanup = () => {\n document.removeEventListener(\"mousemove\", onDragMove);\n document.removeEventListener(\"mouseup\", onDragEnd);\n setIsDragging(false);\n };\n\n const onDragMove = (e: MouseEvent) => {\n if (!isDraggingRef.current) return;\n\n const deltaX = Math.abs(e.clientX - startX);\n const deltaY = Math.abs(e.clientY - startY);\n\n // if the drag distance is greater than 10px, convert to modal\n if (deltaX > 10 || deltaY > 10) {\n cleanup();\n // close the panel\n closePanelRef();\n // open the modal\n openModalRef({\n // modal should follow the cursor\n shouldStartDragging: true,\n position: {\n x: e.clientX - widthRef.current / 2 + 20,\n y: e.clientY - 20,\n },\n // adjust modal's width to the panel's width\n size: {\n width: Math.min(\n Math.max(widthRef.current, modalMinWidthRef.current),\n modalMaxWidthRef.current,\n ),\n },\n });\n }\n };\n\n const onDragEnd = () => {\n cleanup();\n };\n\n document.addEventListener(\"mousemove\", onDragMove);\n document.addEventListener(\"mouseup\", onDragEnd);\n };\n\n const handleClose = () => {\n closePanelRef();\n };\n\n if (panelState !== position) {\n return null;\n }\n\n return (\n <div className=\"max-sm:hidden flex-none flex flex-row overflow-hidden\">\n {/* when the panel is on the right, show the resize handle on the left */}\n {position === \"right\" && (\n <ResizeHandle\n isResizing={isResizing}\n handleResizeStart={handleResizeStart}\n />\n )}\n\n {/* panel content container */}\n <div\n className={clsx(\n \"flex flex-col min-h-0 overflow-hidden bg-content1\",\n isDragging\n ? \"opacity-80 scale-98 blur-[1px]\"\n : \"opacity-100 scale-100 blur-none\",\n )}\n style={{\n width: `${width}px`,\n transition:\n isResizing || isDragging\n ? \"none\"\n : \"transform 0.4s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s cubic-bezier(0.33, 1, 0.68, 1), height 0.4s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s cubic-bezier(0.33, 1, 0.68, 1)\",\n contain: \"content\",\n }}\n >\n {/* header */}\n {showHeader && (\n <div\n className=\"flex-none relative border-b border-border/80 px-3 gap-4 flex items-center justify-between cursor-move select-none\"\n onMouseDown={handleDragStart}\n style={{ height: headerHeight }}\n >\n {/* drag tooltip */}\n <StyledTooltip\n placement=\"top\"\n closeDelay={0}\n content={t(\"scaffold.draggablePanel.snapToModal\")}\n >\n <DraggableIcon className=\"text-neutral absolute left-1/2 -translate-x-1/2 top-0\" />\n </StyledTooltip>\n\n {header || (\n <>\n <div\n className=\"min-w-0 flex-initial text-sm font-medium truncate cursor-auto\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n {title}\n </div>\n <div\n className=\"flex-none flex items-center justify-end gap-1\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n {/* close button */}\n <Button\n size=\"sm\"\n variant=\"light\"\n radius=\"lg\"\n isIconOnly\n onPress={handleClose}\n >\n <XCloseIcon\n width={18}\n height={18}\n className=\"text-neutral\"\n />\n </Button>\n </div>\n </>\n )}\n </div>\n )}\n\n <div className=\"flex-auto min-h-0 overflow-y-auto\">{children}</div>\n </div>\n\n {/* when the panel is on the left, show the resize handle on the right */}\n {position === \"left\" && (\n <ResizeHandle\n isResizing={isResizing}\n handleResizeStart={handleResizeStart}\n />\n )}\n </div>\n );\n}\n\ntype ResizeHandleProps = {\n isResizing: boolean;\n handleResizeStart: (e: React.MouseEvent) => void;\n};\n\nfunction ResizeHandle({ isResizing, handleResizeStart }: ResizeHandleProps) {\n return (\n <div className=\"relative\">\n <div className=\"relative w-1 h-full cursor-ew-resize bg-border/80 hover:bg-border transition-colors duration-150 ease-in-out group flex flex-col items-center justify-center gap-1\">\n <i className=\"rounded-full w-0.5 h-0.5 bg-neutral\" />\n <i className=\"rounded-full w-0.5 h-0.5 bg-neutral\" />\n <i className=\"rounded-full w-0.5 h-0.5 bg-neutral\" />\n\n {/* expend click area */}\n <div\n className=\"absolute inset-0 -left-1.5 -right-1.5 cursor-ew-resize\"\n onMouseDown={handleResizeStart}\n />\n </div>\n\n {isResizing && <div className=\"fixed inset-0 z-50 cursor-ew-resize\" />}\n </div>\n );\n}\n","\"use client\";\n\nimport { PropsWithChildren, useEffect, useMemo } from \"react\";\nimport { clsx, getDefaultStore, useAtomValue } from \"@liberfi.io/ui\";\nimport { DraggableModal } from \"./DraggableModal\";\nimport { DraggablePanel } from \"./DraggablePanel\";\nimport {\n modalMaxWidthFamily,\n modalMinWidthFamily,\n panelMaxWidthFamily,\n panelMinWidthFamily,\n panelOrdersAtom,\n panelStateFamily,\n} from \"./states\";\n\nexport type DraggableContentProps = PropsWithChildren<{\n /** unique identifier for both the modal & panel */\n id: string;\n /** title of both the modal & panel */\n title?: React.ReactNode;\n /** whether to show the header for both the modal & panel */\n showHeader?: boolean;\n /** custom header content for both the modal & panel */\n header?: React.ReactNode;\n /** height of the modal header for both the modal & panel */\n headerHeight?: number;\n /** constraints for the minimum width of the modal */\n modalMinWidth?: number;\n /** constraints for the maximum width of the modal */\n modalMaxWidth?: number;\n /** constraints for the minimum width of the panel */\n panelMinWidth?: number;\n /** constraints for the maximum width of the panel */\n panelMaxWidth?: number;\n /** constraints for the minimum height of the modal */\n minHeight?: number;\n /** constraints for the maximum height of the modal */\n maxHeight?: number;\n /** left sidebar of the modal */\n leftSidebar?: React.ReactNode;\n /** width of the left sidebar */\n leftSidebarWidth?: number;\n /** right sidebar of the modal */\n rightSidebar?: React.ReactNode;\n /** width of the right sidebar */\n rightSidebarWidth?: number;\n /** constraints for the aspect ratio when resizing modal */\n aspectRatio?: number;\n}>;\n\nexport type DraggablePanelProviderProps = PropsWithChildren<{\n /** draggable contents */\n contents?: Array<DraggableContentProps>;\n /** root container class name */\n className?: string;\n /** class names slots*/\n classNames?: {\n root?: string;\n left?: string;\n right?: string;\n content?: string;\n };\n}>;\n\nexport function DraggablePanelProvider({\n contents = [],\n className,\n classNames,\n children,\n}: DraggablePanelProviderProps) {\n const panelOrders = useAtomValue(panelOrdersAtom);\n\n // sync panel & order widths\n useEffect(() => {\n const store = getDefaultStore();\n contents.forEach((content) => {\n store.set(panelMinWidthFamily(content.id), content.panelMinWidth ?? 320);\n store.set(panelMaxWidthFamily(content.id), content.panelMaxWidth ?? 440);\n store.set(modalMinWidthFamily(content.id), content.modalMinWidth ?? 504);\n store.set(\n modalMaxWidthFamily(content.id),\n content.modalMaxWidth ?? window.innerWidth - 40,\n );\n });\n }, [contents]);\n\n // latest opened on the left\n const leftOpenPanels = useMemo(\n () =>\n contents\n .filter((content) => {\n const store = getDefaultStore();\n // hasn't been opened on the left\n if (!panelOrders.left[content.id]) return false;\n // whether the panel is opened on the left\n return store.get(panelStateFamily(content.id)) === \"left\";\n })\n .sort((a, b) => panelOrders.left[b.id] - panelOrders.left[a.id]),\n [contents, panelOrders.left],\n );\n\n // latest opened on the right\n const rightOpenPanels = useMemo(\n () =>\n contents\n .filter((content) => {\n const store = getDefaultStore();\n // hasn't been opened on the right\n if (!panelOrders.right[content.id]) return false;\n // whether the panel is opened on the right\n return store.get(panelStateFamily(content.id)) === \"right\";\n })\n .sort(\n (a, b) =>\n (panelOrders.right[a.id] ?? 0) - (panelOrders.right[b.id] ?? 0),\n ),\n [contents, panelOrders.right],\n );\n\n return (\n <>\n <div\n className={clsx(\n \"w-full h-full flex flex-row overflow-hidden\",\n className,\n classNames?.root,\n )}\n >\n {/* left panels */}\n <div\n className={clsx(\"flex-none h-full flex flex-row\", classNames?.left)}\n >\n {leftOpenPanels.map((props) => (\n <DraggablePanel\n key={`left-${props.id}`}\n {...props}\n position=\"left\"\n minWidth={props.panelMinWidth ?? 320}\n maxWidth={props.panelMaxWidth ?? 440}\n />\n ))}\n </div>\n {/* main content */}\n <div className={clsx(\"flex-auto min-w-0 h-full\", classNames?.content)}>\n {children}\n </div>\n {/* right panels */}\n <div\n className={clsx(\"flex-none h-full flex flex-row\", classNames?.right)}\n >\n {rightOpenPanels.map((props) => (\n <DraggablePanel\n key={`right-${props.id}`}\n {...props}\n position=\"right\"\n minWidth={props.panelMinWidth ?? 320}\n maxWidth={props.panelMaxWidth ?? 440}\n />\n ))}\n </div>\n </div>\n {/* modals */}\n {contents.map((props) => (\n <DraggableModal\n key={`modal-${props.id}`}\n {...props}\n minWidth={props.modalMinWidth ?? 504}\n maxWidth={props.modalMaxWidth ?? window.innerWidth - 40}\n />\n ))}\n </>\n );\n}\n","\"use client\";\n\nimport { useCallback, useMemo } from \"react\";\nimport { useAtomValue } from \"@liberfi.io/ui\";\nimport { lastDraggableTypeFamily } from \"./states\";\nimport { useDraggableModalDisclosure } from \"./useDraggableModalDisclosure\";\nimport { useDraggablePanelDisclosure } from \"./useDraggablePanelDisclosure\";\n\nexport type UseDraggableDisclosureReturnType = {\n isOpen: boolean;\n onOpen: () => void;\n onClose: () => void;\n};\n\nexport function useDraggableDisclosure(\n id: string,\n): UseDraggableDisclosureReturnType {\n const {\n isOpen: isModalOpen,\n onOpen: onOpenModal,\n onClose: onCloseModal,\n } = useDraggableModalDisclosure(id);\n\n const {\n isOpen: isPanelOpen,\n onOpen: onOpenPanel,\n onClose: onClosePanel,\n } = useDraggablePanelDisclosure(id);\n\n const lastDraggableType = useAtomValue(lastDraggableTypeFamily(id));\n\n const onOpen = useCallback(() => {\n if (isModalOpen || isPanelOpen) return;\n if (lastDraggableType === \"modal\") {\n onOpenModal();\n } else {\n onOpenPanel({ position: lastDraggableType });\n }\n }, [isModalOpen, isPanelOpen, lastDraggableType, onOpenModal, onOpenPanel]);\n\n const onClose = useCallback(() => {\n if (isModalOpen) {\n onCloseModal();\n } else if (isPanelOpen) {\n onClosePanel();\n }\n }, [isModalOpen, isPanelOpen, onCloseModal, onClosePanel]);\n\n const isOpen = useMemo(\n () => isModalOpen || isPanelOpen,\n [isModalOpen, isPanelOpen],\n );\n\n return useMemo(\n () => ({\n isOpen,\n onOpen,\n onClose,\n }),\n [isOpen, onOpen, onClose],\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type HeaderProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Header({ children, className }: HeaderProps) {\n return (\n <div\n className={clsx(\n \"max-sm:hidden flex-none w-full h-15 px-6 max-lg:px-4 gap-6 max-lg:gap-4 flex justify-between items-center border-b border-border bg-background\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type MobileHeaderProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function MobileHeader({ children, className }: MobileHeaderProps) {\n return (\n <div\n className={clsx(\n \"sm:hidden flex-none w-full h-11 px-2 flex justify-between items-center border-b border-border bg-background\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type FooterProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Footer({ children, className }: FooterProps) {\n return (\n <div\n className={clsx(\n \"sm:hidden flex-none w-full h-14 flex justify-evenly items-center border-t border-border bg-background\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type PageProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Page({ children, className }: PageProps) {\n return (\n <div\n className={clsx(\n \"flex flex-col w-full h-screen max-sm:h-dvh overflow-hidden bg-background\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx } from \"@liberfi.io/ui\";\n\nexport type PageContentProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function PageContent({ className, children }: PageContentProps) {\n return (\n <div className={clsx(\"flex-auto w-full min-h-0\", className)}>\n {children}\n </div>\n );\n}\n","import { useTranslation } from \"@liberfi.io/i18n\";\nimport { clsx, Link } from \"@liberfi.io/ui\";\n\nexport type LogoProps = {\n /** icon for desktop */\n icon: React.ReactNode;\n /** icon for mobile & desktop */\n miniIcon?: React.ReactNode;\n /** url when clicking the logo image */\n href?: string;\n /** custom styles */\n className?: string;\n};\n\nexport function Logo({ href = \"/\", icon, miniIcon, className }: LogoProps) {\n const { t } = useTranslation();\n return (\n <Link\n href={href}\n className={clsx(\"flex-none flex justify-center items-center\", className)}\n aria-label={t(\"scaffold.home\")}\n >\n <div\n className={clsx(\n \"flex justify-center items-center\",\n !!miniIcon && \"max-xl:hidden\",\n )}\n >\n {icon}\n </div>\n {miniIcon && (\n <div className=\"flex justify-center items-center xl:hidden\">\n {miniIcon}\n </div>\n )}\n </Link>\n );\n}\n","import { PropsWithChildren } from \"react\";\nimport { clsx, Link } from \"@liberfi.io/ui\";\n\nexport type HeaderNavigationProps = PropsWithChildren<{\n href: string;\n title: string;\n active?: boolean;\n className?: string;\n}>;\n\nexport function HeaderNavigation({\n href,\n title,\n active = false,\n className,\n}: HeaderNavigationProps) {\n return (\n <Link\n data-active={active}\n href={href}\n className={clsx(\n \"h-8 text-sm font-medium px-2 xl:px-3 data-[active=true]:text-primary hover:text-primary text-foreground hover:bg-primary-50 rounded-sm\",\n className,\n )}\n aria-label={title}\n >\n {title}\n </Link>\n );\n}\n","import { ReactNode, useEffect, useState } from \"react\";\nimport { useEventEmitter } from \"@liberfi.io/hooks\";\nimport { useDisclosure } from \"@liberfi.io/ui\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type RenderAsyncModalProps<P = any, R = any> = {\n /** custom parameters for the modal */\n params?: P;\n /** whether the modal is open */\n isOpen: boolean;\n /** close the modal */\n onClose: () => void;\n /** change the open state of the modal */\n onOpenChange: (isOpen: boolean) => void;\n /** callback when the modal is closed with the result */\n onResult?: (result: R) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AsyncModalProps<P = any, R = any> = {\n /** unique identifier for the modal */\n id: string;\n /** render the modal content */\n children: (props: RenderAsyncModalProps<P, R>) => ReactNode;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type OpenAsyncModalOptions<P = any, R = any> = {\n /** custom parameters for the modal */\n params?: P;\n /** callback when the modal is closed with the result */\n onResult?: (result: R) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function AsyncModal<P = any, R = any>({\n id,\n children,\n}: AsyncModalProps<P, R>) {\n const events = useEventEmitter();\n\n const { isOpen, onOpen, onClose, onOpenChange } = useDisclosure();\n\n const [params, setParams] = useState<P | undefined>(undefined);\n\n const [onResult, setOnResult] = useState<((result: R) => void) | undefined>(\n undefined,\n );\n\n // listen to open modal events\n useEffect(() => {\n const handler = ({ params, onResult }: OpenAsyncModalOptions<P, R>) => {\n setParams(params);\n setOnResult(onResult);\n onOpen();\n };\n events.on(`open_modal:${id}`, handler);\n return () => {\n events.off(`open_modal:${id}`, handler);\n };\n }, [id, onOpen, events]);\n\n // listen to close modal events\n useEffect(() => {\n const handler = () => {\n onClose();\n };\n events.on(`close_modal:${id}`, handler);\n return () => {\n events.off(`close_modal:${id}`, handler);\n };\n }, [id, onClose, events]);\n\n return children({\n params,\n isOpen,\n onClose,\n onOpenChange,\n onResult,\n });\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback } from \"react\";\nimport { useEventEmitter } from \"@liberfi.io/hooks\";\nimport { OpenAsyncModalOptions } from \"./AsyncModal\";\n\nexport type UseAsyncModalReturnType<P = any, R = any> = {\n onOpen: (options?: OpenAsyncModalOptions<P, R>) => void;\n onClose: () => void;\n};\n\nexport function useAsyncModal<P = any, R = any>(\n id: string,\n): UseAsyncModalReturnType<P, R> {\n const events = useEventEmitter();\n\n const onOpen = useCallback(\n (options?: OpenAsyncModalOptions<P, R>) => {\n events.emit(`open_modal:${id}`, options);\n },\n [id, events],\n );\n\n const onClose = useCallback(() => {\n events.emit(`close_modal:${id}`);\n }, [id, events]);\n\n return { onOpen, onClose };\n}\n","declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/ui-scaffold\"] = \"0.1.8\";\n}\n\nexport default \"0.1.8\";\n"]}