@omerdlw/base-framework 1.0.6 → 2.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.
- package/dist/atoms/index.js +1 -103
- package/dist/atoms/index.js.map +1 -1
- package/dist/chunk-3BUP64Q6.js +105 -0
- package/dist/chunk-3BUP64Q6.js.map +1 -0
- package/dist/chunk-4GMQKD6F.js +353 -0
- package/dist/chunk-4GMQKD6F.js.map +1 -0
- package/dist/chunk-6SG7V77J.js +577 -0
- package/dist/chunk-6SG7V77J.js.map +1 -0
- package/dist/chunk-6ZJVLUBE.js +26 -0
- package/dist/chunk-6ZJVLUBE.js.map +1 -0
- package/dist/chunk-7HQMXTNP.js +419 -0
- package/dist/chunk-7HQMXTNP.js.map +1 -0
- package/dist/chunk-7TAVYJ3A.js +371 -0
- package/dist/chunk-7TAVYJ3A.js.map +1 -0
- package/dist/chunk-A5RE3F6O.js +9905 -0
- package/dist/chunk-A5RE3F6O.js.map +1 -0
- package/dist/chunk-AQ4BNXA2.js +349 -0
- package/dist/chunk-AQ4BNXA2.js.map +1 -0
- package/dist/chunk-CGHZSSFR.js +2166 -0
- package/dist/chunk-CGHZSSFR.js.map +1 -0
- package/dist/chunk-DGCQWQLZ.js +61 -0
- package/dist/chunk-DGCQWQLZ.js.map +1 -0
- package/dist/chunk-FIMPHODX.js +67 -0
- package/dist/chunk-FIMPHODX.js.map +1 -0
- package/dist/chunk-GF7TUX5I.js +1889 -0
- package/dist/chunk-GF7TUX5I.js.map +1 -0
- package/dist/chunk-JELG4JLT.js +454 -0
- package/dist/chunk-JELG4JLT.js.map +1 -0
- package/dist/chunk-K676GL7Z.js +51 -0
- package/dist/chunk-K676GL7Z.js.map +1 -0
- package/dist/chunk-QI3ALLIB.js +38 -0
- package/dist/chunk-QI3ALLIB.js.map +1 -0
- package/dist/chunk-QXR55VVS.js +1139 -0
- package/dist/chunk-QXR55VVS.js.map +1 -0
- package/dist/chunk-R2YGFJDJ.js +408 -0
- package/dist/chunk-R2YGFJDJ.js.map +1 -0
- package/dist/chunk-RFZQWLC5.js +27 -0
- package/dist/chunk-RFZQWLC5.js.map +1 -0
- package/dist/chunk-SKBITB5X.js +888 -0
- package/dist/chunk-SKBITB5X.js.map +1 -0
- package/dist/chunk-SYAVGTOX.js +521 -0
- package/dist/chunk-SYAVGTOX.js.map +1 -0
- package/dist/chunk-TV3WEF5G.js +784 -0
- package/dist/chunk-TV3WEF5G.js.map +1 -0
- package/dist/chunk-XASQT4CQ.js +280 -0
- package/dist/chunk-XASQT4CQ.js.map +1 -0
- package/dist/error/index.js +5 -682
- package/dist/error/index.js.map +1 -1
- package/dist/error/reporter.d.ts.map +1 -1
- package/dist/error/theme.d.ts +1 -1
- package/dist/error/theme.d.ts.map +1 -1
- package/dist/events.js +1 -7
- package/dist/events.js.map +1 -1
- package/dist/hooks/index.js +1 -358
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-global-event.d.ts +1 -1
- package/dist/index.js +18 -20029
- package/dist/index.js.map +1 -1
- package/dist/kernel/index.js +2 -2035
- package/dist/kernel/index.js.map +1 -1
- package/dist/kernel/types.d.ts +1 -1
- package/dist/modules/ambient/analyze.d.ts +46 -0
- package/dist/modules/ambient/analyze.d.ts.map +1 -0
- package/dist/modules/ambient/constants.d.ts +1 -5
- package/dist/modules/ambient/constants.d.ts.map +1 -1
- package/dist/modules/ambient/context.d.ts.map +1 -1
- package/dist/modules/ambient/dom.d.ts +11 -12
- package/dist/modules/ambient/dom.d.ts.map +1 -1
- package/dist/modules/ambient/extractor.d.ts +10 -10
- package/dist/modules/ambient/extractor.d.ts.map +1 -1
- package/dist/modules/ambient/hooks.d.ts +1 -1
- package/dist/modules/ambient/hooks.d.ts.map +1 -1
- package/dist/modules/ambient/index.d.ts +6 -4
- package/dist/modules/ambient/index.d.ts.map +1 -1
- package/dist/modules/ambient/index.js +7 -762
- package/dist/modules/ambient/index.js.map +1 -1
- package/dist/modules/ambient/module.d.ts +1 -1
- package/dist/modules/ambient/module.d.ts.map +1 -1
- package/dist/modules/ambient/oklab.d.ts +36 -0
- package/dist/modules/ambient/oklab.d.ts.map +1 -0
- package/dist/modules/ambient/pipeline.d.ts +28 -0
- package/dist/modules/ambient/pipeline.d.ts.map +1 -0
- package/dist/modules/ambient/quantize.d.ts +22 -0
- package/dist/modules/ambient/quantize.d.ts.map +1 -0
- package/dist/modules/ambient/server/address.d.ts +8 -0
- package/dist/modules/ambient/server/address.d.ts.map +1 -0
- package/dist/modules/ambient/server/index.d.ts +53 -0
- package/dist/modules/ambient/server/index.d.ts.map +1 -0
- package/dist/modules/ambient/server/index.js +221 -0
- package/dist/modules/ambient/server/index.js.map +1 -0
- package/dist/modules/ambient/settings.d.ts +19 -0
- package/dist/modules/ambient/settings.d.ts.map +1 -0
- package/dist/modules/ambient/types.d.ts +105 -9
- package/dist/modules/ambient/types.d.ts.map +1 -1
- package/dist/modules/ambient/worker/index.d.ts +15 -0
- package/dist/modules/ambient/worker/index.d.ts.map +1 -0
- package/dist/modules/ambient/worker/index.js +114 -0
- package/dist/modules/ambient/worker/index.js.map +1 -0
- package/dist/modules/background/constants.d.ts +2 -2
- package/dist/modules/background/constants.d.ts.map +1 -1
- package/dist/modules/background/hooks.d.ts +1 -1
- package/dist/modules/background/index.js +6 -3078
- package/dist/modules/background/index.js.map +1 -1
- package/dist/modules/background/motion.d.ts +9 -7
- package/dist/modules/background/motion.d.ts.map +1 -1
- package/dist/modules/background/overlay.d.ts +3 -8
- package/dist/modules/background/overlay.d.ts.map +1 -1
- package/dist/modules/background/types.d.ts +16 -2
- package/dist/modules/background/types.d.ts.map +1 -1
- package/dist/modules/context-menu/constants.d.ts +2 -2
- package/dist/modules/context-menu/constants.d.ts.map +1 -1
- package/dist/modules/context-menu/hooks.d.ts +1 -1
- package/dist/modules/context-menu/index.js +10 -1896
- package/dist/modules/context-menu/index.js.map +1 -1
- package/dist/modules/context-menu/motion.d.ts +1 -8
- package/dist/modules/context-menu/motion.d.ts.map +1 -1
- package/dist/modules/context-menu/overlay.d.ts.map +1 -1
- package/dist/modules/context-menu/types.d.ts +16 -2
- package/dist/modules/context-menu/types.d.ts.map +1 -1
- package/dist/modules/controls/constants.d.ts +1 -1
- package/dist/modules/controls/constants.d.ts.map +1 -1
- package/dist/modules/controls/entries.d.ts +1 -1
- package/dist/modules/controls/hooks.d.ts +1 -1
- package/dist/modules/controls/index.js +4 -1110
- package/dist/modules/controls/index.js.map +1 -1
- package/dist/modules/controls/overlay.d.ts +1 -1
- package/dist/modules/controls/types.d.ts +2 -2
- package/dist/modules/dock/cards.d.ts +711 -24
- package/dist/modules/dock/cards.d.ts.map +1 -1
- package/dist/modules/dock/constants.d.ts +2 -2
- package/dist/modules/dock/constants.d.ts.map +1 -1
- package/dist/modules/dock/helpers.d.ts +2 -2
- package/dist/modules/dock/hooks.d.ts +2 -2
- package/dist/modules/dock/index.d.ts +1 -1
- package/dist/modules/dock/index.d.ts.map +1 -1
- package/dist/modules/dock/index.js +9 -12132
- package/dist/modules/dock/index.js.map +1 -1
- package/dist/modules/dock/layout.d.ts.map +1 -1
- package/dist/modules/dock/module.d.ts +1 -1
- package/dist/modules/dock/motion.d.ts +44 -912
- package/dist/modules/dock/motion.d.ts.map +1 -1
- package/dist/modules/dock/overlay.d.ts +1 -1
- package/dist/modules/dock/overlay.d.ts.map +1 -1
- package/dist/modules/dock/runtime/dock.d.ts +1 -23
- package/dist/modules/dock/runtime/dock.d.ts.map +1 -1
- package/dist/modules/dock/styles.d.ts +4 -4
- package/dist/modules/dock/surface/hooks.d.ts +5 -20
- package/dist/modules/dock/surface/hooks.d.ts.map +1 -1
- package/dist/modules/dock/surface/machine.d.ts +4 -3
- package/dist/modules/dock/surface/machine.d.ts.map +1 -1
- package/dist/modules/dock/surface/stack.d.ts.map +1 -1
- package/dist/modules/dock/surface/view-model.d.ts.map +1 -1
- package/dist/modules/dock/types.d.ts +162 -3
- package/dist/modules/dock/types.d.ts.map +1 -1
- package/dist/modules/index.js +16 -17883
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/loading/constants.d.ts +1 -1
- package/dist/modules/loading/constants.d.ts.map +1 -1
- package/dist/modules/loading/context.d.ts +1 -1
- package/dist/modules/loading/hooks.d.ts +1 -1
- package/dist/modules/loading/index.js +5 -1153
- package/dist/modules/loading/index.js.map +1 -1
- package/dist/modules/loading/types.d.ts +2 -2
- package/dist/modules/media/context.d.ts +1 -1
- package/dist/modules/media/index.js +3 -570
- package/dist/modules/media/index.js.map +1 -1
- package/dist/modules/media/types.d.ts +2 -2
- package/dist/modules/modal/constants.d.ts +2 -2
- package/dist/modules/modal/constants.d.ts.map +1 -1
- package/dist/modules/modal/context.d.ts +1 -1
- package/dist/modules/modal/hooks.d.ts +3 -3
- package/dist/modules/modal/index.js +8 -2355
- package/dist/modules/modal/index.js.map +1 -1
- package/dist/modules/modal/motion.d.ts +3 -8
- package/dist/modules/modal/motion.d.ts.map +1 -1
- package/dist/modules/modal/overlay.d.ts.map +1 -1
- package/dist/modules/modal/types.d.ts +21 -0
- package/dist/modules/modal/types.d.ts.map +1 -1
- package/dist/modules/notification/constants.d.ts +2 -2
- package/dist/modules/notification/constants.d.ts.map +1 -1
- package/dist/modules/notification/context.d.ts +1 -1
- package/dist/modules/notification/hooks.d.ts +1 -1
- package/dist/modules/notification/index.js +4 -828
- package/dist/modules/notification/index.js.map +1 -1
- package/dist/modules/notification/motion.d.ts +1 -7
- package/dist/modules/notification/motion.d.ts.map +1 -1
- package/dist/modules/notification/overlay.d.ts.map +1 -1
- package/dist/modules/notification/types.d.ts +9 -1
- package/dist/modules/notification/types.d.ts.map +1 -1
- package/dist/overlay-TZ6L52A5.js +9 -0
- package/dist/overlay-TZ6L52A5.js.map +1 -0
- package/dist/provider.d.ts +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +6 -1968
- package/dist/provider.js.map +1 -1
- package/dist/result.js +2 -63
- package/dist/result.js.map +1 -1
- package/dist/theme.d.ts +45 -8
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +3 -41
- package/dist/theme.js.map +1 -1
- package/dist/tokens/index.d.ts +1 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +126 -155
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/motion-config.d.ts +44 -0
- package/dist/tokens/motion-config.d.ts.map +1 -0
- package/dist/tokens/motion.d.ts +23 -174
- package/dist/tokens/motion.d.ts.map +1 -1
- package/dist/utils/index.js +4 -82
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/report.d.ts.map +1 -1
- package/docs/README.md +1 -0
- package/docs/architecture-and-rules.md +4 -3
- package/docs/core-engine.md +7 -10
- package/docs/getting-started.md +4 -2
- package/docs/modules/ambient.md +194 -80
- package/docs/modules/background.md +3 -3
- package/docs/modules/context-menu.md +2 -2
- package/docs/modules/dock.md +9 -6
- package/docs/modules/modal.md +2 -2
- package/docs/modules/notification.md +2 -2
- package/docs/theming.md +81 -9
- package/package.json +22 -5
- package/templates/AGENTS.md +1 -1
- package/templates/motion/background.ts +17 -0
- package/templates/motion/context-menu.ts +63 -0
- package/templates/motion/dock.ts +327 -0
- package/templates/motion/modal.ts +79 -0
- package/templates/motion/notification.ts +27 -0
- package/templates/motion/tokens.ts +47 -0
- package/templates/tsconfig.json +7 -0
- package/dist/modules/ambient/color.d.ts +0 -21
- package/dist/modules/ambient/color.d.ts.map +0 -1
|
@@ -0,0 +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-SKBITB5X.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"]}
|
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
import { defineThemeSpec, useTheme, useModuleMotion } from './chunk-7TAVYJ3A.js';
|
|
2
|
+
import { getOrCreateGlobalContext, defineModule } from './chunk-GF7TUX5I.js';
|
|
3
|
+
import { USER_MESSAGES, createStore, toUserMessage, useGlobalEvent, EVENT_TYPES, cn, useRequiredContext, isObject, useStore, UserError, report } from './chunk-TV3WEF5G.js';
|
|
4
|
+
import { useMemo, useState, useRef, useCallback, useEffect, useSyncExternalStore, useContext } from 'react';
|
|
5
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
6
|
+
import { createPortal } from 'react-dom';
|
|
7
|
+
import { AnimatePresence, motion } from 'motion/react';
|
|
8
|
+
|
|
9
|
+
// src/modules/notification/constants.ts
|
|
10
|
+
var TOAST_DURATIONS = Object.freeze({
|
|
11
|
+
DEFAULT: 2e3,
|
|
12
|
+
SHORT: 1500
|
|
13
|
+
});
|
|
14
|
+
var SESSION_EXPIRED_MESSAGE = USER_MESSAGES.unauthorized;
|
|
15
|
+
var DOCK_STACK_ELEMENT_ID = "dock-card-stack";
|
|
16
|
+
var notificationTheme = defineThemeSpec("notification");
|
|
17
|
+
var INITIAL_NOTIFICATION_STATE = Object.freeze({
|
|
18
|
+
notifications: {}
|
|
19
|
+
});
|
|
20
|
+
var INERT_NOTIFICATION_ACTIONS = Object.freeze({
|
|
21
|
+
dismissAllNotifications: () => {
|
|
22
|
+
},
|
|
23
|
+
dismissNotification: () => {
|
|
24
|
+
},
|
|
25
|
+
showNotification: () => null
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// src/result.ts
|
|
29
|
+
function ok(data, code) {
|
|
30
|
+
return { data, success: true, ...code ? { code } : {} };
|
|
31
|
+
}
|
|
32
|
+
function err(error, code) {
|
|
33
|
+
return { error, success: false, ...code ? { code } : {} };
|
|
34
|
+
}
|
|
35
|
+
function isResult(value) {
|
|
36
|
+
return typeof value === "object" && value !== null && "success" in value && typeof value.success === "boolean" && ("data" in value && value.success === true || "error" in value && value.success === false);
|
|
37
|
+
}
|
|
38
|
+
function isOk(result) {
|
|
39
|
+
return result.success === true;
|
|
40
|
+
}
|
|
41
|
+
function isErr(result) {
|
|
42
|
+
return result.success === false;
|
|
43
|
+
}
|
|
44
|
+
function unwrap(result) {
|
|
45
|
+
if (result.success) {
|
|
46
|
+
return result.data;
|
|
47
|
+
}
|
|
48
|
+
if (result.error instanceof Error) {
|
|
49
|
+
throw result.error;
|
|
50
|
+
}
|
|
51
|
+
throw new Error(
|
|
52
|
+
typeof result.error === "string" ? result.error : String(result.error)
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
function unwrapOr(result, fallback) {
|
|
56
|
+
return result.success ? result.data : fallback;
|
|
57
|
+
}
|
|
58
|
+
function map(result, fn) {
|
|
59
|
+
return result.success ? ok(fn(result.data), result.code) : result;
|
|
60
|
+
}
|
|
61
|
+
function mapErr(result, fn) {
|
|
62
|
+
return result.success ? result : err(fn(result.error), result.code);
|
|
63
|
+
}
|
|
64
|
+
function match(result, branches) {
|
|
65
|
+
return result.success ? branches.ok(result.data) : branches.err(result.error);
|
|
66
|
+
}
|
|
67
|
+
function mapCaught(error, mapError) {
|
|
68
|
+
if (!(error instanceof UserError)) report("Result", error);
|
|
69
|
+
return mapError ? mapError(error) : toUserMessage(error);
|
|
70
|
+
}
|
|
71
|
+
async function tryCatch(promiseOrFn, mapError) {
|
|
72
|
+
try {
|
|
73
|
+
const data = typeof promiseOrFn === "function" ? await promiseOrFn() : await promiseOrFn;
|
|
74
|
+
return ok(data);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
return err(mapCaught(error, mapError));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function createSafeAction(handler, options = {}) {
|
|
80
|
+
const { errorCode, mapError, schema, validate } = options;
|
|
81
|
+
return async (...args) => {
|
|
82
|
+
try {
|
|
83
|
+
let effectiveArgs = args;
|
|
84
|
+
if (schema) {
|
|
85
|
+
const parsed = schema.safeParse(args[0]);
|
|
86
|
+
if (!parsed.success) {
|
|
87
|
+
const issueMessage = parsed.error?.issues?.[0]?.message || parsed.error?.message || "Invalid input";
|
|
88
|
+
return err(
|
|
89
|
+
mapError ? mapError(issueMessage) : issueMessage,
|
|
90
|
+
errorCode ?? "VALIDATION_ERROR"
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
effectiveArgs = [parsed.data, ...args.slice(1)];
|
|
94
|
+
}
|
|
95
|
+
if (validate) {
|
|
96
|
+
const validationResult = validate(...effectiveArgs);
|
|
97
|
+
if (isResult(validationResult)) {
|
|
98
|
+
if (isErr(validationResult)) {
|
|
99
|
+
return validationResult;
|
|
100
|
+
}
|
|
101
|
+
} else if (validationResult === false) {
|
|
102
|
+
return err(
|
|
103
|
+
mapError ? mapError("Validation failed") : "Validation failed",
|
|
104
|
+
errorCode ?? "VALIDATION_ERROR"
|
|
105
|
+
);
|
|
106
|
+
} else if (typeof validationResult === "string" && validationResult.length > 0) {
|
|
107
|
+
return err(
|
|
108
|
+
mapError ? mapError(validationResult) : validationResult,
|
|
109
|
+
errorCode ?? "VALIDATION_ERROR"
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const output = await handler(...effectiveArgs);
|
|
114
|
+
if (isResult(output)) {
|
|
115
|
+
return output;
|
|
116
|
+
}
|
|
117
|
+
return ok(output);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
return err(mapCaught(error, mapError), errorCode);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// src/modules/notification/state.ts
|
|
125
|
+
function normalizeFeedbackText(value) {
|
|
126
|
+
if (typeof value !== "string") return value;
|
|
127
|
+
return value.trim().replace(/[.\s]+$/, "");
|
|
128
|
+
}
|
|
129
|
+
function getActiveNotification(notifications) {
|
|
130
|
+
let active = null;
|
|
131
|
+
for (const entry of Object.values(notifications)) {
|
|
132
|
+
if (!active || entry.timestamp >= active.timestamp) active = entry;
|
|
133
|
+
}
|
|
134
|
+
return active;
|
|
135
|
+
}
|
|
136
|
+
function normalizeToastOptions(options) {
|
|
137
|
+
return typeof options === "number" ? { duration: options } : options || {};
|
|
138
|
+
}
|
|
139
|
+
function normalizeDuration(value) {
|
|
140
|
+
if (value === null) return null;
|
|
141
|
+
if (value === void 0) return TOAST_DURATIONS.DEFAULT;
|
|
142
|
+
const duration = Number(value);
|
|
143
|
+
return Number.isFinite(duration) && duration > 0 ? duration : null;
|
|
144
|
+
}
|
|
145
|
+
function withDefaultDuration(duration, options) {
|
|
146
|
+
const normalized = normalizeToastOptions(options);
|
|
147
|
+
return {
|
|
148
|
+
...normalized,
|
|
149
|
+
duration: normalized.duration !== void 0 ? normalized.duration : duration
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function isNotificationDataObject(value) {
|
|
153
|
+
return isObject(value) && "message" in value;
|
|
154
|
+
}
|
|
155
|
+
function resolveMessage(message, arg) {
|
|
156
|
+
return typeof message === "function" ? message(arg) : message;
|
|
157
|
+
}
|
|
158
|
+
function getOutcomeMessage(value, messages) {
|
|
159
|
+
if (!isResult(value)) return resolveMessage(messages.success, value);
|
|
160
|
+
return value.success ? resolveMessage(messages.success, value.data) : resolveMessage(messages.error, value.error) || toUserMessage(value.error);
|
|
161
|
+
}
|
|
162
|
+
function createNotificationEntry(messageOrData, options, fallbackId) {
|
|
163
|
+
const normalizedOptions = normalizeToastOptions(options);
|
|
164
|
+
const payload = isNotificationDataObject(messageOrData) ? { ...normalizedOptions, ...messageOrData } : { ...normalizedOptions, message: messageOrData };
|
|
165
|
+
const normalizedMessage = normalizeFeedbackText(payload.message);
|
|
166
|
+
if (normalizedMessage === null || normalizedMessage === void 0 || normalizedMessage === "") {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const id = payload.dedupeKey || payload.id || (typeof normalizedMessage === "string" ? normalizedMessage.slice(0, 64) : fallbackId || `notification-${Date.now()}`);
|
|
170
|
+
const entry = {
|
|
171
|
+
dedupeKey: payload.dedupeKey,
|
|
172
|
+
duration: payload.duration,
|
|
173
|
+
id,
|
|
174
|
+
message: normalizedMessage,
|
|
175
|
+
timestamp: Date.now()
|
|
176
|
+
};
|
|
177
|
+
return {
|
|
178
|
+
duration: normalizeDuration(payload.duration),
|
|
179
|
+
entry
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
var NotificationContext = getOrCreateGlobalContext(
|
|
183
|
+
"NotificationContext",
|
|
184
|
+
null
|
|
185
|
+
);
|
|
186
|
+
var NOOP_NOTIFICATION_STORE = createStore(
|
|
187
|
+
INITIAL_NOTIFICATION_STATE
|
|
188
|
+
);
|
|
189
|
+
var notificationIdCounter = 0;
|
|
190
|
+
var NotificationProvider = ({
|
|
191
|
+
children
|
|
192
|
+
}) => {
|
|
193
|
+
const [store] = useState(
|
|
194
|
+
() => createStore(INITIAL_NOTIFICATION_STATE, {
|
|
195
|
+
freezeSnapshots: false
|
|
196
|
+
})
|
|
197
|
+
);
|
|
198
|
+
const timersRef = useRef(
|
|
199
|
+
/* @__PURE__ */ new Map()
|
|
200
|
+
);
|
|
201
|
+
const clearTimers = useCallback(() => {
|
|
202
|
+
timersRef.current.forEach(clearTimeout);
|
|
203
|
+
timersRef.current.clear();
|
|
204
|
+
}, []);
|
|
205
|
+
useEffect(() => clearTimers, [clearTimers]);
|
|
206
|
+
const dismissNotification = useCallback(
|
|
207
|
+
(id) => {
|
|
208
|
+
clearTimeout(timersRef.current.get(id));
|
|
209
|
+
timersRef.current.delete(id);
|
|
210
|
+
store.publish((prev) => {
|
|
211
|
+
if (!Object.hasOwn(prev.notifications, id)) return prev;
|
|
212
|
+
const notifications = { ...prev.notifications };
|
|
213
|
+
delete notifications[id];
|
|
214
|
+
return { notifications };
|
|
215
|
+
});
|
|
216
|
+
},
|
|
217
|
+
[store]
|
|
218
|
+
);
|
|
219
|
+
const dismissAllNotifications = useCallback(() => {
|
|
220
|
+
clearTimers();
|
|
221
|
+
store.publish(
|
|
222
|
+
(prev) => Object.keys(prev.notifications).length === 0 ? prev : { notifications: {} }
|
|
223
|
+
);
|
|
224
|
+
}, [clearTimers, store]);
|
|
225
|
+
const showNotification = useCallback(
|
|
226
|
+
(messageOrData, options) => {
|
|
227
|
+
const fallbackId = `notification-${++notificationIdCounter}`;
|
|
228
|
+
const result = createNotificationEntry(
|
|
229
|
+
messageOrData,
|
|
230
|
+
options,
|
|
231
|
+
fallbackId
|
|
232
|
+
);
|
|
233
|
+
if (!result) return null;
|
|
234
|
+
const { entry, duration } = result;
|
|
235
|
+
const { id } = entry;
|
|
236
|
+
clearTimers();
|
|
237
|
+
store.publish({ notifications: { [id]: entry } });
|
|
238
|
+
if (duration) {
|
|
239
|
+
timersRef.current.set(
|
|
240
|
+
id,
|
|
241
|
+
setTimeout(() => dismissNotification(id), duration)
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
return id;
|
|
245
|
+
},
|
|
246
|
+
[clearTimers, dismissNotification, store]
|
|
247
|
+
);
|
|
248
|
+
const actions = useMemo(
|
|
249
|
+
() => ({
|
|
250
|
+
dismissAllNotifications,
|
|
251
|
+
dismissNotification,
|
|
252
|
+
showNotification
|
|
253
|
+
}),
|
|
254
|
+
[dismissAllNotifications, dismissNotification, showNotification]
|
|
255
|
+
);
|
|
256
|
+
const value = useMemo(
|
|
257
|
+
() => ({ actions, store }),
|
|
258
|
+
[actions, store]
|
|
259
|
+
);
|
|
260
|
+
return /* @__PURE__ */ jsx(NotificationContext, { value, children });
|
|
261
|
+
};
|
|
262
|
+
var toastPromiseIdCounter = 0;
|
|
263
|
+
function useNotificationActions() {
|
|
264
|
+
return useRequiredContext(
|
|
265
|
+
NotificationContext,
|
|
266
|
+
"useNotificationActions",
|
|
267
|
+
"NotificationProvider"
|
|
268
|
+
).actions;
|
|
269
|
+
}
|
|
270
|
+
function useNotificationState() {
|
|
271
|
+
const { store } = useRequiredContext(
|
|
272
|
+
NotificationContext,
|
|
273
|
+
"useNotificationState",
|
|
274
|
+
"NotificationProvider"
|
|
275
|
+
);
|
|
276
|
+
return useStore(store);
|
|
277
|
+
}
|
|
278
|
+
function useNotification() {
|
|
279
|
+
const actions = useNotificationActions();
|
|
280
|
+
const state = useNotificationState();
|
|
281
|
+
return useMemo(() => ({ ...actions, ...state }), [actions, state]);
|
|
282
|
+
}
|
|
283
|
+
function useOptionalNotificationState(selector, isEqual) {
|
|
284
|
+
const ctx = useContext(NotificationContext);
|
|
285
|
+
return useStore(
|
|
286
|
+
ctx?.store ?? NOOP_NOTIFICATION_STORE,
|
|
287
|
+
selector,
|
|
288
|
+
isEqual
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
function useOptionalNotificationActions() {
|
|
292
|
+
const ctx = useContext(NotificationContext);
|
|
293
|
+
return ctx?.actions ?? INERT_NOTIFICATION_ACTIONS;
|
|
294
|
+
}
|
|
295
|
+
function useNotificationVisible() {
|
|
296
|
+
return useOptionalNotificationState(
|
|
297
|
+
({ notifications }) => Object.keys(notifications).length > 0
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
function useToast(defaultDuration) {
|
|
301
|
+
const { dismissAllNotifications, dismissNotification, showNotification } = useNotificationActions();
|
|
302
|
+
const resolvedDefaultDuration = defaultDuration ?? TOAST_DURATIONS.DEFAULT;
|
|
303
|
+
const triggerToast = useCallback(
|
|
304
|
+
(message, options) => showNotification(
|
|
305
|
+
message,
|
|
306
|
+
withDefaultDuration(resolvedDefaultDuration, options)
|
|
307
|
+
),
|
|
308
|
+
[resolvedDefaultDuration, showNotification]
|
|
309
|
+
);
|
|
310
|
+
const dismiss = useCallback(
|
|
311
|
+
(id) => {
|
|
312
|
+
if (id) dismissNotification(id);
|
|
313
|
+
else dismissAllNotifications();
|
|
314
|
+
},
|
|
315
|
+
[dismissAllNotifications, dismissNotification]
|
|
316
|
+
);
|
|
317
|
+
const fromResult = useCallback(
|
|
318
|
+
(result, messages = {}, options) => {
|
|
319
|
+
const message = getOutcomeMessage(result, messages);
|
|
320
|
+
if (message) triggerToast(message, options);
|
|
321
|
+
return result;
|
|
322
|
+
},
|
|
323
|
+
[triggerToast]
|
|
324
|
+
);
|
|
325
|
+
const promise = useCallback(
|
|
326
|
+
async (promiseOrFn, messages = {}, options) => {
|
|
327
|
+
const normalized = normalizeToastOptions(options);
|
|
328
|
+
const id = normalized.id || normalized.dedupeKey || `toast-promise-${++toastPromiseIdCounter}`;
|
|
329
|
+
const sharedOptions = { ...normalized, id };
|
|
330
|
+
if (messages.loading) {
|
|
331
|
+
showNotification(messages.loading, {
|
|
332
|
+
...sharedOptions,
|
|
333
|
+
duration: null
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
try {
|
|
337
|
+
const resolved = await (typeof promiseOrFn === "function" ? promiseOrFn() : promiseOrFn);
|
|
338
|
+
const message = getOutcomeMessage(resolved, messages);
|
|
339
|
+
if (message) triggerToast(message, sharedOptions);
|
|
340
|
+
else if (messages.loading) dismiss(id);
|
|
341
|
+
return resolved;
|
|
342
|
+
} catch (error) {
|
|
343
|
+
triggerToast(
|
|
344
|
+
resolveMessage(messages.error, error) || toUserMessage(error),
|
|
345
|
+
sharedOptions
|
|
346
|
+
);
|
|
347
|
+
throw error;
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
[dismiss, showNotification, triggerToast]
|
|
351
|
+
);
|
|
352
|
+
return useMemo(
|
|
353
|
+
() => Object.assign(
|
|
354
|
+
(message, options) => triggerToast(message, options),
|
|
355
|
+
{ dismiss, dismissAll: dismissAllNotifications, fromResult, promise }
|
|
356
|
+
),
|
|
357
|
+
[dismiss, dismissAllNotifications, fromResult, promise, triggerToast]
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
var emptySubscribe = () => () => {
|
|
361
|
+
};
|
|
362
|
+
function NotificationListener() {
|
|
363
|
+
const { showNotification } = useNotificationActions();
|
|
364
|
+
useGlobalEvent(EVENT_TYPES.API_UNAUTHORIZED, (data) => {
|
|
365
|
+
if (data?.source && data.source !== "app") return;
|
|
366
|
+
showNotification(SESSION_EXPIRED_MESSAGE);
|
|
367
|
+
});
|
|
368
|
+
useGlobalEvent(
|
|
369
|
+
EVENT_TYPES.APP_ERROR,
|
|
370
|
+
(data) => {
|
|
371
|
+
if (!data?.notify || !data.message) return;
|
|
372
|
+
showNotification(data.message);
|
|
373
|
+
}
|
|
374
|
+
);
|
|
375
|
+
useGlobalEvent(
|
|
376
|
+
EVENT_TYPES.STATE_CHANGE,
|
|
377
|
+
(data) => {
|
|
378
|
+
if (!data?.notify || !data.message) return;
|
|
379
|
+
showNotification(data.message);
|
|
380
|
+
}
|
|
381
|
+
);
|
|
382
|
+
return null;
|
|
383
|
+
}
|
|
384
|
+
function useNotificationContainerModel() {
|
|
385
|
+
const { notifications } = useNotificationState();
|
|
386
|
+
const { dismissNotification } = useNotificationActions();
|
|
387
|
+
const isHydrated = useSyncExternalStore(
|
|
388
|
+
emptySubscribe,
|
|
389
|
+
() => true,
|
|
390
|
+
() => false
|
|
391
|
+
);
|
|
392
|
+
const activeEntry = useMemo(
|
|
393
|
+
() => getActiveNotification(notifications),
|
|
394
|
+
[notifications]
|
|
395
|
+
);
|
|
396
|
+
const theme = useTheme(notificationTheme);
|
|
397
|
+
return { dismissNotification, isHydrated, activeEntry, theme };
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// src/modules/notification/motion.ts
|
|
401
|
+
var NOTIFICATION_COMPOSITOR_STYLE = Object.freeze({
|
|
402
|
+
WebkitBackfaceVisibility: "hidden",
|
|
403
|
+
WebkitFontSmoothing: "antialiased",
|
|
404
|
+
backfaceVisibility: "hidden",
|
|
405
|
+
transform: "translateZ(0)",
|
|
406
|
+
willChange: "transform, opacity, filter"
|
|
407
|
+
});
|
|
408
|
+
function useNotificationMotion() {
|
|
409
|
+
return useModuleMotion(notificationTheme);
|
|
410
|
+
}
|
|
411
|
+
function Toast({
|
|
412
|
+
className,
|
|
413
|
+
entry,
|
|
414
|
+
messageClassName,
|
|
415
|
+
onDismiss,
|
|
416
|
+
polite,
|
|
417
|
+
style
|
|
418
|
+
}) {
|
|
419
|
+
const toastMotion = useNotificationMotion();
|
|
420
|
+
return /* @__PURE__ */ jsx(
|
|
421
|
+
motion.div,
|
|
422
|
+
{
|
|
423
|
+
role: "alert",
|
|
424
|
+
"aria-atomic": "true",
|
|
425
|
+
"aria-live": polite ? "polite" : void 0,
|
|
426
|
+
"aria-keyshortcuts": "Escape",
|
|
427
|
+
tabIndex: 0,
|
|
428
|
+
variants: toastMotion.toast,
|
|
429
|
+
initial: "hidden",
|
|
430
|
+
animate: "visible",
|
|
431
|
+
exit: "exit",
|
|
432
|
+
transition: toastMotion.transition,
|
|
433
|
+
style: { ...NOTIFICATION_COMPOSITOR_STYLE, ...style },
|
|
434
|
+
className,
|
|
435
|
+
onClick: (event) => {
|
|
436
|
+
event.stopPropagation();
|
|
437
|
+
onDismiss();
|
|
438
|
+
},
|
|
439
|
+
onKeyDown: (event) => {
|
|
440
|
+
if (event.key !== "Escape") return;
|
|
441
|
+
event.preventDefault();
|
|
442
|
+
event.stopPropagation();
|
|
443
|
+
onDismiss();
|
|
444
|
+
},
|
|
445
|
+
children: /* @__PURE__ */ jsx("div", { className: messageClassName, children: entry.message })
|
|
446
|
+
}
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
function NotificationContainer() {
|
|
450
|
+
const { dismissNotification, isHydrated, activeEntry, theme } = useNotificationContainerModel();
|
|
451
|
+
if (!isHydrated) return null;
|
|
452
|
+
const dockElement = document.getElementById(DOCK_STACK_ELEMENT_ID);
|
|
453
|
+
const toast = (className, polite) => /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: activeEntry && /* @__PURE__ */ jsx(
|
|
454
|
+
Toast,
|
|
455
|
+
{
|
|
456
|
+
className,
|
|
457
|
+
entry: activeEntry,
|
|
458
|
+
messageClassName: theme.slots.toastMessage,
|
|
459
|
+
polite,
|
|
460
|
+
style: theme.styles.toast,
|
|
461
|
+
onDismiss: () => dismissNotification(activeEntry.id)
|
|
462
|
+
},
|
|
463
|
+
activeEntry.id
|
|
464
|
+
) });
|
|
465
|
+
if (dockElement) {
|
|
466
|
+
return createPortal(
|
|
467
|
+
toast(cn(theme.slots.toast, theme.slots.toastDocked), true),
|
|
468
|
+
dockElement
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
return createPortal(
|
|
472
|
+
/* @__PURE__ */ jsx(
|
|
473
|
+
"div",
|
|
474
|
+
{
|
|
475
|
+
"aria-atomic": "true",
|
|
476
|
+
"aria-live": "polite",
|
|
477
|
+
className: theme.slots.layer,
|
|
478
|
+
style: theme.styles.layer,
|
|
479
|
+
children: toast(theme.slots.toast)
|
|
480
|
+
}
|
|
481
|
+
),
|
|
482
|
+
document.body
|
|
483
|
+
);
|
|
484
|
+
}
|
|
485
|
+
function NotificationLayer() {
|
|
486
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
487
|
+
/* @__PURE__ */ jsx(NotificationListener, {}),
|
|
488
|
+
/* @__PURE__ */ jsx(NotificationContainer, {})
|
|
489
|
+
] });
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
// src/modules/notification/module.tsx
|
|
493
|
+
function selectToastDuration(config) {
|
|
494
|
+
const notification = config.notification;
|
|
495
|
+
if (typeof notification === "number") return notification;
|
|
496
|
+
return notification?.duration ?? null;
|
|
497
|
+
}
|
|
498
|
+
function useNotificationPage(duration, page) {
|
|
499
|
+
const toast = useToast(duration);
|
|
500
|
+
return useMemo(
|
|
501
|
+
() => ({
|
|
502
|
+
set: (notification) => page.set({ notification }),
|
|
503
|
+
toast
|
|
504
|
+
}),
|
|
505
|
+
[page, toast]
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
var notificationModule = defineModule({
|
|
509
|
+
id: "notification",
|
|
510
|
+
context: NotificationContext,
|
|
511
|
+
Provider: NotificationProvider,
|
|
512
|
+
Overlay: NotificationLayer,
|
|
513
|
+
page: {
|
|
514
|
+
select: selectToastDuration,
|
|
515
|
+
use: useNotificationPage
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
export { DOCK_STACK_ELEMENT_ID, INERT_NOTIFICATION_ACTIONS, INITIAL_NOTIFICATION_STATE, NOOP_NOTIFICATION_STORE, NotificationContext, NotificationListener, NotificationProvider, SESSION_EXPIRED_MESSAGE, TOAST_DURATIONS, createNotificationEntry, createSafeAction, err, getActiveNotification, getOutcomeMessage, isErr, isNotificationDataObject, isOk, isResult, map, mapErr, match, normalizeDuration, normalizeFeedbackText, normalizeToastOptions, notificationModule, notificationTheme, ok, tryCatch, unwrap, unwrapOr, useNotification, useNotificationActions, useNotificationContainerModel, useNotificationState, useNotificationVisible, useOptionalNotificationActions, useOptionalNotificationState, useToast, withDefaultDuration };
|
|
520
|
+
//# sourceMappingURL=chunk-SYAVGTOX.js.map
|
|
521
|
+
//# sourceMappingURL=chunk-SYAVGTOX.js.map
|