├── .editorconfig ├── .github ├── COMMIT-zh-CN.md ├── COMMIT.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ └── feature_request.yml ├── PULL_REQUEST_TEMPLATE-zh-CN.md ├── PULL_REQUEST_TEMPLATE.md ├── auto-comment.yml ├── auto_assign.yml ├── release-drafter.yml └── workflows │ ├── algolia.yml │ ├── auto-assign.yml │ ├── ci.yml │ ├── deploy.yml │ └── greetings.yml ├── .gitignore ├── .husky ├── commit-msg ├── common.sh └── pre-commit ├── .markdownlint.json ├── .markdownlintignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode ├── setting.json └── settings.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DEV_DOCUMENT.md ├── LICENSE ├── README.md ├── README.zh-CN.md ├── algolia.json ├── commitlint.config.cts ├── docs ├── .vitepress │ ├── config │ │ ├── en.ts │ │ ├── factory.ts │ │ ├── index.ts │ │ ├── shared.ts │ │ ├── utils.ts │ │ └── zh.ts │ ├── plugins │ │ ├── applyFooterLinkPlugin.ts │ │ └── applyMdPlugin.ts │ └── theme │ │ ├── index.ts │ │ └── styles.css ├── components │ ├── button │ │ ├── button.vue │ │ └── index.ts │ └── utils │ │ └── vue │ │ ├── index.ts │ │ ├── install.ts │ │ └── typescript.ts ├── contributors.ts ├── demo │ ├── request-debounce │ │ └── demo.vue │ ├── request-formatResult │ │ └── demo.vue │ ├── request-global │ │ └── demo.vue │ ├── request-loadingDelay │ │ └── demo.vue │ ├── request-middleware │ │ └── demo.vue │ ├── request-plugin-broadcastChannel │ │ ├── demo.vue │ │ └── demo1.vue │ ├── request-plugin-fetchsing │ │ ├── demo.vue │ │ └── demo3.vue │ ├── request-pluginDoc │ │ └── demo.vue │ ├── request-polling │ │ └── demo.vue │ ├── request-ready │ │ └── demo.vue │ ├── request-refreshDeps │ │ ├── demo.vue │ │ └── demo1.vue │ ├── request-refreshOnWindowFocus │ │ └── demo.vue │ ├── request-retry │ │ └── demo.vue │ ├── request-throttle │ │ └── demo.vue │ ├── swr-cache │ │ ├── ShareDemo.vue │ │ ├── asyncDemo.vue │ │ ├── demo.vue │ │ ├── demo1.vue │ │ ├── demo2.vue │ │ ├── demo3.vue │ │ └── demo4.vue │ ├── useAsyncOrder │ │ └── demo.vue │ ├── useBoolean │ │ └── demo.vue │ ├── useCookieState │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useCounter │ │ └── demo.vue │ ├── useDarkMode │ │ └── demo.vue │ ├── useDebounce │ │ └── demo.vue │ ├── useDebounceFn │ │ └── demo.vue │ ├── useDrop-useDrag │ │ ├── DragDemo.vue │ │ └── demo.vue │ ├── useElementBounding │ │ └── demo.vue │ ├── useEventEmitter │ │ ├── DemoA.vue │ │ ├── GlobalDemo.vue │ │ └── demo.vue │ ├── useEventListener │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useExternal │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useFavicon │ │ └── demo.vue │ ├── useFetchs │ │ └── demo.vue │ ├── useFocusWithin │ │ └── demo.vue │ ├── useFormatResult │ │ └── demo.vue │ ├── useFullscreen │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useHover │ │ └── demo.vue │ ├── useImmer │ │ └── demo.vue │ ├── useInViewport │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useInfiniteScroll │ │ ├── demo.vue │ │ ├── demo1.vue │ │ ├── demo2.vue │ │ ├── demo3.vue │ │ └── demo4.vue │ ├── useInterval │ │ └── demo.vue │ ├── useKeyPress │ │ ├── demo.vue │ │ ├── demo1.vue │ │ └── demo2.vue │ ├── useLocalStorageState │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useLockFn │ │ └── demo.vue │ ├── useLongPress │ │ └── demo.vue │ ├── useMap │ │ └── demo.vue │ ├── useMedia │ │ └── demo.vue │ ├── useMouse │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useMutationObserver │ │ └── demo.vue │ ├── useNetwork │ │ └── demo.vue │ ├── usePrevious │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useRequest │ │ ├── Index.vue │ │ ├── demo.vue │ │ ├── demo1.vue │ │ ├── demo2.vue │ │ ├── demo3.vue │ │ ├── demo4.vue │ │ ├── demo5.vue │ │ ├── demo6.vue │ │ └── demo7.vue │ ├── useResizeObserver │ │ └── demo.vue │ ├── useScroll │ │ ├── demo.vue │ │ ├── demo1.vue │ │ └── demo2.vue │ ├── useSet │ │ └── demo.vue │ ├── useSetState │ │ └── demo.vue │ ├── useSize │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useThrottle │ │ └── demo.vue │ ├── useThrottleFn │ │ └── demo.vue │ ├── useTimeout │ │ └── demo.vue │ ├── useTitle │ │ └── demo.vue │ ├── useToggle │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useTrackedEffect │ │ └── demo.vue │ ├── useUpdate │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useUrlState │ │ └── demo.vue │ ├── useVirtualList │ │ ├── demo.vue │ │ └── demo1.vue │ ├── useWebSocket │ │ └── demo.vue │ ├── useWhyDidYouUpdate │ │ ├── DemoItem.vue │ │ └── demo.vue │ ├── useWinResize │ │ └── demo.vue │ └── useWorker │ │ └── demo.vue ├── en │ ├── guide │ │ ├── getting-started.md │ │ ├── index.md │ │ └── migrate.md │ └── hooks │ │ ├── useAsyncOrder.md │ │ ├── useBoolean.md │ │ ├── useControlledState.md │ │ ├── useCookieState.md │ │ ├── useCounter.md │ │ ├── useDarkMode.md │ │ ├── useDebounce.md │ │ ├── useDebounceFn.md │ │ ├── useDrop-useDrag.md │ │ ├── useElementBounding.md │ │ ├── useEventEmitter.md │ │ ├── useEventListener.md │ │ ├── useExternal.md │ │ ├── useFavicon.md │ │ ├── useFetchs.md │ │ ├── useFocusWithin.md │ │ ├── useFormatResult.md │ │ ├── useFullscreen.md │ │ ├── useHover.md │ │ ├── useImmer.md │ │ ├── useInViewport.md │ │ ├── useInfiniteScroll.md │ │ ├── useInterval.md │ │ ├── useKeyPress.md │ │ ├── useLocalStorageState.md │ │ ├── useLockFn.md │ │ ├── useLongPress.md │ │ ├── useMap.md │ │ ├── useMedia.md │ │ ├── useMouse.md │ │ ├── useMutationObserver.md │ │ ├── useNetwork.md │ │ ├── usePrevious.md │ │ ├── useRequest │ │ ├── basic.md │ │ ├── cache.md │ │ ├── debounce.md │ │ ├── devtools.md │ │ ├── fetchs.md │ │ ├── formatResult.md │ │ ├── global.md │ │ ├── guide.md │ │ ├── loadingDelay.md │ │ ├── middleware.md │ │ ├── plugin.md │ │ ├── plugins │ │ │ ├── broadcastChannel.md │ │ │ └── fetchsing.md │ │ ├── polling.md │ │ ├── quick-start.md │ │ ├── ready.md │ │ ├── refreshDeps.md │ │ ├── refreshOnWindowFocus.md │ │ ├── retry.md │ │ ├── scroll.md │ │ └── throttle.md │ │ ├── useResizeObserver.md │ │ ├── useScroll.md │ │ ├── useSessionStorageState.md │ │ ├── useSet.md │ │ ├── useSetState.md │ │ ├── useSize.md │ │ ├── useThrottle.md │ │ ├── useThrottleFn.md │ │ ├── useTimeout.md │ │ ├── useTitle.md │ │ ├── useToggle.md │ │ ├── useTrackedEffect.md │ │ ├── useUpdate.md │ │ ├── useUrlState.md │ │ ├── useVirtualList.md │ │ ├── useWebSocket.md │ │ ├── useWhyDidYouUpdate.md │ │ ├── useWinResize.md │ │ └── useWorker.md ├── index.md ├── public │ ├── _maskable-icon.png │ ├── dark.jpg │ ├── grid.svg │ ├── light.jpg │ ├── logo.png │ ├── logo.svg │ ├── logo@2x.png │ ├── logo_uat.png │ ├── maskable-icon.png │ ├── plugin.png │ ├── pwa-192x192.png │ ├── pwa-512x512.png │ ├── robots.txt │ ├── wx.JPG │ └── zfb.JPG ├── tsconfig.json └── zh │ ├── guide │ ├── getting-started.md │ ├── index.md │ └── migrate.md │ ├── hooks │ ├── useAsyncOrder.md │ ├── useBoolean.md │ ├── useControlledState.md │ ├── useCookieState.md │ ├── useCounter.md │ ├── useDarkMode.md │ ├── useDebounce.md │ ├── useDebounceFn.md │ ├── useDrop-useDrag.md │ ├── useElementBounding.md │ ├── useEventEmitter.md │ ├── useEventListener.md │ ├── useExternal.md │ ├── useFavicon.md │ ├── useFetchs.md │ ├── useFocusWithin.md │ ├── useFormatResult.md │ ├── useFullscreen.md │ ├── useHover.md │ ├── useImmer.md │ ├── useInViewport.md │ ├── useInfiniteScroll.md │ ├── useInterval.md │ ├── useKeyPress.md │ ├── useLocalStorageState.md │ ├── useLockFn.md │ ├── useLongPress.md │ ├── useMap.md │ ├── useMedia.md │ ├── useMouse.md │ ├── useMutationObserver.md │ ├── useNetwork.md │ ├── usePrevious.md │ ├── useRequest │ │ ├── basic.md │ │ ├── cache.md │ │ ├── debounce.md │ │ ├── devtools.md │ │ ├── fetchs.md │ │ ├── formatResult.md │ │ ├── global.md │ │ ├── guide.md │ │ ├── loadingDelay.md │ │ ├── middleware.md │ │ ├── plugin.md │ │ ├── plugins │ │ │ ├── broadcastChannel.md │ │ │ └── fetchsing.md │ │ ├── polling.md │ │ ├── quick-start.md │ │ ├── ready.md │ │ ├── refreshDeps.md │ │ ├── refreshOnWindowFocus.md │ │ ├── retry.md │ │ ├── scroll.md │ │ └── throttle.md │ ├── useResizeObserver.md │ ├── useScroll.md │ ├── useSessionStorageState.md │ ├── useSet.md │ ├── useSetState.md │ ├── useSize.md │ ├── useThrottle.md │ ├── useThrottleFn.md │ ├── useTimeout.md │ ├── useTitle.md │ ├── useToggle.md │ ├── useTrackedEffect.md │ ├── useUpdate.md │ ├── useUrlState.md │ ├── useVirtualList.md │ ├── useWebSocket.md │ ├── useWhyDidYouUpdate.md │ ├── useWinResize.md │ └── useWorker.md │ └── index.md ├── eslint.config.js ├── package.json ├── packages ├── hooks │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── config │ │ └── build.ts │ ├── meta-data.json │ ├── package.json │ ├── src │ │ ├── createUseStorageState │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── types.d.ts │ │ ├── useAsyncOrder │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useBoolean │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ ├── index.ts │ │ │ └── index.zh-CN.md │ │ ├── useControlledState │ │ │ └── index.ts │ │ ├── useCookieState │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useCounter │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useDarkMode │ │ │ ├── __tests__ │ │ │ │ ├── Test.vue │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useDebounce │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useDebounceFn │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useDrag │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useDrop │ │ │ └── index.ts │ │ ├── useElementBounding │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useEventEmitter │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ ├── event.ts │ │ │ └── index.ts │ │ ├── useEventListener │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useExternal │ │ │ ├── __tests__ │ │ │ │ ├── Test.vue │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useFavicon │ │ │ ├── __tests__ │ │ │ │ ├── Test.vue │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useFetchs │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useFocusWithin │ │ │ └── index.ts │ │ ├── useFormatResult │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useFullscreen │ │ │ └── index.ts │ │ ├── useHover │ │ │ └── index.ts │ │ ├── useInViewport │ │ │ └── index.ts │ │ ├── useInfiniteScroll │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── useInterval │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useKeyPress │ │ │ └── index.ts │ │ ├── useLocalStorageState │ │ │ └── index.ts │ │ ├── useLockFn │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useLongPress │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useMap │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useMedia │ │ │ └── index.ts │ │ ├── useMouse │ │ │ └── index.ts │ │ ├── useMutationObserver │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useNetwork │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── usePreview │ │ │ ├── index.en-US.md │ │ │ ├── index.ts │ │ │ └── index.zh-CN.md │ │ ├── usePrevious │ │ │ └── index.ts │ │ ├── useRequest │ │ │ ├── Fetch.ts │ │ │ ├── __tests__ │ │ │ │ ├── basic.spec.ts │ │ │ │ ├── debounce.spec.ts │ │ │ │ ├── delay.spec.ts │ │ │ │ ├── plugin.spec.ts │ │ │ │ ├── polling.spec.ts │ │ │ │ ├── ready.spec.ts │ │ │ │ ├── refreshDeps-auto.spec.ts │ │ │ │ ├── refreshDeps.spec.ts │ │ │ │ ├── retry.spec.ts │ │ │ │ └── throttle.spec.ts │ │ │ ├── config.ts │ │ │ ├── devtools │ │ │ │ ├── devtools.ts │ │ │ │ ├── index.ts │ │ │ │ ├── store.ts │ │ │ │ └── utils.ts │ │ │ ├── docs │ │ │ │ ├── basic │ │ │ │ │ ├── demo │ │ │ │ │ │ ├── Index.vue │ │ │ │ │ │ ├── demo.vue │ │ │ │ │ │ ├── demo1.vue │ │ │ │ │ │ ├── demo2.vue │ │ │ │ │ │ ├── demo3.vue │ │ │ │ │ │ ├── demo4.vue │ │ │ │ │ │ ├── demo5.vue │ │ │ │ │ │ ├── demo6.vue │ │ │ │ │ │ └── demo7.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── cache │ │ │ │ │ ├── demo │ │ │ │ │ │ ├── ShareDemo.vue │ │ │ │ │ │ ├── asyncDemo.vue │ │ │ │ │ │ ├── demo.vue │ │ │ │ │ │ ├── demo1.vue │ │ │ │ │ │ ├── demo2.vue │ │ │ │ │ │ ├── demo3.vue │ │ │ │ │ │ └── demo4.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── debounce │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── devtools │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── fetchs │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── formatResult │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── global │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── guide │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── loadingDelay │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── middleware │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── pluginDoc │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── plugins │ │ │ │ │ ├── broadcastChannel │ │ │ │ │ │ ├── demo │ │ │ │ │ │ │ ├── demo.vue │ │ │ │ │ │ │ └── demo1.vue │ │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ │ └── index.zh-CN.md │ │ │ │ │ └── fetchsing │ │ │ │ │ │ ├── demo │ │ │ │ │ │ ├── demo.vue │ │ │ │ │ │ └── demo3.vue │ │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── polling │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── ready │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── refreshDeps │ │ │ │ │ ├── demo │ │ │ │ │ │ ├── demo.vue │ │ │ │ │ │ └── demo1.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── refreshOnWindowFocus │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── retry │ │ │ │ │ ├── demo │ │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ ├── scroll │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ │ └── throttle │ │ │ │ │ ├── demo │ │ │ │ │ └── demo.vue │ │ │ │ │ ├── index.en-US.md │ │ │ │ │ └── index.zh-CN.md │ │ │ ├── index.ts │ │ │ ├── plugins │ │ │ │ ├── useAutoRunPlugin.ts │ │ │ │ ├── useCachePlugin.ts │ │ │ │ ├── useDebouncePlugin.ts │ │ │ │ ├── useDevtoolsPlugin.ts │ │ │ │ ├── useLoadingDelayPlugin.ts │ │ │ │ ├── usePollingPlugin.ts │ │ │ │ ├── useRefreshOnWindowFocusPlugin.ts │ │ │ │ ├── useRetryPlugin.ts │ │ │ │ └── useThrottlePlugin.ts │ │ │ ├── types.ts │ │ │ ├── useRequest.ts │ │ │ ├── useRequestImplement.ts │ │ │ ├── useRequestProvider.ts │ │ │ └── utils │ │ │ │ ├── cache.ts │ │ │ │ ├── cachePromise.ts │ │ │ │ ├── cacheSubscribe.ts │ │ │ │ ├── index.ts │ │ │ │ ├── isDocumentVisible.ts │ │ │ │ ├── isOnline.ts │ │ │ │ ├── limit.ts │ │ │ │ ├── resolve-args.ts │ │ │ │ ├── subscribeFocus.ts │ │ │ │ ├── subscribeReVisible.ts │ │ │ │ └── utils.ts │ │ ├── useResizeObserver │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useScroll │ │ │ └── index.ts │ │ ├── useSessionStorageState │ │ │ └── index.ts │ │ ├── useSet │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useSetState │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useSize │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useThrottle │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useThrottleFn │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useTimeout │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useTitle │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useToggle │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useTrackedEffect │ │ │ └── index.ts │ │ ├── useUpdate │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── useUrlState │ │ │ ├── demo │ │ │ │ └── demo.vue │ │ │ ├── index.en-US.md │ │ │ └── index.zh-CN.md │ │ ├── useVirtualList │ │ │ └── index.ts │ │ ├── useWebSocket │ │ │ └── index.ts │ │ ├── useWhyDidYouUpdate │ │ │ └── index.ts │ │ ├── useWinResize │ │ │ ├── demo │ │ │ │ └── demo.vue │ │ │ ├── index.en-US.md │ │ │ ├── index.ts │ │ │ └── index.zh-CN.md │ │ └── utils │ │ │ ├── createEffectWithTarget.ts │ │ │ ├── depsAreSame.ts │ │ │ ├── domTarget.ts │ │ │ ├── index.ts │ │ │ ├── isBrowser.ts │ │ │ ├── isFunction.ts │ │ │ ├── rect.ts │ │ │ ├── sleep.ts │ │ │ ├── useDeepCompareWithTarget.ts │ │ │ └── useEffectWithTarget.ts │ ├── test-utils │ │ ├── renderHook.d.ts │ │ ├── renderHook.ts │ │ ├── sleep.d.ts │ │ └── sleep.ts │ ├── tsconfig.json │ └── vite.config.ts ├── resolvers │ ├── package.json │ ├── scripts │ │ ├── build.ts │ │ └── tsconfig.json │ ├── src │ │ ├── index.ts │ │ └── unplugin-auto-import-resolver │ │ │ ├── index.ts │ │ │ ├── useImmerResolver.ts │ │ │ ├── useRequestResolver.ts │ │ │ ├── useUrlStateResolver.ts │ │ │ └── useWorkerResolver.ts │ ├── tsconfig.json │ └── vite.config.ts ├── sponsor │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ │ ├── banner.ts │ │ ├── constant.ts │ │ ├── index.ts │ │ ├── modal.ts │ │ ├── styles │ │ │ ├── app.css │ │ │ └── modal.css │ │ └── updateLastCloseTime.ts │ ├── tsconfig.json │ └── vite.config.ts ├── types │ ├── index.d.ts │ ├── package.json │ ├── tsconfig.json │ ├── types.d.ts │ └── vite.config.ts ├── use-immer │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ └── vite.config.ts ├── use-request-plugins │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ │ ├── index.ts │ │ ├── useBroadcastChannelPlugin │ │ │ ├── index.ts │ │ │ └── useBroadcastChannel.ts │ │ └── useFetchingPlugin │ │ │ ├── index.ts │ │ │ ├── store.ts │ │ │ └── useFetching.ts │ ├── tsconfig.json │ └── vite.config.ts ├── use-request │ ├── package.json │ ├── scripts │ │ └── sync.ts │ ├── src │ │ ├── Fetch.ts │ │ ├── config.ts │ │ ├── devtools │ │ │ ├── devtools.ts │ │ │ ├── index.ts │ │ │ ├── store.ts │ │ │ └── utils.ts │ │ ├── index.ts │ │ ├── plugins │ │ │ ├── useAutoRunPlugin.ts │ │ │ ├── useCachePlugin.ts │ │ │ ├── useDebouncePlugin.ts │ │ │ ├── useDevtoolsPlugin.ts │ │ │ ├── useLoadingDelayPlugin.ts │ │ │ ├── usePollingPlugin.ts │ │ │ ├── useRefreshOnWindowFocusPlugin.ts │ │ │ ├── useRetryPlugin.ts │ │ │ └── useThrottlePlugin.ts │ │ ├── types.ts │ │ ├── useRequest.ts │ │ ├── useRequestImplement.ts │ │ ├── useRequestProvider.ts │ │ └── utils │ │ │ ├── cache.ts │ │ │ ├── cachePromise.ts │ │ │ ├── cacheSubscribe.ts │ │ │ ├── index.ts │ │ │ ├── isDocumentVisible.ts │ │ │ ├── isOnline.ts │ │ │ ├── limit.ts │ │ │ ├── resolve-args.ts │ │ │ ├── subscribeFocus.ts │ │ │ ├── subscribeReVisible.ts │ │ │ └── utils.ts │ ├── tsconfig.json │ └── vite.config.ts ├── use-url-state │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ └── vite.config.ts ├── use-worker │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ │ ├── hook │ │ │ └── useDeepCompareWithTarget.ts │ │ ├── index.ts │ │ └── lib │ │ │ ├── createWorkerBlobUrl.ts │ │ │ ├── jobRunner.ts │ │ │ ├── remoteDepsParser.ts │ │ │ └── status.ts │ ├── tsconfig.json │ └── vite.config.ts └── vitepress │ ├── utils │ ├── index.ts │ ├── parseProps.ts │ └── resolveLocaleConfigs.ts │ └── vitepress-demo-block │ ├── README.md │ ├── package.json │ ├── shim.ts │ ├── src │ ├── Demo.vue │ ├── Icons │ │ ├── code.vue │ │ └── copy.vue │ ├── SfcPlayground.vue │ ├── demo.less │ ├── index.ts │ ├── useCopyCode.ts │ └── useTheme.ts │ ├── tsconfig.json │ └── vite.config.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts ├── bootstrap.ts ├── build.ts ├── docs.ts ├── gitPage.ts └── utilts.ts ├── tsconfig.json └── vitest.config.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [Makefile] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /.github/COMMIT-zh-CN.md: -------------------------------------------------------------------------------- 1 | ### commit 规范 📐 2 | 3 | - feat:新增功能. 4 | - fix:bug 修复 5 | - docs:文档更新 6 | - style:不影响程序逻辑的代码修改(修改空白字符,格式缩进,补全缺失的分号等,没有改变代码逻辑) 7 | - refactor:重构代码(既没有新增功能,也没有修复 bug) 8 | - perf:性能, 体验优化 9 | - test:新增测试用例或是更新现有测试 10 | - build:主要目的是修改项目构建系统(例如 glup,webpack,rollup 的配置等)的提交 11 | - ci:主要目的是修改项目继续集成流程(例如 Travis,Jenkins,GitLab CI,Circle 等)的提交 12 | - chore:不属于以上类型的其他类,比如构建流程, 依赖管理 13 | - revert:回滚某个更早之前的提交 14 | - version: 改变 package.json 版本 15 | - readme: 修改 readme 内容 16 | - ts: 仅修改 ts 17 | 18 | ### 🤝 你应该,根据变更的类型,选择合适... 采用英文 : 和 一个空格符 👇 19 | 20 | ```bash 21 | 22 | feat: your commit 23 | 24 | ``` 25 | 26 | ### 📌 可能存在的问题 27 | 28 | 如果运行 `pnpm docs:dev` 提示报错,可以尝试一下以下操作: 29 | 30 | - 检查 `node` 版本: 建议使用 `node 16`, `node 18` 版本开发 31 | - 构建包后再运行: `pnpm build` 后再运行 `pnpm docs:dev` 32 | 33 | ```bash 34 | # 构建包 35 | pnpm build 36 | 37 | # 运行文档 38 | pnpm docs:dev 39 | ``` 40 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 2 | patreon: # Replace with a single Patreon username 3 | open_collective: # Replace with a single Open Collective username 4 | ko_fi: # Replace with a single Ko-fi username 5 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 6 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 7 | liberapay: # Replace with a single Liberapay username 8 | issuehunt: # Replace with a single IssueHunt username 9 | otechie: # Replace with a single Otechie username 10 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 11 | custom: 12 | [ 13 | 'https://raw.githubusercontent.com/InhiblabCore/vue-hooks-plus/master/docs/public/wx.JPG', 14 | 'https://raw.githubusercontent.com/InhiblabCore/vue-hooks-plus/master/docs/public/zfb.JPG', 15 | ] 16 | -------------------------------------------------------------------------------- /.github/auto-comment.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an Issue or Pull Request becomes stale 2 | daysUntilStale: 90 3 | # Number of days of inactivity before a stale Issue or Pull Request is closed 4 | daysUntilClose: 30 5 | # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable 6 | exemptLabels: 7 | - pinned 8 | - security 9 | # Label to use when marking as stale 10 | staleLabel: stale 11 | # Comment to post when marking as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when removing the stale label. Set to `false` to disable 17 | unmarkComment: false 18 | # Comment to post when closing a stale Issue or Pull Request. Set to `false` to disable 19 | closeComment: true 20 | # Limit to only `issues` or `pulls` 21 | only: issues 22 | -------------------------------------------------------------------------------- /.github/auto_assign.yml: -------------------------------------------------------------------------------- 1 | # Set to true to add reviewers to pull requests 2 | addReviewers: true 3 | 4 | # Set to true to add assignees to pull requests 5 | addAssignees: author 6 | 7 | # A list of reviewers to be added to pull requests (GitHub user name) 8 | reviewers: 9 | - Jonghakseo 10 | 11 | # A number of reviewers added to the pull request 12 | # Set 0 to add all the reviewers (default: 0) 13 | numberOfReviewers: 0 14 | 15 | # A list of assignees, overrides reviewers if set 16 | # assignees: 17 | # - assigneeA 18 | 19 | # A number of assignees to add to the pull request 20 | # Set to 0 to add all of the assignees. 21 | # Uses numberOfReviewers if unset. 22 | # numberOfAssignees: 2 23 | 24 | # A list of keywords to be skipped the process that add reviewers if pull requests include it 25 | # skipKeywords: 26 | # - wip 27 | 28 | filterLabels: 29 | exclude: 30 | - dependencies 31 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name-template: v$NEXT_PATCH_VERSION 2 | tag-template: v$NEXT_PATCH_VERSION 3 | categories: 4 | - title: 🚀 Features 5 | label: feature 6 | - title: 🐛 Bug Fixes 7 | label: fix 8 | - title: 🧰 Maintenance 9 | label: chore 10 | tag-template: - $TITLE @$AUTHOR (#$NUMBER) 11 | template: | 12 | # What's Changed 13 | 14 | $CHANGES -------------------------------------------------------------------------------- /.github/workflows/algolia.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | on: 3 | push: 4 | branches: 5 | - master 6 | jobs: 7 | deploy: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | algolia: 12 | needs: deploy 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: Get the content of algolia.json as config 17 | id: algolia_config 18 | run: echo "::set-output name=config::$(cat algolia.json | jq -r tostring)" 19 | - name: Push indices to Algolia 20 | uses: signcl/docsearch-scraper-action@master 21 | env: 22 | APPLICATION_ID: ${{ secrets.APPLICATION_ID }} 23 | API_KEY: ${{ secrets.API_KEY }} 24 | CONFIG: ${{ steps.algolia_config.outputs.config }} -------------------------------------------------------------------------------- /.github/workflows/auto-assign.yml: -------------------------------------------------------------------------------- 1 | name: 'Auto Assign' 2 | on: 3 | pull_request: 4 | types: [opened, ready_for_review] 5 | 6 | jobs: 7 | add-reviews: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: kentaro-m/auto-assign-action@v1.2.5 11 | with: 12 | configuration-path: '.github/auto_assign.yml' 13 | -------------------------------------------------------------------------------- /.github/workflows/greetings.yml: -------------------------------------------------------------------------------- 1 | name: Greetings 2 | 3 | on: [pull_request_target, issues] 4 | 5 | jobs: 6 | greeting: 7 | runs-on: ubuntu-latest 8 | permissions: 9 | issues: write 10 | pull-requests: write 11 | steps: 12 | - uses: actions/first-interaction@v1 13 | with: 14 | repo-token: ${{ secrets.GITHUB_TOKEN }} 15 | issue-message: 'Thank you for your contribution. We will check and reply to you as soon as possible.' 16 | pr-message: 'Thank you for your contribution. We will check and reply to you as soon as possible.' 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .DS_Store 4 | .cache 5 | .temp 6 | cache 7 | coverage 8 | .docs 9 | 10 | 11 | # lock 12 | package-lock.json 13 | yarn.lock 14 | pnpm-lock.yaml 15 | 16 | # local env files 17 | .local 18 | .env.local 19 | .env.*.local 20 | .eslintcache 21 | 22 | # scripts 23 | scripts/git-pr.js 24 | scripts/publishDoc.sh 25 | 26 | # Log files 27 | npm-debug.log* 28 | yarn-debug.log* 29 | yarn-error.log* 30 | pnpm-debug.log* 31 | 32 | # .vscode 33 | *.suo 34 | *.ntvs* 35 | *.njsproj 36 | *.sln 37 | *.sw? 38 | 39 | sponsor.iife.js -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx --no-install commitlint --edit "$1" 5 | -------------------------------------------------------------------------------- /.husky/common.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | command_exists () { 3 | command -v "$1" >/dev/null 2>&1 4 | } 5 | 6 | if command_exists winpty && test -t 1; then 7 | exec < /dev/tty 8 | fi 9 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | . "$(dirname "$0")/common.sh" 4 | 5 | [ -n "$CI" ] && exit 0 6 | 7 | npx lint-staged -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "no-inline-html": { 3 | "allowed_elements": ["ul", "li", "div", "img", "a", "br", "script", "Badge", "Home","demo","VPTeamPage","VPTeamPageTitle","VPTeamMembers","VPTeamPageSection"] 4 | }, 5 | "MD013": false, 6 | "MD041": false 7 | } 8 | -------------------------------------------------------------------------------- /.markdownlintignore: -------------------------------------------------------------------------------- 1 | README.md 2 | README.zh-CN.md -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | auto-install-peers=true 3 | strict-peer-dependencies=false -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.svg 2 | **/*.ico 3 | package.json 4 | /dist 5 | .DS_Store 6 | .eslintignore 7 | *.png 8 | *.toml 9 | .editorconfig 10 | .gitignore 11 | .prettierignore 12 | LICENSE 13 | .eslintcache 14 | *.lock 15 | yarn-error.log 16 | /public 17 | **/node_modules/** 18 | .npmrc 19 | components.d.ts 20 | auto-imports.d.ts 21 | 22 | playground -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "semi": false, 4 | "vueIndentScriptAndStyle": true, 5 | "singleQuote": true, 6 | "trailingComma": "all", 7 | "proseWrap": "never", 8 | "htmlWhitespaceSensitivity": "strict", 9 | "endOfLine": "auto" 10 | } 11 | -------------------------------------------------------------------------------- /.vscode/setting.json: -------------------------------------------------------------------------------- 1 | { 2 | "prettier.configPath": ".prettierrc" 3 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /DEV_DOCUMENT.md: -------------------------------------------------------------------------------- 1 | # Dev the Document 2 | 3 | ## Start 4 | 5 | ```bash 6 | pnpm install 7 | pnpm docs:dev 8 | ``` 9 | -------------------------------------------------------------------------------- /algolia.json: -------------------------------------------------------------------------------- 1 | { 2 | "index_name": "vue-hooks-plus-search", 3 | "start_urls": ["https://inhiblabcore.github.io/vue-hooks-plus"], 4 | "rateLimit": 8, 5 | "maxDepth": 10, 6 | "selectors": { 7 | "lvl0": { 8 | "selector": "", 9 | "defaultValue": "Documentation" 10 | }, 11 | "lvl1": ".content h1", 12 | "lvl2": ".content h2", 13 | "lvl3": ".content h3", 14 | "lvl4": ".content h4", 15 | "lvl5": ".content h5", 16 | "content": ".content p, .content li", 17 | "lang": { 18 | "selector": "/html/@lang", 19 | "type": "xpath", 20 | "global": true, 21 | "default_value": "zh-CN" 22 | } 23 | }, 24 | "custom_settings": { 25 | "attributesForFaceting": ["lang"] 26 | } 27 | } -------------------------------------------------------------------------------- /docs/.vitepress/config/utils.ts: -------------------------------------------------------------------------------- 1 | import { baseParse, ElementNode, AttributeNode } from '@vue/compiler-core'; 2 | 3 | export function parseProps(content: string) { 4 | const ast = baseParse(content); 5 | const demoElement = ast.children[0] as ElementNode; 6 | 7 | // 添加props存在性检查 8 | if (!demoElement?.props || !Array.isArray(demoElement?.props)) { 9 | return {}; 10 | } 11 | 12 | const props = getPropsMap(demoElement.props as AttributeNode[]); 13 | return props; 14 | } 15 | 16 | function getPropsMap(attrs: AttributeNode[]) { 17 | const map: Record = {}; 18 | 19 | // 添加attrs可迭代检查 20 | if (!attrs || !Array.isArray(attrs)) { 21 | return map; 22 | } 23 | 24 | for (const { name, value } of attrs) { 25 | map[name] = value?.content; 26 | } 27 | return map; 28 | } -------------------------------------------------------------------------------- /docs/.vitepress/theme/index.ts: -------------------------------------------------------------------------------- 1 | import Theme from 'vitepress/theme' 2 | import 'virtual:group-icons.css' 3 | import './styles.css' 4 | import '@vue-hooks-plus/vitepress-demo-block/dist/style.css' 5 | import DemoBlock from '@vue-hooks-plus/vitepress-demo-block' 6 | import VhpButton from '../../components/button' 7 | 8 | import { useRequestDevToolsPlugin } from 'vue-hooks-plus' 9 | 10 | import { createPinia } from 'pinia' 11 | 12 | const store = createPinia() 13 | export default { 14 | ...Theme, 15 | enhanceApp({ app }) { 16 | app.use(store) 17 | app.use(useRequestDevToolsPlugin) 18 | app.component('demo', DemoBlock) 19 | app.component('vhp-button', VhpButton) 20 | }, 21 | } -------------------------------------------------------------------------------- /docs/components/button/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '../utils/vue/install' 2 | 3 | import Button from './button.vue' 4 | 5 | export const VhpButton = withInstall(Button) 6 | export default VhpButton 7 | -------------------------------------------------------------------------------- /docs/components/utils/vue/index.ts: -------------------------------------------------------------------------------- 1 | export * from './install' 2 | -------------------------------------------------------------------------------- /docs/components/utils/vue/install.ts: -------------------------------------------------------------------------------- 1 | import type { SFCWithInstall } from './typescript' 2 | 3 | export const withInstall = >( 4 | main: T, 5 | extra?: E 6 | ) => { 7 | ; (main as SFCWithInstall).install = (app: any): void => { 8 | for (const comp of [main, ...Object.values(extra ?? {})]) { 9 | app.component(comp.name, comp) 10 | } 11 | } 12 | 13 | if (extra) { 14 | for (const [key, comp] of Object.entries(extra)) { 15 | ; (main as any)[key] = comp 16 | } 17 | } 18 | return main as SFCWithInstall & E 19 | } 20 | -------------------------------------------------------------------------------- /docs/components/utils/vue/typescript.ts: -------------------------------------------------------------------------------- 1 | import type { AppContext, Plugin } from 'vue' 2 | 3 | export type SFCWithInstall = T & Plugin 4 | 5 | export type SFCInstallWithContext = SFCWithInstall & { 6 | _context: AppContext | null 7 | } 8 | -------------------------------------------------------------------------------- /docs/demo/request-debounce/demo.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 30 | -------------------------------------------------------------------------------- /docs/demo/request-loadingDelay/demo.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 28 | -------------------------------------------------------------------------------- /docs/demo/request-ready/demo.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 23 | -------------------------------------------------------------------------------- /docs/demo/request-refreshOnWindowFocus/demo.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 25 | -------------------------------------------------------------------------------- /docs/demo/request-retry/demo.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 29 | -------------------------------------------------------------------------------- /docs/demo/request-throttle/demo.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 36 | -------------------------------------------------------------------------------- /docs/demo/swr-cache/ShareDemo.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 22 | -------------------------------------------------------------------------------- /docs/demo/swr-cache/demo.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 28 | -------------------------------------------------------------------------------- /docs/demo/swr-cache/demo1.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 29 | -------------------------------------------------------------------------------- /docs/demo/swr-cache/demo2.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 35 | 36 | 39 | -------------------------------------------------------------------------------- /docs/demo/swr-cache/demo4.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 37 | -------------------------------------------------------------------------------- /docs/demo/useBoolean/demo.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 19 | -------------------------------------------------------------------------------- /docs/demo/useCookieState/demo.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 20 | -------------------------------------------------------------------------------- /docs/demo/useCookieState/demo1.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 21 | -------------------------------------------------------------------------------- /docs/demo/useCounter/demo.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 25 | -------------------------------------------------------------------------------- /docs/demo/useDarkMode/demo.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 36 | -------------------------------------------------------------------------------- /docs/demo/useDebounce/demo.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 16 | -------------------------------------------------------------------------------- /docs/demo/useDebounceFn/demo.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 25 | -------------------------------------------------------------------------------- /docs/demo/useDrop-useDrag/DragDemo.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 30 | -------------------------------------------------------------------------------- /docs/demo/useElementBounding/demo.vue: -------------------------------------------------------------------------------- 1 |