@omerdlw/base-framework 3.0.0 → 3.0.1

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.
@@ -2,8 +2,8 @@ import { navigationModule } from './chunk-RIOKLMYM.js';
2
2
  import { modalModule } from './chunk-FIMPHODX.js';
3
3
  import { ambientModule } from './chunk-TG6NMHXI.js';
4
4
  import { backgroundModule } from './chunk-CGHZSSFR.js';
5
- import { contextMenuModule } from './chunk-CYU6SGAL.js';
6
- import { dockModule } from './chunk-JIXBFFRD.js';
5
+ import { contextMenuModule } from './chunk-RRAZKP3J.js';
6
+ import { dockModule } from './chunk-WVRMABDN.js';
7
7
  import { notificationModule } from './chunk-SYAVGTOX.js';
8
8
  import { mediaModule } from './chunk-R2YGFJDJ.js';
9
9
  import { controlsModule } from './chunk-4GMQKD6F.js';
@@ -24,5 +24,5 @@ var defaultModules = Object.freeze([
24
24
  ]);
25
25
 
26
26
  export { defaultModules };
27
- //# sourceMappingURL=chunk-M57SNWXK.js.map
28
- //# sourceMappingURL=chunk-M57SNWXK.js.map
27
+ //# sourceMappingURL=chunk-I5GK7VOV.js.map
28
+ //# sourceMappingURL=chunk-I5GK7VOV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAwBO,IAAM,cAAA,GAAiB,OAAO,MAAA,CAAO;AAAA,EAC1C,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAU","file":"chunk-M57SNWXK.js","sourcesContent":["import { ambientModule } from \"./ambient/module\";\nimport { backgroundModule } from \"./background/module\";\nimport { contextMenuModule } from \"./context-menu/module\";\nimport { controlsModule } from \"./controls/module\";\nimport { dockModule } from \"./dock/module\";\nimport { loadingModule } from \"./loading/module\";\nimport { mediaModule } from \"./media/module\";\nimport { modalModule } from \"./modal/module\";\nimport { navigationModule } from \"./navigation/module\";\nimport { notificationModule } from \"./notification/module\";\n\nexport {\n ambientModule,\n backgroundModule,\n contextMenuModule,\n controlsModule,\n dockModule,\n loadingModule,\n mediaModule,\n modalModule,\n navigationModule,\n notificationModule,\n};\n\nexport const defaultModules = Object.freeze([\n backgroundModule,\n ambientModule,\n navigationModule,\n dockModule,\n controlsModule,\n contextMenuModule,\n loadingModule,\n mediaModule,\n modalModule,\n notificationModule,\n] as const);\n"]}
1
+ {"version":3,"sources":["../src/modules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAwBO,IAAM,cAAA,GAAiB,OAAO,MAAA,CAAO;AAAA,EAC1C,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAU","file":"chunk-I5GK7VOV.js","sourcesContent":["import { ambientModule } from \"./ambient/module\";\nimport { backgroundModule } from \"./background/module\";\nimport { contextMenuModule } from \"./context-menu/module\";\nimport { controlsModule } from \"./controls/module\";\nimport { dockModule } from \"./dock/module\";\nimport { loadingModule } from \"./loading/module\";\nimport { mediaModule } from \"./media/module\";\nimport { modalModule } from \"./modal/module\";\nimport { navigationModule } from \"./navigation/module\";\nimport { notificationModule } from \"./notification/module\";\n\nexport {\n ambientModule,\n backgroundModule,\n contextMenuModule,\n controlsModule,\n dockModule,\n loadingModule,\n mediaModule,\n modalModule,\n navigationModule,\n notificationModule,\n};\n\nexport const defaultModules = Object.freeze([\n backgroundModule,\n ambientModule,\n navigationModule,\n dockModule,\n controlsModule,\n contextMenuModule,\n loadingModule,\n mediaModule,\n modalModule,\n notificationModule,\n] as const);\n"]}
@@ -1,4 +1,4 @@
1
- import { useOptionalDockState } from './chunk-JIXBFFRD.js';
1
+ import { useOptionalDockState } from './chunk-WVRMABDN.js';
2
2
  import { defineThemeSpec, useTheme, useModuleMotion } from './chunk-7TAVYJ3A.js';
3
3
  import { getOrCreateGlobalContext, defineModule, useRegistryEntries, useModuleRegistration } from './chunk-GF7TUX5I.js';
4
4
  import { createStore, useStore, useIsomorphicLayoutEffect, useRequiredContext, isBrowser, toArray, toFiniteNumber, report, isObject, isImageIconSource } from './chunk-TV3WEF5G.js';
@@ -884,5 +884,5 @@ function defineContextMenu(definition = {}) {
884
884
  }
885
885
 
886
886
  export { CONTEXT_MENU_VISIBILITY_EVENT, CURRENT_PAGE_KEY, ContextMenuContext, ContextMenuGlobal, ContextMenuHeader, ContextMenuHeaderIcon, ContextMenuItem, ContextMenuProvider, ContextMenuRenderer, GLOBAL_MENU_KEY, INITIAL_POSITION, MENU_SCREEN_MARGIN, contextMenuModule, contextMenuTheme, createInitialMenuState, defineContextMenu, emitContextMenuVisibility, extractNodeText, getNextActiveIndex, isScrollLockKey, joinClassNames, positionMenu, prepareMenu, resolveAsBoolean, resolveAsValue, resolveContextMenu, resolveContextMenuPageMeta, resolveMenuHeader, resolveMenuItems, resolveNextOpenState, safeInvoke, useContextMenu, useContextMenuActions, useContextMenuContentModel, useContextMenuListener, useContextMenuRegistration, useContextMenuState, useMenuDismissal };
887
- //# sourceMappingURL=chunk-CYU6SGAL.js.map
888
- //# sourceMappingURL=chunk-CYU6SGAL.js.map
887
+ //# sourceMappingURL=chunk-RRAZKP3J.js.map
888
+ //# sourceMappingURL=chunk-RRAZKP3J.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/context-menu/constants.ts","../src/modules/context-menu/items.ts","../src/modules/context-menu/resolver.ts","../src/modules/context-menu/state.ts","../src/modules/context-menu/context.tsx","../src/modules/context-menu/dom.ts","../src/modules/context-menu/hooks.ts","../src/modules/context-menu/motion.ts","../src/modules/context-menu/overlay.tsx","../src/modules/context-menu/module.tsx"],"names":["useMemo","usePathname","useEffect","useRef","useState","jsx"],"mappings":"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","file":"chunk-CYU6SGAL.js","sourcesContent":["import { defineThemeSpec } from \"@/theme\";\nimport {\n type ContextMenuMotion,\n type ContextMenuPosition,\n type ContextMenuThemeSlot,\n} from \"./types\";\n\nexport const contextMenuTheme = defineThemeSpec<\n ContextMenuThemeSlot,\n ContextMenuMotion\n>(\"context-menu\");\n\nexport const CURRENT_PAGE_KEY = \"current-page\";\nexport const GLOBAL_MENU_KEY = \"*\";\nexport const MENU_SCREEN_MARGIN = 10;\n\nexport const CONTEXT_MENU_VISIBILITY_EVENT = \"context-menu:visibility\";\nexport const INITIAL_POSITION: ContextMenuPosition = Object.freeze({\n x: 0,\n y: 0,\n});\n","import { isValidElement, type ReactNode } from \"react\";\nimport { isObject, report, toArray } from \"@/utils\";\nimport {\n type ContextMenuConfig,\n type ContextMenuContextValue,\n type ContextMenuItem,\n type ContextMenuPageMeta,\n type ContextMenuResolvedHeader,\n type ContextMenuResolvedItem,\n} from \"./types\";\n\nexport function extractNodeText(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value\n .map(extractNodeText)\n .filter(Boolean)\n .join(\" \")\n .replace(/\\s+/g, \" \")\n .trim();\n }\n if (isValidElement(value)) {\n return extractNodeText((value.props as { children?: ReactNode })?.children);\n }\n return \"\";\n}\n\nexport function resolveAsBoolean(\n value: unknown,\n context?: unknown,\n defaultValue = true,\n): boolean {\n if (typeof value === \"function\") {\n try {\n return Boolean(value(context));\n } catch {\n return false;\n }\n }\n if (value === undefined) {\n return defaultValue;\n }\n return Boolean(value);\n}\n\nexport function resolveAsValue<T = unknown>(\n value: unknown,\n context?: unknown,\n fallback?: T,\n): T {\n if (typeof value === \"function\") {\n try {\n const resolved = value(context);\n return resolved === undefined ? (fallback as T) : resolved;\n } catch {\n return fallback as T;\n }\n }\n return value === undefined ? (fallback as T) : (value as T);\n}\n\nexport function safeInvoke<T = unknown>(\n handler: unknown,\n ...args: unknown[]\n): T | undefined {\n if (typeof handler !== \"function\") return undefined;\n try {\n const result = handler(...args);\n if (result && typeof result.then === \"function\") {\n result.catch((err: unknown) =>\n report(\"Context menu async callback\", err),\n );\n }\n return result as T;\n } catch (error) {\n report(\"Context menu callback\", error);\n return undefined;\n }\n}\n\nexport function resolveContextMenuPageMeta(\n dockItem: unknown,\n pathname = \"\",\n): ContextMenuPageMeta | null {\n if (!isObject(dockItem)) return null;\n const title = (dockItem.contextMenuTitle ??\n dockItem.title ??\n null) as ReactNode;\n const description = (dockItem.contextMenuDescription ??\n dockItem.description ??\n null) as ReactNode;\n const eyebrow = (dockItem.contextMenuEyebrow ??\n dockItem.eyebrow ??\n null) as ReactNode;\n const icon = (dockItem.contextMenuIcon ?? dockItem.icon ?? null) as ReactNode;\n\n if (!title && !description && !icon && !eyebrow) return null;\n\n return {\n description,\n descriptionText: extractNodeText(description),\n eyebrow,\n icon,\n path:\n typeof dockItem.path === \"string\" && dockItem.path\n ? dockItem.path\n : pathname,\n title,\n titleText:\n extractNodeText(title) ||\n (typeof dockItem.name === \"string\" ? dockItem.name : \"\") ||\n \"\",\n };\n}\n\nfunction resolveItem(\n item: ContextMenuItem | \"separator\" | null | undefined,\n index: number,\n context: ContextMenuContextValue,\n): ContextMenuResolvedItem | null {\n if (!item) return null;\n if (item === \"separator\" || item.type === \"separator\") {\n return {\n key: (item !== \"separator\" && item.key) || `separator-${index}`,\n type: \"separator\",\n };\n }\n\n if (\n resolveAsBoolean(item.hidden, context, false) ||\n !resolveAsBoolean(item.visible, context, true)\n ) {\n return null;\n }\n\n const label = resolveAsValue(item.label, context, \"\");\n if (\n (typeof label !== \"string\" && typeof label !== \"number\") ||\n !String(label).trim()\n ) {\n return null;\n }\n\n const handler = item.onSelect ?? item.onClick ?? null;\n const shortcut = resolveAsValue(item.shortcut, context, null);\n\n return {\n ...item,\n className: resolveAsValue(item.className, context, \"\") || \"\",\n closeOnSelect: item.closeOnSelect !== false,\n danger: resolveAsBoolean(item.danger, context, false),\n disabled: resolveAsBoolean(item.disabled, context, false),\n icon: resolveAsValue(item.icon, context, null) || null,\n itemIconClassName:\n resolveAsValue(item.itemIconClassName, context, \"\") || \"\",\n key: item.key || `item-${index}`,\n label: String(label),\n onClick: handler,\n onSelect: handler,\n shortcut: typeof shortcut === \"string\" ? shortcut : null,\n type: \"action\",\n };\n}\n\nexport function resolveMenuItems(\n config: ContextMenuConfig | null | undefined,\n context: ContextMenuContextValue,\n): ContextMenuResolvedItem[] {\n const rawItems = resolveAsValue(config?.items, context, []);\n const items: ContextMenuResolvedItem[] = [];\n\n toArray(rawItems).forEach((raw, index) => {\n const item = resolveItem(raw, index, context);\n if (!item) return;\n const previous = items[items.length - 1];\n if (\n item.type === \"separator\" &&\n (!previous || previous.type === \"separator\")\n ) {\n return;\n }\n items.push(item);\n });\n\n if (items[items.length - 1]?.type === \"separator\") items.pop();\n return items;\n}\n\nexport function resolveMenuHeader(\n config: ContextMenuConfig | null | undefined,\n context: ContextMenuContextValue,\n): ContextMenuResolvedHeader | null {\n if (config?.header === false || config?.showPageHeader === false) return null;\n\n const configured = resolveAsValue(config?.header, context, null);\n const source = isObject(configured)\n ? configured\n : isObject(context.page)\n ? context.page\n : null;\n if (!source) return null;\n\n const title = resolveAsValue(source.title, context, null);\n const description = resolveAsValue(source.description, context, null);\n const icon = resolveAsValue(source.icon, context, null);\n const eyebrow = resolveAsValue(source.eyebrow, context, null);\n if (!title && !description && !icon && !eyebrow) return null;\n\n return {\n description,\n descriptionText: extractNodeText(description),\n eyebrow,\n icon,\n title,\n titleText: extractNodeText(title),\n };\n}\n","import { isObject, toArray } from \"@/utils\";\nimport { CURRENT_PAGE_KEY, GLOBAL_MENU_KEY } from \"./constants\";\nimport { resolveMenuItems, resolveAsBoolean, safeInvoke } from \"./items\";\nimport {\n type ContextMenuCandidate,\n type ContextMenuConfig,\n type ContextMenuContextValue,\n type ContextMenuResolvedItem,\n type ContextMenuResolvedMatch,\n} from \"./types\";\n\nfunction normalizeMenuCandidates(\n registryMenus?: Record<string, unknown> | null,\n): ContextMenuCandidate[] {\n const candidates: ContextMenuCandidate[] = [];\n\n for (const [registryKey, rawConfig] of Object.entries(registryMenus || {})) {\n if (!isObject(rawConfig)) continue;\n\n const { menus, ...sharedConfig } = rawConfig as ContextMenuConfig;\n const nestedMenus = toArray(menus);\n const hasSharedItems =\n Array.isArray(sharedConfig.items) ||\n typeof sharedConfig.items === \"function\";\n\n if (hasSharedItems || nestedMenus.length === 0) {\n candidates.push({\n config: sharedConfig,\n order: candidates.length,\n registryKey,\n });\n }\n\n for (const menu of nestedMenus) {\n candidates.push({\n config: {\n ...sharedConfig,\n ...menu,\n classNames: { ...sharedConfig.classNames, ...menu.classNames },\n },\n order: candidates.length,\n registryKey,\n });\n }\n }\n return candidates;\n}\n\nfunction isPathAllowed(\n config: ContextMenuConfig,\n registryKey: string,\n pathname?: string,\n): boolean {\n if (!pathname) return true;\n if (config.path === pathname) return true;\n\n const explicitPaths = toArray(config.paths).filter(Boolean);\n if (explicitPaths.length > 0) return explicitPaths.includes(pathname);\n\n if (typeof config.pathMatcher === \"function\") {\n try {\n return Boolean(config.pathMatcher(pathname));\n } catch {\n return false;\n }\n }\n\n return (\n registryKey === pathname ||\n registryKey === CURRENT_PAGE_KEY ||\n registryKey === GLOBAL_MENU_KEY\n );\n}\n\nfunction getElementDepth(from: Element, ancestor: Element): number {\n let depth = 0;\n for (\n let node: Element | null = from;\n node && node !== ancestor;\n node = node.parentElement\n ) {\n depth += 1;\n }\n return depth;\n}\n\nfunction getTargetScore(\n config: ContextMenuConfig,\n targetElement: Element | null,\n): number | null {\n const selectors = toArray(config.target).filter(\n (selector) => typeof selector === \"string\" && selector.trim(),\n );\n if (selectors.length === 0) return 0;\n if (!targetElement) return null;\n\n let minDepth = Infinity;\n for (const selector of selectors) {\n try {\n const matched = targetElement.closest(selector);\n if (matched) {\n minDepth = Math.min(minDepth, getElementDepth(targetElement, matched));\n }\n } catch {}\n }\n return minDepth === Infinity ? null : Math.max(0, 100 - minDepth);\n}\n\nfunction getRouteScore(\n config: ContextMenuConfig,\n registryKey: string,\n pathname?: string,\n): number {\n if (!pathname) return 0;\n if (\n config.path === pathname ||\n toArray(config.paths).includes(pathname) ||\n registryKey === pathname\n ) {\n return 100;\n }\n if (registryKey === CURRENT_PAGE_KEY) return 70;\n if (registryKey === GLOBAL_MENU_KEY) return 40;\n return 10;\n}\n\nfunction buildMenuContext(\n config: ContextMenuConfig,\n event: MouseEvent,\n pathname?: string,\n targetElement?: Element | null,\n): ContextMenuContextValue {\n let context: ContextMenuContextValue = {\n currentTarget: event.currentTarget ?? null,\n event,\n pathname: pathname || \"\",\n point: { x: Number(event.clientX) || 0, y: Number(event.clientY) || 0 },\n target: targetElement,\n };\n\n if (config.payload !== undefined) context.payload = config.payload;\n\n try {\n const payload = config.resolvePayload?.(event, context);\n if (payload !== undefined) context.payload = payload;\n } catch {}\n\n try {\n const extra = config.resolveContext?.(event, context);\n if (isObject(extra)) context = { ...context, ...extra };\n } catch {}\n\n return context;\n}\n\nfunction isMenuOverlayTarget(element: Element | null): boolean {\n return Boolean(\n element?.closest?.(\n '[data-context-menu-ignore], [data-context-menu-overlay], [role=\"menu\"]',\n ) || element?.classList?.contains(\"context-menu-overlay\"),\n );\n}\n\nfunction resolveEventTarget(event: MouseEvent): Element | null {\n const initialTarget = event.target instanceof Element ? event.target : null;\n\n if (initialTarget && !isMenuOverlayTarget(initialTarget)) {\n return initialTarget;\n }\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n return initialTarget;\n }\n\n try {\n const underneath = document\n .elementsFromPoint(event.clientX, event.clientY)\n .find((element) => !isMenuOverlayTarget(element));\n return underneath || initialTarget;\n } catch {\n return initialTarget;\n }\n}\n\nfunction passesWhen(\n config: ContextMenuConfig,\n event: MouseEvent,\n info: {\n context: ContextMenuContextValue;\n pathname: string;\n target: Element | null;\n },\n): boolean {\n if (typeof config.when !== \"function\") return config.when !== false;\n try {\n return Boolean(config.when(event, info));\n } catch {\n return false;\n }\n}\n\nexport function resolveContextMenu(\n registryMenus: Record<string, unknown> | null | undefined,\n pathname: string | undefined,\n event: MouseEvent,\n): ContextMenuResolvedMatch | null {\n const targetElement = resolveEventTarget(event);\n let winner: ContextMenuResolvedMatch | null = null;\n\n for (const { config, order, registryKey } of normalizeMenuCandidates(\n registryMenus,\n )) {\n if (!isPathAllowed(config, registryKey, pathname)) continue;\n\n const context = buildMenuContext(config, event, pathname, targetElement);\n if (!resolveAsBoolean(config.enabled, context, true)) continue;\n if (\n !passesWhen(config, event, {\n context,\n pathname: pathname || \"\",\n target: targetElement,\n })\n ) {\n continue;\n }\n\n const items = resolveMenuItems(config, context);\n if (!items.length) continue;\n\n const targetScore = getTargetScore(config, targetElement);\n if (targetScore === null) continue;\n\n const priority = Number(config.priority);\n const score =\n (Number.isFinite(priority) ? priority : 0) * 10000 +\n getRouteScore(config, registryKey, pathname) * 100 +\n targetScore;\n\n if (!winner || score > winner.score) {\n winner = { config, context, items, order, score };\n }\n }\n return winner;\n}\n\nexport function prepareMenu(\n config: ContextMenuConfig,\n context: ContextMenuContextValue,\n event: unknown,\n): {\n context: ContextMenuContextValue;\n items: ContextMenuResolvedItem[];\n} | null {\n const onOpenResult = safeInvoke(config.onOpen, event, context);\n if (onOpenResult === false) return null;\n\n const nextContext = isObject(onOpenResult)\n ? { ...context, ...(onOpenResult as Record<string, unknown>) }\n : context;\n const items = resolveMenuItems(config, nextContext);\n return items.length ? { context: nextContext, items } : null;\n}\n","import { isBrowser, toFiniteNumber } from \"@/utils\";\nimport { CONTEXT_MENU_VISIBILITY_EVENT, INITIAL_POSITION } from \"./constants\";\nimport { type ContextMenuOpenInput, type ContextMenuState } from \"./types\";\n\nexport function createInitialMenuState(): ContextMenuState {\n return {\n position: INITIAL_POSITION,\n context: null,\n isOpen: false,\n config: null,\n items: [],\n };\n}\n\nexport function resolveNextOpenState({\n config,\n context,\n items,\n position,\n}: ContextMenuOpenInput): ContextMenuState | null {\n if (!config) return null;\n return {\n config,\n context: context ?? null,\n isOpen: true,\n items: items ?? [],\n position: {\n x: Math.round(toFiniteNumber(position?.x, 0)),\n y: Math.round(toFiniteNumber(position?.y, 0)),\n },\n };\n}\n\nexport function emitContextMenuVisibility(isOpen: boolean): void {\n if (!isBrowser) return;\n window.dispatchEvent(\n new CustomEvent(CONTEXT_MENU_VISIBILITY_EVENT, {\n detail: { isOpen: Boolean(isOpen) },\n }),\n );\n}\n","\"use client\";\n\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport {\n useIsomorphicLayoutEffect,\n useStore,\n} from \"@/hooks\";\nimport { getOrCreateGlobalContext } from \"@/kernel\";\n\nimport { createStore } from \"@/utils\";\nimport { prepareMenu } from \"./resolver\";\nimport {\n createInitialMenuState,\n emitContextMenuVisibility,\n resolveNextOpenState,\n} from \"./state\";\nimport { safeInvoke } from \"./items\";\nimport {\n type ContextMenuActions,\n type ContextMenuContextValue,\n type ContextMenuProviderValue,\n type ContextMenuState,\n type ContextMenuTrigger,\n} from \"./types\";\n\nexport const ContextMenuContext =\n\n getOrCreateGlobalContext<ContextMenuProviderValue | null>(\n \"ContextMenuContext\",\n null,\n );\n\nfunction selectIsOpen(state: ContextMenuState): boolean {\n return state.isOpen;\n}\n\nexport function ContextMenuProvider({ children }: { children?: ReactNode }) {\n const pathname = usePathname();\n const [store] = useState(() =>\n createStore<ContextMenuState>(createInitialMenuState(), {\n freezeSnapshots: false,\n }),\n );\n const isOpen = useStore(store, selectIsOpen);\n\n const pathnameRef = useRef(pathname);\n useIsomorphicLayoutEffect(() => {\n pathnameRef.current = pathname;\n }, [pathname]);\n\n const actions = useMemo<ContextMenuActions>(() => {\n const openMenu: ContextMenuActions[\"openMenu\"] = (input) => {\n const nextState = resolveNextOpenState(input);\n if (nextState) store.publish(nextState);\n };\n\n const closeMenu = () => {\n const current = store.getSnapshot();\n if (!current.isOpen) return;\n store.publish(createInitialMenuState());\n safeInvoke(current.config?.onClose, current.context);\n };\n\n const bind: ContextMenuActions[\"bind\"] = (payload, configOverride) => ({\n onContextMenu: (event: ContextMenuTrigger) => {\n const config = configOverride || store.getSnapshot().config;\n if (!config) return;\n\n event.preventDefault?.();\n event.stopPropagation?.();\n\n const point = {\n x: Number(event.clientX ?? 0),\n y: Number(event.clientY ?? 0),\n };\n const context: ContextMenuContextValue = {\n currentTarget: event.currentTarget ?? null,\n event,\n pathname: pathnameRef.current || \"\",\n payload,\n point,\n target: (event.target as Element) ?? null,\n };\n\n const prepared = prepareMenu(config, context, event);\n if (!prepared) return;\n\n openMenu({\n config,\n context: prepared.context,\n items: prepared.items,\n position: point,\n });\n },\n });\n\n return { bind, closeMenu, openMenu };\n }, [store]);\n\n const contextValue = useMemo<ContextMenuProviderValue>(\n () => ({ actions, store }),\n [actions, store],\n );\n\n useEffect(() => emitContextMenuVisibility(isOpen), [isOpen]);\n\n return (\n <ContextMenuContext value={contextValue}>{children}</ContextMenuContext>\n );\n}\n\n","import { MENU_SCREEN_MARGIN } from \"./constants\";\nimport {\n type ContextMenuPosition,\n type ContextMenuResolvedItem,\n} from \"./types\";\n\nexport function joinClassNames(\n ...classes: (string | boolean | null | undefined)[]\n): string {\n return classes.filter(Boolean).join(\" \");\n}\n\nconst SCROLL_LOCK_KEYS = new Set([\n \"ArrowDown\",\n \"ArrowUp\",\n \"End\",\n \"Home\",\n \"PageDown\",\n \"PageUp\",\n \" \",\n \"Spacebar\",\n]);\n\nexport function isScrollLockKey(event: { key: string }): boolean {\n return SCROLL_LOCK_KEYS.has(event.key);\n}\n\nexport function positionMenu(\n menuElement: HTMLElement | null,\n position?: ContextMenuPosition | null,\n): void {\n if (!menuElement) return;\n const { height, width } = menuElement.getBoundingClientRect();\n const maxX = window.innerWidth - width - MENU_SCREEN_MARGIN;\n const maxY = window.innerHeight - height - MENU_SCREEN_MARGIN;\n\n const x = Math.min(Number(position?.x) || 0, maxX);\n const y = Math.min(Number(position?.y) || 0, maxY);\n\n menuElement.style.left = `${Math.round(Math.max(MENU_SCREEN_MARGIN, x))}px`;\n menuElement.style.top = `${Math.round(Math.max(MENU_SCREEN_MARGIN, y))}px`;\n}\n\nexport function getNextActiveIndex(\n items: ContextMenuResolvedItem[],\n current: number,\n direction: 1 | -1,\n): number {\n const count = items.length;\n const start =\n current < 0 ? (direction === 1 ? 0 : count - 1) : current + direction;\n\n for (let step = 0; step < count; step++) {\n const index = (((start + step * direction) % count) + count) % count;\n if (items[index].type === \"action\" && !items[index].disabled) return index;\n }\n return current;\n}\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type RefObject,\n} from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { useRequiredContext, useStore } from \"@/hooks\";\nimport {\n useModuleRegistration,\n useRegistryEntries,\n type RegistryMetadata,\n} from \"@/kernel\";\nimport { useModuleTheme } from \"@/theme\";\nimport { type DockItem, type DockState, useOptionalDockState } from \"../dock\";\nimport { contextMenuTheme } from \"./constants\";\nimport { ContextMenuContext } from \"./context\";\nimport {\n getNextActiveIndex,\n isScrollLockKey,\n joinClassNames,\n positionMenu,\n} from \"./dom\";\nimport {\n resolveContextMenuPageMeta,\n resolveMenuHeader,\n safeInvoke,\n} from \"./items\";\nimport { prepareMenu, resolveContextMenu } from \"./resolver\";\nimport type {\n ContextMenuActions,\n ContextMenuClassNames,\n ContextMenuConfig,\n ContextMenuContextApi,\n ContextMenuContextValue,\n ContextMenuPageConfig,\n ContextMenuPosition,\n ContextMenuResolvedItem,\n ContextMenuState,\n ContextMenuThemeSlot,\n} from \"./types\";\n\nexport function useContextMenuRegistration(\n config: ContextMenuPageConfig | null | undefined,\n options?: RegistryMetadata & { enabled?: boolean },\n): void {\n useModuleRegistration(\"contextMenu\", config, options);\n}\n\nexport function useContextMenu(\n config?: Partial<ContextMenuConfig> | null,\n options?: RegistryMetadata & { enabled?: boolean },\n): ContextMenuContextApi {\n useContextMenuRegistration(config || null, options);\n const { actions, store } = useRequiredContext(\n ContextMenuContext,\n \"useContextMenu\",\n \"ContextMenuProvider\",\n );\n const state = useStore(store);\n const ctx = useMemo<ContextMenuContextApi>(\n () => ({ ...state, ...actions }),\n [actions, state],\n );\n\n return useMemo(() => {\n if (!config) return ctx;\n return {\n ...ctx,\n bind: (payload?: unknown, configOverride?: Partial<ContextMenuConfig>) =>\n ctx.bind(payload, { ...config, ...configOverride }),\n };\n }, [config, ctx]);\n}\n\nexport function useContextMenuActions(): ContextMenuActions {\n return useRequiredContext(\n ContextMenuContext,\n \"useContextMenuActions\",\n \"ContextMenuProvider\",\n ).actions;\n}\n\nexport function useContextMenuState(): ContextMenuState {\n const { store } = useRequiredContext(\n ContextMenuContext,\n \"useContextMenuState\",\n \"ContextMenuProvider\",\n );\n return useStore(store);\n}\n\nfunction selectDockPageCard(dock: DockState): DockItem | null {\n const card = dock.activeItem;\n return card && !card.isSurface ? card : null;\n}\n\nexport function useContextMenuListener(): void {\n const menus = useRegistryEntries<\"contextMenu\", ContextMenuConfig>(\n \"contextMenu\",\n );\n const dockCard = useOptionalDockState(selectDockPageCard);\n const { openMenu } = useContextMenuActions();\n const pathname = usePathname();\n\n useEffect(() => {\n const handleContextMenu = (event: MouseEvent) => {\n const match = resolveContextMenu(menus, pathname || undefined, event);\n if (!match) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const page = resolveContextMenuPageMeta(dockCard, pathname || \"\");\n const prepared = prepareMenu(\n match.config,\n page ? { ...match.context, page } : match.context,\n event,\n );\n if (!prepared) return;\n\n openMenu({\n config: match.config,\n context: prepared.context,\n items: prepared.items,\n position: { x: event.clientX, y: event.clientY },\n });\n };\n\n document.addEventListener(\"contextmenu\", handleContextMenu, true);\n return () =>\n document.removeEventListener(\"contextmenu\", handleContextMenu, true);\n }, [dockCard, menus, openMenu, pathname]);\n}\n\nexport function useMenuDismissal(\n menuRef: RefObject<HTMLElement | null>,\n onClose: () => void,\n) {\n useEffect(() => {\n const preventScroll = (event: Event) => event.preventDefault();\n const listenerOptions = { capture: true, passive: false };\n\n const handleInteraction = (event: MouseEvent | KeyboardEvent) => {\n const isInside = menuRef.current?.contains(event.target as Node);\n if (event.type === \"keydown\") {\n if ((event as KeyboardEvent).key === \"Escape\") onClose();\n if (!isInside && isScrollLockKey(event as KeyboardEvent)) {\n event.preventDefault();\n }\n } else if (!isInside) {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleInteraction, true);\n document.addEventListener(\"keydown\", handleInteraction, true);\n window.addEventListener(\"wheel\", preventScroll, listenerOptions);\n window.addEventListener(\"touchmove\", preventScroll, listenerOptions);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleInteraction, true);\n document.removeEventListener(\"keydown\", handleInteraction, true);\n window.removeEventListener(\"wheel\", preventScroll, true);\n window.removeEventListener(\"touchmove\", preventScroll, true);\n };\n }, [menuRef, onClose]);\n}\n\nexport function useContextMenuContentModel({\n config,\n items,\n menuContext,\n onClose,\n position,\n}: {\n config: ContextMenuConfig;\n items: ContextMenuResolvedItem[];\n menuContext: ContextMenuContextValue;\n onClose: () => void;\n position: ContextMenuPosition;\n}) {\n const menuRef = useRef<HTMLDivElement | null>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const theme = useModuleTheme(contextMenuTheme);\n const classes = useMemo(() => {\n const overrides: ContextMenuClassNames = config.classNames ?? {};\n const merged = { ...theme.slots } as Record<ContextMenuThemeSlot, string>;\n for (const slot of Object.keys(merged) as ContextMenuThemeSlot[]) {\n merged[slot] = joinClassNames(theme.slots[slot], overrides[slot]);\n }\n return merged;\n }, [config.classNames, theme.slots]);\n const header = useMemo(\n () => resolveMenuHeader(config, menuContext),\n [config, menuContext],\n );\n const [activeIndex, setActiveIndex] = useState(-1);\n const [prevItems, setPrevItems] = useState(items);\n if (items !== prevItems) {\n setPrevItems(items);\n setActiveIndex(-1);\n }\n useLayoutEffect(() => {\n itemRefs.current = [];\n positionMenu(menuRef.current, position);\n }, [header, items, position]);\n useEffect(() => {\n const target =\n activeIndex < 0 ? menuRef.current : itemRefs.current[activeIndex];\n target?.focus({ preventScroll: true });\n }, [activeIndex]);\n useMenuDismissal(menuRef, onClose);\n const handleItemSelect = useCallback(\n (\n item: ContextMenuResolvedItem,\n event: ReactMouseEvent | ReactKeyboardEvent,\n ) => {\n event.preventDefault();\n event.stopPropagation();\n if (item.disabled) return;\n\n safeInvoke(item.onSelect || item.onClick, event, menuContext);\n if (item.closeOnSelect !== false) onClose();\n },\n [menuContext, onClose],\n );\n const handleMenuKeyDown = (event: ReactKeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onClose();\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n const direction = event.key === \"ArrowDown\" ? 1 : -1;\n setActiveIndex((current) =>\n getNextActiveIndex(items, current, direction),\n );\n } else if (\n (event.key === \"Enter\" || event.key === \" \") &&\n items[activeIndex]\n ) {\n event.preventDefault();\n handleItemSelect(items[activeIndex], event);\n }\n };\n\n return {\n menuRef,\n itemRefs,\n classes,\n styles: theme.styles,\n header,\n activeIndex,\n setActiveIndex,\n handleItemSelect,\n handleMenuKeyDown,\n };\n}\n","import { useModuleMotion } from \"@/theme\";\nimport { contextMenuTheme } from \"./constants\";\n\nexport function useContextMenuMotion() {\n return useModuleMotion(contextMenuTheme);\n}\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@/atoms\";\nimport { isImageIconSource } from \"@/utils\";\nimport {\n useContextMenu,\n useContextMenuContentModel,\n useContextMenuListener,\n} from \"./hooks\";\nimport { joinClassNames } from \"./dom\";\nimport { resolveMenuItems } from \"./items\";\nimport { useContextMenuMotion } from \"./motion\";\nimport {\n type ContextMenuClasses,\n type ContextMenuConfig,\n type ContextMenuContextValue,\n type ContextMenuIcon,\n type ContextMenuPosition,\n type ContextMenuResolvedHeader,\n type ContextMenuResolvedItem,\n} from \"./types\";\n\nexport function ContextMenuHeaderIcon({\n classes,\n icon,\n}: {\n classes: ContextMenuClasses;\n icon: ContextMenuIcon;\n}) {\n const iconClassName = classes.headerIcon;\n\n if (isImageIconSource(icon)) {\n return (\n <div\n className={iconClassName}\n style={{ backgroundImage: `url(${icon})` }}\n />\n );\n }\n return (\n <div className={iconClassName}>\n {typeof icon === \"string\" ? <Icon icon={icon} size={20} /> : icon}\n </div>\n );\n}\n\nexport function ContextMenuHeader({\n classes,\n header,\n}: {\n classes: ContextMenuClasses;\n header: ContextMenuResolvedHeader | null;\n}) {\n if (!header) return null;\n\n return (\n <div className={classes.header}>\n {header.icon && (\n <ContextMenuHeaderIcon classes={classes} icon={header.icon} />\n )}\n <div className={classes.headerText}>\n {header.eyebrow && (\n <div className={classes.headerEyebrow}>{header.eyebrow}</div>\n )}\n {header.title && (\n <div className={classes.headerTitle}>{header.title}</div>\n )}\n {header.description && (\n <div className={classes.headerDescription}>{header.description}</div>\n )}\n </div>\n </div>\n );\n}\n\nexport function ContextMenuItem({\n classes,\n isActive,\n item,\n onHover,\n onSelect,\n setButtonRef,\n}: {\n classes: ContextMenuClasses;\n isActive: boolean;\n item: ContextMenuResolvedItem;\n onHover: () => void;\n onSelect: (item: ContextMenuResolvedItem, event: React.MouseEvent) => void;\n setButtonRef: (node: HTMLButtonElement | null) => void;\n}) {\n const menuMotion = useContextMenuMotion();\n if (item.type === \"separator\") {\n return <div className={classes.separator} role=\"separator\" />;\n }\n\n const itemClassName = joinClassNames(classes.item, item.className);\n const itemIconClassName = joinClassNames(\n classes.itemIcon,\n item.itemIconClassName,\n );\n\n return (\n <motion.button\n ref={setButtonRef}\n className={itemClassName}\n data-active={isActive ? \"true\" : undefined}\n aria-disabled={item.disabled}\n disabled={item.disabled}\n role=\"menuitem\"\n type=\"button\"\n whileTap={menuMotion.itemTap}\n transition={menuMotion.itemTransition}\n onMouseEnter={onHover}\n onClick={(event) => onSelect(item, event)}\n >\n {item.icon &&\n (typeof item.icon === \"string\" ? (\n <Icon icon={item.icon} className={itemIconClassName} size={18} />\n ) : (\n item.icon\n ))}\n <span className={classes.itemLabel}>{item.label}</span>\n {item.shortcut && (\n <span className={classes.itemShortcut}>{item.shortcut}</span>\n )}\n </motion.button>\n );\n}\n\nconst EMPTY_MENU_CONTEXT: ContextMenuContextValue = Object.freeze({\n pathname: \"\",\n point: { x: 0, y: 0 },\n});\n\nexport function ContextMenuContent({\n config,\n items,\n menuContext,\n onClose,\n position,\n}: {\n config: ContextMenuConfig;\n items: ContextMenuResolvedItem[];\n menuContext: ContextMenuContextValue;\n onClose: () => void;\n position: ContextMenuPosition;\n}) {\n const {\n menuRef,\n itemRefs,\n classes,\n styles,\n header,\n activeIndex,\n setActiveIndex,\n handleItemSelect,\n handleMenuKeyDown,\n } = useContextMenuContentModel({\n config,\n items,\n menuContext,\n onClose,\n position,\n });\n const menuMotion = useContextMenuMotion();\n\n return (\n <div>\n <div\n data-context-menu-overlay\n className={classes.backdrop}\n onMouseDown={onClose}\n style={styles.backdrop}\n />\n <motion.div\n ref={menuRef}\n data-context-menu-ignore\n variants={menuMotion.pop}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n className={classes.menu}\n role=\"menu\"\n tabIndex={-1}\n style={{\n ...styles.menu,\n left: position.x || 0,\n top: position.y || 0,\n position: \"fixed\",\n }}\n onMouseLeave={() => setActiveIndex(-1)}\n onKeyDown={handleMenuKeyDown}\n >\n <motion.div\n variants={menuMotion.content}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <ContextMenuHeader classes={classes} header={header} />\n </motion.div>\n\n {items.map((item, index) => (\n <motion.div\n key={item.key || `menu-item-${index}`}\n variants={menuMotion.item}\n custom={index}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <ContextMenuItem\n item={item}\n classes={classes}\n isActive={index === activeIndex}\n onHover={() => {\n if (item.type === \"action\" && !item.disabled) {\n setActiveIndex(index);\n }\n }}\n setButtonRef={(node) => {\n itemRefs.current[index] = node;\n }}\n onSelect={handleItemSelect}\n />\n </motion.div>\n ))}\n </motion.div>\n </div>\n );\n}\n\nconst emptySubscribe = () => () => {};\n\nexport function ContextMenuRenderer() {\n const { closeMenu, config, context, isOpen, items, position } =\n useContextMenu();\n const isMounted = useSyncExternalStore(\n emptySubscribe,\n () => true,\n () => false,\n );\n if (!isMounted) return null;\n\n const menuContext = context ?? EMPTY_MENU_CONTEXT;\n const resolvedItems = items.length\n ? items\n : resolveMenuItems(config, menuContext);\n\n return createPortal(\n <AnimatePresence>\n {isOpen && config && resolvedItems.length > 0 && (\n <ContextMenuContent\n key=\"context-menu-content\"\n config={config}\n items={resolvedItems}\n menuContext={menuContext}\n position={position}\n onClose={closeMenu}\n />\n )}\n </AnimatePresence>,\n document.body,\n );\n}\n\nexport function ContextMenuGlobal() {\n useContextMenuListener();\n return <ContextMenuRenderer />;\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n defineModule,\n type PageConfig,\n type PageModuleApi,\n} from \"@/kernel\";\nimport { CURRENT_PAGE_KEY, GLOBAL_MENU_KEY } from \"./constants\";\nimport {\n ContextMenuContext,\n ContextMenuProvider,\n} from \"./context\";\nimport {\n useContextMenu,\n useContextMenuActions,\n} from \"./hooks\";\nimport { ContextMenuGlobal } from \"./overlay\";\nimport {\n type ContextMenuConfig,\n type ContextMenuDefinition,\n type ContextMenuPageApi,\n type ContextMenuPageConfig,\n} from \"./types\";\n\nfunction selectPageContextMenu(\n config: PageConfig,\n): ContextMenuPageConfig | null {\n return config.contextMenu ?? null;\n}\n\nfunction useContextMenuPage(\n _slice: ContextMenuPageConfig | null,\n page: PageModuleApi,\n): ContextMenuPageApi {\n const actions = useContextMenuActions();\n return useMemo(\n () => ({\n ...actions,\n set: (contextMenu: ContextMenuPageConfig | null) =>\n page.set({ contextMenu }),\n }),\n [actions, page],\n );\n}\n\nexport const contextMenuModule = defineModule({\n id: \"contextMenu\",\n context: ContextMenuContext,\n Provider: ContextMenuProvider,\n uses: [\"dock\"],\n Overlay: ContextMenuGlobal,\n registry: {\n cleanupDelayMs: 600,\n keyPolicy: \"route\",\n lifecycle: \"immediate\",\n reservedKeys: [CURRENT_PAGE_KEY, GLOBAL_MENU_KEY],\n },\n page: {\n select: selectPageContextMenu,\n entries: (slice: ContextMenuPageConfig, { pathname }) => [\n { key: pathname || CURRENT_PAGE_KEY, value: slice },\n ],\n use: useContextMenuPage,\n },\n});\n\ndeclare module \"@omerdlw/base-framework/kernel\" {\n interface CoreModules {\n contextMenu: typeof contextMenuModule;\n }\n interface PageConfig {\n contextMenu?: ContextMenuPageConfig | null;\n }\n}\n\nexport function defineContextMenu(\n definition: Partial<ContextMenuConfig> = {},\n): ContextMenuDefinition {\n return Object.freeze({\n config: definition,\n id: definition.id ?? \"context-menu\",\n use: function useDefinedContextMenu(options = {}) {\n return useContextMenu({ ...definition, ...options });\n },\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/modules/context-menu/constants.ts","../src/modules/context-menu/items.ts","../src/modules/context-menu/resolver.ts","../src/modules/context-menu/state.ts","../src/modules/context-menu/context.tsx","../src/modules/context-menu/dom.ts","../src/modules/context-menu/hooks.ts","../src/modules/context-menu/motion.ts","../src/modules/context-menu/overlay.tsx","../src/modules/context-menu/module.tsx"],"names":["useMemo","usePathname","useEffect","useRef","useState","jsx"],"mappings":"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","file":"chunk-RRAZKP3J.js","sourcesContent":["import { defineThemeSpec } from \"@/theme\";\nimport {\n type ContextMenuMotion,\n type ContextMenuPosition,\n type ContextMenuThemeSlot,\n} from \"./types\";\n\nexport const contextMenuTheme = defineThemeSpec<\n ContextMenuThemeSlot,\n ContextMenuMotion\n>(\"context-menu\");\n\nexport const CURRENT_PAGE_KEY = \"current-page\";\nexport const GLOBAL_MENU_KEY = \"*\";\nexport const MENU_SCREEN_MARGIN = 10;\n\nexport const CONTEXT_MENU_VISIBILITY_EVENT = \"context-menu:visibility\";\nexport const INITIAL_POSITION: ContextMenuPosition = Object.freeze({\n x: 0,\n y: 0,\n});\n","import { isValidElement, type ReactNode } from \"react\";\nimport { isObject, report, toArray } from \"@/utils\";\nimport {\n type ContextMenuConfig,\n type ContextMenuContextValue,\n type ContextMenuItem,\n type ContextMenuPageMeta,\n type ContextMenuResolvedHeader,\n type ContextMenuResolvedItem,\n} from \"./types\";\n\nexport function extractNodeText(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value\n .map(extractNodeText)\n .filter(Boolean)\n .join(\" \")\n .replace(/\\s+/g, \" \")\n .trim();\n }\n if (isValidElement(value)) {\n return extractNodeText((value.props as { children?: ReactNode })?.children);\n }\n return \"\";\n}\n\nexport function resolveAsBoolean(\n value: unknown,\n context?: unknown,\n defaultValue = true,\n): boolean {\n if (typeof value === \"function\") {\n try {\n return Boolean(value(context));\n } catch {\n return false;\n }\n }\n if (value === undefined) {\n return defaultValue;\n }\n return Boolean(value);\n}\n\nexport function resolveAsValue<T = unknown>(\n value: unknown,\n context?: unknown,\n fallback?: T,\n): T {\n if (typeof value === \"function\") {\n try {\n const resolved = value(context);\n return resolved === undefined ? (fallback as T) : resolved;\n } catch {\n return fallback as T;\n }\n }\n return value === undefined ? (fallback as T) : (value as T);\n}\n\nexport function safeInvoke<T = unknown>(\n handler: unknown,\n ...args: unknown[]\n): T | undefined {\n if (typeof handler !== \"function\") return undefined;\n try {\n const result = handler(...args);\n if (result && typeof result.then === \"function\") {\n result.catch((err: unknown) =>\n report(\"Context menu async callback\", err),\n );\n }\n return result as T;\n } catch (error) {\n report(\"Context menu callback\", error);\n return undefined;\n }\n}\n\nexport function resolveContextMenuPageMeta(\n dockItem: unknown,\n pathname = \"\",\n): ContextMenuPageMeta | null {\n if (!isObject(dockItem)) return null;\n const title = (dockItem.contextMenuTitle ??\n dockItem.title ??\n null) as ReactNode;\n const description = (dockItem.contextMenuDescription ??\n dockItem.description ??\n null) as ReactNode;\n const eyebrow = (dockItem.contextMenuEyebrow ??\n dockItem.eyebrow ??\n null) as ReactNode;\n const icon = (dockItem.contextMenuIcon ?? dockItem.icon ?? null) as ReactNode;\n\n if (!title && !description && !icon && !eyebrow) return null;\n\n return {\n description,\n descriptionText: extractNodeText(description),\n eyebrow,\n icon,\n path:\n typeof dockItem.path === \"string\" && dockItem.path\n ? dockItem.path\n : pathname,\n title,\n titleText:\n extractNodeText(title) ||\n (typeof dockItem.name === \"string\" ? dockItem.name : \"\") ||\n \"\",\n };\n}\n\nfunction resolveItem(\n item: ContextMenuItem | \"separator\" | null | undefined,\n index: number,\n context: ContextMenuContextValue,\n): ContextMenuResolvedItem | null {\n if (!item) return null;\n if (item === \"separator\" || item.type === \"separator\") {\n return {\n key: (item !== \"separator\" && item.key) || `separator-${index}`,\n type: \"separator\",\n };\n }\n\n if (\n resolveAsBoolean(item.hidden, context, false) ||\n !resolveAsBoolean(item.visible, context, true)\n ) {\n return null;\n }\n\n const label = resolveAsValue(item.label, context, \"\");\n if (\n (typeof label !== \"string\" && typeof label !== \"number\") ||\n !String(label).trim()\n ) {\n return null;\n }\n\n const handler = item.onSelect ?? item.onClick ?? null;\n const shortcut = resolveAsValue(item.shortcut, context, null);\n\n return {\n ...item,\n className: resolveAsValue(item.className, context, \"\") || \"\",\n closeOnSelect: item.closeOnSelect !== false,\n danger: resolveAsBoolean(item.danger, context, false),\n disabled: resolveAsBoolean(item.disabled, context, false),\n icon: resolveAsValue(item.icon, context, null) || null,\n itemIconClassName:\n resolveAsValue(item.itemIconClassName, context, \"\") || \"\",\n key: item.key || `item-${index}`,\n label: String(label),\n onClick: handler,\n onSelect: handler,\n shortcut: typeof shortcut === \"string\" ? shortcut : null,\n type: \"action\",\n };\n}\n\nexport function resolveMenuItems(\n config: ContextMenuConfig | null | undefined,\n context: ContextMenuContextValue,\n): ContextMenuResolvedItem[] {\n const rawItems = resolveAsValue(config?.items, context, []);\n const items: ContextMenuResolvedItem[] = [];\n\n toArray(rawItems).forEach((raw, index) => {\n const item = resolveItem(raw, index, context);\n if (!item) return;\n const previous = items[items.length - 1];\n if (\n item.type === \"separator\" &&\n (!previous || previous.type === \"separator\")\n ) {\n return;\n }\n items.push(item);\n });\n\n if (items[items.length - 1]?.type === \"separator\") items.pop();\n return items;\n}\n\nexport function resolveMenuHeader(\n config: ContextMenuConfig | null | undefined,\n context: ContextMenuContextValue,\n): ContextMenuResolvedHeader | null {\n if (config?.header === false || config?.showPageHeader === false) return null;\n\n const configured = resolveAsValue(config?.header, context, null);\n const source = isObject(configured)\n ? configured\n : isObject(context.page)\n ? context.page\n : null;\n if (!source) return null;\n\n const title = resolveAsValue(source.title, context, null);\n const description = resolveAsValue(source.description, context, null);\n const icon = resolveAsValue(source.icon, context, null);\n const eyebrow = resolveAsValue(source.eyebrow, context, null);\n if (!title && !description && !icon && !eyebrow) return null;\n\n return {\n description,\n descriptionText: extractNodeText(description),\n eyebrow,\n icon,\n title,\n titleText: extractNodeText(title),\n };\n}\n","import { isObject, toArray } from \"@/utils\";\nimport { CURRENT_PAGE_KEY, GLOBAL_MENU_KEY } from \"./constants\";\nimport { resolveMenuItems, resolveAsBoolean, safeInvoke } from \"./items\";\nimport {\n type ContextMenuCandidate,\n type ContextMenuConfig,\n type ContextMenuContextValue,\n type ContextMenuResolvedItem,\n type ContextMenuResolvedMatch,\n} from \"./types\";\n\nfunction normalizeMenuCandidates(\n registryMenus?: Record<string, unknown> | null,\n): ContextMenuCandidate[] {\n const candidates: ContextMenuCandidate[] = [];\n\n for (const [registryKey, rawConfig] of Object.entries(registryMenus || {})) {\n if (!isObject(rawConfig)) continue;\n\n const { menus, ...sharedConfig } = rawConfig as ContextMenuConfig;\n const nestedMenus = toArray(menus);\n const hasSharedItems =\n Array.isArray(sharedConfig.items) ||\n typeof sharedConfig.items === \"function\";\n\n if (hasSharedItems || nestedMenus.length === 0) {\n candidates.push({\n config: sharedConfig,\n order: candidates.length,\n registryKey,\n });\n }\n\n for (const menu of nestedMenus) {\n candidates.push({\n config: {\n ...sharedConfig,\n ...menu,\n classNames: { ...sharedConfig.classNames, ...menu.classNames },\n },\n order: candidates.length,\n registryKey,\n });\n }\n }\n return candidates;\n}\n\nfunction isPathAllowed(\n config: ContextMenuConfig,\n registryKey: string,\n pathname?: string,\n): boolean {\n if (!pathname) return true;\n if (config.path === pathname) return true;\n\n const explicitPaths = toArray(config.paths).filter(Boolean);\n if (explicitPaths.length > 0) return explicitPaths.includes(pathname);\n\n if (typeof config.pathMatcher === \"function\") {\n try {\n return Boolean(config.pathMatcher(pathname));\n } catch {\n return false;\n }\n }\n\n return (\n registryKey === pathname ||\n registryKey === CURRENT_PAGE_KEY ||\n registryKey === GLOBAL_MENU_KEY\n );\n}\n\nfunction getElementDepth(from: Element, ancestor: Element): number {\n let depth = 0;\n for (\n let node: Element | null = from;\n node && node !== ancestor;\n node = node.parentElement\n ) {\n depth += 1;\n }\n return depth;\n}\n\nfunction getTargetScore(\n config: ContextMenuConfig,\n targetElement: Element | null,\n): number | null {\n const selectors = toArray(config.target).filter(\n (selector) => typeof selector === \"string\" && selector.trim(),\n );\n if (selectors.length === 0) return 0;\n if (!targetElement) return null;\n\n let minDepth = Infinity;\n for (const selector of selectors) {\n try {\n const matched = targetElement.closest(selector);\n if (matched) {\n minDepth = Math.min(minDepth, getElementDepth(targetElement, matched));\n }\n } catch {}\n }\n return minDepth === Infinity ? null : Math.max(0, 100 - minDepth);\n}\n\nfunction getRouteScore(\n config: ContextMenuConfig,\n registryKey: string,\n pathname?: string,\n): number {\n if (!pathname) return 0;\n if (\n config.path === pathname ||\n toArray(config.paths).includes(pathname) ||\n registryKey === pathname\n ) {\n return 100;\n }\n if (registryKey === CURRENT_PAGE_KEY) return 70;\n if (registryKey === GLOBAL_MENU_KEY) return 40;\n return 10;\n}\n\nfunction buildMenuContext(\n config: ContextMenuConfig,\n event: MouseEvent,\n pathname?: string,\n targetElement?: Element | null,\n): ContextMenuContextValue {\n let context: ContextMenuContextValue = {\n currentTarget: event.currentTarget ?? null,\n event,\n pathname: pathname || \"\",\n point: { x: Number(event.clientX) || 0, y: Number(event.clientY) || 0 },\n target: targetElement,\n };\n\n if (config.payload !== undefined) context.payload = config.payload;\n\n try {\n const payload = config.resolvePayload?.(event, context);\n if (payload !== undefined) context.payload = payload;\n } catch {}\n\n try {\n const extra = config.resolveContext?.(event, context);\n if (isObject(extra)) context = { ...context, ...extra };\n } catch {}\n\n return context;\n}\n\nfunction isMenuOverlayTarget(element: Element | null): boolean {\n return Boolean(\n element?.closest?.(\n '[data-context-menu-ignore], [data-context-menu-overlay], [role=\"menu\"]',\n ) || element?.classList?.contains(\"context-menu-overlay\"),\n );\n}\n\nfunction resolveEventTarget(event: MouseEvent): Element | null {\n const initialTarget = event.target instanceof Element ? event.target : null;\n\n if (initialTarget && !isMenuOverlayTarget(initialTarget)) {\n return initialTarget;\n }\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n return initialTarget;\n }\n\n try {\n const underneath = document\n .elementsFromPoint(event.clientX, event.clientY)\n .find((element) => !isMenuOverlayTarget(element));\n return underneath || initialTarget;\n } catch {\n return initialTarget;\n }\n}\n\nfunction passesWhen(\n config: ContextMenuConfig,\n event: MouseEvent,\n info: {\n context: ContextMenuContextValue;\n pathname: string;\n target: Element | null;\n },\n): boolean {\n if (typeof config.when !== \"function\") return config.when !== false;\n try {\n return Boolean(config.when(event, info));\n } catch {\n return false;\n }\n}\n\nexport function resolveContextMenu(\n registryMenus: Record<string, unknown> | null | undefined,\n pathname: string | undefined,\n event: MouseEvent,\n): ContextMenuResolvedMatch | null {\n const targetElement = resolveEventTarget(event);\n let winner: ContextMenuResolvedMatch | null = null;\n\n for (const { config, order, registryKey } of normalizeMenuCandidates(\n registryMenus,\n )) {\n if (!isPathAllowed(config, registryKey, pathname)) continue;\n\n const context = buildMenuContext(config, event, pathname, targetElement);\n if (!resolveAsBoolean(config.enabled, context, true)) continue;\n if (\n !passesWhen(config, event, {\n context,\n pathname: pathname || \"\",\n target: targetElement,\n })\n ) {\n continue;\n }\n\n const items = resolveMenuItems(config, context);\n if (!items.length) continue;\n\n const targetScore = getTargetScore(config, targetElement);\n if (targetScore === null) continue;\n\n const priority = Number(config.priority);\n const score =\n (Number.isFinite(priority) ? priority : 0) * 10000 +\n getRouteScore(config, registryKey, pathname) * 100 +\n targetScore;\n\n if (!winner || score > winner.score) {\n winner = { config, context, items, order, score };\n }\n }\n return winner;\n}\n\nexport function prepareMenu(\n config: ContextMenuConfig,\n context: ContextMenuContextValue,\n event: unknown,\n): {\n context: ContextMenuContextValue;\n items: ContextMenuResolvedItem[];\n} | null {\n const onOpenResult = safeInvoke(config.onOpen, event, context);\n if (onOpenResult === false) return null;\n\n const nextContext = isObject(onOpenResult)\n ? { ...context, ...(onOpenResult as Record<string, unknown>) }\n : context;\n const items = resolveMenuItems(config, nextContext);\n return items.length ? { context: nextContext, items } : null;\n}\n","import { isBrowser, toFiniteNumber } from \"@/utils\";\nimport { CONTEXT_MENU_VISIBILITY_EVENT, INITIAL_POSITION } from \"./constants\";\nimport { type ContextMenuOpenInput, type ContextMenuState } from \"./types\";\n\nexport function createInitialMenuState(): ContextMenuState {\n return {\n position: INITIAL_POSITION,\n context: null,\n isOpen: false,\n config: null,\n items: [],\n };\n}\n\nexport function resolveNextOpenState({\n config,\n context,\n items,\n position,\n}: ContextMenuOpenInput): ContextMenuState | null {\n if (!config) return null;\n return {\n config,\n context: context ?? null,\n isOpen: true,\n items: items ?? [],\n position: {\n x: Math.round(toFiniteNumber(position?.x, 0)),\n y: Math.round(toFiniteNumber(position?.y, 0)),\n },\n };\n}\n\nexport function emitContextMenuVisibility(isOpen: boolean): void {\n if (!isBrowser) return;\n window.dispatchEvent(\n new CustomEvent(CONTEXT_MENU_VISIBILITY_EVENT, {\n detail: { isOpen: Boolean(isOpen) },\n }),\n );\n}\n","\"use client\";\n\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport {\n useIsomorphicLayoutEffect,\n useStore,\n} from \"@/hooks\";\nimport { getOrCreateGlobalContext } from \"@/kernel\";\n\nimport { createStore } from \"@/utils\";\nimport { prepareMenu } from \"./resolver\";\nimport {\n createInitialMenuState,\n emitContextMenuVisibility,\n resolveNextOpenState,\n} from \"./state\";\nimport { safeInvoke } from \"./items\";\nimport {\n type ContextMenuActions,\n type ContextMenuContextValue,\n type ContextMenuProviderValue,\n type ContextMenuState,\n type ContextMenuTrigger,\n} from \"./types\";\n\nexport const ContextMenuContext =\n\n getOrCreateGlobalContext<ContextMenuProviderValue | null>(\n \"ContextMenuContext\",\n null,\n );\n\nfunction selectIsOpen(state: ContextMenuState): boolean {\n return state.isOpen;\n}\n\nexport function ContextMenuProvider({ children }: { children?: ReactNode }) {\n const pathname = usePathname();\n const [store] = useState(() =>\n createStore<ContextMenuState>(createInitialMenuState(), {\n freezeSnapshots: false,\n }),\n );\n const isOpen = useStore(store, selectIsOpen);\n\n const pathnameRef = useRef(pathname);\n useIsomorphicLayoutEffect(() => {\n pathnameRef.current = pathname;\n }, [pathname]);\n\n const actions = useMemo<ContextMenuActions>(() => {\n const openMenu: ContextMenuActions[\"openMenu\"] = (input) => {\n const nextState = resolveNextOpenState(input);\n if (nextState) store.publish(nextState);\n };\n\n const closeMenu = () => {\n const current = store.getSnapshot();\n if (!current.isOpen) return;\n store.publish(createInitialMenuState());\n safeInvoke(current.config?.onClose, current.context);\n };\n\n const bind: ContextMenuActions[\"bind\"] = (payload, configOverride) => ({\n onContextMenu: (event: ContextMenuTrigger) => {\n const config = configOverride || store.getSnapshot().config;\n if (!config) return;\n\n event.preventDefault?.();\n event.stopPropagation?.();\n\n const point = {\n x: Number(event.clientX ?? 0),\n y: Number(event.clientY ?? 0),\n };\n const context: ContextMenuContextValue = {\n currentTarget: event.currentTarget ?? null,\n event,\n pathname: pathnameRef.current || \"\",\n payload,\n point,\n target: (event.target as Element) ?? null,\n };\n\n const prepared = prepareMenu(config, context, event);\n if (!prepared) return;\n\n openMenu({\n config,\n context: prepared.context,\n items: prepared.items,\n position: point,\n });\n },\n });\n\n return { bind, closeMenu, openMenu };\n }, [store]);\n\n const contextValue = useMemo<ContextMenuProviderValue>(\n () => ({ actions, store }),\n [actions, store],\n );\n\n useEffect(() => emitContextMenuVisibility(isOpen), [isOpen]);\n\n return (\n <ContextMenuContext value={contextValue}>{children}</ContextMenuContext>\n );\n}\n\n","import { MENU_SCREEN_MARGIN } from \"./constants\";\nimport {\n type ContextMenuPosition,\n type ContextMenuResolvedItem,\n} from \"./types\";\n\nexport function joinClassNames(\n ...classes: (string | boolean | null | undefined)[]\n): string {\n return classes.filter(Boolean).join(\" \");\n}\n\nconst SCROLL_LOCK_KEYS = new Set([\n \"ArrowDown\",\n \"ArrowUp\",\n \"End\",\n \"Home\",\n \"PageDown\",\n \"PageUp\",\n \" \",\n \"Spacebar\",\n]);\n\nexport function isScrollLockKey(event: { key: string }): boolean {\n return SCROLL_LOCK_KEYS.has(event.key);\n}\n\nexport function positionMenu(\n menuElement: HTMLElement | null,\n position?: ContextMenuPosition | null,\n): void {\n if (!menuElement) return;\n const { height, width } = menuElement.getBoundingClientRect();\n const maxX = window.innerWidth - width - MENU_SCREEN_MARGIN;\n const maxY = window.innerHeight - height - MENU_SCREEN_MARGIN;\n\n const x = Math.min(Number(position?.x) || 0, maxX);\n const y = Math.min(Number(position?.y) || 0, maxY);\n\n menuElement.style.left = `${Math.round(Math.max(MENU_SCREEN_MARGIN, x))}px`;\n menuElement.style.top = `${Math.round(Math.max(MENU_SCREEN_MARGIN, y))}px`;\n}\n\nexport function getNextActiveIndex(\n items: ContextMenuResolvedItem[],\n current: number,\n direction: 1 | -1,\n): number {\n const count = items.length;\n const start =\n current < 0 ? (direction === 1 ? 0 : count - 1) : current + direction;\n\n for (let step = 0; step < count; step++) {\n const index = (((start + step * direction) % count) + count) % count;\n if (items[index].type === \"action\" && !items[index].disabled) return index;\n }\n return current;\n}\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type RefObject,\n} from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { useRequiredContext, useStore } from \"@/hooks\";\nimport {\n useModuleRegistration,\n useRegistryEntries,\n type RegistryMetadata,\n} from \"@/kernel\";\nimport { useModuleTheme } from \"@/theme\";\nimport { type DockItem, type DockState, useOptionalDockState } from \"../dock\";\nimport { contextMenuTheme } from \"./constants\";\nimport { ContextMenuContext } from \"./context\";\nimport {\n getNextActiveIndex,\n isScrollLockKey,\n joinClassNames,\n positionMenu,\n} from \"./dom\";\nimport {\n resolveContextMenuPageMeta,\n resolveMenuHeader,\n safeInvoke,\n} from \"./items\";\nimport { prepareMenu, resolveContextMenu } from \"./resolver\";\nimport type {\n ContextMenuActions,\n ContextMenuClassNames,\n ContextMenuConfig,\n ContextMenuContextApi,\n ContextMenuContextValue,\n ContextMenuPageConfig,\n ContextMenuPosition,\n ContextMenuResolvedItem,\n ContextMenuState,\n ContextMenuThemeSlot,\n} from \"./types\";\n\nexport function useContextMenuRegistration(\n config: ContextMenuPageConfig | null | undefined,\n options?: RegistryMetadata & { enabled?: boolean },\n): void {\n useModuleRegistration(\"contextMenu\", config, options);\n}\n\nexport function useContextMenu(\n config?: Partial<ContextMenuConfig> | null,\n options?: RegistryMetadata & { enabled?: boolean },\n): ContextMenuContextApi {\n useContextMenuRegistration(config || null, options);\n const { actions, store } = useRequiredContext(\n ContextMenuContext,\n \"useContextMenu\",\n \"ContextMenuProvider\",\n );\n const state = useStore(store);\n const ctx = useMemo<ContextMenuContextApi>(\n () => ({ ...state, ...actions }),\n [actions, state],\n );\n\n return useMemo(() => {\n if (!config) return ctx;\n return {\n ...ctx,\n bind: (payload?: unknown, configOverride?: Partial<ContextMenuConfig>) =>\n ctx.bind(payload, { ...config, ...configOverride }),\n };\n }, [config, ctx]);\n}\n\nexport function useContextMenuActions(): ContextMenuActions {\n return useRequiredContext(\n ContextMenuContext,\n \"useContextMenuActions\",\n \"ContextMenuProvider\",\n ).actions;\n}\n\nexport function useContextMenuState(): ContextMenuState {\n const { store } = useRequiredContext(\n ContextMenuContext,\n \"useContextMenuState\",\n \"ContextMenuProvider\",\n );\n return useStore(store);\n}\n\nfunction selectDockPageCard(dock: DockState): DockItem | null {\n const card = dock.activeItem;\n return card && !card.isSurface ? card : null;\n}\n\nexport function useContextMenuListener(): void {\n const menus = useRegistryEntries<\"contextMenu\", ContextMenuConfig>(\n \"contextMenu\",\n );\n const dockCard = useOptionalDockState(selectDockPageCard);\n const { openMenu } = useContextMenuActions();\n const pathname = usePathname();\n\n useEffect(() => {\n const handleContextMenu = (event: MouseEvent) => {\n const match = resolveContextMenu(menus, pathname || undefined, event);\n if (!match) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const page = resolveContextMenuPageMeta(dockCard, pathname || \"\");\n const prepared = prepareMenu(\n match.config,\n page ? { ...match.context, page } : match.context,\n event,\n );\n if (!prepared) return;\n\n openMenu({\n config: match.config,\n context: prepared.context,\n items: prepared.items,\n position: { x: event.clientX, y: event.clientY },\n });\n };\n\n document.addEventListener(\"contextmenu\", handleContextMenu, true);\n return () =>\n document.removeEventListener(\"contextmenu\", handleContextMenu, true);\n }, [dockCard, menus, openMenu, pathname]);\n}\n\nexport function useMenuDismissal(\n menuRef: RefObject<HTMLElement | null>,\n onClose: () => void,\n) {\n useEffect(() => {\n const preventScroll = (event: Event) => event.preventDefault();\n const listenerOptions = { capture: true, passive: false };\n\n const handleInteraction = (event: MouseEvent | KeyboardEvent) => {\n const isInside = menuRef.current?.contains(event.target as Node);\n if (event.type === \"keydown\") {\n if ((event as KeyboardEvent).key === \"Escape\") onClose();\n if (!isInside && isScrollLockKey(event as KeyboardEvent)) {\n event.preventDefault();\n }\n } else if (!isInside) {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleInteraction, true);\n document.addEventListener(\"keydown\", handleInteraction, true);\n window.addEventListener(\"wheel\", preventScroll, listenerOptions);\n window.addEventListener(\"touchmove\", preventScroll, listenerOptions);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleInteraction, true);\n document.removeEventListener(\"keydown\", handleInteraction, true);\n window.removeEventListener(\"wheel\", preventScroll, true);\n window.removeEventListener(\"touchmove\", preventScroll, true);\n };\n }, [menuRef, onClose]);\n}\n\nexport function useContextMenuContentModel({\n config,\n items,\n menuContext,\n onClose,\n position,\n}: {\n config: ContextMenuConfig;\n items: ContextMenuResolvedItem[];\n menuContext: ContextMenuContextValue;\n onClose: () => void;\n position: ContextMenuPosition;\n}) {\n const menuRef = useRef<HTMLDivElement | null>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const theme = useModuleTheme(contextMenuTheme);\n const classes = useMemo(() => {\n const overrides: ContextMenuClassNames = config.classNames ?? {};\n const merged = { ...theme.slots } as Record<ContextMenuThemeSlot, string>;\n for (const slot of Object.keys(merged) as ContextMenuThemeSlot[]) {\n merged[slot] = joinClassNames(theme.slots[slot], overrides[slot]);\n }\n return merged;\n }, [config.classNames, theme.slots]);\n const header = useMemo(\n () => resolveMenuHeader(config, menuContext),\n [config, menuContext],\n );\n const [activeIndex, setActiveIndex] = useState(-1);\n const [prevItems, setPrevItems] = useState(items);\n if (items !== prevItems) {\n setPrevItems(items);\n setActiveIndex(-1);\n }\n useLayoutEffect(() => {\n itemRefs.current = [];\n positionMenu(menuRef.current, position);\n }, [header, items, position]);\n useEffect(() => {\n const target =\n activeIndex < 0 ? menuRef.current : itemRefs.current[activeIndex];\n target?.focus({ preventScroll: true });\n }, [activeIndex]);\n useMenuDismissal(menuRef, onClose);\n const handleItemSelect = useCallback(\n (\n item: ContextMenuResolvedItem,\n event: ReactMouseEvent | ReactKeyboardEvent,\n ) => {\n event.preventDefault();\n event.stopPropagation();\n if (item.disabled) return;\n\n safeInvoke(item.onSelect || item.onClick, event, menuContext);\n if (item.closeOnSelect !== false) onClose();\n },\n [menuContext, onClose],\n );\n const handleMenuKeyDown = (event: ReactKeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onClose();\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n const direction = event.key === \"ArrowDown\" ? 1 : -1;\n setActiveIndex((current) =>\n getNextActiveIndex(items, current, direction),\n );\n } else if (\n (event.key === \"Enter\" || event.key === \" \") &&\n items[activeIndex]\n ) {\n event.preventDefault();\n handleItemSelect(items[activeIndex], event);\n }\n };\n\n return {\n menuRef,\n itemRefs,\n classes,\n styles: theme.styles,\n header,\n activeIndex,\n setActiveIndex,\n handleItemSelect,\n handleMenuKeyDown,\n };\n}\n","import { useModuleMotion } from \"@/theme\";\nimport { contextMenuTheme } from \"./constants\";\n\nexport function useContextMenuMotion() {\n return useModuleMotion(contextMenuTheme);\n}\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@/atoms\";\nimport { isImageIconSource } from \"@/utils\";\nimport {\n useContextMenu,\n useContextMenuContentModel,\n useContextMenuListener,\n} from \"./hooks\";\nimport { joinClassNames } from \"./dom\";\nimport { resolveMenuItems } from \"./items\";\nimport { useContextMenuMotion } from \"./motion\";\nimport {\n type ContextMenuClasses,\n type ContextMenuConfig,\n type ContextMenuContextValue,\n type ContextMenuIcon,\n type ContextMenuPosition,\n type ContextMenuResolvedHeader,\n type ContextMenuResolvedItem,\n} from \"./types\";\n\nexport function ContextMenuHeaderIcon({\n classes,\n icon,\n}: {\n classes: ContextMenuClasses;\n icon: ContextMenuIcon;\n}) {\n const iconClassName = classes.headerIcon;\n\n if (isImageIconSource(icon)) {\n return (\n <div\n className={iconClassName}\n style={{ backgroundImage: `url(${icon})` }}\n />\n );\n }\n return (\n <div className={iconClassName}>\n {typeof icon === \"string\" ? <Icon icon={icon} size={20} /> : icon}\n </div>\n );\n}\n\nexport function ContextMenuHeader({\n classes,\n header,\n}: {\n classes: ContextMenuClasses;\n header: ContextMenuResolvedHeader | null;\n}) {\n if (!header) return null;\n\n return (\n <div className={classes.header}>\n {header.icon && (\n <ContextMenuHeaderIcon classes={classes} icon={header.icon} />\n )}\n <div className={classes.headerText}>\n {header.eyebrow && (\n <div className={classes.headerEyebrow}>{header.eyebrow}</div>\n )}\n {header.title && (\n <div className={classes.headerTitle}>{header.title}</div>\n )}\n {header.description && (\n <div className={classes.headerDescription}>{header.description}</div>\n )}\n </div>\n </div>\n );\n}\n\nexport function ContextMenuItem({\n classes,\n isActive,\n item,\n onHover,\n onSelect,\n setButtonRef,\n}: {\n classes: ContextMenuClasses;\n isActive: boolean;\n item: ContextMenuResolvedItem;\n onHover: () => void;\n onSelect: (item: ContextMenuResolvedItem, event: React.MouseEvent) => void;\n setButtonRef: (node: HTMLButtonElement | null) => void;\n}) {\n const menuMotion = useContextMenuMotion();\n if (item.type === \"separator\") {\n return <div className={classes.separator} role=\"separator\" />;\n }\n\n const itemClassName = joinClassNames(classes.item, item.className);\n const itemIconClassName = joinClassNames(\n classes.itemIcon,\n item.itemIconClassName,\n );\n\n return (\n <motion.button\n ref={setButtonRef}\n className={itemClassName}\n data-active={isActive ? \"true\" : undefined}\n aria-disabled={item.disabled}\n disabled={item.disabled}\n role=\"menuitem\"\n type=\"button\"\n whileTap={menuMotion.itemTap}\n transition={menuMotion.itemTransition}\n onMouseEnter={onHover}\n onClick={(event) => onSelect(item, event)}\n >\n {item.icon &&\n (typeof item.icon === \"string\" ? (\n <Icon icon={item.icon} className={itemIconClassName} size={18} />\n ) : (\n item.icon\n ))}\n <span className={classes.itemLabel}>{item.label}</span>\n {item.shortcut && (\n <span className={classes.itemShortcut}>{item.shortcut}</span>\n )}\n </motion.button>\n );\n}\n\nconst EMPTY_MENU_CONTEXT: ContextMenuContextValue = Object.freeze({\n pathname: \"\",\n point: { x: 0, y: 0 },\n});\n\nexport function ContextMenuContent({\n config,\n items,\n menuContext,\n onClose,\n position,\n}: {\n config: ContextMenuConfig;\n items: ContextMenuResolvedItem[];\n menuContext: ContextMenuContextValue;\n onClose: () => void;\n position: ContextMenuPosition;\n}) {\n const {\n menuRef,\n itemRefs,\n classes,\n styles,\n header,\n activeIndex,\n setActiveIndex,\n handleItemSelect,\n handleMenuKeyDown,\n } = useContextMenuContentModel({\n config,\n items,\n menuContext,\n onClose,\n position,\n });\n const menuMotion = useContextMenuMotion();\n\n return (\n <div>\n <div\n data-context-menu-overlay\n className={classes.backdrop}\n onMouseDown={onClose}\n style={styles.backdrop}\n />\n <motion.div\n ref={menuRef}\n data-context-menu-ignore\n variants={menuMotion.pop}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n className={classes.menu}\n role=\"menu\"\n tabIndex={-1}\n style={{\n ...styles.menu,\n left: position.x || 0,\n top: position.y || 0,\n position: \"fixed\",\n }}\n onMouseLeave={() => setActiveIndex(-1)}\n onKeyDown={handleMenuKeyDown}\n >\n <motion.div\n variants={menuMotion.content}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <ContextMenuHeader classes={classes} header={header} />\n </motion.div>\n\n {items.map((item, index) => (\n <motion.div\n key={item.key || `menu-item-${index}`}\n variants={menuMotion.item}\n custom={index}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <ContextMenuItem\n item={item}\n classes={classes}\n isActive={index === activeIndex}\n onHover={() => {\n if (item.type === \"action\" && !item.disabled) {\n setActiveIndex(index);\n }\n }}\n setButtonRef={(node) => {\n itemRefs.current[index] = node;\n }}\n onSelect={handleItemSelect}\n />\n </motion.div>\n ))}\n </motion.div>\n </div>\n );\n}\n\nconst emptySubscribe = () => () => {};\n\nexport function ContextMenuRenderer() {\n const { closeMenu, config, context, isOpen, items, position } =\n useContextMenu();\n const isMounted = useSyncExternalStore(\n emptySubscribe,\n () => true,\n () => false,\n );\n if (!isMounted) return null;\n\n const menuContext = context ?? EMPTY_MENU_CONTEXT;\n const resolvedItems = items.length\n ? items\n : resolveMenuItems(config, menuContext);\n\n return createPortal(\n <AnimatePresence>\n {isOpen && config && resolvedItems.length > 0 && (\n <ContextMenuContent\n key=\"context-menu-content\"\n config={config}\n items={resolvedItems}\n menuContext={menuContext}\n position={position}\n onClose={closeMenu}\n />\n )}\n </AnimatePresence>,\n document.body,\n );\n}\n\nexport function ContextMenuGlobal() {\n useContextMenuListener();\n return <ContextMenuRenderer />;\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n defineModule,\n type PageConfig,\n type PageModuleApi,\n} from \"@/kernel\";\nimport { CURRENT_PAGE_KEY, GLOBAL_MENU_KEY } from \"./constants\";\nimport {\n ContextMenuContext,\n ContextMenuProvider,\n} from \"./context\";\nimport {\n useContextMenu,\n useContextMenuActions,\n} from \"./hooks\";\nimport { ContextMenuGlobal } from \"./overlay\";\nimport {\n type ContextMenuConfig,\n type ContextMenuDefinition,\n type ContextMenuPageApi,\n type ContextMenuPageConfig,\n} from \"./types\";\n\nfunction selectPageContextMenu(\n config: PageConfig,\n): ContextMenuPageConfig | null {\n return config.contextMenu ?? null;\n}\n\nfunction useContextMenuPage(\n _slice: ContextMenuPageConfig | null,\n page: PageModuleApi,\n): ContextMenuPageApi {\n const actions = useContextMenuActions();\n return useMemo(\n () => ({\n ...actions,\n set: (contextMenu: ContextMenuPageConfig | null) =>\n page.set({ contextMenu }),\n }),\n [actions, page],\n );\n}\n\nexport const contextMenuModule = defineModule({\n id: \"contextMenu\",\n context: ContextMenuContext,\n Provider: ContextMenuProvider,\n uses: [\"dock\"],\n Overlay: ContextMenuGlobal,\n registry: {\n cleanupDelayMs: 600,\n keyPolicy: \"route\",\n lifecycle: \"immediate\",\n reservedKeys: [CURRENT_PAGE_KEY, GLOBAL_MENU_KEY],\n },\n page: {\n select: selectPageContextMenu,\n entries: (slice: ContextMenuPageConfig, { pathname }) => [\n { key: pathname || CURRENT_PAGE_KEY, value: slice },\n ],\n use: useContextMenuPage,\n },\n});\n\ndeclare module \"@omerdlw/base-framework/kernel\" {\n interface CoreModules {\n contextMenu: typeof contextMenuModule;\n }\n interface PageConfig {\n contextMenu?: ContextMenuPageConfig | null;\n }\n}\n\nexport function defineContextMenu(\n definition: Partial<ContextMenuConfig> = {},\n): ContextMenuDefinition {\n return Object.freeze({\n config: definition,\n id: definition.id ?? \"context-menu\",\n use: function useDefinedContextMenu(options = {}) {\n return useContextMenu({ ...definition, ...options });\n },\n });\n}\n"]}