@asup/context-menu 1.5.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/main.ts","global.d.ts","src/components/index.ts","src/components/AutoHeight.tsx","src/components/AutoHeight.module.css","src/components/ClickForMenu.tsx","src/components/ContextMenu.tsx","src/components/ContextMenu.module.css","src/components/ContextMenuEntry.tsx","src/components/ContextSubMenu.tsx","src/components/ContextMenuHandler.tsx","src/components/LowMenu.tsx","src/components/LowMenu.module.css","src/components/LowMenuButton.tsx","src/components/LowSubMenu.tsx","src/components/ContextWindow.tsx","src/functions/chkPosition.ts","src/components/ContextWindow.module.css","src/components/ContextWindowStack.tsx"],"sourcesContent":["import \"../global.d.ts\";\nexport * from \"./components\";\n","declare module \"*.module.css\" {\n const classes: { readonly [key: string]: string };\n export default classes;\n}\n","import { AutoHeight } from \"./AutoHeight\";\nimport { ClickForMenu } from \"./ClickForMenu\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { ContextMenuHandler } from \"./ContextMenuHandler\";\nimport { ContextWindow } from \"./ContextWindow\";\nimport { ContextWindowStack } from \"./ContextWindowStack\";\nimport { MenuItem } from \"./interface\";\n\nexport {\n AutoHeight,\n ClickForMenu,\n ContextMenu,\n ContextMenuHandler,\n ContextWindow,\n ContextWindowStack,\n};\nexport type { MenuItem as iMenuItem };\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport styles from \"./AutoHeight.module.css\";\n\ninterface AutoHeightProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n hide?: boolean;\n duration?: number; // transition duration in ms\n}\n\nexport function AutoHeight({\n children,\n hide,\n duration = 300,\n ...rest\n}: AutoHeightProps): JSX.Element {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | null>(null);\n const targetChildren = useMemo<React.ReactNode>(\n () => (hide || !children ? <div style={{ height: \"1px\" }} /> : children),\n [children, hide],\n );\n\n const setTargetHeight = useCallback(() => {\n const inner = innerRef.current;\n\n // Initial draw to get the height of children and deployed children\n const deployedHeight = hide ? 1 : (inner?.offsetHeight ?? 0);\n setHeight(deployedHeight);\n }, [hide]);\n\n // Add ResizeObserver to update height on content resize, debounced\n useEffect(() => {\n const transition = innerRef.current;\n if (transition) {\n const observer = new ResizeObserver(() => {\n setTargetHeight();\n });\n\n observer.observe(transition);\n\n return () => {\n observer.disconnect();\n };\n }\n }, [setTargetHeight]);\n\n // Trigger height change on children update\n useLayoutEffect(() => {\n setTargetHeight();\n }, [setTargetHeight, children]);\n\n return (\n <div\n {...rest}\n className={styles.autoHeightWrapper}\n ref={wrapperRef}\n style={{\n ...rest.style,\n height: height ? `${height}px` : \"auto\",\n transitionDuration: `${duration}ms`,\n }}\n >\n <div\n className={styles.autoHeightInner}\n ref={innerRef}\n >\n {targetChildren}\n </div>\n </div>\n );\n}\n\nAutoHeight.displayName = \"AutoHeight\";\n",".autoHeightWrapper {\n overflow: hidden;\n transition-timing-function: height ease-in-out width ease-in-out background-color ease-in-out;\n box-sizing: border-box;\n position: relative;\n}\n\n.autoHeightInner {\n height: fit-content;\n}\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport styles from \"./ContextMenu.module.css\";\nimport { MenuItem } from \"./interface\";\n\ninterface ClickForMenuProps extends React.HTMLAttributes<HTMLDivElement> {\n id: string;\n menuItems?: MenuItem[];\n chidren?: React.ReactNode;\n}\n\nexport const ClickForMenu = ({\n id,\n menuItems,\n children,\n ...rest\n}: ClickForMenuProps): JSX.Element => {\n // Menu state\n const [menuInDom, setMenuInDom] = useState<boolean>(false);\n const [menuVisible, setMenuVisible] = useState<boolean>(false);\n const [menuXPos, setMenuXPos] = useState<number>(0);\n const [menuYPos, setMenuYPos] = useState<number>(0);\n\n // Set up outsideClick handler\n const menuRef = useRef<HTMLDivElement | null>(null);\n\n // Handle click off the menu\n const handleClick = useCallback((e: MouseEvent) => {\n if (\n menuRef.current &&\n ((e.target instanceof Element && !menuRef.current?.contains(e.target)) ||\n !(e.target instanceof Element))\n ) {\n setMenuInDom(false);\n }\n }, []);\n\n const removeController = useRef<AbortController>(new AbortController());\n useEffect(() => {\n if (!menuVisible) {\n removeController.current.abort();\n removeController.current = new AbortController();\n setTimeout(() => {\n if (!removeController.current.signal.aborted) setMenuInDom(false);\n }, 300);\n }\n }, [menuVisible]);\n\n // Update the document click handler\n useEffect(() => {\n if (menuInDom) document.addEventListener(\"mousedown\", handleClick);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n removeController.current.abort();\n };\n }, [handleClick, menuInDom]);\n\n return (\n <>\n <div\n {...rest}\n id={id}\n onClick={(e) => {\n if (menuItems) {\n setMenuInDom(true);\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n removeController.current.abort();\n setMenuVisible(true);\n setMenuXPos(e.pageX);\n setMenuYPos(e.pageY);\n }, 1);\n } else {\n rest.onClick?.(e);\n }\n }}\n >\n {children}\n </div>\n {menuInDom &&\n menuItems &&\n createPortal(\n <div className={styles.anchor}>\n <ContextMenu\n visible={menuVisible}\n ref={menuRef}\n entries={menuItems}\n xPos={menuXPos}\n yPos={menuYPos}\n toClose={() => {\n setMenuVisible(false);\n }}\n />\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nClickForMenu.displayName = \"ClickForMenu\";\n","import { forwardRef } from \"react\";\nimport styles from \"./ContextMenu.module.css\";\nimport { ContextMenuEntry } from \"./ContextMenuEntry\";\nimport { MenuItem } from \"./interface\";\n\nexport interface ContextMenuProps {\n visible: boolean;\n entries: MenuItem[];\n xPos: number;\n yPos: number;\n toClose: () => void;\n}\n\nexport const ContextMenu = forwardRef<HTMLDivElement, ContextMenuProps>(\n ({ visible, entries, xPos, yPos, toClose }, ref): JSX.Element => {\n // Check that menu can fit inside the window\n let menuHeight = entries.length * 34 + 4;\n let menuWidth = 200;\n if (ref && typeof ref !== \"function\" && ref.current instanceof HTMLDivElement) {\n menuHeight = ref.current.offsetHeight;\n menuWidth = ref.current.offsetWidth;\n }\n if (yPos + menuHeight > window.innerHeight)\n yPos = Math.max(window.innerHeight - menuHeight - 4, 0);\n if (xPos + menuWidth > window.innerWidth) xPos = Math.max(window.innerWidth - menuWidth - 4, 0);\n\n return (\n <div\n ref={ref}\n className={[styles.contextMenu, visible ? styles.visible : styles.hidden]\n .filter((c) => c !== \"\")\n .join(\" \")}\n style={{\n top: `${yPos}px`,\n left: `${xPos}px`,\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n {entries.map((entry, i) => (\n <ContextMenuEntry\n key={i}\n entry={entry}\n toClose={toClose}\n />\n ))}\n </div>\n );\n },\n);\n\nContextMenu.displayName = \"ContextMenu\";\n",".anchor {\n position: absolute;\n top: 0;\n left: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\",\n \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n font-size: 9pt;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.contextMenuHandler {\n height: fit-content;\n width: fit-content;\n}\n\n.contextMenu {\n position: absolute;\n border: 1px solid;\n border-color: rgb(17, 20, 24);\n opacity: 1;\n background-color: rgb(251, 253, 246);\n z-index: 10000;\n box-shadow: 4px 4px 4px rgb(64, 64, 64, 0.75);\n transition: opacity 0.3s linear;\n}\n\n.contextMenu.hidden {\n opacity: 0;\n}\n\n.contextMenu.visible {\n opacity: 1;\n}\n\n.contextMenuItem {\n color: rgb(17, 20, 24);\n cursor: pointer;\n padding: 0 4px;\n min-width: 80px;\n position: relative;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n white-space: nowrap;\n}\n\n.contextMenuItem.disabled {\n background-color: rgba(0, 0, 0, 0.2);\n cursor: not-allowed;\n}\n\n.contextMenuItem:first-child {\n padding-top: 4px;\n}\n\n.contextMenuItem:last-child {\n padding-bottom: 4px;\n}\n\n.contextMenuItem:not(.disabled):hover {\n background-color: rgb(251, 233, 230);\n}\n\n.contextMenuItem .caretHolder {\n align-self: flex-end;\n}\n\n.contextMenuItem .caretHolder .subMenu {\n z-index: 1;\n position: relative;\n}\n\n.contextMenuItemLabel {\n flex-grow: 1;\n height: 19px;\n}\n","import { useState } from \"react\";\nimport styles from \"./ContextMenu.module.css\";\nimport { ContextSubMenu } from \"./ContextSubMenu\";\nimport { MenuItem } from \"./interface\";\n\ninterface ContextMenuEntryProps {\n entry: MenuItem;\n toClose: () => void;\n}\n\nexport const ContextMenuEntry = ({ entry, toClose }: ContextMenuEntryProps) => {\n const [target, setTarget] = useState<Range | null>(null);\n const [subMenuVisible, setSubMenuVisible] = useState<boolean>(false);\n return (\n <div\n className={[styles.contextMenuItem, entry.disabled ? styles.disabled : \"\"]\n .filter((c) => c !== \"\")\n .join(\" \")}\n onMouseEnter={() => {\n setSubMenuVisible(true);\n }}\n onMouseLeave={() => {\n setSubMenuVisible(false);\n }}\n >\n {typeof entry.label === \"string\" ? (\n <span\n aria-label={typeof entry.label === \"string\" ? entry.label : undefined}\n aria-disabled={entry.disabled}\n className={styles.contextMenuItemLabel}\n onMouseEnter={() => {\n const sel = window.getSelection();\n const target = sel && sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n setTarget(target);\n }}\n onMouseLeave={() => {\n setTarget(null);\n }}\n onMouseDownCapture={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (!entry.disabled) {\n if (entry.action) {\n entry.action(target, e);\n }\n toClose();\n }\n }}\n >\n {entry.label}\n </span>\n ) : (\n entry.label\n )}\n {entry.group && (\n <ContextSubMenu\n toClose={toClose}\n entries={entry.group}\n visible={subMenuVisible}\n />\n )}\n </div>\n );\n};\n","import { ContextMenu } from \"./ContextMenu\";\nimport styles from \"./ContextMenu.module.css\";\nimport { MenuItem } from \"./interface\";\n\nexport interface ContextSubMenuProps {\n entries: MenuItem[];\n toClose: () => void;\n lowMenu?: boolean;\n visible: boolean;\n}\n\nexport const ContextSubMenu = ({ entries, toClose, visible }: ContextSubMenuProps): JSX.Element => {\n return (\n <span className={styles.caretHolder}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z\" />\n </svg>\n <div className={styles.subMenu}>\n <ContextMenu\n visible={visible}\n entries={entries}\n xPos={14}\n yPos={-21}\n toClose={toClose}\n />\n </div>\n </span>\n );\n};\n\nContextSubMenu.displayName = \"ContextSubMenu\";\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport styles from \"./ContextMenu.module.css\";\nimport { LowMenu } from \"./LowMenu\";\nimport { MenuItem } from \"./interface\";\n\nexport interface ContentMenuHandlerContextProps {\n menuItems: MenuItem[];\n}\nexport const ContentMenuHandlerContext = createContext<ContentMenuHandlerContextProps | null>(null);\n\nexport interface ContextMenuHandlerProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n menuItems: MenuItem[];\n showLowMenu?: boolean;\n}\n\nfunction isDivider(label: string | JSX.Element): boolean {\n return typeof label !== \"string\" && label.type === \"hr\";\n}\n\nexport const ContextMenuHandler = ({\n children,\n menuItems,\n showLowMenu = false,\n ...rest\n}: ContextMenuHandlerProps): JSX.Element => {\n // Check for higher content menu\n const higherContext = useContext(ContentMenuHandlerContext);\n const thisMenuItems = useMemo(\n () => [\n ...(higherContext !== null\n ? [\n ...higherContext.menuItems,\n ...[\n higherContext.menuItems.length > 0 &&\n !isDivider(higherContext.menuItems[higherContext.menuItems.length - 1].label) &&\n menuItems.length > 0 &&\n !isDivider(menuItems[0].label)\n ? {\n label: (\n <hr style={{ flexGrow: 1, cursor: \"none\", margin: \"0\", padding: \"0\" }} />\n ),\n }\n : null,\n ].filter((item) => item !== null),\n ]\n : []),\n ...menuItems,\n ],\n [higherContext, menuItems],\n );\n\n // Menu resources\n const divHandlderRef = useRef<HTMLDivElement | null>(null);\n const menuRef = useRef<HTMLDivElement | null>(null);\n const [menuXPos, setMenuXPos] = useState<number>(0);\n const [menuYPos, setMenuYPos] = useState<number>(0);\n const [menuVisible, setMenuVisible] = useState<boolean>(false);\n const [menuInDom, setMenuInDom] = useState<boolean>(false);\n const [mouseOverHandlerDiv, setMouseOverHandlerDiv] = useState<boolean>(false);\n const [mouseOverMenu, setMouseOverMenu] = useState<boolean>(false);\n\n // Get holder position\n const divHandlerPos = divHandlderRef ? divHandlderRef.current?.getBoundingClientRect() : null;\n\n // Handle click off the menu\n const handleClick = useCallback((e: globalThis.MouseEvent) => {\n if (\n menuRef.current &&\n ((e.target instanceof Element && !menuRef.current?.contains(e.target)) ||\n !(e.target instanceof Element))\n ) {\n setMenuVisible(false);\n }\n }, []);\n\n // Update the document click handler\n useEffect(() => {\n if (menuVisible) document.addEventListener(\"mousedown\", handleClick);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n };\n }, [handleClick, menuVisible]);\n\n const removeController = useRef<AbortController>(new AbortController());\n useEffect(() => {\n if (!mouseOverMenu && !menuVisible && !mouseOverHandlerDiv) {\n removeController.current.abort();\n removeController.current = new AbortController();\n setTimeout(() => {\n if (!removeController.current.signal.aborted) setMenuInDom(false);\n }, 300);\n }\n }, [mouseOverHandlerDiv, menuVisible, mouseOverMenu]);\n\n return (\n <ContentMenuHandlerContext.Provider\n value={{\n menuItems: thisMenuItems,\n }}\n >\n <div\n ref={divHandlderRef}\n {...rest}\n className={[styles.contextMenuHandler, rest.className].join(\" \")}\n onContextMenu={async (e) => {\n if (!showLowMenu) {\n setMenuInDom(true);\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n removeController.current.abort();\n setMenuVisible(true);\n setMenuXPos(e.pageX);\n setMenuYPos(e.pageY);\n }, 1);\n }\n }}\n onMouseEnter={async (e) => {\n if (showLowMenu) {\n setMenuInDom(true);\n setMouseOverHandlerDiv(false);\n setTimeout(() => {\n removeController.current.abort();\n setMouseOverHandlerDiv(true);\n }, 1);\n }\n rest.onMouseEnter?.(e);\n }}\n onMouseLeave={async (e) => {\n if (showLowMenu) {\n removeController.current.abort();\n removeController.current = new AbortController();\n setMouseOverHandlerDiv(false);\n }\n rest.onMouseLeave?.(e);\n }}\n >\n {children}\n </div>\n {menuInDom &&\n divHandlerPos &&\n createPortal(\n <div\n className={styles.anchor}\n onMouseEnter={() => {\n removeController.current.abort();\n setMouseOverMenu(true);\n }}\n onMouseLeave={() => {\n removeController.current.abort();\n removeController.current = new AbortController();\n setMouseOverMenu(false);\n }}\n >\n {showLowMenu ? (\n <LowMenu\n visible={mouseOverHandlerDiv}\n entries={menuItems}\n xPos={divHandlerPos.left}\n yPos={divHandlerPos.bottom}\n maxWidth={divHandlerPos.width}\n />\n ) : (\n <ContextMenu\n visible={menuVisible}\n ref={menuRef}\n entries={thisMenuItems}\n xPos={menuXPos}\n yPos={menuYPos}\n toClose={() => {\n setMenuVisible(false);\n setMouseOverMenu(false);\n }}\n />\n )}\n </div>,\n document.body,\n )}\n </ContentMenuHandlerContext.Provider>\n );\n};\n\nContextMenuHandler.displayName = \"ContextMenuHandler\";\n","import styles from \"./LowMenu.module.css\";\nimport { LowMenuButton } from \"./LowMenuButton\";\nimport { MenuItem } from \"./interface\";\n\ninterface LowMenuProps {\n entries: MenuItem[];\n visible: boolean;\n xPos: number;\n yPos: number;\n maxWidth: number;\n}\n\nexport const LowMenu = ({ entries, visible, xPos, yPos, maxWidth }: LowMenuProps): JSX.Element => {\n // Only show the low menu if it is on the screen\n if (xPos > window.innerWidth || yPos > window.innerHeight) return <></>;\n // Show the menu\n return (\n <div\n className={[styles.lowMenu, visible ? styles.visible : styles.hidden].join(\" \")}\n aria-label=\"Low context menu\"\n style={{\n left: `${xPos}px`,\n top: `${yPos}px`,\n maxWidth: `calc(${maxWidth}px)`,\n width: `calc(${maxWidth}px - 4px)`,\n }}\n >\n <div className={styles.lowMenuButtonHolder}>\n {entries.map((e, i) => (\n <LowMenuButton\n key={i}\n entry={e}\n />\n ))}\n </div>\n </div>\n );\n};\n\nLowMenu.displayName = \"LowMenu\";\n",".lowMenu {\n z-index: 2;\n position: absolute;\n margin: 0px;\n transition: opacity 0.3s linear;\n}\n\n.lowMenuButtonHolder {\n border: 2px solid rgb(17, 20, 24);\n border-top-right-radius: 4px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n background-color: rgb(17, 20, 24);\n box-shadow: 2px 2px 2px rgb(64, 64, 64, 0.5);\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n gap: 2px;\n row-gap: 2px;\n width: fit-content;\n}\n\n.lowMenu.hidden {\n opacity: 0;\n}\n\n.lowMenu.visible,\n.lowMenu:hover {\n opacity: 1;\n}\n\n.lowMenuItem {\n background-color: rgb(251, 253, 246);\n border: 0;\n color: rgb(17, 20, 24);\n cursor: pointer;\n padding: 0 4px;\n position: relative;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n white-space: nowrap;\n}\n\n.lowMenuItem.disabled {\n background-color: rgba(200, 200, 200);\n cursor: not-allowed;\n}\n\n.lowMenuItem:not(.disabled):hover {\n background-color: rgb(251, 233, 230);\n}\n\n.lowMenu-item .caretHolder {\n align-self: flex-end;\n}\n\n.lowMenuItem .caretHolder .subMenu {\n z-index: 1;\n position: relative;\n}\n","import { useState } from \"react\";\nimport styles from \"./LowMenu.module.css\";\nimport { LowSubMenu } from \"./LowSubMenu\";\nimport { MenuItem } from \"./interface\";\n\ninterface LowMenuButtonProps {\n entry: MenuItem;\n}\nexport const LowMenuButton = ({ entry }: LowMenuButtonProps) => {\n const [target, setTarget] = useState<Range | null>(null);\n return (\n <div\n className={[styles.lowMenuItem, entry.disabled ? styles.disabled : \"\"]\n .filter((c) => c !== \"\")\n .join(\" \")}\n aria-label={typeof entry.label === \"string\" ? entry.label : undefined}\n aria-disabled={entry.disabled}\n onMouseEnter={() => {\n const sel = window.getSelection();\n const target = sel && sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n setTarget(target);\n }}\n onMouseLeave={() => {\n setTarget(null);\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (!entry.disabled) entry.action?.(target);\n }}\n >\n <span>{entry.label}</span>\n {entry.group && <LowSubMenu entry={entry} />}\n </div>\n );\n};\n\nLowMenuButton.displayName = \"LowMenuButton\";\n","import { useState } from \"react\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport styles from \"./LowMenu.module.css\";\nimport { MenuItem } from \"./interface\";\n\nexport interface LowSubMenuProps {\n entry: MenuItem;\n lowMenu?: boolean;\n}\n\nexport const LowSubMenu = ({ entry }: LowSubMenuProps): JSX.Element => {\n const [visible, setVisible] = useState<boolean>(false);\n if (!entry.group || entry.group.length === 0) return <></>;\n return (\n <span\n aria-label={`Sub menu for ${entry.label}`}\n className={styles.caretHolder}\n onMouseEnter={() => {\n setVisible(true);\n }}\n onMouseLeave={() => {\n setVisible(false);\n }}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z\" />\n </svg>\n <div className={styles.subMenu}>\n {visible && (\n <ContextMenu\n visible={visible}\n entries={entry.group}\n xPos={14}\n yPos={entry.group.length * -21 - 8}\n toClose={() => setVisible(false)}\n />\n )}\n </div>\n </span>\n );\n};\n\nLowSubMenu.displayName = \"LowSubMenu\";\n","import { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { chkPosition } from \"../functions/chkPosition\";\nimport styles from \"./ContextWindow.module.css\";\nimport { ContextWindowStackContext } from \"./ContextWindowStack\";\n\ninterface ContextWindowProps extends React.HTMLAttributes<HTMLDivElement> {\n id: string;\n visible: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n title: string;\n titleElement?: ReactNode;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}\n\nexport const ContextWindow = ({\n id,\n visible,\n title,\n titleElement,\n children,\n onOpen,\n onClose,\n ...rest\n}: ContextWindowProps): JSX.Element => {\n const windowStack = useContext(ContextWindowStackContext);\n const windowId = useRef<number | null>(null);\n const divRef = useRef<HTMLDivElement | null>(null);\n const windowRef = useRef<HTMLDivElement | null>(null);\n const [windowInDOM, setWindowInDOM] = useState<boolean>(false);\n const [windowVisible, setWindowVisible] = useState<boolean>(false);\n const zIndex = useMemo(() => {\n return windowStack?.currentWindows.find((w) => w.windowId === windowId.current)?.zIndex ?? 1;\n }, [windowStack?.currentWindows]);\n\n // Position\n const windowPos = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n const [moving, setMoving] = useState<boolean>(false);\n\n const move = useCallback((x: number, y: number) => {\n if (windowRef.current && windowPos.current) {\n const window = windowRef.current;\n const pos = windowPos.current;\n pos.x += x;\n pos.y += y;\n window.style.transform = `translate(${pos.x}px, ${pos.y}px)`;\n }\n }, []);\n\n const checkPosition = useCallback(() => {\n const chkPos = chkPosition(windowRef);\n move(chkPos.translateX, chkPos.translateY);\n }, [move]);\n\n const mouseMove = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n move(e.movementX, e.movementY);\n },\n [move],\n );\n\n const mouseUp = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setMoving(false);\n checkPosition();\n document.removeEventListener(\"mousemove\", mouseMove);\n document.removeEventListener(\"mouseup\", mouseUp);\n window.removeEventListener(\"resize\", checkPosition);\n if (e.target && (e.target instanceof HTMLElement || e.target instanceof SVGElement))\n e.target.style.userSelect = \"auto\";\n },\n [checkPosition, mouseMove],\n );\n\n // Update visibility\n useEffect(() => {\n if (windowStack) {\n // Visible set, but not in DOM\n if (visible && !windowInDOM) {\n setWindowInDOM(true);\n } else if (visible && windowInDOM && !windowVisible) {\n if (!windowId.current) {\n const maxWindowId = Math.max(0, ...windowStack.currentWindows.map((w) => w.windowId));\n windowId.current = maxWindowId + 1;\n }\n windowStack.pushToTop(windowId.current);\n setWindowVisible(visible);\n onOpen?.();\n // Get starting position\n if (divRef.current && windowRef.current) {\n const parentPos = divRef.current.getBoundingClientRect();\n const pos = windowRef.current.getBoundingClientRect();\n const windowHeight = pos.bottom - pos.top;\n windowRef.current.style.left = `${parentPos.left}px`;\n windowRef.current.style.top = `${\n parentPos.bottom + windowHeight < window.innerHeight\n ? parentPos.bottom\n : Math.max(0, parentPos.top - windowHeight)\n }px`;\n windowRef.current.style.transform = \"\";\n windowPos.current = { x: 0, y: 0 };\n }\n checkPosition();\n } else if (windowId.current && !visible && windowVisible) {\n setWindowVisible(false);\n } else if (windowId.current && !visible && windowInDOM) {\n setWindowInDOM(false);\n }\n }\n }, [checkPosition, onOpen, visible, windowInDOM, windowStack, windowVisible]);\n\n return (\n <div\n className={styles.contextWindowAnchor}\n ref={divRef}\n >\n {!windowStack && (\n <div {...rest}>\n {process.env.NODE_ENV !== \"production\" && (\n <div\n style={{ backgroundColor: \"red\", color: \"white\", padding: \"8px\", fontSize: \"48px\" }}\n >\n WARNING: No ContextWindowStack found\n </div>\n )}\n {children}\n </div>\n )}\n {windowStack &&\n windowInDOM &&\n createPortal(\n <div\n {...rest}\n ref={windowRef}\n id={id}\n className={[styles.contextWindow, rest.className].filter((c) => c).join(\" \")}\n style={{\n ...rest.style,\n opacity: moving ? 0.8 : windowVisible ? 1 : 0,\n visibility: windowVisible ? \"visible\" : \"hidden\",\n zIndex: zIndex ?? 1,\n minHeight: rest.style?.minHeight ?? \"150px\",\n minWidth: rest.style?.minWidth ?? \"200px\",\n maxHeight: rest.style?.maxHeight ?? \"1000px\",\n maxWidth: rest.style?.maxWidth ?? \"1000px\",\n }}\n onClickCapture={(e) => {\n if (windowId.current) windowStack.pushToTop(windowId.current);\n rest.onClickCapture?.(e);\n }}\n >\n <div\n className={[styles.contextWindowTitle, moving ? styles.moving : \"\"]\n .filter((c) => c !== \"\")\n .join(\" \")}\n onMouseDown={(e: React.MouseEvent) => {\n if (e.target && (e.target instanceof HTMLElement || e.target instanceof SVGElement))\n e.target.style.userSelect = \"none\";\n setMoving(true);\n if (windowId.current) windowStack.pushToTop(windowId.current);\n document.addEventListener(\"mouseup\", mouseUp);\n document.addEventListener(\"mousemove\", mouseMove);\n window.addEventListener(\"resize\", () => checkPosition());\n }}\n >\n <div\n className={styles.contextWindowTitleText}\n title={title}\n >\n {titleElement ? titleElement : title}\n </div>\n <div\n className={styles.contextWindowTitleClose}\n role=\"button\"\n aria-label=\"Close\"\n onClick={onClose}\n title={`Close ${title && title.trim() !== \"\" ? title : \"window\"}`}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\" />\n </svg>\n </div>\n </div>\n <div className={styles.contextWindowBody}>\n <div>{children}</div>\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n};\n\nContextWindow.displayName = \"ContextWindow\";\n","import { RefObject } from \"react\";\n\n/**\n * Check that an existing div is inside the viewport\n * @param divRef Check div is inside view port, and return n\n * @returns \\{ translateX, translateY \\} Amount to move on X and Y axis\n */\nexport const chkPosition = (\n divRef: RefObject<HTMLDivElement>,\n): { translateX: number; translateY: number } => {\n if (!divRef.current) {\n return { translateX: 0, translateY: 0 };\n } else {\n const innerBounce = 16;\n const posn = divRef.current.getBoundingClientRect();\n let translateX = 0;\n if (posn.left < innerBounce) {\n translateX = -posn.left + innerBounce;\n } else if (posn.right > window.innerWidth) {\n translateX = Math.max(-posn.left + innerBounce, window.innerWidth - posn.right - innerBounce);\n }\n let translateY = 0;\n if (posn.top < innerBounce) {\n translateY = -posn.top + innerBounce;\n } else if (posn.bottom > window.innerHeight) {\n translateY = Math.max(\n -posn.top + innerBounce,\n window.innerHeight - posn.bottom - innerBounce,\n );\n }\n return { translateX, translateY };\n }\n};\n",".contextWindowAnchor {\n position: relative;\n}\n\n.contextWindow {\n z-index: 2001;\n border: 1px black solid;\n margin: 0;\n padding: 4px;\n background-color: rgb(250, 250, 250);\n box-shadow: 6px 6px 6px rgb(64, 64, 64, 0.5);\n transition: opacity 0.25s linear;\n justify-content: flex-start;\n position: absolute;\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n border-bottom-left-radius: 8px;\n resize: both;\n overflow: auto;\n max-height: 95vh;\n max-width: 95vw;\n}\n\n.contextWindowTitle {\n border-bottom: 1px black dashed;\n box-sizing: unset;\n padding-bottom: 4px;\n margin: 0 4px 3px 4px;\n height: 24px;\n line-height: 24px;\n max-height: 24px;\n cursor: grab;\n font-size: 18px;\n font-weight: 600;\n display: flex;\n flex-direction: row;\n align-items: center;\n width: calc(100% - 8px);\n}\n\n.contextWindowTitle.moving {\n cursor: grabbing;\n}\n\n.contextWindowTitleText {\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: calc(100% - 16px);\n}\n\n.contextWindowTitleClose {\n display: flex;\n color: black;\n height: 16px;\n width: 16px;\n border-radius: 3px;\n margin-left: 2px;\n cursor: pointer;\n line-height: 16px;\n}\n\n.contextWindowTitleClose:hover {\n background-color: black;\n color: white;\n}\n\n.contextWindowBody {\n overflow: auto;\n padding-bottom: 8px;\n margin-right: 4px;\n height: calc(100% - 40px);\n}\n\n.contextWindowBody::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.contextWindowBody::-webkit-scrollbar-track {\n background: white;\n border-radius: 8px;\n}\n\n.contextWindowBody::-webkit-scrollbar-thumb {\n background: lightgrey;\n border: none;\n border-radius: 8px;\n}\n\n.contextWindowBody::-webkit-scrollbar-thumb:hover {\n background: grey;\n}\n","import { createContext, useState } from \"react\";\n\nexport interface ContextWindowZIndex {\n windowId: number;\n zIndex: number;\n}\n\nexport interface ContextWindowStackContextProps {\n currentWindows: ContextWindowZIndex[];\n pushToTop: (ret: number) => void;\n}\n\nexport const ContextWindowStackContext = createContext<ContextWindowStackContextProps | null>(null);\n\ninterface ContextWindowStackProps {\n id?: string;\n minZIndex?: number;\n children?: JSX.Element[] | JSX.Element;\n}\n\nconst pushToTop = (\n windowId: number,\n minZIndex: number,\n windowList: ContextWindowZIndex[],\n setWindowList: (ret: ContextWindowZIndex[]) => void,\n) => {\n const otherWindows = windowList\n .filter((w) => w.windowId !== windowId)\n .map((w, i) => ({ windowId: w.windowId, zIndex: minZIndex + i }));\n setWindowList([...otherWindows, { windowId, zIndex: minZIndex + otherWindows.length }]);\n};\n\nexport const ContextWindowStack = ({\n minZIndex = 1000,\n children,\n}: ContextWindowStackProps): JSX.Element => {\n const [currentWindows, setCurrentWindows] = useState<ContextWindowZIndex[]>([]);\n\n return (\n <ContextWindowStackContext.Provider\n value={{\n currentWindows: currentWindows.map((w) => ({\n windowId: w.windowId,\n zIndex: minZIndex + w.zIndex,\n })),\n pushToTop: (ret: number) => pushToTop(ret, minZIndex, currentWindows, setCurrentWindows),\n }}\n >\n {children}\n </ContextWindowStackContext.Provider>\n );\n};\n\nContextWindowStack.displayName = \"ContextWindowStack\";\n"],"names":[],"version":3,"file":"main.js.map"}
1
+ {"mappings":"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","sources":["src/main.ts","global.d.ts","src/components/index.ts","src/components/AutoHeight.tsx","src/components/AutoHeight.module.css","src/components/ClickForMenu.tsx","src/components/ContextMenu.tsx","src/components/ContextMenu.module.css","src/components/ContextMenuEntry.tsx","src/components/ContextSubMenu.tsx","src/components/ContextMenuHandler.tsx","src/components/LowMenu.tsx","src/components/LowMenu.module.css","src/components/LowMenuButton.tsx","src/components/LowSubMenu.tsx","src/components/ContextWindow.tsx","src/functions/chkPosition.ts","src/components/ContextWindow.module.css","src/components/ContextWindowStack.tsx"],"sourcesContent":["import \"../global.d.ts\";\nexport * from \"./components\";\n","declare module \"*.module.css\" {\n const classes: { readonly [key: string]: string };\n export default classes;\n}\n","import { AutoHeight } from \"./AutoHeight\";\nimport { ClickForMenu } from \"./ClickForMenu\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { ContextMenuHandler } from \"./ContextMenuHandler\";\nimport { ContextWindow } from \"./ContextWindow\";\nimport { ContextWindowStack } from \"./ContextWindowStack\";\nimport { MenuItem } from \"./interface\";\n\nexport {\n AutoHeight,\n ClickForMenu,\n ContextMenu,\n ContextMenuHandler,\n ContextWindow,\n ContextWindowStack,\n};\nexport type { MenuItem as iMenuItem };\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport styles from \"./AutoHeight.module.css\";\n\ninterface AutoHeightProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n hide?: boolean;\n duration?: number; // transition duration in ms\n}\n\nexport function AutoHeight({\n children,\n hide,\n duration = 300,\n ...rest\n}: AutoHeightProps): JSX.Element {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | null>(null);\n const targetChildren = useMemo<React.ReactNode>(\n () => (hide || !children ? <div style={{ height: \"1px\" }} /> : children),\n [children, hide],\n );\n\n const setTargetHeight = useCallback(() => {\n const inner = innerRef.current;\n\n // Initial draw to get the height of children and deployed children\n const deployedHeight = hide ? 1 : (inner?.offsetHeight ?? 0);\n setHeight(deployedHeight);\n }, [hide]);\n\n // Add ResizeObserver to update height on content resize, debounced\n useEffect(() => {\n const transition = innerRef.current;\n if (transition) {\n const observer = new ResizeObserver(() => {\n setTargetHeight();\n });\n\n observer.observe(transition);\n\n return () => {\n observer.disconnect();\n };\n }\n }, [setTargetHeight]);\n\n // Trigger height change on children update\n useLayoutEffect(() => {\n setTargetHeight();\n }, [setTargetHeight, children]);\n\n return (\n <div\n {...rest}\n className={styles.autoHeightWrapper}\n ref={wrapperRef}\n style={{\n ...rest.style,\n height: height ? `${height}px` : \"auto\",\n transitionDuration: `${duration}ms`,\n }}\n >\n <div\n className={styles.autoHeightInner}\n ref={innerRef}\n >\n {targetChildren}\n </div>\n </div>\n );\n}\n\nAutoHeight.displayName = \"AutoHeight\";\n",".autoHeightWrapper {\n overflow: hidden;\n transition-timing-function: height ease-in-out width ease-in-out background-color ease-in-out;\n box-sizing: border-box;\n position: relative;\n}\n\n.autoHeightInner {\n height: fit-content;\n}\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport styles from \"./ContextMenu.module.css\";\nimport { MenuItem } from \"./interface\";\n\ninterface ClickForMenuProps extends React.HTMLAttributes<HTMLDivElement> {\n id: string;\n menuItems?: MenuItem[];\n children?: React.ReactNode;\n}\n\nexport const ClickForMenu = ({\n id,\n menuItems,\n children,\n ...rest\n}: ClickForMenuProps): JSX.Element => {\n // Menu state\n const [menuInDom, setMenuInDom] = useState<boolean>(false);\n const [menuVisible, setMenuVisible] = useState<boolean>(false);\n const [menuXPos, setMenuXPos] = useState<number>(0);\n const [menuYPos, setMenuYPos] = useState<number>(0);\n\n // Set up outsideClick handler\n const menuRef = useRef<HTMLDivElement | null>(null);\n\n // Handle click off the menu\n const handleClick = useCallback((e: MouseEvent) => {\n if (\n menuRef.current &&\n ((e.target instanceof Element && !menuRef.current.contains(e.target)) ||\n !(e.target instanceof Element))\n ) {\n setMenuInDom(false);\n }\n }, []);\n\n const removeController = useRef<AbortController | null>(null);\n const removeTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n useEffect(() => {\n if (!menuVisible && removeTimeoutRef.current === null) {\n // Only create a new controller when scheduling a new timeout\n if (removeController.current) {\n removeController.current.abort();\n }\n removeController.current = new AbortController();\n const controller = removeController.current;\n // Set up the timeout with a reference to the current controller\n removeTimeoutRef.current = setTimeout(() => {\n if (!controller.signal.aborted) setMenuInDom(false);\n removeTimeoutRef.current = null;\n }, 300);\n }\n return () => {\n // Clean up on unmount or when menuVisible changes\n if (removeTimeoutRef.current) {\n clearTimeout(removeTimeoutRef.current);\n removeTimeoutRef.current = null;\n }\n };\n }, [menuVisible]);\n\n // Update the document click handler\n useEffect(() => {\n if (menuInDom) document.addEventListener(\"mousedown\", handleClick);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n if (removeController.current) {\n removeController.current.abort();\n }\n };\n }, [handleClick, menuInDom]);\n\n return (\n <>\n <div\n {...rest}\n id={id}\n onClick={(e) => {\n if (menuItems) {\n setMenuInDom(true);\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n if (removeController.current) {\n removeController.current.abort();\n }\n setMenuVisible(true);\n setMenuXPos(e.pageX);\n setMenuYPos(e.pageY);\n }, 1);\n } else {\n rest.onClick?.(e);\n }\n }}\n >\n {children}\n </div>\n {menuInDom &&\n menuItems &&\n createPortal(\n <div className={styles.anchor}>\n <ContextMenu\n visible={menuVisible}\n ref={menuRef}\n entries={menuItems}\n xPos={menuXPos}\n yPos={menuYPos}\n toClose={() => {\n setMenuVisible(false);\n }}\n />\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nClickForMenu.displayName = \"ClickForMenu\";\n","import { forwardRef } from \"react\";\nimport styles from \"./ContextMenu.module.css\";\nimport { ContextMenuEntry } from \"./ContextMenuEntry\";\nimport { MenuItem } from \"./interface\";\n\n// Constants for menu size estimation when ref is not yet available\nconst ESTIMATED_MENU_ITEM_HEIGHT = 34;\nconst ESTIMATED_MENU_PADDING = 4;\nconst ESTIMATED_MENU_WIDTH = 200;\n\nexport interface ContextMenuProps {\n visible: boolean;\n entries: MenuItem[];\n xPos: number;\n yPos: number;\n toClose: () => void;\n}\n\nexport const ContextMenu = forwardRef<HTMLDivElement, ContextMenuProps>(\n ({ visible, entries, xPos, yPos, toClose }, ref): JSX.Element => {\n // Check that menu can fit inside the window\n let menuHeight = entries.length * ESTIMATED_MENU_ITEM_HEIGHT + ESTIMATED_MENU_PADDING;\n let menuWidth = ESTIMATED_MENU_WIDTH;\n if (ref && typeof ref !== \"function\" && ref.current instanceof HTMLDivElement) {\n menuHeight = ref.current.offsetHeight;\n menuWidth = ref.current.offsetWidth;\n }\n const adjustedYPos =\n yPos + menuHeight > window.innerHeight\n ? Math.max(window.innerHeight - menuHeight - ESTIMATED_MENU_PADDING, 0)\n : yPos;\n const adjustedXPos =\n xPos + menuWidth > window.innerWidth\n ? Math.max(window.innerWidth - menuWidth - ESTIMATED_MENU_PADDING, 0)\n : xPos;\n\n return (\n <div\n ref={ref}\n className={[styles.contextMenu, visible ? styles.visible : styles.hidden]\n .filter((c) => c !== \"\")\n .join(\" \")}\n style={{\n top: `${adjustedYPos}px`,\n left: `${adjustedXPos}px`,\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n {entries.map((entry, i) => (\n <ContextMenuEntry\n key={i}\n entry={entry}\n toClose={toClose}\n />\n ))}\n </div>\n );\n },\n);\n\nContextMenu.displayName = \"ContextMenu\";\n",".anchor {\n position: absolute;\n top: 0;\n left: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\",\n \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n font-size: 9pt;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.contextMenuHandler {\n height: fit-content;\n width: fit-content;\n}\n\n.contextMenu {\n position: absolute;\n border: 1px solid;\n border-color: rgb(17, 20, 24);\n opacity: 1;\n background-color: rgb(251, 253, 246);\n z-index: 10000;\n box-shadow: 4px 4px 4px rgb(64, 64, 64, 0.75);\n transition: opacity 0.3s linear;\n}\n\n.contextMenu.hidden {\n opacity: 0;\n}\n\n.contextMenu.visible {\n opacity: 1;\n}\n\n.contextMenuItem {\n color: rgb(17, 20, 24);\n cursor: pointer;\n padding: 0 4px;\n min-width: 80px;\n position: relative;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n white-space: nowrap;\n}\n\n.contextMenuItem.disabled {\n background-color: rgba(0, 0, 0, 0.2);\n cursor: not-allowed;\n}\n\n.contextMenuItem:first-child {\n padding-top: 4px;\n}\n\n.contextMenuItem:last-child {\n padding-bottom: 4px;\n}\n\n.contextMenuItem:not(.disabled):hover {\n background-color: rgb(251, 233, 230);\n}\n\n.contextMenuItem .caretHolder {\n align-self: flex-end;\n}\n\n.contextMenuItem .caretHolder .subMenu {\n z-index: 1;\n position: relative;\n}\n\n.contextMenuItemLabel {\n flex-grow: 1;\n height: 19px;\n}\n","import { useState } from \"react\";\nimport styles from \"./ContextMenu.module.css\";\nimport { ContextSubMenu } from \"./ContextSubMenu\";\nimport { MenuItem } from \"./interface\";\n\ninterface ContextMenuEntryProps {\n entry: MenuItem;\n toClose: () => void;\n}\n\nexport const ContextMenuEntry = ({ entry, toClose }: ContextMenuEntryProps) => {\n const [target, setTarget] = useState<Range | null>(null);\n return (\n <div\n className={[styles.contextMenuItem, entry.disabled ? styles.disabled : \"\"]\n .filter((c) => c !== \"\")\n .join(\" \")}\n >\n {typeof entry.label === \"string\" ? (\n <span\n aria-label={entry.label}\n aria-disabled={entry.disabled}\n className={styles.contextMenuItemLabel}\n onMouseEnter={() => {\n const sel = window.getSelection();\n const target = sel && sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n setTarget(target);\n }}\n onMouseLeave={() => {\n setTarget(null);\n }}\n onMouseDownCapture={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (!entry.disabled) {\n if (entry.action) {\n entry.action(target, e);\n }\n toClose();\n }\n }}\n >\n {entry.label}\n </span>\n ) : (\n entry.label\n )}\n {entry.group && (\n <ContextSubMenu\n toClose={toClose}\n entries={entry.group}\n />\n )}\n </div>\n );\n};\n","import { useState } from \"react\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport styles from \"./ContextMenu.module.css\";\nimport { MenuItem } from \"./interface\";\n\nexport interface ContextSubMenuProps {\n entries: MenuItem[];\n toClose: () => void;\n lowMenu?: boolean;\n}\n\nexport const ContextSubMenu = ({ entries, toClose }: ContextSubMenuProps): JSX.Element => {\n const [visible, setVisible] = useState<boolean>(false);\n return (\n <span\n className={styles.caretHolder}\n onMouseEnter={() => setVisible(true)}\n onMouseLeave={() => setVisible(false)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z\" />\n </svg>\n {visible && (\n <div className={styles.subMenu}>\n <ContextMenu\n visible={true}\n entries={entries}\n xPos={14}\n yPos={-21}\n toClose={toClose}\n />\n </div>\n )}\n </span>\n );\n};\n\nContextSubMenu.displayName = \"ContextSubMenu\";\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport styles from \"./ContextMenu.module.css\";\nimport { LowMenu } from \"./LowMenu\";\nimport { MenuItem } from \"./interface\";\n\nexport interface ContentMenuHandlerContextProps {\n menuItems: MenuItem[];\n}\nexport const ContentMenuHandlerContext = createContext<ContentMenuHandlerContextProps | null>(null);\n\nexport interface ContextMenuHandlerProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n menuItems: MenuItem[];\n showLowMenu?: boolean;\n}\n\nfunction isDivider(label: string | JSX.Element): boolean {\n return typeof label !== \"string\" && label.type === \"hr\";\n}\n\nexport const ContextMenuHandler = ({\n children,\n menuItems,\n showLowMenu = false,\n ...rest\n}: ContextMenuHandlerProps): JSX.Element => {\n // Check for higher content menu\n const higherContext = useContext(ContentMenuHandlerContext);\n const thisMenuItems = useMemo(\n () => [\n ...(higherContext !== null\n ? [\n ...higherContext.menuItems,\n ...[\n higherContext.menuItems.length > 0 &&\n !isDivider(higherContext.menuItems[higherContext.menuItems.length - 1].label) &&\n menuItems.length > 0 &&\n !isDivider(menuItems[0].label)\n ? {\n label: (\n <hr style={{ flexGrow: 1, cursor: \"none\", margin: \"0\", padding: \"0\" }} />\n ),\n }\n : null,\n ].filter((item) => item !== null),\n ]\n : []),\n ...menuItems,\n ],\n [higherContext, menuItems],\n );\n\n // Menu resources\n const divHandlderRef = useRef<HTMLDivElement | null>(null);\n const menuRef = useRef<HTMLDivElement | null>(null);\n const [menuXPos, setMenuXPos] = useState<number>(0);\n const [menuYPos, setMenuYPos] = useState<number>(0);\n const [menuVisible, setMenuVisible] = useState<boolean>(false);\n const [menuInDom, setMenuInDom] = useState<boolean>(false);\n const [mouseOverHandlerDiv, setMouseOverHandlerDiv] = useState<boolean>(false);\n const [mouseOverMenu, setMouseOverMenu] = useState<boolean>(false);\n\n // Get holder position\n const divHandlerPos = divHandlderRef.current?.getBoundingClientRect() ?? null;\n\n // Handle click off the menu\n const handleClick = useCallback((e: globalThis.MouseEvent) => {\n if (\n menuRef.current &&\n ((e.target instanceof Element && !menuRef.current?.contains(e.target)) ||\n !(e.target instanceof Element))\n ) {\n setMenuVisible(false);\n }\n }, []);\n\n // Update the document click handler\n useEffect(() => {\n if (menuVisible) document.addEventListener(\"mousedown\", handleClick);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n };\n }, [handleClick, menuVisible]);\n\n const removeController = useRef<AbortController>(new AbortController());\n useEffect(() => {\n if (!mouseOverMenu && !menuVisible && !mouseOverHandlerDiv) {\n removeController.current.abort();\n removeController.current = new AbortController();\n setTimeout(() => {\n if (!removeController.current.signal.aborted) setMenuInDom(false);\n }, 300);\n }\n }, [mouseOverHandlerDiv, menuVisible, mouseOverMenu]);\n\n return (\n <ContentMenuHandlerContext.Provider\n value={{\n menuItems: thisMenuItems,\n }}\n >\n <div\n ref={divHandlderRef}\n {...rest}\n className={[styles.contextMenuHandler, rest.className].join(\" \")}\n onContextMenu={async (e) => {\n if (!showLowMenu) {\n setMenuInDom(true);\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n removeController.current.abort();\n setMenuVisible(true);\n setMenuXPos(e.pageX);\n setMenuYPos(e.pageY);\n }, 1);\n }\n }}\n onMouseEnter={async (e) => {\n if (showLowMenu) {\n setMenuInDom(true);\n setMouseOverHandlerDiv(false);\n setTimeout(() => {\n removeController.current.abort();\n setMouseOverHandlerDiv(true);\n }, 1);\n }\n rest.onMouseEnter?.(e);\n }}\n onMouseLeave={async (e) => {\n if (showLowMenu) {\n removeController.current.abort();\n removeController.current = new AbortController();\n setMouseOverHandlerDiv(false);\n }\n rest.onMouseLeave?.(e);\n }}\n >\n {children}\n </div>\n {menuInDom &&\n divHandlerPos &&\n createPortal(\n <div\n className={styles.anchor}\n onMouseEnter={() => {\n removeController.current.abort();\n setMouseOverMenu(true);\n }}\n onMouseLeave={() => {\n removeController.current.abort();\n removeController.current = new AbortController();\n setMouseOverMenu(false);\n }}\n >\n {showLowMenu ? (\n <LowMenu\n visible={mouseOverHandlerDiv}\n entries={menuItems}\n xPos={divHandlerPos.left}\n yPos={divHandlerPos.bottom}\n maxWidth={divHandlerPos.width}\n />\n ) : (\n <ContextMenu\n visible={menuVisible}\n ref={menuRef}\n entries={thisMenuItems}\n xPos={menuXPos}\n yPos={menuYPos}\n toClose={() => {\n setMenuVisible(false);\n setMouseOverMenu(false);\n }}\n />\n )}\n </div>,\n document.body,\n )}\n </ContentMenuHandlerContext.Provider>\n );\n};\n\nContextMenuHandler.displayName = \"ContextMenuHandler\";\n","import styles from \"./LowMenu.module.css\";\nimport { LowMenuButton } from \"./LowMenuButton\";\nimport { MenuItem } from \"./interface\";\n\ninterface LowMenuProps {\n entries: MenuItem[];\n visible: boolean;\n xPos: number;\n yPos: number;\n maxWidth: number;\n}\n\nexport const LowMenu = ({ entries, visible, xPos, yPos, maxWidth }: LowMenuProps): JSX.Element => {\n // Only show the low menu if it is on the screen\n if (xPos >= window.innerWidth || yPos >= window.innerHeight) return <></>;\n // Show the menu\n return (\n <div\n className={[styles.lowMenu, visible ? styles.visible : styles.hidden].join(\" \")}\n aria-label=\"Low context menu\"\n style={{\n left: `${xPos}px`,\n top: `${yPos}px`,\n maxWidth: `calc(${maxWidth}px)`,\n width: `calc(${maxWidth}px - 4px)`,\n }}\n >\n <div className={styles.lowMenuButtonHolder}>\n {entries.map((e, i) => (\n <LowMenuButton\n key={i}\n entry={e}\n />\n ))}\n </div>\n </div>\n );\n};\n\nLowMenu.displayName = \"LowMenu\";\n",".lowMenu {\n z-index: 2;\n position: absolute;\n margin: 0px;\n transition: opacity 0.3s linear;\n}\n\n.lowMenuButtonHolder {\n border: 2px solid rgb(17, 20, 24);\n border-top-right-radius: 4px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n background-color: rgb(17, 20, 24);\n box-shadow: 2px 2px 2px rgb(64, 64, 64, 0.5);\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n gap: 2px;\n row-gap: 2px;\n width: fit-content;\n}\n\n.lowMenu.hidden {\n opacity: 0;\n}\n\n.lowMenu.visible,\n.lowMenu:hover {\n opacity: 1;\n}\n\n.lowMenuItem {\n background-color: rgb(251, 253, 246);\n border: 0;\n color: rgb(17, 20, 24);\n cursor: pointer;\n padding: 0 4px;\n position: relative;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n white-space: nowrap;\n}\n\n.lowMenuItem.disabled {\n background-color: rgba(200, 200, 200);\n cursor: not-allowed;\n}\n\n.lowMenuItem:not(.disabled):hover {\n background-color: rgb(251, 233, 230);\n}\n\n.lowMenu-item .caretHolder {\n align-self: flex-end;\n}\n\n.lowMenuItem .caretHolder .subMenu {\n z-index: 1;\n position: relative;\n}\n","import { useState } from \"react\";\nimport styles from \"./LowMenu.module.css\";\nimport { LowSubMenu } from \"./LowSubMenu\";\nimport { MenuItem } from \"./interface\";\n\ninterface LowMenuButtonProps {\n entry: MenuItem;\n}\nexport const LowMenuButton = ({ entry }: LowMenuButtonProps) => {\n const [target, setTarget] = useState<Range | null>(null);\n return (\n <div\n className={[styles.lowMenuItem, entry.disabled ? styles.disabled : \"\"]\n .filter((c) => c !== \"\")\n .join(\" \")}\n aria-label={typeof entry.label === \"string\" ? entry.label : undefined}\n aria-disabled={entry.disabled}\n onMouseEnter={() => {\n const sel = window.getSelection();\n const target = sel && sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n setTarget(target);\n }}\n onMouseLeave={() => {\n setTarget(null);\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (!entry.disabled) entry.action?.(target);\n }}\n >\n <span>{entry.label}</span>\n {entry.group && <LowSubMenu entry={entry} />}\n </div>\n );\n};\n\nLowMenuButton.displayName = \"LowMenuButton\";\n","import { useState } from \"react\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport styles from \"./LowMenu.module.css\";\nimport { MenuItem } from \"./interface\";\n\nexport interface LowSubMenuProps {\n entry: MenuItem;\n lowMenu?: boolean;\n}\n\nexport const LowSubMenu = ({ entry }: LowSubMenuProps): JSX.Element => {\n const [visible, setVisible] = useState<boolean>(false);\n if (!entry.group || entry.group.length === 0) return <></>;\n return (\n <span\n aria-label={`Sub menu for ${entry.label}`}\n className={styles.caretHolder}\n onMouseEnter={() => {\n setVisible(true);\n }}\n onMouseLeave={() => {\n setVisible(false);\n }}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z\" />\n </svg>\n <div className={styles.subMenu}>\n {visible && (\n <ContextMenu\n visible={visible}\n entries={entry.group}\n xPos={14}\n yPos={entry.group.length * -21 - 8}\n toClose={() => setVisible(false)}\n />\n )}\n </div>\n </span>\n );\n};\n\nLowSubMenu.displayName = \"LowSubMenu\";\n","import { ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { chkPosition } from \"../functions/chkPosition\";\nimport styles from \"./ContextWindow.module.css\";\n\nexport const MIN_Z_INDEX = 3000;\nconst CONTEXT_WINDOW_DATA_ATTR = \"data-context-window\";\n\ninterface ContextWindowProps extends React.HTMLAttributes<HTMLDivElement> {\n id: string;\n visible: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n title: string;\n titleElement?: ReactNode;\n style?: React.CSSProperties;\n children: React.ReactNode;\n minZIndex?: number;\n}\n\n// Helper function to get the highest zIndex from all context windows in the DOM\nconst getMaxZIndex = (componentMinZIndex: number): number => {\n const windows = document.body.querySelectorAll(`[${CONTEXT_WINDOW_DATA_ATTR}]`);\n let maxZIndex = componentMinZIndex - 1;\n windows.forEach((win) => {\n const zIndexStr = (win as HTMLElement).style.zIndex;\n if (zIndexStr) {\n const zIndex = parseInt(zIndexStr, 10);\n if (!isNaN(zIndex) && zIndex > maxZIndex) {\n maxZIndex = zIndex;\n }\n }\n });\n return maxZIndex;\n};\n\nexport const ContextWindow = ({\n id,\n visible,\n title,\n titleElement,\n children,\n onOpen,\n onClose,\n minZIndex = MIN_Z_INDEX,\n ...rest\n}: ContextWindowProps): JSX.Element => {\n const divRef = useRef<HTMLDivElement | null>(null);\n const windowRef = useRef<HTMLDivElement | null>(null);\n const [windowInDOM, setWindowInDOM] = useState<boolean>(false);\n const [windowVisible, setWindowVisible] = useState<boolean>(false);\n const [zIndex, setZIndex] = useState<number>(minZIndex);\n const resizeListenerRef = useRef<(() => void) | null>(null);\n\n // Position\n const windowPos = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n const [moving, setMoving] = useState<boolean>(false);\n\n const move = useCallback((x: number, y: number) => {\n if (windowRef.current && windowPos.current) {\n const window = windowRef.current;\n const pos = windowPos.current;\n pos.x += x;\n pos.y += y;\n window.style.transform = `translate(${pos.x}px, ${pos.y}px)`;\n }\n }, []);\n\n const checkPosition = useCallback(() => {\n const chkPos = chkPosition(windowRef);\n move(chkPos.translateX, chkPos.translateY);\n }, [move]);\n\n const mouseMove = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n move(e.movementX, e.movementY);\n },\n [move],\n );\n\n // Store stable references to mouseMove and mouseUp for cleanup\n const mouseMoveRef = useRef(mouseMove);\n const mouseUpRef = useRef<(e: MouseEvent) => void>(() => {});\n\n const mouseUp = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setMoving(false);\n checkPosition();\n document.removeEventListener(\"mousemove\", mouseMoveRef.current);\n document.removeEventListener(\"mouseup\", mouseUpRef.current);\n if (resizeListenerRef.current) {\n window.removeEventListener(\"resize\", resizeListenerRef.current);\n resizeListenerRef.current = null;\n }\n if (e.target && (e.target instanceof HTMLElement || e.target instanceof SVGElement))\n e.target.style.userSelect = \"auto\";\n },\n [checkPosition],\n );\n\n // Update refs when callbacks change\n useEffect(() => {\n mouseMoveRef.current = mouseMove;\n mouseUpRef.current = mouseUp;\n }, [mouseMove, mouseUp]);\n\n // Helper function to push this window to the top\n const pushToTop = useCallback(() => {\n const maxZIndex = getMaxZIndex(minZIndex);\n setZIndex(maxZIndex + 1);\n }, [minZIndex]);\n\n // Update visibility\n useEffect(() => {\n // Visible set, but not in DOM\n if (visible && !windowInDOM) {\n setWindowInDOM(true);\n } else if (visible && windowInDOM && !windowVisible) {\n pushToTop();\n setWindowVisible(visible);\n onOpen?.();\n // Get starting position\n if (divRef.current && windowRef.current) {\n const parentPos = divRef.current.getBoundingClientRect();\n const pos = windowRef.current.getBoundingClientRect();\n const windowHeight = pos.bottom - pos.top;\n windowRef.current.style.left = `${parentPos.left}px`;\n windowRef.current.style.top = `${\n parentPos.bottom + windowHeight < window.innerHeight\n ? parentPos.bottom\n : Math.max(0, parentPos.top - windowHeight)\n }px`;\n windowRef.current.style.transform = \"\";\n windowPos.current = { x: 0, y: 0 };\n }\n checkPosition();\n } else if (!visible && windowVisible) {\n setWindowVisible(false);\n } else if (!visible && windowInDOM) {\n setWindowInDOM(false);\n }\n }, [checkPosition, onOpen, pushToTop, visible, windowInDOM, windowVisible]);\n\n // Cleanup effect to remove event listeners on unmount\n useEffect(() => {\n return () => {\n // Clean up event listeners if component unmounts while dragging\n document.removeEventListener(\"mousemove\", mouseMoveRef.current);\n document.removeEventListener(\"mouseup\", mouseUpRef.current);\n if (resizeListenerRef.current) {\n window.removeEventListener(\"resize\", resizeListenerRef.current);\n resizeListenerRef.current = null;\n }\n };\n }, []);\n\n return (\n <div\n className={styles.contextWindowAnchor}\n ref={divRef}\n >\n {windowInDOM &&\n createPortal(\n <div\n {...rest}\n ref={windowRef}\n id={id}\n {...{ [CONTEXT_WINDOW_DATA_ATTR]: \"true\" }}\n className={[styles.contextWindow, rest.className].filter((c) => c).join(\" \")}\n style={{\n ...rest.style,\n opacity: moving ? 0.8 : windowVisible ? 1 : 0,\n visibility: windowVisible ? \"visible\" : \"hidden\",\n zIndex: zIndex,\n minHeight: rest.style?.minHeight ?? \"150px\",\n minWidth: rest.style?.minWidth ?? \"200px\",\n maxHeight: rest.style?.maxHeight ?? \"1000px\",\n maxWidth: rest.style?.maxWidth ?? \"1000px\",\n }}\n onClickCapture={(e) => {\n pushToTop();\n rest.onClickCapture?.(e);\n }}\n >\n <div\n className={[styles.contextWindowTitle, moving ? styles.moving : \"\"]\n .filter((c) => c !== \"\")\n .join(\" \")}\n onMouseDown={(e: React.MouseEvent) => {\n if (e.target && (e.target instanceof HTMLElement || e.target instanceof SVGElement))\n e.target.style.userSelect = \"none\";\n setMoving(true);\n pushToTop();\n document.addEventListener(\"mouseup\", mouseUpRef.current);\n document.addEventListener(\"mousemove\", mouseMoveRef.current);\n const resizeListener = () => checkPosition();\n resizeListenerRef.current = resizeListener;\n window.addEventListener(\"resize\", resizeListener);\n }}\n >\n <div\n className={styles.contextWindowTitleText}\n title={title}\n >\n {titleElement ? titleElement : title}\n </div>\n <div\n className={styles.contextWindowTitleClose}\n role=\"button\"\n aria-label=\"Close\"\n onClick={onClose}\n title={`Close ${title && title.trim() !== \"\" ? title : \"window\"}`}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\" />\n </svg>\n </div>\n </div>\n <div className={styles.contextWindowBody}>\n <div>{children}</div>\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n};\n\nContextWindow.displayName = \"ContextWindow\";\n","import { RefObject } from \"react\";\n\n/**\n * Check that an existing div is inside the viewport\n * @param divRef Check div is inside view port, and return n\n * @returns \\{ translateX, translateY \\} Amount to move on X and Y axis\n */\nexport const chkPosition = (\n divRef: RefObject<HTMLDivElement>,\n): { translateX: number; translateY: number } => {\n if (!divRef.current) {\n return { translateX: 0, translateY: 0 };\n } else {\n const innerBounce = 16;\n const posn = divRef.current.getBoundingClientRect();\n let translateX = 0;\n if (posn.left < innerBounce) {\n translateX = -posn.left + innerBounce;\n } else if (posn.right > window.innerWidth) {\n translateX = Math.max(-posn.left + innerBounce, window.innerWidth - posn.right - innerBounce);\n }\n let translateY = 0;\n if (posn.top < innerBounce) {\n translateY = -posn.top + innerBounce;\n } else if (posn.bottom > window.innerHeight) {\n translateY = Math.max(\n -posn.top + innerBounce,\n window.innerHeight - posn.bottom - innerBounce,\n );\n }\n return { translateX, translateY };\n }\n};\n",".contextWindowAnchor {\n position: relative;\n}\n\n.contextWindow {\n z-index: 2001;\n border: 1px black solid;\n margin: 0;\n padding: 4px;\n background-color: rgb(250, 250, 250);\n box-shadow: 6px 6px 6px rgb(64, 64, 64, 0.5);\n transition: opacity 0.25s linear;\n justify-content: flex-start;\n position: absolute;\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n border-bottom-left-radius: 8px;\n resize: both;\n overflow: auto;\n max-height: 95vh;\n max-width: 95vw;\n}\n\n.contextWindowTitle {\n border-bottom: 1px black dashed;\n box-sizing: unset;\n padding-bottom: 4px;\n margin: 0 4px 3px 4px;\n height: 24px;\n line-height: 24px;\n max-height: 24px;\n cursor: grab;\n font-size: 18px;\n font-weight: 600;\n display: flex;\n flex-direction: row;\n align-items: center;\n width: calc(100% - 8px);\n}\n\n.contextWindowTitle.moving {\n cursor: grabbing;\n}\n\n.contextWindowTitleText {\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: calc(100% - 16px);\n}\n\n.contextWindowTitleClose {\n display: flex;\n color: black;\n height: 16px;\n width: 16px;\n border-radius: 3px;\n margin-left: 2px;\n cursor: pointer;\n line-height: 16px;\n}\n\n.contextWindowTitleClose:hover {\n background-color: black;\n color: white;\n}\n\n.contextWindowBody {\n overflow: auto;\n padding-bottom: 8px;\n margin-right: 4px;\n height: calc(100% - 40px);\n}\n\n.contextWindowBody::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.contextWindowBody::-webkit-scrollbar-track {\n background: white;\n border-radius: 8px;\n}\n\n.contextWindowBody::-webkit-scrollbar-thumb {\n background: lightgrey;\n border: none;\n border-radius: 8px;\n}\n\n.contextWindowBody::-webkit-scrollbar-thumb:hover {\n background: grey;\n}\n","import { ReactNode, useEffect } from \"react\";\n\ninterface ContextWindowStackProps {\n id?: string;\n minZIndex?: number;\n children?: JSX.Element[] | JSX.Element | ReactNode;\n}\n\ndeclare global {\n interface GlobalThis {\n __ContextWindowStackRendered?: boolean;\n }\n}\n\nconst SESSION_KEY = \"context-menu.ContextWindowStack.rendered\";\n\n/**\n * @deprecated ContextWindowStack is no longer required. ContextWindow now manages z-index automatically.\n * This component is kept for backwards compatibility and will be removed in a future version.\n * It will render its children only once per browser session and then return `null` on subsequent mounts.\n *\n * Note: The `id` and `minZIndex` props are ignored and have no effect. They remain in the interface for backward compatibility only.\n */\n\nexport const ContextWindowStack = ({ children }: ContextWindowStackProps): JSX.Element => {\n useEffect(() => {\n const doWarn = () =>\n console.warn(\n \"ContextWindowStack is deprecated and no longer required. ContextWindow now manages z-index automatically. Please remove the ContextWindowStack wrapper from your code.\",\n );\n\n try {\n // Prefer sessionStorage so the warning lasts for the browser session.\n if (typeof window !== \"undefined\" && window.sessionStorage) {\n const already = window.sessionStorage.getItem(SESSION_KEY);\n if (!already) {\n window.sessionStorage.setItem(SESSION_KEY, \"1\");\n doWarn();\n }\n return;\n }\n } catch {\n // sessionStorage may be unavailable (privacy mode). Fall through to global fallback.\n }\n\n // Fallback: use a global flag for environments where sessionStorage isn't available.\n const g = globalThis as unknown as { __ContextWindowStackRendered?: boolean };\n if (!g.__ContextWindowStackRendered) {\n g.__ContextWindowStackRendered = true;\n doWarn();\n }\n }, []);\n\n return <>{children}</>;\n};\n\nContextWindowStack.displayName = \"ContextWindowStack\";\n"],"names":[],"version":3,"file":"main.js.map"}
@@ -25,7 +25,7 @@ export const ContextMenu: ForwardRefExoticComponent<ContextMenuProps & RefAttrib
25
25
  interface ClickForMenuProps extends React.HTMLAttributes<HTMLDivElement> {
26
26
  id: string;
27
27
  menuItems?: MenuItem[];
28
- chidren?: React.ReactNode;
28
+ children?: React.ReactNode;
29
29
  }
30
30
  export const ClickForMenu: {
31
31
  ({ id, menuItems, children, ...rest }: ClickForMenuProps): JSX.Element;
@@ -40,15 +40,6 @@ export const ContextMenuHandler: {
40
40
  ({ children, menuItems, showLowMenu, ...rest }: ContextMenuHandlerProps): JSX.Element;
41
41
  displayName: string;
42
42
  };
43
- interface ContextWindowStackProps {
44
- id?: string;
45
- minZIndex?: number;
46
- children?: JSX.Element[] | JSX.Element;
47
- }
48
- export const ContextWindowStack: {
49
- ({ minZIndex, children, }: ContextWindowStackProps): JSX.Element;
50
- displayName: string;
51
- };
52
43
  interface ContextWindowProps extends React.HTMLAttributes<HTMLDivElement> {
53
44
  id: string;
54
45
  visible: boolean;
@@ -58,9 +49,31 @@ interface ContextWindowProps extends React.HTMLAttributes<HTMLDivElement> {
58
49
  titleElement?: ReactNode;
59
50
  style?: React.CSSProperties;
60
51
  children: React.ReactNode;
52
+ minZIndex?: number;
61
53
  }
62
54
  export const ContextWindow: {
63
- ({ id, visible, title, titleElement, children, onOpen, onClose, ...rest }: ContextWindowProps): JSX.Element;
55
+ ({ id, visible, title, titleElement, children, onOpen, onClose, minZIndex, ...rest }: ContextWindowProps): JSX.Element;
56
+ displayName: string;
57
+ };
58
+ interface ContextWindowStackProps {
59
+ id?: string;
60
+ minZIndex?: number;
61
+ children?: JSX.Element[] | JSX.Element | ReactNode;
62
+ }
63
+ declare global {
64
+ interface GlobalThis {
65
+ __ContextWindowStackRendered?: boolean;
66
+ }
67
+ }
68
+ /**
69
+ * @deprecated ContextWindowStack is no longer required. ContextWindow now manages z-index automatically.
70
+ * This component is kept for backwards compatibility and will be removed in a future version.
71
+ * It will render its children only once per browser session and then return `null` on subsequent mounts.
72
+ *
73
+ * Note: The `id` and `minZIndex` props are ignored and have no effect. They remain in the interface for backward compatibility only.
74
+ */
75
+ export const ContextWindowStack: {
76
+ ({ children }: ContextWindowStackProps): JSX.Element;
64
77
  displayName: string;
65
78
  };
66
79
 
@@ -1 +1 @@
1
- {"mappings":";AAGA,yBAA0B,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACpE,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,2BAA2B,EACzB,QAAQ,EACR,IAAI,EACJ,QAAc,EACd,GAAG,IAAI,EACR,EAAE,eAAe,GAAG,IAAI,OAAO,CAyD/B;AA9DD,MAAM,mBAAU,UAAU;;;ACT1B;IACE,KAAK,EAAE,MAAM,GAAG,IAAI,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxF,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;CACpB;AGAD;IACE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,OAAO,MAAM,wFAsCZ,CAAC;AC7CF,2BAA4B,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,SAAS,CAAC;CAC3B;AAED,OAAO,MAAM;2CAKV,iBAAiB,GAAG,IAAI,OAAO;;CAmFjC,CAAC;AIhFF,iCAAyC,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACnF,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAMD,OAAO,MAAM;oDAKV,uBAAuB,GAAG,IAAI,OAAO;;CA4JvC,CAAC;AEjLF;IACE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,IAAI,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC;CACxC;AAcD,OAAO,MAAM;+BAGV,uBAAuB,GAAG,IAAI,OAAO;;CAgBvC,CAAC;AC7CF,4BAA6B,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,aAAa,CAAC;IAC5B,QAAQ,EAAE,MAAM,SAAS,CAAC;CAC3B;AAED,OAAO,MAAM;+EASV,kBAAkB,GAAG,IAAI,OAAO;;CAiLlC,CAAC","sources":["src/src/components/AutoHeight.tsx","src/src/components/interface.ts","src/src/components/ContextSubMenu.tsx","src/src/components/ContextMenuEntry.tsx","src/src/components/ContextMenu.tsx","src/src/components/ClickForMenu.tsx","src/src/components/LowSubMenu.tsx","src/src/components/LowMenuButton.tsx","src/src/components/LowMenu.tsx","src/src/components/ContextMenuHandler.tsx","src/src/functions/chkPosition.ts","src/src/components/ContextWindowStack.tsx","src/src/components/ContextWindow.tsx","src/src/components/index.ts","src/src/main.ts","src/main.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import \"../global.d.ts\";\nexport * from \"./components\";\n"],"names":[],"version":3,"file":"context-menu.d.ts.map"}
1
+ {"mappings":";AAGA,yBAA0B,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACpE,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,2BAA2B,EACzB,QAAQ,EACR,IAAI,EACJ,QAAc,EACd,GAAG,IAAI,EACR,EAAE,eAAe,GAAG,IAAI,OAAO,CAyD/B;AA9DD,MAAM,mBAAU,UAAU;;;ACT1B;IACE,KAAK,EAAE,MAAM,GAAG,IAAI,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxF,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;CACpB;AGKD;IACE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,OAAO,MAAM,wFA2CZ,CAAC;ACvDF,2BAA4B,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,SAAS,CAAC;CAC5B;AAED,OAAO,MAAM;2CAKV,iBAAiB,GAAG,IAAI,OAAO;;CAqGjC,CAAC;AIlGF,iCAAyC,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACnF,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAMD,OAAO,MAAM;oDAKV,uBAAuB,GAAG,IAAI,OAAO;;CA4JvC,CAAC;AEvLF,4BAA6B,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,aAAa,CAAC;IAC5B,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,OAAO,MAAM;0FAUV,kBAAkB,GAAG,IAAI,OAAO;;CA8LlC,CAAC;AC1OF;IACE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,IAAI,OAAO,EAAE,GAAG,IAAI,OAAO,GAAG,SAAS,CAAC;CACpD;AAED,QAAQ,MAAM,CAAC;IACb,UAAU,UAAU;QAClB,4BAA4B,CAAC,EAAE,OAAO,CAAC;KACxC;CACF;AAID;;;;;;GAMG;AAEH,OAAO,MAAM;mBAAoC,uBAAuB,GAAG,IAAI,OAAO;;CA8BrF,CAAC","sources":["src/src/components/AutoHeight.tsx","src/src/components/interface.ts","src/src/components/ContextSubMenu.tsx","src/src/components/ContextMenuEntry.tsx","src/src/components/ContextMenu.tsx","src/src/components/ClickForMenu.tsx","src/src/components/LowSubMenu.tsx","src/src/components/LowMenuButton.tsx","src/src/components/LowMenu.tsx","src/src/components/ContextMenuHandler.tsx","src/src/functions/chkPosition.ts","src/src/components/ContextWindow.tsx","src/src/components/ContextWindowStack.tsx","src/src/components/index.ts","src/src/main.ts","src/main.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import \"../global.d.ts\";\nexport * from \"./components\";\n"],"names":[],"version":3,"file":"context-menu.d.ts.map"}