├── .env.utools ├── pnpm-workspace.yaml ├── src ├── composables │ ├── index.ts │ ├── dark.ts │ ├── store.ts │ ├── useCatalogue.ts │ └── useData.ts ├── types │ ├── index.ts │ └── global.d.ts ├── utils │ ├── sleep.ts │ ├── file.ts │ ├── utools.polyfill.ts │ └── univer.ts ├── components │ ├── UButton.vue │ ├── UModal.vue │ ├── contextMenu.vue │ ├── UniverSheet.vue │ ├── UniverDoc.vue │ └── FileMenu.vue ├── main.ts ├── locales.ts ├── styles │ └── main.css ├── services │ ├── sheets │ │ ├── lazy.ts │ │ ├── worker.ts │ │ ├── very-lazy.ts │ │ ├── customMentionDataService.ts │ │ └── uSheet.ts │ └── docs │ │ └── uDoc.ts └── App.vue ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── FEATURE.yml │ └── BUG.yml └── workflows │ └── release.yml ├── .npmrc ├── images ├── uDoc.gif ├── uSheets.gif ├── uManager.gif └── utools-univer.gif ├── public ├── logo.jpg ├── package.json ├── package-lock.json ├── plugin.json └── favicon.svg ├── global.d.ts ├── vite.env.d.ts ├── server ├── src │ ├── file │ │ ├── index.ts │ │ └── function.ts │ ├── system │ │ ├── index.ts │ │ └── function.ts │ └── index.ts ├── package.json ├── vite.config.ts └── package-lock.json ├── .gitignore ├── eslint.config.js ├── shims.d.ts ├── .editorconfig ├── .vscode ├── extensions.json └── settings.json ├── tsconfig.node.json ├── .release-it.json ├── script └── build.mjs ├── test ├── utools.test.ts ├── useData.test.ts └── auto-imports.d.ts ├── components.d.ts ├── tsconfig.json ├── uno.config.ts ├── typed-router.d.ts ├── index.html ├── LICENSE ├── vite.config.ts ├── readme.md ├── package.json ├── CHANGELOG.md └── auto-imports.d.ts /.env.utools: -------------------------------------------------------------------------------- 1 | # UTools environment place here 2 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - server 3 | -------------------------------------------------------------------------------- /src/composables/index.ts: -------------------------------------------------------------------------------- 1 | export * from './dark' 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /images/uDoc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gjssss/utools-univer/HEAD/images/uDoc.gif -------------------------------------------------------------------------------- /public/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gjssss/utools-univer/HEAD/public/logo.jpg -------------------------------------------------------------------------------- /public/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "utools-univer", 3 | "type": "commonjs" 4 | } 5 | -------------------------------------------------------------------------------- /images/uSheets.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gjssss/utools-univer/HEAD/images/uSheets.gif -------------------------------------------------------------------------------- /images/uManager.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gjssss/utools-univer/HEAD/images/uManager.gif -------------------------------------------------------------------------------- /images/utools-univer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gjssss/utools-univer/HEAD/images/utools-univer.gif -------------------------------------------------------------------------------- /src/composables/dark.ts: -------------------------------------------------------------------------------- 1 | export const isDark = useDark() 2 | export const toggleDark = useToggle(isDark) 3 | -------------------------------------------------------------------------------- /global.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-var */ 2 | declare var server: typeof import('server/dist/types').default 3 | -------------------------------------------------------------------------------- /vite.env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /server/src/file/index.ts: -------------------------------------------------------------------------------- 1 | import { helloFile } from './function' 2 | 3 | export default { 4 | helloFile, 5 | } 6 | -------------------------------------------------------------------------------- /server/src/system/index.ts: -------------------------------------------------------------------------------- 1 | import { helloSystem } from './function' 2 | 3 | export default { 4 | helloSystem, 5 | } 6 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | export type ContextMenuListOption = { 2 | text: string 3 | icon: string 4 | cb: () => void 5 | }[] 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .vite-ssg-dist 3 | .vite-ssg-temp 4 | *.local 5 | dist 6 | dist-ssr 7 | node_modules 8 | .idea/ 9 | *.log 10 | -------------------------------------------------------------------------------- /server/src/file/function.ts: -------------------------------------------------------------------------------- 1 | export function helloFile() { 2 | // eslint-disable-next-line no-console 3 | console.log('hello file') 4 | } 5 | -------------------------------------------------------------------------------- /server/src/system/function.ts: -------------------------------------------------------------------------------- 1 | export function helloSystem() { 2 | // eslint-disable-next-line no-console 3 | console.log('hello system') 4 | } 5 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import antfu from '@antfu/eslint-config' 2 | 3 | export default antfu( 4 | { 5 | unocss: true, 6 | formatters: true, 7 | }, 8 | ) 9 | -------------------------------------------------------------------------------- /server/src/index.ts: -------------------------------------------------------------------------------- 1 | import fileModule from './file' 2 | import systemModule from './system' 3 | 4 | export default { 5 | fileModule, 6 | systemModule, 7 | } 8 | -------------------------------------------------------------------------------- /shims.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import type { DefineComponent } from 'vue' 3 | 4 | const component: DefineComponent 5 | export default component 6 | } 7 | -------------------------------------------------------------------------------- /src/utils/sleep.ts: -------------------------------------------------------------------------------- 1 | export function sleep(timeout: number) { 2 | return new Promise((resolve) => { 3 | setTimeout(() => { 4 | resolve() 5 | }, timeout) 6 | }) 7 | } 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /public/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "utools-univer", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "utools-univer" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/components/UButton.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "antfu.vite", 4 | "antfu.iconify", 5 | "antfu.unocss", 6 | "antfu.goto-alias", 7 | "vue.volar", 8 | "dbaeumer.vscode-eslint", 9 | "EditorConfig.EditorConfig" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "scripts": { 4 | "dev": "vite", 5 | "build": "vite build", 6 | "preview": "vite preview" 7 | }, 8 | "devDependencies": { 9 | "vite": "^5.4.10", 10 | "vite-plugin-dts": "^4.3.0" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": [ 9 | "vite.config.ts", 10 | "public/preload.js" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | import '@unocss/reset/tailwind.css' 4 | import './styles/main.css' 5 | import 'uno.css' 6 | 7 | if (import.meta.env.DEV) 8 | window.utools = utoolsPolyfill() as any 9 | 10 | const app = createApp(App) 11 | app.mount('#app') 12 | -------------------------------------------------------------------------------- /src/types/global.d.ts: -------------------------------------------------------------------------------- 1 | import type { Univer } from '@univerjs/core' 2 | import type { FUniver } from '@univerjs/facade' 3 | 4 | declare global { 5 | interface Window { 6 | univer: Univer 7 | uDocAPI: ReturnType 8 | uSheetAPI: ReturnType 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/composables/store.ts: -------------------------------------------------------------------------------- 1 | export enum FileType { 2 | Sheet = 'sheet', 3 | Doc = 'doc', 4 | } 5 | 6 | const state = reactive<{ 7 | currentFileID: string 8 | fileType: FileType 9 | }>({ 10 | currentFileID: '', 11 | fileType: FileType.Sheet, 12 | }) 13 | 14 | export function useSystemStore() { 15 | return state 16 | } 17 | -------------------------------------------------------------------------------- /src/locales.ts: -------------------------------------------------------------------------------- 1 | import { LocaleType } from '@univerjs/core' 2 | import { enUS, ruRU, viVN, zhCN, zhTW } from 'univer:locales' 3 | 4 | export const univerLocales = { 5 | [LocaleType.EN_US]: enUS, 6 | [LocaleType.ZH_CN]: zhCN, 7 | [LocaleType.RU_RU]: ruRU, 8 | [LocaleType.ZH_TW]: zhTW, 9 | [LocaleType.VI_VN]: viVN, 10 | } 11 | -------------------------------------------------------------------------------- /public/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "index.html", 3 | "preload": "preload.js", 4 | "platform": [ 5 | "win32", 6 | "darwin", 7 | "linux" 8 | ], 9 | "logo": "logo.jpg", 10 | "features": [ 11 | { 12 | "code": "univer", 13 | "explain": "start univer", 14 | "cmds": [ 15 | "univer", 16 | "sheet" 17 | ] 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.release-it.json: -------------------------------------------------------------------------------- 1 | { 2 | "git": { 3 | "commitMessage": "chore(release): release v${version}", 4 | "tagName": "v${version}", 5 | "requireCleanWorkingDir": false 6 | }, 7 | "npm": false, 8 | "github": { 9 | "release": true 10 | }, 11 | "plugins": { 12 | "@release-it/conventional-changelog": { 13 | "preset": "angular", 14 | "infile": "CHANGELOG.md", 15 | "ignoreRecommendedBump": true 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /script/build.mjs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zx 2 | /* eslint-disable eslint-comments/no-unlimited-disable */ 3 | /* eslint-disable */ 4 | import { copy } from 'fs-extra' 5 | import { $, cd, echo } from 'zx' 6 | 7 | echo('building web...') 8 | await $`pnpm vite build --mode utools` 9 | echo('building server...') 10 | cd('server') 11 | await $`pnpm vite build` 12 | cd('..') 13 | echo('copy') 14 | await copy('server/dist/main.js', 'dist/preload.js') 15 | echo('finish') 16 | -------------------------------------------------------------------------------- /src/styles/main.css: -------------------------------------------------------------------------------- 1 | #app { 2 | padding: 0; 3 | margin: 0; 4 | width: 100vw; 5 | height: 100vh; 6 | overflow: hidden; 7 | } 8 | 9 | html.dark .univer-theme { 10 | color: black; 11 | } 12 | 13 | .fade-down-enter-from, 14 | .fade-down-leave-to { 15 | opacity: 0; 16 | transform: translateY(-20px) scaleX(0.01); 17 | } 18 | 19 | input { 20 | background-color: transparent; 21 | border-bottom: 1px dashed #111; 22 | } 23 | html.dark input { 24 | border-bottom: 1px dashed #eee; 25 | } 26 | -------------------------------------------------------------------------------- /test/utools.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { utoolsPolyfill } from '~/utils/utools.polyfill' 3 | 4 | describe('utools Polyfill', () => { 5 | window.utools = utoolsPolyfill() as any 6 | it('db', () => { 7 | expect(utools.db.put({ 8 | _id: 'demo', 9 | data: 'demo', 10 | })).toMatchObject({ 11 | id: 'demo', 12 | ok: true, 13 | rev: expect.anything(), 14 | }) 15 | 16 | expect(utools.db.get('demo')).toMatchObject({ 17 | _id: 'demo', 18 | _rev: expect.anything(), 19 | data: 'demo', 20 | }) 21 | }) 22 | }) 23 | -------------------------------------------------------------------------------- /src/utils/file.ts: -------------------------------------------------------------------------------- 1 | export async function getFile(id: string, def?: T) { 2 | const data = await utools.db.promises.get(id) 3 | return JSON.parse(data?.data || JSON.stringify(def || {})) 4 | } 5 | 6 | export async function setFile(id: string, content: object) { 7 | const data = await utools.db.promises.get(id) 8 | await utools.db.promises.put({ 9 | _id: id, 10 | _rev: data?._rev, 11 | data: JSON.stringify(content), 12 | }) 13 | } 14 | 15 | export async function deleteFile(id: string) { 16 | if (id) 17 | await utools.db.promises.remove(id) 18 | else 19 | console.error('file not found') 20 | } 21 | -------------------------------------------------------------------------------- /components.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | // @ts-nocheck 3 | // Generated by unplugin-vue-components 4 | // Read more: https://github.com/vuejs/core/pull/3399 5 | export {} 6 | 7 | /* prettier-ignore */ 8 | declare module 'vue' { 9 | export interface GlobalComponents { 10 | ContextMenu: typeof import('./src/components/contextMenu.vue')['default'] 11 | FileMenu: typeof import('./src/components/FileMenu.vue')['default'] 12 | UButton: typeof import('./src/components/UButton.vue')['default'] 13 | UModal: typeof import('./src/components/UModal.vue')['default'] 14 | UniverDoc: typeof import('./src/components/UniverDoc.vue')['default'] 15 | UniverSheet: typeof import('./src/components/UniverSheet.vue')['default'] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/services/sheets/lazy.ts: -------------------------------------------------------------------------------- 1 | import type { Plugin, PluginCtor } from '@univerjs/core' 2 | import { UniverSheetsConditionalFormattingUIPlugin } from '@univerjs/sheets-conditional-formatting-ui' 3 | import { UniverSheetsDataValidationUIPlugin } from '@univerjs/sheets-data-validation-ui' 4 | import { UniverSheetsDrawingUIPlugin } from '@univerjs/sheets-drawing-ui' 5 | import { UniverSheetsFilterUIPlugin } from '@univerjs/sheets-filter-ui' 6 | 7 | export default function getLazyPlugins(): Array<[PluginCtor] | [PluginCtor, unknown]> { 8 | return [ 9 | [UniverSheetsDataValidationUIPlugin], 10 | [UniverSheetsConditionalFormattingUIPlugin], 11 | [UniverSheetsFilterUIPlugin, { useRemoteFilterValuesGenerator: false }], 12 | [UniverSheetsDrawingUIPlugin], 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/FEATURE.yml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: Suggest a new feature for the plugin 3 | labels: 4 | - enhancement 5 | body: 6 | - type: textarea 7 | id: problem 8 | attributes: 9 | label: Problem 10 | description: A feature resolves a limitation or problem. What is the problem that you are trying to solve? 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: solution 15 | attributes: 16 | label: Solution 17 | description: Describe the solution that you'd like to see. 18 | validations: 19 | required: true 20 | - type: textarea 21 | id: additional-details 22 | attributes: 23 | label: Additional details 24 | description: Any additional details regarding the solution or problem. Screenshots, implementations on other websites/apps, etc. 25 | -------------------------------------------------------------------------------- /src/components/UModal.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 31 | 32 | 35 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "jsx": "preserve", 5 | "lib": ["DOM", "ESNext", "WebWorker"], 6 | "baseUrl": ".", 7 | "module": "ESNext", 8 | "moduleResolution": "bundler", 9 | "paths": { 10 | "~/*": ["src/*"], 11 | "@/*": ["src/*"] 12 | }, 13 | "resolveJsonModule": true, 14 | "types": [ 15 | "vite/client", 16 | "unplugin-vue-macros/macros-global", 17 | "utools-api-types" 18 | ], 19 | "allowJs": true, 20 | "strict": true, 21 | "strictNullChecks": true, 22 | "noUnusedLocals": true, 23 | "esModuleInterop": true, 24 | "forceConsistentCasingInFileNames": true, 25 | "skipLibCheck": true 26 | }, 27 | "references": [ 28 | { 29 | "path": "./tsconfig.node.json" 30 | } 31 | ], 32 | "exclude": [ 33 | "dist", 34 | "node_modules", 35 | "eslint.config.js" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /uno.config.ts: -------------------------------------------------------------------------------- 1 | import { 2 | defineConfig, 3 | presetAttributify, 4 | presetIcons, 5 | presetUno, 6 | } from 'unocss' 7 | 8 | export default defineConfig({ 9 | shortcuts: [ 10 | { 11 | 'bg-modal': 'bg-# dark:bg-#333', 12 | 'bg-base': 'bg-#fff dark:bg-#333', 13 | 'bg-select': 'bg-#ddd dark:bg-#555', 14 | 'bg-0': 'bg-#fff dark:bg-#111', 15 | 'bg-1': 'bg-#eee dark:bg-#222', 16 | 'bg-2': 'bg-#ddd dark:bg-#333', 17 | 'bg-3': 'bg-#ccc dark:bg-#444', 18 | 'bg-4': 'bg-#bbb dark:bg-#555', 19 | 'b-c': 'b-#555 dark:b-#aaa', 20 | }, 21 | { 22 | 'flex-center': 'flex items-center justify-center', 23 | }, 24 | { 25 | button: 'b-c cursor-pointer b px-3 py-0.25 rounded-lg hover:bg-#888 transition-all', 26 | }, 27 | ], 28 | rules: [ 29 | ], 30 | presets: [ 31 | presetUno(), 32 | presetAttributify(), 33 | presetIcons({ 34 | scale: 1.2, 35 | warn: true, 36 | }), 37 | ], 38 | }) 39 | -------------------------------------------------------------------------------- /typed-router.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /* prettier-ignore */ 3 | // @ts-nocheck 4 | // Generated by unplugin-vue-router. ‼️ DO NOT MODIFY THIS FILE ‼️ 5 | // It's recommended to commit this file. 6 | // Make sure to add this file to your tsconfig.json file as an "includes" or "files" entry. 7 | 8 | declare module 'vue-router/auto-routes' { 9 | import type { 10 | RouteRecordInfo, 11 | ParamValue, 12 | ParamValueOneOrMore, 13 | ParamValueZeroOrMore, 14 | ParamValueZeroOrOne, 15 | } from 'unplugin-vue-router/types' 16 | 17 | /** 18 | * Route name map generated by unplugin-vue-router 19 | */ 20 | export interface RouteNamedMap { 21 | '/': RouteRecordInfo<'/', '/', Record, Record>, 22 | '/[...all]': RouteRecordInfo<'/[...all]', '/:all(.*)', { all: ParamValue }, { all: ParamValue }>, 23 | '/hi/[name]': RouteRecordInfo<'/hi/[name]', '/hi/:name', { name: ParamValue }, { name: ParamValue }>, 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Utools with Univer 8 | 9 | 10 | 11 |
12 | 15 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/services/sheets/worker.ts: -------------------------------------------------------------------------------- 1 | import { univerLocales } from '@/locales' 2 | import { LocaleType, LogLevel, Univer } from '@univerjs/core' 3 | import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula' 4 | import { UniverRPCWorkerThreadPlugin } from '@univerjs/rpc' 5 | import { UniverSheetsPlugin } from '@univerjs/sheets' 6 | import { UniverSheetsFilterUIWorkerPlugin } from '@univerjs/sheets-filter-ui' 7 | import { UniverRemoteSheetsFormulaPlugin } from '@univerjs/sheets-formula' 8 | 9 | // Univer web worker is also a univer application. 10 | const univer = new Univer({ 11 | locale: LocaleType.ZH_CN, 12 | logLevel: LogLevel.VERBOSE, 13 | locales: univerLocales, 14 | }) 15 | 16 | univer.registerPlugin(UniverSheetsPlugin, { onlyRegisterFormulaRelatedMutations: true }) 17 | univer.registerPlugin(UniverFormulaEnginePlugin) 18 | univer.registerPlugin(UniverRPCWorkerThreadPlugin) 19 | univer.registerPlugin(UniverRemoteSheetsFormulaPlugin) 20 | univer.registerPlugin(UniverSheetsFilterUIWorkerPlugin) 21 | 22 | declare let self: WorkerGlobalScope & typeof globalThis & { univer: Univer } 23 | self.univer = univer 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020-PRESENT Anthony Fu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /test/useData.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | 3 | describe('useData', () => { 4 | window.utools = utoolsPolyfill() as any 5 | 6 | it('data init and update', async () => { 7 | const { data } = await useData('data', { hello: 123 }, { 8 | Data2Str: src => JSON.stringify(src), 9 | Str2Data: src => JSON.parse(src), 10 | }) 11 | 12 | // init 13 | expect(data.value).toEqual({ hello: 123 }) 14 | expect(utools.db.get('data')!.data).toEqual(JSON.stringify({ hello: 123 })) 15 | 16 | // update 17 | data.value.hello = 456 18 | await sleep(10) 19 | expect(utools.db.get('data')!.data).toEqual(JSON.stringify({ hello: 456 })) 20 | }) 21 | 22 | it('refresh', async () => { 23 | const { data, refresh } = await useData('refresh', { hello: 123 }, { 24 | Data2Str: src => JSON.stringify(src), 25 | Str2Data: src => JSON.parse(src), 26 | }) 27 | 28 | utools.db.put({ 29 | _id: 'refresh', 30 | data: JSON.stringify({ hello: 456 }), 31 | _rev: '1', 32 | }) 33 | expect(data.value).toEqual({ hello: 123 }) 34 | await refresh() 35 | expect(data.value).toEqual({ hello: 456 }) 36 | }) 37 | }) 38 | -------------------------------------------------------------------------------- /server/vite.config.ts: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import { defineConfig } from 'vite' 3 | import dts from 'vite-plugin-dts' 4 | 5 | function addFooter(footerText: string) { 6 | return { 7 | name: 'add-footer', 8 | generateBundle(_: any, bundle: any) { 9 | for (const file of Object.values(bundle)) { 10 | if (file.type === 'chunk' && file.preliminaryFileName === 'main.js') { 11 | file.code += `\n${footerText}` 12 | } 13 | } 14 | }, 15 | } 16 | } 17 | 18 | export default defineConfig({ 19 | plugins: [ 20 | addFooter('window.server = server\n'), 21 | dts({ 22 | outDir: 'dist/types', // 类型文件输出路径 23 | include: 'src/**/*.ts', 24 | insertTypesEntry: true, // 生成类型入口文件 25 | }), 26 | ], 27 | build: { 28 | lib: { 29 | entry: path.resolve(__dirname, 'src/index.ts'), 30 | name: 'server', 31 | formats: ['iife'], 32 | fileName: format => (format === 'iife' ? 'main.js' : `server/[name].js`), 33 | }, 34 | rollupOptions: { 35 | output: { 36 | entryFileNames: (chunkInfo) => { 37 | return chunkInfo.name === 'index' ? 'main.js' : `server/[name].js` 38 | }, 39 | }, 40 | }, 41 | target: 'es6', 42 | }, 43 | }) 44 | -------------------------------------------------------------------------------- /src/composables/useCatalogue.ts: -------------------------------------------------------------------------------- 1 | import type { FileType } from './store' 2 | import { nanoid } from 'nanoid' 3 | 4 | export async function useCatalogue() { 5 | const { data, refresh, close } = await useData('catalogue', [ 6 | { 7 | id: nanoid(), 8 | name: '未命名分类', 9 | files: [], 10 | isFold: false, 11 | }, 12 | ], { 13 | Data2Str: src => JSON.stringify(src), 14 | Str2Data: src => JSON.parse(src), 15 | }) 16 | 17 | function addCategory() { 18 | const id = nanoid() 19 | data.value.push({ 20 | id, 21 | name: '未命名分类', 22 | isFold: false, 23 | files: [], 24 | }) 25 | return id 26 | } 27 | 28 | function delCategory(idx: number) { 29 | const files = data.value[idx].files 30 | const promises = files.map(file => deleteFile(file.id)) 31 | Promise.all(promises).then(() => data.value.splice(idx, 1)).catch(console.error) 32 | } 33 | 34 | return { 35 | data, 36 | refresh, 37 | close, 38 | addCategory, 39 | delCategory, 40 | } 41 | } 42 | 43 | interface Category { 44 | id: string 45 | name: string 46 | isFold: boolean 47 | files: FileItem[] 48 | } 49 | 50 | export interface FileItem { 51 | id: string 52 | name: string 53 | type: FileType 54 | } 55 | -------------------------------------------------------------------------------- /src/utils/utools.polyfill.ts: -------------------------------------------------------------------------------- 1 | // Utools Polyfill File 2 | // Please Only Run in Development Environment 3 | 4 | function deepclone(obj: T): T { 5 | return JSON.parse(JSON.stringify(obj)) 6 | } 7 | 8 | export function utoolsPolyfill() { 9 | return { 10 | db: DB(), 11 | } 12 | } 13 | 14 | function DB() { 15 | const memory = new Map() 16 | function put(data: DbDoc): DbReturn { 17 | memory.set(data._id, deepclone(data)) 18 | return { 19 | id: data._id, 20 | rev: data._rev || '1', 21 | ok: true, 22 | error: false, 23 | } 24 | } 25 | async function aPut(data: DbDoc): Promise { 26 | return put(data) 27 | } 28 | function get(id: string): DbDoc | null { 29 | if (memory.has(id)) { 30 | return { 31 | _id: id, 32 | data: deepclone(memory.get(id).data), 33 | _rev: '1', 34 | } 35 | } 36 | else { 37 | return null 38 | } 39 | } 40 | async function aGet(id: string): Promise { 41 | return get(id) 42 | } 43 | function remove(id: string): DbDoc | null { 44 | const doc = get(id) 45 | memory.delete(id) 46 | return doc 47 | } 48 | async function aRemove(id: string): Promise { 49 | return remove(id) 50 | } 51 | return { 52 | put, 53 | get, 54 | remove, 55 | promises: { 56 | get: aGet, 57 | put: aPut, 58 | remove: aRemove, 59 | }, 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 48 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "*.css": "css" 4 | }, 5 | 6 | // Enable the ESlint flat config support 7 | "eslint.experimental.useFlatConfig": true, 8 | 9 | // Disable the default formatter 10 | "prettier.enable": false, 11 | "editor.formatOnSave": false, 12 | 13 | // Auto fix 14 | "editor.codeActionsOnSave": { 15 | "source.fixAll.eslint": "explicit", 16 | "source.organizeImports": "never" 17 | }, 18 | 19 | // Silent the stylistic rules in you IDE, but still auto fix them 20 | "eslint.rules.customizations": [ 21 | { "rule": "style/*", "severity": "off" }, 22 | { "rule": "*-indent", "severity": "off" }, 23 | { "rule": "*-spacing", "severity": "off" }, 24 | { "rule": "*-spaces", "severity": "off" }, 25 | { "rule": "*-order", "severity": "off" }, 26 | { "rule": "*-dangle", "severity": "off" }, 27 | { "rule": "*-newline", "severity": "off" }, 28 | { "rule": "*quotes", "severity": "off" }, 29 | { "rule": "*semi", "severity": "off" } 30 | ], 31 | 32 | // The following is optional. 33 | // It's better to put under project setting `.vscode/settings.json` 34 | // to avoid conflicts with working with different eslint configs 35 | // that does not support all formats. 36 | "eslint.validate": [ 37 | "javascript", 38 | "javascriptreact", 39 | "typescript", 40 | "typescriptreact", 41 | "vue", 42 | "html", 43 | "markdown", 44 | "json", 45 | "jsonc", 46 | "yaml" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /src/components/contextMenu.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /src/services/sheets/very-lazy.ts: -------------------------------------------------------------------------------- 1 | import type { Plugin, PluginCtor } from '@univerjs/core' 2 | import { UniverSheetsCrosshairHighlightPlugin } from '@univerjs/sheets-crosshair-highlight' 3 | import { UniverSheetsFindReplacePlugin } from '@univerjs/sheets-find-replace' 4 | import { UniverSheetsHyperLinkUIPlugin } from '@univerjs/sheets-hyper-link-ui' 5 | import { UniverSheetsSortUIPlugin } from '@univerjs/sheets-sort-ui' 6 | import { UniverUniscriptPlugin } from '@univerjs/uniscript' 7 | import { UniverWatermarkPlugin } from '@univerjs/watermark' 8 | 9 | export default function getVeryLazyPlugins() { 10 | const plugins: Array<[PluginCtor] | [PluginCtor, unknown]> = [ 11 | // TODO: validate the worker 12 | [UniverUniscriptPlugin, { 13 | getWorkerUrl(_: string, label: string) { 14 | if (label === 'json') { 15 | return '/vs/language/json/json.worker.js' 16 | } 17 | if (label === 'css' || label === 'scss' || label === 'less') { 18 | return '/vs/language/css/css.worker.js' 19 | } 20 | if (label === 'html' || label === 'handlebars' || label === 'razor') { 21 | return '/vs/language/html/html.worker.js' 22 | } 23 | if (label === 'typescript' || label === 'javascript') { 24 | return '/vs/language/typescript/ts.worker.js' 25 | } 26 | return '/vs/editor/editor.worker.js' 27 | }, 28 | }], 29 | [UniverSheetsHyperLinkUIPlugin], 30 | [UniverSheetsSortUIPlugin], 31 | [UniverSheetsCrosshairHighlightPlugin], 32 | [UniverSheetsFindReplacePlugin], 33 | [UniverWatermarkPlugin], 34 | ] 35 | 36 | return plugins 37 | } 38 | -------------------------------------------------------------------------------- /src/composables/useData.ts: -------------------------------------------------------------------------------- 1 | import { hasInjectionContext } from 'vue' 2 | 3 | export async function useData(id: string, initVal: T, transformer: Transformer) { 4 | const data = ref(initVal) as unknown as Ref 5 | const rawData = ref() as unknown as Ref 6 | let isClose = false 7 | 8 | const _d = await utools.db.promises.get(id) 9 | if (_d === null) { 10 | // create a new doc 11 | await utools.db.promises.put({ 12 | _id: id, 13 | data: transformer.Data2Str(initVal), 14 | }) 15 | // equipped the new doc to rawData 16 | rawData.value = await utools.db.promises.get(id) as DbDoc 17 | } 18 | else { 19 | rawData.value = _d 20 | data.value = transformer.Str2Data(rawData.value.data as string) 21 | } 22 | 23 | async function refresh() { 24 | rawData.value = await utools.db.promises.get(id) as DbDoc 25 | data.value = transformer.Str2Data(rawData.value.data as string) 26 | } 27 | 28 | const close = watch(data, async () => { 29 | await utools.db.promises.put({ 30 | _id: id, 31 | data: transformer.Data2Str(data.value), 32 | _rev: rawData.value._rev, 33 | }) 34 | rawData.value = await utools.db.promises.get(id) as DbDoc 35 | }, { 36 | deep: true, 37 | }) 38 | 39 | if (hasInjectionContext()) { 40 | onUnmounted(() => { 41 | if (!isClose) { 42 | isClose = true 43 | close() 44 | } 45 | }) 46 | } 47 | 48 | return { 49 | data, 50 | refresh, 51 | close: () => { 52 | isClose = true 53 | return close() 54 | }, 55 | } 56 | } 57 | 58 | interface Transformer { 59 | Str2Data: (data: string) => T 60 | Data2Str: (data: T) => string 61 | } 62 | -------------------------------------------------------------------------------- /src/components/UniverSheet.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 55 | 56 | 62 | -------------------------------------------------------------------------------- /src/components/UniverDoc.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 55 | 56 | 62 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/BUG.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: Report an issue that you are experiencing with the plugin 3 | labels: [bug] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thank you for taking the time to fill out this bug report! 9 | - type: textarea 10 | id: description 11 | attributes: 12 | label: Describe the bug 13 | description: What happened? Give a brief 1-2 sentence description 14 | validations: 15 | required: true 16 | - type: textarea 17 | id: steps-to-reproduce 18 | attributes: 19 | label: Steps to reproduce 20 | description: What are the steps to reproduce the behavior? 21 | validations: 22 | required: true 23 | - type: textarea 24 | id: expected-behavior 25 | attributes: 26 | label: Expected behavior 27 | description: What did you expect to happen? 28 | validations: 29 | required: true 30 | - type: dropdown 31 | id: mobile-app 32 | attributes: 33 | label: Are you using the mobile app? 34 | options: 35 | - Yes 36 | - No 37 | validations: 38 | required: true 39 | - type: textarea 40 | id: debug-info 41 | attributes: 42 | label: Obsidian debug info 43 | description: Please copy your debug info. In Obsidian press Cmd-P (Mac) or Ctrl-P (Windows) on keyboard. Search "Show debug info". Click "copy to clipboard. 44 | validations: 45 | required: true 46 | - type: textarea 47 | id: logs 48 | attributes: 49 | label: Relevant log output 50 | description: Please copy and paste any relevant log output. In Obsidan press Cmd-Option-I (Mac) or Ctrl-Alt-I (Window) on keyboard. Copy any log messages that contain [DataLoom] 51 | render: shell 52 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import path from 'node:path' 4 | import { univerPlugin } from '@univerjs/vite-plugin' 5 | import Vue from '@vitejs/plugin-vue' 6 | import UnoCSS from 'unocss/vite' 7 | import AutoImport from 'unplugin-auto-import/vite' 8 | import Components from 'unplugin-vue-components/vite' 9 | import VueMacros from 'unplugin-vue-macros/vite' 10 | import { defineConfig } from 'vite' 11 | import { nodePolyfills } from 'vite-plugin-node-polyfills' 12 | 13 | export default defineConfig({ 14 | base: './', 15 | resolve: { 16 | alias: { 17 | '~/': `${path.resolve(__dirname, 'src')}/`, 18 | '@/': `${path.resolve(__dirname, 'src')}/`, 19 | }, 20 | }, 21 | plugins: [ 22 | nodePolyfills(), 23 | VueMacros({ 24 | defineOptions: false, 25 | defineModels: false, 26 | plugins: { 27 | vue: Vue({ 28 | script: { 29 | propsDestructure: true, 30 | defineModel: true, 31 | }, 32 | }), 33 | 34 | }, 35 | }), 36 | 37 | // https://github.com/antfu/unplugin-auto-import 38 | AutoImport({ 39 | imports: [ 40 | 'vue', 41 | '@vueuse/core', 42 | ], 43 | dts: true, 44 | dirs: [ 45 | './src/composables', 46 | './src/utils', 47 | ], 48 | vueTemplate: true, 49 | }), 50 | 51 | // https://github.com/antfu/vite-plugin-components 52 | Components({ 53 | dts: true, 54 | }), 55 | 56 | // https://github.com/antfu/unocss 57 | // see uno.config.ts for config 58 | UnoCSS(), 59 | // univer plugin for css & i18n 60 | univerPlugin(), 61 | ], 62 | 63 | // https://github.com/vitest-dev/vitest 64 | test: { 65 | environment: 'jsdom', 66 | }, 67 | }) 68 | -------------------------------------------------------------------------------- /src/services/sheets/customMentionDataService.ts: -------------------------------------------------------------------------------- 1 | import type { Nullable } from '@univerjs/core' 2 | import type { IThreadCommentMentionDataService } from '@univerjs/sheets-thread-comment' 3 | import type { IThreadCommentMentionDataSource } from '@univerjs/thread-comment-ui' 4 | 5 | export const mockUser = { 6 | userID: 'Owner_qxVnhPbQ', 7 | name: 'Owner', 8 | avatar: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAInSURBVHgBtZU9TxtBEIbfWRzFSIdkikhBSqRQkJqkCKTCFkqVInSUSaT0wC8w/gXxD4gU2nRJkXQWhAZowDUUWKIwEgWWbEEB3mVmx3dn4DA2nB/ppNuPeWd29mMIPXDr+RxwtgRHeW6+guNPRxogqnL7Dwz9psJ27S4NShaeZTH3kwXy6I81dlRKcmRui88swdq9AcSFL7Buz1Vmlns64MiLsCjzwnIYHLH57tbfFbs7KRaXyEU8FVZofqccOfA5l7Q8LPIkGrwnb2RPNEXWFVMUF3L+kDCk0btDDAMzOm5YfAHDwp4tG74wnzAsiOYMnJ3GoDybA7IT98/jm5+JNnfiIzAS6LlqHQBN/i6b2t/cV1Hh6BfwYlHnHP4AXi5q/8kmMMpOs8+BixZw/Fd6xUEHEbnkgclvQP2fGp7uShRKnQ3G32rkjV1th8JhIGG7tR/JyjGteSOZELwGMmNqIIigRCLRh2OZIE6BjItdd7pCW6Uhm1zzkUtungSxwEUzNpQ+GQumtH1ej1MqgmNT6vwmhCq5yuwq56EYTbgeQUz3yvrpV1b4ok3nYJ+eYhgYmjRUqErx2EDq0Fr8FhG++iqVGqxlUJI/70Ar0UgJaWHj6hYVHJrfKssAHot1JfqwE9WVWzXZVd5z2Ws/4PnmtEjkXeKJDvxUecLbWOXH/DP6QQ4J72NS0adedp1aseBfXP8odlZFfPvBF7SN/8hky1TYuPOAXAEipMx15u5ToAAAAABJRU5ErkJggg==', 9 | anonymous: false, 10 | canBindAnonymous: false, 11 | } 12 | 13 | export class CustomMentionDataService implements IThreadCommentMentionDataService { 14 | dataSource: Nullable 15 | trigger: string = '@' 16 | 17 | async getMentions() { 18 | return [ 19 | { 20 | id: mockUser.userID, 21 | label: mockUser.name, 22 | type: 'user', 23 | icon: mockUser.avatar, 24 | }, 25 | { 26 | id: '2', 27 | label: 'User2', 28 | type: 'user', 29 | icon: mockUser.avatar, 30 | }, 31 | ] 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Utools plugin 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*' 7 | 8 | env: 9 | PLUGIN_NAME: utools-univer 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v2 17 | - name: Use Node.js 18 | uses: actions/setup-node@v1 19 | with: 20 | node-version: 16 21 | 22 | - name: Build 23 | id: build 24 | run: | 25 | npm install 26 | npm run build 27 | mkdir ${{ env.PLUGIN_NAME }} 28 | echo "Waiting for build files..." 29 | while [ ! -f dist/preload.js ] || [ ! -f dist/plugin.json ] || [ ! -f dist/index.html ]; do 30 | echo "Still waiting for build files..." 31 | sleep 1 32 | done 33 | echo "All build files are ready." 34 | 35 | - name: Get latest release upload URL 36 | id: get_latest_release 37 | run: | 38 | upload_url=$(gh release view --json uploadUrl -q .uploadUrl) 39 | echo "::set-output name=upload_url::$upload_url" 40 | env: 41 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 42 | 43 | - name: Upload preload.js 44 | id: upload-preload 45 | uses: actions/upload-release-asset@v1 46 | env: 47 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 48 | with: 49 | upload_url: ${{ steps.get_latest_release.outputs.upload_url }} 50 | asset_path: ./dist/preload.js 51 | asset_name: preload.js 52 | asset_content_type: text/javascript 53 | 54 | - name: Upload plugin.json 55 | id: upload-plugin 56 | uses: actions/upload-release-asset@v1 57 | env: 58 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 59 | with: 60 | upload_url: ${{ steps.get_latest_release.outputs.upload_url }} 61 | asset_path: ./dist/plugin.json 62 | asset_name: plugin.json 63 | asset_content_type: application/json 64 | 65 | - name: Upload index.htnl 66 | id: upload-index 67 | uses: actions/upload-release-asset@v1 68 | env: 69 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 70 | with: 71 | upload_url: ${{ steps.get_latest_release.outputs.upload_url }} 72 | asset_path: ./dist/index.html 73 | asset_name: index.html 74 | asset_content_type: text/html 75 | -------------------------------------------------------------------------------- /src/services/docs/uDoc.ts: -------------------------------------------------------------------------------- 1 | import type { IUniverUIConfig } from '@univerjs/ui' 2 | import { univerLocales } from '@/locales' 3 | import { LocaleType, Univer } from '@univerjs/core' 4 | import { defaultTheme } from '@univerjs/design' 5 | import { UniverDocsPlugin } from '@univerjs/docs' 6 | import { UniverDocsHyperLinkUIPlugin } from '@univerjs/docs-hyper-link-ui' 7 | import { UniverDocsThreadCommentUIPlugin } from '@univerjs/docs-thread-comment-ui' 8 | import { UniverDocsUIPlugin } from '@univerjs/docs-ui' 9 | import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula' 10 | import { UniverRenderEnginePlugin } from '@univerjs/engine-render' 11 | import { UniverUIPlugin } from '@univerjs/ui' 12 | 13 | export function docInit(option: IUniverUIConfig): Univer { 14 | // univer 15 | const univer = new Univer({ 16 | theme: defaultTheme, 17 | locale: LocaleType.ZH_CN, 18 | locales: univerLocales, 19 | }) 20 | 21 | // core plugins 22 | univer.registerPlugin(UniverRenderEnginePlugin) 23 | univer.registerPlugin(UniverFormulaEnginePlugin) 24 | univer.registerPlugin(UniverUIPlugin, option) 25 | 26 | univer.registerPlugin(UniverDocsPlugin) 27 | univer.registerPlugin(UniverDocsUIPlugin, { 28 | container: 'univerdoc', 29 | layout: { 30 | docContainerConfig: { 31 | innerLeft: false, 32 | }, 33 | }, 34 | }) 35 | 36 | univer.registerPlugin(UniverDocsThreadCommentUIPlugin) 37 | univer.registerPlugin(UniverDocsHyperLinkUIPlugin) 38 | 39 | // univer.createUnit(UniverInstanceType.UNIVER_DOC, {}) 40 | 41 | // window.univer = univer 42 | // const injector = univer.__getInjector() 43 | // const userManagerService = injector.get(UserManagerService) 44 | 45 | // const mockUser = { 46 | // userID: 'Owner_qxVnhPbQ', 47 | // name: 'Owner', 48 | // avatar: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAInSURBVHgBtZU9TxtBEIbfWRzFSIdkikhBSqRQkJqkCKTCFkqVInSUSaT0wC8w/gXxD4gU2nRJkXQWhAZowDUUWKIwEgWWbEEB3mVmx3dn4DA2nB/ppNuPeWd29mMIPXDr+RxwtgRHeW6+guNPRxogqnL7Dwz9psJ27S4NShaeZTH3kwXy6I81dlRKcmRui88swdq9AcSFL7Buz1Vmlns64MiLsCjzwnIYHLH57tbfFbs7KRaXyEU8FVZofqccOfA5l7Q8LPIkGrwnb2RPNEXWFVMUF3L+kDCk0btDDAMzOm5YfAHDwp4tG74wnzAsiOYMnJ3GoDybA7IT98/jm5+JNnfiIzAS6LlqHQBN/i6b2t/cV1Hh6BfwYlHnHP4AXi5q/8kmMMpOs8+BixZw/Fd6xUEHEbnkgclvQP2fGp7uShRKnQ3G32rkjV1th8JhIGG7tR/JyjGteSOZELwGMmNqIIigRCLRh2OZIE6BjItdd7pCW6Uhm1zzkUtungSxwEUzNpQ+GQumtH1ej1MqgmNT6vwmhCq5yuwq56EYTbgeQUz3yvrpV1b4ok3nYJ+eYhgYmjRUqErx2EDq0Fr8FhG++iqVGqxlUJI/70Ar0UgJaWHj6hYVHJrfKssAHot1JfqwE9WVWzXZVd5z2Ws/4PnmtEjkXeKJDvxUecLbWOXH/DP6QQ4J72NS0adedp1aseBfXP8odlZFfPvBF7SN/8hky1TYuPOAXAEipMx15u5ToAAAAABJRU5ErkJggg==', 49 | // anonymous: false, 50 | // canBindAnonymous: false, 51 | // } 52 | // userManagerService.setCurrentUser(mockUser) 53 | // window.uDocAPI = FUniver.newAPI(univer) 54 | 55 | return univer 56 | } 57 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # [Utools](https://www.u-tools.cn/) Plugin with [Univer](https://univer.ai/) 2 | 3 | The project is in the development stage. 🚧🚧🚧 4 | 5 | ## 🌈 How to use 6 | 7 | 1. Download uTools 8 | First, you need to download and install uTools. You can get the latest version from the official uTools website: [utools](https://www.u.tools/) 9 | 2. Install the uTools-Univer Plugin 10 | Open uTools and navigate to the **Plugin Store**. In the search bar, type the keyword "univer" or "超级表格". You will find the **uTools-Univer** plugin in the search result. 11 | 3. Install the Plugin 12 | Click on the uTools-Univer plugin in the search results and install it. 13 | 4. Launch the Plugin 14 | Once the plugin is installed, you can use it by opening uTools. Type the keyword "univer" in the uTools search bar, and the uTools-Univer plugin will appear. Click on it to launch the plugin and start using it. 15 | 5. ScreenShots 16 | ![img](./images/utools-univer.gif) 17 | 18 | ## ✨ Features 19 | 20 | **uTools-Univer** offers a variety of powerful features for spreadsheets, documents, and presentations. Here’s a quick overview: 21 | 22 | ### 📊 Univer Sheet 23 | 24 | - **Spreadsheet Basics**: Support for cells, rows, columns, worksheets, and workbooks. 25 | - **Formulas**: Includes math, statistical, logical, text, date/time, lookup, engineering, financial, and more. 26 | - **Permissions**: Control access to specific elements. 27 | - **Number Formatting**: Customize number formats based on criteria. 28 | - **Hyperlinks**: Add links to websites, emails, and internal locations. 29 | - **Floating Images**: Insert and position images anywhere in the sheet. 30 | - **Find & Replace**: Search and replace text within a sheet. 31 | - **Filtering & Sorting**: Easily filter and sort data. 32 | - **Data Validation**: Restrict cell input types. 33 | - **Conditional Formatting**: Apply formatting based on cell values. 34 | - **Comments**: Add comments to cells for extra context. 35 | - **Cross-highlighting**: Highlight related cells across the sheet. 36 | - **Pivot Tables**: Summarize and analyze data with pivot tables. 37 | 38 | ![img](./images/uSheets.gif) 39 | 40 | ### 📝 Univer Doc 41 | 42 | - **Core Features**: Support for paragraphs, headings, lists, superscripts, subscripts, etc. 43 | - **Lists**: Ordered, unordered, and task lists. 44 | - **Hyperlinks**: Insert links to websites, emails, and other document locations. 45 | - **Floating Images**: Insert images with flexible text wrapping. 46 | - **Headers & Footers**: Add headers and footers to documents. 47 | - **Comments**: Add comments for additional information. 48 | 49 | ![img](./images/uDoc.gif) 50 | 51 | ### 🗂️ Virtual File System in uTools DB 52 | 53 | - **Customizable Structure**: Create and manage folders to categorize your documents and spreadsheets. 54 | - **File Management**: Add, rename, move, and delete files within the virtual system. 55 | - **Organized Workspace**: Keep your projects and related files neatly arranged for easier navigation. 56 | 57 | ![img](./images/uManager.gif) 58 | -------------------------------------------------------------------------------- /public/favicon.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module", 3 | "version": "0.0.1", 4 | "private": true, 5 | "packageManager": "pnpm@9.12.0", 6 | "license": "MIT", 7 | "engines": { 8 | "node": ">=18", 9 | "pnpm": ">=9" 10 | }, 11 | "scripts": { 12 | "build": "pnpm zx script/build.mjs", 13 | "dev": "vite --port 3333 --open", 14 | "lint": "eslint .", 15 | "typecheck": "vue-tsc --noEmit", 16 | "preview": "vite preview", 17 | "test": "vitest", 18 | "up": "taze major -I", 19 | "postinstall": "npx simple-git-hooks", 20 | "release": "release-it" 21 | }, 22 | "dependencies": { 23 | "@univerjs/core": "^0.5.1", 24 | "@univerjs/design": "^0.5.1", 25 | "@univerjs/docs": "^0.5.1", 26 | "@univerjs/docs-hyper-link-ui": "^0.5.1", 27 | "@univerjs/docs-thread-comment-ui": "^0.5.1", 28 | "@univerjs/docs-ui": "^0.5.1", 29 | "@univerjs/engine-formula": "^0.5.1", 30 | "@univerjs/engine-render": "^0.5.1", 31 | "@univerjs/facade": "^0.5.1", 32 | "@univerjs/sheets": "^0.5.1", 33 | "@univerjs/sheets-conditional-formatting-ui": "^0.5.1", 34 | "@univerjs/sheets-crosshair-highlight": "^0.5.1", 35 | "@univerjs/sheets-data-validation-ui": "^0.5.1", 36 | "@univerjs/sheets-drawing-ui": "^0.5.1", 37 | "@univerjs/sheets-filter-ui": "^0.5.1", 38 | "@univerjs/sheets-find-replace": "^0.5.1", 39 | "@univerjs/sheets-formula": "^0.5.1", 40 | "@univerjs/sheets-formula-ui": "^0.5.1", 41 | "@univerjs/sheets-numfmt-ui": "^0.5.1", 42 | "@univerjs/sheets-sort": "^0.5.1", 43 | "@univerjs/sheets-sort-ui": "^0.5.1", 44 | "@univerjs/sheets-ui": "^0.5.1", 45 | "@univerjs/sheets-zen-editor": "^0.5.1", 46 | "@univerjs/ui": "^0.5.1", 47 | "@univerjs/uniscript": "^0.5.1", 48 | "@univerjs/watermark": "^0.5.1", 49 | "@vueuse/core": "^11.2.0", 50 | "nanoid": "^5.0.8", 51 | "vue": "^3.5.12" 52 | }, 53 | "devDependencies": { 54 | "@antfu/eslint-config": "^3.8.0", 55 | "@iconify-json/carbon": "^1.2.4", 56 | "@release-it/conventional-changelog": "^9.0.2", 57 | "@types/node": "^20.17.6", 58 | "@univerjs/vite-plugin": "^0.5.1", 59 | "@unocss/eslint-config": "^0.63.6", 60 | "@unocss/eslint-plugin": "^0.63.6", 61 | "@unocss/reset": "^0.63.6", 62 | "@vitejs/plugin-vue": "^5.1.4", 63 | "@vue-macros/volar": "^0.30.5", 64 | "@vue/test-utils": "^2.4.6", 65 | "eslint": "^9.14.0", 66 | "eslint-plugin-format": "^0.1.2", 67 | "fs-extra": "^11.2.0", 68 | "jsdom": "^25.0.1", 69 | "lint-staged": "^15.2.10", 70 | "pnpm": "^9.12.3", 71 | "release-it": "^17.10.0", 72 | "simple-git-hooks": "^2.11.1", 73 | "taze": "^0.18.0", 74 | "typescript": "^5.6.3", 75 | "unocss": "^0.63.6", 76 | "unplugin-auto-import": "^0.18.3", 77 | "unplugin-vue-components": "^0.27.4", 78 | "unplugin-vue-macros": "^2.13.3", 79 | "utools-api-types": "^5.2.0", 80 | "vite": "^5.4.10", 81 | "vite-plugin-node-polyfills": "^0.22.0", 82 | "vitest": "^2.1.4", 83 | "vue-tsc": "^2.1.10", 84 | "zx": "^8.2.0" 85 | }, 86 | "simple-git-hooks": { 87 | "pre-commit": "pnpm lint-staged" 88 | }, 89 | "lint-staged": { 90 | "*": "eslint --fix" 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/utils/univer.ts: -------------------------------------------------------------------------------- 1 | import { LocaleType, Tools, Univer } from '@univerjs/core' 2 | import { defaultTheme } from '@univerjs/design' 3 | import DesignEnUS from '@univerjs/design/locale/en-US' 4 | import DesignZhCN from '@univerjs/design/locale/zh-CN' 5 | import { UniverDocsPlugin } from '@univerjs/docs' 6 | import { UniverDocsUIPlugin } from '@univerjs/docs-ui' 7 | import DocsUIEnUS from '@univerjs/docs-ui/locale/en-US' 8 | import DocsUIZhCN from '@univerjs/docs-ui/locale/zh-CN' 9 | import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula' 10 | import { UniverRenderEnginePlugin } from '@univerjs/engine-render' 11 | import { UniverSheetsPlugin } from '@univerjs/sheets' 12 | import SheetsEnUS from '@univerjs/sheets/locale/en-US' 13 | import SheetsZhCN from '@univerjs/sheets/locale/zh-CN' 14 | import { UniverSheetsFormulaPlugin } from '@univerjs/sheets-formula' 15 | import { UniverSheetsFormulaUIPlugin } from '@univerjs/sheets-formula-ui' 16 | import SheetsFormulaUIEnUS from '@univerjs/sheets-formula-ui/locale/en-US' 17 | import SheetsFormulaUIZhCN from '@univerjs/sheets-formula-ui/locale/zh-CN' 18 | import { UniverSheetsSortPlugin } from '@univerjs/sheets-sort' 19 | import { UniverSheetsSortUIPlugin } from '@univerjs/sheets-sort-ui' 20 | import SheetsSortUIEnUS from '@univerjs/sheets-sort-ui/locale/en-US' 21 | import SheetsSortUIZhCN from '@univerjs/sheets-sort-ui/locale/zh-CN' 22 | import { UniverSheetsUIPlugin } from '@univerjs/sheets-ui' 23 | import SheetsUIEnUS from '@univerjs/sheets-ui/locale/en-US' 24 | import SheetsUIZhCN from '@univerjs/sheets-ui/locale/zh-CN' 25 | import { UniverSheetsZenEditorPlugin } from '@univerjs/sheets-zen-editor' 26 | import SheetsZenEditorEnUS from '@univerjs/sheets-zen-editor/locale/en-US' 27 | import SheetsZenEditorZhCN from '@univerjs/sheets-zen-editor/locale/zh-CN' 28 | import { UniverUIPlugin } from '@univerjs/ui' 29 | import UIEnUS from '@univerjs/ui/locale/en-US' 30 | import UIZhCN from '@univerjs/ui/locale/zh-CN' 31 | import '@univerjs/design/lib/index.css' 32 | import '@univerjs/ui/lib/index.css' 33 | import '@univerjs/docs-ui/lib/index.css' 34 | import '@univerjs/sheets-ui/lib/index.css' 35 | import '@univerjs/sheets-formula-ui/lib/index.css' 36 | import '@univerjs/sheets-sort-ui/lib/index.css' 37 | import '@univerjs/sheets-zen-editor/lib/index.css' 38 | 39 | export function init(option: any) { 40 | const univer = new Univer({ 41 | theme: defaultTheme, 42 | locale: LocaleType.ZH_CN, 43 | locales: { 44 | [LocaleType.EN_US]: Tools.deepMerge( 45 | SheetsEnUS, 46 | DocsUIEnUS, 47 | SheetsUIEnUS, 48 | SheetsFormulaUIEnUS, 49 | UIEnUS, 50 | DesignEnUS, 51 | SheetsSortUIEnUS, 52 | SheetsZenEditorEnUS, 53 | ), 54 | [LocaleType.ZH_CN]: Tools.deepMerge( 55 | SheetsZhCN, 56 | DocsUIZhCN, 57 | SheetsUIZhCN, 58 | SheetsFormulaUIZhCN, 59 | UIZhCN, 60 | DesignZhCN, 61 | SheetsSortUIZhCN, 62 | SheetsZenEditorZhCN, 63 | ), 64 | }, 65 | }) 66 | 67 | univer.registerPlugin(UniverRenderEnginePlugin) 68 | univer.registerPlugin(UniverFormulaEnginePlugin) 69 | 70 | univer.registerPlugin(UniverUIPlugin, option) 71 | 72 | univer.registerPlugin(UniverDocsPlugin) 73 | univer.registerPlugin(UniverDocsUIPlugin) 74 | 75 | univer.registerPlugin(UniverSheetsPlugin) 76 | univer.registerPlugin(UniverSheetsUIPlugin) 77 | univer.registerPlugin(UniverSheetsFormulaPlugin) 78 | univer.registerPlugin(UniverSheetsFormulaUIPlugin) 79 | univer.registerPlugin(UniverSheetsSortPlugin) 80 | univer.registerPlugin(UniverSheetsSortUIPlugin) 81 | univer.registerPlugin(UniverSheetsZenEditorPlugin) 82 | return univer 83 | } 84 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## 0.0.1 (2024-04-13) 4 | 5 | 6 | ### Bug Fixes 7 | 8 | * change payload to preload ([91c3f24](https://github.com/gjssss/utools-univer/commit/91c3f240b3eccd561ee073f8115c4d14cd4a2af3)) 9 | 10 | 11 | ### Features 12 | 13 | * add button ([0ebf7f2](https://github.com/gjssss/utools-univer/commit/0ebf7f212a4972257149cc3a827456957a9c25b8)) 14 | * add content menu ([4bf83b3](https://github.com/gjssss/utools-univer/commit/4bf83b333cedf5c118b110e2a9f0f6909c1577f2)) 15 | * add file opration ([de1b853](https://github.com/gjssss/utools-univer/commit/de1b8533040a6f9243690b588431766742b95bb3)) 16 | * add icon ([544ae7d](https://github.com/gjssss/utools-univer/commit/544ae7d59b96b9c7ab0f4973924ba49808e8ac7c)) 17 | * add menu ([d94c687](https://github.com/gjssss/utools-univer/commit/d94c687945f7d2be9b23c90b85bf6a178a6eeff9)) 18 | * add menu shadow ([ffd04fe](https://github.com/gjssss/utools-univer/commit/ffd04fedce990d9916b9d8c574892c5251924dc9)) 19 | * add modal ([d3eb4a8](https://github.com/gjssss/utools-univer/commit/d3eb4a8ac7f9d80169b99609f7c6e509b1a6675d)) 20 | * add the delete composable func ([c059814](https://github.com/gjssss/utools-univer/commit/c059814eddc787f6fa255f047f41ca11d2a1034c)) 21 | * add the delete file and delete category ([b05519d](https://github.com/gjssss/utools-univer/commit/b05519d5e15787a3719e86426481e03b2f09697f)) 22 | * change empty text ([9a915b2](https://github.com/gjssss/utools-univer/commit/9a915b2e30f41f2e6f60cf9ad3ac01a0a48f7683)) 23 | * confirm delete and rename category ([7336bd0](https://github.com/gjssss/utools-univer/commit/7336bd01037b19433850bb0789723c3d19a2f77a)) 24 | * delete category and rename file ([e50fdee](https://github.com/gjssss/utools-univer/commit/e50fdee1ec7aabe1ba93552e968edf0280805bfa)) 25 | * init repo ([943f1b1](https://github.com/gjssss/utools-univer/commit/943f1b15b007658df14e0162468bb847a7221263)) 26 | * rename file ([39291e4](https://github.com/gjssss/utools-univer/commit/39291e4b02ca1a84ba3925c8b9bad547d8ffb5a1)) 27 | * update readme ([2ef5047](https://github.com/gjssss/utools-univer/commit/2ef5047fc45a19ecaeb3759b5878ef60260f1888)) 28 | * useCatelogue ([5ab743f](https://github.com/gjssss/utools-univer/commit/5ab743f4d6088d4240226be7bb154958f35126da)) 29 | * useData ([882019f](https://github.com/gjssss/utools-univer/commit/882019f2cb8edbe21ada12c971a048b6bfe35637)) 30 | 31 | ## 0.0.1 (2024-04-13) 32 | 33 | 34 | ### Bug Fixes 35 | 36 | * change payload to preload ([91c3f24](https://github.com/gjssss/utools-univer/commit/91c3f240b3eccd561ee073f8115c4d14cd4a2af3)) 37 | 38 | 39 | ### Features 40 | 41 | * add button ([0ebf7f2](https://github.com/gjssss/utools-univer/commit/0ebf7f212a4972257149cc3a827456957a9c25b8)) 42 | * add content menu ([4bf83b3](https://github.com/gjssss/utools-univer/commit/4bf83b333cedf5c118b110e2a9f0f6909c1577f2)) 43 | * add file opration ([de1b853](https://github.com/gjssss/utools-univer/commit/de1b8533040a6f9243690b588431766742b95bb3)) 44 | * add icon ([544ae7d](https://github.com/gjssss/utools-univer/commit/544ae7d59b96b9c7ab0f4973924ba49808e8ac7c)) 45 | * add menu ([d94c687](https://github.com/gjssss/utools-univer/commit/d94c687945f7d2be9b23c90b85bf6a178a6eeff9)) 46 | * add menu shadow ([ffd04fe](https://github.com/gjssss/utools-univer/commit/ffd04fedce990d9916b9d8c574892c5251924dc9)) 47 | * add modal ([d3eb4a8](https://github.com/gjssss/utools-univer/commit/d3eb4a8ac7f9d80169b99609f7c6e509b1a6675d)) 48 | * add the delete composable func ([c059814](https://github.com/gjssss/utools-univer/commit/c059814eddc787f6fa255f047f41ca11d2a1034c)) 49 | * add the delete file and delete category ([b05519d](https://github.com/gjssss/utools-univer/commit/b05519d5e15787a3719e86426481e03b2f09697f)) 50 | * change empty text ([9a915b2](https://github.com/gjssss/utools-univer/commit/9a915b2e30f41f2e6f60cf9ad3ac01a0a48f7683)) 51 | * confirm delete and rename category ([7336bd0](https://github.com/gjssss/utools-univer/commit/7336bd01037b19433850bb0789723c3d19a2f77a)) 52 | * delete category and rename file ([e50fdee](https://github.com/gjssss/utools-univer/commit/e50fdee1ec7aabe1ba93552e968edf0280805bfa)) 53 | * init repo ([943f1b1](https://github.com/gjssss/utools-univer/commit/943f1b15b007658df14e0162468bb847a7221263)) 54 | * rename file ([39291e4](https://github.com/gjssss/utools-univer/commit/39291e4b02ca1a84ba3925c8b9bad547d8ffb5a1)) 55 | * update readme ([2ef5047](https://github.com/gjssss/utools-univer/commit/2ef5047fc45a19ecaeb3759b5878ef60260f1888)) 56 | * useCatelogue ([5ab743f](https://github.com/gjssss/utools-univer/commit/5ab743f4d6088d4240226be7bb154958f35126da)) 57 | * useData ([882019f](https://github.com/gjssss/utools-univer/commit/882019f2cb8edbe21ada12c971a048b6bfe35637)) 58 | -------------------------------------------------------------------------------- /src/services/sheets/uSheet.ts: -------------------------------------------------------------------------------- 1 | import type { IUniverUIConfig } from '@univerjs/ui' 2 | import { univerLocales } from '@/locales' 3 | import { LocaleType, Univer, UserManagerService } from '@univerjs/core' 4 | import { defaultTheme } from '@univerjs/design' 5 | import { UniverDocsPlugin } from '@univerjs/docs' 6 | import { UniverDocsUIPlugin } from '@univerjs/docs-ui' 7 | import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula' 8 | import { UniverRenderEnginePlugin } from '@univerjs/engine-render' 9 | import { FUniver } from '@univerjs/facade' 10 | import { UniverSheetsPlugin } from '@univerjs/sheets' 11 | import { UniverSheetsConditionalFormattingPlugin } from '@univerjs/sheets-conditional-formatting' 12 | import { UniverSheetsDataValidationPlugin } from '@univerjs/sheets-data-validation' 13 | import { UniverSheetsFilterPlugin } from '@univerjs/sheets-filter' 14 | import { UniverSheetsFormulaPlugin } from '@univerjs/sheets-formula' 15 | import { UniverSheetsFormulaUIPlugin } from '@univerjs/sheets-formula-ui' 16 | import { UniverSheetsHyperLinkPlugin } from '@univerjs/sheets-hyper-link' 17 | import { UniverSheetsNumfmtPlugin } from '@univerjs/sheets-numfmt' 18 | import { UniverSheetsNumfmtUIPlugin } from '@univerjs/sheets-numfmt-ui' 19 | import { UniverSheetsSortPlugin } from '@univerjs/sheets-sort' 20 | import { UniverSheetsThreadCommentPlugin } from '@univerjs/sheets-thread-comment' 21 | import { UniverSheetsUIPlugin } from '@univerjs/sheets-ui' 22 | import { UniverSheetsZenEditorPlugin } from '@univerjs/sheets-zen-editor' 23 | import { UniverThreadCommentUIPlugin } from '@univerjs/thread-comment-ui' 24 | import { UniverUIPlugin } from '@univerjs/ui' 25 | import { mockUser } from './customMentionDataService' 26 | 27 | import '@univerjs/sheets/facade' 28 | import '@univerjs/ui/facade' 29 | import '@univerjs/docs-ui/facade' 30 | import '@univerjs/sheets-ui/facade' 31 | import '@univerjs/sheets-data-validation/facade' 32 | import '@univerjs/engine-formula/facade' 33 | import '@univerjs/sheets-filter/facade' 34 | import '@univerjs/sheets-formula/facade' 35 | import '@univerjs/sheets-numfmt/facade' 36 | import '@univerjs/sheets-hyper-link-ui/facade' 37 | import '@univerjs/sheets-thread-comment/facade' 38 | 39 | const LOAD_LAZY_PLUGINS_TIMEOUT = 1_000 40 | const LOAD_VERY_LAZY_PLUGINS_TIMEOUT = 3_000 41 | 42 | export function sheetInit(option: IUniverUIConfig) { 43 | const univer = new Univer({ 44 | theme: defaultTheme, 45 | locale: LocaleType.ZH_CN, 46 | locales: univerLocales, 47 | }) 48 | // register the univer core engine 49 | univer.registerPlugin(UniverRenderEnginePlugin) 50 | univer.registerPlugin(UniverUIPlugin, option) 51 | // sheets based on doc 52 | univer.registerPlugin(UniverDocsPlugin) 53 | univer.registerPlugin(UniverDocsUIPlugin) 54 | // register the sheets, if no webworker, then set notExecuteFormula to false 55 | univer.registerPlugin(UniverSheetsPlugin, { notExecuteFormula: false }) 56 | univer.registerPlugin(UniverSheetsUIPlugin) 57 | // 58 | univer.registerPlugin(UniverSheetsNumfmtPlugin) 59 | // zen model 60 | univer.registerPlugin(UniverSheetsZenEditorPlugin) 61 | // formula 62 | univer.registerPlugin(UniverFormulaEnginePlugin, { notExecuteFormula: false }) 63 | univer.registerPlugin(UniverSheetsNumfmtUIPlugin) 64 | univer.registerPlugin(UniverSheetsFormulaPlugin, { notExecuteFormula: false }) 65 | univer.registerPlugin(UniverSheetsFormulaUIPlugin) 66 | // data validation 67 | univer.registerPlugin(UniverSheetsDataValidationPlugin) 68 | // sheets condition 69 | univer.registerPlugin(UniverSheetsConditionalFormattingPlugin) 70 | // filter 71 | univer.registerPlugin(UniverSheetsFilterPlugin) 72 | // sort 73 | univer.registerPlugin(UniverSheetsSortPlugin) 74 | // hyper link 75 | univer.registerPlugin(UniverSheetsHyperLinkPlugin) 76 | // comment 77 | univer.registerPlugin(UniverThreadCommentUIPlugin) 78 | univer.registerPlugin(UniverSheetsThreadCommentPlugin) 79 | 80 | const injector = univer.__getInjector() 81 | const userManagerService = injector.get(UserManagerService) 82 | userManagerService.setCurrentUser(mockUser) 83 | 84 | setTimeout(() => { 85 | import('./lazy').then((lazy) => { 86 | const plugins = lazy.default() 87 | plugins.forEach(p => univer.registerPlugin(p[0], p[1])) 88 | }) 89 | }, LOAD_LAZY_PLUGINS_TIMEOUT) 90 | 91 | setTimeout(() => { 92 | import('./very-lazy').then((lazy) => { 93 | const plugins = lazy.default() 94 | plugins.forEach(p => univer.registerPlugin(p[0], p[1])) 95 | }) 96 | }, LOAD_VERY_LAZY_PLUGINS_TIMEOUT) 97 | 98 | window.uSheetAPI = FUniver.newAPI(univer) 99 | 100 | return univer 101 | } 102 | -------------------------------------------------------------------------------- /server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "server", 8 | "devDependencies": { 9 | "vite": "^5.4.10", 10 | "vite-plugin-dts": "^4.3.0" 11 | } 12 | }, 13 | "../node_modules/.pnpm/vite-plugin-dts@4.3.0_@types+node@20.17.6_rollup@4.24.4_typescript@5.6.3_vite@5.4.10_@types+node@20.17.6_/node_modules/vite-plugin-dts": { 14 | "version": "4.3.0", 15 | "dev": true, 16 | "license": "MIT", 17 | "dependencies": { 18 | "@microsoft/api-extractor": "^7.47.11", 19 | "@rollup/pluginutils": "^5.1.0", 20 | "@volar/typescript": "^2.4.4", 21 | "@vue/language-core": "2.1.6", 22 | "compare-versions": "^6.1.1", 23 | "debug": "^4.3.6", 24 | "kolorist": "^1.8.0", 25 | "local-pkg": "^0.5.0", 26 | "magic-string": "^0.30.11" 27 | }, 28 | "devDependencies": { 29 | "@commitlint/cli": "^19.3.0", 30 | "@types/debug": "^4.1.12", 31 | "@types/minimist": "^1.2.5", 32 | "@types/node": "^20.14.11", 33 | "@types/prompts": "^2.4.9", 34 | "@types/semver": "^7.5.8", 35 | "@vexip-ui/commitlint-config": "^0.5.0", 36 | "@vexip-ui/eslint-config": "^0.12.1", 37 | "@vexip-ui/prettier-config": "^1.0.0", 38 | "@vue/eslint-config-standard": "^8.0.1", 39 | "@vue/eslint-config-typescript": "^13.0.0", 40 | "conventional-changelog-cli": "^5.0.0", 41 | "eslint": "^8.57.0", 42 | "execa": "^8.0.1", 43 | "husky": "^8.0.3", 44 | "is-ci": "^3.0.1", 45 | "lint-staged": "^15.2.7", 46 | "minimist": "^1.2.8", 47 | "pinst": "^3.0.0", 48 | "prettier": "^3.3.3", 49 | "pretty-quick": "^4.0.0", 50 | "prompts": "^2.4.2", 51 | "rimraf": "^6.0.1", 52 | "semver": "^7.6.3", 53 | "tsx": "^4.16.2", 54 | "typescript": "5.6.3", 55 | "unbuild": "^2.0.0", 56 | "vite": "^5.3.5", 57 | "vitest": "^2.0.4" 58 | }, 59 | "engines": { 60 | "node": "^14.18.0 || >=16.0.0" 61 | }, 62 | "peerDependencies": { 63 | "typescript": "*", 64 | "vite": "*" 65 | }, 66 | "peerDependenciesMeta": { 67 | "vite": { 68 | "optional": true 69 | } 70 | } 71 | }, 72 | "../node_modules/.pnpm/vite@5.4.10_@types+node@20.17.6/node_modules/vite": { 73 | "version": "5.4.10", 74 | "dev": true, 75 | "license": "MIT", 76 | "dependencies": { 77 | "esbuild": "^0.21.3", 78 | "postcss": "^8.4.43", 79 | "rollup": "^4.20.0" 80 | }, 81 | "bin": { 82 | "vite": "bin/vite.js" 83 | }, 84 | "devDependencies": { 85 | "@ampproject/remapping": "^2.3.0", 86 | "@babel/parser": "^7.25.6", 87 | "@jridgewell/trace-mapping": "^0.3.25", 88 | "@polka/compression": "^1.0.0-next.25", 89 | "@rollup/plugin-alias": "^5.1.0", 90 | "@rollup/plugin-commonjs": "^26.0.1", 91 | "@rollup/plugin-dynamic-import-vars": "^2.1.2", 92 | "@rollup/plugin-json": "^6.1.0", 93 | "@rollup/plugin-node-resolve": "15.2.3", 94 | "@rollup/pluginutils": "^5.1.0", 95 | "@types/escape-html": "^1.0.4", 96 | "@types/pnpapi": "^0.0.5", 97 | "artichokie": "^0.2.1", 98 | "cac": "^6.7.14", 99 | "chokidar": "^3.6.0", 100 | "connect": "^3.7.0", 101 | "convert-source-map": "^2.0.0", 102 | "cors": "^2.8.5", 103 | "cross-spawn": "^7.0.3", 104 | "debug": "^4.3.6", 105 | "dep-types": "link:./src/types", 106 | "dotenv": "^16.4.5", 107 | "dotenv-expand": "^11.0.6", 108 | "es-module-lexer": "^1.5.4", 109 | "escape-html": "^1.0.3", 110 | "estree-walker": "^3.0.3", 111 | "etag": "^1.8.1", 112 | "fast-glob": "^3.3.2", 113 | "http-proxy": "^1.18.1", 114 | "launch-editor-middleware": "^2.9.1", 115 | "lightningcss": "^1.26.0", 116 | "magic-string": "^0.30.11", 117 | "micromatch": "^4.0.8", 118 | "mlly": "^1.7.1", 119 | "mrmime": "^2.0.0", 120 | "open": "^8.4.2", 121 | "parse5": "^7.1.2", 122 | "pathe": "^1.1.2", 123 | "periscopic": "^4.0.2", 124 | "picocolors": "^1.0.1", 125 | "picomatch": "^2.3.1", 126 | "postcss-import": "^16.1.0", 127 | "postcss-load-config": "^4.0.2", 128 | "postcss-modules": "^6.0.0", 129 | "resolve.exports": "^2.0.2", 130 | "rollup-plugin-dts": "^6.1.1", 131 | "rollup-plugin-esbuild": "^6.1.1", 132 | "rollup-plugin-license": "^3.5.2", 133 | "sass": "^1.77.8", 134 | "sass-embedded": "^1.77.8", 135 | "sirv": "^2.0.4", 136 | "source-map-support": "^0.5.21", 137 | "strip-ansi": "^7.1.0", 138 | "strip-literal": "^2.1.0", 139 | "tsconfck": "^3.1.4", 140 | "tslib": "^2.7.0", 141 | "types": "link:./types", 142 | "ufo": "^1.5.4", 143 | "ws": "^8.18.0" 144 | }, 145 | "engines": { 146 | "node": "^18.0.0 || >=20.0.0" 147 | }, 148 | "funding": { 149 | "url": "https://github.com/vitejs/vite?sponsor=1" 150 | }, 151 | "optionalDependencies": { 152 | "fsevents": "~2.3.3" 153 | }, 154 | "peerDependencies": { 155 | "@types/node": "^18.0.0 || >=20.0.0", 156 | "less": "*", 157 | "lightningcss": "^1.21.0", 158 | "sass": "*", 159 | "sass-embedded": "*", 160 | "stylus": "*", 161 | "sugarss": "*", 162 | "terser": "^5.4.0" 163 | }, 164 | "peerDependenciesMeta": { 165 | "@types/node": { 166 | "optional": true 167 | }, 168 | "less": { 169 | "optional": true 170 | }, 171 | "lightningcss": { 172 | "optional": true 173 | }, 174 | "sass": { 175 | "optional": true 176 | }, 177 | "sass-embedded": { 178 | "optional": true 179 | }, 180 | "stylus": { 181 | "optional": true 182 | }, 183 | "sugarss": { 184 | "optional": true 185 | }, 186 | "terser": { 187 | "optional": true 188 | } 189 | } 190 | }, 191 | "node_modules/vite": { 192 | "resolved": "../node_modules/.pnpm/vite@5.4.10_@types+node@20.17.6/node_modules/vite", 193 | "link": true 194 | }, 195 | "node_modules/vite-plugin-dts": { 196 | "resolved": "../node_modules/.pnpm/vite-plugin-dts@4.3.0_@types+node@20.17.6_rollup@4.24.4_typescript@5.6.3_vite@5.4.10_@types+node@20.17.6_/node_modules/vite-plugin-dts", 197 | "link": true 198 | } 199 | } 200 | } 201 | -------------------------------------------------------------------------------- /src/components/FileMenu.vue: -------------------------------------------------------------------------------- 1 | 123 | 124 | 212 | 213 | 240 | -------------------------------------------------------------------------------- /auto-imports.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /* prettier-ignore */ 3 | // @ts-nocheck 4 | // noinspection JSUnusedGlobalSymbols 5 | // Generated by unplugin-auto-import 6 | // biome-ignore lint: disable 7 | export {} 8 | declare global { 9 | const EffectScope: typeof import('vue')['EffectScope'] 10 | const FileTYpe: typeof import('./src/composables/store')['FileTYpe'] 11 | const FileType: typeof import('./src/composables/store')['FileType'] 12 | const addFile: typeof import('./src/composables/file')['addFile'] 13 | const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] 14 | const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] 15 | const computed: typeof import('vue')['computed'] 16 | const computedAsync: typeof import('@vueuse/core')['computedAsync'] 17 | const computedEager: typeof import('@vueuse/core')['computedEager'] 18 | const computedInject: typeof import('@vueuse/core')['computedInject'] 19 | const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] 20 | const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] 21 | const controlledRef: typeof import('@vueuse/core')['controlledRef'] 22 | const createApp: typeof import('vue')['createApp'] 23 | const createEventHook: typeof import('@vueuse/core')['createEventHook'] 24 | const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] 25 | const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] 26 | const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] 27 | const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] 28 | const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] 29 | const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise'] 30 | const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] 31 | const customRef: typeof import('vue')['customRef'] 32 | const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] 33 | const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] 34 | const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] 35 | const defineComponent: typeof import('vue')['defineComponent'] 36 | const defineLoader: typeof import('vue-router/auto')['defineLoader'] 37 | const definePage: typeof import('unplugin-vue-router/runtime')['definePage'] 38 | const deleteFile: typeof import('./src/utils/file')['deleteFile'] 39 | const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] 40 | const effectScope: typeof import('vue')['effectScope'] 41 | const extendRef: typeof import('@vueuse/core')['extendRef'] 42 | const getCurrentInstance: typeof import('vue')['getCurrentInstance'] 43 | const getCurrentScope: typeof import('vue')['getCurrentScope'] 44 | const getData: typeof import('./src/composables/file')['getData'] 45 | const getFile: typeof import('./src/utils/file')['getFile'] 46 | const h: typeof import('vue')['h'] 47 | const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] 48 | const init: typeof import('./src/utils/univer')['init'] 49 | const inject: typeof import('vue')['inject'] 50 | const injectLocal: typeof import('@vueuse/core')['injectLocal'] 51 | const isDark: typeof import('./src/composables/dark')['isDark'] 52 | const isDefined: typeof import('@vueuse/core')['isDefined'] 53 | const isProxy: typeof import('vue')['isProxy'] 54 | const isReactive: typeof import('vue')['isReactive'] 55 | const isReadonly: typeof import('vue')['isReadonly'] 56 | const isRef: typeof import('vue')['isRef'] 57 | const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] 58 | const markRaw: typeof import('vue')['markRaw'] 59 | const nextTick: typeof import('vue')['nextTick'] 60 | const onActivated: typeof import('vue')['onActivated'] 61 | const onBeforeMount: typeof import('vue')['onBeforeMount'] 62 | const onBeforeRouteLeave: typeof import('vue-router/auto')['onBeforeRouteLeave'] 63 | const onBeforeRouteUpdate: typeof import('vue-router/auto')['onBeforeRouteUpdate'] 64 | const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] 65 | const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] 66 | const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] 67 | const onDeactivated: typeof import('vue')['onDeactivated'] 68 | const onErrorCaptured: typeof import('vue')['onErrorCaptured'] 69 | const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] 70 | const onLongPress: typeof import('@vueuse/core')['onLongPress'] 71 | const onMounted: typeof import('vue')['onMounted'] 72 | const onRenderTracked: typeof import('vue')['onRenderTracked'] 73 | const onRenderTriggered: typeof import('vue')['onRenderTriggered'] 74 | const onScopeDispose: typeof import('vue')['onScopeDispose'] 75 | const onServerPrefetch: typeof import('vue')['onServerPrefetch'] 76 | const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] 77 | const onUnmounted: typeof import('vue')['onUnmounted'] 78 | const onUpdated: typeof import('vue')['onUpdated'] 79 | const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] 80 | const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] 81 | const provide: typeof import('vue')['provide'] 82 | const provideLocal: typeof import('@vueuse/core')['provideLocal'] 83 | const reactify: typeof import('@vueuse/core')['reactify'] 84 | const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] 85 | const reactive: typeof import('vue')['reactive'] 86 | const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] 87 | const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] 88 | const reactivePick: typeof import('@vueuse/core')['reactivePick'] 89 | const readonly: typeof import('vue')['readonly'] 90 | const ref: typeof import('vue')['ref'] 91 | const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] 92 | const refDebounced: typeof import('@vueuse/core')['refDebounced'] 93 | const refDefault: typeof import('@vueuse/core')['refDefault'] 94 | const refThrottled: typeof import('@vueuse/core')['refThrottled'] 95 | const refWithControl: typeof import('@vueuse/core')['refWithControl'] 96 | const renameFile: typeof import('./src/composables/file')['renameFile'] 97 | const resolveComponent: typeof import('vue')['resolveComponent'] 98 | const resolveRef: typeof import('@vueuse/core')['resolveRef'] 99 | const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] 100 | const setFile: typeof import('./src/utils/file')['setFile'] 101 | const shallowReactive: typeof import('vue')['shallowReactive'] 102 | const shallowReadonly: typeof import('vue')['shallowReadonly'] 103 | const shallowRef: typeof import('vue')['shallowRef'] 104 | const sleep: typeof import('./src/utils/sleep')['sleep'] 105 | const syncRef: typeof import('@vueuse/core')['syncRef'] 106 | const syncRefs: typeof import('@vueuse/core')['syncRefs'] 107 | const templateRef: typeof import('@vueuse/core')['templateRef'] 108 | const test: typeof import('./src/utils/file')['test'] 109 | const throttledRef: typeof import('@vueuse/core')['throttledRef'] 110 | const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] 111 | const toRaw: typeof import('vue')['toRaw'] 112 | const toReactive: typeof import('@vueuse/core')['toReactive'] 113 | const toRef: typeof import('vue')['toRef'] 114 | const toRefs: typeof import('vue')['toRefs'] 115 | const toValue: typeof import('vue')['toValue'] 116 | const toggleDark: typeof import('./src/composables/dark')['toggleDark'] 117 | const triggerRef: typeof import('vue')['triggerRef'] 118 | const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] 119 | const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] 120 | const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] 121 | const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] 122 | const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] 123 | const unref: typeof import('vue')['unref'] 124 | const unrefElement: typeof import('@vueuse/core')['unrefElement'] 125 | const until: typeof import('@vueuse/core')['until'] 126 | const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] 127 | const useAnimate: typeof import('@vueuse/core')['useAnimate'] 128 | const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] 129 | const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] 130 | const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] 131 | const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] 132 | const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] 133 | const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast'] 134 | const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes'] 135 | const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] 136 | const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] 137 | const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] 138 | const useArraySome: typeof import('@vueuse/core')['useArraySome'] 139 | const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique'] 140 | const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] 141 | const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] 142 | const useAttrs: typeof import('vue')['useAttrs'] 143 | const useBase64: typeof import('@vueuse/core')['useBase64'] 144 | const useBattery: typeof import('@vueuse/core')['useBattery'] 145 | const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] 146 | const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] 147 | const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] 148 | const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] 149 | const useCached: typeof import('@vueuse/core')['useCached'] 150 | const useCatalogue: typeof import('./src/composables/useCatalogue')['useCatalogue'] 151 | const useClipboard: typeof import('@vueuse/core')['useClipboard'] 152 | const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems'] 153 | const useCloned: typeof import('@vueuse/core')['useCloned'] 154 | const useColorMode: typeof import('@vueuse/core')['useColorMode'] 155 | const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] 156 | const useCounter: typeof import('@vueuse/core')['useCounter'] 157 | const useCssModule: typeof import('vue')['useCssModule'] 158 | const useCssVar: typeof import('@vueuse/core')['useCssVar'] 159 | const useCssVars: typeof import('vue')['useCssVars'] 160 | const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] 161 | const useCycleList: typeof import('@vueuse/core')['useCycleList'] 162 | const useDark: typeof import('@vueuse/core')['useDark'] 163 | const useData: typeof import('./src/composables/useData')['useData'] 164 | const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] 165 | const useDebounce: typeof import('@vueuse/core')['useDebounce'] 166 | const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] 167 | const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] 168 | const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] 169 | const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] 170 | const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] 171 | const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] 172 | const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] 173 | const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] 174 | const useDraggable: typeof import('@vueuse/core')['useDraggable'] 175 | const useDropZone: typeof import('@vueuse/core')['useDropZone'] 176 | const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] 177 | const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] 178 | const useElementHover: typeof import('@vueuse/core')['useElementHover'] 179 | const useElementSize: typeof import('@vueuse/core')['useElementSize'] 180 | const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] 181 | const useEventBus: typeof import('@vueuse/core')['useEventBus'] 182 | const useEventListener: typeof import('@vueuse/core')['useEventListener'] 183 | const useEventSource: typeof import('@vueuse/core')['useEventSource'] 184 | const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] 185 | const useFavicon: typeof import('@vueuse/core')['useFavicon'] 186 | const useFetch: typeof import('@vueuse/core')['useFetch'] 187 | const useFile: typeof import('./src/composables/useFile')['useFile'] 188 | const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] 189 | const useFileManager: typeof import('./src/composables/file')['useFileManager'] 190 | const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] 191 | const useFocus: typeof import('@vueuse/core')['useFocus'] 192 | const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] 193 | const useFps: typeof import('@vueuse/core')['useFps'] 194 | const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] 195 | const useGamepad: typeof import('@vueuse/core')['useGamepad'] 196 | const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] 197 | const useId: typeof import('vue')['useId'] 198 | const useIdle: typeof import('@vueuse/core')['useIdle'] 199 | const useImage: typeof import('@vueuse/core')['useImage'] 200 | const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] 201 | const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] 202 | const useInterval: typeof import('@vueuse/core')['useInterval'] 203 | const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] 204 | const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] 205 | const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] 206 | const useLink: typeof import('vue-router/auto')['useLink'] 207 | const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] 208 | const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] 209 | const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] 210 | const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] 211 | const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] 212 | const useMemoize: typeof import('@vueuse/core')['useMemoize'] 213 | const useMemory: typeof import('@vueuse/core')['useMemory'] 214 | const useModel: typeof import('vue')['useModel'] 215 | const useMounted: typeof import('@vueuse/core')['useMounted'] 216 | const useMouse: typeof import('@vueuse/core')['useMouse'] 217 | const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] 218 | const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] 219 | const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] 220 | const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] 221 | const useNetwork: typeof import('@vueuse/core')['useNetwork'] 222 | const useNow: typeof import('@vueuse/core')['useNow'] 223 | const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] 224 | const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] 225 | const useOnline: typeof import('@vueuse/core')['useOnline'] 226 | const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] 227 | const useParallax: typeof import('@vueuse/core')['useParallax'] 228 | const useParentElement: typeof import('@vueuse/core')['useParentElement'] 229 | const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver'] 230 | const usePermission: typeof import('@vueuse/core')['usePermission'] 231 | const usePointer: typeof import('@vueuse/core')['usePointer'] 232 | const usePointerLock: typeof import('@vueuse/core')['usePointerLock'] 233 | const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] 234 | const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] 235 | const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast'] 236 | const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] 237 | const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] 238 | const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] 239 | const usePrevious: typeof import('@vueuse/core')['usePrevious'] 240 | const useRafFn: typeof import('@vueuse/core')['useRafFn'] 241 | const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] 242 | const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] 243 | const useRoute: typeof import('vue-router/auto')['useRoute'] 244 | const useRouter: typeof import('vue-router/auto')['useRouter'] 245 | const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] 246 | const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] 247 | const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] 248 | const useScroll: typeof import('@vueuse/core')['useScroll'] 249 | const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] 250 | const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] 251 | const useShare: typeof import('@vueuse/core')['useShare'] 252 | const useSlots: typeof import('vue')['useSlots'] 253 | const useSorted: typeof import('@vueuse/core')['useSorted'] 254 | const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] 255 | const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] 256 | const useStepper: typeof import('@vueuse/core')['useStepper'] 257 | const useStorage: typeof import('@vueuse/core')['useStorage'] 258 | const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] 259 | const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] 260 | const useSupported: typeof import('@vueuse/core')['useSupported'] 261 | const useSwipe: typeof import('@vueuse/core')['useSwipe'] 262 | const useSystemStore: typeof import('./src/composables/store')['useSystemStore'] 263 | const useTemplateRef: typeof import('vue')['useTemplateRef'] 264 | const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] 265 | const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] 266 | const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] 267 | const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] 268 | const useThrottle: typeof import('@vueuse/core')['useThrottle'] 269 | const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] 270 | const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] 271 | const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] 272 | const useTimeout: typeof import('@vueuse/core')['useTimeout'] 273 | const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] 274 | const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] 275 | const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] 276 | const useTitle: typeof import('@vueuse/core')['useTitle'] 277 | const useToNumber: typeof import('@vueuse/core')['useToNumber'] 278 | const useToString: typeof import('@vueuse/core')['useToString'] 279 | const useToggle: typeof import('@vueuse/core')['useToggle'] 280 | const useTransition: typeof import('@vueuse/core')['useTransition'] 281 | const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] 282 | const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] 283 | const useVModel: typeof import('@vueuse/core')['useVModel'] 284 | const useVModels: typeof import('@vueuse/core')['useVModels'] 285 | const useVibrate: typeof import('@vueuse/core')['useVibrate'] 286 | const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] 287 | const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] 288 | const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] 289 | const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] 290 | const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] 291 | const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] 292 | const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] 293 | const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] 294 | const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] 295 | const utoolsPolyfill: typeof import('./src/utils/utools.polyfill')['utoolsPolyfill'] 296 | const watch: typeof import('vue')['watch'] 297 | const watchArray: typeof import('@vueuse/core')['watchArray'] 298 | const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] 299 | const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] 300 | const watchDeep: typeof import('@vueuse/core')['watchDeep'] 301 | const watchEffect: typeof import('vue')['watchEffect'] 302 | const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] 303 | const watchImmediate: typeof import('@vueuse/core')['watchImmediate'] 304 | const watchOnce: typeof import('@vueuse/core')['watchOnce'] 305 | const watchPausable: typeof import('@vueuse/core')['watchPausable'] 306 | const watchPostEffect: typeof import('vue')['watchPostEffect'] 307 | const watchSyncEffect: typeof import('vue')['watchSyncEffect'] 308 | const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] 309 | const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] 310 | const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] 311 | const whenever: typeof import('@vueuse/core')['whenever'] 312 | } 313 | // for type re-export 314 | declare global { 315 | // @ts-ignore 316 | export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' 317 | import('vue') 318 | // @ts-ignore 319 | export type { FileType } from './src/composables/store' 320 | import('./src/composables/store') 321 | } 322 | // for vue template auto import 323 | import { UnwrapRef } from 'vue' 324 | declare module 'vue' { 325 | interface GlobalComponents {} 326 | interface ComponentCustomProperties { 327 | readonly EffectScope: UnwrapRef 328 | readonly FileType: UnwrapRef 329 | readonly asyncComputed: UnwrapRef 330 | readonly autoResetRef: UnwrapRef 331 | readonly computed: UnwrapRef 332 | readonly computedAsync: UnwrapRef 333 | readonly computedEager: UnwrapRef 334 | readonly computedInject: UnwrapRef 335 | readonly computedWithControl: UnwrapRef 336 | readonly controlledComputed: UnwrapRef 337 | readonly controlledRef: UnwrapRef 338 | readonly createApp: UnwrapRef 339 | readonly createEventHook: UnwrapRef 340 | readonly createGlobalState: UnwrapRef 341 | readonly createInjectionState: UnwrapRef 342 | readonly createReactiveFn: UnwrapRef 343 | readonly createReusableTemplate: UnwrapRef 344 | readonly createSharedComposable: UnwrapRef 345 | readonly createTemplatePromise: UnwrapRef 346 | readonly createUnrefFn: UnwrapRef 347 | readonly customRef: UnwrapRef 348 | readonly debouncedRef: UnwrapRef 349 | readonly debouncedWatch: UnwrapRef 350 | readonly defineAsyncComponent: UnwrapRef 351 | readonly defineComponent: UnwrapRef 352 | readonly deleteFile: UnwrapRef 353 | readonly eagerComputed: UnwrapRef 354 | readonly effectScope: UnwrapRef 355 | readonly extendRef: UnwrapRef 356 | readonly getCurrentInstance: UnwrapRef 357 | readonly getCurrentScope: UnwrapRef 358 | readonly getFile: UnwrapRef 359 | readonly h: UnwrapRef 360 | readonly ignorableWatch: UnwrapRef 361 | readonly init: UnwrapRef 362 | readonly inject: UnwrapRef 363 | readonly injectLocal: UnwrapRef 364 | readonly isDark: UnwrapRef 365 | readonly isDefined: UnwrapRef 366 | readonly isProxy: UnwrapRef 367 | readonly isReactive: UnwrapRef 368 | readonly isReadonly: UnwrapRef 369 | readonly isRef: UnwrapRef 370 | readonly makeDestructurable: UnwrapRef 371 | readonly markRaw: UnwrapRef 372 | readonly nextTick: UnwrapRef 373 | readonly onActivated: UnwrapRef 374 | readonly onBeforeMount: UnwrapRef 375 | readonly onBeforeUnmount: UnwrapRef 376 | readonly onBeforeUpdate: UnwrapRef 377 | readonly onClickOutside: UnwrapRef 378 | readonly onDeactivated: UnwrapRef 379 | readonly onErrorCaptured: UnwrapRef 380 | readonly onKeyStroke: UnwrapRef 381 | readonly onLongPress: UnwrapRef 382 | readonly onMounted: UnwrapRef 383 | readonly onRenderTracked: UnwrapRef 384 | readonly onRenderTriggered: UnwrapRef 385 | readonly onScopeDispose: UnwrapRef 386 | readonly onServerPrefetch: UnwrapRef 387 | readonly onStartTyping: UnwrapRef 388 | readonly onUnmounted: UnwrapRef 389 | readonly onUpdated: UnwrapRef 390 | readonly onWatcherCleanup: UnwrapRef 391 | readonly pausableWatch: UnwrapRef 392 | readonly provide: UnwrapRef 393 | readonly provideLocal: UnwrapRef 394 | readonly reactify: UnwrapRef 395 | readonly reactifyObject: UnwrapRef 396 | readonly reactive: UnwrapRef 397 | readonly reactiveComputed: UnwrapRef 398 | readonly reactiveOmit: UnwrapRef 399 | readonly reactivePick: UnwrapRef 400 | readonly readonly: UnwrapRef 401 | readonly ref: UnwrapRef 402 | readonly refAutoReset: UnwrapRef 403 | readonly refDebounced: UnwrapRef 404 | readonly refDefault: UnwrapRef 405 | readonly refThrottled: UnwrapRef 406 | readonly refWithControl: UnwrapRef 407 | readonly resolveComponent: UnwrapRef 408 | readonly resolveRef: UnwrapRef 409 | readonly resolveUnref: UnwrapRef 410 | readonly setFile: UnwrapRef 411 | readonly shallowReactive: UnwrapRef 412 | readonly shallowReadonly: UnwrapRef 413 | readonly shallowRef: UnwrapRef 414 | readonly sleep: UnwrapRef 415 | readonly syncRef: UnwrapRef 416 | readonly syncRefs: UnwrapRef 417 | readonly templateRef: UnwrapRef 418 | readonly throttledRef: UnwrapRef 419 | readonly throttledWatch: UnwrapRef 420 | readonly toRaw: UnwrapRef 421 | readonly toReactive: UnwrapRef 422 | readonly toRef: UnwrapRef 423 | readonly toRefs: UnwrapRef 424 | readonly toValue: UnwrapRef 425 | readonly toggleDark: UnwrapRef 426 | readonly triggerRef: UnwrapRef 427 | readonly tryOnBeforeMount: UnwrapRef 428 | readonly tryOnBeforeUnmount: UnwrapRef 429 | readonly tryOnMounted: UnwrapRef 430 | readonly tryOnScopeDispose: UnwrapRef 431 | readonly tryOnUnmounted: UnwrapRef 432 | readonly unref: UnwrapRef 433 | readonly unrefElement: UnwrapRef 434 | readonly until: UnwrapRef 435 | readonly useActiveElement: UnwrapRef 436 | readonly useAnimate: UnwrapRef 437 | readonly useArrayDifference: UnwrapRef 438 | readonly useArrayEvery: UnwrapRef 439 | readonly useArrayFilter: UnwrapRef 440 | readonly useArrayFind: UnwrapRef 441 | readonly useArrayFindIndex: UnwrapRef 442 | readonly useArrayFindLast: UnwrapRef 443 | readonly useArrayIncludes: UnwrapRef 444 | readonly useArrayJoin: UnwrapRef 445 | readonly useArrayMap: UnwrapRef 446 | readonly useArrayReduce: UnwrapRef 447 | readonly useArraySome: UnwrapRef 448 | readonly useArrayUnique: UnwrapRef 449 | readonly useAsyncQueue: UnwrapRef 450 | readonly useAsyncState: UnwrapRef 451 | readonly useAttrs: UnwrapRef 452 | readonly useBase64: UnwrapRef 453 | readonly useBattery: UnwrapRef 454 | readonly useBluetooth: UnwrapRef 455 | readonly useBreakpoints: UnwrapRef 456 | readonly useBroadcastChannel: UnwrapRef 457 | readonly useBrowserLocation: UnwrapRef 458 | readonly useCached: UnwrapRef 459 | readonly useCatalogue: UnwrapRef 460 | readonly useClipboard: UnwrapRef 461 | readonly useClipboardItems: UnwrapRef 462 | readonly useCloned: UnwrapRef 463 | readonly useColorMode: UnwrapRef 464 | readonly useConfirmDialog: UnwrapRef 465 | readonly useCounter: UnwrapRef 466 | readonly useCssModule: UnwrapRef 467 | readonly useCssVar: UnwrapRef 468 | readonly useCssVars: UnwrapRef 469 | readonly useCurrentElement: UnwrapRef 470 | readonly useCycleList: UnwrapRef 471 | readonly useDark: UnwrapRef 472 | readonly useData: UnwrapRef 473 | readonly useDateFormat: UnwrapRef 474 | readonly useDebounce: UnwrapRef 475 | readonly useDebounceFn: UnwrapRef 476 | readonly useDebouncedRefHistory: UnwrapRef 477 | readonly useDeviceMotion: UnwrapRef 478 | readonly useDeviceOrientation: UnwrapRef 479 | readonly useDevicePixelRatio: UnwrapRef 480 | readonly useDevicesList: UnwrapRef 481 | readonly useDisplayMedia: UnwrapRef 482 | readonly useDocumentVisibility: UnwrapRef 483 | readonly useDraggable: UnwrapRef 484 | readonly useDropZone: UnwrapRef 485 | readonly useElementBounding: UnwrapRef 486 | readonly useElementByPoint: UnwrapRef 487 | readonly useElementHover: UnwrapRef 488 | readonly useElementSize: UnwrapRef 489 | readonly useElementVisibility: UnwrapRef 490 | readonly useEventBus: UnwrapRef 491 | readonly useEventListener: UnwrapRef 492 | readonly useEventSource: UnwrapRef 493 | readonly useEyeDropper: UnwrapRef 494 | readonly useFavicon: UnwrapRef 495 | readonly useFetch: UnwrapRef 496 | readonly useFileDialog: UnwrapRef 497 | readonly useFileSystemAccess: UnwrapRef 498 | readonly useFocus: UnwrapRef 499 | readonly useFocusWithin: UnwrapRef 500 | readonly useFps: UnwrapRef 501 | readonly useFullscreen: UnwrapRef 502 | readonly useGamepad: UnwrapRef 503 | readonly useGeolocation: UnwrapRef 504 | readonly useId: UnwrapRef 505 | readonly useIdle: UnwrapRef 506 | readonly useImage: UnwrapRef 507 | readonly useInfiniteScroll: UnwrapRef 508 | readonly useIntersectionObserver: UnwrapRef 509 | readonly useInterval: UnwrapRef 510 | readonly useIntervalFn: UnwrapRef 511 | readonly useKeyModifier: UnwrapRef 512 | readonly useLastChanged: UnwrapRef 513 | readonly useLocalStorage: UnwrapRef 514 | readonly useMagicKeys: UnwrapRef 515 | readonly useManualRefHistory: UnwrapRef 516 | readonly useMediaControls: UnwrapRef 517 | readonly useMediaQuery: UnwrapRef 518 | readonly useMemoize: UnwrapRef 519 | readonly useMemory: UnwrapRef 520 | readonly useModel: UnwrapRef 521 | readonly useMounted: UnwrapRef 522 | readonly useMouse: UnwrapRef 523 | readonly useMouseInElement: UnwrapRef 524 | readonly useMousePressed: UnwrapRef 525 | readonly useMutationObserver: UnwrapRef 526 | readonly useNavigatorLanguage: UnwrapRef 527 | readonly useNetwork: UnwrapRef 528 | readonly useNow: UnwrapRef 529 | readonly useObjectUrl: UnwrapRef 530 | readonly useOffsetPagination: UnwrapRef 531 | readonly useOnline: UnwrapRef 532 | readonly usePageLeave: UnwrapRef 533 | readonly useParallax: UnwrapRef 534 | readonly useParentElement: UnwrapRef 535 | readonly usePerformanceObserver: UnwrapRef 536 | readonly usePermission: UnwrapRef 537 | readonly usePointer: UnwrapRef 538 | readonly usePointerLock: UnwrapRef 539 | readonly usePointerSwipe: UnwrapRef 540 | readonly usePreferredColorScheme: UnwrapRef 541 | readonly usePreferredContrast: UnwrapRef 542 | readonly usePreferredDark: UnwrapRef 543 | readonly usePreferredLanguages: UnwrapRef 544 | readonly usePreferredReducedMotion: UnwrapRef 545 | readonly usePrevious: UnwrapRef 546 | readonly useRafFn: UnwrapRef 547 | readonly useRefHistory: UnwrapRef 548 | readonly useResizeObserver: UnwrapRef 549 | readonly useScreenOrientation: UnwrapRef 550 | readonly useScreenSafeArea: UnwrapRef 551 | readonly useScriptTag: UnwrapRef 552 | readonly useScroll: UnwrapRef 553 | readonly useScrollLock: UnwrapRef 554 | readonly useSessionStorage: UnwrapRef 555 | readonly useShare: UnwrapRef 556 | readonly useSlots: UnwrapRef 557 | readonly useSorted: UnwrapRef 558 | readonly useSpeechRecognition: UnwrapRef 559 | readonly useSpeechSynthesis: UnwrapRef 560 | readonly useStepper: UnwrapRef 561 | readonly useStorage: UnwrapRef 562 | readonly useStorageAsync: UnwrapRef 563 | readonly useStyleTag: UnwrapRef 564 | readonly useSupported: UnwrapRef 565 | readonly useSwipe: UnwrapRef 566 | readonly useSystemStore: UnwrapRef 567 | readonly useTemplateRef: UnwrapRef 568 | readonly useTemplateRefsList: UnwrapRef 569 | readonly useTextDirection: UnwrapRef 570 | readonly useTextSelection: UnwrapRef 571 | readonly useTextareaAutosize: UnwrapRef 572 | readonly useThrottle: UnwrapRef 573 | readonly useThrottleFn: UnwrapRef 574 | readonly useThrottledRefHistory: UnwrapRef 575 | readonly useTimeAgo: UnwrapRef 576 | readonly useTimeout: UnwrapRef 577 | readonly useTimeoutFn: UnwrapRef 578 | readonly useTimeoutPoll: UnwrapRef 579 | readonly useTimestamp: UnwrapRef 580 | readonly useTitle: UnwrapRef 581 | readonly useToNumber: UnwrapRef 582 | readonly useToString: UnwrapRef 583 | readonly useToggle: UnwrapRef 584 | readonly useTransition: UnwrapRef 585 | readonly useUrlSearchParams: UnwrapRef 586 | readonly useUserMedia: UnwrapRef 587 | readonly useVModel: UnwrapRef 588 | readonly useVModels: UnwrapRef 589 | readonly useVibrate: UnwrapRef 590 | readonly useVirtualList: UnwrapRef 591 | readonly useWakeLock: UnwrapRef 592 | readonly useWebNotification: UnwrapRef 593 | readonly useWebSocket: UnwrapRef 594 | readonly useWebWorker: UnwrapRef 595 | readonly useWebWorkerFn: UnwrapRef 596 | readonly useWindowFocus: UnwrapRef 597 | readonly useWindowScroll: UnwrapRef 598 | readonly useWindowSize: UnwrapRef 599 | readonly utoolsPolyfill: UnwrapRef 600 | readonly watch: UnwrapRef 601 | readonly watchArray: UnwrapRef 602 | readonly watchAtMost: UnwrapRef 603 | readonly watchDebounced: UnwrapRef 604 | readonly watchDeep: UnwrapRef 605 | readonly watchEffect: UnwrapRef 606 | readonly watchIgnorable: UnwrapRef 607 | readonly watchImmediate: UnwrapRef 608 | readonly watchOnce: UnwrapRef 609 | readonly watchPausable: UnwrapRef 610 | readonly watchPostEffect: UnwrapRef 611 | readonly watchSyncEffect: UnwrapRef 612 | readonly watchThrottled: UnwrapRef 613 | readonly watchTriggerable: UnwrapRef 614 | readonly watchWithFilter: UnwrapRef 615 | readonly whenever: UnwrapRef 616 | } 617 | } 618 | -------------------------------------------------------------------------------- /test/auto-imports.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /* prettier-ignore */ 3 | // @ts-nocheck 4 | // noinspection JSUnusedGlobalSymbols 5 | // Generated by unplugin-auto-import 6 | export {} 7 | declare global { 8 | const EffectScope: typeof import('vue')['EffectScope'] 9 | const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] 10 | const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] 11 | const computed: typeof import('vue')['computed'] 12 | const computedAsync: typeof import('@vueuse/core')['computedAsync'] 13 | const computedEager: typeof import('@vueuse/core')['computedEager'] 14 | const computedInject: typeof import('@vueuse/core')['computedInject'] 15 | const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] 16 | const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] 17 | const controlledRef: typeof import('@vueuse/core')['controlledRef'] 18 | const createApp: typeof import('vue')['createApp'] 19 | const createEventHook: typeof import('@vueuse/core')['createEventHook'] 20 | const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] 21 | const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] 22 | const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] 23 | const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] 24 | const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] 25 | const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise'] 26 | const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] 27 | const customRef: typeof import('vue')['customRef'] 28 | const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] 29 | const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] 30 | const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] 31 | const defineComponent: typeof import('vue')['defineComponent'] 32 | const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] 33 | const effectScope: typeof import('vue')['effectScope'] 34 | const extendRef: typeof import('@vueuse/core')['extendRef'] 35 | const getCurrentInstance: typeof import('vue')['getCurrentInstance'] 36 | const getCurrentScope: typeof import('vue')['getCurrentScope'] 37 | const h: typeof import('vue')['h'] 38 | const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] 39 | const inject: typeof import('vue')['inject'] 40 | const injectLocal: typeof import('@vueuse/core')['injectLocal'] 41 | const isDefined: typeof import('@vueuse/core')['isDefined'] 42 | const isProxy: typeof import('vue')['isProxy'] 43 | const isReactive: typeof import('vue')['isReactive'] 44 | const isReadonly: typeof import('vue')['isReadonly'] 45 | const isRef: typeof import('vue')['isRef'] 46 | const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] 47 | const markRaw: typeof import('vue')['markRaw'] 48 | const nextTick: typeof import('vue')['nextTick'] 49 | const onActivated: typeof import('vue')['onActivated'] 50 | const onBeforeMount: typeof import('vue')['onBeforeMount'] 51 | const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] 52 | const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] 53 | const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] 54 | const onDeactivated: typeof import('vue')['onDeactivated'] 55 | const onErrorCaptured: typeof import('vue')['onErrorCaptured'] 56 | const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] 57 | const onLongPress: typeof import('@vueuse/core')['onLongPress'] 58 | const onMounted: typeof import('vue')['onMounted'] 59 | const onRenderTracked: typeof import('vue')['onRenderTracked'] 60 | const onRenderTriggered: typeof import('vue')['onRenderTriggered'] 61 | const onScopeDispose: typeof import('vue')['onScopeDispose'] 62 | const onServerPrefetch: typeof import('vue')['onServerPrefetch'] 63 | const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] 64 | const onUnmounted: typeof import('vue')['onUnmounted'] 65 | const onUpdated: typeof import('vue')['onUpdated'] 66 | const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] 67 | const provide: typeof import('vue')['provide'] 68 | const provideLocal: typeof import('@vueuse/core')['provideLocal'] 69 | const reactify: typeof import('@vueuse/core')['reactify'] 70 | const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] 71 | const reactive: typeof import('vue')['reactive'] 72 | const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] 73 | const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] 74 | const reactivePick: typeof import('@vueuse/core')['reactivePick'] 75 | const readonly: typeof import('vue')['readonly'] 76 | const ref: typeof import('vue')['ref'] 77 | const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] 78 | const refDebounced: typeof import('@vueuse/core')['refDebounced'] 79 | const refDefault: typeof import('@vueuse/core')['refDefault'] 80 | const refThrottled: typeof import('@vueuse/core')['refThrottled'] 81 | const refWithControl: typeof import('@vueuse/core')['refWithControl'] 82 | const resolveComponent: typeof import('vue')['resolveComponent'] 83 | const resolveRef: typeof import('@vueuse/core')['resolveRef'] 84 | const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] 85 | const shallowReactive: typeof import('vue')['shallowReactive'] 86 | const shallowReadonly: typeof import('vue')['shallowReadonly'] 87 | const shallowRef: typeof import('vue')['shallowRef'] 88 | const syncRef: typeof import('@vueuse/core')['syncRef'] 89 | const syncRefs: typeof import('@vueuse/core')['syncRefs'] 90 | const templateRef: typeof import('@vueuse/core')['templateRef'] 91 | const throttledRef: typeof import('@vueuse/core')['throttledRef'] 92 | const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] 93 | const toRaw: typeof import('vue')['toRaw'] 94 | const toReactive: typeof import('@vueuse/core')['toReactive'] 95 | const toRef: typeof import('vue')['toRef'] 96 | const toRefs: typeof import('vue')['toRefs'] 97 | const toValue: typeof import('vue')['toValue'] 98 | const triggerRef: typeof import('vue')['triggerRef'] 99 | const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] 100 | const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] 101 | const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] 102 | const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] 103 | const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] 104 | const unref: typeof import('vue')['unref'] 105 | const unrefElement: typeof import('@vueuse/core')['unrefElement'] 106 | const until: typeof import('@vueuse/core')['until'] 107 | const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] 108 | const useAnimate: typeof import('@vueuse/core')['useAnimate'] 109 | const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] 110 | const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] 111 | const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] 112 | const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] 113 | const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] 114 | const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast'] 115 | const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes'] 116 | const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] 117 | const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] 118 | const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] 119 | const useArraySome: typeof import('@vueuse/core')['useArraySome'] 120 | const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique'] 121 | const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] 122 | const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] 123 | const useAttrs: typeof import('vue')['useAttrs'] 124 | const useBase64: typeof import('@vueuse/core')['useBase64'] 125 | const useBattery: typeof import('@vueuse/core')['useBattery'] 126 | const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] 127 | const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] 128 | const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] 129 | const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] 130 | const useCached: typeof import('@vueuse/core')['useCached'] 131 | const useClipboard: typeof import('@vueuse/core')['useClipboard'] 132 | const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems'] 133 | const useCloned: typeof import('@vueuse/core')['useCloned'] 134 | const useColorMode: typeof import('@vueuse/core')['useColorMode'] 135 | const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] 136 | const useCounter: typeof import('@vueuse/core')['useCounter'] 137 | const useCssModule: typeof import('vue')['useCssModule'] 138 | const useCssVar: typeof import('@vueuse/core')['useCssVar'] 139 | const useCssVars: typeof import('vue')['useCssVars'] 140 | const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] 141 | const useCycleList: typeof import('@vueuse/core')['useCycleList'] 142 | const useDark: typeof import('@vueuse/core')['useDark'] 143 | const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] 144 | const useDebounce: typeof import('@vueuse/core')['useDebounce'] 145 | const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] 146 | const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] 147 | const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] 148 | const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] 149 | const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] 150 | const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] 151 | const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] 152 | const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] 153 | const useDraggable: typeof import('@vueuse/core')['useDraggable'] 154 | const useDropZone: typeof import('@vueuse/core')['useDropZone'] 155 | const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] 156 | const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] 157 | const useElementHover: typeof import('@vueuse/core')['useElementHover'] 158 | const useElementSize: typeof import('@vueuse/core')['useElementSize'] 159 | const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] 160 | const useEventBus: typeof import('@vueuse/core')['useEventBus'] 161 | const useEventListener: typeof import('@vueuse/core')['useEventListener'] 162 | const useEventSource: typeof import('@vueuse/core')['useEventSource'] 163 | const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] 164 | const useFavicon: typeof import('@vueuse/core')['useFavicon'] 165 | const useFetch: typeof import('@vueuse/core')['useFetch'] 166 | const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] 167 | const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] 168 | const useFocus: typeof import('@vueuse/core')['useFocus'] 169 | const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] 170 | const useFps: typeof import('@vueuse/core')['useFps'] 171 | const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] 172 | const useGamepad: typeof import('@vueuse/core')['useGamepad'] 173 | const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] 174 | const useIdle: typeof import('@vueuse/core')['useIdle'] 175 | const useImage: typeof import('@vueuse/core')['useImage'] 176 | const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] 177 | const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] 178 | const useInterval: typeof import('@vueuse/core')['useInterval'] 179 | const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] 180 | const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] 181 | const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] 182 | const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] 183 | const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] 184 | const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] 185 | const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] 186 | const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] 187 | const useMemoize: typeof import('@vueuse/core')['useMemoize'] 188 | const useMemory: typeof import('@vueuse/core')['useMemory'] 189 | const useMounted: typeof import('@vueuse/core')['useMounted'] 190 | const useMouse: typeof import('@vueuse/core')['useMouse'] 191 | const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] 192 | const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] 193 | const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] 194 | const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] 195 | const useNetwork: typeof import('@vueuse/core')['useNetwork'] 196 | const useNow: typeof import('@vueuse/core')['useNow'] 197 | const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] 198 | const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] 199 | const useOnline: typeof import('@vueuse/core')['useOnline'] 200 | const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] 201 | const useParallax: typeof import('@vueuse/core')['useParallax'] 202 | const useParentElement: typeof import('@vueuse/core')['useParentElement'] 203 | const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver'] 204 | const usePermission: typeof import('@vueuse/core')['usePermission'] 205 | const usePointer: typeof import('@vueuse/core')['usePointer'] 206 | const usePointerLock: typeof import('@vueuse/core')['usePointerLock'] 207 | const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] 208 | const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] 209 | const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast'] 210 | const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] 211 | const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] 212 | const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] 213 | const usePrevious: typeof import('@vueuse/core')['usePrevious'] 214 | const useRafFn: typeof import('@vueuse/core')['useRafFn'] 215 | const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] 216 | const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] 217 | const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] 218 | const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] 219 | const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] 220 | const useScroll: typeof import('@vueuse/core')['useScroll'] 221 | const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] 222 | const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] 223 | const useShare: typeof import('@vueuse/core')['useShare'] 224 | const useSlots: typeof import('vue')['useSlots'] 225 | const useSorted: typeof import('@vueuse/core')['useSorted'] 226 | const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] 227 | const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] 228 | const useStepper: typeof import('@vueuse/core')['useStepper'] 229 | const useStorage: typeof import('@vueuse/core')['useStorage'] 230 | const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] 231 | const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] 232 | const useSupported: typeof import('@vueuse/core')['useSupported'] 233 | const useSwipe: typeof import('@vueuse/core')['useSwipe'] 234 | const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] 235 | const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] 236 | const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] 237 | const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] 238 | const useThrottle: typeof import('@vueuse/core')['useThrottle'] 239 | const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] 240 | const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] 241 | const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] 242 | const useTimeout: typeof import('@vueuse/core')['useTimeout'] 243 | const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] 244 | const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] 245 | const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] 246 | const useTitle: typeof import('@vueuse/core')['useTitle'] 247 | const useToNumber: typeof import('@vueuse/core')['useToNumber'] 248 | const useToString: typeof import('@vueuse/core')['useToString'] 249 | const useToggle: typeof import('@vueuse/core')['useToggle'] 250 | const useTransition: typeof import('@vueuse/core')['useTransition'] 251 | const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] 252 | const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] 253 | const useVModel: typeof import('@vueuse/core')['useVModel'] 254 | const useVModels: typeof import('@vueuse/core')['useVModels'] 255 | const useVibrate: typeof import('@vueuse/core')['useVibrate'] 256 | const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] 257 | const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] 258 | const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] 259 | const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] 260 | const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] 261 | const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] 262 | const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] 263 | const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] 264 | const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] 265 | const watch: typeof import('vue')['watch'] 266 | const watchArray: typeof import('@vueuse/core')['watchArray'] 267 | const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] 268 | const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] 269 | const watchDeep: typeof import('@vueuse/core')['watchDeep'] 270 | const watchEffect: typeof import('vue')['watchEffect'] 271 | const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] 272 | const watchImmediate: typeof import('@vueuse/core')['watchImmediate'] 273 | const watchOnce: typeof import('@vueuse/core')['watchOnce'] 274 | const watchPausable: typeof import('@vueuse/core')['watchPausable'] 275 | const watchPostEffect: typeof import('vue')['watchPostEffect'] 276 | const watchSyncEffect: typeof import('vue')['watchSyncEffect'] 277 | const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] 278 | const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] 279 | const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] 280 | const whenever: typeof import('@vueuse/core')['whenever'] 281 | } 282 | // for type re-export 283 | declare global { 284 | // @ts-ignore 285 | export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' 286 | import('vue') 287 | } 288 | // for vue template auto import 289 | import { UnwrapRef } from 'vue' 290 | declare module 'vue' { 291 | interface GlobalComponents {} 292 | interface ComponentCustomProperties { 293 | readonly EffectScope: UnwrapRef 294 | readonly asyncComputed: UnwrapRef 295 | readonly autoResetRef: UnwrapRef 296 | readonly computed: UnwrapRef 297 | readonly computedAsync: UnwrapRef 298 | readonly computedEager: UnwrapRef 299 | readonly computedInject: UnwrapRef 300 | readonly computedWithControl: UnwrapRef 301 | readonly controlledComputed: UnwrapRef 302 | readonly controlledRef: UnwrapRef 303 | readonly createApp: UnwrapRef 304 | readonly createEventHook: UnwrapRef 305 | readonly createGlobalState: UnwrapRef 306 | readonly createInjectionState: UnwrapRef 307 | readonly createReactiveFn: UnwrapRef 308 | readonly createReusableTemplate: UnwrapRef 309 | readonly createSharedComposable: UnwrapRef 310 | readonly createTemplatePromise: UnwrapRef 311 | readonly createUnrefFn: UnwrapRef 312 | readonly customRef: UnwrapRef 313 | readonly debouncedRef: UnwrapRef 314 | readonly debouncedWatch: UnwrapRef 315 | readonly defineAsyncComponent: UnwrapRef 316 | readonly defineComponent: UnwrapRef 317 | readonly eagerComputed: UnwrapRef 318 | readonly effectScope: UnwrapRef 319 | readonly extendRef: UnwrapRef 320 | readonly getCurrentInstance: UnwrapRef 321 | readonly getCurrentScope: UnwrapRef 322 | readonly h: UnwrapRef 323 | readonly ignorableWatch: UnwrapRef 324 | readonly inject: UnwrapRef 325 | readonly injectLocal: UnwrapRef 326 | readonly isDefined: UnwrapRef 327 | readonly isProxy: UnwrapRef 328 | readonly isReactive: UnwrapRef 329 | readonly isReadonly: UnwrapRef 330 | readonly isRef: UnwrapRef 331 | readonly makeDestructurable: UnwrapRef 332 | readonly markRaw: UnwrapRef 333 | readonly nextTick: UnwrapRef 334 | readonly onActivated: UnwrapRef 335 | readonly onBeforeMount: UnwrapRef 336 | readonly onBeforeUnmount: UnwrapRef 337 | readonly onBeforeUpdate: UnwrapRef 338 | readonly onClickOutside: UnwrapRef 339 | readonly onDeactivated: UnwrapRef 340 | readonly onErrorCaptured: UnwrapRef 341 | readonly onKeyStroke: UnwrapRef 342 | readonly onLongPress: UnwrapRef 343 | readonly onMounted: UnwrapRef 344 | readonly onRenderTracked: UnwrapRef 345 | readonly onRenderTriggered: UnwrapRef 346 | readonly onScopeDispose: UnwrapRef 347 | readonly onServerPrefetch: UnwrapRef 348 | readonly onStartTyping: UnwrapRef 349 | readonly onUnmounted: UnwrapRef 350 | readonly onUpdated: UnwrapRef 351 | readonly pausableWatch: UnwrapRef 352 | readonly provide: UnwrapRef 353 | readonly provideLocal: UnwrapRef 354 | readonly reactify: UnwrapRef 355 | readonly reactifyObject: UnwrapRef 356 | readonly reactive: UnwrapRef 357 | readonly reactiveComputed: UnwrapRef 358 | readonly reactiveOmit: UnwrapRef 359 | readonly reactivePick: UnwrapRef 360 | readonly readonly: UnwrapRef 361 | readonly ref: UnwrapRef 362 | readonly refAutoReset: UnwrapRef 363 | readonly refDebounced: UnwrapRef 364 | readonly refDefault: UnwrapRef 365 | readonly refThrottled: UnwrapRef 366 | readonly refWithControl: UnwrapRef 367 | readonly resolveComponent: UnwrapRef 368 | readonly resolveRef: UnwrapRef 369 | readonly resolveUnref: UnwrapRef 370 | readonly shallowReactive: UnwrapRef 371 | readonly shallowReadonly: UnwrapRef 372 | readonly shallowRef: UnwrapRef 373 | readonly syncRef: UnwrapRef 374 | readonly syncRefs: UnwrapRef 375 | readonly templateRef: UnwrapRef 376 | readonly throttledRef: UnwrapRef 377 | readonly throttledWatch: UnwrapRef 378 | readonly toRaw: UnwrapRef 379 | readonly toReactive: UnwrapRef 380 | readonly toRef: UnwrapRef 381 | readonly toRefs: UnwrapRef 382 | readonly toValue: UnwrapRef 383 | readonly triggerRef: UnwrapRef 384 | readonly tryOnBeforeMount: UnwrapRef 385 | readonly tryOnBeforeUnmount: UnwrapRef 386 | readonly tryOnMounted: UnwrapRef 387 | readonly tryOnScopeDispose: UnwrapRef 388 | readonly tryOnUnmounted: UnwrapRef 389 | readonly unref: UnwrapRef 390 | readonly unrefElement: UnwrapRef 391 | readonly until: UnwrapRef 392 | readonly useActiveElement: UnwrapRef 393 | readonly useAnimate: UnwrapRef 394 | readonly useArrayDifference: UnwrapRef 395 | readonly useArrayEvery: UnwrapRef 396 | readonly useArrayFilter: UnwrapRef 397 | readonly useArrayFind: UnwrapRef 398 | readonly useArrayFindIndex: UnwrapRef 399 | readonly useArrayFindLast: UnwrapRef 400 | readonly useArrayIncludes: UnwrapRef 401 | readonly useArrayJoin: UnwrapRef 402 | readonly useArrayMap: UnwrapRef 403 | readonly useArrayReduce: UnwrapRef 404 | readonly useArraySome: UnwrapRef 405 | readonly useArrayUnique: UnwrapRef 406 | readonly useAsyncQueue: UnwrapRef 407 | readonly useAsyncState: UnwrapRef 408 | readonly useAttrs: UnwrapRef 409 | readonly useBase64: UnwrapRef 410 | readonly useBattery: UnwrapRef 411 | readonly useBluetooth: UnwrapRef 412 | readonly useBreakpoints: UnwrapRef 413 | readonly useBroadcastChannel: UnwrapRef 414 | readonly useBrowserLocation: UnwrapRef 415 | readonly useCached: UnwrapRef 416 | readonly useClipboard: UnwrapRef 417 | readonly useClipboardItems: UnwrapRef 418 | readonly useCloned: UnwrapRef 419 | readonly useColorMode: UnwrapRef 420 | readonly useConfirmDialog: UnwrapRef 421 | readonly useCounter: UnwrapRef 422 | readonly useCssModule: UnwrapRef 423 | readonly useCssVar: UnwrapRef 424 | readonly useCssVars: UnwrapRef 425 | readonly useCurrentElement: UnwrapRef 426 | readonly useCycleList: UnwrapRef 427 | readonly useDark: UnwrapRef 428 | readonly useDateFormat: UnwrapRef 429 | readonly useDebounce: UnwrapRef 430 | readonly useDebounceFn: UnwrapRef 431 | readonly useDebouncedRefHistory: UnwrapRef 432 | readonly useDeviceMotion: UnwrapRef 433 | readonly useDeviceOrientation: UnwrapRef 434 | readonly useDevicePixelRatio: UnwrapRef 435 | readonly useDevicesList: UnwrapRef 436 | readonly useDisplayMedia: UnwrapRef 437 | readonly useDocumentVisibility: UnwrapRef 438 | readonly useDraggable: UnwrapRef 439 | readonly useDropZone: UnwrapRef 440 | readonly useElementBounding: UnwrapRef 441 | readonly useElementByPoint: UnwrapRef 442 | readonly useElementHover: UnwrapRef 443 | readonly useElementSize: UnwrapRef 444 | readonly useElementVisibility: UnwrapRef 445 | readonly useEventBus: UnwrapRef 446 | readonly useEventListener: UnwrapRef 447 | readonly useEventSource: UnwrapRef 448 | readonly useEyeDropper: UnwrapRef 449 | readonly useFavicon: UnwrapRef 450 | readonly useFetch: UnwrapRef 451 | readonly useFileDialog: UnwrapRef 452 | readonly useFileSystemAccess: UnwrapRef 453 | readonly useFocus: UnwrapRef 454 | readonly useFocusWithin: UnwrapRef 455 | readonly useFps: UnwrapRef 456 | readonly useFullscreen: UnwrapRef 457 | readonly useGamepad: UnwrapRef 458 | readonly useGeolocation: UnwrapRef 459 | readonly useIdle: UnwrapRef 460 | readonly useImage: UnwrapRef 461 | readonly useInfiniteScroll: UnwrapRef 462 | readonly useIntersectionObserver: UnwrapRef 463 | readonly useInterval: UnwrapRef 464 | readonly useIntervalFn: UnwrapRef 465 | readonly useKeyModifier: UnwrapRef 466 | readonly useLastChanged: UnwrapRef 467 | readonly useLocalStorage: UnwrapRef 468 | readonly useMagicKeys: UnwrapRef 469 | readonly useManualRefHistory: UnwrapRef 470 | readonly useMediaControls: UnwrapRef 471 | readonly useMediaQuery: UnwrapRef 472 | readonly useMemoize: UnwrapRef 473 | readonly useMemory: UnwrapRef 474 | readonly useMounted: UnwrapRef 475 | readonly useMouse: UnwrapRef 476 | readonly useMouseInElement: UnwrapRef 477 | readonly useMousePressed: UnwrapRef 478 | readonly useMutationObserver: UnwrapRef 479 | readonly useNavigatorLanguage: UnwrapRef 480 | readonly useNetwork: UnwrapRef 481 | readonly useNow: UnwrapRef 482 | readonly useObjectUrl: UnwrapRef 483 | readonly useOffsetPagination: UnwrapRef 484 | readonly useOnline: UnwrapRef 485 | readonly usePageLeave: UnwrapRef 486 | readonly useParallax: UnwrapRef 487 | readonly useParentElement: UnwrapRef 488 | readonly usePerformanceObserver: UnwrapRef 489 | readonly usePermission: UnwrapRef 490 | readonly usePointer: UnwrapRef 491 | readonly usePointerLock: UnwrapRef 492 | readonly usePointerSwipe: UnwrapRef 493 | readonly usePreferredColorScheme: UnwrapRef 494 | readonly usePreferredContrast: UnwrapRef 495 | readonly usePreferredDark: UnwrapRef 496 | readonly usePreferredLanguages: UnwrapRef 497 | readonly usePreferredReducedMotion: UnwrapRef 498 | readonly usePrevious: UnwrapRef 499 | readonly useRafFn: UnwrapRef 500 | readonly useRefHistory: UnwrapRef 501 | readonly useResizeObserver: UnwrapRef 502 | readonly useScreenOrientation: UnwrapRef 503 | readonly useScreenSafeArea: UnwrapRef 504 | readonly useScriptTag: UnwrapRef 505 | readonly useScroll: UnwrapRef 506 | readonly useScrollLock: UnwrapRef 507 | readonly useSessionStorage: UnwrapRef 508 | readonly useShare: UnwrapRef 509 | readonly useSlots: UnwrapRef 510 | readonly useSorted: UnwrapRef 511 | readonly useSpeechRecognition: UnwrapRef 512 | readonly useSpeechSynthesis: UnwrapRef 513 | readonly useStepper: UnwrapRef 514 | readonly useStorage: UnwrapRef 515 | readonly useStorageAsync: UnwrapRef 516 | readonly useStyleTag: UnwrapRef 517 | readonly useSupported: UnwrapRef 518 | readonly useSwipe: UnwrapRef 519 | readonly useTemplateRefsList: UnwrapRef 520 | readonly useTextDirection: UnwrapRef 521 | readonly useTextSelection: UnwrapRef 522 | readonly useTextareaAutosize: UnwrapRef 523 | readonly useThrottle: UnwrapRef 524 | readonly useThrottleFn: UnwrapRef 525 | readonly useThrottledRefHistory: UnwrapRef 526 | readonly useTimeAgo: UnwrapRef 527 | readonly useTimeout: UnwrapRef 528 | readonly useTimeoutFn: UnwrapRef 529 | readonly useTimeoutPoll: UnwrapRef 530 | readonly useTimestamp: UnwrapRef 531 | readonly useTitle: UnwrapRef 532 | readonly useToNumber: UnwrapRef 533 | readonly useToString: UnwrapRef 534 | readonly useToggle: UnwrapRef 535 | readonly useTransition: UnwrapRef 536 | readonly useUrlSearchParams: UnwrapRef 537 | readonly useUserMedia: UnwrapRef 538 | readonly useVModel: UnwrapRef 539 | readonly useVModels: UnwrapRef 540 | readonly useVibrate: UnwrapRef 541 | readonly useVirtualList: UnwrapRef 542 | readonly useWakeLock: UnwrapRef 543 | readonly useWebNotification: UnwrapRef 544 | readonly useWebSocket: UnwrapRef 545 | readonly useWebWorker: UnwrapRef 546 | readonly useWebWorkerFn: UnwrapRef 547 | readonly useWindowFocus: UnwrapRef 548 | readonly useWindowScroll: UnwrapRef 549 | readonly useWindowSize: UnwrapRef 550 | readonly watch: UnwrapRef 551 | readonly watchArray: UnwrapRef 552 | readonly watchAtMost: UnwrapRef 553 | readonly watchDebounced: UnwrapRef 554 | readonly watchDeep: UnwrapRef 555 | readonly watchEffect: UnwrapRef 556 | readonly watchIgnorable: UnwrapRef 557 | readonly watchImmediate: UnwrapRef 558 | readonly watchOnce: UnwrapRef 559 | readonly watchPausable: UnwrapRef 560 | readonly watchPostEffect: UnwrapRef 561 | readonly watchSyncEffect: UnwrapRef 562 | readonly watchThrottled: UnwrapRef 563 | readonly watchTriggerable: UnwrapRef 564 | readonly watchWithFilter: UnwrapRef 565 | readonly whenever: UnwrapRef 566 | } 567 | } 568 | declare module '@vue/runtime-core' { 569 | interface GlobalComponents {} 570 | interface ComponentCustomProperties { 571 | readonly EffectScope: UnwrapRef 572 | readonly asyncComputed: UnwrapRef 573 | readonly autoResetRef: UnwrapRef 574 | readonly computed: UnwrapRef 575 | readonly computedAsync: UnwrapRef 576 | readonly computedEager: UnwrapRef 577 | readonly computedInject: UnwrapRef 578 | readonly computedWithControl: UnwrapRef 579 | readonly controlledComputed: UnwrapRef 580 | readonly controlledRef: UnwrapRef 581 | readonly createApp: UnwrapRef 582 | readonly createEventHook: UnwrapRef 583 | readonly createGlobalState: UnwrapRef 584 | readonly createInjectionState: UnwrapRef 585 | readonly createReactiveFn: UnwrapRef 586 | readonly createReusableTemplate: UnwrapRef 587 | readonly createSharedComposable: UnwrapRef 588 | readonly createTemplatePromise: UnwrapRef 589 | readonly createUnrefFn: UnwrapRef 590 | readonly customRef: UnwrapRef 591 | readonly debouncedRef: UnwrapRef 592 | readonly debouncedWatch: UnwrapRef 593 | readonly defineAsyncComponent: UnwrapRef 594 | readonly defineComponent: UnwrapRef 595 | readonly eagerComputed: UnwrapRef 596 | readonly effectScope: UnwrapRef 597 | readonly extendRef: UnwrapRef 598 | readonly getCurrentInstance: UnwrapRef 599 | readonly getCurrentScope: UnwrapRef 600 | readonly h: UnwrapRef 601 | readonly ignorableWatch: UnwrapRef 602 | readonly inject: UnwrapRef 603 | readonly injectLocal: UnwrapRef 604 | readonly isDefined: UnwrapRef 605 | readonly isProxy: UnwrapRef 606 | readonly isReactive: UnwrapRef 607 | readonly isReadonly: UnwrapRef 608 | readonly isRef: UnwrapRef 609 | readonly makeDestructurable: UnwrapRef 610 | readonly markRaw: UnwrapRef 611 | readonly nextTick: UnwrapRef 612 | readonly onActivated: UnwrapRef 613 | readonly onBeforeMount: UnwrapRef 614 | readonly onBeforeUnmount: UnwrapRef 615 | readonly onBeforeUpdate: UnwrapRef 616 | readonly onClickOutside: UnwrapRef 617 | readonly onDeactivated: UnwrapRef 618 | readonly onErrorCaptured: UnwrapRef 619 | readonly onKeyStroke: UnwrapRef 620 | readonly onLongPress: UnwrapRef 621 | readonly onMounted: UnwrapRef 622 | readonly onRenderTracked: UnwrapRef 623 | readonly onRenderTriggered: UnwrapRef 624 | readonly onScopeDispose: UnwrapRef 625 | readonly onServerPrefetch: UnwrapRef 626 | readonly onStartTyping: UnwrapRef 627 | readonly onUnmounted: UnwrapRef 628 | readonly onUpdated: UnwrapRef 629 | readonly pausableWatch: UnwrapRef 630 | readonly provide: UnwrapRef 631 | readonly provideLocal: UnwrapRef 632 | readonly reactify: UnwrapRef 633 | readonly reactifyObject: UnwrapRef 634 | readonly reactive: UnwrapRef 635 | readonly reactiveComputed: UnwrapRef 636 | readonly reactiveOmit: UnwrapRef 637 | readonly reactivePick: UnwrapRef 638 | readonly readonly: UnwrapRef 639 | readonly ref: UnwrapRef 640 | readonly refAutoReset: UnwrapRef 641 | readonly refDebounced: UnwrapRef 642 | readonly refDefault: UnwrapRef 643 | readonly refThrottled: UnwrapRef 644 | readonly refWithControl: UnwrapRef 645 | readonly resolveComponent: UnwrapRef 646 | readonly resolveRef: UnwrapRef 647 | readonly resolveUnref: UnwrapRef 648 | readonly shallowReactive: UnwrapRef 649 | readonly shallowReadonly: UnwrapRef 650 | readonly shallowRef: UnwrapRef 651 | readonly syncRef: UnwrapRef 652 | readonly syncRefs: UnwrapRef 653 | readonly templateRef: UnwrapRef 654 | readonly throttledRef: UnwrapRef 655 | readonly throttledWatch: UnwrapRef 656 | readonly toRaw: UnwrapRef 657 | readonly toReactive: UnwrapRef 658 | readonly toRef: UnwrapRef 659 | readonly toRefs: UnwrapRef 660 | readonly toValue: UnwrapRef 661 | readonly triggerRef: UnwrapRef 662 | readonly tryOnBeforeMount: UnwrapRef 663 | readonly tryOnBeforeUnmount: UnwrapRef 664 | readonly tryOnMounted: UnwrapRef 665 | readonly tryOnScopeDispose: UnwrapRef 666 | readonly tryOnUnmounted: UnwrapRef 667 | readonly unref: UnwrapRef 668 | readonly unrefElement: UnwrapRef 669 | readonly until: UnwrapRef 670 | readonly useActiveElement: UnwrapRef 671 | readonly useAnimate: UnwrapRef 672 | readonly useArrayDifference: UnwrapRef 673 | readonly useArrayEvery: UnwrapRef 674 | readonly useArrayFilter: UnwrapRef 675 | readonly useArrayFind: UnwrapRef 676 | readonly useArrayFindIndex: UnwrapRef 677 | readonly useArrayFindLast: UnwrapRef 678 | readonly useArrayIncludes: UnwrapRef 679 | readonly useArrayJoin: UnwrapRef 680 | readonly useArrayMap: UnwrapRef 681 | readonly useArrayReduce: UnwrapRef 682 | readonly useArraySome: UnwrapRef 683 | readonly useArrayUnique: UnwrapRef 684 | readonly useAsyncQueue: UnwrapRef 685 | readonly useAsyncState: UnwrapRef 686 | readonly useAttrs: UnwrapRef 687 | readonly useBase64: UnwrapRef 688 | readonly useBattery: UnwrapRef 689 | readonly useBluetooth: UnwrapRef 690 | readonly useBreakpoints: UnwrapRef 691 | readonly useBroadcastChannel: UnwrapRef 692 | readonly useBrowserLocation: UnwrapRef 693 | readonly useCached: UnwrapRef 694 | readonly useClipboard: UnwrapRef 695 | readonly useClipboardItems: UnwrapRef 696 | readonly useCloned: UnwrapRef 697 | readonly useColorMode: UnwrapRef 698 | readonly useConfirmDialog: UnwrapRef 699 | readonly useCounter: UnwrapRef 700 | readonly useCssModule: UnwrapRef 701 | readonly useCssVar: UnwrapRef 702 | readonly useCssVars: UnwrapRef 703 | readonly useCurrentElement: UnwrapRef 704 | readonly useCycleList: UnwrapRef 705 | readonly useDark: UnwrapRef 706 | readonly useDateFormat: UnwrapRef 707 | readonly useDebounce: UnwrapRef 708 | readonly useDebounceFn: UnwrapRef 709 | readonly useDebouncedRefHistory: UnwrapRef 710 | readonly useDeviceMotion: UnwrapRef 711 | readonly useDeviceOrientation: UnwrapRef 712 | readonly useDevicePixelRatio: UnwrapRef 713 | readonly useDevicesList: UnwrapRef 714 | readonly useDisplayMedia: UnwrapRef 715 | readonly useDocumentVisibility: UnwrapRef 716 | readonly useDraggable: UnwrapRef 717 | readonly useDropZone: UnwrapRef 718 | readonly useElementBounding: UnwrapRef 719 | readonly useElementByPoint: UnwrapRef 720 | readonly useElementHover: UnwrapRef 721 | readonly useElementSize: UnwrapRef 722 | readonly useElementVisibility: UnwrapRef 723 | readonly useEventBus: UnwrapRef 724 | readonly useEventListener: UnwrapRef 725 | readonly useEventSource: UnwrapRef 726 | readonly useEyeDropper: UnwrapRef 727 | readonly useFavicon: UnwrapRef 728 | readonly useFetch: UnwrapRef 729 | readonly useFileDialog: UnwrapRef 730 | readonly useFileSystemAccess: UnwrapRef 731 | readonly useFocus: UnwrapRef 732 | readonly useFocusWithin: UnwrapRef 733 | readonly useFps: UnwrapRef 734 | readonly useFullscreen: UnwrapRef 735 | readonly useGamepad: UnwrapRef 736 | readonly useGeolocation: UnwrapRef 737 | readonly useIdle: UnwrapRef 738 | readonly useImage: UnwrapRef 739 | readonly useInfiniteScroll: UnwrapRef 740 | readonly useIntersectionObserver: UnwrapRef 741 | readonly useInterval: UnwrapRef 742 | readonly useIntervalFn: UnwrapRef 743 | readonly useKeyModifier: UnwrapRef 744 | readonly useLastChanged: UnwrapRef 745 | readonly useLocalStorage: UnwrapRef 746 | readonly useMagicKeys: UnwrapRef 747 | readonly useManualRefHistory: UnwrapRef 748 | readonly useMediaControls: UnwrapRef 749 | readonly useMediaQuery: UnwrapRef 750 | readonly useMemoize: UnwrapRef 751 | readonly useMemory: UnwrapRef 752 | readonly useMounted: UnwrapRef 753 | readonly useMouse: UnwrapRef 754 | readonly useMouseInElement: UnwrapRef 755 | readonly useMousePressed: UnwrapRef 756 | readonly useMutationObserver: UnwrapRef 757 | readonly useNavigatorLanguage: UnwrapRef 758 | readonly useNetwork: UnwrapRef 759 | readonly useNow: UnwrapRef 760 | readonly useObjectUrl: UnwrapRef 761 | readonly useOffsetPagination: UnwrapRef 762 | readonly useOnline: UnwrapRef 763 | readonly usePageLeave: UnwrapRef 764 | readonly useParallax: UnwrapRef 765 | readonly useParentElement: UnwrapRef 766 | readonly usePerformanceObserver: UnwrapRef 767 | readonly usePermission: UnwrapRef 768 | readonly usePointer: UnwrapRef 769 | readonly usePointerLock: UnwrapRef 770 | readonly usePointerSwipe: UnwrapRef 771 | readonly usePreferredColorScheme: UnwrapRef 772 | readonly usePreferredContrast: UnwrapRef 773 | readonly usePreferredDark: UnwrapRef 774 | readonly usePreferredLanguages: UnwrapRef 775 | readonly usePreferredReducedMotion: UnwrapRef 776 | readonly usePrevious: UnwrapRef 777 | readonly useRafFn: UnwrapRef 778 | readonly useRefHistory: UnwrapRef 779 | readonly useResizeObserver: UnwrapRef 780 | readonly useScreenOrientation: UnwrapRef 781 | readonly useScreenSafeArea: UnwrapRef 782 | readonly useScriptTag: UnwrapRef 783 | readonly useScroll: UnwrapRef 784 | readonly useScrollLock: UnwrapRef 785 | readonly useSessionStorage: UnwrapRef 786 | readonly useShare: UnwrapRef 787 | readonly useSlots: UnwrapRef 788 | readonly useSorted: UnwrapRef 789 | readonly useSpeechRecognition: UnwrapRef 790 | readonly useSpeechSynthesis: UnwrapRef 791 | readonly useStepper: UnwrapRef 792 | readonly useStorage: UnwrapRef 793 | readonly useStorageAsync: UnwrapRef 794 | readonly useStyleTag: UnwrapRef 795 | readonly useSupported: UnwrapRef 796 | readonly useSwipe: UnwrapRef 797 | readonly useTemplateRefsList: UnwrapRef 798 | readonly useTextDirection: UnwrapRef 799 | readonly useTextSelection: UnwrapRef 800 | readonly useTextareaAutosize: UnwrapRef 801 | readonly useThrottle: UnwrapRef 802 | readonly useThrottleFn: UnwrapRef 803 | readonly useThrottledRefHistory: UnwrapRef 804 | readonly useTimeAgo: UnwrapRef 805 | readonly useTimeout: UnwrapRef 806 | readonly useTimeoutFn: UnwrapRef 807 | readonly useTimeoutPoll: UnwrapRef 808 | readonly useTimestamp: UnwrapRef 809 | readonly useTitle: UnwrapRef 810 | readonly useToNumber: UnwrapRef 811 | readonly useToString: UnwrapRef 812 | readonly useToggle: UnwrapRef 813 | readonly useTransition: UnwrapRef 814 | readonly useUrlSearchParams: UnwrapRef 815 | readonly useUserMedia: UnwrapRef 816 | readonly useVModel: UnwrapRef 817 | readonly useVModels: UnwrapRef 818 | readonly useVibrate: UnwrapRef 819 | readonly useVirtualList: UnwrapRef 820 | readonly useWakeLock: UnwrapRef 821 | readonly useWebNotification: UnwrapRef 822 | readonly useWebSocket: UnwrapRef 823 | readonly useWebWorker: UnwrapRef 824 | readonly useWebWorkerFn: UnwrapRef 825 | readonly useWindowFocus: UnwrapRef 826 | readonly useWindowScroll: UnwrapRef 827 | readonly useWindowSize: UnwrapRef 828 | readonly watch: UnwrapRef 829 | readonly watchArray: UnwrapRef 830 | readonly watchAtMost: UnwrapRef 831 | readonly watchDebounced: UnwrapRef 832 | readonly watchDeep: UnwrapRef 833 | readonly watchEffect: UnwrapRef 834 | readonly watchIgnorable: UnwrapRef 835 | readonly watchImmediate: UnwrapRef 836 | readonly watchOnce: UnwrapRef 837 | readonly watchPausable: UnwrapRef 838 | readonly watchPostEffect: UnwrapRef 839 | readonly watchSyncEffect: UnwrapRef 840 | readonly watchThrottled: UnwrapRef 841 | readonly watchTriggerable: UnwrapRef 842 | readonly watchWithFilter: UnwrapRef 843 | readonly whenever: UnwrapRef 844 | } 845 | } 846 | --------------------------------------------------------------------------------