usethishook 0.1.0
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 +21 -0
- package/README.md +186 -0
- package/dist/index.cjs +857 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +252 -0
- package/dist/index.d.ts +252 -0
- package/dist/index.js +824 -0
- package/dist/index.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useToggle.ts","../src/hooks/useCounter.ts","../src/hooks/useDisclosure.ts","../src/hooks/useDebounce.ts","../src/hooks/usePrevious.ts","../src/hooks/useInterval.ts","../src/hooks/useOnlineStatus.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useWindowSize.ts","../src/hooks/useOnClickOutside.ts","../src/hooks/useCopyToClipboard.ts","../src/hooks/useLocalStorage.ts","../src/hooks/useDocumentTitle.ts","../src/hooks/useOverlay.tsx","../src/hooks/useStepFlow.tsx","../src/hooks/useAsyncSelect.ts","../src/hooks/useStableCallback.ts","../src/hooks/useOnChange.ts","../src/hooks/useResetState.ts","../src/hooks/useAsyncAction.ts","../src/hooks/useDebouncedCallback.ts","../src/hooks/useFields.ts","../src/hooks/useList.ts","../src/hooks/useSelection.ts","../src/hooks/useSearchState.ts","../src/hooks/dialogFrame.tsx","../src/hooks/useConfirm.tsx","../src/hooks/usePrompt.tsx","../src/hooks/useControllableState.ts","../src/hooks/useUnsavedChanges.ts","../src/hooks/useElementSize.ts","../src/hooks/useInView.ts","../src/hooks/usePagination.ts"],"names":["useState","useCallback","useEffect","useRef","useSyncExternalStore","jsx","useMemo","subscribe","getSnapshot","getServerSnapshot","jsxs"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useCallback, useState } from 'react';\n\nexport const useToggle = (initialValue = false) => {\n const [value, setValue] = useState(initialValue);\n\n const toggle = useCallback(() => {\n setValue((previous) => !previous);\n }, []);\n\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n\n return { value, toggle, setTrue, setFalse, setValue } as const;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useCounter = (initialValue = 0, step = 1) => {\n const [count, setCount] = useState(initialValue);\n\n const increment = useCallback(() => {\n setCount((previous) => previous + step);\n }, [step]);\n\n const decrement = useCallback(() => {\n setCount((previous) => previous - step);\n }, [step]);\n\n const reset = useCallback(() => {\n setCount(initialValue);\n }, [initialValue]);\n\n return { count, increment, decrement, reset, setCount } as const;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useDisclosure = (initialOpen = false) => {\n const [isOpen, setIsOpen] = useState(initialOpen);\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const toggle = useCallback(() => {\n setIsOpen((previous) => !previous);\n }, []);\n\n return { isOpen, open, close, toggle } as const;\n};\n","import { useEffect, useState } from 'react';\n\nexport const useDebounce = <T>(value: T, delayMs = 300): T => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedValue(value);\n }, delayMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [value, delayMs]);\n\n return debouncedValue;\n};\n","import { useRef } from 'react';\n\nexport const usePrevious = <T>(value: T): T | undefined => {\n const currentRef = useRef(value);\n const previousRef = useRef<T | undefined>(undefined);\n\n if (currentRef.current !== value) {\n previousRef.current = currentRef.current;\n currentRef.current = value;\n }\n\n return previousRef.current;\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useInterval = (callback: () => void, delayMs: number | null) => {\n const savedCallback = useRef(callback);\n\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (delayMs === null) return;\n\n const intervalId = window.setInterval(() => {\n savedCallback.current();\n }, delayMs);\n\n return () => {\n window.clearInterval(intervalId);\n };\n }, [delayMs]);\n};\n","import { useSyncExternalStore } from 'react';\n\nfunction subscribe(onStoreChange: () => void) {\n window.addEventListener('online', onStoreChange);\n window.addEventListener('offline', onStoreChange);\n\n return () => {\n window.removeEventListener('online', onStoreChange);\n window.removeEventListener('offline', onStoreChange);\n };\n}\n\nfunction getSnapshot() {\n return navigator.onLine;\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\nexport const useOnlineStatus = () =>\n useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n","import { useEffect, useState } from 'react';\n\nexport const useMediaQuery = (query: string) => {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n const mediaQueryList = window.matchMedia(query);\n const handleChange = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n setMatches(mediaQueryList.matches);\n mediaQueryList.addEventListener('change', handleChange);\n\n return () => {\n mediaQueryList.removeEventListener('change', handleChange);\n };\n }, [query]);\n\n return matches;\n};\n","import { useEffect, useState } from 'react';\n\ninterface WindowSize {\n width: number;\n height: number;\n}\n\nexport const useWindowSize = (): WindowSize => {\n const [size, setSize] = useState<WindowSize>(() => {\n if (typeof window === 'undefined') return { width: 0, height: 0 };\n return { width: window.innerWidth, height: window.innerHeight };\n });\n\n useEffect(() => {\n const handleResize = () => {\n setSize({ width: window.innerWidth, height: window.innerHeight });\n };\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return size;\n};\n","import { type RefObject, useEffect } from 'react';\n\nexport const useOnClickOutside = <T extends HTMLElement>(\n ref: RefObject<T | null>,\n handler: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n const element = ref.current;\n if (!element || element.contains(event.target as Node)) return;\n handler(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [handler, ref]);\n};\n","import { useCallback, useState } from 'react';\n\ninterface CopyToClipboardResult {\n copiedText: string | null;\n copy: (text: string) => Promise<boolean>;\n reset: () => void;\n}\n\nexport const useCopyToClipboard = (): CopyToClipboardResult => {\n const [copiedText, setCopiedText] = useState<string | null>(null);\n\n const copy = useCallback(async (text: string) => {\n if (!navigator.clipboard) return false;\n\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n } catch {\n setCopiedText(null);\n return false;\n }\n }, []);\n\n const reset = useCallback(() => {\n setCopiedText(null);\n }, []);\n\n return { copiedText, copy, reset };\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nfunction readValue<T>(key: string, fallback: T): T {\n if (typeof window === 'undefined') return fallback;\n\n try {\n const item = window.localStorage.getItem(key);\n return item === null ? fallback : (JSON.parse(item) as T);\n } catch {\n return fallback;\n }\n}\n\nexport const useLocalStorage = <T>(key: string, initialValue: T) => {\n const initialValueRef = useRef(initialValue);\n initialValueRef.current = initialValue;\n\n const [storedValue, setStoredValue] = useState<T>(() => readValue(key, initialValue));\n\n const setValue = useCallback(\n (value: T | ((previous: T) => T)) => {\n setStoredValue((previous) => {\n const nextValue = value instanceof Function ? value(previous) : value;\n\n try {\n window.localStorage.setItem(key, JSON.stringify(nextValue));\n } catch {\n // Ignore write errors (quota, private mode).\n }\n\n return nextValue;\n });\n },\n [key],\n );\n\n useEffect(() => {\n setStoredValue(readValue(key, initialValueRef.current));\n }, [key]);\n\n return [storedValue, setValue] as const;\n};\n","import { useEffect } from 'react';\n\nexport const useDocumentTitle = (title: string) => {\n useEffect(() => {\n const previousTitle = document.title;\n document.title = title;\n\n return () => {\n document.title = previousTitle;\n };\n }, [title]);\n};\n","import { type ComponentType, useCallback, useRef, useState } from 'react';\n\nexport interface OverlayControls<TResult = unknown> {\n isOpen: boolean;\n close: (result?: TResult) => void;\n}\n\nexport const useOverlay = <TProps extends object, TResult = unknown>(\n Overlay: ComponentType<TProps & OverlayControls<TResult>>,\n) => {\n const [isOpen, setIsOpen] = useState(false);\n const [props, setProps] = useState<TProps | null>(null);\n const resolverRef = useRef<((result?: TResult) => void) | null>(null);\n const previousOverflowRef = useRef('');\n\n const open = useCallback((data?: TProps) => {\n setProps(data ?? ({} as TProps));\n setIsOpen(true);\n previousOverflowRef.current = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return new Promise<TResult | undefined>((resolve) => {\n resolverRef.current = resolve;\n });\n }, []);\n\n const close = useCallback((result?: TResult) => {\n setIsOpen(false);\n document.body.style.overflow = previousOverflowRef.current;\n\n if (!resolverRef.current) return;\n resolverRef.current(result);\n resolverRef.current = null;\n }, []);\n\n const render = () => {\n if (!isOpen && !props) return null;\n\n const overlayProps = (props ?? {}) as TProps;\n return <Overlay {...overlayProps} isOpen={isOpen} close={close} />;\n };\n\n return { open, close, render } as const;\n};\n","import { type ComponentType, useCallback, useRef, useState } from 'react';\n\nexport interface StepFlowStepProps<TStepData = unknown> {\n stepIndex: number;\n isLastStep: boolean;\n onNext: (stepData?: TStepData) => void;\n onCancel: () => void;\n}\n\nexport const useStepFlow = <TStepData = unknown>(\n steps: Array<ComponentType<StepFlowStepProps<TStepData>>>,\n) => {\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const [isActive, setIsActive] = useState(false);\n const resultsRef = useRef<Array<TStepData | undefined>>([]);\n const resolverRef = useRef<((result: Array<TStepData | undefined> | null) => void) | null>(\n null,\n );\n\n const next = useCallback(() => {\n setIsActive(true);\n setCurrentStepIndex(0);\n resultsRef.current = [];\n\n return new Promise<Array<TStepData | undefined> | null>((resolve) => {\n resolverRef.current = resolve;\n });\n }, []);\n\n const completeStep = useCallback(\n (stepData?: TStepData) => {\n resultsRef.current = [...resultsRef.current, stepData];\n\n setCurrentStepIndex((previous) => {\n if (previous + 1 < steps.length) return previous + 1;\n\n if (resolverRef.current) {\n resolverRef.current(resultsRef.current);\n resolverRef.current = null;\n }\n\n setIsActive(false);\n return 0;\n });\n },\n [steps.length],\n );\n\n const cancel = useCallback(() => {\n if (resolverRef.current) {\n resolverRef.current(null);\n resolverRef.current = null;\n }\n\n setIsActive(false);\n setCurrentStepIndex(0);\n resultsRef.current = [];\n }, []);\n\n const renderCurrentStep = useCallback(\n (extraProps: Record<string, unknown> = {}) => {\n if (!isActive) return null;\n\n const StepComponent = steps[currentStepIndex];\n if (!StepComponent) return null;\n\n return (\n <StepComponent\n {...extraProps}\n stepIndex={currentStepIndex}\n isLastStep={currentStepIndex === steps.length - 1}\n onNext={completeStep}\n onCancel={cancel}\n />\n );\n },\n [cancel, completeStep, currentStepIndex, isActive, steps],\n );\n\n return { next, cancel, completeStep, renderCurrentStep, currentStepIndex, isActive } as const;\n};\n","import { useCallback } from 'react';\n\nexport interface AsyncSelectOptions {\n accept?: string;\n multiple?: boolean;\n}\n\nexport const useAsyncSelect = () => {\n const selectFile = useCallback((options: AsyncSelectOptions = {}) => {\n const { accept = '*', multiple = false } = options;\n\n return new Promise<File | File[] | null>((resolve) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = accept;\n input.multiple = multiple;\n input.style.display = 'none';\n\n let isSettled = false;\n\n const settle = (value: File | File[] | null) => {\n if (isSettled) return;\n isSettled = true;\n window.removeEventListener('focus', handleCancel);\n input.remove();\n resolve(value);\n };\n\n const handleChange = (event: Event) => {\n const files = (event.target as HTMLInputElement).files;\n if (!files || files.length === 0) {\n settle(null);\n return;\n }\n\n settle(multiple ? Array.from(files) : files[0] ?? null);\n };\n\n const handleCancel = () => {\n window.setTimeout(() => {\n if (!input.files || input.files.length === 0) settle(null);\n }, 300);\n };\n\n input.addEventListener('change', handleChange);\n input.addEventListener('cancel', () => settle(null));\n window.addEventListener('focus', handleCancel);\n\n document.body.appendChild(input);\n input.click();\n });\n }, []);\n\n return selectFile;\n};\n","import { useCallback, useRef } from 'react';\n\nexport const useStableCallback = <T extends (...args: never[]) => unknown>(fn: T): T => {\n const fnRef = useRef(fn);\n fnRef.current = fn;\n\n const stable = useCallback((...args: never[]) => fnRef.current(...args), []);\n return stable as T;\n};\n","import { useEffect, useRef } from 'react';\nimport { useStableCallback } from './useStableCallback';\n\nexport const useOnChange = <T>(value: T, callback: (current: T, previous: T) => void) => {\n const callbackRef = useStableCallback(callback);\n const previousRef = useRef(value);\n const isFirstRender = useRef(true);\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n previousRef.current = value;\n return;\n }\n\n if (Object.is(previousRef.current, value)) return;\n\n const previous = previousRef.current;\n previousRef.current = value;\n callbackRef(value, previous);\n }, [callbackRef, value]);\n};\n","import { type Dispatch, type SetStateAction, useState } from 'react';\n\nexport const useResetState = <T>(source: unknown, initialValue: T) => {\n const [state, setState] = useState(initialValue);\n const [trackedSource, setTrackedSource] = useState(source);\n\n if (trackedSource !== source) {\n setTrackedSource(source);\n setState(initialValue);\n }\n\n return [state, setState] as [T, Dispatch<SetStateAction<T>>];\n};\n","import { useCallback, useRef, useState } from 'react';\nimport { useStableCallback } from './useStableCallback';\n\nexport const useAsyncAction = <TArgs extends unknown[], TResult>(\n action: (...args: TArgs) => Promise<TResult>,\n) => {\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [data, setData] = useState<TResult | undefined>(undefined);\n const runIdRef = useRef(0);\n const stableAction = useStableCallback(action);\n\n const run = useCallback(\n async (...args: TArgs) => {\n const runId = ++runIdRef.current;\n setIsPending(true);\n setError(null);\n\n try {\n const result = await stableAction(...args);\n if (runId !== runIdRef.current) return result;\n setData(result);\n setIsPending(false);\n return result;\n } catch (caught) {\n if (runId !== runIdRef.current) throw caught;\n setError(caught);\n setIsPending(false);\n throw caught;\n }\n },\n [stableAction],\n );\n\n const reset = useCallback(() => {\n runIdRef.current += 1;\n setIsPending(false);\n setError(null);\n setData(undefined);\n }, []);\n\n return { run, isPending, error, data, reset } as const;\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport { useStableCallback } from './useStableCallback';\n\nexport const useDebouncedCallback = <TArgs extends unknown[]>(\n callback: (...args: TArgs) => void,\n delayMs: number,\n) => {\n const stableCallback = useStableCallback(callback);\n const timeoutRef = useRef(0);\n\n const cancel = useCallback(() => {\n window.clearTimeout(timeoutRef.current);\n }, []);\n\n const run = useCallback(\n (...args: TArgs) => {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n stableCallback(...args);\n }, delayMs);\n },\n [cancel, delayMs, stableCallback],\n );\n\n useEffect(() => cancel, [cancel]);\n\n return [run, cancel] as const;\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nexport interface FieldIssue {\n path: Array<string | number>;\n message: string;\n}\n\nexport interface FieldSchema<T> {\n safeParse: (\n data: unknown,\n ) => { success: true; data: T } | { success: false; error: { issues: FieldIssue[] } };\n}\n\nfunction collectErrors<T extends object>(issues: FieldIssue[]) {\n const errors: Partial<Record<keyof T, string>> = {};\n for (const issue of issues) {\n const key = issue.path[0];\n if (typeof key !== 'string' && typeof key !== 'number') continue;\n const field = key as keyof T;\n if (errors[field]) continue;\n errors[field] = issue.message;\n }\n return errors;\n}\n\nfunction isShallowEqual<T extends object>(left: T, right: T) {\n const leftKeys = Object.keys(left) as Array<keyof T>;\n const rightKeys = Object.keys(right) as Array<keyof T>;\n if (leftKeys.length !== rightKeys.length) return false;\n return leftKeys.every((key) => Object.is(left[key], right[key]));\n}\n\nexport const useFields = <T extends object>(initialValues: T, schema?: FieldSchema<T>) => {\n const [values, setValues] = useState(initialValues);\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\n\n const setField = useCallback(<K extends keyof T>(key: K, value: T[K]) => {\n setValues((previous) => ({ ...previous, [key]: value }));\n setErrors((previous) => {\n if (!previous[key]) return previous;\n const next = { ...previous };\n delete next[key];\n return next;\n });\n }, []);\n\n const reset = useCallback(() => {\n setValues(initialValues);\n setErrors({});\n }, [initialValues]);\n\n const isDirty = useMemo(() => !isShallowEqual(values, initialValues), [initialValues, values]);\n\n const validate = useCallback(() => {\n if (!schema) {\n setErrors({});\n return { ok: true, values } as const;\n }\n\n const parsed = schema.safeParse(values);\n if (parsed.success) {\n setErrors({});\n return { ok: true, values: parsed.data } as const;\n }\n\n const nextErrors = collectErrors<T>(parsed.error.issues);\n setErrors(nextErrors);\n return { ok: false, errors: nextErrors } as const;\n }, [schema, values]);\n\n const submit = useCallback(\n (onValid: (values: T) => void | Promise<void>) => {\n const result = validate();\n if (!result.ok) return result;\n void onValid(result.values);\n return result;\n },\n [validate],\n );\n\n return { values, setField, setValues, reset, isDirty, errors, validate, submit } as const;\n};\n","import { useCallback, useState } from 'react';\n\nexport interface Identifiable {\n id: string;\n}\n\nexport const useList = <T extends Identifiable>(initialItems: T[] = []) => {\n const [items, setItems] = useState(initialItems);\n\n const insert = useCallback((item: T, index?: number) => {\n setItems((previous) => {\n if (index === undefined || index >= previous.length) return [...previous, item];\n const next = [...previous];\n next.splice(Math.max(0, index), 0, item);\n return next;\n });\n }, []);\n\n const update = useCallback((id: string, patch: Partial<T> | ((item: T) => T)) => {\n setItems((previous) =>\n previous.map((item) => {\n if (item.id !== id) return item;\n return typeof patch === 'function' ? patch(item) : { ...item, ...patch };\n }),\n );\n }, []);\n\n const remove = useCallback((id: string) => {\n setItems((previous) => previous.filter((item) => item.id !== id));\n }, []);\n\n const move = useCallback((fromIndex: number, toIndex: number) => {\n setItems((previous) => {\n if (fromIndex < 0 || toIndex < 0 || fromIndex >= previous.length || toIndex >= previous.length) {\n return previous;\n }\n const next = [...previous];\n const [moved] = next.splice(fromIndex, 1);\n if (!moved) return previous;\n next.splice(toIndex, 0, moved);\n return next;\n });\n }, []);\n\n const replace = useCallback((nextItems: T[]) => {\n setItems(nextItems);\n }, []);\n\n return { items, insert, update, remove, move, replace, setItems } as const;\n};\n","import { useCallback, useState } from 'react';\n\nexport type SelectionMode = 'single' | 'multiple';\n\ninterface UseSelectionOptions {\n mode?: SelectionMode;\n initial?: string[];\n}\n\nexport const useSelection = ({ mode = 'multiple', initial = [] }: UseSelectionOptions = {}) => {\n const [selected, setSelected] = useState<string[]>(initial);\n\n const isSelected = useCallback((id: string) => selected.includes(id), [selected]);\n\n const toggle = useCallback(\n (id: string) => {\n setSelected((previous) => {\n if (mode === 'single') return previous[0] === id ? [] : [id];\n return previous.includes(id) ? previous.filter((item) => item !== id) : [...previous, id];\n });\n },\n [mode],\n );\n\n const selectOnly = useCallback((id: string) => {\n setSelected([id]);\n }, []);\n\n const selectAll = useCallback((ids: string[]) => {\n setSelected(mode === 'single' ? ids.slice(0, 1) : [...new Set(ids)]);\n }, [mode]);\n\n const clear = useCallback(() => {\n setSelected([]);\n }, []);\n\n return { selected, isSelected, toggle, selectOnly, selectAll, clear, setSelected } as const;\n};\n","import { useCallback, useMemo, useSyncExternalStore } from 'react';\n\nconst SEARCH_EVENT = 'usethishook:search';\n\nfunction subscribe(onStoreChange: () => void) {\n window.addEventListener('popstate', onStoreChange);\n window.addEventListener(SEARCH_EVENT, onStoreChange);\n return () => {\n window.removeEventListener('popstate', onStoreChange);\n window.removeEventListener(SEARCH_EVENT, onStoreChange);\n };\n}\n\nfunction getSnapshot() {\n return window.location.search;\n}\n\nfunction getServerSnapshot() {\n return '';\n}\n\nfunction writeSearch(params: URLSearchParams) {\n const query = params.toString();\n const url = `${window.location.pathname}${query ? `?${query}` : ''}${window.location.hash}`;\n window.history.replaceState(window.history.state, '', url);\n window.dispatchEvent(new Event(SEARCH_EVENT));\n}\n\nfunction readParams<T extends Record<string, string>>(defaults: T, search: string): T {\n const params = new URLSearchParams(search);\n const next = { ...defaults };\n for (const key of Object.keys(defaults) as Array<keyof T>) {\n const value = params.get(String(key));\n if (value !== null) next[key] = value as T[keyof T];\n }\n return next;\n}\n\nexport const useSearchState = <T extends Record<string, string>>(defaults: T) => {\n const search = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const values = useMemo(() => readParams(defaults, search), [defaults, search]);\n\n const setValues = useCallback(\n (update: Partial<T> | ((previous: T) => T)) => {\n const current = readParams(defaults, window.location.search);\n const next = typeof update === 'function' ? update(current) : { ...current, ...update };\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(next)) {\n if (value === '') continue;\n params.set(key, value);\n }\n writeSearch(params);\n },\n [defaults],\n );\n\n return [values, setValues] as const;\n};\n","import type { CSSProperties, ReactNode } from 'react';\n\nconst backdropStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 40,\n display: 'grid',\n placeItems: 'center',\n background: 'rgba(0, 0, 0, 0.6)',\n};\n\nconst panelStyle: CSSProperties = {\n width: 'min(24rem, calc(100vw - 2rem))',\n borderRadius: '1rem',\n background: '#18181b',\n color: '#fafafa',\n padding: '1.25rem',\n boxShadow: '0 24px 80px rgba(0,0,0,0.45)',\n};\n\ninterface DialogFrameProps {\n title: string;\n children: ReactNode;\n}\n\nexport const DialogFrame = ({ title, children }: DialogFrameProps) => (\n <div style={backdropStyle}>\n <div role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"usethishook-dialog-title\" style={panelStyle}>\n <h2 id=\"usethishook-dialog-title\" style={{ margin: '0 0 0.75rem', fontSize: '1.05rem' }}>\n {title}\n </h2>\n {children}\n </div>\n </div>\n);\n\nconst buttonRowStyle: CSSProperties = { display: 'flex', gap: '0.5rem', marginTop: '1rem' };\n\nexport const dialogButtonRowStyle = buttonRowStyle;\n\nexport const primaryButtonStyle: CSSProperties = {\n border: 'none',\n borderRadius: '999px',\n padding: '0.45rem 0.9rem',\n background: '#7c3aed',\n color: 'white',\n cursor: 'pointer',\n};\n\nexport const ghostButtonStyle: CSSProperties = {\n border: '1px solid #3f3f46',\n borderRadius: '999px',\n padding: '0.45rem 0.9rem',\n background: 'transparent',\n color: 'white',\n cursor: 'pointer',\n};\n","import { type OverlayControls, useOverlay } from './useOverlay';\nimport {\n DialogFrame,\n dialogButtonRowStyle,\n ghostButtonStyle,\n primaryButtonStyle,\n} from './dialogFrame';\n\nexport interface ConfirmOptions {\n title: string;\n message?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n danger?: boolean;\n}\n\nconst ConfirmDialog = ({\n title,\n message,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n danger,\n isOpen,\n close,\n}: ConfirmOptions & OverlayControls<boolean>) => {\n if (!isOpen) return null;\n\n return (\n <DialogFrame title={title}>\n {message && <p style={{ margin: 0, color: '#d4d4d8', lineHeight: 1.5 }}>{message}</p>}\n <div style={dialogButtonRowStyle}>\n <button\n type=\"button\"\n style={{ ...primaryButtonStyle, background: danger ? '#e11d48' : primaryButtonStyle.background }}\n onClick={() => close(true)}\n >\n {confirmLabel}\n </button>\n <button type=\"button\" style={ghostButtonStyle} onClick={() => close(false)}>\n {cancelLabel}\n </button>\n </div>\n </DialogFrame>\n );\n};\n\nexport const useConfirm = () => {\n const overlay = useOverlay<ConfirmOptions, boolean>(ConfirmDialog);\n\n const confirm = (options: ConfirmOptions) => overlay.open(options).then((result) => Boolean(result));\n\n return { confirm, render: overlay.render } as const;\n};\n","import { useEffect, useState } from 'react';\nimport { type OverlayControls, useOverlay } from './useOverlay';\nimport {\n DialogFrame,\n dialogButtonRowStyle,\n ghostButtonStyle,\n primaryButtonStyle,\n} from './dialogFrame';\n\nexport interface PromptOptions {\n title: string;\n message?: string;\n label?: string;\n initialValue?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\nconst PromptDialog = ({\n title,\n message,\n label = 'Value',\n initialValue = '',\n confirmLabel = 'Save',\n cancelLabel = 'Cancel',\n isOpen,\n close,\n}: PromptOptions & OverlayControls<string | null>) => {\n const [value, setValue] = useState(initialValue);\n\n useEffect(() => {\n if (isOpen) setValue(initialValue);\n }, [initialValue, isOpen]);\n\n if (!isOpen) return null;\n\n return (\n <DialogFrame title={title}>\n {message && <p style={{ margin: '0 0 0.75rem', color: '#d4d4d8', lineHeight: 1.5 }}>{message}</p>}\n <label style={{ display: 'grid', gap: '0.35rem', fontSize: '0.85rem' }}>\n {label}\n <input\n value={value}\n onChange={(event) => setValue(event.target.value)}\n style={{\n borderRadius: '0.6rem',\n border: '1px solid #3f3f46',\n background: '#09090b',\n color: 'white',\n padding: '0.5rem 0.7rem',\n }}\n />\n </label>\n <div style={dialogButtonRowStyle}>\n <button type=\"button\" style={primaryButtonStyle} onClick={() => close(value)}>\n {confirmLabel}\n </button>\n <button type=\"button\" style={ghostButtonStyle} onClick={() => close(null)}>\n {cancelLabel}\n </button>\n </div>\n </DialogFrame>\n );\n};\n\nexport const usePrompt = () => {\n const overlay = useOverlay<PromptOptions, string | null>(PromptDialog);\n const prompt = (options: PromptOptions) => overlay.open(options).then((result) => result ?? null);\n\n return { prompt, render: overlay.render } as const;\n};\n","import { type SetStateAction, useCallback, useState } from 'react';\n\nexport interface ControllableStateOptions<T> {\n value?: T;\n defaultValue: T;\n onChange?: (value: T) => void;\n}\n\nexport const useControllableState = <T>({\n value,\n defaultValue,\n onChange,\n}: ControllableStateOptions<T>) => {\n const [uncontrolled, setUncontrolled] = useState(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : uncontrolled;\n\n const setValue = useCallback(\n (update: SetStateAction<T>) => {\n const next = typeof update === 'function' ? (update as (previous: T) => T)(current) : update;\n if (!isControlled) setUncontrolled(next);\n onChange?.(next);\n },\n [current, isControlled, onChange],\n );\n\n return [current, setValue] as const;\n};\n","import { useCallback, useEffect } from 'react';\n\nexport type LeaveConfirmer = (message: string) => boolean | Promise<boolean>;\n\nexport const useUnsavedChanges = (isDirty: boolean, confirmLeave?: LeaveConfirmer) => {\n useEffect(() => {\n if (!isDirty) return;\n\n const handleBeforeUnload = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n event.returnValue = '';\n };\n\n window.addEventListener('beforeunload', handleBeforeUnload);\n return () => window.removeEventListener('beforeunload', handleBeforeUnload);\n }, [isDirty]);\n\n const requestLeave = useCallback(\n async (message = 'Leave without saving?') => {\n if (!isDirty) return true;\n if (confirmLeave) return confirmLeave(message);\n return window.confirm(message);\n },\n [confirmLeave, isDirty],\n );\n\n return { confirmLeave: requestLeave } as const;\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nexport interface ElementSize {\n width: number;\n height: number;\n}\n\nexport const useElementSize = <T extends HTMLElement = HTMLElement>() => {\n const [node, setNode] = useState<T | null>(null);\n const [size, setSize] = useState<ElementSize>({ width: 0, height: 0 });\n\n const ref = useCallback((element: T | null) => {\n setNode(element);\n }, []);\n\n useEffect(() => {\n if (!node || typeof ResizeObserver === 'undefined') return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n const { width, height } = entry.contentRect;\n setSize({ width, height });\n });\n\n observer.observe(node);\n return () => observer.disconnect();\n }, [node]);\n\n return { ref, width: size.width, height: size.height } as const;\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nexport interface InViewOptions {\n root?: Element | null;\n rootMargin?: string;\n threshold?: number | number[];\n once?: boolean;\n}\n\nexport const useInView = <T extends Element = Element>(options: InViewOptions = {}) => {\n const { root = null, rootMargin = '0px', threshold = 0, once = false } = options;\n const [node, setNode] = useState<T | null>(null);\n const [isInView, setIsInView] = useState(false);\n\n const ref = useCallback((element: T | null) => {\n setNode(element);\n }, []);\n\n useEffect(() => {\n if (!node || typeof IntersectionObserver === 'undefined') return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n if (entry.isIntersecting) {\n setIsInView(true);\n if (once) observer.disconnect();\n return;\n }\n\n if (!once) setIsInView(false);\n },\n { root, rootMargin, threshold },\n );\n\n observer.observe(node);\n return () => observer.disconnect();\n }, [node, once, root, rootMargin, threshold]);\n\n return { ref, isInView } as const;\n};\n","import { useCallback, useState } from 'react';\n\nexport interface PaginationOptions {\n total: number;\n pageSize?: number;\n initialPage?: number;\n}\n\nfunction pageCountOf(total: number, pageSize: number) {\n if (pageSize <= 0) return 1;\n return Math.max(1, Math.ceil(Math.max(0, total) / pageSize));\n}\n\nexport const usePagination = ({\n total,\n pageSize: initialPageSize = 10,\n initialPage = 1,\n}: PaginationOptions) => {\n const [pageSize, setPageSizeState] = useState(initialPageSize);\n const pageCount = pageCountOf(total, pageSize);\n const [page, setPageState] = useState(initialPage);\n const safePage = Math.min(page, pageCount);\n\n if (safePage !== page) setPageState(safePage);\n\n const setPage = useCallback(\n (nextPage: number) => {\n setPageState(Math.min(pageCount, Math.max(1, nextPage)));\n },\n [pageCount],\n );\n\n const setPageSize = useCallback((nextSize: number) => {\n setPageSizeState(Math.max(1, nextSize));\n setPageState(1);\n }, []);\n\n const next = useCallback(() => {\n setPage(safePage + 1);\n }, [safePage, setPage]);\n\n const prev = useCallback(() => {\n setPage(safePage - 1);\n }, [safePage, setPage]);\n\n return {\n page: safePage,\n pageSize,\n total,\n pageCount,\n offset: (safePage - 1) * pageSize,\n canNext: safePage < pageCount,\n canPrev: safePage > 1,\n setPage,\n setPageSize,\n next,\n prev,\n } as const;\n};\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { RefObject, ComponentType, Dispatch, SetStateAction } from 'react';
|
|
3
|
+
|
|
4
|
+
declare const useToggle: (initialValue?: boolean) => {
|
|
5
|
+
readonly value: boolean;
|
|
6
|
+
readonly toggle: () => void;
|
|
7
|
+
readonly setTrue: () => void;
|
|
8
|
+
readonly setFalse: () => void;
|
|
9
|
+
readonly setValue: react.Dispatch<react.SetStateAction<boolean>>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
declare const useCounter: (initialValue?: number, step?: number) => {
|
|
13
|
+
readonly count: number;
|
|
14
|
+
readonly increment: () => void;
|
|
15
|
+
readonly decrement: () => void;
|
|
16
|
+
readonly reset: () => void;
|
|
17
|
+
readonly setCount: react.Dispatch<react.SetStateAction<number>>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
declare const useDisclosure: (initialOpen?: boolean) => {
|
|
21
|
+
readonly isOpen: boolean;
|
|
22
|
+
readonly open: () => void;
|
|
23
|
+
readonly close: () => void;
|
|
24
|
+
readonly toggle: () => void;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
declare const useDebounce: <T>(value: T, delayMs?: number) => T;
|
|
28
|
+
|
|
29
|
+
declare const usePrevious: <T>(value: T) => T | undefined;
|
|
30
|
+
|
|
31
|
+
declare const useInterval: (callback: () => void, delayMs: number | null) => void;
|
|
32
|
+
|
|
33
|
+
declare const useOnlineStatus: () => boolean;
|
|
34
|
+
|
|
35
|
+
declare const useMediaQuery: (query: string) => boolean;
|
|
36
|
+
|
|
37
|
+
interface WindowSize {
|
|
38
|
+
width: number;
|
|
39
|
+
height: number;
|
|
40
|
+
}
|
|
41
|
+
declare const useWindowSize: () => WindowSize;
|
|
42
|
+
|
|
43
|
+
declare const useOnClickOutside: <T extends HTMLElement>(ref: RefObject<T | null>, handler: (event: MouseEvent | TouchEvent) => void) => void;
|
|
44
|
+
|
|
45
|
+
interface CopyToClipboardResult {
|
|
46
|
+
copiedText: string | null;
|
|
47
|
+
copy: (text: string) => Promise<boolean>;
|
|
48
|
+
reset: () => void;
|
|
49
|
+
}
|
|
50
|
+
declare const useCopyToClipboard: () => CopyToClipboardResult;
|
|
51
|
+
|
|
52
|
+
declare const useLocalStorage: <T>(key: string, initialValue: T) => readonly [T, (value: T | ((previous: T) => T)) => void];
|
|
53
|
+
|
|
54
|
+
declare const useDocumentTitle: (title: string) => void;
|
|
55
|
+
|
|
56
|
+
interface OverlayControls<TResult = unknown> {
|
|
57
|
+
isOpen: boolean;
|
|
58
|
+
close: (result?: TResult) => void;
|
|
59
|
+
}
|
|
60
|
+
declare const useOverlay: <TProps extends object, TResult = unknown>(Overlay: ComponentType<TProps & OverlayControls<TResult>>) => {
|
|
61
|
+
readonly open: (data?: TProps) => Promise<TResult | undefined>;
|
|
62
|
+
readonly close: (result?: TResult) => void;
|
|
63
|
+
readonly render: () => react.JSX.Element | null;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
interface StepFlowStepProps<TStepData = unknown> {
|
|
67
|
+
stepIndex: number;
|
|
68
|
+
isLastStep: boolean;
|
|
69
|
+
onNext: (stepData?: TStepData) => void;
|
|
70
|
+
onCancel: () => void;
|
|
71
|
+
}
|
|
72
|
+
declare const useStepFlow: <TStepData = unknown>(steps: Array<ComponentType<StepFlowStepProps<TStepData>>>) => {
|
|
73
|
+
readonly next: () => Promise<(TStepData | undefined)[] | null>;
|
|
74
|
+
readonly cancel: () => void;
|
|
75
|
+
readonly completeStep: (stepData?: TStepData) => void;
|
|
76
|
+
readonly renderCurrentStep: (extraProps?: Record<string, unknown>) => react.JSX.Element | null;
|
|
77
|
+
readonly currentStepIndex: number;
|
|
78
|
+
readonly isActive: boolean;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
interface AsyncSelectOptions {
|
|
82
|
+
accept?: string;
|
|
83
|
+
multiple?: boolean;
|
|
84
|
+
}
|
|
85
|
+
declare const useAsyncSelect: () => (options?: AsyncSelectOptions) => Promise<File | File[] | null>;
|
|
86
|
+
|
|
87
|
+
declare const useStableCallback: <T extends (...args: never[]) => unknown>(fn: T) => T;
|
|
88
|
+
|
|
89
|
+
declare const useOnChange: <T>(value: T, callback: (current: T, previous: T) => void) => void;
|
|
90
|
+
|
|
91
|
+
declare const useResetState: <T>(source: unknown, initialValue: T) => [T, Dispatch<SetStateAction<T>>];
|
|
92
|
+
|
|
93
|
+
declare const useAsyncAction: <TArgs extends unknown[], TResult>(action: (...args: TArgs) => Promise<TResult>) => {
|
|
94
|
+
readonly run: (...args: TArgs) => Promise<TResult>;
|
|
95
|
+
readonly isPending: boolean;
|
|
96
|
+
readonly error: unknown;
|
|
97
|
+
readonly data: TResult | undefined;
|
|
98
|
+
readonly reset: () => void;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
declare const useDebouncedCallback: <TArgs extends unknown[]>(callback: (...args: TArgs) => void, delayMs: number) => readonly [(...args: TArgs) => void, () => void];
|
|
102
|
+
|
|
103
|
+
interface FieldIssue {
|
|
104
|
+
path: Array<string | number>;
|
|
105
|
+
message: string;
|
|
106
|
+
}
|
|
107
|
+
interface FieldSchema<T> {
|
|
108
|
+
safeParse: (data: unknown) => {
|
|
109
|
+
success: true;
|
|
110
|
+
data: T;
|
|
111
|
+
} | {
|
|
112
|
+
success: false;
|
|
113
|
+
error: {
|
|
114
|
+
issues: FieldIssue[];
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
declare const useFields: <T extends object>(initialValues: T, schema?: FieldSchema<T>) => {
|
|
119
|
+
readonly values: T;
|
|
120
|
+
readonly setField: <K extends keyof T>(key: K, value: T[K]) => void;
|
|
121
|
+
readonly setValues: react.Dispatch<react.SetStateAction<T>>;
|
|
122
|
+
readonly reset: () => void;
|
|
123
|
+
readonly isDirty: boolean;
|
|
124
|
+
readonly errors: Partial<Record<keyof T, string>>;
|
|
125
|
+
readonly validate: () => {
|
|
126
|
+
readonly ok: true;
|
|
127
|
+
readonly values: T;
|
|
128
|
+
readonly errors?: undefined;
|
|
129
|
+
} | {
|
|
130
|
+
readonly ok: false;
|
|
131
|
+
readonly errors: Partial<Record<keyof T, string>>;
|
|
132
|
+
readonly values?: undefined;
|
|
133
|
+
};
|
|
134
|
+
readonly submit: (onValid: (values: T) => void | Promise<void>) => {
|
|
135
|
+
readonly ok: true;
|
|
136
|
+
readonly values: T;
|
|
137
|
+
readonly errors?: undefined;
|
|
138
|
+
} | {
|
|
139
|
+
readonly ok: false;
|
|
140
|
+
readonly errors: Partial<Record<keyof T, string>>;
|
|
141
|
+
readonly values?: undefined;
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
interface Identifiable {
|
|
146
|
+
id: string;
|
|
147
|
+
}
|
|
148
|
+
declare const useList: <T extends Identifiable>(initialItems?: T[]) => {
|
|
149
|
+
readonly items: T[];
|
|
150
|
+
readonly insert: (item: T, index?: number) => void;
|
|
151
|
+
readonly update: (id: string, patch: Partial<T> | ((item: T) => T)) => void;
|
|
152
|
+
readonly remove: (id: string) => void;
|
|
153
|
+
readonly move: (fromIndex: number, toIndex: number) => void;
|
|
154
|
+
readonly replace: (nextItems: T[]) => void;
|
|
155
|
+
readonly setItems: react.Dispatch<react.SetStateAction<T[]>>;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
type SelectionMode = 'single' | 'multiple';
|
|
159
|
+
interface UseSelectionOptions {
|
|
160
|
+
mode?: SelectionMode;
|
|
161
|
+
initial?: string[];
|
|
162
|
+
}
|
|
163
|
+
declare const useSelection: ({ mode, initial }?: UseSelectionOptions) => {
|
|
164
|
+
readonly selected: string[];
|
|
165
|
+
readonly isSelected: (id: string) => boolean;
|
|
166
|
+
readonly toggle: (id: string) => void;
|
|
167
|
+
readonly selectOnly: (id: string) => void;
|
|
168
|
+
readonly selectAll: (ids: string[]) => void;
|
|
169
|
+
readonly clear: () => void;
|
|
170
|
+
readonly setSelected: react.Dispatch<react.SetStateAction<string[]>>;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
declare const useSearchState: <T extends Record<string, string>>(defaults: T) => readonly [T, (update: Partial<T> | ((previous: T) => T)) => void];
|
|
174
|
+
|
|
175
|
+
interface ConfirmOptions {
|
|
176
|
+
title: string;
|
|
177
|
+
message?: string;
|
|
178
|
+
confirmLabel?: string;
|
|
179
|
+
cancelLabel?: string;
|
|
180
|
+
danger?: boolean;
|
|
181
|
+
}
|
|
182
|
+
declare const useConfirm: () => {
|
|
183
|
+
readonly confirm: (options: ConfirmOptions) => Promise<boolean>;
|
|
184
|
+
readonly render: () => react.JSX.Element | null;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
interface PromptOptions {
|
|
188
|
+
title: string;
|
|
189
|
+
message?: string;
|
|
190
|
+
label?: string;
|
|
191
|
+
initialValue?: string;
|
|
192
|
+
confirmLabel?: string;
|
|
193
|
+
cancelLabel?: string;
|
|
194
|
+
}
|
|
195
|
+
declare const usePrompt: () => {
|
|
196
|
+
readonly prompt: (options: PromptOptions) => Promise<string | null>;
|
|
197
|
+
readonly render: () => react.JSX.Element | null;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
interface ControllableStateOptions<T> {
|
|
201
|
+
value?: T;
|
|
202
|
+
defaultValue: T;
|
|
203
|
+
onChange?: (value: T) => void;
|
|
204
|
+
}
|
|
205
|
+
declare const useControllableState: <T>({ value, defaultValue, onChange, }: ControllableStateOptions<T>) => readonly [T, (update: SetStateAction<T>) => void];
|
|
206
|
+
|
|
207
|
+
type LeaveConfirmer = (message: string) => boolean | Promise<boolean>;
|
|
208
|
+
declare const useUnsavedChanges: (isDirty: boolean, confirmLeave?: LeaveConfirmer) => {
|
|
209
|
+
readonly confirmLeave: (message?: string) => Promise<boolean>;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
interface ElementSize {
|
|
213
|
+
width: number;
|
|
214
|
+
height: number;
|
|
215
|
+
}
|
|
216
|
+
declare const useElementSize: <T extends HTMLElement = HTMLElement>() => {
|
|
217
|
+
readonly ref: (element: T | null) => void;
|
|
218
|
+
readonly width: number;
|
|
219
|
+
readonly height: number;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
interface InViewOptions {
|
|
223
|
+
root?: Element | null;
|
|
224
|
+
rootMargin?: string;
|
|
225
|
+
threshold?: number | number[];
|
|
226
|
+
once?: boolean;
|
|
227
|
+
}
|
|
228
|
+
declare const useInView: <T extends Element = Element>(options?: InViewOptions) => {
|
|
229
|
+
readonly ref: (element: T | null) => void;
|
|
230
|
+
readonly isInView: boolean;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
interface PaginationOptions {
|
|
234
|
+
total: number;
|
|
235
|
+
pageSize?: number;
|
|
236
|
+
initialPage?: number;
|
|
237
|
+
}
|
|
238
|
+
declare const usePagination: ({ total, pageSize: initialPageSize, initialPage, }: PaginationOptions) => {
|
|
239
|
+
readonly page: number;
|
|
240
|
+
readonly pageSize: number;
|
|
241
|
+
readonly total: number;
|
|
242
|
+
readonly pageCount: number;
|
|
243
|
+
readonly offset: number;
|
|
244
|
+
readonly canNext: boolean;
|
|
245
|
+
readonly canPrev: boolean;
|
|
246
|
+
readonly setPage: (nextPage: number) => void;
|
|
247
|
+
readonly setPageSize: (nextSize: number) => void;
|
|
248
|
+
readonly next: () => void;
|
|
249
|
+
readonly prev: () => void;
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
export { type AsyncSelectOptions, type ConfirmOptions, type ControllableStateOptions, type ElementSize, type FieldIssue, type FieldSchema, type Identifiable, type InViewOptions, type LeaveConfirmer, type OverlayControls, type PaginationOptions, type PromptOptions, type SelectionMode, type StepFlowStepProps, useAsyncAction, useAsyncSelect, useConfirm, useControllableState, useCopyToClipboard, useCounter, useDebounce, useDebouncedCallback, useDisclosure, useDocumentTitle, useElementSize, useFields, useInView, useInterval, useList, useLocalStorage, useMediaQuery, useOnChange, useOnClickOutside, useOnlineStatus, useOverlay, usePagination, usePrevious, usePrompt, useResetState, useSearchState, useSelection, useStableCallback, useStepFlow, useToggle, useUnsavedChanges, useWindowSize };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { RefObject, ComponentType, Dispatch, SetStateAction } from 'react';
|
|
3
|
+
|
|
4
|
+
declare const useToggle: (initialValue?: boolean) => {
|
|
5
|
+
readonly value: boolean;
|
|
6
|
+
readonly toggle: () => void;
|
|
7
|
+
readonly setTrue: () => void;
|
|
8
|
+
readonly setFalse: () => void;
|
|
9
|
+
readonly setValue: react.Dispatch<react.SetStateAction<boolean>>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
declare const useCounter: (initialValue?: number, step?: number) => {
|
|
13
|
+
readonly count: number;
|
|
14
|
+
readonly increment: () => void;
|
|
15
|
+
readonly decrement: () => void;
|
|
16
|
+
readonly reset: () => void;
|
|
17
|
+
readonly setCount: react.Dispatch<react.SetStateAction<number>>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
declare const useDisclosure: (initialOpen?: boolean) => {
|
|
21
|
+
readonly isOpen: boolean;
|
|
22
|
+
readonly open: () => void;
|
|
23
|
+
readonly close: () => void;
|
|
24
|
+
readonly toggle: () => void;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
declare const useDebounce: <T>(value: T, delayMs?: number) => T;
|
|
28
|
+
|
|
29
|
+
declare const usePrevious: <T>(value: T) => T | undefined;
|
|
30
|
+
|
|
31
|
+
declare const useInterval: (callback: () => void, delayMs: number | null) => void;
|
|
32
|
+
|
|
33
|
+
declare const useOnlineStatus: () => boolean;
|
|
34
|
+
|
|
35
|
+
declare const useMediaQuery: (query: string) => boolean;
|
|
36
|
+
|
|
37
|
+
interface WindowSize {
|
|
38
|
+
width: number;
|
|
39
|
+
height: number;
|
|
40
|
+
}
|
|
41
|
+
declare const useWindowSize: () => WindowSize;
|
|
42
|
+
|
|
43
|
+
declare const useOnClickOutside: <T extends HTMLElement>(ref: RefObject<T | null>, handler: (event: MouseEvent | TouchEvent) => void) => void;
|
|
44
|
+
|
|
45
|
+
interface CopyToClipboardResult {
|
|
46
|
+
copiedText: string | null;
|
|
47
|
+
copy: (text: string) => Promise<boolean>;
|
|
48
|
+
reset: () => void;
|
|
49
|
+
}
|
|
50
|
+
declare const useCopyToClipboard: () => CopyToClipboardResult;
|
|
51
|
+
|
|
52
|
+
declare const useLocalStorage: <T>(key: string, initialValue: T) => readonly [T, (value: T | ((previous: T) => T)) => void];
|
|
53
|
+
|
|
54
|
+
declare const useDocumentTitle: (title: string) => void;
|
|
55
|
+
|
|
56
|
+
interface OverlayControls<TResult = unknown> {
|
|
57
|
+
isOpen: boolean;
|
|
58
|
+
close: (result?: TResult) => void;
|
|
59
|
+
}
|
|
60
|
+
declare const useOverlay: <TProps extends object, TResult = unknown>(Overlay: ComponentType<TProps & OverlayControls<TResult>>) => {
|
|
61
|
+
readonly open: (data?: TProps) => Promise<TResult | undefined>;
|
|
62
|
+
readonly close: (result?: TResult) => void;
|
|
63
|
+
readonly render: () => react.JSX.Element | null;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
interface StepFlowStepProps<TStepData = unknown> {
|
|
67
|
+
stepIndex: number;
|
|
68
|
+
isLastStep: boolean;
|
|
69
|
+
onNext: (stepData?: TStepData) => void;
|
|
70
|
+
onCancel: () => void;
|
|
71
|
+
}
|
|
72
|
+
declare const useStepFlow: <TStepData = unknown>(steps: Array<ComponentType<StepFlowStepProps<TStepData>>>) => {
|
|
73
|
+
readonly next: () => Promise<(TStepData | undefined)[] | null>;
|
|
74
|
+
readonly cancel: () => void;
|
|
75
|
+
readonly completeStep: (stepData?: TStepData) => void;
|
|
76
|
+
readonly renderCurrentStep: (extraProps?: Record<string, unknown>) => react.JSX.Element | null;
|
|
77
|
+
readonly currentStepIndex: number;
|
|
78
|
+
readonly isActive: boolean;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
interface AsyncSelectOptions {
|
|
82
|
+
accept?: string;
|
|
83
|
+
multiple?: boolean;
|
|
84
|
+
}
|
|
85
|
+
declare const useAsyncSelect: () => (options?: AsyncSelectOptions) => Promise<File | File[] | null>;
|
|
86
|
+
|
|
87
|
+
declare const useStableCallback: <T extends (...args: never[]) => unknown>(fn: T) => T;
|
|
88
|
+
|
|
89
|
+
declare const useOnChange: <T>(value: T, callback: (current: T, previous: T) => void) => void;
|
|
90
|
+
|
|
91
|
+
declare const useResetState: <T>(source: unknown, initialValue: T) => [T, Dispatch<SetStateAction<T>>];
|
|
92
|
+
|
|
93
|
+
declare const useAsyncAction: <TArgs extends unknown[], TResult>(action: (...args: TArgs) => Promise<TResult>) => {
|
|
94
|
+
readonly run: (...args: TArgs) => Promise<TResult>;
|
|
95
|
+
readonly isPending: boolean;
|
|
96
|
+
readonly error: unknown;
|
|
97
|
+
readonly data: TResult | undefined;
|
|
98
|
+
readonly reset: () => void;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
declare const useDebouncedCallback: <TArgs extends unknown[]>(callback: (...args: TArgs) => void, delayMs: number) => readonly [(...args: TArgs) => void, () => void];
|
|
102
|
+
|
|
103
|
+
interface FieldIssue {
|
|
104
|
+
path: Array<string | number>;
|
|
105
|
+
message: string;
|
|
106
|
+
}
|
|
107
|
+
interface FieldSchema<T> {
|
|
108
|
+
safeParse: (data: unknown) => {
|
|
109
|
+
success: true;
|
|
110
|
+
data: T;
|
|
111
|
+
} | {
|
|
112
|
+
success: false;
|
|
113
|
+
error: {
|
|
114
|
+
issues: FieldIssue[];
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
declare const useFields: <T extends object>(initialValues: T, schema?: FieldSchema<T>) => {
|
|
119
|
+
readonly values: T;
|
|
120
|
+
readonly setField: <K extends keyof T>(key: K, value: T[K]) => void;
|
|
121
|
+
readonly setValues: react.Dispatch<react.SetStateAction<T>>;
|
|
122
|
+
readonly reset: () => void;
|
|
123
|
+
readonly isDirty: boolean;
|
|
124
|
+
readonly errors: Partial<Record<keyof T, string>>;
|
|
125
|
+
readonly validate: () => {
|
|
126
|
+
readonly ok: true;
|
|
127
|
+
readonly values: T;
|
|
128
|
+
readonly errors?: undefined;
|
|
129
|
+
} | {
|
|
130
|
+
readonly ok: false;
|
|
131
|
+
readonly errors: Partial<Record<keyof T, string>>;
|
|
132
|
+
readonly values?: undefined;
|
|
133
|
+
};
|
|
134
|
+
readonly submit: (onValid: (values: T) => void | Promise<void>) => {
|
|
135
|
+
readonly ok: true;
|
|
136
|
+
readonly values: T;
|
|
137
|
+
readonly errors?: undefined;
|
|
138
|
+
} | {
|
|
139
|
+
readonly ok: false;
|
|
140
|
+
readonly errors: Partial<Record<keyof T, string>>;
|
|
141
|
+
readonly values?: undefined;
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
interface Identifiable {
|
|
146
|
+
id: string;
|
|
147
|
+
}
|
|
148
|
+
declare const useList: <T extends Identifiable>(initialItems?: T[]) => {
|
|
149
|
+
readonly items: T[];
|
|
150
|
+
readonly insert: (item: T, index?: number) => void;
|
|
151
|
+
readonly update: (id: string, patch: Partial<T> | ((item: T) => T)) => void;
|
|
152
|
+
readonly remove: (id: string) => void;
|
|
153
|
+
readonly move: (fromIndex: number, toIndex: number) => void;
|
|
154
|
+
readonly replace: (nextItems: T[]) => void;
|
|
155
|
+
readonly setItems: react.Dispatch<react.SetStateAction<T[]>>;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
type SelectionMode = 'single' | 'multiple';
|
|
159
|
+
interface UseSelectionOptions {
|
|
160
|
+
mode?: SelectionMode;
|
|
161
|
+
initial?: string[];
|
|
162
|
+
}
|
|
163
|
+
declare const useSelection: ({ mode, initial }?: UseSelectionOptions) => {
|
|
164
|
+
readonly selected: string[];
|
|
165
|
+
readonly isSelected: (id: string) => boolean;
|
|
166
|
+
readonly toggle: (id: string) => void;
|
|
167
|
+
readonly selectOnly: (id: string) => void;
|
|
168
|
+
readonly selectAll: (ids: string[]) => void;
|
|
169
|
+
readonly clear: () => void;
|
|
170
|
+
readonly setSelected: react.Dispatch<react.SetStateAction<string[]>>;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
declare const useSearchState: <T extends Record<string, string>>(defaults: T) => readonly [T, (update: Partial<T> | ((previous: T) => T)) => void];
|
|
174
|
+
|
|
175
|
+
interface ConfirmOptions {
|
|
176
|
+
title: string;
|
|
177
|
+
message?: string;
|
|
178
|
+
confirmLabel?: string;
|
|
179
|
+
cancelLabel?: string;
|
|
180
|
+
danger?: boolean;
|
|
181
|
+
}
|
|
182
|
+
declare const useConfirm: () => {
|
|
183
|
+
readonly confirm: (options: ConfirmOptions) => Promise<boolean>;
|
|
184
|
+
readonly render: () => react.JSX.Element | null;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
interface PromptOptions {
|
|
188
|
+
title: string;
|
|
189
|
+
message?: string;
|
|
190
|
+
label?: string;
|
|
191
|
+
initialValue?: string;
|
|
192
|
+
confirmLabel?: string;
|
|
193
|
+
cancelLabel?: string;
|
|
194
|
+
}
|
|
195
|
+
declare const usePrompt: () => {
|
|
196
|
+
readonly prompt: (options: PromptOptions) => Promise<string | null>;
|
|
197
|
+
readonly render: () => react.JSX.Element | null;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
interface ControllableStateOptions<T> {
|
|
201
|
+
value?: T;
|
|
202
|
+
defaultValue: T;
|
|
203
|
+
onChange?: (value: T) => void;
|
|
204
|
+
}
|
|
205
|
+
declare const useControllableState: <T>({ value, defaultValue, onChange, }: ControllableStateOptions<T>) => readonly [T, (update: SetStateAction<T>) => void];
|
|
206
|
+
|
|
207
|
+
type LeaveConfirmer = (message: string) => boolean | Promise<boolean>;
|
|
208
|
+
declare const useUnsavedChanges: (isDirty: boolean, confirmLeave?: LeaveConfirmer) => {
|
|
209
|
+
readonly confirmLeave: (message?: string) => Promise<boolean>;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
interface ElementSize {
|
|
213
|
+
width: number;
|
|
214
|
+
height: number;
|
|
215
|
+
}
|
|
216
|
+
declare const useElementSize: <T extends HTMLElement = HTMLElement>() => {
|
|
217
|
+
readonly ref: (element: T | null) => void;
|
|
218
|
+
readonly width: number;
|
|
219
|
+
readonly height: number;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
interface InViewOptions {
|
|
223
|
+
root?: Element | null;
|
|
224
|
+
rootMargin?: string;
|
|
225
|
+
threshold?: number | number[];
|
|
226
|
+
once?: boolean;
|
|
227
|
+
}
|
|
228
|
+
declare const useInView: <T extends Element = Element>(options?: InViewOptions) => {
|
|
229
|
+
readonly ref: (element: T | null) => void;
|
|
230
|
+
readonly isInView: boolean;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
interface PaginationOptions {
|
|
234
|
+
total: number;
|
|
235
|
+
pageSize?: number;
|
|
236
|
+
initialPage?: number;
|
|
237
|
+
}
|
|
238
|
+
declare const usePagination: ({ total, pageSize: initialPageSize, initialPage, }: PaginationOptions) => {
|
|
239
|
+
readonly page: number;
|
|
240
|
+
readonly pageSize: number;
|
|
241
|
+
readonly total: number;
|
|
242
|
+
readonly pageCount: number;
|
|
243
|
+
readonly offset: number;
|
|
244
|
+
readonly canNext: boolean;
|
|
245
|
+
readonly canPrev: boolean;
|
|
246
|
+
readonly setPage: (nextPage: number) => void;
|
|
247
|
+
readonly setPageSize: (nextSize: number) => void;
|
|
248
|
+
readonly next: () => void;
|
|
249
|
+
readonly prev: () => void;
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
export { type AsyncSelectOptions, type ConfirmOptions, type ControllableStateOptions, type ElementSize, type FieldIssue, type FieldSchema, type Identifiable, type InViewOptions, type LeaveConfirmer, type OverlayControls, type PaginationOptions, type PromptOptions, type SelectionMode, type StepFlowStepProps, useAsyncAction, useAsyncSelect, useConfirm, useControllableState, useCopyToClipboard, useCounter, useDebounce, useDebouncedCallback, useDisclosure, useDocumentTitle, useElementSize, useFields, useInView, useInterval, useList, useLocalStorage, useMediaQuery, useOnChange, useOnClickOutside, useOnlineStatus, useOverlay, usePagination, usePrevious, usePrompt, useResetState, useSearchState, useSelection, useStableCallback, useStepFlow, useToggle, useUnsavedChanges, useWindowSize };
|