From aa2938cb342d16c648a55f943dda237cb3d5e860 Mon Sep 17 00:00:00 2001 From: robonen Date: Mon, 15 Jun 2026 16:55:07 +0700 Subject: [PATCH] refactor(toolkit): type source any with proper types Genuinely type composable any usages (useStepper/useStorage/useForm/ createEventHook/useSorted/etc.) as proper generics/unknown; keep idiomatic any-function and overload-impl signatures with comments; skipped test -> .todo. --- vue/toolkit/docs/intro.vue | 34 +++++------ vue/toolkit/eslint.config.ts | 4 +- .../composables/animation/useAnimate/demo.vue | 36 +++++------ .../animation/useCountdown/demo.vue | 24 ++++---- .../animation/useDateFormat/demo.vue | 26 ++++---- .../animation/useDateFormat/index.ts | 3 +- .../animation/useInterval/demo.vue | 24 ++++---- .../animation/useIntervalFn/demo.vue | 36 +++++------ .../src/composables/animation/useNow/demo.vue | 28 ++++----- .../composables/animation/useRafFn/demo.vue | 42 ++++++------- .../composables/animation/useTimeAgo/demo.vue | 22 +++---- .../composables/animation/useTimeAgo/index.ts | 6 +- .../composables/animation/useTimeout/demo.vue | 22 +++---- .../animation/useTimeoutFn/demo.vue | 12 ++-- .../animation/useTimeoutFn/index.ts | 2 +- .../animation/useTimestamp/demo.vue | 28 ++++----- .../animation/useTransition/demo.vue | 34 +++++------ .../animation/useTransition/index.ts | 6 ++ .../array/useArrayDifference/demo.vue | 22 +++---- .../array/useArrayDifference/index.ts | 8 +-- .../composables/array/useArrayEvery/demo.vue | 20 +++--- .../composables/array/useArrayFilter/demo.vue | 28 ++++----- .../composables/array/useArrayFind/demo.vue | 28 ++++----- .../array/useArrayFindIndex/demo.vue | 18 +++--- .../array/useArrayFindLast/demo.vue | 24 ++++---- .../array/useArrayIncludes/demo.vue | 30 ++++----- .../array/useArrayIncludes/index.ts | 6 +- .../composables/array/useArrayJoin/demo.vue | 26 ++++---- .../composables/array/useArrayJoin/index.ts | 3 +- .../composables/array/useArrayMap/demo.vue | 26 ++++---- .../composables/array/useArrayReduce/demo.vue | 22 +++---- .../composables/array/useArraySome/demo.vue | 22 +++---- .../composables/array/useArrayUnique/demo.vue | 24 ++++---- .../composables/array/useArrayUnique/index.ts | 6 +- .../src/composables/array/useSorted/demo.vue | 22 +++---- .../src/composables/array/useSorted/index.ts | 20 +++--- .../browser/broadcastedRef/demo.vue | 26 ++++---- .../browser/useBreakpoints/demo.vue | 26 ++++---- .../browser/useBreakpoints/index.ts | 17 +----- .../composables/browser/useClipboard/demo.vue | 22 +++---- .../browser/useClipboardItems/demo.vue | 24 ++++---- .../browser/useCloseWatcher/demo.vue | 24 ++++---- .../composables/browser/useColorMode/demo.vue | 30 ++++----- .../composables/browser/useCssVar/demo.vue | 28 ++++----- .../src/composables/browser/useDark/demo.vue | 26 ++++---- .../browser/useDocumentPiP/demo.vue | 24 ++++---- .../browser/useEventListener/demo.vue | 30 ++++----- .../browser/useEventListener/index.ts | 13 ++-- .../browser/useEyeDropper/demo.vue | 14 ++--- .../composables/browser/useFavicon/demo.vue | 20 +++--- .../browser/useFileDialog/demo.vue | 28 ++++----- .../browser/useFileSystemAccess/demo.vue | 26 ++++---- .../browser/useFullscreen/demo.vue | 20 +++--- .../browser/useFullscreen/index.ts | 25 ++++---- .../src/composables/browser/useImage/demo.vue | 16 ++--- .../src/composables/browser/useImage/index.ts | 2 +- .../browser/useLocalFonts/demo.vue | 20 +++--- .../browser/useMediaQuery/demo.vue | 18 +++--- .../browser/useMediaQuery/index.ts | 17 +----- .../composables/browser/useObjectUrl/demo.vue | 26 ++++---- .../browser/useOtpCredentials/demo.vue | 16 ++--- .../browser/usePermission/demo.vue | 22 +++---- .../browser/usePreferredColorScheme/demo.vue | 18 +++--- .../browser/usePreferredContrast/demo.vue | 28 ++++----- .../browser/usePreferredDark/demo.vue | 12 ++-- .../browser/usePreferredLanguages/demo.vue | 26 ++++---- .../usePreferredReducedMotion/demo.vue | 22 +++---- .../usePreferredReducedTransparency/demo.vue | 22 +++---- .../composables/browser/useScriptTag/demo.vue | 28 ++++----- .../src/composables/browser/useShare/demo.vue | 28 ++++----- .../composables/browser/useStyleTag/demo.vue | 22 +++---- .../composables/browser/useTabLeader/demo.vue | 28 ++++----- .../browser/useTextareaAutosize/demo.vue | 26 ++++---- .../src/composables/browser/useTitle/demo.vue | 26 ++++---- .../browser/useUrlSearchParams/demo.vue | 24 ++++---- .../browser/useUrlSearchParams/index.ts | 11 +++- .../composables/browser/useVibrate/demo.vue | 22 +++---- .../composables/browser/useWakeLock/demo.vue | 20 +++--- .../browser/useWebNotification/demo.vue | 32 +++++----- .../component/createReusableTemplate/demo.vue | 24 ++++---- .../component/createReusableTemplate/index.ts | 16 ++++- .../component/unrefElement/demo.vue | 20 +++--- .../component/useCurrentElement/demo.vue | 26 ++++---- .../component/useForwardExpose/demo.vue | 22 +++---- .../component/useForwardExpose/index.ts | 2 +- .../component/useTemplateRefsList/demo.vue | 30 ++++----- .../component/useVirtualList/demo.vue | 26 ++++---- .../component/useVirtualList/index.ts | 2 +- .../composables/debug/useRenderCount/demo.vue | 18 +++--- .../composables/debug/useRenderInfo/demo.vue | 32 +++++----- .../elements/onElementRemoval/demo.vue | 34 +++++------ .../elements/useActiveElement/demo.vue | 20 +++--- .../elements/useDocumentReadyState/demo.vue | 18 +++--- .../elements/useDocumentVisibility/demo.vue | 22 +++---- .../elements/useDraggable/demo.vue | 26 ++++---- .../elements/useDraggable/index.ts | 6 +- .../composables/elements/useDropZone/demo.vue | 24 ++++---- .../elements/useElementBounding/demo.vue | 32 +++++----- .../elements/useElementSize/demo.vue | 34 +++++------ .../elements/useElementVisibility/demo.vue | 30 ++++----- .../elements/useFocusGuard/demo.vue | 22 +++---- .../elements/useIntersectionObserver/demo.vue | 30 ++++----- .../elements/useMutationObserver/demo.vue | 44 ++++++------- .../elements/useParentElement/demo.vue | 36 +++++------ .../elements/useResizeObserver/demo.vue | 36 +++++------ .../elements/useWindowFocus/demo.vue | 26 ++++---- .../elements/useWindowScroll/demo.vue | 42 ++++++------- .../elements/useWindowSize/demo.vue | 32 +++++----- .../composables/forms/mask/presets/card.ts | 28 +++------ .../composables/forms/mask/presets/dynamic.ts | 39 ++++++++++++ .../forms/mask/presets/phone-country.ts | 28 +++------ .../src/composables/forms/useField/demo.vue | 20 +++--- .../src/composables/forms/useField/index.ts | 6 +- .../composables/forms/useFieldArray/demo.vue | 24 ++++---- .../composables/forms/useFieldArray/index.ts | 2 +- .../src/composables/forms/useForm/context.ts | 2 +- .../src/composables/forms/useForm/demo.vue | 24 ++++---- .../src/composables/forms/useForm/index.ts | 23 +++---- .../src/composables/forms/useForm/types.ts | 15 +++-- .../composables/forms/useForm/validation.ts | 2 +- .../composables/forms/useFormContext/demo.vue | 20 +++--- .../composables/forms/useFormContext/index.ts | 2 +- .../composables/forms/useMaskedField/demo.vue | 16 ++--- .../composables/forms/useMaskedInput/demo.vue | 8 +-- .../lifecycle/tryOnBeforeMount/demo.vue | 24 ++++---- .../lifecycle/tryOnBeforeMount/index.ts | 20 +----- .../lifecycle/tryOnMounted/demo.vue | 16 ++--- .../lifecycle/tryOnMounted/index.test.ts | 2 +- .../lifecycle/tryOnMounted/index.ts | 18 +----- .../lifecycle/tryOnScopeDispose/demo.vue | 28 ++++----- .../composables/lifecycle/useMounted/demo.vue | 20 +++--- .../src/composables/math/logicAnd/demo.vue | 36 +++++------ .../src/composables/math/logicNot/demo.vue | 26 ++++---- .../src/composables/math/logicOr/demo.vue | 14 ++--- .../src/composables/math/useAbs/demo.vue | 20 +++--- .../src/composables/math/useAverage/demo.vue | 20 +++--- .../src/composables/math/useCeil/demo.vue | 26 ++++---- .../src/composables/math/useClamp/demo.vue | 36 +++++------ .../src/composables/math/useFloor/demo.vue | 26 ++++---- .../src/composables/math/useMath/demo.vue | 22 +++---- .../src/composables/math/useMath/index.ts | 8 ++- .../src/composables/math/useMax/demo.vue | 28 ++++----- .../src/composables/math/useMin/demo.vue | 28 ++++----- .../src/composables/math/useMin/index.ts | 47 +++++++------- .../composables/math/usePrecision/demo.vue | 36 +++++------ .../composables/math/useProjection/demo.vue | 44 ++++++------- .../src/composables/math/useRound/demo.vue | 26 ++++---- .../src/composables/math/useSum/demo.vue | 24 ++++---- .../src/composables/math/useTrunc/demo.vue | 26 ++++---- .../composables/media/useBluetooth/demo.vue | 26 ++++---- .../media/useDisplayMedia/demo.vue | 28 ++++----- .../media/useMediaControls/demo.vue | 34 +++++------ .../media/useMediaControls/index.ts | 32 ++-------- .../src/composables/media/useMemory/demo.vue | 42 ++++++------- .../media/usePerformanceObserver/demo.vue | 38 ++++++------ .../media/useSpeechRecognition/demo.vue | 32 +++++----- .../media/useSpeechSynthesis/demo.vue | 40 ++++++------ .../composables/media/useUserMedia/demo.vue | 18 +++--- .../composables/media/useWebWorker/demo.vue | 20 +++--- .../composables/media/useWebWorker/index.ts | 14 +++-- .../composables/media/useWebWorkerFn/demo.vue | 36 +++++------ .../reactivity/computedAsync/demo.vue | 28 ++++----- .../reactivity/computedEager/demo.vue | 24 ++++---- .../reactivity/computedWithControl/demo.vue | 38 ++++++------ .../reactivity/computedWithControl/index.ts | 6 +- .../composables/reactivity/extendRef/demo.vue | 28 ++++----- .../reactivity/reactiveComputed/demo.vue | 36 +++++------ .../reactivity/reactiveOmit/demo.vue | 34 +++++------ .../reactivity/reactiveOmit/index.ts | 4 +- .../reactivity/reactivePick/demo.vue | 26 ++++---- .../reactivity/refAutoReset/demo.vue | 34 +++++------ .../reactivity/refDebounced/demo.vue | 28 ++++----- .../reactivity/refDefault/demo.vue | 28 ++++----- .../reactivity/refThrottled/demo.vue | 36 +++++------ .../reactivity/refThrottled/index.ts | 4 +- .../reactivity/refWithControl/demo.vue | 34 +++++------ .../composables/reactivity/syncRef/demo.vue | 28 ++++----- .../reactivity/toReactive/demo.vue | 26 ++++---- .../composables/reactivity/useCached/demo.vue | 26 ++++---- .../composables/reactivity/useCloned/demo.vue | 38 ++++++------ .../reactivity/useDebounceFn/demo.vue | 40 ++++++------ .../reactivity/usePrevious/demo.vue | 26 ++++---- .../reactivity/useSyncRefs/demo.vue | 32 +++++----- .../reactivity/useThrottleFn/demo.vue | 40 ++++++------ .../reactivity/useThrottleFn/index.ts | 5 ++ .../reactivity/useToNumber/demo.vue | 24 ++++---- .../reactivity/useToString/demo.vue | 34 +++++------ .../composables/sensors/onKeyStroke/demo.vue | 30 ++++----- .../composables/sensors/onKeyStroke/index.ts | 2 + .../composables/sensors/onLongPress/demo.vue | 34 +++++------ .../sensors/onStartTyping/demo.vue | 22 +++---- .../composables/sensors/useBattery/demo.vue | 32 +++++----- .../sensors/useBodyScrollLock/demo.vue | 22 +++---- .../sensors/useClickOutside/demo.vue | 20 +++--- .../sensors/useDeviceMotion/demo.vue | 44 ++++++------- .../sensors/useDeviceOrientation/demo.vue | 30 ++++----- .../sensors/useDevicePixelRatio/demo.vue | 24 ++++---- .../sensors/useDevicesList/demo.vue | 26 ++++---- .../sensors/useElementByPoint/demo.vue | 26 ++++---- .../sensors/useElementHover/demo.vue | 40 ++++++------ .../composables/sensors/useEscapeKey/demo.vue | 32 +++++----- .../src/composables/sensors/useFocus/demo.vue | 22 +++---- .../sensors/useFocusWithin/demo.vue | 20 +++--- .../src/composables/sensors/useFps/demo.vue | 34 +++++------ .../composables/sensors/useGamepad/demo.vue | 40 ++++++------ .../sensors/useGeolocation/demo.vue | 40 ++++++------ .../sensors/useGeolocation/index.ts | 5 +- .../src/composables/sensors/useIdle/demo.vue | 32 +++++----- .../sensors/useInfiniteScroll/demo.vue | 22 +++---- .../sensors/useKeyModifier/demo.vue | 24 ++++---- .../composables/sensors/useMagicKeys/demo.vue | 32 +++++----- .../composables/sensors/useMagicKeys/index.ts | 27 +++++--- .../src/composables/sensors/useMouse/demo.vue | 30 ++++----- .../src/composables/sensors/useMouse/index.ts | 11 +--- .../sensors/useMouseInElement/demo.vue | 38 ++++++------ .../sensors/useMousePressed/demo.vue | 30 ++++----- .../composables/sensors/useNetwork/demo.vue | 42 ++++++------- .../composables/sensors/useOnline/demo.vue | 12 ++-- .../composables/sensors/usePageLeave/demo.vue | 24 ++++---- .../composables/sensors/useParallax/demo.vue | 38 ++++++------ .../composables/sensors/usePointer/demo.vue | 36 +++++------ .../composables/sensors/usePointer/index.ts | 11 +--- .../sensors/usePointerLock/demo.vue | 28 ++++----- .../sensors/usePointerSwipe/demo.vue | 36 +++++------ .../sensors/useScreenOrientation/demo.vue | 30 ++++----- .../composables/sensors/useScroll/demo.vue | 26 ++++---- .../sensors/useScrollLock/demo.vue | 22 +++---- .../src/composables/sensors/useSwipe/demo.vue | 28 ++++----- .../sensors/useTextSelection/demo.vue | 34 +++++------ .../state/createSharedComposable/demo.vue | 22 +++---- .../state/useAppSharedState/demo.vue | 34 +++++------ .../composables/state/useAsyncState/demo.vue | 36 +++++------ .../composables/state/useAsyncState/index.ts | 10 +-- .../state/useContextFactory/demo.vue | 30 ++++----- .../src/composables/state/useCounter/demo.vue | 32 +++++----- .../composables/state/useCycleList/demo.vue | 28 ++++----- .../state/useDebouncedRefHistory/demo.vue | 30 ++++----- .../src/composables/state/useId/demo.vue | 26 ++++---- .../state/useInjectionStore/demo.vue | 32 +++++----- .../state/useInjectionStore/index.ts | 2 +- .../composables/state/useLastChanged/demo.vue | 22 +++---- .../composables/state/useLastChanged/index.ts | 2 +- .../state/useManualRefHistory/demo.vue | 38 ++++++------ .../state/useOffsetPagination/demo.vue | 28 ++++----- .../composables/state/useRefHistory/demo.vue | 26 ++++---- .../composables/state/useRefHistory/index.ts | 22 +++---- .../src/composables/state/useStepper/demo.vue | 18 +++--- .../src/composables/state/useStepper/index.ts | 61 +++++++++++++------ .../state/useThrottledRefHistory/demo.vue | 34 +++++------ .../src/composables/state/useToggle/demo.vue | 32 +++++----- .../composables/storage/useCookie/demo.vue | 28 ++++----- .../composables/storage/useCookie/index.ts | 6 +- .../storage/useLocalStorage/demo.vue | 28 ++++----- .../storage/useSessionStorage/demo.vue | 38 ++++++------ .../composables/storage/useStorage/demo.vue | 38 ++++++------ .../composables/storage/useStorage/index.ts | 34 +++++------ .../storage/useStorageAsync/demo.vue | 38 ++++++------ .../storage/useStorageAsync/index.ts | 10 +-- .../utilities/createEventHook/demo.vue | 30 ++++----- .../utilities/createEventHook/index.ts | 30 ++++----- .../src/composables/utilities/get/demo.vue | 34 +++++------ .../composables/utilities/isDefined/demo.vue | 20 +++--- .../src/composables/utilities/set/demo.vue | 28 ++++----- .../utilities/useEventBus/demo.vue | 24 ++++---- .../utilities/useEventBus/index.ts | 6 +- .../composables/utilities/useMemoize/demo.vue | 44 ++++++------- .../utilities/useSupported/demo.vue | 20 +++--- .../src/composables/watch/until/demo.vue | 30 ++++----- .../src/composables/watch/until/index.ts | 36 +++++------ .../composables/watch/watchDebounced/demo.vue | 40 ++++++------ .../composables/watch/watchDebounced/index.ts | 16 +---- .../composables/watch/watchIgnorable/demo.vue | 28 ++++----- .../composables/watch/watchIgnorable/index.ts | 23 ++----- .../src/composables/watch/watchOnce/demo.vue | 34 +++++------ .../src/composables/watch/watchOnce/index.ts | 17 +----- .../composables/watch/watchPausable/demo.vue | 30 ++++----- .../composables/watch/watchPausable/index.ts | 15 +---- .../composables/watch/watchThrottled/demo.vue | 32 +++++----- .../composables/watch/watchThrottled/index.ts | 26 +++----- .../src/composables/watch/whenever/demo.vue | 24 ++++---- vue/toolkit/src/types/watch.ts | 26 ++++++++ vue/toolkit/src/utils/filters.ts | 2 +- vue/toolkit/src/utils/lifecycle.ts | 51 ++++++++++++++++ 283 files changed, 3505 insertions(+), 3482 deletions(-) create mode 100644 vue/toolkit/src/composables/forms/mask/presets/dynamic.ts create mode 100644 vue/toolkit/src/types/watch.ts create mode 100644 vue/toolkit/src/utils/lifecycle.ts diff --git a/vue/toolkit/docs/intro.vue b/vue/toolkit/docs/intro.vue index b66005b..1bf45ae 100644 --- a/vue/toolkit/docs/intro.vue +++ b/vue/toolkit/docs/intro.vue @@ -29,33 +29,33 @@ const { count, increment, decrement, reset } = useCounter(0, { min: 0, max: 10 }
-
-

Tree-shakeable by design

-

+

+

Tree-shakeable by design

+

Import only what you use. Each composable lives on its own and pulls in nothing it doesn't need — your bundle stays exactly as small as your usage.

-
-

SSR-safe out of the box

-

+

+

SSR-safe out of the box

+

Browser-only access is guarded behind lifecycle hooks and configurable window/document targets, so Nuxt and SSR setups just work.

-
-

Fully typed

-

+

+

Fully typed

+

Written in TypeScript with precise return types and generics. MaybeRefOrGetter arguments mean you can pass plain values, refs or getters interchangeably.

-
-

Broad coverage

-

+

+

Broad coverage

+

From state and reactivity to sensors, elements, storage, math and form handling — one cohesive toolkit spanning the whole surface of a Vue app.

@@ -101,19 +101,19 @@ useEventListener('keydown', (e) => {

The same useCounter running live:

-
+
- {{ count }} + {{ count }}