diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index 4084d922c4..2d882158ea 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -3,11 +3,21 @@
"Component": true,
"ComponentPublicInstance": true,
"ComputedRef": true,
+ "DirectiveBinding": true,
"EffectScope": true,
+ "ExtractDefaultPropTypes": true,
+ "ExtractPropTypes": true,
+ "ExtractPublicPropTypes": true,
"InjectionKey": true,
+ "MaybeRef": true,
+ "MaybeRefOrGetter": true,
"PropType": true,
"Ref": true,
+ "ShallowRef": true,
+ "Slot": true,
+ "Slots": true,
"VNode": true,
+ "WritableComputedRef": true,
"asyncComputed": true,
"autoResetRef": true,
"computed": true,
@@ -18,10 +28,12 @@
"controlledComputed": true,
"controlledRef": true,
"createApp": true,
+ "createDisposableDirective": true,
"createEventHook": true,
"createGlobalState": true,
"createInjectionState": true,
"createReactiveFn": true,
+ "createRef": true,
"createReusableTemplate": true,
"createSharedComposable": true,
"createTemplatePromise": true,
@@ -36,14 +48,17 @@
"extendRef": true,
"getCurrentInstance": true,
"getCurrentScope": true,
+ "getCurrentWatcher": true,
"h": true,
"ignorableWatch": true,
"inject": true,
+ "injectLocal": true,
"isDefined": true,
"isProxy": true,
"isReactive": true,
"isReadonly": true,
"isRef": true,
+ "isShallow": true,
"makeDestructurable": true,
"markRaw": true,
"nextTick": true,
@@ -55,6 +70,7 @@
"onBeforeUpdate": true,
"onClickOutside": true,
"onDeactivated": true,
+ "onElementRemoval": true,
"onErrorCaptured": true,
"onKeyStroke": true,
"onLongPress": true,
@@ -66,8 +82,10 @@
"onStartTyping": true,
"onUnmounted": true,
"onUpdated": true,
+ "onWatcherCleanup": true,
"pausableWatch": true,
"provide": true,
+ "provideLocal": true,
"reactify": true,
"reactifyObject": true,
"reactive": true,
@@ -79,11 +97,10 @@
"refAutoReset": true,
"refDebounced": true,
"refDefault": true,
+ "refManualReset": true,
"refThrottled": true,
"refWithControl": true,
"resolveComponent": true,
- "resolveRef": true,
- "resolveUnref": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,
@@ -96,6 +113,7 @@
"toReactive": true,
"toRef": true,
"toRefs": true,
+ "toValue": true,
"triggerRef": true,
"tryOnBeforeMount": true,
"tryOnBeforeUnmount": true,
@@ -130,11 +148,14 @@
"useBrowserLocation": true,
"useCached": true,
"useClipboard": true,
+ "useClipboardItems": true,
"useCloned": true,
"useColorMode": true,
"useConfirmDialog": true,
+ "useCountdown": true,
"useCounter": true,
"useCssModule": true,
+ "useCssSupports": true,
"useCssVar": true,
"useCssVars": true,
"useCurrentElement": true,
@@ -173,6 +194,7 @@
"useGamepad": true,
"useGeolocation": true,
"useI18n": true,
+ "useId": true,
"useIdle": true,
"useImage": true,
"useInfiniteScroll": true,
@@ -191,6 +213,7 @@
"useMemoize": true,
"useMemory": true,
"useMessage": true,
+ "useModel": true,
"useMounted": true,
"useMouse": true,
"useMouseInElement": true,
@@ -216,12 +239,14 @@
"usePreferredDark": true,
"usePreferredLanguages": true,
"usePreferredReducedMotion": true,
+ "usePreferredReducedTransparency": true,
"usePrevious": true,
"useRafFn": true,
"useRefHistory": true,
"useResizeObserver": true,
"useRoute": true,
"useRouter": true,
+ "useSSRWidth": true,
"useScreenOrientation": true,
"useScreenSafeArea": true,
"useScriptTag": true,
@@ -239,6 +264,7 @@
"useStyleTag": true,
"useSupported": true,
"useSwipe": true,
+ "useTemplateRef": true,
"useTemplateRefsList": true,
"useTextDirection": true,
"useTextSelection": true,
@@ -247,6 +273,7 @@
"useThrottleFn": true,
"useThrottledRefHistory": true,
"useTimeAgo": true,
+ "useTimeAgoIntl": true,
"useTimeout": true,
"useTimeoutFn": true,
"useTimeoutPoll": true,
@@ -285,7 +312,6 @@
"watchThrottled": true,
"watchTriggerable": true,
"watchWithFilter": true,
- "whenever": true,
- "toValue": true
+ "whenever": true
}
}
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
deleted file mode 100644
index 37a67b3492..0000000000
--- a/.eslintrc.cjs
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * @type {import('eslint').Linter.Config}
- */
-module.exports = {
- root: true,
- extends: ['@antfu', './.eslintrc-auto-import.json', '@unocss'],
-
- rules: {
- 'curly': ['error', 'all'],
- '@typescript-eslint/semi': ['error', 'always'],
- '@typescript-eslint/no-use-before-define': ['error', { allowNamedExports: true, functions: false }],
- 'vue/no-empty-component-block': ['error'],
- 'no-restricted-imports': ['error', {
- paths: [{
- name: '@vueuse/core',
- importNames: ['useClipboard'],
- message: 'Please use local useCopy from src/composable/copy.ts instead of useClipboard.',
- }],
- }],
- },
-};
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..b675058df5
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,22 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+
+version: 2
+updates:
+ # Enable version updates for npm
+ - package-ecosystem: "npm"
+ # Look for `package.json` and `lock` files in the `root` directory
+ directory: "/"
+ # Check the npm registry for updates every day (weekdays)
+ schedule:
+ interval: "daily"
+
+ # Enable version updates for Docker
+ - package-ecosystem: "docker"
+ # Look for a `Dockerfile` in the `root` directory
+ directory: "/"
+ # Check for updates once a week
+ schedule:
+ interval: "weekly"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4dd9ffb7ce..a9e10aa52f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -13,9 +13,9 @@ jobs:
steps:
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
- run: corepack enable
- - uses: actions/setup-node@v3
+ - uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 24
cache: 'pnpm'
- name: Install dependencies
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
new file mode 100644
index 0000000000..215f79994d
--- /dev/null
+++ b/.github/workflows/codeql.yml
@@ -0,0 +1,101 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL Advanced"
+
+on:
+ push:
+ branches: [ "main" ]
+ pull_request:
+ branches: [ "main" ]
+ schedule:
+ - cron: '19 8 * * 6'
+
+jobs:
+ analyze:
+ name: Analyze (${{ matrix.language }})
+ # Runner size impacts CodeQL analysis time. To learn more, please see:
+ # - https://gh.io/recommended-hardware-resources-for-running-codeql
+ # - https://gh.io/supported-runners-and-hardware-resources
+ # - https://gh.io/using-larger-runners (GitHub.com only)
+ # Consider using larger runners or machines with greater resources for possible analysis time improvements.
+ runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
+ permissions:
+ # required for all workflows
+ security-events: write
+
+ # required to fetch internal or private CodeQL packs
+ packages: read
+
+ # only required for workflows in private repositories
+ actions: read
+ contents: read
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - language: actions
+ build-mode: none
+ - language: javascript-typescript
+ build-mode: none
+ # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
+ # Use `c-cpp` to analyze code written in C, C++ or both
+ # Use 'java-kotlin' to analyze code written in Java, Kotlin or both
+ # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
+ # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
+ # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
+ # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
+ # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ # Add any setup steps before running the `github/codeql-action/init` action.
+ # This includes steps like installing compilers or runtimes (`actions/setup-node`
+ # or others). This is typically only required for manual builds.
+ # - name: Setup runtime (example)
+ # uses: actions/setup-example@v1
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v4
+ with:
+ languages: ${{ matrix.language }}
+ build-mode: ${{ matrix.build-mode }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+
+ # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+ # queries: security-extended,security-and-quality
+
+ # If the analyze step fails for one of the languages you are analyzing with
+ # "We were unable to automatically build your code", modify the matrix above
+ # to set the build mode to "manual" for that language. Then modify this step
+ # to build your code.
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+ - name: Run manual build steps
+ if: matrix.build-mode == 'manual'
+ shell: bash
+ run: |
+ echo 'If you are using a "manual" build mode for one or more of the' \
+ 'languages you are analyzing, replace this with the commands to build' \
+ 'your code, for example:'
+ echo ' make bootstrap'
+ echo ' make release'
+ exit 1
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v4
+ with:
+ category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/docker-nightly-release.yml b/.github/workflows/docker-nightly-release.yml
index 41dbb155e9..adb30dded5 100644
--- a/.github/workflows/docker-nightly-release.yml
+++ b/.github/workflows/docker-nightly-release.yml
@@ -5,6 +5,10 @@ on:
schedule:
- cron: '0 0 * * *'
+permissions:
+ contents: read
+ packages: write
+
jobs:
check_date:
runs-on: ubuntu-latest
@@ -30,9 +34,9 @@ jobs:
steps:
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
- run: corepack enable
- - uses: actions/setup-node@v3
+ - uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 24
cache: 'pnpm'
- name: Install dependencies
@@ -76,12 +80,14 @@ jobs:
uses: docker/setup-buildx-action@v3
- name: Build and push
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: true
+ build-args: |
+ VITE_VERCEL_GIT_COMMIT_SHA=${{ github.sha }}
tags: |
- corentinth/it-tools:nightly
- ghcr.io/corentinth/it-tools:nightly
+ shahboura/it-tools:nightly
+ ghcr.io/shahboura/it-tools:nightly
diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml
index 13b787ef46..e6c3a68449 100644
--- a/.github/workflows/e2e-tests.yml
+++ b/.github/workflows/e2e-tests.yml
@@ -16,14 +16,14 @@ jobs:
- run: corepack enable
- - uses: actions/setup-node@v3
+ - uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 24
cache: 'pnpm'
- name: Get Playwright version
id: playwright-version
- run: echo "PLAYWRIGHT_VERSION=$(jq -r .dependencies.playwright package.json)" >> "$GITHUB_OUTPUT"
+ run: echo "PLAYWRIGHT_VERSION=$(jq -r '.devDependencies[\"@playwright/test\"]' package.json)" >> "$GITHUB_OUTPUT"
- name: Install dependencies
run: pnpm install
@@ -32,7 +32,7 @@ jobs:
run: pnpm build
- name: Restore Playwright browsers from cache
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.PLAYWRIGHT_VERSION }}-${{ hashFiles('**/playwright.config.ts') }}
diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml
index d0d3febd7d..809195772c 100644
--- a/.github/workflows/releases.yml
+++ b/.github/workflows/releases.yml
@@ -5,6 +5,10 @@ on:
tags:
- 'v*.*.*'
+permissions:
+ contents: write
+ packages: write
+
jobs:
docker-release:
runs-on: ubuntu-latest
@@ -35,17 +39,20 @@ jobs:
uses: docker/setup-buildx-action@v3
- name: Build and push
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: true
+ build-args: |
+ VITE_VERCEL_GIT_COMMIT_SHA=${{ github.sha }}
+ VITE_RELEASE_TAG=v${{ env.RELEASE_VERSION }}
tags: |
- corentinth/it-tools:latest
- corentinth/it-tools:${{ env.RELEASE_VERSION }}
- ghcr.io/corentinth/it-tools:latest
- ghcr.io/corentinth/it-tools:${{ env.RELEASE_VERSION}}
+ shahboura/it-tools:latest
+ shahboura/it-tools:${{ env.RELEASE_VERSION }}
+ ghcr.io/shahboura/it-tools:latest
+ ghcr.io/shahboura/it-tools:${{ env.RELEASE_VERSION}}
github-release:
runs-on: ubuntu-latest
@@ -59,9 +66,9 @@ jobs:
- run: corepack enable
- - uses: actions/setup-node@v3
+ - uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 24
cache: 'pnpm'
- name: Install dependencies
@@ -69,6 +76,8 @@ jobs:
- name: Build the app
run: pnpm build
+ env:
+ VITE_RELEASE_TAG: v${{ env.RELEASE_VERSION }}
- name: Zip the app
run: zip -r it-tools-${{ env.RELEASE_VERSION }}.zip dist/*
@@ -81,8 +90,13 @@ jobs:
node ./scripts/getLatestChangelog.mjs >> $GITHUB_OUTPUT
echo "$EOF" >> $GITHUB_OUTPUT
+ - name: Delete existing draft release
+ run: gh release delete "v${{ env.RELEASE_VERSION }}" --yes || true
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
- name: Create Release
- uses: softprops/action-gh-release@v1
+ uses: softprops/action-gh-release@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
files: it-tools-${{ env.RELEASE_VERSION }}.zip
@@ -93,11 +107,11 @@ jobs:
## Docker images
- Docker Hub
- - `corentinth/it-tools:latest`
- - `corentinth/it-tools:${{ env.RELEASE_VERSION }}`
+ - `shahboura/it-tools:latest`
+ - `shahboura/it-tools:${{ env.RELEASE_VERSION }}`
- GitHub Container Registry
- - `ghcr.io/corentinth/it-tools:latest`
- - `ghcr.io/corentinth/it-tools:${{ env.RELEASE_VERSION}}`
+ - `ghcr.io/shahboura/it-tools:latest`
+ - `ghcr.io/shahboura/it-tools:${{ env.RELEASE_VERSION}}`
## Changelog
diff --git a/.gitignore b/.gitignore
index a3bbd94386..a80f1ef035 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,4 +32,7 @@ coverage
/playwright-report/
/playwright/.cache/
# Webkit with playwright creates a salt file
-salt
\ No newline at end of file
+salt
+
+# Auto-generated by unplugin-vue-components (may have TS6 compat issues)
+components.d.ts
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 734bd73d35..1c6384182e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,17 +1,22 @@
# build stage
-FROM node:lts-alpine AS build-stage
+# Pin to builder's native platform to avoid QEMU emulation for Vite/Rolldown (Rust native binaries)
+FROM --platform=$BUILDPLATFORM node:lts-alpine AS build-stage
# Set environment variables for non-interactive npm installs
-ENV NPM_CONFIG_LOGLEVEL warn
-ENV CI true
+ENV NPM_CONFIG_LOGLEVEL=warn
+ENV CI=true
+ARG VITE_VERCEL_GIT_COMMIT_SHA
+ENV VITE_VERCEL_GIT_COMMIT_SHA=$VITE_VERCEL_GIT_COMMIT_SHA
+ARG VITE_RELEASE_TAG
+ENV VITE_RELEASE_TAG=$VITE_RELEASE_TAG
WORKDIR /app
-COPY package.json pnpm-lock.yaml ./
-RUN npm install -g pnpm && pnpm i --frozen-lockfile
+COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
+RUN corepack enable && pnpm i --frozen-lockfile
COPY . .
RUN pnpm build
# production stage
-FROM nginx:stable-alpine AS production-stage
+FROM nginx:stable-alpine-slim AS production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
-EXPOSE 80
+EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
diff --git a/README.md b/README.md
index 72cbbd8d93..d371b5f028 100644
--- a/README.md
+++ b/README.md
@@ -10,9 +10,9 @@ Useful tools for developer and people working in IT.
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index 186963f1d9..0e20c11e83 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -1,298 +1,321 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
+// noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import
+// biome-ignore lint: disable
export {}
declare global {
- const EffectScope: typeof import('vue')['EffectScope']
- const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
- const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
- const computed: typeof import('vue')['computed']
- const computedAsync: typeof import('@vueuse/core')['computedAsync']
- const computedEager: typeof import('@vueuse/core')['computedEager']
- const computedInject: typeof import('@vueuse/core')['computedInject']
- const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
- const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
- const controlledRef: typeof import('@vueuse/core')['controlledRef']
- const createApp: typeof import('vue')['createApp']
- const createEventHook: typeof import('@vueuse/core')['createEventHook']
- const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
- const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
- const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
- const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate']
- const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
- const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise']
- const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
- const customRef: typeof import('vue')['customRef']
- const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
- const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
- const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
- const defineComponent: typeof import('vue')['defineComponent']
- const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
- const effectScope: typeof import('vue')['effectScope']
- const extendRef: typeof import('@vueuse/core')['extendRef']
- const getCurrentInstance: typeof import('vue')['getCurrentInstance']
- const getCurrentScope: typeof import('vue')['getCurrentScope']
- const h: typeof import('vue')['h']
- const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
- const inject: typeof import('vue')['inject']
- const isDefined: typeof import('@vueuse/core')['isDefined']
- const isProxy: typeof import('vue')['isProxy']
- const isReactive: typeof import('vue')['isReactive']
- const isReadonly: typeof import('vue')['isReadonly']
- const isRef: typeof import('vue')['isRef']
- const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
- const markRaw: typeof import('vue')['markRaw']
- const nextTick: typeof import('vue')['nextTick']
- const onActivated: typeof import('vue')['onActivated']
- const onBeforeMount: typeof import('vue')['onBeforeMount']
- const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
- const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
- const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
- const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
- const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
- const onDeactivated: typeof import('vue')['onDeactivated']
- const onErrorCaptured: typeof import('vue')['onErrorCaptured']
- const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
- const onLongPress: typeof import('@vueuse/core')['onLongPress']
- const onMounted: typeof import('vue')['onMounted']
- const onRenderTracked: typeof import('vue')['onRenderTracked']
- const onRenderTriggered: typeof import('vue')['onRenderTriggered']
- const onScopeDispose: typeof import('vue')['onScopeDispose']
- const onServerPrefetch: typeof import('vue')['onServerPrefetch']
- const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
- const onUnmounted: typeof import('vue')['onUnmounted']
- const onUpdated: typeof import('vue')['onUpdated']
- const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
- const provide: typeof import('vue')['provide']
- const reactify: typeof import('@vueuse/core')['reactify']
- const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
- const reactive: typeof import('vue')['reactive']
- const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
- const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
- const reactivePick: typeof import('@vueuse/core')['reactivePick']
- const readonly: typeof import('vue')['readonly']
- const ref: typeof import('vue')['ref']
- const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
- const refDebounced: typeof import('@vueuse/core')['refDebounced']
- const refDefault: typeof import('@vueuse/core')['refDefault']
- const refThrottled: typeof import('@vueuse/core')['refThrottled']
- const refWithControl: typeof import('@vueuse/core')['refWithControl']
- const resolveComponent: typeof import('vue')['resolveComponent']
+ const EffectScope: typeof import('vue').EffectScope
+ const asyncComputed: typeof import('@vueuse/core').asyncComputed
+ const autoResetRef: typeof import('@vueuse/core').autoResetRef
+ const computed: typeof import('vue').computed
+ const computedAsync: typeof import('@vueuse/core').computedAsync
+ const computedEager: typeof import('@vueuse/core').computedEager
+ const computedInject: typeof import('@vueuse/core').computedInject
+ const computedWithControl: typeof import('@vueuse/core').computedWithControl
+ const controlledComputed: typeof import('@vueuse/core').controlledComputed
+ const controlledRef: typeof import('@vueuse/core').controlledRef
+ const createApp: typeof import('vue').createApp
+ const createDisposableDirective: typeof import('@vueuse/core').createDisposableDirective
+ const createEventHook: typeof import('@vueuse/core').createEventHook
+ const createGlobalState: typeof import('@vueuse/core').createGlobalState
+ const createInjectionState: typeof import('@vueuse/core').createInjectionState
+ const createReactiveFn: typeof import('@vueuse/core').createReactiveFn
+ const createRef: typeof import('@vueuse/core').createRef
+ const createReusableTemplate: typeof import('@vueuse/core').createReusableTemplate
+ const createSharedComposable: typeof import('@vueuse/core').createSharedComposable
+ const createTemplatePromise: typeof import('@vueuse/core').createTemplatePromise
+ const createUnrefFn: typeof import('@vueuse/core').createUnrefFn
+ const customRef: typeof import('vue').customRef
+ const debouncedRef: typeof import('@vueuse/core').debouncedRef
+ const debouncedWatch: typeof import('@vueuse/core').debouncedWatch
+ const defineAsyncComponent: typeof import('vue').defineAsyncComponent
+ const defineComponent: typeof import('vue').defineComponent
+ const eagerComputed: typeof import('@vueuse/core').eagerComputed
+ const effectScope: typeof import('vue').effectScope
+ const extendRef: typeof import('@vueuse/core').extendRef
+ const getCurrentInstance: typeof import('vue').getCurrentInstance
+ const getCurrentScope: typeof import('vue').getCurrentScope
+ const getCurrentWatcher: typeof import('vue').getCurrentWatcher
+ const h: typeof import('vue').h
+ const ignorableWatch: typeof import('@vueuse/core').ignorableWatch
+ const inject: typeof import('vue').inject
+ const injectLocal: typeof import('@vueuse/core').injectLocal
+ const isDefined: typeof import('@vueuse/core').isDefined
+ const isProxy: typeof import('vue').isProxy
+ const isReactive: typeof import('vue').isReactive
+ const isReadonly: typeof import('vue').isReadonly
+ const isRef: typeof import('vue').isRef
+ const isShallow: typeof import('vue').isShallow
+ const makeDestructurable: typeof import('@vueuse/core').makeDestructurable
+ const markRaw: typeof import('vue').markRaw
+ const nextTick: typeof import('vue').nextTick
+ const onActivated: typeof import('vue').onActivated
+ const onBeforeMount: typeof import('vue').onBeforeMount
+ const onBeforeRouteLeave: typeof import('vue-router').onBeforeRouteLeave
+ const onBeforeRouteUpdate: typeof import('vue-router').onBeforeRouteUpdate
+ const onBeforeUnmount: typeof import('vue').onBeforeUnmount
+ const onBeforeUpdate: typeof import('vue').onBeforeUpdate
+ const onClickOutside: typeof import('@vueuse/core').onClickOutside
+ const onDeactivated: typeof import('vue').onDeactivated
+ const onElementRemoval: typeof import('@vueuse/core').onElementRemoval
+ const onErrorCaptured: typeof import('vue').onErrorCaptured
+ const onKeyStroke: typeof import('@vueuse/core').onKeyStroke
+ const onLongPress: typeof import('@vueuse/core').onLongPress
+ const onMounted: typeof import('vue').onMounted
+ const onRenderTracked: typeof import('vue').onRenderTracked
+ const onRenderTriggered: typeof import('vue').onRenderTriggered
+ const onScopeDispose: typeof import('vue').onScopeDispose
+ const onServerPrefetch: typeof import('vue').onServerPrefetch
+ const onStartTyping: typeof import('@vueuse/core').onStartTyping
+ const onUnmounted: typeof import('vue').onUnmounted
+ const onUpdated: typeof import('vue').onUpdated
+ const onWatcherCleanup: typeof import('vue').onWatcherCleanup
+ const pausableWatch: typeof import('@vueuse/core').pausableWatch
+ const provide: typeof import('vue').provide
+ const provideLocal: typeof import('@vueuse/core').provideLocal
+ const reactify: typeof import('@vueuse/core').reactify
+ const reactifyObject: typeof import('@vueuse/core').reactifyObject
+ const reactive: typeof import('vue').reactive
+ const reactiveComputed: typeof import('@vueuse/core').reactiveComputed
+ const reactiveOmit: typeof import('@vueuse/core').reactiveOmit
+ const reactivePick: typeof import('@vueuse/core').reactivePick
+ const readonly: typeof import('vue').readonly
+ const ref: typeof import('vue').ref
+ const refAutoReset: typeof import('@vueuse/core').refAutoReset
+ const refDebounced: typeof import('@vueuse/core').refDebounced
+ const refDefault: typeof import('@vueuse/core').refDefault
+ const refManualReset: typeof import('@vueuse/core').refManualReset
+ const refThrottled: typeof import('@vueuse/core').refThrottled
+ const refWithControl: typeof import('@vueuse/core').refWithControl
+ const resolveComponent: typeof import('vue').resolveComponent
const resolveRef: typeof import('@vueuse/core')['resolveRef']
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
- const shallowReactive: typeof import('vue')['shallowReactive']
- const shallowReadonly: typeof import('vue')['shallowReadonly']
- const shallowRef: typeof import('vue')['shallowRef']
- const syncRef: typeof import('@vueuse/core')['syncRef']
- const syncRefs: typeof import('@vueuse/core')['syncRefs']
- const templateRef: typeof import('@vueuse/core')['templateRef']
- const throttledRef: typeof import('@vueuse/core')['throttledRef']
- const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
- const toRaw: typeof import('vue')['toRaw']
- const toReactive: typeof import('@vueuse/core')['toReactive']
- const toRef: typeof import('vue')['toRef']
- const toRefs: typeof import('vue')['toRefs']
- const toValue: typeof import('vue')['toValue']
- const triggerRef: typeof import('vue')['triggerRef']
- const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
- const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
- const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
- const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
- const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
- const unref: typeof import('vue')['unref']
- const unrefElement: typeof import('@vueuse/core')['unrefElement']
- const until: typeof import('@vueuse/core')['until']
- const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
- const useAnimate: typeof import('@vueuse/core')['useAnimate']
- const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference']
- const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
- const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
- const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
- const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
- const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
- const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes']
- const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
- const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
- const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
- const useArraySome: typeof import('@vueuse/core')['useArraySome']
- const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
- const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
- const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
- const useAttrs: typeof import('vue')['useAttrs']
- const useBase64: typeof import('@vueuse/core')['useBase64']
- const useBattery: typeof import('@vueuse/core')['useBattery']
- const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
- const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
- const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
- const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
- const useCached: typeof import('@vueuse/core')['useCached']
- const useClipboard: typeof import('@vueuse/core')['useClipboard']
- const useCloned: typeof import('@vueuse/core')['useCloned']
- const useColorMode: typeof import('@vueuse/core')['useColorMode']
- const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
- const useCounter: typeof import('@vueuse/core')['useCounter']
- const useCssModule: typeof import('vue')['useCssModule']
- const useCssVar: typeof import('@vueuse/core')['useCssVar']
- const useCssVars: typeof import('vue')['useCssVars']
- const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
- const useCycleList: typeof import('@vueuse/core')['useCycleList']
- const useDark: typeof import('@vueuse/core')['useDark']
- const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
- const useDebounce: typeof import('@vueuse/core')['useDebounce']
- const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
- const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
- const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
- const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
- const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
- const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
- const useDialog: typeof import('naive-ui')['useDialog']
- const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
- const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
- const useDraggable: typeof import('@vueuse/core')['useDraggable']
- const useDropZone: typeof import('@vueuse/core')['useDropZone']
- const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
- const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
- const useElementHover: typeof import('@vueuse/core')['useElementHover']
- const useElementSize: typeof import('@vueuse/core')['useElementSize']
- const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
- const useEventBus: typeof import('@vueuse/core')['useEventBus']
- const useEventListener: typeof import('@vueuse/core')['useEventListener']
- const useEventSource: typeof import('@vueuse/core')['useEventSource']
- const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
- const useFavicon: typeof import('@vueuse/core')['useFavicon']
- const useFetch: typeof import('@vueuse/core')['useFetch']
- const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
- const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
- const useFocus: typeof import('@vueuse/core')['useFocus']
- const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
- const useFps: typeof import('@vueuse/core')['useFps']
- const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
- const useGamepad: typeof import('@vueuse/core')['useGamepad']
- const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
- const useI18n: typeof import('vue-i18n')['useI18n']
- const useIdle: typeof import('@vueuse/core')['useIdle']
- const useImage: typeof import('@vueuse/core')['useImage']
- const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
- const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
- const useInterval: typeof import('@vueuse/core')['useInterval']
- const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
- const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
- const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
- const useLink: typeof import('vue-router')['useLink']
- const useLoadingBar: typeof import('naive-ui')['useLoadingBar']
- const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
- const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
- const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
- const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
- const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
- const useMemoize: typeof import('@vueuse/core')['useMemoize']
- const useMemory: typeof import('@vueuse/core')['useMemory']
- const useMessage: typeof import('naive-ui')['useMessage']
- const useMounted: typeof import('@vueuse/core')['useMounted']
- const useMouse: typeof import('@vueuse/core')['useMouse']
- const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
- const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
- const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
- const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
- const useNetwork: typeof import('@vueuse/core')['useNetwork']
- const useNotification: typeof import('naive-ui')['useNotification']
- const useNow: typeof import('@vueuse/core')['useNow']
- const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
- const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
- const useOnline: typeof import('@vueuse/core')['useOnline']
- const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
- const useParallax: typeof import('@vueuse/core')['useParallax']
- const useParentElement: typeof import('@vueuse/core')['useParentElement']
- const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver']
- const usePermission: typeof import('@vueuse/core')['usePermission']
- const usePointer: typeof import('@vueuse/core')['usePointer']
- const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
- const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
- const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
- const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
- const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
- const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
- const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
- const usePrevious: typeof import('@vueuse/core')['usePrevious']
- const useRafFn: typeof import('@vueuse/core')['useRafFn']
- const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
- const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
- const useRoute: typeof import('vue-router')['useRoute']
- const useRouter: typeof import('vue-router')['useRouter']
- const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
- const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
- const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
- const useScroll: typeof import('@vueuse/core')['useScroll']
- const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
- const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
- const useShare: typeof import('@vueuse/core')['useShare']
- const useSlots: typeof import('vue')['useSlots']
- const useSorted: typeof import('@vueuse/core')['useSorted']
- const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
- const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
- const useStepper: typeof import('@vueuse/core')['useStepper']
- const useStorage: typeof import('@vueuse/core')['useStorage']
- const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
- const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
- const useSupported: typeof import('@vueuse/core')['useSupported']
- const useSwipe: typeof import('@vueuse/core')['useSwipe']
- const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
- const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
- const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
- const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
- const useThrottle: typeof import('@vueuse/core')['useThrottle']
- const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
- const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
- const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
- const useTimeout: typeof import('@vueuse/core')['useTimeout']
- const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
- const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
- const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
- const useTitle: typeof import('@vueuse/core')['useTitle']
- const useToNumber: typeof import('@vueuse/core')['useToNumber']
- const useToString: typeof import('@vueuse/core')['useToString']
- const useToggle: typeof import('@vueuse/core')['useToggle']
- const useTransition: typeof import('@vueuse/core')['useTransition']
- const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
- const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
- const useVModel: typeof import('@vueuse/core')['useVModel']
- const useVModels: typeof import('@vueuse/core')['useVModels']
- const useVibrate: typeof import('@vueuse/core')['useVibrate']
- const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
- const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
- const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
- const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
- const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
- const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
- const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
- const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
- const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
- const watch: typeof import('vue')['watch']
- const watchArray: typeof import('@vueuse/core')['watchArray']
- const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
- const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
- const watchDeep: typeof import('@vueuse/core')['watchDeep']
- const watchEffect: typeof import('vue')['watchEffect']
- const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
- const watchImmediate: typeof import('@vueuse/core')['watchImmediate']
- const watchOnce: typeof import('@vueuse/core')['watchOnce']
- const watchPausable: typeof import('@vueuse/core')['watchPausable']
- const watchPostEffect: typeof import('vue')['watchPostEffect']
- const watchSyncEffect: typeof import('vue')['watchSyncEffect']
- const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
- const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
- const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
- const whenever: typeof import('@vueuse/core')['whenever']
+ const shallowReactive: typeof import('vue').shallowReactive
+ const shallowReadonly: typeof import('vue').shallowReadonly
+ const shallowRef: typeof import('vue').shallowRef
+ const syncRef: typeof import('@vueuse/core').syncRef
+ const syncRefs: typeof import('@vueuse/core').syncRefs
+ const templateRef: typeof import('@vueuse/core').templateRef
+ const throttledRef: typeof import('@vueuse/core').throttledRef
+ const throttledWatch: typeof import('@vueuse/core').throttledWatch
+ const toRaw: typeof import('vue').toRaw
+ const toReactive: typeof import('@vueuse/core').toReactive
+ const toRef: typeof import('vue').toRef
+ const toRefs: typeof import('vue').toRefs
+ const toValue: typeof import('vue').toValue
+ const triggerRef: typeof import('vue').triggerRef
+ const tryOnBeforeMount: typeof import('@vueuse/core').tryOnBeforeMount
+ const tryOnBeforeUnmount: typeof import('@vueuse/core').tryOnBeforeUnmount
+ const tryOnMounted: typeof import('@vueuse/core').tryOnMounted
+ const tryOnScopeDispose: typeof import('@vueuse/core').tryOnScopeDispose
+ const tryOnUnmounted: typeof import('@vueuse/core').tryOnUnmounted
+ const unref: typeof import('vue').unref
+ const unrefElement: typeof import('@vueuse/core').unrefElement
+ const until: typeof import('@vueuse/core').until
+ const useActiveElement: typeof import('@vueuse/core').useActiveElement
+ const useAnimate: typeof import('@vueuse/core').useAnimate
+ const useArrayDifference: typeof import('@vueuse/core').useArrayDifference
+ const useArrayEvery: typeof import('@vueuse/core').useArrayEvery
+ const useArrayFilter: typeof import('@vueuse/core').useArrayFilter
+ const useArrayFind: typeof import('@vueuse/core').useArrayFind
+ const useArrayFindIndex: typeof import('@vueuse/core').useArrayFindIndex
+ const useArrayFindLast: typeof import('@vueuse/core').useArrayFindLast
+ const useArrayIncludes: typeof import('@vueuse/core').useArrayIncludes
+ const useArrayJoin: typeof import('@vueuse/core').useArrayJoin
+ const useArrayMap: typeof import('@vueuse/core').useArrayMap
+ const useArrayReduce: typeof import('@vueuse/core').useArrayReduce
+ const useArraySome: typeof import('@vueuse/core').useArraySome
+ const useArrayUnique: typeof import('@vueuse/core').useArrayUnique
+ const useAsyncQueue: typeof import('@vueuse/core').useAsyncQueue
+ const useAsyncState: typeof import('@vueuse/core').useAsyncState
+ const useAttrs: typeof import('vue').useAttrs
+ const useBase64: typeof import('@vueuse/core').useBase64
+ const useBattery: typeof import('@vueuse/core').useBattery
+ const useBluetooth: typeof import('@vueuse/core').useBluetooth
+ const useBreakpoints: typeof import('@vueuse/core').useBreakpoints
+ const useBroadcastChannel: typeof import('@vueuse/core').useBroadcastChannel
+ const useBrowserLocation: typeof import('@vueuse/core').useBrowserLocation
+ const useCached: typeof import('@vueuse/core').useCached
+ const useClipboard: typeof import('@vueuse/core').useClipboard
+ const useClipboardItems: typeof import('@vueuse/core').useClipboardItems
+ const useCloned: typeof import('@vueuse/core').useCloned
+ const useColorMode: typeof import('@vueuse/core').useColorMode
+ const useConfirmDialog: typeof import('@vueuse/core').useConfirmDialog
+ const useCountdown: typeof import('@vueuse/core').useCountdown
+ const useCounter: typeof import('@vueuse/core').useCounter
+ const useCssModule: typeof import('vue').useCssModule
+ const useCssSupports: typeof import('@vueuse/core').useCssSupports
+ const useCssVar: typeof import('@vueuse/core').useCssVar
+ const useCssVars: typeof import('vue').useCssVars
+ const useCurrentElement: typeof import('@vueuse/core').useCurrentElement
+ const useCycleList: typeof import('@vueuse/core').useCycleList
+ const useDark: typeof import('@vueuse/core').useDark
+ const useDateFormat: typeof import('@vueuse/core').useDateFormat
+ const useDebounce: typeof import('@vueuse/core').useDebounce
+ const useDebounceFn: typeof import('@vueuse/core').useDebounceFn
+ const useDebouncedRefHistory: typeof import('@vueuse/core').useDebouncedRefHistory
+ const useDeviceMotion: typeof import('@vueuse/core').useDeviceMotion
+ const useDeviceOrientation: typeof import('@vueuse/core').useDeviceOrientation
+ const useDevicePixelRatio: typeof import('@vueuse/core').useDevicePixelRatio
+ const useDevicesList: typeof import('@vueuse/core').useDevicesList
+ const useDialog: typeof import('naive-ui').useDialog
+ const useDisplayMedia: typeof import('@vueuse/core').useDisplayMedia
+ const useDocumentVisibility: typeof import('@vueuse/core').useDocumentVisibility
+ const useDraggable: typeof import('@vueuse/core').useDraggable
+ const useDropZone: typeof import('@vueuse/core').useDropZone
+ const useElementBounding: typeof import('@vueuse/core').useElementBounding
+ const useElementByPoint: typeof import('@vueuse/core').useElementByPoint
+ const useElementHover: typeof import('@vueuse/core').useElementHover
+ const useElementSize: typeof import('@vueuse/core').useElementSize
+ const useElementVisibility: typeof import('@vueuse/core').useElementVisibility
+ const useEventBus: typeof import('@vueuse/core').useEventBus
+ const useEventListener: typeof import('@vueuse/core').useEventListener
+ const useEventSource: typeof import('@vueuse/core').useEventSource
+ const useEyeDropper: typeof import('@vueuse/core').useEyeDropper
+ const useFavicon: typeof import('@vueuse/core').useFavicon
+ const useFetch: typeof import('@vueuse/core').useFetch
+ const useFileDialog: typeof import('@vueuse/core').useFileDialog
+ const useFileSystemAccess: typeof import('@vueuse/core').useFileSystemAccess
+ const useFocus: typeof import('@vueuse/core').useFocus
+ const useFocusWithin: typeof import('@vueuse/core').useFocusWithin
+ const useFps: typeof import('@vueuse/core').useFps
+ const useFullscreen: typeof import('@vueuse/core').useFullscreen
+ const useGamepad: typeof import('@vueuse/core').useGamepad
+ const useGeolocation: typeof import('@vueuse/core').useGeolocation
+ const useI18n: typeof import('vue-i18n').useI18n
+ const useId: typeof import('vue').useId
+ const useIdle: typeof import('@vueuse/core').useIdle
+ const useImage: typeof import('@vueuse/core').useImage
+ const useInfiniteScroll: typeof import('@vueuse/core').useInfiniteScroll
+ const useIntersectionObserver: typeof import('@vueuse/core').useIntersectionObserver
+ const useInterval: typeof import('@vueuse/core').useInterval
+ const useIntervalFn: typeof import('@vueuse/core').useIntervalFn
+ const useKeyModifier: typeof import('@vueuse/core').useKeyModifier
+ const useLastChanged: typeof import('@vueuse/core').useLastChanged
+ const useLink: typeof import('vue-router').useLink
+ const useLoadingBar: typeof import('naive-ui').useLoadingBar
+ const useLocalStorage: typeof import('@vueuse/core').useLocalStorage
+ const useMagicKeys: typeof import('@vueuse/core').useMagicKeys
+ const useManualRefHistory: typeof import('@vueuse/core').useManualRefHistory
+ const useMediaControls: typeof import('@vueuse/core').useMediaControls
+ const useMediaQuery: typeof import('@vueuse/core').useMediaQuery
+ const useMemoize: typeof import('@vueuse/core').useMemoize
+ const useMemory: typeof import('@vueuse/core').useMemory
+ const useMessage: typeof import('naive-ui').useMessage
+ const useModel: typeof import('vue').useModel
+ const useMounted: typeof import('@vueuse/core').useMounted
+ const useMouse: typeof import('@vueuse/core').useMouse
+ const useMouseInElement: typeof import('@vueuse/core').useMouseInElement
+ const useMousePressed: typeof import('@vueuse/core').useMousePressed
+ const useMutationObserver: typeof import('@vueuse/core').useMutationObserver
+ const useNavigatorLanguage: typeof import('@vueuse/core').useNavigatorLanguage
+ const useNetwork: typeof import('@vueuse/core').useNetwork
+ const useNotification: typeof import('naive-ui').useNotification
+ const useNow: typeof import('@vueuse/core').useNow
+ const useObjectUrl: typeof import('@vueuse/core').useObjectUrl
+ const useOffsetPagination: typeof import('@vueuse/core').useOffsetPagination
+ const useOnline: typeof import('@vueuse/core').useOnline
+ const usePageLeave: typeof import('@vueuse/core').usePageLeave
+ const useParallax: typeof import('@vueuse/core').useParallax
+ const useParentElement: typeof import('@vueuse/core').useParentElement
+ const usePerformanceObserver: typeof import('@vueuse/core').usePerformanceObserver
+ const usePermission: typeof import('@vueuse/core').usePermission
+ const usePointer: typeof import('@vueuse/core').usePointer
+ const usePointerLock: typeof import('@vueuse/core').usePointerLock
+ const usePointerSwipe: typeof import('@vueuse/core').usePointerSwipe
+ const usePreferredColorScheme: typeof import('@vueuse/core').usePreferredColorScheme
+ const usePreferredContrast: typeof import('@vueuse/core').usePreferredContrast
+ const usePreferredDark: typeof import('@vueuse/core').usePreferredDark
+ const usePreferredLanguages: typeof import('@vueuse/core').usePreferredLanguages
+ const usePreferredReducedMotion: typeof import('@vueuse/core').usePreferredReducedMotion
+ const usePreferredReducedTransparency: typeof import('@vueuse/core').usePreferredReducedTransparency
+ const usePrevious: typeof import('@vueuse/core').usePrevious
+ const useRafFn: typeof import('@vueuse/core').useRafFn
+ const useRefHistory: typeof import('@vueuse/core').useRefHistory
+ const useResizeObserver: typeof import('@vueuse/core').useResizeObserver
+ const useRoute: typeof import('vue-router').useRoute
+ const useRouter: typeof import('vue-router').useRouter
+ const useSSRWidth: typeof import('@vueuse/core').useSSRWidth
+ const useScreenOrientation: typeof import('@vueuse/core').useScreenOrientation
+ const useScreenSafeArea: typeof import('@vueuse/core').useScreenSafeArea
+ const useScriptTag: typeof import('@vueuse/core').useScriptTag
+ const useScroll: typeof import('@vueuse/core').useScroll
+ const useScrollLock: typeof import('@vueuse/core').useScrollLock
+ const useSessionStorage: typeof import('@vueuse/core').useSessionStorage
+ const useShare: typeof import('@vueuse/core').useShare
+ const useSlots: typeof import('vue').useSlots
+ const useSorted: typeof import('@vueuse/core').useSorted
+ const useSpeechRecognition: typeof import('@vueuse/core').useSpeechRecognition
+ const useSpeechSynthesis: typeof import('@vueuse/core').useSpeechSynthesis
+ const useStepper: typeof import('@vueuse/core').useStepper
+ const useStorage: typeof import('@vueuse/core').useStorage
+ const useStorageAsync: typeof import('@vueuse/core').useStorageAsync
+ const useStyleTag: typeof import('@vueuse/core').useStyleTag
+ const useSupported: typeof import('@vueuse/core').useSupported
+ const useSwipe: typeof import('@vueuse/core').useSwipe
+ const useTemplateRef: typeof import('vue').useTemplateRef
+ const useTemplateRefsList: typeof import('@vueuse/core').useTemplateRefsList
+ const useTextDirection: typeof import('@vueuse/core').useTextDirection
+ const useTextSelection: typeof import('@vueuse/core').useTextSelection
+ const useTextareaAutosize: typeof import('@vueuse/core').useTextareaAutosize
+ const useThrottle: typeof import('@vueuse/core').useThrottle
+ const useThrottleFn: typeof import('@vueuse/core').useThrottleFn
+ const useThrottledRefHistory: typeof import('@vueuse/core').useThrottledRefHistory
+ const useTimeAgo: typeof import('@vueuse/core').useTimeAgo
+ const useTimeAgoIntl: typeof import('@vueuse/core').useTimeAgoIntl
+ const useTimeout: typeof import('@vueuse/core').useTimeout
+ const useTimeoutFn: typeof import('@vueuse/core').useTimeoutFn
+ const useTimeoutPoll: typeof import('@vueuse/core').useTimeoutPoll
+ const useTimestamp: typeof import('@vueuse/core').useTimestamp
+ const useTitle: typeof import('@vueuse/core').useTitle
+ const useToNumber: typeof import('@vueuse/core').useToNumber
+ const useToString: typeof import('@vueuse/core').useToString
+ const useToggle: typeof import('@vueuse/core').useToggle
+ const useTransition: typeof import('@vueuse/core').useTransition
+ const useUrlSearchParams: typeof import('@vueuse/core').useUrlSearchParams
+ const useUserMedia: typeof import('@vueuse/core').useUserMedia
+ const useVModel: typeof import('@vueuse/core').useVModel
+ const useVModels: typeof import('@vueuse/core').useVModels
+ const useVibrate: typeof import('@vueuse/core').useVibrate
+ const useVirtualList: typeof import('@vueuse/core').useVirtualList
+ const useWakeLock: typeof import('@vueuse/core').useWakeLock
+ const useWebNotification: typeof import('@vueuse/core').useWebNotification
+ const useWebSocket: typeof import('@vueuse/core').useWebSocket
+ const useWebWorker: typeof import('@vueuse/core').useWebWorker
+ const useWebWorkerFn: typeof import('@vueuse/core').useWebWorkerFn
+ const useWindowFocus: typeof import('@vueuse/core').useWindowFocus
+ const useWindowScroll: typeof import('@vueuse/core').useWindowScroll
+ const useWindowSize: typeof import('@vueuse/core').useWindowSize
+ const watch: typeof import('vue').watch
+ const watchArray: typeof import('@vueuse/core').watchArray
+ const watchAtMost: typeof import('@vueuse/core').watchAtMost
+ const watchDebounced: typeof import('@vueuse/core').watchDebounced
+ const watchDeep: typeof import('@vueuse/core').watchDeep
+ const watchEffect: typeof import('vue').watchEffect
+ const watchIgnorable: typeof import('@vueuse/core').watchIgnorable
+ const watchImmediate: typeof import('@vueuse/core').watchImmediate
+ const watchOnce: typeof import('@vueuse/core').watchOnce
+ const watchPausable: typeof import('@vueuse/core').watchPausable
+ const watchPostEffect: typeof import('vue').watchPostEffect
+ const watchSyncEffect: typeof import('vue').watchSyncEffect
+ const watchThrottled: typeof import('@vueuse/core').watchThrottled
+ const watchTriggerable: typeof import('@vueuse/core').watchTriggerable
+ const watchWithFilter: typeof import('@vueuse/core').watchWithFilter
+ const whenever: typeof import('@vueuse/core').whenever
}
// for type re-export
declare global {
// @ts-ignore
- export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
+ export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, ShallowRef, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
+ import('vue')
}
+
// for vue template auto import
import { UnwrapRef } from 'vue'
declare module 'vue' {
+ interface GlobalComponents {}
interface ComponentCustomProperties {
readonly EffectScope: UnwrapRef
readonly asyncComputed: UnwrapRef
@@ -305,10 +328,12 @@ declare module 'vue' {
readonly controlledComputed: UnwrapRef
readonly controlledRef: UnwrapRef
readonly createApp: UnwrapRef
+ readonly createDisposableDirective: UnwrapRef
readonly createEventHook: UnwrapRef
readonly createGlobalState: UnwrapRef
readonly createInjectionState: UnwrapRef
readonly createReactiveFn: UnwrapRef
+ readonly createRef: UnwrapRef
readonly createReusableTemplate: UnwrapRef
readonly createSharedComposable: UnwrapRef
readonly createTemplatePromise: UnwrapRef
@@ -323,14 +348,17 @@ declare module 'vue' {
readonly extendRef: UnwrapRef
readonly getCurrentInstance: UnwrapRef
readonly getCurrentScope: UnwrapRef
+ readonly getCurrentWatcher: UnwrapRef
readonly h: UnwrapRef
readonly ignorableWatch: UnwrapRef
readonly inject: UnwrapRef
+ readonly injectLocal: UnwrapRef
readonly isDefined: UnwrapRef
readonly isProxy: UnwrapRef
readonly isReactive: UnwrapRef
readonly isReadonly: UnwrapRef
readonly isRef: UnwrapRef
+ readonly isShallow: UnwrapRef
readonly makeDestructurable: UnwrapRef
readonly markRaw: UnwrapRef
readonly nextTick: UnwrapRef
@@ -342,6 +370,7 @@ declare module 'vue' {
readonly onBeforeUpdate: UnwrapRef
readonly onClickOutside: UnwrapRef
readonly onDeactivated: UnwrapRef
+ readonly onElementRemoval: UnwrapRef
readonly onErrorCaptured: UnwrapRef
readonly onKeyStroke: UnwrapRef
readonly onLongPress: UnwrapRef
@@ -353,8 +382,10 @@ declare module 'vue' {
readonly onStartTyping: UnwrapRef
readonly onUnmounted: UnwrapRef
readonly onUpdated: UnwrapRef
+ readonly onWatcherCleanup: UnwrapRef
readonly pausableWatch: UnwrapRef
readonly provide: UnwrapRef
+ readonly provideLocal: UnwrapRef
readonly reactify: UnwrapRef
readonly reactifyObject: UnwrapRef
readonly reactive: UnwrapRef
@@ -366,11 +397,10 @@ declare module 'vue' {
readonly refAutoReset: UnwrapRef
readonly refDebounced: UnwrapRef
readonly refDefault: UnwrapRef
+ readonly refManualReset: UnwrapRef
readonly refThrottled: UnwrapRef
readonly refWithControl: UnwrapRef
readonly resolveComponent: UnwrapRef
- readonly resolveRef: UnwrapRef
- readonly resolveUnref: UnwrapRef
readonly shallowReactive: UnwrapRef
readonly shallowReadonly: UnwrapRef
readonly shallowRef: UnwrapRef
@@ -418,11 +448,14 @@ declare module 'vue' {
readonly useBrowserLocation: UnwrapRef
readonly useCached: UnwrapRef
readonly useClipboard: UnwrapRef
+ readonly useClipboardItems: UnwrapRef
readonly useCloned: UnwrapRef
readonly useColorMode: UnwrapRef
readonly useConfirmDialog: UnwrapRef
+ readonly useCountdown: UnwrapRef
readonly useCounter: UnwrapRef
readonly useCssModule: UnwrapRef
+ readonly useCssSupports: UnwrapRef
readonly useCssVar: UnwrapRef
readonly useCssVars: UnwrapRef
readonly useCurrentElement: UnwrapRef
@@ -461,6 +494,7 @@ declare module 'vue' {
readonly useGamepad: UnwrapRef
readonly useGeolocation: UnwrapRef
readonly useI18n: UnwrapRef
+ readonly useId: UnwrapRef
readonly useIdle: UnwrapRef
readonly useImage: UnwrapRef
readonly useInfiniteScroll: UnwrapRef
@@ -479,6 +513,7 @@ declare module 'vue' {
readonly useMemoize: UnwrapRef
readonly useMemory: UnwrapRef
readonly useMessage: UnwrapRef
+ readonly useModel: UnwrapRef
readonly useMounted: UnwrapRef
readonly useMouse: UnwrapRef
readonly useMouseInElement: UnwrapRef
@@ -504,12 +539,14 @@ declare module 'vue' {
readonly usePreferredDark: UnwrapRef
readonly usePreferredLanguages: UnwrapRef
readonly usePreferredReducedMotion: UnwrapRef
+ readonly usePreferredReducedTransparency: UnwrapRef
readonly usePrevious: UnwrapRef
readonly useRafFn: UnwrapRef
readonly useRefHistory: UnwrapRef
readonly useResizeObserver: UnwrapRef
readonly useRoute: UnwrapRef
readonly useRouter: UnwrapRef
+ readonly useSSRWidth: UnwrapRef
readonly useScreenOrientation: UnwrapRef
readonly useScreenSafeArea: UnwrapRef
readonly useScriptTag: UnwrapRef
@@ -527,6 +564,7 @@ declare module 'vue' {
readonly useStyleTag: UnwrapRef
readonly useSupported: UnwrapRef
readonly useSwipe: UnwrapRef
+ readonly useTemplateRef: UnwrapRef
readonly useTemplateRefsList: UnwrapRef
readonly useTextDirection: UnwrapRef
readonly useTextSelection: UnwrapRef
@@ -535,6 +573,7 @@ declare module 'vue' {
readonly useThrottleFn: UnwrapRef
readonly useThrottledRefHistory: UnwrapRef
readonly useTimeAgo: UnwrapRef
+ readonly useTimeAgoIntl: UnwrapRef
readonly useTimeout: UnwrapRef
readonly useTimeoutFn: UnwrapRef
readonly useTimeoutPoll: UnwrapRef
@@ -575,288 +614,4 @@ declare module 'vue' {
readonly watchWithFilter: UnwrapRef
readonly whenever: UnwrapRef
}
-}
-declare module '@vue/runtime-core' {
- interface ComponentCustomProperties {
- readonly EffectScope: UnwrapRef
- readonly asyncComputed: UnwrapRef
- readonly autoResetRef: UnwrapRef
- readonly computed: UnwrapRef
- readonly computedAsync: UnwrapRef
- readonly computedEager: UnwrapRef
- readonly computedInject: UnwrapRef
- readonly computedWithControl: UnwrapRef
- readonly controlledComputed: UnwrapRef
- readonly controlledRef: UnwrapRef
- readonly createApp: UnwrapRef
- readonly createEventHook: UnwrapRef
- readonly createGlobalState: UnwrapRef
- readonly createInjectionState: UnwrapRef
- readonly createReactiveFn: UnwrapRef
- readonly createReusableTemplate: UnwrapRef
- readonly createSharedComposable: UnwrapRef
- readonly createTemplatePromise: UnwrapRef
- readonly createUnrefFn: UnwrapRef
- readonly customRef: UnwrapRef
- readonly debouncedRef: UnwrapRef
- readonly debouncedWatch: UnwrapRef
- readonly defineAsyncComponent: UnwrapRef
- readonly defineComponent: UnwrapRef
- readonly eagerComputed: UnwrapRef
- readonly effectScope: UnwrapRef
- readonly extendRef: UnwrapRef
- readonly getCurrentInstance: UnwrapRef
- readonly getCurrentScope: UnwrapRef
- readonly h: UnwrapRef
- readonly ignorableWatch: UnwrapRef
- readonly inject: UnwrapRef
- readonly isDefined: UnwrapRef
- readonly isProxy: UnwrapRef
- readonly isReactive: UnwrapRef
- readonly isReadonly: UnwrapRef
- readonly isRef: UnwrapRef
- readonly makeDestructurable: UnwrapRef
- readonly markRaw: UnwrapRef
- readonly nextTick: UnwrapRef
- readonly onActivated: UnwrapRef
- readonly onBeforeMount: UnwrapRef
- readonly onBeforeRouteLeave: UnwrapRef
- readonly onBeforeRouteUpdate: UnwrapRef
- readonly onBeforeUnmount: UnwrapRef
- readonly onBeforeUpdate: UnwrapRef
- readonly onClickOutside: UnwrapRef
- readonly onDeactivated: UnwrapRef
- readonly onErrorCaptured: UnwrapRef
- readonly onKeyStroke: UnwrapRef
- readonly onLongPress: UnwrapRef
- readonly onMounted: UnwrapRef
- readonly onRenderTracked: UnwrapRef
- readonly onRenderTriggered: UnwrapRef
- readonly onScopeDispose: UnwrapRef
- readonly onServerPrefetch: UnwrapRef
- readonly onStartTyping: UnwrapRef
- readonly onUnmounted: UnwrapRef
- readonly onUpdated: UnwrapRef
- readonly pausableWatch: UnwrapRef
- readonly provide: UnwrapRef
- readonly reactify: UnwrapRef
- readonly reactifyObject: UnwrapRef
- readonly reactive: UnwrapRef
- readonly reactiveComputed: UnwrapRef
- readonly reactiveOmit: UnwrapRef
- readonly reactivePick: UnwrapRef
- readonly readonly: UnwrapRef
- readonly ref: UnwrapRef
- readonly refAutoReset: UnwrapRef
- readonly refDebounced: UnwrapRef
- readonly refDefault: UnwrapRef
- readonly refThrottled: UnwrapRef
- readonly refWithControl: UnwrapRef
- readonly resolveComponent: UnwrapRef
- readonly resolveRef: UnwrapRef
- readonly resolveUnref: UnwrapRef
- readonly shallowReactive: UnwrapRef
- readonly shallowReadonly: UnwrapRef
- readonly shallowRef: UnwrapRef
- readonly syncRef: UnwrapRef
- readonly syncRefs: UnwrapRef
- readonly templateRef: UnwrapRef
- readonly throttledRef: UnwrapRef
- readonly throttledWatch: UnwrapRef
- readonly toRaw: UnwrapRef
- readonly toReactive: UnwrapRef
- readonly toRef: UnwrapRef
- readonly toRefs: UnwrapRef
- readonly toValue: UnwrapRef
- readonly triggerRef: UnwrapRef
- readonly tryOnBeforeMount: UnwrapRef
- readonly tryOnBeforeUnmount: UnwrapRef
- readonly tryOnMounted: UnwrapRef
- readonly tryOnScopeDispose: UnwrapRef
- readonly tryOnUnmounted: UnwrapRef
- readonly unref: UnwrapRef
- readonly unrefElement: UnwrapRef
- readonly until: UnwrapRef
- readonly useActiveElement: UnwrapRef
- readonly useAnimate: UnwrapRef
- readonly useArrayDifference: UnwrapRef
- readonly useArrayEvery: UnwrapRef
- readonly useArrayFilter: UnwrapRef
- readonly useArrayFind: UnwrapRef
- readonly useArrayFindIndex: UnwrapRef
- readonly useArrayFindLast: UnwrapRef
- readonly useArrayIncludes: UnwrapRef
- readonly useArrayJoin: UnwrapRef
- readonly useArrayMap: UnwrapRef
- readonly useArrayReduce: UnwrapRef
- readonly useArraySome: UnwrapRef
- readonly useArrayUnique: UnwrapRef
- readonly useAsyncQueue: UnwrapRef
- readonly useAsyncState: UnwrapRef
- readonly useAttrs: UnwrapRef
- readonly useBase64: UnwrapRef
- readonly useBattery: UnwrapRef
- readonly useBluetooth: UnwrapRef
- readonly useBreakpoints: UnwrapRef
- readonly useBroadcastChannel: UnwrapRef
- readonly useBrowserLocation: UnwrapRef
- readonly useCached: UnwrapRef
- readonly useClipboard: UnwrapRef
- readonly useCloned: UnwrapRef
- readonly useColorMode: UnwrapRef
- readonly useConfirmDialog: UnwrapRef
- readonly useCounter: UnwrapRef
- readonly useCssModule: UnwrapRef
- readonly useCssVar: UnwrapRef
- readonly useCssVars: UnwrapRef
- readonly useCurrentElement: UnwrapRef
- readonly useCycleList: UnwrapRef
- readonly useDark: UnwrapRef
- readonly useDateFormat: UnwrapRef
- readonly useDebounce: UnwrapRef
- readonly useDebounceFn: UnwrapRef