@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.
Files changed (234) hide show
  1. package/dist/atoms/index.js +1 -103
  2. package/dist/atoms/index.js.map +1 -1
  3. package/dist/chunk-3BUP64Q6.js +105 -0
  4. package/dist/chunk-3BUP64Q6.js.map +1 -0
  5. package/dist/chunk-4GMQKD6F.js +353 -0
  6. package/dist/chunk-4GMQKD6F.js.map +1 -0
  7. package/dist/chunk-6SG7V77J.js +577 -0
  8. package/dist/chunk-6SG7V77J.js.map +1 -0
  9. package/dist/chunk-6ZJVLUBE.js +26 -0
  10. package/dist/chunk-6ZJVLUBE.js.map +1 -0
  11. package/dist/chunk-7HQMXTNP.js +419 -0
  12. package/dist/chunk-7HQMXTNP.js.map +1 -0
  13. package/dist/chunk-7TAVYJ3A.js +371 -0
  14. package/dist/chunk-7TAVYJ3A.js.map +1 -0
  15. package/dist/chunk-A5RE3F6O.js +9905 -0
  16. package/dist/chunk-A5RE3F6O.js.map +1 -0
  17. package/dist/chunk-AQ4BNXA2.js +349 -0
  18. package/dist/chunk-AQ4BNXA2.js.map +1 -0
  19. package/dist/chunk-CGHZSSFR.js +2166 -0
  20. package/dist/chunk-CGHZSSFR.js.map +1 -0
  21. package/dist/chunk-DGCQWQLZ.js +61 -0
  22. package/dist/chunk-DGCQWQLZ.js.map +1 -0
  23. package/dist/chunk-FIMPHODX.js +67 -0
  24. package/dist/chunk-FIMPHODX.js.map +1 -0
  25. package/dist/chunk-GF7TUX5I.js +1889 -0
  26. package/dist/chunk-GF7TUX5I.js.map +1 -0
  27. package/dist/chunk-JELG4JLT.js +454 -0
  28. package/dist/chunk-JELG4JLT.js.map +1 -0
  29. package/dist/chunk-K676GL7Z.js +51 -0
  30. package/dist/chunk-K676GL7Z.js.map +1 -0
  31. package/dist/chunk-QI3ALLIB.js +38 -0
  32. package/dist/chunk-QI3ALLIB.js.map +1 -0
  33. package/dist/chunk-QXR55VVS.js +1139 -0
  34. package/dist/chunk-QXR55VVS.js.map +1 -0
  35. package/dist/chunk-R2YGFJDJ.js +408 -0
  36. package/dist/chunk-R2YGFJDJ.js.map +1 -0
  37. package/dist/chunk-RFZQWLC5.js +27 -0
  38. package/dist/chunk-RFZQWLC5.js.map +1 -0
  39. package/dist/chunk-SKBITB5X.js +888 -0
  40. package/dist/chunk-SKBITB5X.js.map +1 -0
  41. package/dist/chunk-SYAVGTOX.js +521 -0
  42. package/dist/chunk-SYAVGTOX.js.map +1 -0
  43. package/dist/chunk-TV3WEF5G.js +784 -0
  44. package/dist/chunk-TV3WEF5G.js.map +1 -0
  45. package/dist/chunk-XASQT4CQ.js +280 -0
  46. package/dist/chunk-XASQT4CQ.js.map +1 -0
  47. package/dist/error/index.js +5 -682
  48. package/dist/error/index.js.map +1 -1
  49. package/dist/error/reporter.d.ts.map +1 -1
  50. package/dist/error/theme.d.ts +1 -1
  51. package/dist/error/theme.d.ts.map +1 -1
  52. package/dist/events.js +1 -7
  53. package/dist/events.js.map +1 -1
  54. package/dist/hooks/index.js +1 -358
  55. package/dist/hooks/index.js.map +1 -1
  56. package/dist/hooks/use-global-event.d.ts +1 -1
  57. package/dist/index.js +18 -20029
  58. package/dist/index.js.map +1 -1
  59. package/dist/kernel/index.js +2 -2035
  60. package/dist/kernel/index.js.map +1 -1
  61. package/dist/kernel/types.d.ts +1 -1
  62. package/dist/modules/ambient/analyze.d.ts +46 -0
  63. package/dist/modules/ambient/analyze.d.ts.map +1 -0
  64. package/dist/modules/ambient/constants.d.ts +1 -5
  65. package/dist/modules/ambient/constants.d.ts.map +1 -1
  66. package/dist/modules/ambient/context.d.ts.map +1 -1
  67. package/dist/modules/ambient/dom.d.ts +11 -12
  68. package/dist/modules/ambient/dom.d.ts.map +1 -1
  69. package/dist/modules/ambient/extractor.d.ts +10 -10
  70. package/dist/modules/ambient/extractor.d.ts.map +1 -1
  71. package/dist/modules/ambient/hooks.d.ts +1 -1
  72. package/dist/modules/ambient/hooks.d.ts.map +1 -1
  73. package/dist/modules/ambient/index.d.ts +6 -4
  74. package/dist/modules/ambient/index.d.ts.map +1 -1
  75. package/dist/modules/ambient/index.js +7 -762
  76. package/dist/modules/ambient/index.js.map +1 -1
  77. package/dist/modules/ambient/module.d.ts +1 -1
  78. package/dist/modules/ambient/module.d.ts.map +1 -1
  79. package/dist/modules/ambient/oklab.d.ts +36 -0
  80. package/dist/modules/ambient/oklab.d.ts.map +1 -0
  81. package/dist/modules/ambient/pipeline.d.ts +28 -0
  82. package/dist/modules/ambient/pipeline.d.ts.map +1 -0
  83. package/dist/modules/ambient/quantize.d.ts +22 -0
  84. package/dist/modules/ambient/quantize.d.ts.map +1 -0
  85. package/dist/modules/ambient/server/address.d.ts +8 -0
  86. package/dist/modules/ambient/server/address.d.ts.map +1 -0
  87. package/dist/modules/ambient/server/index.d.ts +53 -0
  88. package/dist/modules/ambient/server/index.d.ts.map +1 -0
  89. package/dist/modules/ambient/server/index.js +221 -0
  90. package/dist/modules/ambient/server/index.js.map +1 -0
  91. package/dist/modules/ambient/settings.d.ts +19 -0
  92. package/dist/modules/ambient/settings.d.ts.map +1 -0
  93. package/dist/modules/ambient/types.d.ts +105 -9
  94. package/dist/modules/ambient/types.d.ts.map +1 -1
  95. package/dist/modules/ambient/worker/index.d.ts +15 -0
  96. package/dist/modules/ambient/worker/index.d.ts.map +1 -0
  97. package/dist/modules/ambient/worker/index.js +114 -0
  98. package/dist/modules/ambient/worker/index.js.map +1 -0
  99. package/dist/modules/background/constants.d.ts +2 -2
  100. package/dist/modules/background/constants.d.ts.map +1 -1
  101. package/dist/modules/background/hooks.d.ts +1 -1
  102. package/dist/modules/background/index.js +6 -3078
  103. package/dist/modules/background/index.js.map +1 -1
  104. package/dist/modules/background/motion.d.ts +9 -7
  105. package/dist/modules/background/motion.d.ts.map +1 -1
  106. package/dist/modules/background/overlay.d.ts +3 -8
  107. package/dist/modules/background/overlay.d.ts.map +1 -1
  108. package/dist/modules/background/types.d.ts +16 -2
  109. package/dist/modules/background/types.d.ts.map +1 -1
  110. package/dist/modules/context-menu/constants.d.ts +2 -2
  111. package/dist/modules/context-menu/constants.d.ts.map +1 -1
  112. package/dist/modules/context-menu/hooks.d.ts +1 -1
  113. package/dist/modules/context-menu/index.js +10 -1896
  114. package/dist/modules/context-menu/index.js.map +1 -1
  115. package/dist/modules/context-menu/motion.d.ts +1 -8
  116. package/dist/modules/context-menu/motion.d.ts.map +1 -1
  117. package/dist/modules/context-menu/overlay.d.ts.map +1 -1
  118. package/dist/modules/context-menu/types.d.ts +16 -2
  119. package/dist/modules/context-menu/types.d.ts.map +1 -1
  120. package/dist/modules/controls/constants.d.ts +1 -1
  121. package/dist/modules/controls/constants.d.ts.map +1 -1
  122. package/dist/modules/controls/entries.d.ts +1 -1
  123. package/dist/modules/controls/hooks.d.ts +1 -1
  124. package/dist/modules/controls/index.js +4 -1110
  125. package/dist/modules/controls/index.js.map +1 -1
  126. package/dist/modules/controls/overlay.d.ts +1 -1
  127. package/dist/modules/controls/types.d.ts +2 -2
  128. package/dist/modules/dock/cards.d.ts +711 -24
  129. package/dist/modules/dock/cards.d.ts.map +1 -1
  130. package/dist/modules/dock/constants.d.ts +2 -2
  131. package/dist/modules/dock/constants.d.ts.map +1 -1
  132. package/dist/modules/dock/helpers.d.ts +2 -2
  133. package/dist/modules/dock/hooks.d.ts +2 -2
  134. package/dist/modules/dock/index.d.ts +1 -1
  135. package/dist/modules/dock/index.d.ts.map +1 -1
  136. package/dist/modules/dock/index.js +9 -12132
  137. package/dist/modules/dock/index.js.map +1 -1
  138. package/dist/modules/dock/layout.d.ts.map +1 -1
  139. package/dist/modules/dock/module.d.ts +1 -1
  140. package/dist/modules/dock/motion.d.ts +44 -912
  141. package/dist/modules/dock/motion.d.ts.map +1 -1
  142. package/dist/modules/dock/overlay.d.ts +1 -1
  143. package/dist/modules/dock/overlay.d.ts.map +1 -1
  144. package/dist/modules/dock/runtime/dock.d.ts +1 -23
  145. package/dist/modules/dock/runtime/dock.d.ts.map +1 -1
  146. package/dist/modules/dock/styles.d.ts +4 -4
  147. package/dist/modules/dock/surface/hooks.d.ts +5 -20
  148. package/dist/modules/dock/surface/hooks.d.ts.map +1 -1
  149. package/dist/modules/dock/surface/machine.d.ts +4 -3
  150. package/dist/modules/dock/surface/machine.d.ts.map +1 -1
  151. package/dist/modules/dock/surface/stack.d.ts.map +1 -1
  152. package/dist/modules/dock/surface/view-model.d.ts.map +1 -1
  153. package/dist/modules/dock/types.d.ts +162 -3
  154. package/dist/modules/dock/types.d.ts.map +1 -1
  155. package/dist/modules/index.js +16 -17883
  156. package/dist/modules/index.js.map +1 -1
  157. package/dist/modules/loading/constants.d.ts +1 -1
  158. package/dist/modules/loading/constants.d.ts.map +1 -1
  159. package/dist/modules/loading/context.d.ts +1 -1
  160. package/dist/modules/loading/hooks.d.ts +1 -1
  161. package/dist/modules/loading/index.js +5 -1153
  162. package/dist/modules/loading/index.js.map +1 -1
  163. package/dist/modules/loading/types.d.ts +2 -2
  164. package/dist/modules/media/context.d.ts +1 -1
  165. package/dist/modules/media/index.js +3 -570
  166. package/dist/modules/media/index.js.map +1 -1
  167. package/dist/modules/media/types.d.ts +2 -2
  168. package/dist/modules/modal/constants.d.ts +2 -2
  169. package/dist/modules/modal/constants.d.ts.map +1 -1
  170. package/dist/modules/modal/context.d.ts +1 -1
  171. package/dist/modules/modal/hooks.d.ts +3 -3
  172. package/dist/modules/modal/index.js +8 -2355
  173. package/dist/modules/modal/index.js.map +1 -1
  174. package/dist/modules/modal/motion.d.ts +3 -8
  175. package/dist/modules/modal/motion.d.ts.map +1 -1
  176. package/dist/modules/modal/overlay.d.ts.map +1 -1
  177. package/dist/modules/modal/types.d.ts +21 -0
  178. package/dist/modules/modal/types.d.ts.map +1 -1
  179. package/dist/modules/notification/constants.d.ts +2 -2
  180. package/dist/modules/notification/constants.d.ts.map +1 -1
  181. package/dist/modules/notification/context.d.ts +1 -1
  182. package/dist/modules/notification/hooks.d.ts +1 -1
  183. package/dist/modules/notification/index.js +4 -828
  184. package/dist/modules/notification/index.js.map +1 -1
  185. package/dist/modules/notification/motion.d.ts +1 -7
  186. package/dist/modules/notification/motion.d.ts.map +1 -1
  187. package/dist/modules/notification/overlay.d.ts.map +1 -1
  188. package/dist/modules/notification/types.d.ts +9 -1
  189. package/dist/modules/notification/types.d.ts.map +1 -1
  190. package/dist/overlay-TZ6L52A5.js +9 -0
  191. package/dist/overlay-TZ6L52A5.js.map +1 -0
  192. package/dist/provider.d.ts +1 -1
  193. package/dist/provider.d.ts.map +1 -1
  194. package/dist/provider.js +6 -1968
  195. package/dist/provider.js.map +1 -1
  196. package/dist/result.js +2 -63
  197. package/dist/result.js.map +1 -1
  198. package/dist/theme.d.ts +45 -8
  199. package/dist/theme.d.ts.map +1 -1
  200. package/dist/theme.js +3 -41
  201. package/dist/theme.js.map +1 -1
  202. package/dist/tokens/index.d.ts +1 -0
  203. package/dist/tokens/index.d.ts.map +1 -1
  204. package/dist/tokens/index.js +126 -155
  205. package/dist/tokens/index.js.map +1 -1
  206. package/dist/tokens/motion-config.d.ts +44 -0
  207. package/dist/tokens/motion-config.d.ts.map +1 -0
  208. package/dist/tokens/motion.d.ts +23 -174
  209. package/dist/tokens/motion.d.ts.map +1 -1
  210. package/dist/utils/index.js +4 -82
  211. package/dist/utils/index.js.map +1 -1
  212. package/dist/utils/report.d.ts.map +1 -1
  213. package/docs/README.md +1 -0
  214. package/docs/architecture-and-rules.md +4 -3
  215. package/docs/core-engine.md +7 -10
  216. package/docs/getting-started.md +4 -2
  217. package/docs/modules/ambient.md +194 -80
  218. package/docs/modules/background.md +3 -3
  219. package/docs/modules/context-menu.md +2 -2
  220. package/docs/modules/dock.md +9 -6
  221. package/docs/modules/modal.md +2 -2
  222. package/docs/modules/notification.md +2 -2
  223. package/docs/theming.md +81 -9
  224. package/package.json +22 -5
  225. package/templates/AGENTS.md +1 -1
  226. package/templates/motion/background.ts +17 -0
  227. package/templates/motion/context-menu.ts +63 -0
  228. package/templates/motion/dock.ts +327 -0
  229. package/templates/motion/modal.ts +79 -0
  230. package/templates/motion/notification.ts +27 -0
  231. package/templates/motion/tokens.ts +47 -0
  232. package/templates/tsconfig.json +7 -0
  233. package/dist/modules/ambient/color.d.ts +0 -21
  234. 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