@omerdlw/base-framework 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +121 -52
- package/dist/atoms/index.d.ts +0 -1
- package/dist/atoms/index.d.ts.map +1 -1
- package/dist/atoms/index.js +1 -64
- package/dist/atoms/index.js.map +1 -1
- package/dist/error/index.js +22 -25
- package/dist/error/index.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -9
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +97 -540
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/types.d.ts +3 -45
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/hooks/use-controllable-state.d.ts +1 -1
- package/dist/hooks/use-controllable-state.d.ts.map +1 -1
- package/dist/hooks/use-global-event.d.ts +0 -2
- package/dist/hooks/use-global-event.d.ts.map +1 -1
- package/dist/hooks/use-hotkey.d.ts +1 -1
- package/dist/hooks/use-hotkey.d.ts.map +1 -1
- package/dist/index.js +11283 -11772
- package/dist/index.js.map +1 -1
- package/dist/kernel/adapters.d.ts.map +1 -1
- package/dist/kernel/index.d.ts +1 -0
- package/dist/kernel/index.d.ts.map +1 -1
- package/dist/kernel/index.js +10 -81
- package/dist/kernel/index.js.map +1 -1
- package/dist/kernel/installed.d.ts.map +1 -1
- package/dist/kernel/page-controller.d.ts.map +1 -1
- package/dist/kernel/provider.d.ts.map +1 -1
- package/dist/modules/ambient/constants.d.ts +1 -1
- package/dist/modules/ambient/constants.d.ts.map +1 -1
- package/dist/modules/ambient/index.js +180 -326
- package/dist/modules/ambient/index.js.map +1 -1
- package/dist/modules/ambient/module.d.ts.map +1 -1
- package/dist/modules/background/constants.d.ts +4 -2
- package/dist/modules/background/constants.d.ts.map +1 -1
- package/dist/modules/background/context.d.ts +3 -0
- package/dist/modules/background/context.d.ts.map +1 -1
- package/dist/modules/background/hooks.d.ts +1 -1
- package/dist/modules/background/index.d.ts +2 -2
- package/dist/modules/background/index.d.ts.map +1 -1
- package/dist/modules/background/index.js +1172 -1270
- package/dist/modules/background/index.js.map +1 -1
- package/dist/modules/background/overlay.d.ts +1 -1
- package/dist/modules/background/overlay.d.ts.map +1 -1
- package/dist/modules/background/types.d.ts +1 -1
- package/dist/modules/background/types.d.ts.map +1 -1
- package/dist/modules/context-menu/constants.d.ts +1 -1
- package/dist/modules/context-menu/constants.d.ts.map +1 -1
- package/dist/modules/context-menu/context.d.ts.map +1 -1
- package/dist/modules/context-menu/hooks.d.ts.map +1 -1
- package/dist/modules/context-menu/index.js +133 -238
- package/dist/modules/context-menu/index.js.map +1 -1
- package/dist/modules/controls/constants.d.ts +1 -1
- package/dist/modules/controls/constants.d.ts.map +1 -1
- package/dist/modules/controls/hooks.d.ts +1 -1
- package/dist/modules/controls/index.js +28 -162
- package/dist/modules/controls/index.js.map +1 -1
- package/dist/modules/controls/types.d.ts +1 -1
- package/dist/modules/controls/types.d.ts.map +1 -1
- package/dist/modules/dock/cards.d.ts +2 -2
- package/dist/modules/dock/constants.d.ts +1 -1
- package/dist/modules/dock/constants.d.ts.map +1 -1
- package/dist/modules/dock/context.d.ts +10 -6
- package/dist/modules/dock/context.d.ts.map +1 -1
- package/dist/modules/dock/hooks.d.ts +5 -5
- package/dist/modules/dock/hooks.d.ts.map +1 -1
- package/dist/modules/dock/index.d.ts +1 -1
- package/dist/modules/dock/index.d.ts.map +1 -1
- package/dist/modules/dock/index.js +2060 -2080
- package/dist/modules/dock/index.js.map +1 -1
- package/dist/modules/dock/runtime/dock.d.ts.map +1 -1
- package/dist/modules/dock/types.d.ts +1 -1
- package/dist/modules/dock/types.d.ts.map +1 -1
- package/dist/modules/index.js +10789 -11027
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/loading/constants.d.ts +4 -2
- package/dist/modules/loading/constants.d.ts.map +1 -1
- package/dist/modules/loading/context.d.ts +3 -0
- package/dist/modules/loading/context.d.ts.map +1 -1
- package/dist/modules/loading/hooks.d.ts +1 -1
- package/dist/modules/loading/hooks.d.ts.map +1 -1
- package/dist/modules/loading/index.d.ts +2 -2
- package/dist/modules/loading/index.d.ts.map +1 -1
- package/dist/modules/loading/index.js +118 -222
- package/dist/modules/loading/index.js.map +1 -1
- package/dist/modules/loading/types.d.ts +1 -1
- package/dist/modules/loading/types.d.ts.map +1 -1
- package/dist/modules/media/constants.d.ts +2 -1
- package/dist/modules/media/constants.d.ts.map +1 -1
- package/dist/modules/media/context.d.ts +3 -0
- package/dist/modules/media/context.d.ts.map +1 -1
- package/dist/modules/media/index.d.ts +2 -2
- package/dist/modules/media/index.d.ts.map +1 -1
- package/dist/modules/media/index.js +61 -218
- package/dist/modules/media/index.js.map +1 -1
- package/dist/modules/modal/constants.d.ts +1 -1
- package/dist/modules/modal/constants.d.ts.map +1 -1
- package/dist/modules/modal/context.d.ts.map +1 -1
- package/dist/modules/modal/hooks.d.ts +2 -2
- package/dist/modules/modal/index.js +20 -366
- package/dist/modules/modal/index.js.map +1 -1
- package/dist/modules/notification/constants.d.ts +4 -2
- package/dist/modules/notification/constants.d.ts.map +1 -1
- package/dist/modules/notification/context.d.ts +4 -0
- package/dist/modules/notification/context.d.ts.map +1 -1
- package/dist/modules/notification/hooks.d.ts +1 -1
- package/dist/modules/notification/index.d.ts +2 -3
- package/dist/modules/notification/index.d.ts.map +1 -1
- package/dist/modules/notification/index.js +70 -154
- package/dist/modules/notification/index.js.map +1 -1
- package/dist/modules/notification/module.d.ts.map +1 -1
- package/dist/provider.js +255 -257
- package/dist/provider.js.map +1 -1
- package/dist/theme.d.ts +1 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +2 -2
- package/dist/theme.js.map +1 -1
- package/dist/utils/index.d.ts +5 -6
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -57
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/number.d.ts +0 -1
- package/dist/utils/number.d.ts.map +1 -1
- package/dist/utils/object.d.ts +0 -2
- package/dist/utils/object.d.ts.map +1 -1
- package/dist/utils/string.d.ts +0 -3
- package/dist/utils/string.d.ts.map +1 -1
- package/dist/utils/timing.d.ts +0 -1
- package/dist/utils/timing.d.ts.map +1 -1
- package/docs/README.md +124 -0
- package/docs/architecture-and-rules.md +129 -0
- package/docs/core-engine.md +196 -0
- package/docs/custom-modules.md +267 -0
- package/docs/getting-started.md +199 -0
- package/docs/modules/README.md +176 -0
- package/docs/modules/ambient.md +150 -0
- package/docs/modules/background.md +195 -0
- package/docs/modules/context-menu.md +248 -0
- package/docs/modules/controls.md +159 -0
- package/docs/modules/dock.md +734 -0
- package/docs/modules/error-boundary.md +160 -0
- package/docs/modules/kernel.md +266 -0
- package/docs/modules/loading.md +157 -0
- package/docs/modules/media.md +196 -0
- package/docs/modules/modal.md +229 -0
- package/docs/modules/notification.md +161 -0
- package/docs/modules/result.md +135 -0
- package/docs/testing.md +160 -0
- package/docs/theming.md +185 -0
- package/package.json +50 -2
- package/templates/AGENTS.md +165 -0
- package/dist/hooks/use-async-action.d.ts +0 -3
- package/dist/hooks/use-async-action.d.ts.map +0 -1
- package/dist/hooks/use-debounce.d.ts +0 -2
- package/dist/hooks/use-debounce.d.ts.map +0 -1
- package/dist/hooks/use-intersection-observer.d.ts +0 -4
- package/dist/hooks/use-intersection-observer.d.ts.map +0 -1
- package/dist/hooks/use-media-query.d.ts +0 -2
- package/dist/hooks/use-media-query.d.ts.map +0 -1
- package/dist/hooks/use-mounted.d.ts +0 -2
- package/dist/hooks/use-mounted.d.ts.map +0 -1
- package/dist/hooks/use-server-action.d.ts +0 -4
- package/dist/hooks/use-server-action.d.ts.map +0 -1
- package/dist/hooks/use-storage-state.d.ts +0 -5
- package/dist/hooks/use-storage-state.d.ts.map +0 -1
- package/dist/modules/theme.d.ts +0 -3
- package/dist/modules/theme.d.ts.map +0 -1
- package/dist/utils/json.d.ts +0 -3
- package/dist/utils/json.d.ts.map +0 -1
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-required-context.ts","../../src/hooks/use-store.ts","../../src/hooks/use-click-outside.ts","../../src/utils/dom.ts","../../src/utils/report.ts","../../src/utils/user-message.ts","../../src/hooks/use-isomorphic-layout-effect.ts","../../src/hooks/use-debounce.ts","../../src/hooks/use-mounted.ts","../../src/hooks/use-media-query.ts","../../src/hooks/use-controllable-state.ts","../../src/hooks/use-hotkey.ts","../../src/events.ts","../../src/hooks/use-global-event.ts","../../src/result.ts","../../src/hooks/use-async-action.ts","../../src/hooks/use-server-action.ts","../../src/hooks/use-storage-state.ts","../../src/hooks/use-intersection-observer.ts","../../src/hooks/use-fullscreen-state.ts"],"names":["useCallback","useEffect","useSyncExternalStore","subscribe","getSnapshot","useState","useRef","listeners","err"],"mappings":"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","file":"index.js","sourcesContent":["\"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 { useCallback, useRef, useSyncExternalStore } from \"react\";\nimport { type ExternalStore } from \"../utils\";\n\nexport function useStore<TState, TSlice = TState>(\n store: ExternalStore<TState>,\n selector: (state: TState) => TSlice = (state: TState) =>\n state as unknown as TSlice,\n isEqual: (a: TSlice, b: TSlice) => boolean = Object.is,\n): TSlice {\n const cacheRef = useRef<{\n isEqual: ((a: TSlice, b: TSlice) => boolean) | null;\n selected: TSlice | undefined;\n selector: ((state: TState) => TSlice) | null;\n snapshot: TState | null;\n }>({\n isEqual: null,\n selected: undefined,\n selector: null,\n snapshot: null,\n });\n\n const getSelectedSnapshot = useCallback(() => {\n const snapshot = store.getSnapshot();\n const cache = cacheRef.current;\n if (\n cache.snapshot === snapshot &&\n cache.selector === selector &&\n cache.isEqual === isEqual\n ) {\n return cache.selected as TSlice;\n }\n\n const selected = selector(snapshot);\n if (\n cache.snapshot !== null &&\n cache.isEqual === isEqual &&\n isEqual(cache.selected as TSlice, selected)\n ) {\n cache.snapshot = snapshot;\n cache.selector = selector;\n return cache.selected as TSlice;\n }\n\n cacheRef.current = {\n isEqual,\n selected,\n selector,\n snapshot,\n };\n return selected;\n }, [isEqual, selector, store]);\n\n return useSyncExternalStore(\n store.subscribe,\n getSelectedSnapshot,\n getSelectedSnapshot,\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, type RefObject } from \"react\";\n\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\n ref: RefObject<T | null> | null | undefined,\n callback?: (event: PointerEvent) => void,\n): void {\n const handlePointer = useCallback(\n (event: PointerEvent) => {\n if (ref?.current && !ref.current.contains(event.target as Node)) {\n callback?.(event);\n }\n },\n [callback, ref],\n );\n\n useEffect(() => {\n document.addEventListener(\"pointerdown\", handlePointer);\n return () => document.removeEventListener(\"pointerdown\", handlePointer);\n }, [handlePointer]);\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","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","export const USER_MESSAGES = Object.freeze({\n generic: \"Something went wrong. Please try again\",\n network: \"You appear to be offline. Check your connection and try again\",\n timeout: \"That took too long. Please try again\",\n unauthorized: \"Your session has expired. Please sign in again\",\n forbidden: \"You don't have permission to do that\",\n notFound: \"We couldn't find what you were looking for\",\n rateLimited: \"Too many attempts. Please wait a moment and try again\",\n server: \"We're having trouble on our end. Please try again in a moment\",\n} as const);\n\nexport class UserError extends Error {\n readonly status?: number;\n\n constructor(message: string, status?: number) {\n super(message);\n this.name = \"UserError\";\n this.status = status;\n }\n}\n\nexport interface UserMessageOptions {\n fallback?: string;\n codes?: Readonly<Record<string, string>>;\n}\n\nconst NETWORK_FAILURE = /failed to fetch|network|load failed|fetch failed/i;\n\nfunction readField<T>(\n source: unknown,\n field: string,\n type: \"string\" | \"number\",\n): T | undefined {\n const value = (source as Record<string, unknown> | null)?.[field];\n return typeof value === type ? (value as T) : undefined;\n}\n\nfunction readPayloadMessage(error: unknown): string | undefined {\n const payload = (error as { payload?: unknown } | null)?.payload;\n const message = readField<string>(payload, \"error\", \"string\")?.trim();\n return message || undefined;\n}\n\nexport function toUserMessage(\n error: unknown,\n { codes, fallback = USER_MESSAGES.generic }: UserMessageOptions = {},\n): string {\n if (typeof error === \"string\") return error.trim() || fallback;\n if (!error || typeof error !== \"object\") return fallback;\n\n if (error instanceof UserError) {\n if (error.status === 401) return USER_MESSAGES.unauthorized;\n return error.message || fallback;\n }\n if ((error as { name?: string }).name === \"AbortError\") return fallback;\n\n const code = readField<string>(error, \"code\", \"string\");\n if (code && codes?.[code]) return codes[code];\n\n const status = readField<number>(error, \"status\", \"number\");\n\n if (status === 401) return USER_MESSAGES.unauthorized;\n if (status === 429) return USER_MESSAGES.rateLimited;\n if (status === 408 || status === 504) return USER_MESSAGES.timeout;\n if (status !== undefined && status >= 500) return USER_MESSAGES.server;\n\n if (status !== undefined && status >= 400) {\n const authored = readPayloadMessage(error);\n if (authored) return authored;\n if (status === 403) return USER_MESSAGES.forbidden;\n if (status === 404) return USER_MESSAGES.notFound;\n return fallback;\n }\n\n const isOffline =\n typeof navigator !== \"undefined\" && navigator.onLine === false;\n if (\n isOffline ||\n (NETWORK_FAILURE.test((error as Error).message ?? \"\") &&\n (error instanceof TypeError || /fetch/i.test((error as Error).name)))\n ) {\n return USER_MESSAGES.network;\n }\n\n return fallback;\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 { useEffect, useState } from \"react\";\n\nexport function useDebounce<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\n\nconst emptySubscribe = () => () => {};\n\nexport function useMounted(): boolean {\n return useSyncExternalStore(\n emptySubscribe,\n () => true,\n () => false,\n );\n}\n","\"use client\";\n\nimport { useCallback, useSyncExternalStore } from \"react\";\nimport { isBrowser } from \"../utils\";\n\nexport function useMediaQuery(\n query: string,\n serverFallback: boolean = false,\n): boolean {\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n if (!isBrowser || !query || typeof window.matchMedia !== \"function\") {\n return () => {};\n }\n const mediaQueryList = window.matchMedia(query);\n mediaQueryList.addEventListener(\"change\", onStoreChange);\n return () => mediaQueryList.removeEventListener(\"change\", onStoreChange);\n },\n [query],\n );\n\n const getSnapshot = useCallback(() => {\n if (!isBrowser || !query || typeof window.matchMedia !== \"function\") {\n return serverFallback;\n }\n return window.matchMedia(query).matches;\n }, [query, serverFallback]);\n\n const getServerSnapshot = useCallback(() => serverFallback, [serverFallback]);\n\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n","\"use client\";\n\nimport { useCallback, useRef, useState } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\nimport { UseControllableStateOptions } from \"./types\";\n\nexport function useControllableState<T>({\n defaultValue,\n onChange,\n value,\n}: UseControllableStateOptions<T>): [T, (next: T | ((prev: T) => T)) => void] {\n const [uncontrolledValue, setUncontrolledValue] = useState<T>(defaultValue);\n const isControlled = value !== undefined;\n const currentValue = isControlled ? (value as T) : uncontrolledValue;\n const valueRef = useRef<T>(currentValue);\n const onChangeRef = useRef(onChange);\n\n useIsomorphicLayoutEffect(() => {\n valueRef.current = currentValue;\n onChangeRef.current = onChange;\n });\n\n const setValue = useCallback(\n (next: T | ((prev: T) => T)) => {\n const resolvedNext =\n typeof next === \"function\"\n ? (next as (prev: T) => T)(valueRef.current)\n : next;\n if (!Object.is(valueRef.current, resolvedNext)) {\n if (!isControlled) {\n setUncontrolledValue(resolvedNext);\n }\n onChangeRef.current?.(resolvedNext);\n }\n },\n [isControlled],\n );\n\n return [currentValue, setValue];\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { isBrowser } from \"../utils\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\nimport { UseHotkeyOptions } from \"./types\";\n\nfunction isEditableElement(target: EventTarget | null): boolean {\n if (!target || typeof (target as HTMLElement).tagName !== \"string\") {\n return false;\n }\n const element = target as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n return true;\n }\n return Boolean(element.isContentEditable);\n}\n\nfunction matchesKeyCombo(event: KeyboardEvent, combo: string): boolean {\n const parts = combo\n .toLowerCase()\n .split(\"+\")\n .map((p) => p.trim())\n .filter(Boolean);\n if (parts.length === 0) return false;\n\n const keyPart = parts[parts.length - 1];\n const modifiers = new Set(parts.slice(0, -1));\n\n const wantsMod =\n modifiers.has(\"mod\") || modifiers.has(\"cmd\") || modifiers.has(\"meta\");\n const wantsCtrl = modifiers.has(\"ctrl\") || modifiers.has(\"control\");\n const wantsAlt = modifiers.has(\"alt\") || modifiers.has(\"option\");\n const wantsShift = modifiers.has(\"shift\");\n\n const isModPressed = event.metaKey || event.ctrlKey;\n if (wantsMod && !isModPressed) return false;\n if (!wantsMod && !wantsCtrl && (event.metaKey || event.ctrlKey)) return false;\n if (wantsCtrl && !event.ctrlKey) return false;\n if (wantsAlt !== event.altKey) return false;\n if (wantsShift !== event.shiftKey) return false;\n\n const pressedKey = event.key.toLowerCase();\n if (keyPart === \"esc\" || keyPart === \"escape\") {\n return pressedKey === \"escape\" || pressedKey === \"esc\";\n }\n if (keyPart === \"space\") {\n return pressedKey === \" \" || pressedKey === \"spacebar\";\n }\n return pressedKey === keyPart;\n}\n\nexport function useHotkey(\n combo: string | string[] | null | undefined,\n callback: (event: KeyboardEvent) => void,\n options?: UseHotkeyOptions,\n): void {\n const callbackRef = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback;\n });\n\n const enabled = options?.enabled ?? true;\n const enableOnFormTags = options?.enableOnFormTags ?? false;\n const preventDefault = options?.preventDefault ?? true;\n const stopPropagation = options?.stopPropagation ?? false;\n\n useEffect(() => {\n if (!isBrowser || !enabled || !combo) return;\n const combos = (Array.isArray(combo) ? combo : [combo]).filter(Boolean);\n if (combos.length === 0) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!enableOnFormTags && isEditableElement(event.target)) return;\n const matched = combos.some((c) => matchesKeyCombo(event, c));\n if (!matched) return;\n if (preventDefault) event.preventDefault();\n if (stopPropagation) event.stopPropagation();\n callbackRef.current?.(event);\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [combo, enabled, enableOnFormTags, preventDefault, stopPropagation]);\n}\n\nexport function useEscapeKey(\n callback: (event: KeyboardEvent) => void,\n enabled: boolean = true,\n): void {\n useHotkey(\"escape\", callback, {\n enabled,\n enableOnFormTags: true,\n preventDefault: false,\n });\n}\n","import { report } from \"./utils/report\";\nexport type EventListener<T = unknown> = (payload: T) => void;\n\nexport const EVENT_TYPES = Object.freeze({\n API_UNAUTHORIZED: \"API_UNAUTHORIZED\",\n STATE_CHANGE: \"STATE_CHANGE\",\n API_ERROR: \"API_ERROR\",\n APP_ERROR: \"APP_ERROR\",\n} as const);\n\nexport interface FrameworkEventMap {\n [EVENT_TYPES.API_UNAUTHORIZED]: {\n error?: unknown;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.API_ERROR]: {\n error: unknown;\n isCritical?: boolean;\n message?: string;\n retry?: () => void;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.APP_ERROR]: {\n error?: unknown;\n message?: string;\n resetError?: () => void;\n source?: string;\n [key: string]: unknown;\n };\n [EVENT_TYPES.STATE_CHANGE]: {\n message?: string;\n status?: \"success\" | \"warning\" | \"info\" | \"error\" | string;\n [key: string]: unknown;\n };\n}\n\nexport class EventEmitter<TEvents extends object = FrameworkEventMap> {\n private events: Map<string, Set<EventListener<never>>> = new Map();\n private debounceTimers: Map<string, ReturnType<typeof setTimeout>> =\n new Map();\n\n subscribe<K extends keyof TEvents>(\n event: K,\n callback: EventListener<TEvents[K]>,\n ): () => void;\n subscribe<T = unknown>(event: string, callback: EventListener<T>): () => void;\n subscribe(event: string, callback: EventListener<never>): () => void {\n if (typeof event !== \"string\" || !event || typeof callback !== \"function\") {\n return () => {};\n }\n const listeners = this.events.get(event) || new Set<EventListener<never>>();\n listeners.add(callback);\n this.events.set(event, listeners);\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) this.events.delete(event);\n };\n }\n\n emit<K extends keyof TEvents>(\n event: K,\n ...args: TEvents[K] extends void | undefined\n ? [payload?: TEvents[K]]\n : [payload: TEvents[K]]\n ): void;\n emit<T = unknown>(event: string, payload?: T): void;\n emit(event: string, payload?: unknown): void {\n const listeners = this.events.get(event);\n if (!listeners || listeners.size === 0) return;\n const snapshot = Array.from(listeners);\n for (const callback of snapshot) {\n try {\n (callback as EventListener<unknown>)(payload);\n } catch (error) {\n report(`Event listener (${String(event)})`, error);\n }\n }\n }\n\n emitDebounced<K extends keyof TEvents>(\n event: K,\n payload: TEvents[K],\n waitMs?: number,\n ): void;\n emitDebounced<T = unknown>(event: string, payload?: T, waitMs?: number): void;\n emitDebounced(event: string, payload?: unknown, waitMs: number = 100): void {\n const existing = this.debounceTimers.get(event);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.debounceTimers.delete(event);\n this.emit(event, payload);\n }, waitMs);\n\n this.debounceTimers.set(event, timer);\n }\n\n cancelDebounced(event?: string): void {\n if (event) {\n const timer = this.debounceTimers.get(event);\n if (timer) {\n clearTimeout(timer);\n this.debounceTimers.delete(event);\n }\n } else {\n for (const timer of this.debounceTimers.values()) {\n clearTimeout(timer);\n }\n this.debounceTimers.clear();\n }\n }\n\n unsubscribeAll(event?: string): void {\n this.cancelDebounced(event);\n if (event) this.events.delete(event);\n else this.events.clear();\n }\n\n hasListeners(event: string): boolean {\n return Boolean(this.events.get(event)?.size);\n }\n\n getListenerCount(event: string): number {\n return this.events.get(event)?.size || 0;\n }\n\n getAllEvents(): string[] {\n return [...this.events.keys()];\n }\n}\n\nconst GLOBAL_EVENTS_KEY = Symbol.for(\"__base_framework_global_events__\");\ntype GlobalWithEvents = typeof globalThis & {\n [GLOBAL_EVENTS_KEY]?: EventEmitter<FrameworkEventMap>;\n};\n\nconst _global = globalThis as GlobalWithEvents;\nexport const globalEvents: EventEmitter<FrameworkEventMap> =\n _global[GLOBAL_EVENTS_KEY] ??\n (_global[GLOBAL_EVENTS_KEY] = new EventEmitter<FrameworkEventMap>());\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useSyncExternalStore } from \"react\";\nimport { globalEvents, type FrameworkEventMap } from \"@/events\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\nimport { UseGlobalEventOptions } from \"./types\";\n\nexport function useGlobalEvent<K extends keyof FrameworkEventMap>(\n event: K | K[] | null | undefined,\n callback: (payload: FrameworkEventMap[K]) => void,\n options?: UseGlobalEventOptions,\n): void;\n\nexport function useGlobalEvent<T = unknown>(\n event: string | string[] | null | undefined,\n callback: (payload: T) => void,\n options?: UseGlobalEventOptions,\n): void;\n\nexport function useGlobalEvent(\n event: string | string[] | null | undefined,\n callback: (payload: never) => void,\n options?: UseGlobalEventOptions,\n): void {\n const callbackRef = useRef(callback);\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const lastThrottleTimeRef = useRef<number>(0);\n const throttleTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback;\n });\n\n const debounceMs = options?.debounceMs;\n const throttleMs = options?.throttleMs;\n\n useEffect(() => {\n if (!event) return;\n const events = Array.isArray(event) ? event.filter(Boolean) : [event];\n if (events.length === 0) return;\n\n const handler = (payload: never) => {\n if (debounceMs != null && debounceMs > 0) {\n if (debounceTimerRef.current !== null) {\n clearTimeout(debounceTimerRef.current);\n }\n debounceTimerRef.current = setTimeout(() => {\n debounceTimerRef.current = null;\n callbackRef.current?.(payload);\n }, debounceMs);\n return;\n }\n\n if (throttleMs != null && throttleMs > 0) {\n const now = Date.now();\n const remaining = throttleMs - (now - lastThrottleTimeRef.current);\n if (remaining <= 0) {\n if (throttleTimerRef.current !== null) {\n clearTimeout(throttleTimerRef.current);\n throttleTimerRef.current = null;\n }\n lastThrottleTimeRef.current = now;\n callbackRef.current?.(payload);\n } else if (throttleTimerRef.current === null) {\n throttleTimerRef.current = setTimeout(() => {\n lastThrottleTimeRef.current = Date.now();\n throttleTimerRef.current = null;\n callbackRef.current?.(payload);\n }, remaining);\n }\n return;\n }\n\n callbackRef.current?.(payload);\n };\n\n const unsubs = events.map((ev) => globalEvents.subscribe(ev, handler));\n\n return () => {\n unsubs.forEach((unsub) => unsub());\n if (debounceTimerRef.current !== null) {\n clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = null;\n }\n if (throttleTimerRef.current !== null) {\n clearTimeout(throttleTimerRef.current);\n throttleTimerRef.current = null;\n }\n };\n }, [event, debounceMs, throttleMs]);\n}\n\nexport function useEventState<T, K extends keyof FrameworkEventMap>(\n event: K | null | undefined,\n initialValue: T,\n reducer: (prevState: T, payload: FrameworkEventMap[K]) => T,\n): T;\n\nexport function useEventState<T, P = unknown>(\n event: string | null | undefined,\n initialValue: T,\n reducer: (prevState: T, payload: P) => T,\n): T;\n\nexport function useEventState<T, P = unknown>(\n event: string | null | undefined,\n initialValue: T,\n reducer: (prevState: T, payload: P) => T,\n): T {\n const storeRef = useRef<{\n value: T;\n listeners: Set<() => void>;\n reducer: (prevState: T, payload: P) => T;\n } | null>(null);\n\n if (storeRef.current == null) {\n storeRef.current = {\n value: initialValue,\n listeners: new Set(),\n reducer,\n };\n }\n\n useIsomorphicLayoutEffect(() => {\n if (storeRef.current != null) {\n storeRef.current.reducer = reducer;\n }\n });\n\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n if (!event || !storeRef.current) return () => {};\n storeRef.current.listeners.add(onStoreChange);\n\n const unsub = globalEvents.subscribe<P>(event, (payload) => {\n if (!storeRef.current) return;\n const next = storeRef.current.reducer(storeRef.current.value, payload);\n if (!Object.is(storeRef.current.value, next)) {\n storeRef.current.value = next;\n storeRef.current.listeners.forEach((listener) => listener());\n }\n });\n\n return () => {\n storeRef.current?.listeners.delete(onStoreChange);\n unsub();\n };\n },\n [event],\n );\n\n const getSnapshot = useCallback(() => {\n return storeRef.current?.value ?? initialValue;\n }, [initialValue]);\n\n const getServerSnapshot = useCallback(() => {\n return initialValue;\n }, [initialValue]);\n\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n","import { UserError, toUserMessage } from \"./utils/user-message\";\nimport { report } from \"./utils/report\";\n\nexport interface SuccessResult<T> {\n readonly code?: string;\n readonly data: T;\n readonly error?: never;\n readonly success: true;\n}\n\nexport interface ErrorResult<E = string> {\n readonly code?: string;\n readonly data?: never;\n readonly error: E;\n readonly success: false;\n}\n\nexport type Result<T, E = string> = SuccessResult<T> | ErrorResult<E>;\n\nexport function ok<T>(data: T, code?: string): SuccessResult<T> {\n return { data, success: true, ...(code ? { code } : {}) };\n}\n\nexport function err<E = string>(error: E, code?: string): ErrorResult<E> {\n return { error, success: false, ...(code ? { code } : {}) };\n}\n\nexport function isResult(value: unknown): value is Result<unknown, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"success\" in value &&\n typeof (value as { success: unknown }).success === \"boolean\" &&\n ((\"data\" in value && (value as { success: boolean }).success === true) ||\n (\"error\" in value && (value as { success: boolean }).success === false))\n );\n}\n\nexport function isOk<T, E = string>(\n result: Result<T, E>,\n): result is SuccessResult<T> {\n return result.success === true;\n}\n\nexport function isErr<T, E = string>(\n result: Result<T, E>,\n): result is ErrorResult<E> {\n return result.success === false;\n}\n\nexport function unwrap<T, E = string>(result: Result<T, E>): T {\n if (result.success) {\n return result.data;\n }\n if (result.error instanceof Error) {\n throw result.error;\n }\n throw new Error(\n typeof result.error === \"string\" ? result.error : String(result.error),\n );\n}\n\nexport function unwrapOr<T, E = string>(result: Result<T, E>, fallback: T): T {\n return result.success ? result.data : fallback;\n}\n\nexport function map<T, U, E = string>(\n result: Result<T, E>,\n fn: (data: T) => U,\n): Result<U, E> {\n return result.success ? ok(fn(result.data), result.code) : result;\n}\n\nexport function mapErr<T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => F,\n): Result<T, F> {\n return result.success ? result : err(fn(result.error), result.code);\n}\n\nexport function match<T, E, R>(\n result: Result<T, E>,\n branches: { ok: (data: T) => R; err: (error: E) => R },\n): R {\n return result.success ? branches.ok(result.data) : branches.err(result.error);\n}\n\nfunction mapCaught<E>(error: unknown, mapError?: (error: unknown) => E): E {\n if (!(error instanceof UserError)) report(\"Result\", error);\n return mapError ? mapError(error) : (toUserMessage(error) as unknown as E);\n}\n\nexport async function tryCatch<T, E = string>(\n promiseOrFn: Promise<T> | (() => Promise<T>),\n mapError?: (error: unknown) => E,\n): Promise<Result<T, E>> {\n try {\n const data =\n typeof promiseOrFn === \"function\"\n ? await promiseOrFn()\n : await promiseOrFn;\n return ok(data);\n } catch (error) {\n return err(mapCaught(error, mapError));\n }\n}\n\ninterface SafeActionSchema<TParsed> {\n safeParse: (input: unknown) =>\n | { data: TParsed; success: true }\n | {\n error?: {\n issues?: Array<{ message?: string }>;\n message?: string;\n };\n success: false;\n };\n}\n\nexport interface SafeActionOptions<TArgs extends unknown[], E = string> {\n errorCode?: string;\n mapError?: (error: unknown) => E;\n schema?: SafeActionSchema<TArgs[0]>;\n validate?: (\n ...args: TArgs\n ) => Result<unknown, E> | string | boolean | null | undefined;\n}\n\nexport function createSafeAction<TArgs extends unknown[], TOutput, E = string>(\n handler: (\n ...args: TArgs\n ) => Promise<Result<TOutput, E> | TOutput> | Result<TOutput, E> | TOutput,\n options: SafeActionOptions<TArgs, E> = {},\n): (...args: TArgs) => Promise<Result<TOutput, E>> {\n const { errorCode, mapError, schema, validate } = options;\n\n return async (...args: TArgs): Promise<Result<TOutput, E>> => {\n try {\n let effectiveArgs = args;\n\n if (schema) {\n const parsed = schema.safeParse(args[0]);\n if (!parsed.success) {\n const issueMessage =\n parsed.error?.issues?.[0]?.message ||\n parsed.error?.message ||\n \"Invalid input\";\n return err(\n mapError ? mapError(issueMessage) : (issueMessage as unknown as E),\n errorCode ?? \"VALIDATION_ERROR\",\n );\n }\n effectiveArgs = [parsed.data, ...args.slice(1)] as TArgs;\n }\n\n if (validate) {\n const validationResult = validate(...effectiveArgs);\n if (isResult(validationResult)) {\n if (isErr(validationResult)) {\n return validationResult as ErrorResult<E>;\n }\n } else if (validationResult === false) {\n return err(\n mapError\n ? mapError(\"Validation failed\")\n : (\"Validation failed\" as unknown as E),\n errorCode ?? \"VALIDATION_ERROR\",\n );\n } else if (\n typeof validationResult === \"string\" &&\n validationResult.length > 0\n ) {\n return err(\n mapError\n ? mapError(validationResult)\n : (validationResult as unknown as E),\n errorCode ?? \"VALIDATION_ERROR\",\n );\n }\n }\n\n const output = await handler(...effectiveArgs);\n if (isResult(output)) {\n return output as Result<TOutput, E>;\n }\n return ok(output as TOutput);\n } catch (error) {\n return err(mapCaught(error, mapError), errorCode);\n }\n };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport { EVENT_TYPES, globalEvents } from \"@/events\";\nimport { isErr, isResult } from \"@/result\";\nimport { toUserMessage } from \"@/utils\";\nimport { UseAsyncActionOptions, UseAsyncActionResult } from \"./types\";\n\nexport function useAsyncAction<\n TArgs extends unknown[] = unknown[],\n TResult = unknown,\n>(\n actionFn: (...args: TArgs) => Promise<TResult>,\n options: UseAsyncActionOptions<TResult> = {},\n): UseAsyncActionResult<TArgs, TResult> {\n const {\n errorMessage = null,\n onError = null,\n onSuccess = null,\n successMessage = null,\n toast = null,\n } = options;\n\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState<unknown>(null);\n\n const execute = useCallback(\n async (...args: TArgs): Promise<TResult> => {\n setIsPending(true);\n setError(null);\n try {\n const result = await actionFn(...args);\n\n if (isResult(result) && isErr(result)) {\n setError(result.error);\n const resolvedMessage = errorMessage || toUserMessage(result.error);\n if (typeof toast === \"function\") {\n toast(resolvedMessage);\n }\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error: result.error,\n message: resolvedMessage,\n notify: toast === true,\n });\n await onError?.(result.error);\n return result;\n }\n\n if (successMessage) {\n if (typeof toast === \"function\") {\n toast(successMessage);\n }\n globalEvents.emit(EVENT_TYPES.STATE_CHANGE, {\n message: successMessage,\n notify: toast === true,\n status: \"success\",\n });\n }\n await onSuccess?.(result);\n return result;\n } catch (err) {\n setError(err);\n const resolvedMessage = errorMessage || toUserMessage(err);\n if (typeof toast === \"function\") {\n toast(resolvedMessage);\n }\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error: err,\n message: resolvedMessage,\n notify: toast === true,\n });\n await onError?.(err);\n throw err;\n } finally {\n setIsPending(false);\n }\n },\n [actionFn, errorMessage, onError, onSuccess, successMessage, toast],\n );\n\n return { error, execute, isPending };\n}\n","\"use client\";\n\nimport { useCallback, useState, useTransition } from \"react\";\nimport { EVENT_TYPES, globalEvents } from \"@/events\";\nimport { err as resultErr, isErr, type Result } from \"@/result\";\nimport { toUserMessage } from \"@/utils\";\nimport { UseServerActionOptions, UseServerActionResult } from \"./types\";\n\nexport function useServerAction<\n TArgs extends unknown[] = unknown[],\n T = unknown,\n E = string,\n>(\n actionFn: (...args: TArgs) => Promise<Result<T, E>>,\n options: UseServerActionOptions<T, E> = {},\n): UseServerActionResult<TArgs, T, E> {\n const {\n errorMessage = null,\n onError = null,\n onSuccess = null,\n successMessage = null,\n toast = null,\n } = options;\n\n const [isPending, startTransition] = useTransition();\n const [data, setData] = useState<T | null>(null);\n const [error, setError] = useState<E | null>(null);\n\n const reset = useCallback(() => {\n setData(null);\n setError(null);\n }, []);\n\n const execute = useCallback(\n (...args: TArgs): Promise<Result<T, E>> => {\n return new Promise((resolve) => {\n startTransition(async () => {\n setError(null);\n try {\n const result = await actionFn(...args);\n if (isErr(result)) {\n setError(result.error);\n const resolvedMessage =\n errorMessage || toUserMessage(result.error);\n if (typeof toast === \"function\") {\n toast(resolvedMessage);\n }\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error: result.error,\n message: resolvedMessage,\n notify: toast === true,\n });\n await onError?.(result.error);\n resolve(result);\n return;\n }\n\n setData(result.data);\n if (successMessage) {\n if (typeof toast === \"function\") {\n toast(successMessage);\n }\n globalEvents.emit(EVENT_TYPES.STATE_CHANGE, {\n message: successMessage,\n notify: toast === true,\n status: \"success\",\n });\n }\n await onSuccess?.(result.data);\n resolve(result);\n } catch (err) {\n const mappedError = toUserMessage(err) as unknown as E;\n setError(mappedError);\n const resolvedMessage = errorMessage || (mappedError as string);\n if (typeof toast === \"function\") {\n toast(resolvedMessage);\n }\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error: err,\n message: resolvedMessage,\n notify: toast === true,\n });\n await onError?.(mappedError);\n resolve(resultErr(mappedError));\n }\n });\n });\n },\n [actionFn, errorMessage, onError, onSuccess, successMessage, toast],\n );\n\n return { data, error, execute, isPending, reset };\n}\n","\"use client\";\n\nimport { useCallback, useRef, useSyncExternalStore } from \"react\";\nimport { isBrowser } from \"../utils\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\nimport { UseStorageStateOptions } from \"./types\";\n\nfunction getStorageInstance(type: \"local\" | \"session\"): Storage | null {\n if (!isBrowser) return null;\n try {\n return type === \"session\" ? window.sessionStorage : window.localStorage;\n } catch {\n return null;\n }\n}\n\nconst STORAGE_SYNC_EVENT = \"base-framework:storage-sync\";\n\nexport function useStorageState<T>(\n key: string,\n initialValue: T,\n options: UseStorageStateOptions<T> = {},\n): [T, (next: T | ((prev: T) => T)) => void, () => void] {\n const storageType = options.storage ?? \"local\";\n const serialize = options.serialize ?? JSON.stringify;\n const deserialize = options.deserialize ?? JSON.parse;\n\n const cacheRef = useRef<{ parsed: T; raw: string | null }>({\n parsed: initialValue,\n raw: null,\n });\n\n const getSnapshot = useCallback((): T => {\n const storage = getStorageInstance(storageType);\n if (!storage) return initialValue;\n try {\n const raw = storage.getItem(key);\n if (raw === null) {\n cacheRef.current = { parsed: initialValue, raw: null };\n return initialValue;\n }\n if (cacheRef.current.raw === raw) {\n return cacheRef.current.parsed;\n }\n const parsed = deserialize(raw);\n cacheRef.current = { parsed, raw };\n return parsed;\n } catch {\n return initialValue;\n }\n }, [deserialize, initialValue, key, storageType]);\n\n const getServerSnapshot = useCallback((): T => initialValue, [initialValue]);\n\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n if (!isBrowser) return () => {};\n\n const handleStorage = (event: StorageEvent) => {\n if (\n event.key === key &&\n event.storageArea === getStorageInstance(storageType)\n ) {\n onStoreChange();\n }\n };\n\n const handleCustomSync = (event: Event) => {\n const detail = (\n event as CustomEvent<{ key: string; storageType: string }>\n ).detail;\n if (detail?.key === key && detail?.storageType === storageType) {\n onStoreChange();\n }\n };\n\n window.addEventListener(\"storage\", handleStorage);\n window.addEventListener(STORAGE_SYNC_EVENT, handleCustomSync);\n return () => {\n window.removeEventListener(\"storage\", handleStorage);\n window.removeEventListener(STORAGE_SYNC_EVENT, handleCustomSync);\n };\n },\n [key, storageType],\n );\n\n const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const stateRef = useRef<T>(state);\n\n useIsomorphicLayoutEffect(() => {\n stateRef.current = state;\n });\n\n const setValue = useCallback(\n (next: T | ((prev: T) => T)) => {\n const resolvedNext =\n typeof next === \"function\"\n ? (next as (prev: T) => T)(stateRef.current)\n : next;\n stateRef.current = resolvedNext;\n\n const storage = getStorageInstance(storageType);\n if (!storage) return;\n try {\n const raw = serialize(resolvedNext);\n cacheRef.current = { parsed: resolvedNext, raw };\n storage.setItem(key, raw);\n window.dispatchEvent(\n new CustomEvent(STORAGE_SYNC_EVENT, {\n detail: { key, storageType },\n }),\n );\n } catch {}\n },\n [key, serialize, storageType],\n );\n\n const removeValue = useCallback(() => {\n stateRef.current = initialValue;\n cacheRef.current = { parsed: initialValue, raw: null };\n\n const storage = getStorageInstance(storageType);\n if (!storage) return;\n try {\n storage.removeItem(key);\n window.dispatchEvent(\n new CustomEvent(STORAGE_SYNC_EVENT, {\n detail: { key, storageType },\n }),\n );\n } catch {}\n }, [initialValue, key, storageType]);\n\n return [state, setValue, removeValue];\n}\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n options?: Omit<UseStorageStateOptions<T>, \"storage\">,\n): [T, (next: T | ((prev: T) => T)) => void, () => void] {\n return useStorageState(key, initialValue, { ...options, storage: \"local\" });\n}\n\nexport function useSessionStorage<T>(\n key: string,\n initialValue: T,\n options?: Omit<UseStorageStateOptions<T>, \"storage\">,\n): [T, (next: T | ((prev: T) => T)) => void, () => void] {\n return useStorageState(key, initialValue, { ...options, storage: \"session\" });\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState, type RefObject } from \"react\";\nimport { isBrowser } from \"../utils\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\nimport {\n UseIntersectionObserverOptions,\n UseIntersectionObserverResult,\n} from \"./types\";\n\nexport function useIntersectionObserver<T extends Element = Element>(\n targetRef: RefObject<T | null> | null | undefined,\n options: UseIntersectionObserverOptions = {},\n): UseIntersectionObserverResult {\n const {\n enabled = true,\n freezeOnceVisible = false,\n onChange,\n root = null,\n rootMargin = \"0px\",\n threshold = 0,\n } = options;\n\n const [entry, setEntry] = useState<IntersectionObserverEntry | null>(null);\n const onChangeRef = useRef(onChange);\n\n useIsomorphicLayoutEffect(() => {\n onChangeRef.current = onChange;\n });\n\n const frozen = Boolean(entry?.isIntersecting && freezeOnceVisible);\n\n useEffect(() => {\n if (\n !isBrowser ||\n !enabled ||\n frozen ||\n typeof IntersectionObserver === \"undefined\"\n ) {\n return;\n }\n\n const node = targetRef?.current;\n if (!node) return;\n\n const observer = new IntersectionObserver(\n ([nextEntry]) => {\n if (!nextEntry) return;\n setEntry(nextEntry);\n onChangeRef.current?.(nextEntry);\n },\n { root, rootMargin, threshold },\n );\n\n observer.observe(node);\n return () => observer.disconnect();\n }, [enabled, frozen, root, rootMargin, targetRef, threshold]);\n\n return {\n entry,\n isIntersecting: Boolean(entry?.isIntersecting),\n };\n}\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\n\nconst listeners = new Set<() => void>();\nconst activeFullscreenStateIds = new Set<string>();\n\nconst ACTIVE_FULLSCREEN_ROOT_SELECTOR =\n '[data-fullscreen-state-root=\"true\"][data-affect-global-state=\"true\"]';\n\nlet domObserver: MutationObserver | null = null;\nlet lastSnapshot = false;\n\nfunction getDomSnapshot(): boolean {\n if (typeof document === \"undefined\") {\n return activeFullscreenStateIds.size > 0;\n }\n\n return document.querySelector(ACTIVE_FULLSCREEN_ROOT_SELECTOR) !== null;\n}\n\nfunction emitChange(): void {\n listeners.forEach((listener) => listener());\n}\n\nfunction emitIfSnapshotChanged(): void {\n const nextSnapshot = getDomSnapshot();\n\n if (nextSnapshot === lastSnapshot) {\n return;\n }\n\n lastSnapshot = nextSnapshot;\n emitChange();\n}\n\nfunction ensureDomObserver(): void {\n if (typeof document === \"undefined\" || domObserver || listeners.size === 0) {\n return;\n }\n\n domObserver = new MutationObserver(() => {\n emitIfSnapshotChanged();\n });\n\n domObserver.observe(document.documentElement, {\n attributes: true,\n childList: true,\n subtree: true,\n attributeFilter: [\n \"data-fullscreen-state\",\n \"data-fullscreen-state-root\",\n \"data-affect-global-state\",\n ],\n });\n}\n\nfunction releaseDomObserver(): void {\n if (listeners.size > 0 || !domObserver) {\n return;\n }\n\n domObserver.disconnect();\n domObserver = null;\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener);\n ensureDomObserver();\n emitIfSnapshotChanged();\n\n return () => {\n listeners.delete(listener);\n releaseDomObserver();\n };\n}\n\nfunction getSnapshot(): boolean {\n return getDomSnapshot();\n}\n\nexport function registerFullscreenState(id: string): void {\n activeFullscreenStateIds.add(id);\n emitIfSnapshotChanged();\n}\n\nexport function unregisterFullscreenState(id: string): void {\n activeFullscreenStateIds.delete(id);\n emitIfSnapshotChanged();\n}\n\nexport function useIsFullscreenStateActive(): boolean {\n return useSyncExternalStore(subscribe, getSnapshot, () => false);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-required-context.ts","../../src/hooks/use-store.ts","../../src/hooks/use-click-outside.ts","../../src/utils/dom.ts","../../src/utils/report.ts","../../src/hooks/use-isomorphic-layout-effect.ts","../../src/events.ts","../../src/hooks/use-global-event.ts","../../src/hooks/use-fullscreen-state.ts","../../src/hooks/use-controllable-state.ts","../../src/hooks/use-hotkey.ts"],"names":["useCallback","useEffect","listeners","useRef","useSyncExternalStore"],"mappings":"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","file":"index.js","sourcesContent":["\"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 { useCallback, useRef, useSyncExternalStore } from \"react\";\nimport { type ExternalStore } from \"../utils\";\n\nexport function useStore<TState, TSlice = TState>(\n store: ExternalStore<TState>,\n selector: (state: TState) => TSlice = (state: TState) =>\n state as unknown as TSlice,\n isEqual: (a: TSlice, b: TSlice) => boolean = Object.is,\n): TSlice {\n const cacheRef = useRef<{\n isEqual: ((a: TSlice, b: TSlice) => boolean) | null;\n selected: TSlice | undefined;\n selector: ((state: TState) => TSlice) | null;\n snapshot: TState | null;\n }>({\n isEqual: null,\n selected: undefined,\n selector: null,\n snapshot: null,\n });\n\n const getSelectedSnapshot = useCallback(() => {\n const snapshot = store.getSnapshot();\n const cache = cacheRef.current;\n if (\n cache.snapshot === snapshot &&\n cache.selector === selector &&\n cache.isEqual === isEqual\n ) {\n return cache.selected as TSlice;\n }\n\n const selected = selector(snapshot);\n if (\n cache.snapshot !== null &&\n cache.isEqual === isEqual &&\n isEqual(cache.selected as TSlice, selected)\n ) {\n cache.snapshot = snapshot;\n cache.selector = selector;\n return cache.selected as TSlice;\n }\n\n cacheRef.current = {\n isEqual,\n selected,\n selector,\n snapshot,\n };\n return selected;\n }, [isEqual, selector, store]);\n\n return useSyncExternalStore(\n store.subscribe,\n getSelectedSnapshot,\n getSelectedSnapshot,\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, type RefObject } from \"react\";\n\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\n ref: RefObject<T | null> | null | undefined,\n callback?: (event: PointerEvent) => void,\n): void {\n const handlePointer = useCallback(\n (event: PointerEvent) => {\n if (ref?.current && !ref.current.contains(event.target as Node)) {\n callback?.(event);\n }\n },\n [callback, ref],\n );\n\n useEffect(() => {\n document.addEventListener(\"pointerdown\", handlePointer);\n return () => document.removeEventListener(\"pointerdown\", handlePointer);\n }, [handlePointer]);\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 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","\"use client\";\n\nimport { useEffect, useLayoutEffect } from \"react\";\nimport { isBrowser } from \"../utils\";\n\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n","import { report } from \"./utils/report\";\nexport type EventListener<T = unknown> = (payload: T) => void;\n\nexport const EVENT_TYPES = Object.freeze({\n API_UNAUTHORIZED: \"API_UNAUTHORIZED\",\n STATE_CHANGE: \"STATE_CHANGE\",\n API_ERROR: \"API_ERROR\",\n APP_ERROR: \"APP_ERROR\",\n} as const);\n\nexport interface FrameworkEventMap {\n [EVENT_TYPES.API_UNAUTHORIZED]: {\n error?: unknown;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.API_ERROR]: {\n error: unknown;\n isCritical?: boolean;\n message?: string;\n retry?: () => void;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.APP_ERROR]: {\n error?: unknown;\n message?: string;\n resetError?: () => void;\n source?: string;\n [key: string]: unknown;\n };\n [EVENT_TYPES.STATE_CHANGE]: {\n message?: string;\n status?: \"success\" | \"warning\" | \"info\" | \"error\" | string;\n [key: string]: unknown;\n };\n}\n\nexport class EventEmitter<TEvents extends object = FrameworkEventMap> {\n private events: Map<string, Set<EventListener<never>>> = new Map();\n private debounceTimers: Map<string, ReturnType<typeof setTimeout>> =\n new Map();\n\n subscribe<K extends keyof TEvents>(\n event: K,\n callback: EventListener<TEvents[K]>,\n ): () => void;\n subscribe<T = unknown>(event: string, callback: EventListener<T>): () => void;\n subscribe(event: string, callback: EventListener<never>): () => void {\n if (typeof event !== \"string\" || !event || typeof callback !== \"function\") {\n return () => {};\n }\n const listeners = this.events.get(event) || new Set<EventListener<never>>();\n listeners.add(callback);\n this.events.set(event, listeners);\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) this.events.delete(event);\n };\n }\n\n emit<K extends keyof TEvents>(\n event: K,\n ...args: TEvents[K] extends void | undefined\n ? [payload?: TEvents[K]]\n : [payload: TEvents[K]]\n ): void;\n emit<T = unknown>(event: string, payload?: T): void;\n emit(event: string, payload?: unknown): void {\n const listeners = this.events.get(event);\n if (!listeners || listeners.size === 0) return;\n const snapshot = Array.from(listeners);\n for (const callback of snapshot) {\n try {\n (callback as EventListener<unknown>)(payload);\n } catch (error) {\n report(`Event listener (${String(event)})`, error);\n }\n }\n }\n\n emitDebounced<K extends keyof TEvents>(\n event: K,\n payload: TEvents[K],\n waitMs?: number,\n ): void;\n emitDebounced<T = unknown>(event: string, payload?: T, waitMs?: number): void;\n emitDebounced(event: string, payload?: unknown, waitMs: number = 100): void {\n const existing = this.debounceTimers.get(event);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.debounceTimers.delete(event);\n this.emit(event, payload);\n }, waitMs);\n\n this.debounceTimers.set(event, timer);\n }\n\n cancelDebounced(event?: string): void {\n if (event) {\n const timer = this.debounceTimers.get(event);\n if (timer) {\n clearTimeout(timer);\n this.debounceTimers.delete(event);\n }\n } else {\n for (const timer of this.debounceTimers.values()) {\n clearTimeout(timer);\n }\n this.debounceTimers.clear();\n }\n }\n\n unsubscribeAll(event?: string): void {\n this.cancelDebounced(event);\n if (event) this.events.delete(event);\n else this.events.clear();\n }\n\n hasListeners(event: string): boolean {\n return Boolean(this.events.get(event)?.size);\n }\n\n getListenerCount(event: string): number {\n return this.events.get(event)?.size || 0;\n }\n\n getAllEvents(): string[] {\n return [...this.events.keys()];\n }\n}\n\nconst GLOBAL_EVENTS_KEY = Symbol.for(\"__base_framework_global_events__\");\ntype GlobalWithEvents = typeof globalThis & {\n [GLOBAL_EVENTS_KEY]?: EventEmitter<FrameworkEventMap>;\n};\n\nconst _global = globalThis as GlobalWithEvents;\nexport const globalEvents: EventEmitter<FrameworkEventMap> =\n _global[GLOBAL_EVENTS_KEY] ??\n (_global[GLOBAL_EVENTS_KEY] = new EventEmitter<FrameworkEventMap>());\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { globalEvents, type FrameworkEventMap } from \"@/events\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\nimport { UseGlobalEventOptions } from \"./types\";\n\nexport function useGlobalEvent<K extends keyof FrameworkEventMap>(\n event: K | K[] | null | undefined,\n callback: (payload: FrameworkEventMap[K]) => void,\n options?: UseGlobalEventOptions,\n): void;\n\nexport function useGlobalEvent<T = unknown>(\n event: string | string[] | null | undefined,\n callback: (payload: T) => void,\n options?: UseGlobalEventOptions,\n): void;\n\nexport function useGlobalEvent(\n event: string | string[] | null | undefined,\n callback: (payload: never) => void,\n options?: UseGlobalEventOptions,\n): void {\n const callbackRef = useRef(callback);\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const lastThrottleTimeRef = useRef<number>(0);\n const throttleTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback;\n });\n\n const debounceMs = options?.debounceMs;\n const throttleMs = options?.throttleMs;\n\n useEffect(() => {\n if (!event) return;\n const events = Array.isArray(event) ? event.filter(Boolean) : [event];\n if (events.length === 0) return;\n\n const handler = (payload: never) => {\n if (debounceMs != null && debounceMs > 0) {\n if (debounceTimerRef.current !== null) {\n clearTimeout(debounceTimerRef.current);\n }\n debounceTimerRef.current = setTimeout(() => {\n debounceTimerRef.current = null;\n callbackRef.current?.(payload);\n }, debounceMs);\n return;\n }\n\n if (throttleMs != null && throttleMs > 0) {\n const now = Date.now();\n const remaining = throttleMs - (now - lastThrottleTimeRef.current);\n if (remaining <= 0) {\n if (throttleTimerRef.current !== null) {\n clearTimeout(throttleTimerRef.current);\n throttleTimerRef.current = null;\n }\n lastThrottleTimeRef.current = now;\n callbackRef.current?.(payload);\n } else if (throttleTimerRef.current === null) {\n throttleTimerRef.current = setTimeout(() => {\n lastThrottleTimeRef.current = Date.now();\n throttleTimerRef.current = null;\n callbackRef.current?.(payload);\n }, remaining);\n }\n return;\n }\n\n callbackRef.current?.(payload);\n };\n\n const unsubs = events.map((ev) => globalEvents.subscribe(ev, handler));\n\n return () => {\n unsubs.forEach((unsub) => unsub());\n if (debounceTimerRef.current !== null) {\n clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = null;\n }\n if (throttleTimerRef.current !== null) {\n clearTimeout(throttleTimerRef.current);\n throttleTimerRef.current = null;\n }\n };\n }, [event, debounceMs, throttleMs]);\n}\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\n\nconst listeners = new Set<() => void>();\nconst activeFullscreenStateIds = new Set<string>();\n\nconst ACTIVE_FULLSCREEN_ROOT_SELECTOR =\n '[data-fullscreen-state-root=\"true\"][data-affect-global-state=\"true\"]';\n\nlet domObserver: MutationObserver | null = null;\nlet lastSnapshot = false;\n\nfunction getDomSnapshot(): boolean {\n if (typeof document === \"undefined\") {\n return activeFullscreenStateIds.size > 0;\n }\n\n return document.querySelector(ACTIVE_FULLSCREEN_ROOT_SELECTOR) !== null;\n}\n\nfunction emitChange(): void {\n listeners.forEach((listener) => listener());\n}\n\nfunction emitIfSnapshotChanged(): void {\n const nextSnapshot = getDomSnapshot();\n\n if (nextSnapshot === lastSnapshot) {\n return;\n }\n\n lastSnapshot = nextSnapshot;\n emitChange();\n}\n\nfunction ensureDomObserver(): void {\n if (typeof document === \"undefined\" || domObserver || listeners.size === 0) {\n return;\n }\n\n domObserver = new MutationObserver(() => {\n emitIfSnapshotChanged();\n });\n\n domObserver.observe(document.documentElement, {\n attributes: true,\n childList: true,\n subtree: true,\n attributeFilter: [\n \"data-fullscreen-state\",\n \"data-fullscreen-state-root\",\n \"data-affect-global-state\",\n ],\n });\n}\n\nfunction releaseDomObserver(): void {\n if (listeners.size > 0 || !domObserver) {\n return;\n }\n\n domObserver.disconnect();\n domObserver = null;\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener);\n ensureDomObserver();\n emitIfSnapshotChanged();\n\n return () => {\n listeners.delete(listener);\n releaseDomObserver();\n };\n}\n\nfunction getSnapshot(): boolean {\n return getDomSnapshot();\n}\n\nexport function registerFullscreenState(id: string): void {\n activeFullscreenStateIds.add(id);\n emitIfSnapshotChanged();\n}\n\nexport function unregisterFullscreenState(id: string): void {\n activeFullscreenStateIds.delete(id);\n emitIfSnapshotChanged();\n}\n\nexport function useIsFullscreenStateActive(): boolean {\n return useSyncExternalStore(subscribe, getSnapshot, () => false);\n}\n","\"use client\";\n\nimport { useCallback, useRef, useState } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\nimport { type UseControllableStateOptions } from \"./types\";\n\nexport function useControllableState<T>({\n defaultValue,\n onChange,\n value,\n}: UseControllableStateOptions<T>): [T, (next: T | ((prev: T) => T)) => void] {\n const [uncontrolledValue, setUncontrolledValue] = useState<T>(defaultValue);\n const isControlled = value !== undefined;\n const currentValue = isControlled ? (value as T) : uncontrolledValue;\n const valueRef = useRef<T>(currentValue);\n const onChangeRef = useRef(onChange);\n\n useIsomorphicLayoutEffect(() => {\n valueRef.current = currentValue;\n onChangeRef.current = onChange;\n });\n\n const setValue = useCallback(\n (next: T | ((prev: T) => T)) => {\n const resolvedNext =\n typeof next === \"function\"\n ? (next as (prev: T) => T)(valueRef.current)\n : next;\n if (!Object.is(valueRef.current, resolvedNext)) {\n if (!isControlled) {\n setUncontrolledValue(resolvedNext);\n }\n onChangeRef.current?.(resolvedNext);\n }\n },\n [isControlled],\n );\n\n return [currentValue, setValue];\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { isBrowser } from \"../utils\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\nimport { type UseHotkeyOptions } from \"./types\";\n\nfunction isEditableElement(target: EventTarget | null): boolean {\n if (!target || typeof (target as HTMLElement).tagName !== \"string\") {\n return false;\n }\n const element = target as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n return true;\n }\n return Boolean(element.isContentEditable);\n}\n\nfunction matchesKeyCombo(event: KeyboardEvent, combo: string): boolean {\n const parts = combo\n .toLowerCase()\n .split(\"+\")\n .map((p) => p.trim())\n .filter(Boolean);\n if (parts.length === 0) return false;\n\n const keyPart = parts[parts.length - 1];\n const modifiers = new Set(parts.slice(0, -1));\n\n const wantsMod =\n modifiers.has(\"mod\") || modifiers.has(\"cmd\") || modifiers.has(\"meta\");\n const wantsCtrl = modifiers.has(\"ctrl\") || modifiers.has(\"control\");\n const wantsAlt = modifiers.has(\"alt\") || modifiers.has(\"option\");\n const wantsShift = modifiers.has(\"shift\");\n\n const isModPressed = event.metaKey || event.ctrlKey;\n if (wantsMod && !isModPressed) return false;\n if (!wantsMod && !wantsCtrl && (event.metaKey || event.ctrlKey)) return false;\n if (wantsCtrl && !event.ctrlKey) return false;\n if (wantsAlt !== event.altKey) return false;\n if (wantsShift !== event.shiftKey) return false;\n\n const pressedKey = event.key.toLowerCase();\n if (keyPart === \"esc\" || keyPart === \"escape\") {\n return pressedKey === \"escape\" || pressedKey === \"esc\";\n }\n if (keyPart === \"space\") {\n return pressedKey === \" \" || pressedKey === \"spacebar\";\n }\n return pressedKey === keyPart;\n}\n\nexport function useHotkey(\n combo: string | string[] | null | undefined,\n callback: (event: KeyboardEvent) => void,\n options?: UseHotkeyOptions,\n): void {\n const callbackRef = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback;\n });\n\n const enabled = options?.enabled ?? true;\n const enableOnFormTags = options?.enableOnFormTags ?? false;\n const preventDefault = options?.preventDefault ?? true;\n const stopPropagation = options?.stopPropagation ?? false;\n\n useEffect(() => {\n if (!isBrowser || !enabled || !combo) return;\n const combos = (Array.isArray(combo) ? combo : [combo]).filter(Boolean);\n if (combos.length === 0) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!enableOnFormTags && isEditableElement(event.target)) return;\n const matched = combos.some((c) => matchesKeyCombo(event, c));\n if (!matched) return;\n if (preventDefault) event.preventDefault();\n if (stopPropagation) event.stopPropagation();\n callbackRef.current?.(event);\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [combo, enabled, enableOnFormTags, preventDefault, stopPropagation]);\n}\n\nexport function useEscapeKey(\n callback: (event: KeyboardEvent) => void,\n enabled: boolean = true,\n): void {\n useHotkey(\"escape\", callback, {\n enabled,\n enableOnFormTags: true,\n preventDefault: false,\n });\n}\n"]}
|
package/dist/hooks/types.d.ts
CHANGED
|
@@ -1,58 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
errorMessage?: string | null;
|
|
5
|
-
onError?: ((err: unknown) => void | Promise<void>) | null;
|
|
6
|
-
onSuccess?: ((result: TResult) => void | Promise<void>) | null;
|
|
7
|
-
successMessage?: string | null;
|
|
8
|
-
toast?: ActionToastOption;
|
|
9
|
-
}
|
|
10
|
-
export interface UseAsyncActionResult<TArgs extends unknown[], TResult> {
|
|
11
|
-
error: unknown;
|
|
12
|
-
execute: (...args: TArgs) => Promise<TResult>;
|
|
13
|
-
isPending: boolean;
|
|
1
|
+
export interface UseGlobalEventOptions {
|
|
2
|
+
debounceMs?: number;
|
|
3
|
+
throttleMs?: number;
|
|
14
4
|
}
|
|
15
5
|
export interface UseControllableStateOptions<T> {
|
|
16
6
|
defaultValue: T;
|
|
17
7
|
onChange?: (nextValue: T) => void;
|
|
18
8
|
value?: T;
|
|
19
9
|
}
|
|
20
|
-
export interface UseGlobalEventOptions {
|
|
21
|
-
debounceMs?: number;
|
|
22
|
-
throttleMs?: number;
|
|
23
|
-
}
|
|
24
10
|
export interface UseHotkeyOptions {
|
|
25
11
|
enabled?: boolean;
|
|
26
12
|
enableOnFormTags?: boolean;
|
|
27
13
|
preventDefault?: boolean;
|
|
28
14
|
stopPropagation?: boolean;
|
|
29
15
|
}
|
|
30
|
-
export interface UseIntersectionObserverOptions extends IntersectionObserverInit {
|
|
31
|
-
enabled?: boolean;
|
|
32
|
-
freezeOnceVisible?: boolean;
|
|
33
|
-
onChange?: (entry: IntersectionObserverEntry) => void;
|
|
34
|
-
}
|
|
35
|
-
export interface UseIntersectionObserverResult {
|
|
36
|
-
entry: IntersectionObserverEntry | null;
|
|
37
|
-
isIntersecting: boolean;
|
|
38
|
-
}
|
|
39
|
-
export interface UseServerActionOptions<T, E = string> {
|
|
40
|
-
errorMessage?: string | null;
|
|
41
|
-
onError?: ((err: E) => void | Promise<void>) | null;
|
|
42
|
-
onSuccess?: ((data: T) => void | Promise<void>) | null;
|
|
43
|
-
successMessage?: string | null;
|
|
44
|
-
toast?: ActionToastOption;
|
|
45
|
-
}
|
|
46
|
-
export interface UseServerActionResult<TArgs extends unknown[], T, E = string> {
|
|
47
|
-
data: T | null;
|
|
48
|
-
error: E | null;
|
|
49
|
-
execute: (...args: TArgs) => Promise<Result<T, E>>;
|
|
50
|
-
isPending: boolean;
|
|
51
|
-
reset: () => void;
|
|
52
|
-
}
|
|
53
|
-
export interface UseStorageStateOptions<T> {
|
|
54
|
-
deserialize?: (raw: string) => T;
|
|
55
|
-
serialize?: (value: T) => string;
|
|
56
|
-
storage?: "local" | "session";
|
|
57
|
-
}
|
|
58
16
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAC5C,YAAY,EAAE,CAAC,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,CAAC,CAAC;CACX;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { UseControllableStateOptions } from "./types";
|
|
1
|
+
import { type UseControllableStateOptions } from "./types";
|
|
2
2
|
export declare function useControllableState<T>({ defaultValue, onChange, value, }: UseControllableStateOptions<T>): [T, (next: T | ((prev: T) => T)) => void];
|
|
3
3
|
//# sourceMappingURL=use-controllable-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-controllable-state.d.ts","sourceRoot":"","sources":["../../src/hooks/use-controllable-state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"use-controllable-state.d.ts","sourceRoot":"","sources":["../../src/hooks/use-controllable-state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE3D,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,EACtC,YAAY,EACZ,QAAQ,EACR,KAAK,GACN,EAAE,2BAA2B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CA6B5E"}
|
|
@@ -2,6 +2,4 @@ import { type FrameworkEventMap } from "@/events";
|
|
|
2
2
|
import { UseGlobalEventOptions } from "./types";
|
|
3
3
|
export declare function useGlobalEvent<K extends keyof FrameworkEventMap>(event: K | K[] | null | undefined, callback: (payload: FrameworkEventMap[K]) => void, options?: UseGlobalEventOptions): void;
|
|
4
4
|
export declare function useGlobalEvent<T = unknown>(event: string | string[] | null | undefined, callback: (payload: T) => void, options?: UseGlobalEventOptions): void;
|
|
5
|
-
export declare function useEventState<T, K extends keyof FrameworkEventMap>(event: K | null | undefined, initialValue: T, reducer: (prevState: T, payload: FrameworkEventMap[K]) => T): T;
|
|
6
|
-
export declare function useEventState<T, P = unknown>(event: string | null | undefined, initialValue: T, reducer: (prevState: T, payload: P) => T): T;
|
|
7
5
|
//# sourceMappingURL=use-global-event.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-global-event.d.ts","sourceRoot":"","sources":["../../src/hooks/use-global-event.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAC9D,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,EACjD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAAC;AAER,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACxC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAC3C,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,EAC9B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"use-global-event.d.ts","sourceRoot":"","sources":["../../src/hooks/use-global-event.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAC9D,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,EACjD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAAC;AAER,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACxC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAC3C,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,EAC9B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UseHotkeyOptions } from "./types";
|
|
1
|
+
import { type UseHotkeyOptions } from "./types";
|
|
2
2
|
export declare function useHotkey(combo: string | string[] | null | undefined, callback: (event: KeyboardEvent) => void, options?: UseHotkeyOptions): void;
|
|
3
3
|
export declare function useEscapeKey(callback: (event: KeyboardEvent) => void, enabled?: boolean): void;
|
|
4
4
|
//# sourceMappingURL=use-hotkey.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-hotkey.d.ts","sourceRoot":"","sources":["../../src/hooks/use-hotkey.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"use-hotkey.d.ts","sourceRoot":"","sources":["../../src/hooks/use-hotkey.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAgDhD,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EACxC,OAAO,CAAC,EAAE,gBAAgB,GACzB,IAAI,CA4BN;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EACxC,OAAO,GAAE,OAAc,GACtB,IAAI,CAMN"}
|