@omerdlw/base-framework 1.0.2 → 1.0.4
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/index.js +5240 -5165
- package/dist/index.js.map +1 -1
- package/dist/kernel/compose.d.ts.map +1 -1
- package/dist/kernel/handlers.d.ts.map +1 -1
- package/dist/kernel/hooks.d.ts.map +1 -1
- package/dist/kernel/index.js.map +1 -1
- package/dist/kernel/operations.d.ts.map +1 -1
- package/dist/kernel/schema.d.ts +0 -2
- package/dist/kernel/schema.d.ts.map +1 -1
- package/dist/kernel/store.d.ts.map +1 -1
- package/dist/kernel/types.d.ts.map +1 -1
- package/dist/kernel/utils.d.ts +0 -2
- package/dist/kernel/utils.d.ts.map +1 -1
- package/dist/modules/ambient/color.d.ts +16 -0
- package/dist/modules/ambient/color.d.ts.map +1 -0
- package/dist/modules/ambient/constants.d.ts +0 -17
- package/dist/modules/ambient/constants.d.ts.map +1 -1
- package/dist/modules/ambient/context.d.ts +1 -7
- package/dist/modules/ambient/context.d.ts.map +1 -1
- package/dist/modules/ambient/dom.d.ts +19 -0
- package/dist/modules/ambient/dom.d.ts.map +1 -0
- package/dist/modules/ambient/extractor.d.ts +5 -0
- package/dist/modules/ambient/extractor.d.ts.map +1 -0
- package/dist/modules/ambient/hooks.d.ts +9 -0
- package/dist/modules/ambient/hooks.d.ts.map +1 -0
- package/dist/modules/ambient/index.d.ts +7 -4
- package/dist/modules/ambient/index.d.ts.map +1 -1
- package/dist/modules/ambient/index.js +66 -60
- package/dist/modules/ambient/index.js.map +1 -1
- package/dist/modules/ambient/module.d.ts +5 -1
- package/dist/modules/ambient/module.d.ts.map +1 -1
- package/dist/modules/background/constants.d.ts +1 -10
- package/dist/modules/background/constants.d.ts.map +1 -1
- package/dist/modules/background/context.d.ts +1 -13
- package/dist/modules/background/context.d.ts.map +1 -1
- package/dist/modules/background/hooks.d.ts +13 -118
- package/dist/modules/background/hooks.d.ts.map +1 -1
- package/dist/modules/background/index.d.ts +8 -3
- package/dist/modules/background/index.d.ts.map +1 -1
- package/dist/modules/background/index.js +975 -991
- package/dist/modules/background/index.js.map +1 -1
- package/dist/modules/background/module.d.ts +1 -0
- package/dist/modules/background/module.d.ts.map +1 -1
- package/dist/modules/background/overlay.d.ts +93 -2
- package/dist/modules/background/overlay.d.ts.map +1 -1
- package/dist/modules/background/playback.d.ts +10 -0
- package/dist/modules/background/playback.d.ts.map +1 -0
- package/dist/modules/background/state.d.ts +9 -0
- package/dist/modules/background/state.d.ts.map +1 -0
- package/dist/modules/background/{utils.d.ts → visual.d.ts} +6 -14
- package/dist/modules/background/visual.d.ts.map +1 -0
- package/dist/modules/background/youtube/player.d.ts +28 -0
- package/dist/modules/background/youtube/player.d.ts.map +1 -0
- package/dist/modules/context-menu/context.d.ts +1 -10
- package/dist/modules/context-menu/context.d.ts.map +1 -1
- package/dist/modules/context-menu/dom.d.ts +8 -0
- package/dist/modules/context-menu/dom.d.ts.map +1 -0
- package/dist/modules/context-menu/hooks.d.ts +11 -11
- package/dist/modules/context-menu/hooks.d.ts.map +1 -1
- package/dist/modules/context-menu/index.d.ts +8 -3
- package/dist/modules/context-menu/index.d.ts.map +1 -1
- package/dist/modules/context-menu/index.js +97 -101
- package/dist/modules/context-menu/index.js.map +1 -1
- package/dist/modules/context-menu/{utils.d.ts → items.d.ts} +2 -9
- package/dist/modules/context-menu/items.d.ts.map +1 -0
- package/dist/modules/context-menu/module.d.ts.map +1 -1
- package/dist/modules/context-menu/overlay.d.ts +13 -1
- package/dist/modules/context-menu/overlay.d.ts.map +1 -1
- package/dist/modules/context-menu/state.d.ts +1 -0
- package/dist/modules/context-menu/state.d.ts.map +1 -1
- package/dist/modules/controls/{utils.d.ts → entries.d.ts} +6 -5
- package/dist/modules/controls/entries.d.ts.map +1 -0
- package/dist/modules/controls/hooks.d.ts +0 -7
- package/dist/modules/controls/hooks.d.ts.map +1 -1
- package/dist/modules/controls/index.d.ts +5 -3
- package/dist/modules/controls/index.d.ts.map +1 -1
- package/dist/modules/controls/index.js +66 -61
- package/dist/modules/controls/index.js.map +1 -1
- package/dist/modules/controls/layout.d.ts +7 -0
- package/dist/modules/controls/layout.d.ts.map +1 -0
- package/dist/modules/controls/overlay.d.ts +9 -0
- package/dist/modules/controls/overlay.d.ts.map +1 -1
- package/dist/modules/dock/cards.d.ts.map +1 -1
- package/dist/modules/dock/dom.d.ts +24 -0
- package/dist/modules/dock/dom.d.ts.map +1 -0
- package/dist/modules/dock/helpers.d.ts +25 -0
- package/dist/modules/dock/helpers.d.ts.map +1 -0
- package/dist/modules/dock/hooks.d.ts +3 -918
- package/dist/modules/dock/hooks.d.ts.map +1 -1
- package/dist/modules/dock/index.d.ts +3 -2
- package/dist/modules/dock/index.d.ts.map +1 -1
- package/dist/modules/dock/index.js +3091 -3079
- package/dist/modules/dock/index.js.map +1 -1
- package/dist/modules/dock/layout.d.ts +26 -0
- package/dist/modules/dock/layout.d.ts.map +1 -0
- package/dist/modules/dock/module.d.ts.map +1 -1
- package/dist/modules/dock/overlay.d.ts.map +1 -1
- package/dist/modules/dock/paths.d.ts +10 -0
- package/dist/modules/dock/paths.d.ts.map +1 -0
- package/dist/modules/dock/provider.d.ts.map +1 -1
- package/dist/modules/dock/runtime/display.d.ts.map +1 -1
- package/dist/modules/dock/runtime/dock.d.ts.map +1 -1
- package/dist/modules/dock/runtime/pipeline.d.ts +32 -0
- package/dist/modules/dock/runtime/pipeline.d.ts.map +1 -0
- package/dist/modules/dock/status/events.d.ts.map +1 -1
- package/dist/modules/dock/styles.d.ts +900 -0
- package/dist/modules/dock/styles.d.ts.map +1 -0
- package/dist/modules/dock/surface/context.d.ts +1 -2
- package/dist/modules/dock/surface/context.d.ts.map +1 -1
- package/dist/modules/dock/surface/definition.d.ts.map +1 -1
- package/dist/modules/dock/surface/helpers.d.ts +7 -0
- package/dist/modules/dock/surface/helpers.d.ts.map +1 -0
- package/dist/modules/dock/surface/hooks.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/modules/index.js +4861 -4788
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/loading/context.d.ts +2 -13
- package/dist/modules/loading/context.d.ts.map +1 -1
- package/dist/modules/loading/hooks.d.ts +15 -2
- package/dist/modules/loading/hooks.d.ts.map +1 -1
- package/dist/modules/loading/index.d.ts +3 -2
- package/dist/modules/loading/index.d.ts.map +1 -1
- package/dist/modules/loading/index.js +38 -34
- package/dist/modules/loading/index.js.map +1 -1
- package/dist/modules/loading/module.d.ts.map +1 -1
- package/dist/modules/loading/state.d.ts +6 -0
- package/dist/modules/loading/state.d.ts.map +1 -0
- package/dist/modules/media/constants.d.ts +0 -1
- package/dist/modules/media/constants.d.ts.map +1 -1
- package/dist/modules/media/context.d.ts +2 -6
- package/dist/modules/media/context.d.ts.map +1 -1
- package/dist/modules/media/hooks.d.ts +6 -1
- package/dist/modules/media/hooks.d.ts.map +1 -1
- package/dist/modules/media/index.d.ts +4 -3
- package/dist/modules/media/index.d.ts.map +1 -1
- package/dist/modules/media/index.js +100 -98
- package/dist/modules/media/index.js.map +1 -1
- package/dist/modules/media/module.d.ts.map +1 -1
- package/dist/modules/media/overlay.d.ts +0 -5
- package/dist/modules/media/overlay.d.ts.map +1 -1
- package/dist/modules/media/playback.d.ts +5 -0
- package/dist/modules/media/playback.d.ts.map +1 -0
- package/dist/modules/media/session.d.ts +8 -0
- package/dist/modules/media/session.d.ts.map +1 -0
- package/dist/modules/media/types.d.ts +0 -1
- package/dist/modules/media/types.d.ts.map +1 -1
- package/dist/modules/modal/context.d.ts +1 -12
- package/dist/modules/modal/context.d.ts.map +1 -1
- package/dist/modules/modal/dom.d.ts +4 -0
- package/dist/modules/modal/dom.d.ts.map +1 -0
- package/dist/modules/modal/header.d.ts +7 -0
- package/dist/modules/modal/header.d.ts.map +1 -0
- package/dist/modules/modal/hooks.d.ts +12 -1
- package/dist/modules/modal/hooks.d.ts.map +1 -1
- package/dist/modules/modal/identity.d.ts +7 -0
- package/dist/modules/modal/identity.d.ts.map +1 -0
- package/dist/modules/modal/index.d.ts +9 -4
- package/dist/modules/modal/index.d.ts.map +1 -1
- package/dist/modules/modal/index.js +118 -86
- package/dist/modules/modal/index.js.map +1 -1
- package/dist/modules/modal/layout.d.ts +13 -0
- package/dist/modules/modal/layout.d.ts.map +1 -0
- package/dist/modules/modal/module.d.ts.map +1 -1
- package/dist/modules/modal/overlay.d.ts.map +1 -1
- package/dist/modules/modal/types.d.ts.map +1 -1
- package/dist/modules/notification/context.d.ts +2 -8
- package/dist/modules/notification/context.d.ts.map +1 -1
- package/dist/modules/notification/hooks.d.ts +8 -1
- package/dist/modules/notification/hooks.d.ts.map +1 -1
- package/dist/modules/notification/index.d.ts +4 -3
- package/dist/modules/notification/index.d.ts.map +1 -1
- package/dist/modules/notification/index.js +56 -46
- package/dist/modules/notification/index.js.map +1 -1
- package/dist/modules/notification/state.d.ts +17 -0
- package/dist/modules/notification/state.d.ts.map +1 -0
- package/dist/provider.js.map +1 -1
- package/docs/modules/ambient.md +12 -8
- package/docs/modules/background.md +15 -13
- package/docs/modules/context-menu.md +13 -13
- package/docs/modules/controls.md +4 -3
- package/docs/modules/dock.md +8 -2
- package/docs/modules/loading.md +11 -11
- package/docs/modules/media.md +8 -7
- package/docs/modules/modal.md +4 -1
- package/docs/modules/notification.md +4 -4
- package/package.json +1 -1
- package/dist/modules/ambient/utils.d.ts +0 -18
- package/dist/modules/ambient/utils.d.ts.map +0 -1
- package/dist/modules/background/utils.d.ts.map +0 -1
- package/dist/modules/context-menu/utils.d.ts.map +0 -1
- package/dist/modules/controls/utils.d.ts.map +0 -1
- package/dist/modules/dock/utils.d.ts +0 -93
- package/dist/modules/dock/utils.d.ts.map +0 -1
- package/dist/modules/loading/utils.d.ts +0 -4
- package/dist/modules/loading/utils.d.ts.map +0 -1
- package/dist/modules/media/utils.d.ts +0 -17
- package/dist/modules/media/utils.d.ts.map +0 -1
- package/dist/modules/modal/utils.d.ts +0 -31
- package/dist/modules/modal/utils.d.ts.map +0 -1
- package/dist/modules/notification/utils.d.ts +0 -9
- package/dist/modules/notification/utils.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/kernel/constants.ts","../../../src/kernel/context-registry.ts","../../../src/utils/string.ts","../../../src/utils/dom.ts","../../../src/utils/number.ts","../../../src/utils/object.ts","../../../src/utils/report.ts","../../../src/utils/store.ts","../../../src/kernel/utils.ts","../../../src/kernel/schema.ts","../../../src/hooks/use-required-context.ts","../../../src/hooks/use-isomorphic-layout-effect.ts","../../../src/kernel/provider.tsx","../../../src/kernel/installed.ts","../../../src/kernel/handlers.ts","../../../src/kernel/hooks.ts","../../../src/kernel/module.tsx","../../../src/kernel/adapters.ts","../../../src/theme.tsx","../../../src/modules/controls/constants.ts","../../../src/modules/controls/utils.ts","../../../src/modules/controls/hooks.ts","../../../src/modules/controls/overlay.tsx","../../../src/modules/controls/module.tsx"],"names":["use","hasChanged","stabilizedValue","useState","useMemo","isValidElement","useEffect","createElement","usePathname","useSyncExternalStore","jsx","Fragment","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n RegistryLifecycle,\n RegistryScopeKind,\n RegistrySource,\n RegistryValidationMode,\n} from \"./types\";\n\nexport const DEFAULT_SOURCE: RegistrySource = \"dynamic\";\n\nexport const REGISTRY_SOURCES: Readonly<Record<string, RegistrySource>> =\n Object.freeze({\n STATIC: \"static\",\n DYNAMIC: \"dynamic\",\n USER: \"user\",\n });\n\nexport const REGISTRY_LIFECYCLES: Readonly<Record<string, RegistryLifecycle>> =\n Object.freeze({\n IMMEDIATE: \"immediate\",\n GRACEFUL: \"graceful\",\n PERSISTENT: \"persistent\",\n ROUTE: \"route\",\n });\n\nexport const REGISTRY_VALIDATION_MODES: Readonly<\n Record<string, RegistryValidationMode>\n> = Object.freeze({\n WARN: \"warn\",\n STRICT: \"strict\",\n});\n\nexport const REGISTRY_METADATA_KEYS: readonly string[] = Object.freeze([\n \"cleanup\",\n \"cleanupDelayMs\",\n \"instanceId\",\n \"lifecycle\",\n \"priority\",\n \"source\",\n \"scope\",\n \"validation\",\n]);\n\nexport const REGISTRY_SOURCE_PRIORITY: Readonly<Record<string, number>> =\n Object.freeze({\n [REGISTRY_SOURCES.STATIC]: 100,\n [REGISTRY_SOURCES.DYNAMIC]: 200,\n [REGISTRY_SOURCES.USER]: 300,\n });\n\nexport const REGISTRY_SOURCE_RANK: Readonly<Record<string, number>> =\n Object.freeze({\n [REGISTRY_SOURCES.STATIC]: 10,\n [REGISTRY_SOURCES.DYNAMIC]: 20,\n [REGISTRY_SOURCES.USER]: 30,\n });\n\nexport const REGISTRY_LIFECYCLE_VALUES: ReadonlySet<string> = new Set(\n Object.values(REGISTRY_LIFECYCLES),\n);\n\nexport const REGISTRY_METADATA_KEY_SET: ReadonlySet<string> = new Set(\n REGISTRY_METADATA_KEYS,\n);\n\nconst REGISTRY_SCOPE_KINDS: Readonly<Record<string, RegistryScopeKind>> =\n Object.freeze({\n APP: \"app\",\n SESSION: \"session\",\n ROUTE: \"route\",\n INSTANCE: \"instance\",\n WORKSPACE: \"workspace\",\n });\n\nexport const DEFAULT_REGISTRY_SCOPE: RegistryScopeKind =\n REGISTRY_SCOPE_KINDS.APP;\n","import { createContext, type Context } from \"react\";\n\nexport function getOrCreateGlobalContext<T>(\n name: string,\n defaultValue: T,\n): Context<T> {\n const sym = Symbol.for(`@omerdlw/base-framework/context/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T>>;\n if (!store[sym]) {\n store[sym] = createContext<T>(defaultValue);\n }\n return store[sym];\n}\n","export function trimToNull(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n const trimmed = String(value).trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nexport function stripTrailingSlash(url: unknown): string {\n if (typeof url !== \"string\") return \"\";\n return url.replace(/\\/+$/, \"\");\n}\n\nexport function normalizePath(path: unknown): string {\n const trimmed = trimToNull(path);\n if (!trimmed) return \"\";\n if (trimmed === \"/\") return \"/\";\n return stripTrailingSlash(trimmed);\n}\n\nexport function isImageIconSource(icon: unknown): boolean {\n return (\n typeof icon === \"string\" &&\n (icon.startsWith(\"http://\") ||\n icon.startsWith(\"https://\") ||\n icon.startsWith(\"/\") ||\n icon.startsWith(\"data:image/\"))\n );\n}\n","import { stripTrailingSlash } from \"./string\";\n\nexport const isBrowser: boolean = typeof window !== \"undefined\";\n\nlet globalScrollLockCount = 0;\n\nlet globalScrollLockStyles: {\n bodyOverflow: string;\n bodyOverscrollBehavior: string;\n htmlOverflow: string;\n htmlOverscrollBehavior: string;\n} | null = null;\n\nexport function acquireGlobalScrollLock(): () => void {\n if (typeof document === \"undefined\") return () => {};\n\n if (globalScrollLockCount === 0) {\n globalScrollLockStyles = {\n bodyOverflow: document.body.style.overflow,\n bodyOverscrollBehavior: document.body.style.overscrollBehavior,\n htmlOverflow: document.documentElement.style.overflow,\n htmlOverscrollBehavior: document.documentElement.style.overscrollBehavior,\n };\n }\n\n globalScrollLockCount += 1;\n document.body.style.overflow = \"hidden\";\n document.body.style.overscrollBehavior = \"none\";\n document.documentElement.style.overflow = \"hidden\";\n document.documentElement.style.overscrollBehavior = \"none\";\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n globalScrollLockCount = Math.max(0, globalScrollLockCount - 1);\n if (globalScrollLockCount > 0 || !globalScrollLockStyles) return;\n\n document.body.style.overflow = globalScrollLockStyles.bodyOverflow;\n document.body.style.overscrollBehavior =\n globalScrollLockStyles.bodyOverscrollBehavior;\n document.documentElement.style.overflow =\n globalScrollLockStyles.htmlOverflow;\n document.documentElement.style.overscrollBehavior =\n globalScrollLockStyles.htmlOverscrollBehavior;\n globalScrollLockStyles = null;\n };\n}\n\nexport function getSiteUrl(): string {\n return stripTrailingSlash(\n process.env.NEXT_PUBLIC_SITE_URL || \"http://localhost:3000\",\n );\n}\n\nexport function getCurrentPath(): string {\n if (!isBrowser) return \"/\";\n return `${window.location.pathname}${window.location.search}`;\n}\n\n","export function clamp(value: unknown, min: number, max: number): number {\n const num = Number(value);\n const finite = Number.isFinite(num) ? num : min;\n return Math.min(Math.max(finite, min), max);\n}\n\nexport function toFiniteNumber(value: unknown, fallback: number = 0): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isPlainObject(\n value: unknown,\n): value is Record<string, unknown> {\n if (!isObject(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nexport function shallowEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (\n typeof a !== \"object\" ||\n a === null ||\n typeof b !== \"object\" ||\n b === null\n ) {\n return false;\n }\n\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (\n !Object.prototype.hasOwnProperty.call(b, key) ||\n !Object.is(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n )\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function toArray<T>(value: T | T[] | null | undefined): T[] {\n if (value === null || value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n}\n","export type ReportLevel = \"error\" | \"warn\";\n\nexport type ReportSink = (\n scope: string,\n error: unknown,\n level: ReportLevel,\n) => void;\n\nlet sink: ReportSink | null = null;\n\nexport function report(\n scope: string,\n error: unknown,\n level: ReportLevel = \"error\",\n): void {\n if (sink) {\n try {\n sink(scope, error, level);\n return;\n } catch {}\n }\n\n if (process.env.NODE_ENV === \"production\" && typeof window !== \"undefined\") {\n return;\n }\n console[level](`[${scope}]`, error);\n}\n\nexport function setReportSink(next: ReportSink): () => void {\n sink = next;\n return () => {\n if (sink === next) sink = null;\n };\n}\n","import { report } from \"./report\";\nexport interface ExternalStore<TState = unknown> {\n readonly getSnapshot: () => TState;\n readonly publish: (\n nextState: TState | ((currentState: TState) => TState),\n ) => boolean;\n readonly setState: (\n updater: Partial<TState> | ((currentState: TState) => TState),\n ) => boolean;\n readonly subscribe: (listener: () => void) => () => void;\n}\n\nfunction freezeStoreSnapshot<TState>(state: TState): TState {\n if (\n process.env.NODE_ENV === \"production\" ||\n !state ||\n typeof state !== \"object\"\n ) {\n return state;\n }\n\n const seen = new WeakSet<object>();\n const freeze = (value: object): void => {\n if (seen.has(value) || Object.isFrozen(value)) return;\n seen.add(value);\n\n const prototype = Object.getPrototypeOf(value);\n if (\n Array.isArray(value) ||\n prototype === Object.prototype ||\n prototype === null\n ) {\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor && \"value\" in descriptor && descriptor.value !== null) {\n if (typeof descriptor.value === \"object\") freeze(descriptor.value);\n }\n }\n }\n\n Object.freeze(value);\n };\n\n freeze(state);\n return state;\n}\n\nexport interface CreateStoreOptions {\n freezeSnapshots?: boolean;\n}\n\nexport function createStore<TState = Record<string, unknown>>(\n initialState: TState,\n { freezeSnapshots = true }: CreateStoreOptions = {},\n): ExternalStore<TState> {\n const listeners = new Set<() => void>();\n const prepare = freezeSnapshots\n ? freezeStoreSnapshot\n : <T>(state: T): T => state;\n let snapshot = prepare(initialState);\n\n const publish = (\n nextStateOrUpdater: TState | ((currentState: TState) => TState),\n ): boolean => {\n const nextState =\n typeof nextStateOrUpdater === \"function\"\n ? (nextStateOrUpdater as (currentState: TState) => TState)(snapshot)\n : nextStateOrUpdater;\n if (Object.is(snapshot, nextState)) return false;\n snapshot = prepare(nextState);\n\n for (const listener of listeners) {\n try {\n listener();\n } catch (error) {\n report(\"CoreStore subscriber\", error, \"warn\");\n }\n }\n return true;\n };\n\n const setState = (\n updater: Partial<TState> | ((currentState: TState) => TState),\n ): boolean => {\n if (typeof updater === \"function\") {\n return publish(updater as (currentState: TState) => TState);\n }\n if (\n snapshot &&\n typeof snapshot === \"object\" &&\n updater &&\n typeof updater === \"object\"\n ) {\n return publish({ ...snapshot, ...updater });\n }\n return publish(updater as TState);\n };\n\n return Object.freeze({\n getSnapshot() {\n return snapshot;\n },\n publish,\n setState,\n subscribe(listener: () => void) {\n if (typeof listener !== \"function\") return () => {};\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n });\n}\n","import {\n DEFAULT_REGISTRY_SCOPE,\n DEFAULT_SOURCE,\n REGISTRY_SOURCE_RANK,\n} from \"./constants\";\nimport type { RegistryMetadata } from \"./types\";\nimport {\n isObject,\n isPlainObject,\n shallowEqual,\n trimToNull,\n} from \"@/utils\";\n\nexport { isObject, isPlainObject, shallowEqual };\n\nexport function hasOwnProperty(target: object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(target, key);\n}\n\nexport function parseFiniteNumber(value: unknown): number | null {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nexport function getValidString(\n value: unknown,\n fallback: string | null = null,\n): string | null {\n return trimToNull(value) ?? fallback;\n}\n\nexport function resolveInstanceId(value: unknown): string | null {\n return isObject(value) && typeof value.instanceId === \"string\"\n ? value.instanceId\n : null;\n}\n\nexport function getSourceRank(source: string): number {\n return REGISTRY_SOURCE_RANK[source] ?? 0;\n}\n\nexport function resolveRegisterInput(\n sourceOrOptions: unknown,\n optionsArg?: unknown,\n): { source: string; options: RegistryMetadata } {\n if (typeof sourceOrOptions === \"string\") {\n return {\n source: sourceOrOptions,\n options: isObject(optionsArg) ? optionsArg : {},\n };\n }\n if (isObject(sourceOrOptions)) {\n return {\n source:\n typeof sourceOrOptions.source === \"string\"\n ? sourceOrOptions.source\n : DEFAULT_SOURCE,\n options: sourceOrOptions,\n };\n }\n return {\n source: DEFAULT_SOURCE,\n options: isObject(optionsArg) ? optionsArg : {},\n };\n}\n\nexport function resolveScope(\n options: RegistryMetadata | null | undefined,\n): string {\n return typeof options?.scope === \"string\" && options.scope.trim()\n ? options.scope.trim()\n : DEFAULT_REGISTRY_SCOPE;\n}\n\nexport function resolveUnregisterInput(sourceOrOptions: unknown): {\n instanceId: string | null;\n scope: string | null;\n source: string;\n} {\n if (typeof sourceOrOptions === \"string\") {\n return { instanceId: null, scope: null, source: sourceOrOptions };\n }\n if (isObject(sourceOrOptions)) {\n return {\n instanceId: resolveInstanceId(sourceOrOptions),\n scope:\n typeof sourceOrOptions.scope === \"string\" &&\n sourceOrOptions.scope.trim()\n ? sourceOrOptions.scope.trim()\n : null,\n source:\n typeof sourceOrOptions.source === \"string\"\n ? sourceOrOptions.source\n : DEFAULT_SOURCE,\n };\n }\n return { instanceId: null, scope: null, source: DEFAULT_SOURCE };\n}\n\nexport function mergeModuleConfigs<T extends object>(\n base: T,\n patch: Partial<T>,\n): T {\n const source = base as Record<string, unknown>;\n const changes = patch as Record<string, unknown>;\n const result: Record<string, unknown> = { ...source };\n Object.keys(changes).forEach((key) => {\n const baseVal = source[key];\n const patchVal = changes[key];\n if (\n baseVal &&\n typeof baseVal === \"object\" &&\n !Array.isArray(baseVal) &&\n patchVal &&\n typeof patchVal === \"object\" &&\n !Array.isArray(patchVal)\n ) {\n result[key] = { ...baseVal, ...patchVal };\n } else {\n result[key] = patchVal;\n }\n });\n return result as T;\n}\n","import {\n DEFAULT_SOURCE,\n REGISTRY_LIFECYCLE_VALUES,\n REGISTRY_LIFECYCLES,\n REGISTRY_METADATA_KEY_SET,\n REGISTRY_METADATA_KEYS,\n REGISTRY_SOURCES,\n REGISTRY_VALIDATION_MODES,\n} from \"./constants\";\nimport {\n getValidString,\n isObject,\n isPlainObject,\n parseFiniteNumber,\n} from \"./utils\";\nimport type {\n NormalizedRegistryMetadata,\n RegistryDefinitions,\n RegistryLifecycle,\n RegistryMetadata,\n RegistryValidationMode,\n ValidationResult,\n} from \"./types\";\n\nexport {\n DEFAULT_SOURCE,\n REGISTRY_LIFECYCLES,\n REGISTRY_SOURCES,\n REGISTRY_VALIDATION_MODES,\n};\n\nfunction resolveLifecycle(\n metadata: RegistryMetadata | null | undefined,\n fallback: RegistryLifecycle | null,\n): RegistryLifecycle | null {\n const lifecycle = metadata?.lifecycle ?? metadata?.cleanup;\n return lifecycle && REGISTRY_LIFECYCLE_VALUES.has(lifecycle)\n ? lifecycle\n : fallback;\n}\n\nexport function validateRegistryMetadata(metadata: unknown): ValidationResult {\n if (metadata === undefined || metadata === null)\n return { issues: [], valid: true };\n if (!isObject(metadata))\n return { issues: [\"registry metadata must be an object\"], valid: false };\n\n const issues: string[] = [];\n\n Object.keys(metadata).forEach((key) => {\n if (!REGISTRY_METADATA_KEY_SET.has(key))\n issues.push(`unknown registry metadata field: ${key}`);\n });\n\n if (metadata.source !== undefined && !getValidString(metadata.source))\n issues.push(\"source must be a non-empty string\");\n if (metadata.instanceId !== undefined && !getValidString(metadata.instanceId))\n issues.push(\"instanceId must be a non-empty string\");\n if (metadata.scope !== undefined && !getValidString(metadata.scope))\n issues.push(\"scope must be a non-empty string\");\n if (\n metadata.priority !== undefined &&\n parseFiniteNumber(metadata.priority) === null\n )\n issues.push(\"priority must be a finite number\");\n\n if (metadata.cleanupDelayMs !== undefined) {\n const delay = parseFiniteNumber(metadata.cleanupDelayMs);\n if (delay === null || delay < 0)\n issues.push(\"cleanupDelayMs must be a non-negative finite number\");\n }\n\n const lifecycle = metadata.lifecycle ?? metadata.cleanup;\n if (\n lifecycle !== undefined &&\n !REGISTRY_LIFECYCLE_VALUES.has(String(lifecycle))\n ) {\n issues.push(\n `lifecycle must be one of: ${[...REGISTRY_LIFECYCLE_VALUES].join(\", \")}`,\n );\n }\n\n if (\n metadata.validation !== undefined &&\n !Object.values<unknown>(REGISTRY_VALIDATION_MODES).includes(\n metadata.validation,\n )\n ) {\n issues.push(\n `validation must be one of: ${Object.values(REGISTRY_VALIDATION_MODES).join(\", \")}`,\n );\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function validateRegistryKey(\n type: string,\n key: unknown,\n definitions: RegistryDefinitions,\n): ValidationResult {\n const definition = definitions.get(type);\n const issues: string[] = [];\n\n if (!definition) issues.push(`unknown registry type: ${String(type)}`);\n if (!getValidString(key))\n return {\n issues: [...issues, \"key must be a non-empty string\"],\n valid: false,\n };\n\n const normalizedKey = String(key).trim();\n\n if (definition?.keyPolicy === \"singleton\") {\n const expectedKey = definition.singletonKey;\n if (expectedKey && normalizedKey !== expectedKey)\n issues.push(`${type} key must be ${expectedKey}`);\n } else if (definition?.keyPolicy === \"path\") {\n if (!normalizedKey.startsWith(\"/\"))\n issues.push(`${type} key must be an absolute path`);\n } else if (definition?.keyPolicy === \"route\") {\n if (\n !normalizedKey.startsWith(\"/\") &&\n !definition.reservedKeys?.includes(normalizedKey)\n ) {\n issues.push(`${type} key must be a route path or a reserved route key`);\n }\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function validateRegistryValue(\n type: string,\n key: unknown,\n value: unknown,\n definitions: RegistryDefinitions,\n): ValidationResult {\n const definition = definitions.get(type);\n const issues = [...validateRegistryKey(type, key, definitions).issues];\n const valueKind = definition?.valueKind ?? \"object\";\n\n if (definition && valueKind === \"object\" && !isPlainObject(value)) {\n issues.push(`${type} values must be plain objects`);\n }\n if (\n definition &&\n valueKind === \"component\" &&\n typeof value !== \"function\" &&\n !isPlainObject(value)\n ) {\n issues.push(\n `${type} values must be component functions or component objects`,\n );\n }\n\n const validation = definition?.validate?.(value);\n if (validation && !validation.valid && Array.isArray(validation.issues)) {\n issues.push(...validation.issues);\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function normalizeRegistryMetadata(\n metadata: unknown,\n {\n defaultCleanupDelayMs = null,\n defaultLifecycle = null,\n defaultSource = DEFAULT_SOURCE,\n }: {\n defaultCleanupDelayMs?: number | null;\n defaultLifecycle?: RegistryLifecycle | null;\n defaultSource?: string;\n } = {},\n): NormalizedRegistryMetadata {\n const registryMeta = isObject(metadata) ? metadata : {};\n\n const normalizedDefaultDelay = parseFiniteNumber(defaultCleanupDelayMs);\n const fallbackCleanupDelayMs =\n normalizedDefaultDelay !== null && normalizedDefaultDelay >= 0\n ? normalizedDefaultDelay\n : null;\n const fallbackLifecycle =\n defaultLifecycle && REGISTRY_LIFECYCLE_VALUES.has(defaultLifecycle)\n ? defaultLifecycle\n : null;\n\n const source =\n getValidString(registryMeta.source) ||\n getValidString(defaultSource, DEFAULT_SOURCE) ||\n DEFAULT_SOURCE;\n const scope = getValidString(registryMeta.scope);\n const priority = parseFiniteNumber(registryMeta.priority);\n const lifecycle = resolveLifecycle(registryMeta, fallbackLifecycle);\n const validation = isValidationMode(registryMeta.validation)\n ? registryMeta.validation\n : null;\n\n const cleanupDelayCandidate = parseFiniteNumber(registryMeta.cleanupDelayMs);\n let cleanupDelayMs =\n cleanupDelayCandidate !== null && cleanupDelayCandidate >= 0\n ? cleanupDelayCandidate\n : fallbackCleanupDelayMs;\n\n if (lifecycle === REGISTRY_LIFECYCLES.IMMEDIATE) {\n cleanupDelayMs = 0;\n } else if (\n (lifecycle === REGISTRY_LIFECYCLES.GRACEFUL ||\n lifecycle === REGISTRY_LIFECYCLES.ROUTE) &&\n cleanupDelayMs === null\n ) {\n cleanupDelayMs = fallbackCleanupDelayMs;\n }\n\n return {\n cleanupDelayMs,\n lifecycle,\n priority,\n registerOptions: {\n ...(priority !== null && { priority }),\n ...(validation === REGISTRY_VALIDATION_MODES.STRICT && { validation }),\n ...(scope && { scope }),\n },\n source,\n ...(scope && { scope }),\n ...(validation && { validation }),\n };\n}\n\nfunction isValidationMode(value: unknown): value is RegistryValidationMode {\n return Object.values<unknown>(REGISTRY_VALIDATION_MODES).includes(value);\n}\n\nexport function pickRegistryMetadata(options: unknown): RegistryMetadata {\n if (!isObject(options)) return {};\n return Object.fromEntries(\n REGISTRY_METADATA_KEYS.filter((key) => options[key] !== undefined).map(\n (key) => [key, options[key]],\n ),\n );\n}\n","\"use client\";\n\nimport { use, type Context } from \"react\";\n\nexport function useRequiredContext<T>(\n context: Context<T | null>,\n hookName: string,\n providerName: string,\n): T {\n const value = use(context);\n if (value === null) {\n throw new Error(`${hookName} must be used within ${providerName}`);\n }\n return value;\n}\n","\"use client\";\n\nimport { useEffect, useLayoutEffect } from \"react\";\nimport { isBrowser } from \"../utils\";\n\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n","\"use client\";\n\nimport {\n useCallback,\n useMemo,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport { useRequiredContext } from \"@/hooks\";\nimport { getOrCreateGlobalContext } from \"./context-registry\";\n\nimport type {\n RegistryDefinitions,\n RegistrySchema,\n RegistryStore,\n} from \"./types\";\nimport { createRegistryStore, type InitialRegistryEntries } from \"./store\";\n\ntype RegistryValueOf<K extends string> = K extends keyof RegistrySchema\n ? RegistrySchema[K]\n : unknown;\n\ninterface RegistryContextValue {\n actions: Pick<\n RegistryStore,\n \"batch\" | \"register\" | \"transaction\" | \"unregister\"\n >;\n subscription: Pick<\n RegistryStore,\n \"getEntriesSnapshot\" | \"getSnapshot\" | \"subscribe\"\n >;\n}\n\nconst RegistryContext = getOrCreateGlobalContext<RegistryContextValue | null>(\n\n \"RegistryContext\",\n null,\n);\n\nexport function RegistryProvider({\n children,\n definitions,\n initialEntries = [],\n}: {\n children?: ReactNode;\n definitions?: RegistryDefinitions;\n initialEntries?: InitialRegistryEntries;\n}) {\n const [store] = useState(() =>\n createRegistryStore(initialEntries, definitions),\n );\n\n const contextValue = useMemo(\n () => ({\n actions: {\n batch: store.batch,\n register: store.register,\n transaction: store.transaction,\n unregister: store.unregister,\n },\n subscription: {\n getEntriesSnapshot: store.getEntriesSnapshot,\n getSnapshot: store.getSnapshot,\n subscribe: store.subscribe,\n },\n }),\n [store],\n );\n\n return <RegistryContext value={contextValue}>{children}</RegistryContext>;\n}\n\nexport function useRegistryActions(): RegistryContextValue[\"actions\"] {\n return useRequiredContext(\n RegistryContext,\n \"useRegistryActions\",\n \"RegistryProvider\",\n ).actions;\n}\n\nfunction useRegistrySubscription(): RegistryContextValue[\"subscription\"] {\n return useRequiredContext(\n RegistryContext,\n \"useRegistrySubscription\",\n \"RegistryProvider\",\n ).subscription;\n}\n\nexport function useRegistryValue<\n K extends string = string,\n T = RegistryValueOf<K>,\n>(type: K, key: string): T | undefined {\n const { getSnapshot, subscribe } = useRegistrySubscription();\n\n const subscribeToKey = useCallback(\n (listener: () => void) => subscribe(type, key, listener),\n [key, subscribe, type],\n );\n const getValue = useCallback(\n () => getSnapshot<K, T>(type, key),\n [getSnapshot, key, type],\n );\n\n return useSyncExternalStore(subscribeToKey, getValue, getValue);\n}\n\nexport function useRegistryEntries<\n K extends string = string,\n T = RegistryValueOf<K>,\n>(type: K): Record<string, T> {\n const { getEntriesSnapshot, subscribe } = useRegistrySubscription();\n\n const subscribeToType = useCallback(\n (listener: () => void) => subscribe(type, null, listener),\n [subscribe, type],\n );\n const getEntries = useCallback(\n () => getEntriesSnapshot<K, T>(type),\n [getEntriesSnapshot, type],\n );\n\n return useSyncExternalStore(subscribeToType, getEntries, getEntries);\n}\n","\"use client\";\n\nimport { use, type ComponentType, type ReactNode } from \"react\";\nimport { isObject } from \"@/utils\";\nimport { getOrCreateGlobalContext } from \"./context-registry\";\nimport type {\n AnyCoreModule,\n PageConfig,\n RegistryDefinition,\n RegistryDefinitions,\n RegistryMetadata,\n} from \"./types\";\n\nexport type BoundaryComponent = ComponentType<{\n children?: ReactNode;\n name?: string;\n}>;\n\nexport interface ModuleHostValue {\n Boundary: BoundaryComponent;\n byId: ReadonlyMap<string, AnyCoreModule>;\n definitions: RegistryDefinitions;\n modules: readonly AnyCoreModule[];\n}\n\nexport const EMPTY_MODULES: readonly AnyCoreModule[] = Object.freeze([]);\n\nexport const PassthroughBoundary: BoundaryComponent = ({ children }) =>\n children;\n\nexport const ModuleHostContext =\n getOrCreateGlobalContext<ModuleHostValue | null>(\"ModuleHostContext\", null);\n\n\nexport function selectModuleSlice(\n coreModule: AnyCoreModule,\n config: PageConfig,\n): unknown {\n const slice = coreModule.page?.select\n ? coreModule.page.select(config)\n : (config as Record<string, unknown>)[coreModule.id];\n return slice ?? null;\n}\n\nexport function createModulePayload(\n modules: readonly AnyCoreModule[],\n config: PageConfig,\n metadata: RegistryMetadata = {},\n): PageConfig | null {\n const payload: Record<string, unknown> = {};\n let hasSlices = false;\n for (const coreModule of modules) {\n if (!coreModule.page?.entries) continue;\n const slice = selectModuleSlice(coreModule, config);\n if (slice === null) continue;\n payload[coreModule.id] = slice;\n hasSlices = true;\n }\n if (!hasSlices) return null;\n return {\n ...payload,\n registry: {\n ...metadata,\n ...(isObject(config.registry) ? config.registry : {}),\n },\n } as PageConfig;\n}\n\nconst MODULE_ID_PATTERN = /^[a-z][a-zA-Z0-9]*$/;\n\nexport function sortModules(\n modules: readonly AnyCoreModule[],\n): AnyCoreModule[] {\n const byId = new Map<string, AnyCoreModule>();\n for (const coreModule of modules) {\n if (!MODULE_ID_PATTERN.test(coreModule.id)) {\n throw new Error(\n `[Core] Invalid module id \"${coreModule.id}\": use a camelCase name such as \"contextMenu\".`,\n );\n }\n if (byId.has(coreModule.id)) {\n throw new Error(`[Core] Module \"${coreModule.id}\" is installed twice.`);\n }\n byId.set(coreModule.id, coreModule);\n }\n\n const sorted: AnyCoreModule[] = [];\n const state = new Map<string, \"visiting\" | \"done\">();\n const visit = (coreModule: AnyCoreModule, path: string[]) => {\n const current = state.get(coreModule.id);\n if (current === \"done\") return;\n if (current === \"visiting\") {\n throw new Error(\n `[Core] Module dependency cycle: ${[...path, coreModule.id].join(\" -> \")}`,\n );\n }\n state.set(coreModule.id, \"visiting\");\n for (const id of coreModule.uses ?? []) {\n const dependency = byId.get(id);\n if (dependency) visit(dependency, [...path, coreModule.id]);\n }\n state.set(coreModule.id, \"done\");\n sorted.push(coreModule);\n };\n modules.forEach((coreModule) => visit(coreModule, []));\n return sorted;\n}\n\nexport function createModuleRegistryDefinitions(\n modules: readonly AnyCoreModule[],\n): RegistryDefinitions {\n const definitions = new Map<string, RegistryDefinition>();\n for (const coreModule of modules) {\n if (coreModule.registry)\n definitions.set(coreModule.id, coreModule.registry);\n }\n return definitions;\n}\n\nexport function useInstalledModules(): readonly AnyCoreModule[] {\n return use(ModuleHostContext)?.modules ?? EMPTY_MODULES;\n}\n","import {\n DEFAULT_SOURCE,\n REGISTRY_LIFECYCLES,\n normalizeRegistryMetadata,\n validateRegistryMetadata,\n} from \"./schema\";\nimport { isObject } from \"./utils\";\nimport type {\n AnyCoreModule,\n PageConfig,\n RegistrationEntry,\n RegistryApplyContext,\n RegistryCleanupTimer,\n RegistryMetadata,\n RegistryQueue,\n} from \"./types\";\nimport { report } from \"@/utils\";\n\ntype CleanupScope = Map<string, RegistryCleanupTimer>;\n\nfunction isPersistentLifecycle(lifecycle: unknown): boolean {\n return lifecycle === REGISTRY_LIFECYCLES.PERSISTENT;\n}\n\nfunction runRegistrationBatch(\n context: RegistryApplyContext,\n executor: (queue: RegistryQueue) => void,\n): number | void {\n return typeof context.batch === \"function\"\n ? context.batch(executor)\n : executor(context);\n}\n\nfunction createEntryCleanupKey(\n type: string,\n key: string,\n source: string,\n instanceId: string | null,\n scope: string | undefined,\n): string {\n return JSON.stringify([\n \"entry\",\n type,\n key,\n scope ?? null,\n source,\n instanceId,\n ]);\n}\n\nfunction getCleanupScope(\n context: RegistryApplyContext | null | undefined,\n): CleanupScope {\n return context?.cleanupScope || new Map();\n}\n\nfunction clearCleanupTimer(scope: CleanupScope, cleanupKey: string): void {\n const lifecycle = scope.get(cleanupKey);\n if (!lifecycle) return;\n lifecycle.cancelled = true;\n if (lifecycle.timerId !== null) clearTimeout(lifecycle.timerId);\n scope.delete(cleanupKey);\n}\n\nfunction scheduleCleanup(\n scope: CleanupScope,\n cleanupKey: string,\n callback: () => void,\n delayMs: number,\n): void {\n clearCleanupTimer(scope, cleanupKey);\n const lifecycle: RegistryCleanupTimer = {\n cancelled: false,\n timerId: null,\n };\n\n lifecycle.timerId = setTimeout(() => {\n if (lifecycle.cancelled || scope.get(cleanupKey) !== lifecycle) return;\n scope.delete(cleanupKey);\n callback();\n }, delayMs);\n\n scope.set(cleanupKey, lifecycle);\n}\n\ntype ModuleRegistration = RegistrationEntry & {\n cleanupKey: string;\n type: string;\n};\n\nfunction collectModuleRegistrations(\n coreModule: AnyCoreModule,\n slice: unknown,\n pageMetadata: RegistryMetadata,\n context: RegistryApplyContext,\n): ModuleRegistration[] {\n const definition = coreModule.registry;\n const toEntries = coreModule.page?.entries;\n if (!definition || !toEntries || slice == null || slice === false) return [];\n\n const type = coreModule.id;\n const items = Array.isArray(slice) ? slice : [slice];\n const registrations: ModuleRegistration[] = [];\n\n for (const item of items) {\n if (item == null || item === false) continue;\n const itemMetadata =\n isObject(item) && isObject(item.registry) ? item.registry : {};\n const metadata = { ...pageMetadata, ...itemMetadata };\n if (\n metadata.validation === \"strict\" &&\n !validateRegistryMetadata(metadata).valid\n ) {\n continue;\n }\n\n const payload = isObject(item)\n ? Object.fromEntries(\n Object.entries(item).filter(([key]) => key !== \"registry\"),\n )\n : item;\n const { cleanupDelayMs, lifecycle, registerOptions, scope, source } =\n normalizeRegistryMetadata(metadata, {\n defaultCleanupDelayMs: definition.cleanupDelayMs ?? null,\n defaultLifecycle: definition.lifecycle,\n defaultSource: DEFAULT_SOURCE,\n });\n\n for (const { key, value } of toEntries(payload, context) ?? []) {\n const validation = definition.validate?.(value);\n if (validation && !validation.valid) {\n report(`Registry ${type} config is invalid`, validation.issues, \"warn\");\n continue;\n }\n registrations.push({\n cleanupDelayMs,\n cleanupKey: createEntryCleanupKey(\n type,\n key,\n source,\n context.instanceId,\n scope,\n ),\n key,\n lifecycle,\n registerOptions,\n scope,\n source,\n type,\n value,\n });\n }\n }\n return registrations;\n}\n\nconst NO_CLEANUP = () => {};\n\nexport function applyRegistryConfig(\n config: PageConfig | null | undefined,\n context: RegistryApplyContext,\n): () => void {\n const modules = context.modules ?? [];\n if (!config || modules.length === 0) return NO_CLEANUP;\n const pageMetadata = isObject(config.registry) ? config.registry : {};\n const slices = config as Record<string, unknown>;\n\n const registrations = modules.flatMap((coreModule) => {\n try {\n return collectModuleRegistrations(\n coreModule,\n slices[coreModule.id],\n pageMetadata,\n context,\n );\n } catch (error) {\n report(`Registry apply (${coreModule.id})`, error);\n return [];\n }\n });\n if (registrations.length === 0) return NO_CLEANUP;\n\n const cleanupScope = getCleanupScope(context);\n const owner = (registration: ModuleRegistration) => ({\n instanceId: context.instanceId,\n scope: registration.scope,\n source: registration.source,\n });\n\n runRegistrationBatch(context, (queue) => {\n registrations.forEach(\n ({ cleanupKey, key, registerOptions, source, type, value }) => {\n clearCleanupTimer(cleanupScope, cleanupKey);\n queue.register(type, key, value, source, registerOptions);\n },\n );\n });\n\n return () => {\n const immediate: ModuleRegistration[] = [];\n registrations.forEach((registration) => {\n if (isPersistentLifecycle(registration.lifecycle)) return;\n const { cleanupDelayMs, cleanupKey, key, type } = registration;\n if (typeof cleanupDelayMs === \"number\" && cleanupDelayMs > 0) {\n scheduleCleanup(\n cleanupScope,\n cleanupKey,\n () => context.unregister(type, key, owner(registration)),\n cleanupDelayMs,\n );\n } else {\n immediate.push(registration);\n }\n });\n if (immediate.length === 0) return;\n runRegistrationBatch(context, (queue) => {\n immediate.forEach((registration) =>\n queue.unregister(\n registration.type,\n registration.key,\n owner(registration),\n ),\n );\n });\n };\n}\n","\"use client\";\n\nimport { usePathname } from \"next/navigation\";\nimport { useIsomorphicLayoutEffect } from \"@/hooks\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { applyRegistryConfig } from \"./handlers\";\nimport { createModulePayload, useInstalledModules } from \"./installed\";\nimport { useRegistryActions } from \"./provider\";\nimport { isObject, shallowEqual } from \"@/utils\";\nimport type {\n PageConfig,\n RegistryCleanupTimer,\n RegistryApplyContext,\n RegistryMetadata,\n RegistryQueue,\n RegistrySourceOrOptions,\n StableFunctionEntry,\n AnyFunction,\n} from \"./types\";\n\nfunction withInstanceId(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg?: RegistryMetadata,\n): {\n optionsArg: RegistryMetadata | undefined;\n sourceOrOptions: RegistrySourceOrOptions;\n} {\n if (typeof sourceOrOptions === \"string\") {\n return {\n optionsArg: { ...(isObject(optionsArg) ? optionsArg : {}), instanceId },\n sourceOrOptions,\n };\n }\n if (isObject(sourceOrOptions)) {\n return {\n optionsArg,\n sourceOrOptions: { ...sourceOrOptions, instanceId },\n };\n }\n return {\n optionsArg: undefined,\n sourceOrOptions: {\n ...(isObject(optionsArg) ? optionsArg : {}),\n instanceId,\n },\n };\n}\n\nfunction withInstanceIdForUnregister(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n): RegistryMetadata {\n if (typeof sourceOrOptions === \"string\") {\n return { instanceId, source: sourceOrOptions };\n }\n if (isObject(sourceOrOptions)) {\n return { ...sourceOrOptions, instanceId };\n }\n return { instanceId };\n}\n\nfunction resolveRegisterArgsWithInstance(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg?: RegistryMetadata,\n): [RegistrySourceOrOptions, RegistryMetadata | undefined] {\n const input = withInstanceId(instanceId, sourceOrOptions, optionsArg);\n return [input.sourceOrOptions, input.optionsArg];\n}\n\n/* eslint-disable react-hooks/refs */\nexport function useShallowStable<T extends object>(value: T): T {\n const ref = useRef(value);\n if (ref.current !== value && !shallowEqual(ref.current, value)) {\n ref.current = value;\n }\n return ref.current;\n}\n/* eslint-enable react-hooks/refs */\n\nconst MAX_STABILIZATION_DEPTH = 64;\n\nfunction createStableFunctionEntry(fn: AnyFunction): StableFunctionEntry {\n const entry: StableFunctionEntry = {\n current: fn,\n stable(this: unknown, ...args: unknown[]) {\n return entry.current?.apply(this, args);\n },\n };\n return entry;\n}\n\ninterface StabilizeScope {\n componentSlices: ReadonlySet<string>;\n functionEntries: Map<string, StableFunctionEntry>;\n usedPaths: Set<string>;\n}\n\nfunction isDirectRegistryComponentPath(\n path: string,\n componentSlices: ReadonlySet<string>,\n): boolean {\n const match = /^config\\.([^.[]+)\\.[^.[]+$/.exec(path);\n return Boolean(match && componentSlices.has(match[1]));\n}\n\nfunction isReactNodeLike(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"boolean\" ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n isValidElement(value)\n );\n}\n\nfunction isStabilizableObject(\n value: unknown,\n): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value)\n );\n}\n\nfunction hasSameObjectKeys(\n previousValue: unknown,\n nextValue: unknown,\n): boolean {\n if (\n !isStabilizableObject(previousValue) ||\n !isStabilizableObject(nextValue)\n ) {\n return false;\n }\n const previousKeys = Object.keys(previousValue);\n const nextKeys = Object.keys(nextValue);\n if (previousKeys.length !== nextKeys.length) return false;\n return nextKeys.every((key) =>\n Object.prototype.hasOwnProperty.call(previousValue, key),\n );\n}\n\nfunction stabilizeRegistryValue(\n value: unknown,\n path: string,\n scope: StabilizeScope,\n previousValue?: unknown,\n seen = new WeakSet<object>(),\n depth = 0,\n): unknown {\n if (depth > MAX_STABILIZATION_DEPTH) return value;\n\n if (typeof value === \"function\") {\n const isComponent = value.name && /^[A-Z]/.test(value.name);\n if (\n isComponent ||\n isDirectRegistryComponentPath(path, scope.componentSlices)\n ) {\n return value;\n }\n scope.usedPaths.add(path);\n let entry = scope.functionEntries.get(path);\n if (!entry) {\n entry = createStableFunctionEntry(value as AnyFunction);\n scope.functionEntries.set(path, entry);\n } else {\n entry.current = value as AnyFunction;\n }\n return entry.stable;\n }\n\n if (value && typeof value === \"object\") {\n if (seen.has(value)) return value;\n seen.add(value);\n }\n\n if (isValidElement(value)) {\n const nextProps = stabilizeRegistryValue(\n value.props,\n `${path}.props`,\n scope,\n isValidElement(previousValue) ? previousValue.props : undefined,\n seen,\n depth + 1,\n ) as Record<string, unknown>;\n if (\n isValidElement(previousValue) &&\n previousValue.type === value.type &&\n previousValue.key === value.key &&\n previousValue.props === nextProps\n ) {\n return previousValue;\n }\n return cloneElement(value, nextProps);\n }\n\n if (Array.isArray(value)) {\n const nextValue = value.every(isReactNodeLike)\n ? Children.toArray(value)\n : value;\n const previousArray = Array.isArray(previousValue) ? previousValue : null;\n let hasChanged =\n !previousArray || previousArray.length !== nextValue.length;\n\n const stabilizedValue: unknown[] = nextValue.map((item, index) => {\n const nextItem = stabilizeRegistryValue(\n item,\n `${path}[${index}]`,\n scope,\n previousArray?.[index],\n seen,\n depth + 1,\n );\n if (!previousArray || nextItem !== previousArray[index]) {\n hasChanged = true;\n }\n return nextItem;\n });\n return !hasChanged ? previousArray : stabilizedValue;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n\n const source = value as Record<string, unknown>;\n const previousRecord = previousValue as Record<string, unknown> | undefined;\n const stabilizedValue: Record<string, unknown> = {};\n const canReusePrevious = hasSameObjectKeys(previousValue, value);\n let hasChanged = !canReusePrevious;\n\n Object.keys(source).forEach((key) => {\n const nextValue = stabilizeRegistryValue(\n source[key],\n `${path}.${key}`,\n scope,\n previousRecord?.[key],\n seen,\n depth + 1,\n );\n stabilizedValue[key] = nextValue;\n if (!canReusePrevious || nextValue !== previousRecord?.[key]) {\n hasChanged = true;\n }\n });\n\n return !hasChanged ? previousValue : stabilizedValue;\n}\n\nfunction useAppliedRegistryConfig(\n payload: PageConfig | null,\n context: RegistryApplyContext,\n componentSlices: ReadonlySet<string>,\n): void {\n const functionEntriesRef = useRef(new Map<string, StableFunctionEntry>());\n const appliedRef = useRef<{\n cleanup: () => void;\n config: unknown;\n context: RegistryApplyContext;\n payload: PageConfig | null;\n } | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n const previous = appliedRef.current;\n if (\n previous &&\n previous.payload === payload &&\n previous.context === context\n ) {\n return;\n }\n const functionEntries = functionEntriesRef.current;\n const usedPaths = new Set<string>();\n const config = stabilizeRegistryValue(\n payload,\n \"config\",\n { componentSlices, functionEntries, usedPaths },\n previous?.config,\n );\n functionEntries.forEach((_entry, path) => {\n if (!usedPaths.has(path)) functionEntries.delete(path);\n });\n\n if (\n previous &&\n previous.config === config &&\n previous.context === context\n ) {\n previous.payload = payload;\n return;\n }\n previous?.cleanup();\n appliedRef.current = {\n cleanup: applyRegistryConfig(config as PageConfig | null, context),\n config,\n context,\n payload,\n };\n });\n\n useIsomorphicLayoutEffect(\n () => () => {\n appliedRef.current?.cleanup();\n appliedRef.current = null;\n },\n [],\n );\n}\n\nexport function createRegistryApplyContext(\n actions: RegistryQueue & Pick<RegistryApplyContext, \"batch\">,\n {\n cleanupScope = new Map<string, RegistryCleanupTimer>(),\n instanceId,\n modules = [],\n pathname,\n }: Pick<RegistryApplyContext, \"instanceId\" | \"modules\" | \"pathname\"> & {\n cleanupScope?: RegistryApplyContext[\"cleanupScope\"];\n },\n): RegistryApplyContext {\n const stamp = (queue: RegistryQueue): RegistryQueue =>\n ({\n register: (\n type: string,\n key: string,\n item: unknown,\n sourceOrOptions?: RegistrySourceOrOptions,\n optionsArg?: RegistryMetadata,\n ) =>\n queue.register(\n type,\n key,\n item,\n ...resolveRegisterArgsWithInstance(\n instanceId,\n sourceOrOptions,\n optionsArg,\n ),\n ),\n unregister: (\n type: string,\n key: string,\n sourceOrOptions?: RegistrySourceOrOptions,\n ) =>\n queue.unregister(\n type,\n key,\n withInstanceIdForUnregister(instanceId, sourceOrOptions),\n ),\n }) as RegistryQueue;\n\n return {\n ...stamp(actions),\n batch: (executor) =>\n typeof executor === \"function\"\n ? actions.batch((queue) => executor(stamp(queue)))\n : 0,\n cleanupScope,\n instanceId,\n modules,\n pathname,\n };\n}\n\nexport function useRegistry(\n config?: PageConfig | null,\n metadata?: RegistryMetadata,\n): void {\n const { batch, register, unregister } = useRegistryActions();\n const pathname = usePathname();\n const modules = useInstalledModules();\n const instanceId = `registry-instance-${useId()}`;\n const [cleanupScope] = useState(\n () => new Map<string, RegistryCleanupTimer>(),\n );\n\n const context = useMemo(\n () =>\n createRegistryApplyContext(\n { batch, register, unregister },\n {\n cleanupScope,\n instanceId,\n modules,\n pathname,\n },\n ),\n [batch, cleanupScope, instanceId, modules, pathname, register, unregister],\n );\n\n const payload = useMemo(\n () => (config ? createModulePayload(modules, config, metadata) : null),\n [config, metadata, modules],\n );\n const componentSlices = useMemo(\n () =>\n new Set(\n modules\n .filter(\n (coreModule) => coreModule.registry?.valueKind === \"component\",\n )\n .map((coreModule) => coreModule.id),\n ),\n [modules],\n );\n useAppliedRegistryConfig(payload, context, componentSlices);\n}\n","\"use client\";\n\nimport { createElement, use, useState, type ReactNode } from \"react\";\nimport { useStore } from \"@/hooks\";\nimport { createStore, type ExternalStore } from \"@/utils\";\nimport {\n EMPTY_MODULES,\n ModuleHostContext,\n PassthroughBoundary,\n createModuleRegistryDefinitions,\n sortModules,\n type BoundaryComponent,\n type ModuleHostValue,\n} from \"./installed\";\nimport { PageControllerProvider } from \"./page-controller\";\nimport { RegistryProvider } from \"./provider\";\nimport type {\n AnyCoreModule,\n AppRegistryEntry,\n CoreModule,\n CoreModules,\n ModuleId,\n ModuleRuntimeOf,\n ModuleStateOf,\n} from \"./types\";\nimport { report } from \"@/utils\";\n\nexport function defineModule<\n TId extends string,\n TRuntime = never,\n TSlice = never,\n TController = never,\n>(\n coreModule: CoreModule<TId, TRuntime, TSlice, TController>,\n): CoreModule<TId, TRuntime, TSlice, TController> {\n return Object.freeze({ ...coreModule });\n}\n\nfunction warnMissingPeers(modules: readonly AnyCoreModule[]): void {\n const installed = new Set(modules.map((coreModule) => coreModule.id));\n for (const { id, uses } of modules) {\n const missing = (uses ?? []).filter((peer) => !installed.has(peer));\n if (missing.length > 0) {\n report(\n `Module \"${id}\" runs without its optional peers`,\n missing.join(\", \"),\n \"warn\",\n );\n }\n }\n}\n\nfunction createModuleHost(\n modules: readonly AnyCoreModule[],\n Boundary: BoundaryComponent,\n): ModuleHostValue {\n const sorted = sortModules(modules);\n if (process.env.NODE_ENV !== \"production\") warnMissingPeers(sorted);\n return {\n Boundary,\n byId: new Map(sorted.map((coreModule) => [coreModule.id, coreModule])),\n definitions: createModuleRegistryDefinitions(sorted),\n modules: Object.freeze(sorted),\n };\n}\n\nexport interface ModuleHostProps {\n boundary?: BoundaryComponent;\n children?: ReactNode;\n modules?: readonly AnyCoreModule[];\n registryEntries?: readonly AppRegistryEntry[];\n}\n\nexport function ModuleHost({\n boundary = PassthroughBoundary,\n children,\n modules = EMPTY_MODULES,\n registryEntries,\n}: ModuleHostProps) {\n const [host] = useState(() => createModuleHost(modules, boundary));\n const { Boundary } = host;\n\n const content = (\n <>\n {host.modules.map(({ Backdrop, id }) =>\n Backdrop ? (\n <Boundary key={id} name={id}>\n <Backdrop />\n </Boundary>\n ) : null,\n )}\n {children}\n {host.modules.map(({ Overlay, id }) =>\n Overlay ? (\n <Boundary key={id} name={id}>\n <Overlay />\n </Boundary>\n ) : null,\n )}\n </>\n );\n\n const tree = host.modules.reduceRight<ReactNode>(\n (inner, { Provider }) => (Provider ? <Provider>{inner}</Provider> : inner),\n content,\n );\n\n return (\n <RegistryProvider\n definitions={host.definitions}\n initialEntries={registryEntries}\n >\n <ModuleHostContext value={host}>\n <PageControllerProvider>{tree}</PageControllerProvider>\n </ModuleHostContext>\n </RegistryProvider>\n );\n}\n\nexport function useModule<K extends ModuleId>(\n id: K,\n): ModuleRuntimeOf<CoreModules[K]> | null {\n const coreModule = use(ModuleHostContext)?.byId.get(id);\n return coreModule?.context ? (use(coreModule.context) ?? null) : null;\n}\n\ntype ModuleActionsOf<K extends ModuleId> =\n ModuleRuntimeOf<CoreModules[K]> extends { actions: infer TActions }\n ? TActions\n : never;\n\nexport interface ModulePeer<K extends ModuleId> {\n useActions(): ModuleActionsOf<K>;\n useRuntime(): ModuleRuntimeOf<CoreModules[K]>;\n useState<T>(\n selector: (state: ModuleStateOf<K>) => T,\n isEqual?: (a: T, b: T) => boolean,\n ): T;\n}\n\nexport function definePeer<K extends ModuleId>(\n id: K,\n inert: ModuleRuntimeOf<CoreModules[K]>,\n): ModulePeer<K> {\n const useRuntime = (): ModuleRuntimeOf<CoreModules[K]> =>\n useModule(id) ?? inert;\n return {\n useRuntime,\n useActions: () => useRuntime().actions as ModuleActionsOf<K>,\n useState: <T,>(\n selector: (state: ModuleStateOf<K>) => T,\n isEqual?: (a: T, b: T) => boolean,\n ) =>\n useStore<ModuleStateOf<K>, T>(\n (useRuntime() as { store: ExternalStore<ModuleStateOf<K>> }).store,\n selector,\n isEqual,\n ),\n };\n}\n\nconst NO_MODULE_STORE: ExternalStore<unknown> = createStore<unknown>(undefined);\n\nexport function useModuleState<K extends ModuleId, T>(\n id: K,\n selector: (state: ModuleStateOf<K>) => T,\n fallback: T,\n isEqual: (a: T, b: T) => boolean = Object.is,\n): T {\n const runtime = useModule(id) as { store: ExternalStore<unknown> } | null;\n return useStore<unknown, T>(\n runtime?.store ?? NO_MODULE_STORE,\n (state) => (runtime ? selector(state as ModuleStateOf<K>) : fallback),\n isEqual,\n );\n}\n\nexport function ModuleBoundary({\n children,\n name,\n}: {\n children?: ReactNode;\n name?: string;\n}) {\n const Boundary = use(ModuleHostContext)?.Boundary ?? PassthroughBoundary;\n return createElement(Boundary, { name }, children);\n}\n\nexport function useIsModuleInstalled(id: ModuleId): boolean {\n return use(ModuleHostContext)?.byId.has(id) ?? false;\n}\n","\"use client\";\n\nimport { pickRegistryMetadata } from \"./schema\";\nimport { useRegistry } from \"./hooks\";\nimport { useInstalledModules } from \"./installed\";\nimport type { ModuleId, PageConfig, RegistryMetadata } from \"./types\";\n\nexport function useModuleRegistration(\n id: ModuleId,\n value: unknown,\n options?: RegistryMetadata & { enabled?: boolean },\n): void {\n const coreModule = useInstalledModules().find(\n (candidate) => candidate.id === id,\n );\n const config =\n coreModule && options?.enabled !== false && value != null\n ? ({ [id]: value } as PageConfig)\n : null;\n useRegistry(config, pickRegistryMetadata(options));\n}\n","\"use client\";\n\nimport {\n createElement,\n useContext,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { getOrCreateGlobalContext } from \"@/kernel\";\n\nexport interface ThemeSpec<S extends string = string> {\n readonly id: string;\n readonly _slots?: S;\n}\n\nexport interface ThemeConfig<S extends string> {\n slots: Readonly<Record<S, string>>;\n styles?: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ResolvedTheme<S extends string> {\n readonly slots: Readonly<Record<S, string>>;\n readonly styles: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ThemeEntry {\n readonly id: string;\n readonly config: ThemeConfig<string>;\n}\n\nexport function defineThemeSpec<S extends string>(id: string): ThemeSpec<S> {\n return Object.freeze({ id });\n}\n\nexport function defineTheme<S extends string>(\n spec: ThemeSpec<S>,\n config: ThemeConfig<NoInfer<S>>,\n): ThemeEntry {\n return { id: spec.id, config: config as ThemeEntry[\"config\"] };\n}\n\nconst EMPTY: ReadonlyMap<string, ThemeEntry[\"config\"]> = new Map();\nconst ThemeContext = getOrCreateGlobalContext<\n ReadonlyMap<string, ThemeEntry[\"config\"]>\n>(\"ThemeContext\", EMPTY);\n\n\nexport function ThemeProvider({\n children,\n themes,\n}: {\n children?: ReactNode;\n themes: readonly ThemeEntry[];\n}) {\n const configs = new Map(themes.map((entry) => [entry.id, entry.config]));\n return createElement(ThemeContext.Provider, { value: configs }, children);\n}\n\nexport function useTheme<S extends string>(\n spec: ThemeSpec<S>,\n): ResolvedTheme<S> {\n const config = useContext(ThemeContext).get(spec.id);\n if (!config) {\n throw new Error(\n `Theme \"${spec.id}\" is missing. Ensure its theme configuration is provided to <ThemeProvider themes={[...]}> (e.g. in src/config/ or your theme setup).`,\n );\n }\n return {\n slots: config.slots,\n styles: config.styles ?? {},\n } as ResolvedTheme<S>;\n}\n\nexport { useTheme as useModuleTheme };\n\n","import { defineThemeSpec } from \"@/theme\";\nimport { type ControlsThemeSlot } from \"./types\";\n\nexport const CONTROLS_EDGE_INSET = 4;\nexport const CONTROLS_DOCK_GAP = 8;\nexport const CONTROLS_DOCK_ELEMENT_ID = \"dock-card-stack\";\nexport const CONTROL_SIDE_NAMES = Object.freeze([\"left\", \"right\"] as const);\n\nexport const controlsTheme = defineThemeSpec<ControlsThemeSlot>(\"controls\");\n","import { isValidElement } from \"react\";\nimport { type ValidationResult } from \"@/kernel\";\nimport { clamp, isPlainObject, toFiniteNumber, trimToNull } from \"@/utils\";\nimport {\n CONTROLS_DOCK_GAP,\n CONTROLS_EDGE_INSET,\n CONTROL_SIDE_NAMES,\n} from \"./constants\";\nimport {\n type ControlEntry,\n type ControlSide,\n type ControlsLayout,\n type ControlsPageConfig,\n type ControlsPairItem,\n type PageControlEntry,\n type ResolvedControlsPairs,\n type ViewportDimensions,\n} from \"./types\";\n\nexport function isControlSide(value: unknown): value is ControlSide {\n return CONTROL_SIDE_NAMES.includes(value as ControlSide);\n}\n\nfunction hasContent(content: unknown): boolean {\n return content !== undefined && content !== null && content !== false;\n}\n\nexport function resolveControlsPairs(\n entries: Record<string, ControlEntry> | ControlEntry[] | null | undefined,\n pathname: string,\n): ResolvedControlsPairs {\n const rows = new Map<\n number,\n { left?: ControlsPairItem; right?: ControlsPairItem }\n >();\n\n for (const entry of Array.isArray(entries)\n ? entries\n : Object.values(entries || {})) {\n if (\n entry?.path !== pathname ||\n !isControlSide(entry.side) ||\n !hasContent(entry.content)\n ) {\n continue;\n }\n const order = toFiniteNumber(entry.order);\n const row = rows.get(order) ?? {};\n rows.set(order, row);\n const current = row[entry.side];\n if (!current || String(entry.id).localeCompare(String(current.id)) < 0) {\n row[entry.side] = { content: entry.content, id: entry.id };\n }\n }\n\n const pairs = [...rows]\n .sort(([a], [b]) => a - b)\n .map(([, row]) => row)\n .filter((row): row is Required<typeof row> =>\n Boolean(row.left && row.right),\n );\n\n return {\n left: pairs.map((row) => row.left),\n right: pairs.map((row) => row.right),\n };\n}\n\nexport function getControlsLayout(\n dockRect: Pick<DOMRect, \"bottom\" | \"height\" | \"left\" | \"right\"> | null,\n viewport: ViewportDimensions,\n): ControlsLayout | null {\n const { height, width } = viewport;\n if (!dockRect || width <= 0 || height <= 0) return null;\n\n const inset = CONTROLS_EDGE_INSET;\n const gap = CONTROLS_DOCK_GAP;\n const dockLeft = clamp(dockRect.left, 0, width);\n const dockRight = clamp(dockRect.right, dockLeft, width);\n const dockBottom = clamp(dockRect.bottom, 0, height);\n\n return {\n bottom: Math.max(0, height - dockBottom),\n height: Math.max(0, dockRect.height) / 2,\n left: {\n maxWidth: Math.max(0, dockLeft - inset * 2 - gap),\n right: Math.max(inset, width - dockLeft + gap),\n },\n right: {\n left: Math.min(width - inset, dockRight + gap),\n maxWidth: Math.max(0, width - dockRight - inset * 2 - gap),\n },\n };\n}\n\nexport function areLayoutsEqual(\n a: ControlsLayout | null,\n b: ControlsLayout | null,\n): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.bottom === b.bottom &&\n a.height === b.height &&\n a.isHidden === b.isHidden &&\n a.left.maxWidth === b.left.maxWidth &&\n a.left.right === b.left.right &&\n a.right.left === b.right.left &&\n a.right.maxWidth === b.right.maxWidth\n );\n}\n\nfunction isRenderable(value: unknown): boolean {\n if (\n value === null ||\n value === undefined ||\n [\"boolean\", \"number\", \"string\"].includes(typeof value) ||\n isValidElement(value)\n ) {\n return true;\n }\n return Array.isArray(value) && value.every(isRenderable);\n}\n\nexport function validateControlEntry(entry: unknown): ValidationResult {\n if (!isPlainObject(entry)) {\n return { issues: [\"control must be a plain object\"], valid: false };\n }\n const issues: string[] = [];\n if (!trimToNull(entry.id)) {\n issues.push(\"control id must be a non-empty string\");\n }\n if (!isControlSide(entry.side)) {\n issues.push(\"control side must be left or right\");\n }\n if (!hasContent(entry.content) || !isRenderable(entry.content)) {\n issues.push(\"control content must be renderable\");\n }\n if (!Number.isFinite(Number(entry.order))) {\n issues.push(\"control order must be a finite number\");\n }\n return { issues, valid: issues.length === 0 };\n}\n\nexport function normalizePageControls(\n controls: ControlsPageConfig | null | undefined,\n): PageControlEntry[] | null {\n if (!controls) return null;\n if (Array.isArray(controls)) return controls;\n if (\"side\" in controls) return [controls];\n\n const { id = \"controls\", order = 0, path, registry } = controls;\n return CONTROL_SIDE_NAMES.flatMap((side) => {\n const content = controls[side];\n if (!hasContent(content)) return [];\n return [\n {\n ...(registry ? { registry } : {}),\n content,\n id: `${id}-${side}`,\n order,\n ...(path ? { path } : {}),\n side,\n },\n ];\n });\n}\n","\"use client\";\n\nimport {\n createElement,\n isValidElement,\n useEffect,\n useMemo,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { useModuleTheme } from \"@/theme\";\nimport {\n useModuleRegistration,\n useRegistryEntries,\n type RegistryMetadata,\n} from \"@/kernel\";\nimport { CONTROLS_DOCK_ELEMENT_ID, controlsTheme } from \"./constants\";\nimport {\n type ControlEntry,\n type ControlSlot,\n type ControlsLayout,\n type ControlsPageConfig,\n type ControlsUseOptions,\n type DefineControlsOptions,\n} from \"./types\";\nimport {\n areLayoutsEqual,\n getControlsLayout,\n normalizePageControls,\n resolveControlsPairs,\n} from \"./utils\";\n\nfunction getDockStackElement(): HTMLElement | null {\n return document.getElementById(CONTROLS_DOCK_ELEMENT_ID);\n}\n\nfunction getDockElement(): Element | null {\n return (\n document.querySelector('[data-controls-anchor=\"true\"]') ??\n getDockStackElement()\n );\n}\n\nfunction measureLayout(): ControlsLayout | null {\n const dockElement = getDockElement();\n if (!dockElement) return null;\n const layout = getControlsLayout(dockElement.getBoundingClientRect(), {\n height: window.innerHeight,\n width: window.innerWidth,\n });\n return (\n layout && {\n ...layout,\n isHidden: getDockStackElement()?.dataset.controlsHidden === \"true\",\n }\n );\n}\n\nexport function useControlsLayout(): ControlsLayout | null {\n const [layout, setLayout] = useState<ControlsLayout | null>(null);\n\n useEffect(() => {\n let observed: Element | null | undefined;\n let resizeObserver: ResizeObserver | undefined;\n\n const update = () => {\n const next = measureLayout();\n setLayout((prev) => (areLayoutsEqual(prev, next) ? prev : next));\n };\n\n const observe = () => {\n const dockElement = getDockElement();\n if (dockElement !== observed) {\n observed = dockElement;\n resizeObserver?.disconnect();\n mutationObserver.disconnect();\n if (dockElement) {\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(update);\n resizeObserver.observe(dockElement);\n }\n mutationObserver.observe(dockElement, {\n attributes: true,\n attributeFilter: [\"data-controls-anchor\", \"data-controls-hidden\"],\n });\n if (dockElement.parentElement) {\n mutationObserver.observe(dockElement.parentElement, {\n childList: true,\n });\n }\n } else {\n mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n update();\n };\n\n const mutationObserver = new MutationObserver(observe);\n\n observe();\n window.addEventListener(\"resize\", update);\n return () => {\n mutationObserver.disconnect();\n resizeObserver?.disconnect();\n window.removeEventListener(\"resize\", update);\n };\n }, []);\n\n return layout;\n}\n\nfunction resolveSlot(\n slot: ControlSlot | undefined,\n props: Record<string, unknown>,\n): ReactNode {\n if (slot == null || slot === false) return null;\n if (isValidElement(slot)) return slot;\n if (typeof slot === \"function\") return createElement(slot, props);\n return slot;\n}\n\nexport function useControlsRegistration(\n config: ControlsPageConfig | null | undefined,\n options?: RegistryMetadata & { enabled?: boolean },\n): void {\n useModuleRegistration(\"controls\", config, options);\n}\n\nexport function useControls(\n config?: DefineControlsOptions | ControlEntry | ControlEntry[] | null,\n options?: ControlsUseOptions,\n): ControlsLayout | null {\n const pathname = usePathname();\n const definitionPath = config && \"path\" in config ? config.path : undefined;\n const path = options?.path || definitionPath || pathname;\n\n const entries = useMemo(() => {\n if (!config) return null;\n if (Array.isArray(config) || \"side\" in config) return config;\n const { defaultProps = {}, left, right, ...page } = config;\n const resolved = normalizePageControls({\n ...page,\n left: resolveSlot(left, defaultProps),\n path,\n right: resolveSlot(right, defaultProps),\n });\n return resolved?.length ? resolved : null;\n }, [config, path]);\n\n useControlsRegistration(entries, options);\n return useControlsLayout();\n}\n\nconst emptySubscribe = () => () => {};\n\nexport function useControlsModel() {\n const portalTarget = useSyncExternalStore(\n emptySubscribe,\n () => (typeof document !== \"undefined\" ? document.body : null),\n () => null,\n );\n const layout = useControlsLayout();\n const pathname = usePathname();\n const entries = useRegistryEntries<\"controls\", ControlEntry>(\"controls\");\n const { left, right } = useMemo(\n () => resolveControlsPairs(entries, pathname),\n [entries, pathname],\n );\n\n const theme = useModuleTheme(controlsTheme);\n\n return { portalTarget, layout, left, right, theme };\n}\n","\"use client\";\n\nimport { Fragment, type CSSProperties } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { type ControlsSideProps } from \"./types\";\nimport { useControlsModel } from \"./hooks\";\n\nfunction ControlsSide({ controls, geometry, side, theme }: ControlsSideProps) {\n if (controls.length === 0 || !geometry.height || !geometry.maxWidth) {\n return null;\n }\n const positionStyle: CSSProperties =\n side === \"left\"\n ? {\n bottom: geometry.bottom,\n maxWidth: geometry.maxWidth,\n right: geometry.right,\n }\n : {\n bottom: geometry.bottom,\n left: geometry.left,\n maxWidth: geometry.maxWidth,\n };\n return (\n <aside\n aria-label={`${side === \"left\" ? \"Left\" : \"Right\"} page controls`}\n className={theme.slots.rail}\n style={{ ...theme.styles.rail, ...positionStyle }}\n >\n <div\n data-side={side}\n className={theme.slots.stack}\n style={\n {\n ...theme.styles.stack,\n \"--controls-height\": `${geometry.height}px`,\n } as CSSProperties\n }\n >\n {controls.map(({ content, id }, index) => (\n <Fragment key={id || index}>{content}</Fragment>\n ))}\n </div>\n </aside>\n );\n}\n\nexport function Controls() {\n const { portalTarget, layout, left, right, theme } = useControlsModel();\n if (!portalTarget || !layout || layout.isHidden || left.length === 0) {\n return null;\n }\n return createPortal(\n <>\n <ControlsSide\n controls={left}\n geometry={{\n ...layout.left,\n bottom: layout.bottom,\n height: layout.height,\n }}\n side=\"left\"\n theme={theme}\n />\n <ControlsSide\n controls={right}\n geometry={{\n ...layout.right,\n bottom: layout.bottom,\n height: layout.height,\n }}\n side=\"right\"\n theme={theme}\n />\n </>,\n portalTarget,\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n defineModule,\n type PageConfig,\n type PageModuleApi,\n} from \"@/kernel\";\nimport { useControls } from \"./hooks\";\nimport { normalizePageControls, validateControlEntry } from \"./utils\";\nimport { Controls } from \"./overlay\";\nimport {\n type ControlsPageApi,\n type DefinedControls,\n type DefineControlsOptions,\n type ControlsPageConfig,\n type PageControlEntry,\n} from \"./types\";\n\nfunction selectPageControls(config: PageConfig) {\n return normalizePageControls(config.controls);\n}\n\nfunction useControlsPage(\n _slice: PageControlEntry[] | null,\n page: PageModuleApi,\n): ControlsPageApi {\n return useMemo(\n () => ({\n set: (controls: ControlsPageConfig | null) => page.set({ controls }),\n }),\n [page],\n );\n}\n\nexport function defineControls(\n definition: DefineControlsOptions = {},\n): DefinedControls {\n const { id = \"controls\", order = 0 } = definition;\n\n return Object.freeze({\n config: definition,\n id,\n order,\n use: function useDefinedControls(props = {}, options = {}) {\n return useControls(\n {\n ...definition,\n defaultProps: { ...definition.defaultProps, ...props },\n },\n options,\n );\n },\n });\n}\n\nexport const controlsModule = defineModule({\n id: \"controls\",\n Overlay: Controls,\n registry: {\n keyPolicy: \"named\",\n lifecycle: \"immediate\",\n validate: validateControlEntry,\n },\n page: {\n select: selectPageControls,\n entries: (entry: PageControlEntry, { pathname }) => {\n const path = pathname || \"/\";\n return [{ key: `${path}::${entry.id}`, value: { ...entry, path } }];\n },\n use: useControlsPage,\n },\n});\n\ndeclare module \"@omerdlw/base-framework/kernel\" {\n interface CoreModules {\n controls: typeof controlsModule;\n }\n interface PageConfig {\n controls?: ControlsPageConfig | null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/kernel/constants.ts","../../../src/kernel/context-registry.ts","../../../src/utils/string.ts","../../../src/utils/dom.ts","../../../src/utils/number.ts","../../../src/utils/object.ts","../../../src/utils/report.ts","../../../src/utils/store.ts","../../../src/kernel/utils.ts","../../../src/kernel/schema.ts","../../../src/hooks/use-required-context.ts","../../../src/hooks/use-isomorphic-layout-effect.ts","../../../src/kernel/provider.tsx","../../../src/kernel/installed.ts","../../../src/kernel/handlers.ts","../../../src/kernel/hooks.ts","../../../src/kernel/module.tsx","../../../src/kernel/adapters.ts","../../../src/theme.tsx","../../../src/modules/controls/constants.ts","../../../src/modules/controls/entries.ts","../../../src/modules/controls/layout.ts","../../../src/modules/controls/hooks.ts","../../../src/modules/controls/overlay.tsx","../../../src/modules/controls/module.tsx"],"names":["use","hasChanged","stabilizedValue","useState","useMemo","isValidElement","createElement","useEffect","usePathname","useSyncExternalStore","jsx","Fragment","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n RegistryLifecycle,\n RegistryScopeKind,\n RegistrySource,\n RegistryValidationMode,\n} from \"./types\";\n\nexport const DEFAULT_SOURCE: RegistrySource = \"dynamic\";\n\nexport const REGISTRY_SOURCES: Readonly<Record<string, RegistrySource>> =\n Object.freeze({\n STATIC: \"static\",\n DYNAMIC: \"dynamic\",\n USER: \"user\",\n });\n\nexport const REGISTRY_LIFECYCLES: Readonly<Record<string, RegistryLifecycle>> =\n Object.freeze({\n IMMEDIATE: \"immediate\",\n GRACEFUL: \"graceful\",\n PERSISTENT: \"persistent\",\n ROUTE: \"route\",\n });\n\nexport const REGISTRY_VALIDATION_MODES: Readonly<\n Record<string, RegistryValidationMode>\n> = Object.freeze({\n WARN: \"warn\",\n STRICT: \"strict\",\n});\n\nexport const REGISTRY_METADATA_KEYS: readonly string[] = Object.freeze([\n \"cleanup\",\n \"cleanupDelayMs\",\n \"instanceId\",\n \"lifecycle\",\n \"priority\",\n \"source\",\n \"scope\",\n \"validation\",\n]);\n\nexport const REGISTRY_SOURCE_PRIORITY: Readonly<Record<string, number>> =\n Object.freeze({\n [REGISTRY_SOURCES.STATIC]: 100,\n [REGISTRY_SOURCES.DYNAMIC]: 200,\n [REGISTRY_SOURCES.USER]: 300,\n });\n\nexport const REGISTRY_SOURCE_RANK: Readonly<Record<string, number>> =\n Object.freeze({\n [REGISTRY_SOURCES.STATIC]: 10,\n [REGISTRY_SOURCES.DYNAMIC]: 20,\n [REGISTRY_SOURCES.USER]: 30,\n });\n\nexport const REGISTRY_LIFECYCLE_VALUES: ReadonlySet<string> = new Set(\n Object.values(REGISTRY_LIFECYCLES),\n);\n\nexport const REGISTRY_METADATA_KEY_SET: ReadonlySet<string> = new Set(\n REGISTRY_METADATA_KEYS,\n);\n\nconst REGISTRY_SCOPE_KINDS: Readonly<Record<string, RegistryScopeKind>> =\n Object.freeze({\n APP: \"app\",\n SESSION: \"session\",\n ROUTE: \"route\",\n INSTANCE: \"instance\",\n WORKSPACE: \"workspace\",\n });\n\nexport const DEFAULT_REGISTRY_SCOPE: RegistryScopeKind =\n REGISTRY_SCOPE_KINDS.APP;\n","import { createContext, type Context } from \"react\";\n\nexport function getOrCreateGlobalContext<T>(\n name: string,\n defaultValue: T,\n): Context<T> {\n const sym = Symbol.for(`@omerdlw/base-framework/context/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T>>;\n if (!store[sym]) {\n store[sym] = createContext<T>(defaultValue);\n }\n return store[sym];\n}\n","export function trimToNull(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n const trimmed = String(value).trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nexport function stripTrailingSlash(url: unknown): string {\n if (typeof url !== \"string\") return \"\";\n return url.replace(/\\/+$/, \"\");\n}\n\nexport function normalizePath(path: unknown): string {\n const trimmed = trimToNull(path);\n if (!trimmed) return \"\";\n if (trimmed === \"/\") return \"/\";\n return stripTrailingSlash(trimmed);\n}\n\nexport function isImageIconSource(icon: unknown): boolean {\n return (\n typeof icon === \"string\" &&\n (icon.startsWith(\"http://\") ||\n icon.startsWith(\"https://\") ||\n icon.startsWith(\"/\") ||\n icon.startsWith(\"data:image/\"))\n );\n}\n","import { stripTrailingSlash } from \"./string\";\n\nexport const isBrowser: boolean = typeof window !== \"undefined\";\n\nlet globalScrollLockCount = 0;\n\nlet globalScrollLockStyles: {\n bodyOverflow: string;\n bodyOverscrollBehavior: string;\n htmlOverflow: string;\n htmlOverscrollBehavior: string;\n} | null = null;\n\nexport function acquireGlobalScrollLock(): () => void {\n if (typeof document === \"undefined\") return () => {};\n\n if (globalScrollLockCount === 0) {\n globalScrollLockStyles = {\n bodyOverflow: document.body.style.overflow,\n bodyOverscrollBehavior: document.body.style.overscrollBehavior,\n htmlOverflow: document.documentElement.style.overflow,\n htmlOverscrollBehavior: document.documentElement.style.overscrollBehavior,\n };\n }\n\n globalScrollLockCount += 1;\n document.body.style.overflow = \"hidden\";\n document.body.style.overscrollBehavior = \"none\";\n document.documentElement.style.overflow = \"hidden\";\n document.documentElement.style.overscrollBehavior = \"none\";\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n globalScrollLockCount = Math.max(0, globalScrollLockCount - 1);\n if (globalScrollLockCount > 0 || !globalScrollLockStyles) return;\n\n document.body.style.overflow = globalScrollLockStyles.bodyOverflow;\n document.body.style.overscrollBehavior =\n globalScrollLockStyles.bodyOverscrollBehavior;\n document.documentElement.style.overflow =\n globalScrollLockStyles.htmlOverflow;\n document.documentElement.style.overscrollBehavior =\n globalScrollLockStyles.htmlOverscrollBehavior;\n globalScrollLockStyles = null;\n };\n}\n\nexport function getSiteUrl(): string {\n return stripTrailingSlash(\n process.env.NEXT_PUBLIC_SITE_URL || \"http://localhost:3000\",\n );\n}\n\nexport function getCurrentPath(): string {\n if (!isBrowser) return \"/\";\n return `${window.location.pathname}${window.location.search}`;\n}\n\n","export function clamp(value: unknown, min: number, max: number): number {\n const num = Number(value);\n const finite = Number.isFinite(num) ? num : min;\n return Math.min(Math.max(finite, min), max);\n}\n\nexport function toFiniteNumber(value: unknown, fallback: number = 0): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isPlainObject(\n value: unknown,\n): value is Record<string, unknown> {\n if (!isObject(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nexport function shallowEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (\n typeof a !== \"object\" ||\n a === null ||\n typeof b !== \"object\" ||\n b === null\n ) {\n return false;\n }\n\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (\n !Object.prototype.hasOwnProperty.call(b, key) ||\n !Object.is(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n )\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function toArray<T>(value: T | T[] | null | undefined): T[] {\n if (value === null || value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n}\n","export type ReportLevel = \"error\" | \"warn\";\n\nexport type ReportSink = (\n scope: string,\n error: unknown,\n level: ReportLevel,\n) => void;\n\nlet sink: ReportSink | null = null;\n\nexport function report(\n scope: string,\n error: unknown,\n level: ReportLevel = \"error\",\n): void {\n if (sink) {\n try {\n sink(scope, error, level);\n return;\n } catch {}\n }\n\n if (process.env.NODE_ENV === \"production\" && typeof window !== \"undefined\") {\n return;\n }\n console[level](`[${scope}]`, error);\n}\n\nexport function setReportSink(next: ReportSink): () => void {\n sink = next;\n return () => {\n if (sink === next) sink = null;\n };\n}\n","import { report } from \"./report\";\nexport interface ExternalStore<TState = unknown> {\n readonly getSnapshot: () => TState;\n readonly publish: (\n nextState: TState | ((currentState: TState) => TState),\n ) => boolean;\n readonly setState: (\n updater: Partial<TState> | ((currentState: TState) => TState),\n ) => boolean;\n readonly subscribe: (listener: () => void) => () => void;\n}\n\nfunction freezeStoreSnapshot<TState>(state: TState): TState {\n if (\n process.env.NODE_ENV === \"production\" ||\n !state ||\n typeof state !== \"object\"\n ) {\n return state;\n }\n\n const seen = new WeakSet<object>();\n const freeze = (value: object): void => {\n if (seen.has(value) || Object.isFrozen(value)) return;\n seen.add(value);\n\n const prototype = Object.getPrototypeOf(value);\n if (\n Array.isArray(value) ||\n prototype === Object.prototype ||\n prototype === null\n ) {\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor && \"value\" in descriptor && descriptor.value !== null) {\n if (typeof descriptor.value === \"object\") freeze(descriptor.value);\n }\n }\n }\n\n Object.freeze(value);\n };\n\n freeze(state);\n return state;\n}\n\nexport interface CreateStoreOptions {\n freezeSnapshots?: boolean;\n}\n\nexport function createStore<TState = Record<string, unknown>>(\n initialState: TState,\n { freezeSnapshots = true }: CreateStoreOptions = {},\n): ExternalStore<TState> {\n const listeners = new Set<() => void>();\n const prepare = freezeSnapshots\n ? freezeStoreSnapshot\n : <T>(state: T): T => state;\n let snapshot = prepare(initialState);\n\n const publish = (\n nextStateOrUpdater: TState | ((currentState: TState) => TState),\n ): boolean => {\n const nextState =\n typeof nextStateOrUpdater === \"function\"\n ? (nextStateOrUpdater as (currentState: TState) => TState)(snapshot)\n : nextStateOrUpdater;\n if (Object.is(snapshot, nextState)) return false;\n snapshot = prepare(nextState);\n\n for (const listener of listeners) {\n try {\n listener();\n } catch (error) {\n report(\"CoreStore subscriber\", error, \"warn\");\n }\n }\n return true;\n };\n\n const setState = (\n updater: Partial<TState> | ((currentState: TState) => TState),\n ): boolean => {\n if (typeof updater === \"function\") {\n return publish(updater as (currentState: TState) => TState);\n }\n if (\n snapshot &&\n typeof snapshot === \"object\" &&\n updater &&\n typeof updater === \"object\"\n ) {\n return publish({ ...snapshot, ...updater });\n }\n return publish(updater as TState);\n };\n\n return Object.freeze({\n getSnapshot() {\n return snapshot;\n },\n publish,\n setState,\n subscribe(listener: () => void) {\n if (typeof listener !== \"function\") return () => {};\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n });\n}\n","import {\n DEFAULT_REGISTRY_SCOPE,\n DEFAULT_SOURCE,\n REGISTRY_SOURCE_RANK,\n} from \"./constants\";\nimport type { RegistryMetadata } from \"./types\";\nimport { isObject, trimToNull } from \"@/utils\";\n\nexport function hasOwnProperty(target: object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(target, key);\n}\n\nexport function parseFiniteNumber(value: unknown): number | null {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nexport function getValidString(\n value: unknown,\n fallback: string | null = null,\n): string | null {\n return trimToNull(value) ?? fallback;\n}\n\nexport function resolveInstanceId(value: unknown): string | null {\n return isObject(value) && typeof value.instanceId === \"string\"\n ? value.instanceId\n : null;\n}\n\nexport function getSourceRank(source: string): number {\n return REGISTRY_SOURCE_RANK[source] ?? 0;\n}\n\nexport function resolveRegisterInput(\n sourceOrOptions: unknown,\n optionsArg?: unknown,\n): { source: string; options: RegistryMetadata } {\n if (typeof sourceOrOptions === \"string\") {\n return {\n source: sourceOrOptions,\n options: isObject(optionsArg) ? optionsArg : {},\n };\n }\n if (isObject(sourceOrOptions)) {\n return {\n source:\n typeof sourceOrOptions.source === \"string\"\n ? sourceOrOptions.source\n : DEFAULT_SOURCE,\n options: sourceOrOptions,\n };\n }\n return {\n source: DEFAULT_SOURCE,\n options: isObject(optionsArg) ? optionsArg : {},\n };\n}\n\nexport function resolveScope(\n options: RegistryMetadata | null | undefined,\n): string {\n return typeof options?.scope === \"string\" && options.scope.trim()\n ? options.scope.trim()\n : DEFAULT_REGISTRY_SCOPE;\n}\n\nexport function resolveUnregisterInput(sourceOrOptions: unknown): {\n instanceId: string | null;\n scope: string | null;\n source: string;\n} {\n if (typeof sourceOrOptions === \"string\") {\n return { instanceId: null, scope: null, source: sourceOrOptions };\n }\n if (isObject(sourceOrOptions)) {\n return {\n instanceId: resolveInstanceId(sourceOrOptions),\n scope:\n typeof sourceOrOptions.scope === \"string\" &&\n sourceOrOptions.scope.trim()\n ? sourceOrOptions.scope.trim()\n : null,\n source:\n typeof sourceOrOptions.source === \"string\"\n ? sourceOrOptions.source\n : DEFAULT_SOURCE,\n };\n }\n return { instanceId: null, scope: null, source: DEFAULT_SOURCE };\n}\n\nexport function mergeModuleConfigs<T extends object>(\n base: T,\n patch: Partial<T>,\n): T {\n const source = base as Record<string, unknown>;\n const changes = patch as Record<string, unknown>;\n const result: Record<string, unknown> = { ...source };\n Object.keys(changes).forEach((key) => {\n const baseVal = source[key];\n const patchVal = changes[key];\n if (\n baseVal &&\n typeof baseVal === \"object\" &&\n !Array.isArray(baseVal) &&\n patchVal &&\n typeof patchVal === \"object\" &&\n !Array.isArray(patchVal)\n ) {\n result[key] = { ...baseVal, ...patchVal };\n } else {\n result[key] = patchVal;\n }\n });\n return result as T;\n}\n","import {\n DEFAULT_SOURCE,\n REGISTRY_LIFECYCLE_VALUES,\n REGISTRY_LIFECYCLES,\n REGISTRY_METADATA_KEY_SET,\n REGISTRY_METADATA_KEYS,\n REGISTRY_VALIDATION_MODES,\n} from \"./constants\";\nimport { isObject, isPlainObject } from \"@/utils\";\nimport { getValidString, parseFiniteNumber } from \"./utils\";\nimport type {\n NormalizedRegistryMetadata,\n RegistryDefinitions,\n RegistryLifecycle,\n RegistryMetadata,\n RegistryValidationMode,\n ValidationResult,\n} from \"./types\";\n\nfunction resolveLifecycle(\n metadata: RegistryMetadata | null | undefined,\n fallback: RegistryLifecycle | null,\n): RegistryLifecycle | null {\n const lifecycle = metadata?.lifecycle ?? metadata?.cleanup;\n return lifecycle && REGISTRY_LIFECYCLE_VALUES.has(lifecycle)\n ? lifecycle\n : fallback;\n}\n\nexport function validateRegistryMetadata(metadata: unknown): ValidationResult {\n if (metadata === undefined || metadata === null)\n return { issues: [], valid: true };\n if (!isObject(metadata))\n return { issues: [\"registry metadata must be an object\"], valid: false };\n\n const issues: string[] = [];\n\n Object.keys(metadata).forEach((key) => {\n if (!REGISTRY_METADATA_KEY_SET.has(key))\n issues.push(`unknown registry metadata field: ${key}`);\n });\n\n if (metadata.source !== undefined && !getValidString(metadata.source))\n issues.push(\"source must be a non-empty string\");\n if (metadata.instanceId !== undefined && !getValidString(metadata.instanceId))\n issues.push(\"instanceId must be a non-empty string\");\n if (metadata.scope !== undefined && !getValidString(metadata.scope))\n issues.push(\"scope must be a non-empty string\");\n if (\n metadata.priority !== undefined &&\n parseFiniteNumber(metadata.priority) === null\n )\n issues.push(\"priority must be a finite number\");\n\n if (metadata.cleanupDelayMs !== undefined) {\n const delay = parseFiniteNumber(metadata.cleanupDelayMs);\n if (delay === null || delay < 0)\n issues.push(\"cleanupDelayMs must be a non-negative finite number\");\n }\n\n const lifecycle = metadata.lifecycle ?? metadata.cleanup;\n if (\n lifecycle !== undefined &&\n !REGISTRY_LIFECYCLE_VALUES.has(String(lifecycle))\n ) {\n issues.push(\n `lifecycle must be one of: ${[...REGISTRY_LIFECYCLE_VALUES].join(\", \")}`,\n );\n }\n\n if (\n metadata.validation !== undefined &&\n !Object.values<unknown>(REGISTRY_VALIDATION_MODES).includes(\n metadata.validation,\n )\n ) {\n issues.push(\n `validation must be one of: ${Object.values(REGISTRY_VALIDATION_MODES).join(\", \")}`,\n );\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function validateRegistryKey(\n type: string,\n key: unknown,\n definitions: RegistryDefinitions,\n): ValidationResult {\n const definition = definitions.get(type);\n const issues: string[] = [];\n\n if (!definition) issues.push(`unknown registry type: ${String(type)}`);\n if (!getValidString(key))\n return {\n issues: [...issues, \"key must be a non-empty string\"],\n valid: false,\n };\n\n const normalizedKey = String(key).trim();\n\n if (definition?.keyPolicy === \"singleton\") {\n const expectedKey = definition.singletonKey;\n if (expectedKey && normalizedKey !== expectedKey)\n issues.push(`${type} key must be ${expectedKey}`);\n } else if (definition?.keyPolicy === \"path\") {\n if (!normalizedKey.startsWith(\"/\"))\n issues.push(`${type} key must be an absolute path`);\n } else if (definition?.keyPolicy === \"route\") {\n if (\n !normalizedKey.startsWith(\"/\") &&\n !definition.reservedKeys?.includes(normalizedKey)\n ) {\n issues.push(`${type} key must be a route path or a reserved route key`);\n }\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function validateRegistryValue(\n type: string,\n key: unknown,\n value: unknown,\n definitions: RegistryDefinitions,\n): ValidationResult {\n const definition = definitions.get(type);\n const issues = [...validateRegistryKey(type, key, definitions).issues];\n const valueKind = definition?.valueKind ?? \"object\";\n\n if (definition && valueKind === \"object\" && !isPlainObject(value)) {\n issues.push(`${type} values must be plain objects`);\n }\n if (\n definition &&\n valueKind === \"component\" &&\n typeof value !== \"function\" &&\n !isPlainObject(value)\n ) {\n issues.push(\n `${type} values must be component functions or component objects`,\n );\n }\n\n const validation = definition?.validate?.(value);\n if (validation && !validation.valid && Array.isArray(validation.issues)) {\n issues.push(...validation.issues);\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function normalizeRegistryMetadata(\n metadata: unknown,\n {\n defaultCleanupDelayMs = null,\n defaultLifecycle = null,\n defaultSource = DEFAULT_SOURCE,\n }: {\n defaultCleanupDelayMs?: number | null;\n defaultLifecycle?: RegistryLifecycle | null;\n defaultSource?: string;\n } = {},\n): NormalizedRegistryMetadata {\n const registryMeta = isObject(metadata) ? metadata : {};\n\n const normalizedDefaultDelay = parseFiniteNumber(defaultCleanupDelayMs);\n const fallbackCleanupDelayMs =\n normalizedDefaultDelay !== null && normalizedDefaultDelay >= 0\n ? normalizedDefaultDelay\n : null;\n const fallbackLifecycle =\n defaultLifecycle && REGISTRY_LIFECYCLE_VALUES.has(defaultLifecycle)\n ? defaultLifecycle\n : null;\n\n const source =\n getValidString(registryMeta.source) ||\n getValidString(defaultSource, DEFAULT_SOURCE) ||\n DEFAULT_SOURCE;\n const scope = getValidString(registryMeta.scope);\n const priority = parseFiniteNumber(registryMeta.priority);\n const lifecycle = resolveLifecycle(registryMeta, fallbackLifecycle);\n const validation = isValidationMode(registryMeta.validation)\n ? registryMeta.validation\n : null;\n\n const cleanupDelayCandidate = parseFiniteNumber(registryMeta.cleanupDelayMs);\n let cleanupDelayMs =\n cleanupDelayCandidate !== null && cleanupDelayCandidate >= 0\n ? cleanupDelayCandidate\n : fallbackCleanupDelayMs;\n\n if (lifecycle === REGISTRY_LIFECYCLES.IMMEDIATE) {\n cleanupDelayMs = 0;\n } else if (\n (lifecycle === REGISTRY_LIFECYCLES.GRACEFUL ||\n lifecycle === REGISTRY_LIFECYCLES.ROUTE) &&\n cleanupDelayMs === null\n ) {\n cleanupDelayMs = fallbackCleanupDelayMs;\n }\n\n return {\n cleanupDelayMs,\n lifecycle,\n priority,\n registerOptions: {\n ...(priority !== null && { priority }),\n ...(validation === REGISTRY_VALIDATION_MODES.STRICT && { validation }),\n ...(scope && { scope }),\n },\n source,\n ...(scope && { scope }),\n ...(validation && { validation }),\n };\n}\n\nfunction isValidationMode(value: unknown): value is RegistryValidationMode {\n return Object.values<unknown>(REGISTRY_VALIDATION_MODES).includes(value);\n}\n\nexport function pickRegistryMetadata(options: unknown): RegistryMetadata {\n if (!isObject(options)) return {};\n return Object.fromEntries(\n REGISTRY_METADATA_KEYS.filter((key) => options[key] !== undefined).map(\n (key) => [key, options[key]],\n ),\n );\n}\n","\"use client\";\n\nimport { use, type Context } from \"react\";\n\nexport function useRequiredContext<T>(\n context: Context<T | null>,\n hookName: string,\n providerName: string,\n): T {\n const value = use(context);\n if (value === null) {\n throw new Error(`${hookName} must be used within ${providerName}`);\n }\n return value;\n}\n","\"use client\";\n\nimport { useEffect, useLayoutEffect } from \"react\";\nimport { isBrowser } from \"../utils\";\n\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n","\"use client\";\n\nimport {\n useCallback,\n useMemo,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport { useRequiredContext } from \"@/hooks\";\nimport { getOrCreateGlobalContext } from \"./context-registry\";\n\nimport type {\n RegistryDefinitions,\n RegistrySchema,\n RegistryStore,\n} from \"./types\";\nimport { createRegistryStore, type InitialRegistryEntries } from \"./store\";\n\ntype RegistryValueOf<K extends string> = K extends keyof RegistrySchema\n ? RegistrySchema[K]\n : unknown;\n\ninterface RegistryContextValue {\n actions: Pick<\n RegistryStore,\n \"batch\" | \"register\" | \"transaction\" | \"unregister\"\n >;\n subscription: Pick<\n RegistryStore,\n \"getEntriesSnapshot\" | \"getSnapshot\" | \"subscribe\"\n >;\n}\n\nconst RegistryContext = getOrCreateGlobalContext<RegistryContextValue | null>(\n\n \"RegistryContext\",\n null,\n);\n\nexport function RegistryProvider({\n children,\n definitions,\n initialEntries = [],\n}: {\n children?: ReactNode;\n definitions?: RegistryDefinitions;\n initialEntries?: InitialRegistryEntries;\n}) {\n const [store] = useState(() =>\n createRegistryStore(initialEntries, definitions),\n );\n\n const contextValue = useMemo(\n () => ({\n actions: {\n batch: store.batch,\n register: store.register,\n transaction: store.transaction,\n unregister: store.unregister,\n },\n subscription: {\n getEntriesSnapshot: store.getEntriesSnapshot,\n getSnapshot: store.getSnapshot,\n subscribe: store.subscribe,\n },\n }),\n [store],\n );\n\n return <RegistryContext value={contextValue}>{children}</RegistryContext>;\n}\n\nexport function useRegistryActions(): RegistryContextValue[\"actions\"] {\n return useRequiredContext(\n RegistryContext,\n \"useRegistryActions\",\n \"RegistryProvider\",\n ).actions;\n}\n\nfunction useRegistrySubscription(): RegistryContextValue[\"subscription\"] {\n return useRequiredContext(\n RegistryContext,\n \"useRegistrySubscription\",\n \"RegistryProvider\",\n ).subscription;\n}\n\nexport function useRegistryValue<\n K extends string = string,\n T = RegistryValueOf<K>,\n>(type: K, key: string): T | undefined {\n const { getSnapshot, subscribe } = useRegistrySubscription();\n\n const subscribeToKey = useCallback(\n (listener: () => void) => subscribe(type, key, listener),\n [key, subscribe, type],\n );\n const getValue = useCallback(\n () => getSnapshot<K, T>(type, key),\n [getSnapshot, key, type],\n );\n\n return useSyncExternalStore(subscribeToKey, getValue, getValue);\n}\n\nexport function useRegistryEntries<\n K extends string = string,\n T = RegistryValueOf<K>,\n>(type: K): Record<string, T> {\n const { getEntriesSnapshot, subscribe } = useRegistrySubscription();\n\n const subscribeToType = useCallback(\n (listener: () => void) => subscribe(type, null, listener),\n [subscribe, type],\n );\n const getEntries = useCallback(\n () => getEntriesSnapshot<K, T>(type),\n [getEntriesSnapshot, type],\n );\n\n return useSyncExternalStore(subscribeToType, getEntries, getEntries);\n}\n","\"use client\";\n\nimport { use, type ComponentType, type ReactNode } from \"react\";\nimport { isObject } from \"@/utils\";\nimport { getOrCreateGlobalContext } from \"./context-registry\";\nimport type {\n AnyCoreModule,\n PageConfig,\n RegistryDefinition,\n RegistryDefinitions,\n RegistryMetadata,\n} from \"./types\";\n\nexport type BoundaryComponent = ComponentType<{\n children?: ReactNode;\n name?: string;\n}>;\n\nexport interface ModuleHostValue {\n Boundary: BoundaryComponent;\n byId: ReadonlyMap<string, AnyCoreModule>;\n definitions: RegistryDefinitions;\n modules: readonly AnyCoreModule[];\n}\n\nexport const EMPTY_MODULES: readonly AnyCoreModule[] = Object.freeze([]);\n\nexport const PassthroughBoundary: BoundaryComponent = ({ children }) =>\n children;\n\nexport const ModuleHostContext =\n getOrCreateGlobalContext<ModuleHostValue | null>(\"ModuleHostContext\", null);\n\n\nexport function selectModuleSlice(\n coreModule: AnyCoreModule,\n config: PageConfig,\n): unknown {\n const slice = coreModule.page?.select\n ? coreModule.page.select(config)\n : (config as Record<string, unknown>)[coreModule.id];\n return slice ?? null;\n}\n\nexport function createModulePayload(\n modules: readonly AnyCoreModule[],\n config: PageConfig,\n metadata: RegistryMetadata = {},\n): PageConfig | null {\n const payload: Record<string, unknown> = {};\n let hasSlices = false;\n for (const coreModule of modules) {\n if (!coreModule.page?.entries) continue;\n const slice = selectModuleSlice(coreModule, config);\n if (slice === null) continue;\n payload[coreModule.id] = slice;\n hasSlices = true;\n }\n if (!hasSlices) return null;\n return {\n ...payload,\n registry: {\n ...metadata,\n ...(isObject(config.registry) ? config.registry : {}),\n },\n } as PageConfig;\n}\n\nconst MODULE_ID_PATTERN = /^[a-z][a-zA-Z0-9]*$/;\n\nexport function sortModules(\n modules: readonly AnyCoreModule[],\n): AnyCoreModule[] {\n const byId = new Map<string, AnyCoreModule>();\n for (const coreModule of modules) {\n if (!MODULE_ID_PATTERN.test(coreModule.id)) {\n throw new Error(\n `[Core] Invalid module id \"${coreModule.id}\": use a camelCase name such as \"contextMenu\".`,\n );\n }\n if (byId.has(coreModule.id)) {\n throw new Error(`[Core] Module \"${coreModule.id}\" is installed twice.`);\n }\n byId.set(coreModule.id, coreModule);\n }\n\n const sorted: AnyCoreModule[] = [];\n const state = new Map<string, \"visiting\" | \"done\">();\n const visit = (coreModule: AnyCoreModule, path: string[]) => {\n const current = state.get(coreModule.id);\n if (current === \"done\") return;\n if (current === \"visiting\") {\n throw new Error(\n `[Core] Module dependency cycle: ${[...path, coreModule.id].join(\" -> \")}`,\n );\n }\n state.set(coreModule.id, \"visiting\");\n for (const id of coreModule.uses ?? []) {\n const dependency = byId.get(id);\n if (dependency) visit(dependency, [...path, coreModule.id]);\n }\n state.set(coreModule.id, \"done\");\n sorted.push(coreModule);\n };\n modules.forEach((coreModule) => visit(coreModule, []));\n return sorted;\n}\n\nexport function createModuleRegistryDefinitions(\n modules: readonly AnyCoreModule[],\n): RegistryDefinitions {\n const definitions = new Map<string, RegistryDefinition>();\n for (const coreModule of modules) {\n if (coreModule.registry)\n definitions.set(coreModule.id, coreModule.registry);\n }\n return definitions;\n}\n\nexport function useInstalledModules(): readonly AnyCoreModule[] {\n return use(ModuleHostContext)?.modules ?? EMPTY_MODULES;\n}\n","import { DEFAULT_SOURCE, REGISTRY_LIFECYCLES } from \"./constants\";\nimport {\n normalizeRegistryMetadata,\n validateRegistryMetadata,\n} from \"./schema\";\nimport { isObject, report } from \"@/utils\";\nimport type {\n AnyCoreModule,\n PageConfig,\n RegistrationEntry,\n RegistryApplyContext,\n RegistryCleanupTimer,\n RegistryMetadata,\n RegistryQueue,\n} from \"./types\";\n\ntype CleanupScope = Map<string, RegistryCleanupTimer>;\n\nfunction isPersistentLifecycle(lifecycle: unknown): boolean {\n return lifecycle === REGISTRY_LIFECYCLES.PERSISTENT;\n}\n\nfunction runRegistrationBatch(\n context: RegistryApplyContext,\n executor: (queue: RegistryQueue) => void,\n): number | void {\n return typeof context.batch === \"function\"\n ? context.batch(executor)\n : executor(context);\n}\n\nfunction createEntryCleanupKey(\n type: string,\n key: string,\n source: string,\n instanceId: string | null,\n scope: string | undefined,\n): string {\n return JSON.stringify([\n \"entry\",\n type,\n key,\n scope ?? null,\n source,\n instanceId,\n ]);\n}\n\nfunction getCleanupScope(\n context: RegistryApplyContext | null | undefined,\n): CleanupScope {\n return context?.cleanupScope || new Map();\n}\n\nfunction clearCleanupTimer(scope: CleanupScope, cleanupKey: string): void {\n const lifecycle = scope.get(cleanupKey);\n if (!lifecycle) return;\n lifecycle.cancelled = true;\n if (lifecycle.timerId !== null) clearTimeout(lifecycle.timerId);\n scope.delete(cleanupKey);\n}\n\nfunction scheduleCleanup(\n scope: CleanupScope,\n cleanupKey: string,\n callback: () => void,\n delayMs: number,\n): void {\n clearCleanupTimer(scope, cleanupKey);\n const lifecycle: RegistryCleanupTimer = {\n cancelled: false,\n timerId: null,\n };\n\n lifecycle.timerId = setTimeout(() => {\n if (lifecycle.cancelled || scope.get(cleanupKey) !== lifecycle) return;\n scope.delete(cleanupKey);\n callback();\n }, delayMs);\n\n scope.set(cleanupKey, lifecycle);\n}\n\ntype ModuleRegistration = RegistrationEntry & {\n cleanupKey: string;\n type: string;\n};\n\nfunction collectModuleRegistrations(\n coreModule: AnyCoreModule,\n slice: unknown,\n pageMetadata: RegistryMetadata,\n context: RegistryApplyContext,\n): ModuleRegistration[] {\n const definition = coreModule.registry;\n const toEntries = coreModule.page?.entries;\n if (!definition || !toEntries || slice == null || slice === false) return [];\n\n const type = coreModule.id;\n const items = Array.isArray(slice) ? slice : [slice];\n const registrations: ModuleRegistration[] = [];\n\n for (const item of items) {\n if (item == null || item === false) continue;\n const itemMetadata =\n isObject(item) && isObject(item.registry) ? item.registry : {};\n const metadata = { ...pageMetadata, ...itemMetadata };\n if (\n metadata.validation === \"strict\" &&\n !validateRegistryMetadata(metadata).valid\n ) {\n continue;\n }\n\n const payload = isObject(item)\n ? Object.fromEntries(\n Object.entries(item).filter(([key]) => key !== \"registry\"),\n )\n : item;\n const { cleanupDelayMs, lifecycle, registerOptions, scope, source } =\n normalizeRegistryMetadata(metadata, {\n defaultCleanupDelayMs: definition.cleanupDelayMs ?? null,\n defaultLifecycle: definition.lifecycle,\n defaultSource: DEFAULT_SOURCE,\n });\n\n for (const { key, value } of toEntries(payload, context) ?? []) {\n const validation = definition.validate?.(value);\n if (validation && !validation.valid) {\n report(`Registry ${type} config is invalid`, validation.issues, \"warn\");\n continue;\n }\n registrations.push({\n cleanupDelayMs,\n cleanupKey: createEntryCleanupKey(\n type,\n key,\n source,\n context.instanceId,\n scope,\n ),\n key,\n lifecycle,\n registerOptions,\n scope,\n source,\n type,\n value,\n });\n }\n }\n return registrations;\n}\n\nconst NO_CLEANUP = () => {};\n\nexport function applyRegistryConfig(\n config: PageConfig | null | undefined,\n context: RegistryApplyContext,\n): () => void {\n const modules = context.modules ?? [];\n if (!config || modules.length === 0) return NO_CLEANUP;\n const pageMetadata = isObject(config.registry) ? config.registry : {};\n const slices = config as Record<string, unknown>;\n\n const registrations = modules.flatMap((coreModule) => {\n try {\n return collectModuleRegistrations(\n coreModule,\n slices[coreModule.id],\n pageMetadata,\n context,\n );\n } catch (error) {\n report(`Registry apply (${coreModule.id})`, error);\n return [];\n }\n });\n if (registrations.length === 0) return NO_CLEANUP;\n\n const cleanupScope = getCleanupScope(context);\n const owner = (registration: ModuleRegistration) => ({\n instanceId: context.instanceId,\n scope: registration.scope,\n source: registration.source,\n });\n\n runRegistrationBatch(context, (queue) => {\n registrations.forEach(\n ({ cleanupKey, key, registerOptions, source, type, value }) => {\n clearCleanupTimer(cleanupScope, cleanupKey);\n queue.register(type, key, value, source, registerOptions);\n },\n );\n });\n\n return () => {\n const immediate: ModuleRegistration[] = [];\n registrations.forEach((registration) => {\n if (isPersistentLifecycle(registration.lifecycle)) return;\n const { cleanupDelayMs, cleanupKey, key, type } = registration;\n if (typeof cleanupDelayMs === \"number\" && cleanupDelayMs > 0) {\n scheduleCleanup(\n cleanupScope,\n cleanupKey,\n () => context.unregister(type, key, owner(registration)),\n cleanupDelayMs,\n );\n } else {\n immediate.push(registration);\n }\n });\n if (immediate.length === 0) return;\n runRegistrationBatch(context, (queue) => {\n immediate.forEach((registration) =>\n queue.unregister(\n registration.type,\n registration.key,\n owner(registration),\n ),\n );\n });\n };\n}\n","\"use client\";\n\nimport { usePathname } from \"next/navigation\";\nimport { useIsomorphicLayoutEffect } from \"@/hooks\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { applyRegistryConfig } from \"./handlers\";\nimport { createModulePayload, useInstalledModules } from \"./installed\";\nimport { useRegistryActions } from \"./provider\";\nimport { isObject, shallowEqual } from \"@/utils\";\nimport type {\n PageConfig,\n RegistryCleanupTimer,\n RegistryApplyContext,\n RegistryMetadata,\n RegistryQueue,\n RegistrySourceOrOptions,\n StableFunctionEntry,\n AnyFunction,\n} from \"./types\";\n\nfunction withInstanceId(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg?: RegistryMetadata,\n): {\n optionsArg: RegistryMetadata | undefined;\n sourceOrOptions: RegistrySourceOrOptions;\n} {\n if (typeof sourceOrOptions === \"string\") {\n return {\n optionsArg: { ...(isObject(optionsArg) ? optionsArg : {}), instanceId },\n sourceOrOptions,\n };\n }\n if (isObject(sourceOrOptions)) {\n return {\n optionsArg,\n sourceOrOptions: { ...sourceOrOptions, instanceId },\n };\n }\n return {\n optionsArg: undefined,\n sourceOrOptions: {\n ...(isObject(optionsArg) ? optionsArg : {}),\n instanceId,\n },\n };\n}\n\nfunction withInstanceIdForUnregister(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n): RegistryMetadata {\n if (typeof sourceOrOptions === \"string\") {\n return { instanceId, source: sourceOrOptions };\n }\n if (isObject(sourceOrOptions)) {\n return { ...sourceOrOptions, instanceId };\n }\n return { instanceId };\n}\n\nfunction resolveRegisterArgsWithInstance(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg?: RegistryMetadata,\n): [RegistrySourceOrOptions, RegistryMetadata | undefined] {\n const input = withInstanceId(instanceId, sourceOrOptions, optionsArg);\n return [input.sourceOrOptions, input.optionsArg];\n}\n\nexport function useShallowStable<T extends object>(value: T): T {\n const ref = useRef(value);\n if (ref.current !== value && !shallowEqual(ref.current, value)) {\n ref.current = value;\n }\n return ref.current;\n}\n\nconst MAX_STABILIZATION_DEPTH = 64;\n\nfunction createStableFunctionEntry(fn: AnyFunction): StableFunctionEntry {\n const entry: StableFunctionEntry = {\n current: fn,\n stable(this: unknown, ...args: unknown[]) {\n return entry.current?.apply(this, args);\n },\n };\n return entry;\n}\n\ninterface StabilizeScope {\n componentSlices: ReadonlySet<string>;\n functionEntries: Map<string, StableFunctionEntry>;\n usedPaths: Set<string>;\n}\n\nfunction isDirectRegistryComponentPath(\n path: string,\n componentSlices: ReadonlySet<string>,\n): boolean {\n const match = /^config\\.([^.[]+)\\.[^.[]+$/.exec(path);\n return Boolean(match && componentSlices.has(match[1]));\n}\n\nfunction isReactNodeLike(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"boolean\" ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n isValidElement(value)\n );\n}\n\nfunction isStabilizableObject(\n value: unknown,\n): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value)\n );\n}\n\nfunction hasSameObjectKeys(\n previousValue: unknown,\n nextValue: unknown,\n): boolean {\n if (\n !isStabilizableObject(previousValue) ||\n !isStabilizableObject(nextValue)\n ) {\n return false;\n }\n const previousKeys = Object.keys(previousValue);\n const nextKeys = Object.keys(nextValue);\n if (previousKeys.length !== nextKeys.length) return false;\n return nextKeys.every((key) =>\n Object.prototype.hasOwnProperty.call(previousValue, key),\n );\n}\n\nfunction stabilizeRegistryValue(\n value: unknown,\n path: string,\n scope: StabilizeScope,\n previousValue?: unknown,\n seen = new WeakSet<object>(),\n depth = 0,\n): unknown {\n if (depth > MAX_STABILIZATION_DEPTH) return value;\n\n if (typeof value === \"function\") {\n const isComponent = value.name && /^[A-Z]/.test(value.name);\n if (\n isComponent ||\n isDirectRegistryComponentPath(path, scope.componentSlices)\n ) {\n return value;\n }\n scope.usedPaths.add(path);\n let entry = scope.functionEntries.get(path);\n if (!entry) {\n entry = createStableFunctionEntry(value as AnyFunction);\n scope.functionEntries.set(path, entry);\n } else {\n entry.current = value as AnyFunction;\n }\n return entry.stable;\n }\n\n if (value && typeof value === \"object\") {\n if (seen.has(value)) return value;\n seen.add(value);\n }\n\n if (isValidElement(value)) {\n const nextProps = stabilizeRegistryValue(\n value.props,\n `${path}.props`,\n scope,\n isValidElement(previousValue) ? previousValue.props : undefined,\n seen,\n depth + 1,\n ) as Record<string, unknown>;\n if (\n isValidElement(previousValue) &&\n previousValue.type === value.type &&\n previousValue.key === value.key &&\n previousValue.props === nextProps\n ) {\n return previousValue;\n }\n return cloneElement(value, nextProps);\n }\n\n if (Array.isArray(value)) {\n const nextValue = value.every(isReactNodeLike)\n ? Children.toArray(value)\n : value;\n const previousArray = Array.isArray(previousValue) ? previousValue : null;\n let hasChanged =\n !previousArray || previousArray.length !== nextValue.length;\n\n const stabilizedValue: unknown[] = nextValue.map((item, index) => {\n const nextItem = stabilizeRegistryValue(\n item,\n `${path}[${index}]`,\n scope,\n previousArray?.[index],\n seen,\n depth + 1,\n );\n if (!previousArray || nextItem !== previousArray[index]) {\n hasChanged = true;\n }\n return nextItem;\n });\n return !hasChanged ? previousArray : stabilizedValue;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n\n const source = value as Record<string, unknown>;\n const previousRecord = previousValue as Record<string, unknown> | undefined;\n const stabilizedValue: Record<string, unknown> = {};\n const canReusePrevious = hasSameObjectKeys(previousValue, value);\n let hasChanged = !canReusePrevious;\n\n Object.keys(source).forEach((key) => {\n const nextValue = stabilizeRegistryValue(\n source[key],\n `${path}.${key}`,\n scope,\n previousRecord?.[key],\n seen,\n depth + 1,\n );\n stabilizedValue[key] = nextValue;\n if (!canReusePrevious || nextValue !== previousRecord?.[key]) {\n hasChanged = true;\n }\n });\n\n return !hasChanged ? previousValue : stabilizedValue;\n}\n\nfunction useAppliedRegistryConfig(\n payload: PageConfig | null,\n context: RegistryApplyContext,\n componentSlices: ReadonlySet<string>,\n): void {\n const functionEntriesRef = useRef(new Map<string, StableFunctionEntry>());\n const appliedRef = useRef<{\n cleanup: () => void;\n config: unknown;\n context: RegistryApplyContext;\n payload: PageConfig | null;\n } | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n const previous = appliedRef.current;\n if (\n previous &&\n previous.payload === payload &&\n previous.context === context\n ) {\n return;\n }\n const functionEntries = functionEntriesRef.current;\n const usedPaths = new Set<string>();\n const config = stabilizeRegistryValue(\n payload,\n \"config\",\n { componentSlices, functionEntries, usedPaths },\n previous?.config,\n );\n functionEntries.forEach((_entry, path) => {\n if (!usedPaths.has(path)) functionEntries.delete(path);\n });\n\n if (\n previous &&\n previous.config === config &&\n previous.context === context\n ) {\n previous.payload = payload;\n return;\n }\n previous?.cleanup();\n appliedRef.current = {\n cleanup: applyRegistryConfig(config as PageConfig | null, context),\n config,\n context,\n payload,\n };\n });\n\n useIsomorphicLayoutEffect(\n () => () => {\n appliedRef.current?.cleanup();\n appliedRef.current = null;\n },\n [],\n );\n}\n\nexport function createRegistryApplyContext(\n actions: RegistryQueue & Pick<RegistryApplyContext, \"batch\">,\n {\n cleanupScope = new Map<string, RegistryCleanupTimer>(),\n instanceId,\n modules = [],\n pathname,\n }: Pick<RegistryApplyContext, \"instanceId\" | \"modules\" | \"pathname\"> & {\n cleanupScope?: RegistryApplyContext[\"cleanupScope\"];\n },\n): RegistryApplyContext {\n const stamp = (queue: RegistryQueue): RegistryQueue =>\n ({\n register: (\n type: string,\n key: string,\n item: unknown,\n sourceOrOptions?: RegistrySourceOrOptions,\n optionsArg?: RegistryMetadata,\n ) =>\n queue.register(\n type,\n key,\n item,\n ...resolveRegisterArgsWithInstance(\n instanceId,\n sourceOrOptions,\n optionsArg,\n ),\n ),\n unregister: (\n type: string,\n key: string,\n sourceOrOptions?: RegistrySourceOrOptions,\n ) =>\n queue.unregister(\n type,\n key,\n withInstanceIdForUnregister(instanceId, sourceOrOptions),\n ),\n }) as RegistryQueue;\n\n return {\n ...stamp(actions),\n batch: (executor) =>\n typeof executor === \"function\"\n ? actions.batch((queue) => executor(stamp(queue)))\n : 0,\n cleanupScope,\n instanceId,\n modules,\n pathname,\n };\n}\n\nexport function useRegistry(\n config?: PageConfig | null,\n metadata?: RegistryMetadata,\n): void {\n const { batch, register, unregister } = useRegistryActions();\n const pathname = usePathname();\n const modules = useInstalledModules();\n const instanceId = `registry-instance-${useId()}`;\n const [cleanupScope] = useState(\n () => new Map<string, RegistryCleanupTimer>(),\n );\n\n const context = useMemo(\n () =>\n createRegistryApplyContext(\n { batch, register, unregister },\n {\n cleanupScope,\n instanceId,\n modules,\n pathname,\n },\n ),\n [batch, cleanupScope, instanceId, modules, pathname, register, unregister],\n );\n\n const payload = useMemo(\n () => (config ? createModulePayload(modules, config, metadata) : null),\n [config, metadata, modules],\n );\n const componentSlices = useMemo(\n () =>\n new Set(\n modules\n .filter(\n (coreModule) => coreModule.registry?.valueKind === \"component\",\n )\n .map((coreModule) => coreModule.id),\n ),\n [modules],\n );\n useAppliedRegistryConfig(payload, context, componentSlices);\n}\n","\"use client\";\n\nimport { createElement, use, useState, type ReactNode } from \"react\";\nimport { useStore } from \"@/hooks\";\nimport { createStore, type ExternalStore } from \"@/utils\";\nimport {\n EMPTY_MODULES,\n ModuleHostContext,\n PassthroughBoundary,\n createModuleRegistryDefinitions,\n sortModules,\n type BoundaryComponent,\n type ModuleHostValue,\n} from \"./installed\";\nimport { PageControllerProvider } from \"./page-controller\";\nimport { RegistryProvider } from \"./provider\";\nimport type {\n AnyCoreModule,\n AppRegistryEntry,\n CoreModule,\n CoreModules,\n ModuleId,\n ModuleRuntimeOf,\n ModuleStateOf,\n} from \"./types\";\nimport { report } from \"@/utils\";\n\nexport function defineModule<\n TId extends string,\n TRuntime = never,\n TSlice = never,\n TController = never,\n>(\n coreModule: CoreModule<TId, TRuntime, TSlice, TController>,\n): CoreModule<TId, TRuntime, TSlice, TController> {\n return Object.freeze({ ...coreModule });\n}\n\nfunction warnMissingPeers(modules: readonly AnyCoreModule[]): void {\n const installed = new Set(modules.map((coreModule) => coreModule.id));\n for (const { id, uses } of modules) {\n const missing = (uses ?? []).filter((peer) => !installed.has(peer));\n if (missing.length > 0) {\n report(\n `Module \"${id}\" runs without its optional peers`,\n missing.join(\", \"),\n \"warn\",\n );\n }\n }\n}\n\nfunction createModuleHost(\n modules: readonly AnyCoreModule[],\n Boundary: BoundaryComponent,\n): ModuleHostValue {\n const sorted = sortModules(modules);\n if (process.env.NODE_ENV !== \"production\") warnMissingPeers(sorted);\n return {\n Boundary,\n byId: new Map(sorted.map((coreModule) => [coreModule.id, coreModule])),\n definitions: createModuleRegistryDefinitions(sorted),\n modules: Object.freeze(sorted),\n };\n}\n\nexport interface ModuleHostProps {\n boundary?: BoundaryComponent;\n children?: ReactNode;\n modules?: readonly AnyCoreModule[];\n registryEntries?: readonly AppRegistryEntry[];\n}\n\nexport function ModuleHost({\n boundary = PassthroughBoundary,\n children,\n modules = EMPTY_MODULES,\n registryEntries,\n}: ModuleHostProps) {\n const [host] = useState(() => createModuleHost(modules, boundary));\n const { Boundary } = host;\n\n const content = (\n <>\n {host.modules.map(({ Backdrop, id }) =>\n Backdrop ? (\n <Boundary key={id} name={id}>\n <Backdrop />\n </Boundary>\n ) : null,\n )}\n {children}\n {host.modules.map(({ Overlay, id }) =>\n Overlay ? (\n <Boundary key={id} name={id}>\n <Overlay />\n </Boundary>\n ) : null,\n )}\n </>\n );\n\n const tree = host.modules.reduceRight<ReactNode>(\n (inner, { Provider }) => (Provider ? <Provider>{inner}</Provider> : inner),\n content,\n );\n\n return (\n <RegistryProvider\n definitions={host.definitions}\n initialEntries={registryEntries}\n >\n <ModuleHostContext value={host}>\n <PageControllerProvider>{tree}</PageControllerProvider>\n </ModuleHostContext>\n </RegistryProvider>\n );\n}\n\nexport function useModule<K extends ModuleId>(\n id: K,\n): ModuleRuntimeOf<CoreModules[K]> | null {\n const coreModule = use(ModuleHostContext)?.byId.get(id);\n return coreModule?.context ? (use(coreModule.context) ?? null) : null;\n}\n\ntype ModuleActionsOf<K extends ModuleId> =\n ModuleRuntimeOf<CoreModules[K]> extends { actions: infer TActions }\n ? TActions\n : never;\n\nexport interface ModulePeer<K extends ModuleId> {\n useActions(): ModuleActionsOf<K>;\n useRuntime(): ModuleRuntimeOf<CoreModules[K]>;\n useState<T>(\n selector: (state: ModuleStateOf<K>) => T,\n isEqual?: (a: T, b: T) => boolean,\n ): T;\n}\n\nexport function definePeer<K extends ModuleId>(\n id: K,\n inert: ModuleRuntimeOf<CoreModules[K]>,\n): ModulePeer<K> {\n const useRuntime = (): ModuleRuntimeOf<CoreModules[K]> =>\n useModule(id) ?? inert;\n return {\n useRuntime,\n useActions: () => useRuntime().actions as ModuleActionsOf<K>,\n useState: <T,>(\n selector: (state: ModuleStateOf<K>) => T,\n isEqual?: (a: T, b: T) => boolean,\n ) =>\n useStore<ModuleStateOf<K>, T>(\n (useRuntime() as { store: ExternalStore<ModuleStateOf<K>> }).store,\n selector,\n isEqual,\n ),\n };\n}\n\nconst NO_MODULE_STORE: ExternalStore<unknown> = createStore<unknown>(undefined);\n\nexport function useModuleState<K extends ModuleId, T>(\n id: K,\n selector: (state: ModuleStateOf<K>) => T,\n fallback: T,\n isEqual: (a: T, b: T) => boolean = Object.is,\n): T {\n const runtime = useModule(id) as { store: ExternalStore<unknown> } | null;\n return useStore<unknown, T>(\n runtime?.store ?? NO_MODULE_STORE,\n (state) => (runtime ? selector(state as ModuleStateOf<K>) : fallback),\n isEqual,\n );\n}\n\nexport function ModuleBoundary({\n children,\n name,\n}: {\n children?: ReactNode;\n name?: string;\n}) {\n const Boundary = use(ModuleHostContext)?.Boundary ?? PassthroughBoundary;\n return createElement(Boundary, { name }, children);\n}\n\nexport function useIsModuleInstalled(id: ModuleId): boolean {\n return use(ModuleHostContext)?.byId.has(id) ?? false;\n}\n","\"use client\";\n\nimport { pickRegistryMetadata } from \"./schema\";\nimport { useRegistry } from \"./hooks\";\nimport { useInstalledModules } from \"./installed\";\nimport type { ModuleId, PageConfig, RegistryMetadata } from \"./types\";\n\nexport function useModuleRegistration(\n id: ModuleId,\n value: unknown,\n options?: RegistryMetadata & { enabled?: boolean },\n): void {\n const coreModule = useInstalledModules().find(\n (candidate) => candidate.id === id,\n );\n const config =\n coreModule && options?.enabled !== false && value != null\n ? ({ [id]: value } as PageConfig)\n : null;\n useRegistry(config, pickRegistryMetadata(options));\n}\n","\"use client\";\n\nimport {\n createElement,\n useContext,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { getOrCreateGlobalContext } from \"@/kernel\";\n\nexport interface ThemeSpec<S extends string = string> {\n readonly id: string;\n readonly _slots?: S;\n}\n\nexport interface ThemeConfig<S extends string> {\n slots: Readonly<Record<S, string>>;\n styles?: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ResolvedTheme<S extends string> {\n readonly slots: Readonly<Record<S, string>>;\n readonly styles: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ThemeEntry {\n readonly id: string;\n readonly config: ThemeConfig<string>;\n}\n\nexport function defineThemeSpec<S extends string>(id: string): ThemeSpec<S> {\n return Object.freeze({ id });\n}\n\nexport function defineTheme<S extends string>(\n spec: ThemeSpec<S>,\n config: ThemeConfig<NoInfer<S>>,\n): ThemeEntry {\n return { id: spec.id, config: config as ThemeEntry[\"config\"] };\n}\n\nconst EMPTY: ReadonlyMap<string, ThemeEntry[\"config\"]> = new Map();\nconst ThemeContext = getOrCreateGlobalContext<\n ReadonlyMap<string, ThemeEntry[\"config\"]>\n>(\"ThemeContext\", EMPTY);\n\n\nexport function ThemeProvider({\n children,\n themes,\n}: {\n children?: ReactNode;\n themes: readonly ThemeEntry[];\n}) {\n const configs = new Map(themes.map((entry) => [entry.id, entry.config]));\n return createElement(ThemeContext.Provider, { value: configs }, children);\n}\n\nexport function useTheme<S extends string>(\n spec: ThemeSpec<S>,\n): ResolvedTheme<S> {\n const config = useContext(ThemeContext).get(spec.id);\n if (!config) {\n throw new Error(\n `Theme \"${spec.id}\" is missing. Ensure its theme configuration is provided to <ThemeProvider themes={[...]}> (e.g. in src/config/ or your theme setup).`,\n );\n }\n return {\n slots: config.slots,\n styles: config.styles ?? {},\n } as ResolvedTheme<S>;\n}\n\nexport { useTheme as useModuleTheme };\n\n","import { defineThemeSpec } from \"@/theme\";\nimport { type ControlsThemeSlot } from \"./types\";\n\nexport const CONTROLS_EDGE_INSET = 4;\nexport const CONTROLS_DOCK_GAP = 8;\nexport const CONTROLS_DOCK_ELEMENT_ID = \"dock-card-stack\";\nexport const CONTROL_SIDE_NAMES = Object.freeze([\"left\", \"right\"] as const);\n\nexport const controlsTheme = defineThemeSpec<ControlsThemeSlot>(\"controls\");\n","import { createElement, isValidElement, type ReactNode } from \"react\";\nimport { type ValidationResult } from \"@/kernel\";\nimport { isPlainObject, toFiniteNumber, trimToNull } from \"@/utils\";\nimport { CONTROL_SIDE_NAMES } from \"./constants\";\nimport {\n type ControlEntry,\n type ControlSide,\n type ControlSlot,\n type ControlsPageConfig,\n type ControlsPairItem,\n type PageControlEntry,\n type ResolvedControlsPairs,\n} from \"./types\";\n\nexport function isControlSide(value: unknown): value is ControlSide {\n return CONTROL_SIDE_NAMES.includes(value as ControlSide);\n}\n\nexport function hasContent(content: unknown): boolean {\n return content !== undefined && content !== null && content !== false;\n}\n\nfunction isRenderable(value: unknown): boolean {\n if (\n value === null ||\n value === undefined ||\n [\"boolean\", \"number\", \"string\"].includes(typeof value) ||\n isValidElement(value)\n ) {\n return true;\n }\n return Array.isArray(value) && value.every(isRenderable);\n}\n\nexport function validateControlEntry(entry: unknown): ValidationResult {\n if (!isPlainObject(entry)) {\n return { issues: [\"control must be a plain object\"], valid: false };\n }\n const issues: string[] = [];\n if (!trimToNull(entry.id)) {\n issues.push(\"control id must be a non-empty string\");\n }\n if (!isControlSide(entry.side)) {\n issues.push(\"control side must be left or right\");\n }\n if (!hasContent(entry.content) || !isRenderable(entry.content)) {\n issues.push(\"control content must be renderable\");\n }\n if (!Number.isFinite(Number(entry.order))) {\n issues.push(\"control order must be a finite number\");\n }\n return { issues, valid: issues.length === 0 };\n}\n\nexport function resolveSlot(\n slot: ControlSlot | undefined,\n props: Record<string, unknown>,\n): ReactNode {\n if (slot == null || slot === false) return null;\n if (isValidElement(slot)) return slot;\n if (typeof slot === \"function\") return createElement(slot, props);\n return slot;\n}\n\nexport function normalizePageControls(\n controls: ControlsPageConfig | null | undefined,\n): PageControlEntry[] | null {\n if (!controls) return null;\n if (Array.isArray(controls)) return controls;\n if (\"side\" in controls) return [controls];\n\n const { id = \"controls\", order = 0, path, registry } = controls;\n return CONTROL_SIDE_NAMES.flatMap((side) => {\n const content = controls[side];\n if (!hasContent(content)) return [];\n return [\n {\n ...(registry ? { registry } : {}),\n content,\n id: `${id}-${side}`,\n order,\n ...(path ? { path } : {}),\n side,\n },\n ];\n });\n}\n\nexport function resolveControlsPairs(\n entries: Record<string, ControlEntry> | ControlEntry[] | null | undefined,\n pathname: string,\n): ResolvedControlsPairs {\n const rows = new Map<\n number,\n { left?: ControlsPairItem; right?: ControlsPairItem }\n >();\n\n for (const entry of Array.isArray(entries)\n ? entries\n : Object.values(entries || {})) {\n if (\n entry?.path !== pathname ||\n !isControlSide(entry.side) ||\n !hasContent(entry.content)\n ) {\n continue;\n }\n const order = toFiniteNumber(entry.order);\n const row = rows.get(order) ?? {};\n rows.set(order, row);\n const current = row[entry.side];\n if (!current || String(entry.id).localeCompare(String(current.id)) < 0) {\n row[entry.side] = { content: entry.content, id: entry.id };\n }\n }\n\n const pairs = [...rows]\n .sort(([a], [b]) => a - b)\n .map(([, row]) => row)\n .filter((row): row is Required<typeof row> =>\n Boolean(row.left && row.right),\n );\n\n return {\n left: pairs.map((row) => row.left),\n right: pairs.map((row) => row.right),\n };\n}\n","import { clamp } from \"@/utils\";\nimport {\n CONTROLS_DOCK_ELEMENT_ID,\n CONTROLS_DOCK_GAP,\n CONTROLS_EDGE_INSET,\n} from \"./constants\";\nimport { type ControlsLayout, type ViewportDimensions } from \"./types\";\n\nexport function getControlsLayout(\n dockRect: Pick<DOMRect, \"bottom\" | \"height\" | \"left\" | \"right\"> | null,\n viewport: ViewportDimensions,\n): ControlsLayout | null {\n const { height, width } = viewport;\n if (!dockRect || width <= 0 || height <= 0) return null;\n\n const inset = CONTROLS_EDGE_INSET;\n const gap = CONTROLS_DOCK_GAP;\n const dockLeft = clamp(dockRect.left, 0, width);\n const dockRight = clamp(dockRect.right, dockLeft, width);\n const dockBottom = clamp(dockRect.bottom, 0, height);\n\n return {\n bottom: Math.max(0, height - dockBottom),\n height: Math.max(0, dockRect.height) / 2,\n left: {\n maxWidth: Math.max(0, dockLeft - inset * 2 - gap),\n right: Math.max(inset, width - dockLeft + gap),\n },\n right: {\n left: Math.min(width - inset, dockRight + gap),\n maxWidth: Math.max(0, width - dockRight - inset * 2 - gap),\n },\n };\n}\n\nexport function areLayoutsEqual(\n a: ControlsLayout | null,\n b: ControlsLayout | null,\n): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.bottom === b.bottom &&\n a.height === b.height &&\n a.isHidden === b.isHidden &&\n a.left.maxWidth === b.left.maxWidth &&\n a.left.right === b.left.right &&\n a.right.left === b.right.left &&\n a.right.maxWidth === b.right.maxWidth\n );\n}\n\nexport function getDockStackElement(): HTMLElement | null {\n return document.getElementById(CONTROLS_DOCK_ELEMENT_ID);\n}\n\nexport function getDockElement(): Element | null {\n return (\n document.querySelector('[data-controls-anchor=\"true\"]') ??\n getDockStackElement()\n );\n}\n\nexport function measureLayout(): ControlsLayout | null {\n const dockElement = getDockElement();\n if (!dockElement) return null;\n const layout = getControlsLayout(dockElement.getBoundingClientRect(), {\n height: window.innerHeight,\n width: window.innerWidth,\n });\n return (\n layout && {\n ...layout,\n isHidden: getDockStackElement()?.dataset.controlsHidden === \"true\",\n }\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { useModuleRegistration, type RegistryMetadata } from \"@/kernel\";\nimport {\n type ControlEntry,\n type ControlsLayout,\n type ControlsPageConfig,\n type ControlsUseOptions,\n type DefineControlsOptions,\n} from \"./types\";\nimport { normalizePageControls, resolveSlot } from \"./entries\";\nimport {\n areLayoutsEqual,\n getDockElement,\n measureLayout,\n} from \"./layout\";\n\nexport function useControlsLayout(): ControlsLayout | null {\n const [layout, setLayout] = useState<ControlsLayout | null>(null);\n\n useEffect(() => {\n let observed: Element | null | undefined;\n let resizeObserver: ResizeObserver | undefined;\n\n const update = () => {\n const next = measureLayout();\n setLayout((prev) => (areLayoutsEqual(prev, next) ? prev : next));\n };\n\n const observe = () => {\n const dockElement = getDockElement();\n if (dockElement !== observed) {\n observed = dockElement;\n resizeObserver?.disconnect();\n mutationObserver.disconnect();\n if (dockElement) {\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(update);\n resizeObserver.observe(dockElement);\n }\n mutationObserver.observe(dockElement, {\n attributes: true,\n attributeFilter: [\"data-controls-anchor\", \"data-controls-hidden\"],\n });\n if (dockElement.parentElement) {\n mutationObserver.observe(dockElement.parentElement, {\n childList: true,\n });\n }\n } else {\n mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n update();\n };\n\n const mutationObserver = new MutationObserver(observe);\n\n observe();\n window.addEventListener(\"resize\", update);\n return () => {\n mutationObserver.disconnect();\n resizeObserver?.disconnect();\n window.removeEventListener(\"resize\", update);\n };\n }, []);\n\n return layout;\n}\n\nexport function useControlsRegistration(\n config: ControlsPageConfig | null | undefined,\n options?: RegistryMetadata & { enabled?: boolean },\n): void {\n useModuleRegistration(\"controls\", config, options);\n}\n\nexport function useControls(\n config?: DefineControlsOptions | ControlEntry | ControlEntry[] | null,\n options?: ControlsUseOptions,\n): ControlsLayout | null {\n const pathname = usePathname();\n const definitionPath = config && \"path\" in config ? config.path : undefined;\n const path = options?.path || definitionPath || pathname;\n\n const entries = useMemo(() => {\n if (!config) return null;\n if (Array.isArray(config) || \"side\" in config) return config;\n const { defaultProps = {}, left, right, ...page } = config;\n const resolved = normalizePageControls({\n ...page,\n left: resolveSlot(left, defaultProps),\n path,\n right: resolveSlot(right, defaultProps),\n });\n return resolved?.length ? resolved : null;\n }, [config, path]);\n\n useControlsRegistration(entries, options);\n return useControlsLayout();\n}\n","\"use client\";\n\nimport {\n Fragment,\n useMemo,\n useSyncExternalStore,\n type CSSProperties,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePathname } from \"next/navigation\";\nimport { useRegistryEntries } from \"@/kernel\";\nimport { useModuleTheme } from \"@/theme\";\nimport { controlsTheme } from \"./constants\";\nimport { resolveControlsPairs } from \"./entries\";\nimport { useControlsLayout } from \"./hooks\";\nimport { type ControlEntry, type ControlsSideProps } from \"./types\";\n\nconst emptySubscribe = () => () => {};\n\nexport function useControlsModel() {\n const portalTarget = useSyncExternalStore(\n emptySubscribe,\n () => (typeof document !== \"undefined\" ? document.body : null),\n () => null,\n );\n const layout = useControlsLayout();\n const pathname = usePathname();\n const entries = useRegistryEntries<\"controls\", ControlEntry>(\"controls\");\n const { left, right } = useMemo(\n () => resolveControlsPairs(entries, pathname),\n [entries, pathname],\n );\n\n const theme = useModuleTheme(controlsTheme);\n\n return { portalTarget, layout, left, right, theme };\n}\n\nexport function ControlsSide({\n controls,\n geometry,\n side,\n theme,\n}: ControlsSideProps) {\n if (controls.length === 0 || !geometry.height || !geometry.maxWidth) {\n return null;\n }\n const positionStyle: CSSProperties =\n side === \"left\"\n ? {\n bottom: geometry.bottom,\n maxWidth: geometry.maxWidth,\n right: geometry.right,\n }\n : {\n bottom: geometry.bottom,\n left: geometry.left,\n maxWidth: geometry.maxWidth,\n };\n return (\n <aside\n aria-label={`${side === \"left\" ? \"Left\" : \"Right\"} page controls`}\n className={theme.slots.rail}\n style={{ ...theme.styles.rail, ...positionStyle }}\n >\n <div\n data-side={side}\n className={theme.slots.stack}\n style={\n {\n ...theme.styles.stack,\n \"--controls-height\": `${geometry.height}px`,\n } as CSSProperties\n }\n >\n {controls.map(({ content, id }, index) => (\n <Fragment key={id || index}>{content}</Fragment>\n ))}\n </div>\n </aside>\n );\n}\n\nexport function Controls() {\n const { portalTarget, layout, left, right, theme } = useControlsModel();\n if (!portalTarget || !layout || layout.isHidden || left.length === 0) {\n return null;\n }\n return createPortal(\n <>\n <ControlsSide\n controls={left}\n geometry={{\n ...layout.left,\n bottom: layout.bottom,\n height: layout.height,\n }}\n side=\"left\"\n theme={theme}\n />\n <ControlsSide\n controls={right}\n geometry={{\n ...layout.right,\n bottom: layout.bottom,\n height: layout.height,\n }}\n side=\"right\"\n theme={theme}\n />\n </>,\n portalTarget,\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n defineModule,\n type PageConfig,\n type PageModuleApi,\n} from \"@/kernel\";\nimport { useControls } from \"./hooks\";\nimport { normalizePageControls, validateControlEntry } from \"./entries\";\nimport { Controls } from \"./overlay\";\nimport {\n type ControlsPageApi,\n type DefinedControls,\n type DefineControlsOptions,\n type ControlsPageConfig,\n type PageControlEntry,\n} from \"./types\";\n\nfunction selectPageControls(config: PageConfig) {\n return normalizePageControls(config.controls);\n}\n\nfunction useControlsPage(\n _slice: PageControlEntry[] | null,\n page: PageModuleApi,\n): ControlsPageApi {\n return useMemo(\n () => ({\n set: (controls: ControlsPageConfig | null) => page.set({ controls }),\n }),\n [page],\n );\n}\n\nexport function defineControls(\n definition: DefineControlsOptions = {},\n): DefinedControls {\n const { id = \"controls\", order = 0 } = definition;\n\n return Object.freeze({\n config: definition,\n id,\n order,\n use: function useDefinedControls(props = {}, options = {}) {\n return useControls(\n {\n ...definition,\n defaultProps: { ...definition.defaultProps, ...props },\n },\n options,\n );\n },\n });\n}\n\nexport const controlsModule = defineModule({\n id: \"controls\",\n Overlay: Controls,\n registry: {\n keyPolicy: \"named\",\n lifecycle: \"immediate\",\n validate: validateControlEntry,\n },\n page: {\n select: selectPageControls,\n entries: (entry: PageControlEntry, { pathname }) => {\n const path = pathname || \"/\";\n return [{ key: `${path}::${entry.id}`, value: { ...entry, path } }];\n },\n use: useControlsPage,\n },\n});\n\ndeclare module \"@omerdlw/base-framework/kernel\" {\n interface CoreModules {\n controls: typeof controlsModule;\n }\n interface PageConfig {\n controls?: ControlsPageConfig | null;\n }\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ControlsLayout, type ViewportDimensions } from "./types";
|
|
2
|
+
export declare function getControlsLayout(dockRect: Pick<DOMRect, "bottom" | "height" | "left" | "right"> | null, viewport: ViewportDimensions): ControlsLayout | null;
|
|
3
|
+
export declare function areLayoutsEqual(a: ControlsLayout | null, b: ControlsLayout | null): boolean;
|
|
4
|
+
export declare function getDockStackElement(): HTMLElement | null;
|
|
5
|
+
export declare function getDockElement(): Element | null;
|
|
6
|
+
export declare function measureLayout(): ControlsLayout | null;
|
|
7
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/modules/controls/layout.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEvE,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,EACtE,QAAQ,EAAE,kBAAkB,GAC3B,cAAc,GAAG,IAAI,CAsBvB;AAED,wBAAgB,eAAe,CAC7B,CAAC,EAAE,cAAc,GAAG,IAAI,EACxB,CAAC,EAAE,cAAc,GAAG,IAAI,GACvB,OAAO,CAYT;AAED,wBAAgB,mBAAmB,IAAI,WAAW,GAAG,IAAI,CAExD;AAED,wBAAgB,cAAc,IAAI,OAAO,GAAG,IAAI,CAK/C;AAED,wBAAgB,aAAa,IAAI,cAAc,GAAG,IAAI,CAarD"}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
import { type ControlsSideProps } from "./types";
|
|
2
|
+
export declare function useControlsModel(): {
|
|
3
|
+
portalTarget: HTMLElement | null;
|
|
4
|
+
layout: import("./types").ControlsLayout | null;
|
|
5
|
+
left: import("./types").ControlsPairItem[];
|
|
6
|
+
right: import("./types").ControlsPairItem[];
|
|
7
|
+
theme: import("@/theme").ResolvedTheme<import("./types").ControlsThemeSlot>;
|
|
8
|
+
};
|
|
9
|
+
export declare function ControlsSide({ controls, geometry, side, theme, }: ControlsSideProps): import("react").JSX.Element | null;
|
|
1
10
|
export declare function Controls(): import("react").ReactPortal | null;
|
|
2
11
|
//# sourceMappingURL=overlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/modules/controls/overlay.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/modules/controls/overlay.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAIpE,wBAAgB,gBAAgB;;;;;;EAiB/B;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,KAAK,GACN,EAAE,iBAAiB,sCAsCnB;AAED,wBAAgB,QAAQ,uCA8BvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../../src/modules/dock/cards.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,OAAO,EACb,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../../src/modules/dock/cards.tsx"],"names":[],"mappings":"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"}
|