diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index a832007..0000000 --- a/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -snapshot* -dist -lib -es -esm -node_modules -static -cypress -script/test/cypress -_site -temp* -static/ -!.prettierrc.js \ No newline at end of file diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index da7365e..0000000 --- a/.eslintrc +++ /dev/null @@ -1,140 +0,0 @@ -{ - "extends": [ - "plugin:@typescript-eslint/recommended", - "eslint-config-airbnb-base", - "@vue/typescript/recommended", - "plugin:vue/vue3-recommended", - "plugin:vue-scoped-css/base", - "plugin:prettier/recommended" - ], - "env": { - "browser": true, - "node": true, - "jest": true, - "es6": true - }, - "globals": { - "defineProps": "readonly", - "defineEmits": "readonly" - }, - "plugins": [ - "vue", - "@typescript-eslint", - "simple-import-sort" - ], - "parserOptions": { - "parser": "@typescript-eslint/parser", - "sourceType": "module", - "allowImportExportEverywhere": true, - "ecmaFeatures": { - "jsx": true - } - }, - "settings": { - "import/extensions": [ - ".js", - ".jsx", - ".ts", - ".tsx" - ] - }, - "rules": { - "no-nested-ternary": "off", - "no-console": "off", - "no-continue": "off", - "no-restricted-syntax": "off", - "no-return-assign": "off", - "no-unused-expressions": "off", - "no-return-await": "off", - "no-plusplus": "off", - "no-param-reassign": "off", - "no-shadow": "off", - "guard-for-in": "off", - "import/extensions": "off", - "import/no-unresolved": "off", - "import/no-extraneous-dependencies": "off", - "import/prefer-default-export": "off", - "import/first": "off", // https://github.com/vuejs/vue-eslint-parser/issues/58 - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "vue/first-attribute-linebreak": 0, - "@typescript-eslint/no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_" - } - ], - "no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_" - } - ], - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/ban-types": "off", - "class-methods-use-this": "off", // 因为AxiosCancel必须实例化而能静态化所以加的规则,如果有办法解决可以取消 - "simple-import-sort/imports": "error", - "simple-import-sort/exports": "error" - }, - "overrides": [ - { - "files": [ - "*.vue" - ], - "rules": { - "vue/component-name-in-template-casing": [ - 2, - "kebab-case" - ], - "vue/require-default-prop": 0, - "vue/multi-word-component-names": 0, - "vue/no-reserved-props": 0, - "vue/no-v-html": 0, - "vue-scoped-css/enforce-style-type": [ - "error", - { - "allows": [ - "scoped" - ] - } - ] - } - }, - { - "files": [ - "*.ts", - "*.tsx" - ], // https://github.com/typescript-eslint eslint-recommended - "rules": { - "constructor-super": "off", // ts(2335) & ts(2377) - "getter-return": "off", // ts(2378) - "no-const-assign": "off", // ts(2588) - "no-dupe-args": "off", // ts(2300) - "no-dupe-class-members": "off", // ts(2393) & ts(2300) - "no-dupe-keys": "off", // ts(1117) - "no-func-assign": "off", // ts(2539) - "no-import-assign": "off", // ts(2539) & ts(2540) - "no-new-symbol": "off", // ts(2588) - "no-obj-calls": "off", // ts(2349) - "no-redeclare": "off", // ts(2451) - "no-setter-return": "off", // ts(2408) - "no-this-before-super": "off", // ts(2376) - "no-undef": "off", // ts(2304) - "no-unreachable": "off", // ts(7027) - "no-unsafe-negation": "off", // ts(2365) & ts(2360) & ts(2358) - "no-var": "error", // ts transpiles let/const to var, so no need for vars any more - "prefer-const": "error", // ts provides better types with const - "prefer-rest-params": "error", // ts provides better types with rest args over arguments - "prefer-spread": "error", // ts transpiles spread to apply, so no need for manual apply - "valid-typeof": "off", // ts(2367) - "consistent-return": "off", - "no-promise-executor-return": "off", - "prefer-promise-reject-errors": "off" - } - } - ] -} \ No newline at end of file diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 80ebf6e..0000000 --- a/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -electron_mirror=https://npmmirror.com/mirrors/electron/ -electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/ \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 3c58064..0000000 --- a/.prettierrc.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = { - // 一行最多 120 字符.. - printWidth: 120, - // 使用 2 个空格缩进 - tabWidth: 2, - // 不使用缩进符,而使用空格 - useTabs: false, - // 行尾需要有分号 - semi: true, - // 使用单引号 - singleQuote: true, - // 对象的 key 仅在必要时用引号 - quoteProps: 'as-needed', - // jsx 不使用单引号,而使用双引号 - jsxSingleQuote: false, - // 末尾需要有逗号 - trailingComma: 'all', - // 大括号内的首尾需要空格 - bracketSpacing: true, - // jsx 标签的反尖括号需要换行 - jsxBracketSameLine: false, - // 箭头函数,只有一个参数的时候,也需要括号 - arrowParens: 'always', - // 每个文件格式化的范围是文件的全部内容 - rangeStart: 0, - rangeEnd: Infinity, - // 不需要写文件开头的 @prettier - requirePragma: false, - // 不需要自动在文件开头插入 @prettier - insertPragma: false, - // 使用默认的折行标准 - proseWrap: 'preserve', - // 根据显示样式决定 html 要不要折行 - htmlWhitespaceSensitivity: 'css', - // vue 文件中的 script 和 style 内不用缩进 - vueIndentScriptAndStyle: false, - // 换行符使用 lf - endOfLine: 'lf', -}; diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/README.md b/README.md index 7994201..c1ec5b9 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,34 @@ -# Alger Music Player -主要功能如下 +# electron-lan-file -- 音乐推荐 -- 音乐播放 -- 网易云登录 -- 播放历史 -- 桌面歌词 -- 歌单 mv 搜索 专辑等功能 -- 识别无法播放歌曲 并代理播放 -- 可听周杰伦(搜索专辑) +An Electron application with Vue and TypeScript -## 项目简介 - 一个基于 electron typescript vue3 的桌面音乐播放器 适配 web端 桌面端 web移动端 +## Recommended IDE Setup -## 预览地址 -[http://mc.alger.fun/](http://mc.alger.fun/) +- [VSCode](https://code.visualstudio.com/) + [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) + [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) -QQ群:789288579 +## Project Setup -## 软件截图 -![首页](./docs/img/image-7.png) -![歌词](./docs/img/image-6.png) -![搜索](./docs/img/image-8.png) - -## 技术栈 - -### 主要框架 -- Vue 3 - 渐进式 JavaScript 框架 -- TypeScript - JavaScript 的超集,添加了类型系统 -- Electron - 跨平台桌面应用开发框架 -- Vite - 下一代前端构建工具 - -### UI 框架 -- Naive UI - 基于 Vue 3 的组件库 - -### 项目特点 -- 完整的类型支持(TypeScript) -- 模块化设计 -- 自动化组件和 API 导入 -- 多平台支持(Web、Desktop、Mobile Web) -- 构建优化(代码分割、压缩) - -## 咖啡☕️ -| 微信 | 支付宝 | -| :--------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------: | -| WeChat QRcode | Wechat QRcode | - -## 项目运行 -```bash - # 安装依赖 - npm install - - # 运行项目 web - npm run dev - - # 运行项目 electron - npm run start - - # 打包项目 web - npm run build - - # 打包项目 electron - npm run win ... - # 具体看 package.json -``` -#### 注意 -- 本地运行需要配置 .env.development 文件 -- 打包需要配置 .env.production 文件 +### Install ```bash - # .env.development - VITE_API_LOCAL = /api - VITE_API_MUSIC_PROXY = /music - VITE_API_PROXY_MUSIC = /music_proxy - - # 你的接口地址 (必填) - VITE_API = *** - # 音乐po接口地址 - VITE_API_MUSIC = *** - VITE_API_PROXY = *** - - - # .env.production - # 你的接口地址 (必填) - VITE_API = *** - # 音乐po接口地址 - VITE_API_MUSIC = *** - # 代理地址 - VITE_API_PROXY = *** +$ npm install ``` -## Stargazers over time -[![Stargazers over time](https://starchart.cc/algerkong/AlgerMusicPlayer.svg?variant=adaptive)](https://starchart.cc/algerkong/AlgerMusicPlayer) +### Development +```bash +$ npm run dev +``` +### Build +```bash +# For windows +$ npm run build:win -## 欢迎提Issues +# For macOS +$ npm run build:mac -## 免责声明 -本软件仅用于学习交流,禁止用于商业用途,否则后果自负。 +# For Linux +$ npm run build:linux +``` diff --git a/app.js b/app.js deleted file mode 100644 index 69be6f5..0000000 --- a/app.js +++ /dev/null @@ -1,148 +0,0 @@ -const { app, BrowserWindow, ipcMain, Tray, Menu, globalShortcut, nativeImage } = require('electron'); -const path = require('path'); -const Store = require('electron-store'); -const setJson = require('./electron/set.json'); -const { loadLyricWindow } = require('./electron/lyric'); -const config = require('./electron/config'); - -let mainWin = null; -function createWindow() { - mainWin = new BrowserWindow({ - width: 1200, - height: 780, - frame: false, - webPreferences: { - nodeIntegration: false, - contextIsolation: true, - preload: path.join(__dirname, '/electron/preload.js'), - }, - }); - const win = mainWin; - win.setMinimumSize(1200, 780); - if (process.env.NODE_ENV === 'development') { - win.webContents.openDevTools({ mode: 'detach' }); - win.loadURL(`http://localhost:${config.development.mainPort}/`); - } else { - win.loadURL(`file://${__dirname}/dist/index.html`); - } - const image = nativeImage - .createFromPath(path.join(__dirname, 'public/icon_16x16.png')) - .resize({ width: 16, height: 16 }); - const tray = new Tray(image); - - // 创建一个上下文菜单 - const contextMenu = Menu.buildFromTemplate([ - { - label: '显示', - click: () => { - win.show(); - }, - }, - { - label: '退出', - click: () => { - win.destroy(); - app.quit(); - }, - }, - ]); - - // 设置系统托盘图标的上下文菜单 - tray.setContextMenu(contextMenu); - - // 当系统托盘图标被点击时,切换窗口的显示/隐藏 - tray.on('click', () => { - if (win.isVisible()) { - win.hide(); - } else { - win.show(); - } - }); - - const set = store.get('set'); - // store.set('set', setJson) - - if (!set) { - store.set('set', setJson); - } - - loadLyricWindow(ipcMain, mainWin); -} - -// 限制只能启动一个应用 -const gotTheLock = app.requestSingleInstanceLock(); -if (!gotTheLock) { - app.quit(); -} - -app.whenReady().then(createWindow); - -app.on('ready', () => { - globalShortcut.register('CommandOrControl+Alt+Shift+M', () => { - if (mainWin.isVisible()) { - mainWin.hide(); - } else { - mainWin.show(); - } - }); -}); - -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit(); - } -}); - -app.on('will-quit', () => { - globalShortcut.unregisterAll(); -}); - -ipcMain.on('minimize-window', (event) => { - const win = BrowserWindow.fromWebContents(event.sender); - win.minimize(); -}); - -ipcMain.on('maximize-window', (event) => { - const win = BrowserWindow.fromWebContents(event.sender); - if (win.isMaximized()) { - win.unmaximize(); - } else { - win.maximize(); - } -}); - -ipcMain.on('close-window', (event) => { - const win = BrowserWindow.fromWebContents(event.sender); - win.destroy(); - app.quit(); -}); - -ipcMain.on('drag-start', (event) => { - const win = BrowserWindow.fromWebContents(event.sender); - win.webContents.beginFrameSubscription((frameBuffer) => { - event.reply('frame-buffer', frameBuffer); - }); -}); - -ipcMain.on('mini-tray', (event) => { - const win = BrowserWindow.fromWebContents(event.sender); - win.hide(); -}); - -// 重启 -ipcMain.on('restart', () => { - app.relaunch(); - app.exit(0); -}); - -const store = new Store(); - -// 定义ipcRenderer监听事件 -ipcMain.on('setStore', (_, key, value) => { - store.set(key, value); -}); - -ipcMain.on('getStore', (_, key) => { - const value = store.get(key); - _.returnValue = value || ''; -}); diff --git a/auto-imports.d.ts b/auto-imports.d.ts index b4ca07c..3af2dd5 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -6,70 +6,85 @@ // biome-ignore lint: disable export {} declare global { - const EffectScope: typeof import('vue')['EffectScope'] - const computed: typeof import('vue')['computed'] - const createApp: typeof import('vue')['createApp'] - const customRef: typeof import('vue')['customRef'] - const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] - const defineComponent: typeof import('vue')['defineComponent'] - const effectScope: typeof import('vue')['effectScope'] - const getCurrentInstance: typeof import('vue')['getCurrentInstance'] - const getCurrentScope: typeof import('vue')['getCurrentScope'] - const h: typeof import('vue')['h'] - const inject: typeof import('vue')['inject'] - const isProxy: typeof import('vue')['isProxy'] - const isReactive: typeof import('vue')['isReactive'] - const isReadonly: typeof import('vue')['isReadonly'] - const isRef: typeof import('vue')['isRef'] - const markRaw: typeof import('vue')['markRaw'] - const nextTick: typeof import('vue')['nextTick'] - const onActivated: typeof import('vue')['onActivated'] - const onBeforeMount: typeof import('vue')['onBeforeMount'] - const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] - const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] - const onDeactivated: typeof import('vue')['onDeactivated'] - const onErrorCaptured: typeof import('vue')['onErrorCaptured'] - const onMounted: typeof import('vue')['onMounted'] - const onRenderTracked: typeof import('vue')['onRenderTracked'] - const onRenderTriggered: typeof import('vue')['onRenderTriggered'] - const onScopeDispose: typeof import('vue')['onScopeDispose'] - const onServerPrefetch: typeof import('vue')['onServerPrefetch'] - const onUnmounted: typeof import('vue')['onUnmounted'] - const onUpdated: typeof import('vue')['onUpdated'] - const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] - const provide: typeof import('vue')['provide'] - const reactive: typeof import('vue')['reactive'] - const readonly: typeof import('vue')['readonly'] - const ref: typeof import('vue')['ref'] - const resolveComponent: typeof import('vue')['resolveComponent'] - const shallowReactive: typeof import('vue')['shallowReactive'] - const shallowReadonly: typeof import('vue')['shallowReadonly'] - const shallowRef: typeof import('vue')['shallowRef'] - const toRaw: typeof import('vue')['toRaw'] - const toRef: typeof import('vue')['toRef'] - const toRefs: typeof import('vue')['toRefs'] - const toValue: typeof import('vue')['toValue'] - const triggerRef: typeof import('vue')['triggerRef'] - const unref: typeof import('vue')['unref'] - const useAttrs: typeof import('vue')['useAttrs'] - const useCssModule: typeof import('vue')['useCssModule'] - const useCssVars: typeof import('vue')['useCssVars'] - const useDialog: typeof import('naive-ui')['useDialog'] - const useId: typeof import('vue')['useId'] - const useLoadingBar: typeof import('naive-ui')['useLoadingBar'] - const useMessage: typeof import('naive-ui')['useMessage'] - const useModel: typeof import('vue')['useModel'] - const useNotification: typeof import('naive-ui')['useNotification'] - const useSlots: typeof import('vue')['useSlots'] - const useTemplateRef: typeof import('vue')['useTemplateRef'] - const watch: typeof import('vue')['watch'] - const watchEffect: typeof import('vue')['watchEffect'] - const watchPostEffect: typeof import('vue')['watchPostEffect'] - const watchSyncEffect: typeof import('vue')['watchSyncEffect'] + const EffectScope: (typeof import('vue'))['EffectScope']; + const computed: (typeof import('vue'))['computed']; + const createApp: (typeof import('vue'))['createApp']; + const customRef: (typeof import('vue'))['customRef']; + const defineAsyncComponent: (typeof import('vue'))['defineAsyncComponent']; + const defineComponent: (typeof import('vue'))['defineComponent']; + const effectScope: (typeof import('vue'))['effectScope']; + const getCurrentInstance: (typeof import('vue'))['getCurrentInstance']; + const getCurrentScope: (typeof import('vue'))['getCurrentScope']; + const h: (typeof import('vue'))['h']; + const inject: (typeof import('vue'))['inject']; + const isProxy: (typeof import('vue'))['isProxy']; + const isReactive: (typeof import('vue'))['isReactive']; + const isReadonly: (typeof import('vue'))['isReadonly']; + const isRef: (typeof import('vue'))['isRef']; + const markRaw: (typeof import('vue'))['markRaw']; + const nextTick: (typeof import('vue'))['nextTick']; + const onActivated: (typeof import('vue'))['onActivated']; + const onBeforeMount: (typeof import('vue'))['onBeforeMount']; + const onBeforeUnmount: (typeof import('vue'))['onBeforeUnmount']; + const onBeforeUpdate: (typeof import('vue'))['onBeforeUpdate']; + const onDeactivated: (typeof import('vue'))['onDeactivated']; + const onErrorCaptured: (typeof import('vue'))['onErrorCaptured']; + const onMounted: (typeof import('vue'))['onMounted']; + const onRenderTracked: (typeof import('vue'))['onRenderTracked']; + const onRenderTriggered: (typeof import('vue'))['onRenderTriggered']; + const onScopeDispose: (typeof import('vue'))['onScopeDispose']; + const onServerPrefetch: (typeof import('vue'))['onServerPrefetch']; + const onUnmounted: (typeof import('vue'))['onUnmounted']; + const onUpdated: (typeof import('vue'))['onUpdated']; + const onWatcherCleanup: (typeof import('vue'))['onWatcherCleanup']; + const provide: (typeof import('vue'))['provide']; + const reactive: (typeof import('vue'))['reactive']; + const readonly: (typeof import('vue'))['readonly']; + const ref: (typeof import('vue'))['ref']; + const resolveComponent: (typeof import('vue'))['resolveComponent']; + const shallowReactive: (typeof import('vue'))['shallowReactive']; + const shallowReadonly: (typeof import('vue'))['shallowReadonly']; + const shallowRef: (typeof import('vue'))['shallowRef']; + const toRaw: (typeof import('vue'))['toRaw']; + const toRef: (typeof import('vue'))['toRef']; + const toRefs: (typeof import('vue'))['toRefs']; + const toValue: (typeof import('vue'))['toValue']; + const triggerRef: (typeof import('vue'))['triggerRef']; + const unref: (typeof import('vue'))['unref']; + const useAttrs: (typeof import('vue'))['useAttrs']; + const useCssModule: (typeof import('vue'))['useCssModule']; + const useCssVars: (typeof import('vue'))['useCssVars']; + const useDialog: (typeof import('naive-ui'))['useDialog']; + const useId: (typeof import('vue'))['useId']; + const useLoadingBar: (typeof import('naive-ui'))['useLoadingBar']; + const useMessage: (typeof import('naive-ui'))['useMessage']; + const useModel: (typeof import('vue'))['useModel']; + const useNotification: (typeof import('naive-ui'))['useNotification']; + const useSlots: (typeof import('vue'))['useSlots']; + const useTemplateRef: (typeof import('vue'))['useTemplateRef']; + const watch: (typeof import('vue'))['watch']; + const watchEffect: (typeof import('vue'))['watchEffect']; + const watchPostEffect: (typeof import('vue'))['watchPostEffect']; + const watchSyncEffect: (typeof import('vue'))['watchSyncEffect']; } // for type re-export declare global { // @ts-ignore - export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' - import('vue') + export type { + Component, + ComponentPublicInstance, + ComputedRef, + DirectiveBinding, + ExtractDefaultPropTypes, + ExtractPropTypes, + ExtractPublicPropTypes, + InjectionKey, + PropType, + Ref, + MaybeRef, + MaybeRefOrGetter, + VNode, + WritableComputedRef + } from 'vue'; + import('vue'); } diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist new file mode 100644 index 0000000..38c887b --- /dev/null +++ b/build/entitlements.mac.plist @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + + diff --git a/build/icon.icns b/build/icon.icns new file mode 100644 index 0000000..28644aa Binary files /dev/null and b/build/icon.icns differ diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000..72c391e Binary files /dev/null and b/build/icon.ico differ diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 0000000..cf9e8b2 Binary files /dev/null and b/build/icon.png differ diff --git a/build/mac.json b/build/mac.json deleted file mode 100644 index 5cf4922..0000000 --- a/build/mac.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "appId": "com.alger.music", - "productName": "AlgerMusic", - "artifactName": "${productName}_${version}_${arch}.${ext}", - "directories": { - "output": "dist_electron/mac" - }, - "files": [ - "dist/**/*", - "package.json", - "app.js", - "electron/**/*", - "**/*", - "public/**/*", - "node_modules/**/*" - ], - "mac": { - "icon": "public/icon.icns", - "target": [ - { - "target": "dmg", - "arch": ["x64", "arm64"] - } - ], - "category": "public.app-category.music", - "darkModeSupport": true - }, - "dmg": { - "title": "${productName} ${version}", - "icon": "public/icon.icns", - "contents": [ - { - "x": 410, - "y": 150, - "type": "link", - "path": "/Applications" - }, - { - "x": 130, - "y": 150, - "type": "file" - } - ], - "window": { - "width": 540, - "height": 380 - } - } -} \ No newline at end of file diff --git a/build/win32.json b/build/win32.json deleted file mode 100644 index a1d095d..0000000 --- a/build/win32.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "appId": "com.alger.music", - "productName": "AlgerMusic", - "artifactName": "${productName}_${version}_Setup_x86.${ext}", - "directories": { - "output": "dist_electron/win-x86" - }, - "files": ["dist/**/*", "package.json", "app.js", "electron/**/*"], - "win": { - "icon": "public/icon.png", - "target": [ - { - "target": "nsis", - "arch": ["ia32"] - } - ], - "extraFiles": [ - { - "from": "installer/installer.nsh", - "to": "$INSTDIR" - } - ] - }, - "nsis": { - "oneClick": false, - "language": "2052", - "allowToChangeInstallationDirectory": true, - "differentialPackage": true, - "shortcutName": "Alger Music" - } -} diff --git a/build/win64.json b/build/win64.json deleted file mode 100644 index 98dfb45..0000000 --- a/build/win64.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "appId": "com.alger.music", - "productName": "AlgerMusic", - "artifactName": "${productName}_${version}_Setup_x64.${ext}", - "directories": { - "output": "dist_electron/win-x64" - }, - "files": ["dist/**/*", "package.json", "app.js", "electron/**/*"], - "win": { - "icon": "public/icon.png", - "target": [ - { - "target": "nsis", - "arch": ["x64"] - } - ], - "extraFiles": [ - { - "from": "installer/installer.nsh", - "to": "$INSTDIR" - } - ] - }, - "nsis": { - "oneClick": false, - "language": "2052", - "allowToChangeInstallationDirectory": true, - "differentialPackage": true, - "shortcutName": "Alger Music" - } -} diff --git a/build/winarm64.json b/build/winarm64.json deleted file mode 100644 index d0ea633..0000000 --- a/build/winarm64.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "appId": "com.alger.music", - "productName": "AlgerMusic", - "artifactName": "${productName}_${version}_Setup_arm64.${ext}", - "directories": { - "output": "dist_electron/win-arm64" - }, - "files": ["dist/**/*", "package.json", "app.js", "electron/**/*", "!node_modules/**/*"], - "win": { - "icon": "public/icon.png", - "target": [ - { - "target": "nsis", - "arch": ["arm64"] - } - ], - "extraFiles": [ - { - "from": "installer/installer.nsh", - "to": "$INSTDIR" - } - ] - }, - "nsis": { - "oneClick": false, - "language": "2052", - "allowToChangeInstallationDirectory": true, - "differentialPackage": true, - "shortcutName": "Alger Music" - } -} diff --git a/components.d.ts b/components.d.ts index c5d95f3..6db7320 100644 --- a/components.d.ts +++ b/components.d.ts @@ -2,19 +2,13 @@ // @ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 -export {} +export {}; /* prettier-ignore */ declare module 'vue' { export interface GlobalComponents { - Coffee: typeof import('./src/components/Coffee.vue')['default'] - InstallAppModal: typeof import('./src/components/common/InstallAppModal.vue')['default'] - MPop: typeof import('./src/components/common/MPop.vue')['default'] - MusicList: typeof import('./src/components/MusicList.vue')['default'] - MvPlayer: typeof import('./src/components/MvPlayer.vue')['default'] NAvatar: typeof import('naive-ui')['NAvatar'] NButton: typeof import('naive-ui')['NButton'] - NButtonGroup: typeof import('naive-ui')['NButtonGroup'] NCheckbox: typeof import('naive-ui')['NCheckbox'] NConfigProvider: typeof import('naive-ui')['NConfigProvider'] NDialogProvider: typeof import('naive-ui')['NDialogProvider'] @@ -24,6 +18,7 @@ declare module 'vue' { NEmpty: typeof import('naive-ui')['NEmpty'] NImage: typeof import('naive-ui')['NImage'] NInput: typeof import('naive-ui')['NInput'] + NInputNumber: typeof import('naive-ui')['NInputNumber'] NLayout: typeof import('naive-ui')['NLayout'] NMessageProvider: typeof import('naive-ui')['NMessageProvider'] NModal: typeof import('naive-ui')['NModal'] @@ -32,17 +27,7 @@ declare module 'vue' { NSlider: typeof import('naive-ui')['NSlider'] NSpin: typeof import('naive-ui')['NSpin'] NSwitch: typeof import('naive-ui')['NSwitch'] - NTooltip: typeof import('naive-ui')['NTooltip'] - NVirtualList: typeof import('naive-ui')['NVirtualList'] - PlayBottom: typeof import('./src/components/common/PlayBottom.vue')['default'] - PlayListsItem: typeof import('./src/components/common/PlayListsItem.vue')['default'] - PlaylistType: typeof import('./src/components/PlaylistType.vue')['default'] - RecommendAlbum: typeof import('./src/components/RecommendAlbum.vue')['default'] - RecommendSinger: typeof import('./src/components/RecommendSinger.vue')['default'] - RecommendSonglist: typeof import('./src/components/RecommendSonglist.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] - SearchItem: typeof import('./src/components/common/SearchItem.vue')['default'] - SongItem: typeof import('./src/components/common/SongItem.vue')['default'] } } diff --git a/dev-app-update.yml b/dev-app-update.yml new file mode 100644 index 0000000..db4eb90 --- /dev/null +++ b/dev-app-update.yml @@ -0,0 +1,3 @@ +provider: generic +url: https://example.com/auto-updates +updaterCacheDirName: electron-lan-file-updater diff --git a/docs/img/image-1.png b/docs/img/image-1.png deleted file mode 100644 index 29d7f90..0000000 Binary files a/docs/img/image-1.png and /dev/null differ diff --git a/docs/img/image-2.png b/docs/img/image-2.png deleted file mode 100644 index 6cc1dc9..0000000 Binary files a/docs/img/image-2.png and /dev/null differ diff --git a/docs/img/image-3.png b/docs/img/image-3.png deleted file mode 100644 index 170bcf7..0000000 Binary files a/docs/img/image-3.png and /dev/null differ diff --git a/docs/img/image-4.png b/docs/img/image-4.png deleted file mode 100644 index 18109aa..0000000 Binary files a/docs/img/image-4.png and /dev/null differ diff --git a/docs/img/image-5.png b/docs/img/image-5.png deleted file mode 100644 index 54c9e08..0000000 Binary files a/docs/img/image-5.png and /dev/null differ diff --git a/docs/img/image-6.png b/docs/img/image-6.png deleted file mode 100644 index a5816d4..0000000 Binary files a/docs/img/image-6.png and /dev/null differ diff --git a/docs/img/image-7.png b/docs/img/image-7.png deleted file mode 100644 index 6ebe42b..0000000 Binary files a/docs/img/image-7.png and /dev/null differ diff --git a/docs/img/image-8.png b/docs/img/image-8.png deleted file mode 100644 index 671c32d..0000000 Binary files a/docs/img/image-8.png and /dev/null differ diff --git a/docs/img/image.png b/docs/img/image.png deleted file mode 100644 index e217355..0000000 Binary files a/docs/img/image.png and /dev/null differ diff --git a/electron-builder.yml b/electron-builder.yml new file mode 100644 index 0000000..f5f7ed6 --- /dev/null +++ b/electron-builder.yml @@ -0,0 +1,45 @@ +appId: com.electron.app +productName: electron-lan-file +directories: + buildResources: build +files: + - '!**/.vscode/*' + - '!src/*' + - '!electron.vite.config.{js,ts,mjs,cjs}' + - '!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}' + - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}' + - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}' +asarUnpack: + - resources/** +win: + executableName: electron-lan-file +nsis: + artifactName: ${name}-${version}-setup.${ext} + shortcutName: ${productName} + uninstallDisplayName: ${productName} + createDesktopShortcut: always +mac: + entitlementsInherit: build/entitlements.mac.plist + extendInfo: + - NSCameraUsageDescription: Application requests access to the device's camera. + - NSMicrophoneUsageDescription: Application requests access to the device's microphone. + - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. + - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. + notarize: false +dmg: + artifactName: ${name}-${version}.${ext} +linux: + target: + - AppImage + - snap + - deb + maintainer: electronjs.org + category: Utility +appImage: + artifactName: ${name}-${version}.${ext} +npmRebuild: false +publish: + provider: generic + url: https://example.com/auto-updates +electronDownload: + mirror: https://npmmirror.com/mirrors/electron/ diff --git a/electron.vite.config.ts b/electron.vite.config.ts new file mode 100644 index 0000000..9cf314e --- /dev/null +++ b/electron.vite.config.ts @@ -0,0 +1,60 @@ +import vue from '@vitejs/plugin-vue'; +import { defineConfig, externalizeDepsPlugin } from 'electron-vite'; +import { resolve } from 'path'; +import AutoImport from 'unplugin-auto-import/vite'; +import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'; +import Components from 'unplugin-vue-components/vite'; +import viteCompression from 'vite-plugin-compression'; + +export default defineConfig({ + main: { + plugins: [externalizeDepsPlugin()] + }, + preload: { + plugins: [externalizeDepsPlugin()] + }, + renderer: { + resolve: { + alias: { + '@': resolve('src/renderer'), + '@renderer': resolve('src/renderer') + } + }, + plugins: [ + vue(), + viteCompression(), + // VueDevTools(), + AutoImport({ + imports: [ + 'vue', + { + 'naive-ui': ['useDialog', 'useMessage', 'useNotification', 'useLoadingBar'] + } + ] + }), + Components({ + resolvers: [NaiveUiResolver()] + }) + ], + server: { + proxy: { + // with options + [process.env.VITE_API_LOCAL as string]: { + target: process.env.VITE_API, + changeOrigin: true, + rewrite: (path) => path.replace(new RegExp(`^${process.env.VITE_API_LOCAL}`), '') + }, + [process.env.VITE_API_MUSIC_PROXY as string]: { + target: process.env.VITE_API_MUSIC, + changeOrigin: true, + rewrite: (path) => path.replace(new RegExp(`^${process.env.VITE_API_MUSIC_PROXY}`), '') + }, + [process.env.VITE_API_PROXY_MUSIC as string]: { + target: process.env.VITE_API_PROXY, + changeOrigin: true, + rewrite: (path) => path.replace(new RegExp(`^${process.env.VITE_API_PROXY_MUSIC}`), '') + } + } + } + } +}); diff --git a/electron/config.js b/electron/config.js deleted file mode 100644 index e849ffb..0000000 --- a/electron/config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - // 开发环境配置 - development: { - mainPort: 4488, - lyricPort: 4488, - }, - // 生产环境配置 - production: { - distPath: '../dist', - }, -}; diff --git a/electron/preload.js b/electron/preload.js deleted file mode 100644 index ebee7d8..0000000 --- a/electron/preload.js +++ /dev/null @@ -1,30 +0,0 @@ -const { contextBridge, ipcRenderer } = require('electron'); - -// 主进程通信 -contextBridge.exposeInMainWorld('electronAPI', { - minimize: () => ipcRenderer.send('minimize-window'), - maximize: () => ipcRenderer.send('maximize-window'), - close: () => ipcRenderer.send('close-window'), - dragStart: (data) => ipcRenderer.send('drag-start', data), - miniTray: () => ipcRenderer.send('mini-tray'), - restart: () => ipcRenderer.send('restart'), - openLyric: () => ipcRenderer.send('open-lyric'), - sendLyric: (data) => ipcRenderer.send('send-lyric', data), -}); - -// 存储相关 -contextBridge.exposeInMainWorld('electron', { - ipcRenderer: { - setStoreValue: (key, value) => ipcRenderer.send('setStore', key, value), - getStoreValue: (key) => ipcRenderer.sendSync('getStore', key), - on: (channel, func) => { - ipcRenderer.on(channel, (event, ...args) => func(...args)); - }, - once: (channel, func) => { - ipcRenderer.once(channel, (event, ...args) => func(...args)); - }, - send: (channel, data) => { - ipcRenderer.send(channel, data); - }, - }, -}); diff --git a/electron/update.js b/electron/update.js deleted file mode 100644 index 55e51ba..0000000 --- a/electron/update.js +++ /dev/null @@ -1,69 +0,0 @@ -const { app, BrowserWindow } = require('electron'); -const axios = require('axios'); -const fs = require('fs'); -const path = require('path'); -const AdmZip = require('adm-zip'); - -class Updater { - constructor(mainWindow) { - this.mainWindow = mainWindow; - this.updateUrl = 'http://your-server.com/update'; // 更新服务器地址 - this.version = app.getVersion(); - } - - // 检查更新 - async checkForUpdates() { - try { - const response = await axios.get(`${this.updateUrl}/check`, { - params: { - version: this.version, - }, - }); - - if (response.data.hasUpdate) { - await this.downloadUpdate(response.data.downloadUrl); - } - } catch (error) { - console.error('检查更新失败:', error); - } - } - - // 下载更新 - async downloadUpdate(downloadUrl) { - try { - const response = await axios({ - url: downloadUrl, - method: 'GET', - responseType: 'arraybuffer', - }); - - const tempPath = path.join(app.getPath('temp'), 'update.zip'); - fs.writeFileSync(tempPath, response.data); - - await this.extractUpdate(tempPath); - } catch (error) { - console.error('下载更新失败:', error); - } - } - - // 解压更新 - async extractUpdate(zipPath) { - try { - const zip = new AdmZip(zipPath); - const targetPath = path.join(__dirname, '../dist'); // 前端文件目录 - - // 解压文件 - zip.extractAllTo(targetPath, true); - - // 删除临时文件 - fs.unlinkSync(zipPath); - - // 刷新页面 - this.mainWindow.webContents.reload(); - } catch (error) { - console.error('解压更新失败:', error); - } - } -} - -module.exports = Updater; diff --git a/index.html b/index.html deleted file mode 100644 index 73f9080..0000000 --- a/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - 网抑云音乐 | AlgerKong | AlgerMusicPlayer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- Total Page View Loading - Total Visits Loading - Site Total Visitors Loading -
- - - - \ No newline at end of file diff --git a/out/main/index.js b/out/main/index.js new file mode 100644 index 0000000..f188d04 --- /dev/null +++ b/out/main/index.js @@ -0,0 +1,323 @@ +"use strict"; +const utils = require("@electron-toolkit/utils"); +const electron = require("electron"); +const Store = require("electron-store"); +const path = require("path"); +const fs = require("fs"); +const os = require("os"); +const match = require("@unblockneteasemusic/server"); +const server = require("netease-cloud-music-api-alger/server"); +const isProxy = false; +const noAnimate = false; +const animationSpeed = 1; +const author = "Alger"; +const authorUrl = "https://github.com/algerkong"; +const musicApiPort = 30488; +const set = { + isProxy, + noAnimate, + animationSpeed, + author, + authorUrl, + musicApiPort +}; +const store$2 = new Store(); +let lyricWindow = null; +const createWin = () => { + console.log("Creating lyric window"); + const windowBounds = store$2.get("lyricWindowBounds") || {}; + const { x, y, width, height } = windowBounds; + const { width: screenWidth, height: screenHeight } = electron.screen.getPrimaryDisplay().workAreaSize; + const validPosition = x !== void 0 && y !== void 0 && x >= 0 && y >= 0 && x < screenWidth && y < screenHeight; + lyricWindow = new electron.BrowserWindow({ + width: width || 800, + height: height || 200, + x: validPosition ? x : void 0, + y: validPosition ? y : void 0, + frame: false, + show: false, + transparent: true, + hasShadow: false, + alwaysOnTop: true, + webPreferences: { + preload: path.join(__dirname, "../preload/index.js"), + sandbox: false, + contextIsolation: true + } + }); + lyricWindow.on("closed", () => { + if (lyricWindow) { + lyricWindow.destroy(); + lyricWindow = null; + } + }); + return lyricWindow; +}; +const loadLyricWindow = (ipcMain, mainWin) => { + const showLyricWindow = () => { + if (lyricWindow && !lyricWindow.isDestroyed()) { + if (lyricWindow.isMinimized()) { + lyricWindow.restore(); + } + lyricWindow.focus(); + lyricWindow.show(); + return true; + } + return false; + }; + ipcMain.on("open-lyric", () => { + console.log("Received open-lyric request"); + if (showLyricWindow()) { + return; + } + console.log("Creating new lyric window"); + const win = createWin(); + if (!win) { + console.error("Failed to create lyric window"); + return; + } + if (process.env.NODE_ENV === "development") { + win.webContents.openDevTools({ mode: "detach" }); + win.loadURL(`${process.env.ELECTRON_RENDERER_URL}/#/lyric`); + } else { + const distPath = path.resolve(__dirname, "../renderer"); + win.loadURL(`file://${distPath}/index.html#/lyric`); + } + win.setMinimumSize(600, 200); + win.setSkipTaskbar(true); + win.once("ready-to-show", () => { + console.log("Lyric window ready to show"); + win.show(); + }); + }); + ipcMain.on("send-lyric", (_, data) => { + if (lyricWindow && !lyricWindow.isDestroyed()) { + try { + lyricWindow.webContents.send("receive-lyric", data); + } catch (error) { + console.error("Error processing lyric data:", error); + } + } + }); + ipcMain.on("top-lyric", (_, data) => { + if (lyricWindow && !lyricWindow.isDestroyed()) { + lyricWindow.setAlwaysOnTop(data); + } + }); + ipcMain.on("close-lyric", () => { + if (lyricWindow && !lyricWindow.isDestroyed()) { + lyricWindow.webContents.send("lyric-window-close"); + mainWin.webContents.send("lyric-control-back", "close"); + lyricWindow.destroy(); + lyricWindow = null; + } + }); + ipcMain.on("mouseenter-lyric", () => { + if (lyricWindow && !lyricWindow.isDestroyed()) { + lyricWindow.setIgnoreMouseEvents(true); + } + }); + ipcMain.on("mouseleave-lyric", () => { + if (lyricWindow && !lyricWindow.isDestroyed()) { + lyricWindow.setIgnoreMouseEvents(false); + } + }); + ipcMain.on("lyric-drag-move", (_, { deltaX, deltaY }) => { + if (!lyricWindow || lyricWindow.isDestroyed()) return; + const [currentX, currentY] = lyricWindow.getPosition(); + const { width: screenWidth, height: screenHeight } = electron.screen.getPrimaryDisplay().workAreaSize; + const [windowWidth, windowHeight] = lyricWindow.getSize(); + const newX = Math.max(0, Math.min(currentX + deltaX, screenWidth - windowWidth)); + const newY = Math.max(0, Math.min(currentY + deltaY, screenHeight - windowHeight)); + lyricWindow.setPosition(newX, newY); + store$2.set("lyricWindowBounds", { + ...lyricWindow.getBounds(), + x: newX, + y: newY + }); + }); + ipcMain.on("set-ignore-mouse", (_, shouldIgnore) => { + if (!lyricWindow || lyricWindow.isDestroyed()) return; + lyricWindow.setIgnoreMouseEvents(shouldIgnore, { forward: true }); + }); + ipcMain.on("control-back", (_, command) => { + console.log("command", command); + if (mainWin && !mainWin.isDestroyed()) { + console.log("Sending control-back command:", command); + mainWin.webContents.send("lyric-control-back", command); + } + }); +}; +const unblockMusic = async (id) => { + return new Promise((resolve, reject) => { + match(parseInt(id, 10), ["qq", "migu", "kugou", "joox"]).then((data) => { + resolve({ + data: { + data, + params: { + id, + type: "song" + } + } + }); + }).catch((err) => { + reject(err); + }); + }); +}; +const store$1 = new Store(); +if (!fs.existsSync(path.resolve(os.tmpdir(), "anonymous_token"))) { + fs.writeFileSync(path.resolve(os.tmpdir(), "anonymous_token"), "", "utf-8"); +} +electron.ipcMain.handle("unblock-music", async (_, id) => { + return unblockMusic(id); +}); +async function startMusicApi() { + console.log("MUSIC API STARTED"); + const port = store$1.get("set").musicApiPort || 30488; + await server.serveNcmApi({ + port + }); +} +const iconPath = path.join(__dirname, "../../resources"); +const icon = electron.nativeImage.createFromPath( + process.platform === "darwin" ? path.join(iconPath, "icon.icns") : process.platform === "win32" ? path.join(iconPath, "favicon.ico") : path.join(iconPath, "icon.png") +); +let mainWindow; +function createWindow() { + startMusicApi(); + mainWindow = new electron.BrowserWindow({ + width: 1200, + height: 780, + show: false, + frame: false, + autoHideMenuBar: true, + icon, + webPreferences: { + preload: path.join(__dirname, "../preload/index.js"), + sandbox: false, + contextIsolation: true + } + }); + mainWindow.setMinimumSize(1200, 780); + mainWindow.on("ready-to-show", () => { + mainWindow.show(); + }); + mainWindow.webContents.setWindowOpenHandler((details) => { + electron.shell.openExternal(details.url); + return { action: "deny" }; + }); + if (utils.is.dev && process.env.ELECTRON_RENDERER_URL) { + mainWindow.webContents.openDevTools({ mode: "detach" }); + mainWindow.loadURL(process.env.ELECTRON_RENDERER_URL); + } else { + mainWindow.webContents.openDevTools({ mode: "detach" }); + mainWindow.loadFile(path.join(__dirname, "../renderer/index.html")); + } + const trayIcon = electron.nativeImage.createFromPath(path.join(iconPath, "icon_16x16.png")).resize({ width: 16, height: 16 }); + const tray = new electron.Tray(trayIcon); + const contextMenu = electron.Menu.buildFromTemplate([ + { + label: "显示", + click: () => { + mainWindow.show(); + } + }, + { + label: "退出", + click: () => { + mainWindow.destroy(); + electron.app.quit(); + } + } + ]); + tray.setContextMenu(contextMenu); + tray.on("click", () => { + if (mainWindow.isVisible()) { + mainWindow.hide(); + } else { + mainWindow.show(); + } + }); + loadLyricWindow(electron.ipcMain, mainWindow); +} +electron.app.whenReady().then(() => { + utils.electronApp.setAppUserModelId("com.alger.music"); + electron.app.on("browser-window-created", (_, window) => { + utils.optimizer.watchWindowShortcuts(window); + }); + electron.ipcMain.on("ping", () => console.log("pong")); + createWindow(); + electron.app.on("activate", function() { + if (electron.BrowserWindow.getAllWindows().length === 0) createWindow(); + }); +}); +electron.app.on("ready", () => { + electron.globalShortcut.register("CommandOrControl+Alt+Shift+M", () => { + if (mainWindow.isVisible()) { + mainWindow.hide(); + } else { + mainWindow.show(); + } + }); +}); +electron.app.on("window-all-closed", () => { + if (process.platform !== "darwin") { + electron.app.quit(); + } +}); +electron.ipcMain.on("minimize-window", (event) => { + const win = electron.BrowserWindow.fromWebContents(event.sender); + if (win) { + win.minimize(); + } +}); +electron.ipcMain.on("maximize-window", (event) => { + const win = electron.BrowserWindow.fromWebContents(event.sender); + if (win) { + if (win.isMaximized()) { + win.unmaximize(); + } else { + win.maximize(); + } + } +}); +electron.ipcMain.on("close-window", (event) => { + const win = electron.BrowserWindow.fromWebContents(event.sender); + if (win) { + win.destroy(); + electron.app.quit(); + } +}); +electron.ipcMain.on("drag-start", (event) => { + const win = electron.BrowserWindow.fromWebContents(event.sender); + if (win) { + win.webContents.beginFrameSubscription((frameBuffer) => { + event.reply("frame-buffer", frameBuffer); + }); + } +}); +electron.ipcMain.on("mini-tray", (event) => { + const win = electron.BrowserWindow.fromWebContents(event.sender); + if (win) { + win.hide(); + } +}); +electron.ipcMain.on("restart", () => { + electron.app.relaunch(); + electron.app.exit(0); +}); +const store = new Store({ + name: "config", + // 配置文件名 + defaults: { + set + } +}); +electron.ipcMain.on("set-store-value", (_, key, value) => { + store.set(key, value); +}); +electron.ipcMain.on("get-store-value", (_, key) => { + const value = store.get(key); + _.returnValue = value || ""; +}); diff --git a/out/preload/index.js b/out/preload/index.js new file mode 100644 index 0000000..f8670c8 --- /dev/null +++ b/out/preload/index.js @@ -0,0 +1,25 @@ +"use strict"; +const preload = require("@electron-toolkit/preload"); +const electron = require("electron"); +const api = { + minimize: () => electron.ipcRenderer.send("minimize-window"), + maximize: () => electron.ipcRenderer.send("maximize-window"), + close: () => electron.ipcRenderer.send("close-window"), + dragStart: (data) => electron.ipcRenderer.send("drag-start", data), + miniTray: () => electron.ipcRenderer.send("mini-tray"), + restart: () => electron.ipcRenderer.send("restart"), + openLyric: () => electron.ipcRenderer.send("open-lyric"), + sendLyric: (data) => electron.ipcRenderer.send("send-lyric", data), + unblockMusic: (id) => electron.ipcRenderer.invoke("unblock-music", id) +}; +if (process.contextIsolated) { + try { + electron.contextBridge.exposeInMainWorld("electron", preload.electronAPI); + electron.contextBridge.exposeInMainWorld("api", api); + } catch (error) { + console.error(error); + } +} else { + window.electron = preload.electronAPI; + window.api = api; +} diff --git a/out/renderer/assets/AppMenu-CbDXL_JE.js b/out/renderer/assets/AppMenu-CbDXL_JE.js new file mode 100644 index 0000000..ae96239 --- /dev/null +++ b/out/renderer/assets/AppMenu-CbDXL_JE.js @@ -0,0 +1,98 @@ +import { d as defineComponent, af as useRoute, r as ref, E as watch, ar as resolveComponent, j as openBlock, c as createElementBlock, b as createBaseVNode, u as unref, a3 as Fragment, a4 as renderList, e as createVNode, f as withCtx, n as normalizeClass, a2 as normalizeStyle, t as toDisplayString, T as createCommentVNode, _ as _export_sfc } from "./index-DKaFsuse.js"; +const icon = "" + new URL("icon-mGmYaNg4.png", import.meta.url).href; +const _hoisted_1 = { class: "app-menu-header" }; +const _hoisted_2 = ["src"]; +const _hoisted_3 = { class: "app-menu-list" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "AppMenu", + props: { + size: { + type: String, + default: "26px" + }, + color: { + type: String, + default: "#aaa" + }, + selectColor: { + type: String, + default: "#10B981" + }, + menus: { + type: Array, + default: () => [] + } + }, + setup(__props) { + const props = __props; + const route = useRoute(); + const path = ref(route.path); + watch( + () => route.path, + async (newParams) => { + path.value = newParams; + } + ); + const isChecked = (index) => { + return path.value === props.menus[index].path; + }; + const iconStyle = (index) => { + const style = { + fontSize: props.size, + color: isChecked(index) ? props.selectColor : props.color + }; + return style; + }; + const isText = ref(false); + return (_ctx, _cache) => { + const _component_router_link = resolveComponent("router-link"); + return openBlock(), createElementBlock("div", null, [ + createBaseVNode("div", { + class: normalizeClass(["app-menu", { "app-menu-expanded": unref(isText) }]) + }, [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("div", { + class: "app-menu-logo", + onClick: _cache[0] || (_cache[0] = ($event) => isText.value = !unref(isText)) + }, [ + createBaseVNode("img", { + src: unref(icon), + class: "w-9 h-9", + alt: "logo" + }, null, 8, _hoisted_2) + ]) + ]), + createBaseVNode("div", _hoisted_3, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(__props.menus, (item, index) => { + return openBlock(), createElementBlock("div", { + key: item.path, + class: "app-menu-item" + }, [ + createVNode(_component_router_link, { + class: "app-menu-item-link", + to: item.path + }, { + default: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(["iconfont app-menu-item-icon", item.meta.icon]), + style: normalizeStyle(iconStyle(index)) + }, null, 6), + unref(isText) ? (openBlock(), createElementBlock("span", { + key: 0, + class: normalizeClass(["app-menu-item-text ml-3", isChecked(index) ? "text-green-500" : ""]) + }, toDisplayString(item.meta.title), 3)) : createCommentVNode("", true) + ]), + _: 2 + }, 1032, ["to"]) + ]); + }), 128)) + ]) + ], 2) + ]); + }; + } +}); +const AppMenu = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f209e92f"]]); +export { + AppMenu as default +}; diff --git a/out/renderer/assets/AppMenu-CbDXL_JE.js.gz b/out/renderer/assets/AppMenu-CbDXL_JE.js.gz new file mode 100644 index 0000000..4d6c45c Binary files /dev/null and b/out/renderer/assets/AppMenu-CbDXL_JE.js.gz differ diff --git a/out/renderer/assets/AppMenu-iZYnVe2B.css b/out/renderer/assets/AppMenu-iZYnVe2B.css new file mode 100644 index 0000000..6b7185d --- /dev/null +++ b/out/renderer/assets/AppMenu-iZYnVe2B.css @@ -0,0 +1,90 @@ +.app-menu[data-v-f209e92f] { + width: 100px; + flex-direction: column; + align-items: center; + justify-content: center; + padding-left: 0.25rem; + padding-right: 0.25rem; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 300ms; +} +.app-menu-expanded[data-v-f209e92f] { + width: 160px; +} +.app-menu-expanded .app-menu-item[data-v-f209e92f] { + margin-right: 1rem; + border-radius: 0.25rem; +} +.app-menu-expanded .app-menu-item[data-v-f209e92f]:hover { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} +.app-menu-expanded .app-menu-item[data-v-f209e92f]:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} +.app-menu-item-link[data-v-f209e92f], +.app-menu-header[data-v-f209e92f] { + margin-left: 0.5rem; + display: flex; + width: 200px; + align-items: center; + overflow: hidden; + padding-left: 1.25rem; + padding-right: 1.25rem; +} +.app-menu-header[data-v-f209e92f] { + margin-left: 0.25rem; +} +.app-menu-item-link[data-v-f209e92f] { + margin-bottom: 1.5rem; + margin-top: 1.5rem; +} +.app-menu-item-icon[data-v-f209e92f] { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; +} +.app-menu-item-icon[data-v-f209e92f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.app-menu-item-icon[data-v-f209e92f]:hover { + --tw-scale-x: 1.05 !important; + --tw-scale-y: 1.05 !important; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) !important; + --tw-text-opacity: 1 !important; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)) !important; +} +.mobile .app-menu[data-v-f209e92f] { + max-width: 100%; + width: 100vw; + position: relative; + z-index: 999999; + border-top-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.mobile .app-menu[data-v-f209e92f]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.mobile .app-menu-header[data-v-f209e92f] { + display: none; +} +.mobile .app-menu-list[data-v-f209e92f] { + display: flex; + justify-content: space-between; +} +.mobile .app-menu-item-link[data-v-f209e92f] { + margin-top: 1rem; + margin-bottom: 1rem; + width: auto; +} \ No newline at end of file diff --git a/out/renderer/assets/AppMenu-iZYnVe2B.css.gz b/out/renderer/assets/AppMenu-iZYnVe2B.css.gz new file mode 100644 index 0000000..5bd99f0 Binary files /dev/null and b/out/renderer/assets/AppMenu-iZYnVe2B.css.gz differ diff --git a/out/renderer/assets/Avatar-rQ2og-6c.js b/out/renderer/assets/Avatar-rQ2og-6c.js new file mode 100644 index 0000000..b21f078 --- /dev/null +++ b/out/renderer/assets/Avatar-rQ2og-6c.js @@ -0,0 +1,319 @@ +import { i as isImageSupportNativeLazy, o as observeIntersection } from "./Image-DXClIklC.js"; +import { t as tagInjectionKey } from "./Tag-C0oC92WF.js"; +import { aL as createInjectionKey, p as cB, aN as insideModal, m as c, aO as insidePopover, Y as cE, d as defineComponent, x as useConfig, r as ref, G as computed, q as useTheme, ap as useThemeClass, o as onMounted, a8 as watchEffect, a as onBeforeUnmount, E as watch, K as resolveSlot, I as resolveWrappedSlot, l as h, as as inject, bw as avatarLight, ao as createKey, bx as color2Class, ay as VResizeObserver } from "./index-DKaFsuse.js"; +const avatarGroupInjectionKey = createInjectionKey("n-avatar-group"); +const style = cB("avatar", ` + width: var(--n-merged-size); + height: var(--n-merged-size); + color: #FFF; + font-size: var(--n-font-size); + display: inline-flex; + position: relative; + overflow: hidden; + text-align: center; + border: var(--n-border); + border-radius: var(--n-border-radius); + --n-merged-color: var(--n-color); + background-color: var(--n-merged-color); + transition: + border-color .3s var(--n-bezier), + background-color .3s var(--n-bezier), + color .3s var(--n-bezier); +`, [insideModal(c("&", "--n-merged-color: var(--n-color-modal);")), insidePopover(c("&", "--n-merged-color: var(--n-color-popover);")), c("img", ` + width: 100%; + height: 100%; + `), cE("text", ` + white-space: nowrap; + display: inline-block; + position: absolute; + left: 50%; + top: 50%; + `), cB("icon", ` + vertical-align: bottom; + font-size: calc(var(--n-merged-size) - 6px); + `), cE("text", "line-height: 1.25")]); +const avatarProps = Object.assign(Object.assign({}, useTheme.props), { + size: [String, Number], + src: String, + circle: { + type: Boolean, + default: void 0 + }, + objectFit: String, + round: { + type: Boolean, + default: void 0 + }, + bordered: { + type: Boolean, + default: void 0 + }, + onError: Function, + fallbackSrc: String, + intersectionObserverOptions: Object, + lazy: Boolean, + onLoad: Function, + renderPlaceholder: Function, + renderFallback: Function, + imgProps: Object, + /** @deprecated */ + color: String +}); +const __unplugin_components_2 = defineComponent({ + name: "Avatar", + props: avatarProps, + setup(props) { + const { + mergedClsPrefixRef, + inlineThemeDisabled + } = useConfig(props); + const hasLoadErrorRef = ref(false); + let memoedTextHtml = null; + const textRef = ref(null); + const selfRef = ref(null); + const fitTextTransform = () => { + const { + value: textEl + } = textRef; + if (textEl) { + if (memoedTextHtml === null || memoedTextHtml !== textEl.innerHTML) { + memoedTextHtml = textEl.innerHTML; + const { + value: selfEl + } = selfRef; + if (selfEl) { + const { + offsetWidth: elWidth, + offsetHeight: elHeight + } = selfEl; + const { + offsetWidth: textWidth, + offsetHeight: textHeight + } = textEl; + const radix = 0.9; + const ratio = Math.min(elWidth / textWidth * radix, elHeight / textHeight * radix, 1); + textEl.style.transform = `translateX(-50%) translateY(-50%) scale(${ratio})`; + } + } + } + }; + const NAvatarGroup = inject(avatarGroupInjectionKey, null); + const mergedSizeRef = computed(() => { + const { + size + } = props; + if (size) return size; + const { + size: avatarGroupSize + } = NAvatarGroup || {}; + if (avatarGroupSize) return avatarGroupSize; + return "medium"; + }); + const themeRef = useTheme("Avatar", "-avatar", style, avatarLight, props, mergedClsPrefixRef); + const TagInjection = inject(tagInjectionKey, null); + const mergedRoundRef = computed(() => { + if (NAvatarGroup) return true; + const { + round, + circle + } = props; + if (round !== void 0 || circle !== void 0) return round || circle; + if (TagInjection) { + return TagInjection.roundRef.value; + } + return false; + }); + const mergedBorderedRef = computed(() => { + if (NAvatarGroup) return true; + return props.bordered || false; + }); + const cssVarsRef = computed(() => { + const size = mergedSizeRef.value; + const round = mergedRoundRef.value; + const bordered = mergedBorderedRef.value; + const { + color: propColor + } = props; + const { + self: { + borderRadius, + fontSize, + color, + border, + colorModal, + colorPopover + }, + common: { + cubicBezierEaseInOut + } + } = themeRef.value; + let height; + if (typeof size === "number") { + height = `${size}px`; + } else { + height = themeRef.value.self[createKey("height", size)]; + } + return { + "--n-font-size": fontSize, + "--n-border": bordered ? border : "none", + "--n-border-radius": round ? "50%" : borderRadius, + "--n-color": propColor || color, + "--n-color-modal": propColor || colorModal, + "--n-color-popover": propColor || colorPopover, + "--n-bezier": cubicBezierEaseInOut, + "--n-merged-size": `var(--n-avatar-size-override, ${height})` + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("avatar", computed(() => { + const size = mergedSizeRef.value; + const round = mergedRoundRef.value; + const bordered = mergedBorderedRef.value; + const { + color + } = props; + let hash = ""; + if (size) { + if (typeof size === "number") { + hash += `a${size}`; + } else { + hash += size[0]; + } + } + if (round) { + hash += "b"; + } + if (bordered) { + hash += "c"; + } + if (color) { + hash += color2Class(color); + } + return hash; + }), cssVarsRef, props) : void 0; + const shouldStartLoadingRef = ref(!props.lazy); + onMounted(() => { + if (props.lazy && props.intersectionObserverOptions) { + let unobserve; + const stopWatchHandle = watchEffect(() => { + unobserve === null || unobserve === void 0 ? void 0 : unobserve(); + unobserve = void 0; + if (props.lazy) { + unobserve = observeIntersection(selfRef.value, props.intersectionObserverOptions, shouldStartLoadingRef); + } + }); + onBeforeUnmount(() => { + stopWatchHandle(); + unobserve === null || unobserve === void 0 ? void 0 : unobserve(); + }); + } + }); + watch(() => { + var _a; + return props.src || ((_a = props.imgProps) === null || _a === void 0 ? void 0 : _a.src); + }, () => { + hasLoadErrorRef.value = false; + }); + const loadedRef = ref(!props.lazy); + return { + textRef, + selfRef, + mergedRoundRef, + mergedClsPrefix: mergedClsPrefixRef, + fitTextTransform, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender, + hasLoadError: hasLoadErrorRef, + shouldStartLoading: shouldStartLoadingRef, + loaded: loadedRef, + mergedOnError: (e) => { + if (!shouldStartLoadingRef.value) return; + hasLoadErrorRef.value = true; + const { + onError, + imgProps: { + onError: imgPropsOnError + } = {} + } = props; + onError === null || onError === void 0 ? void 0 : onError(e); + imgPropsOnError === null || imgPropsOnError === void 0 ? void 0 : imgPropsOnError(e); + }, + mergedOnLoad: (e) => { + const { + onLoad, + imgProps: { + onLoad: imgPropsOnLoad + } = {} + } = props; + onLoad === null || onLoad === void 0 ? void 0 : onLoad(e); + imgPropsOnLoad === null || imgPropsOnLoad === void 0 ? void 0 : imgPropsOnLoad(e); + loadedRef.value = true; + } + }; + }, + render() { + var _a, _b; + const { + $slots, + src, + mergedClsPrefix, + lazy, + onRender, + loaded, + hasLoadError, + imgProps = {} + } = this; + onRender === null || onRender === void 0 ? void 0 : onRender(); + let img; + const placeholderNode = !loaded && !hasLoadError && (this.renderPlaceholder ? this.renderPlaceholder() : (_b = (_a = this.$slots).placeholder) === null || _b === void 0 ? void 0 : _b.call(_a)); + if (this.hasLoadError) { + img = this.renderFallback ? this.renderFallback() : resolveSlot($slots.fallback, () => [h("img", { + src: this.fallbackSrc, + style: { + objectFit: this.objectFit + } + })]); + } else { + img = resolveWrappedSlot($slots.default, (children) => { + if (children) { + return h(VResizeObserver, { + onResize: this.fitTextTransform + }, { + default: () => h("span", { + ref: "textRef", + class: `${mergedClsPrefix}-avatar__text` + }, children) + }); + } else if (src || imgProps.src) { + const loadSrc = this.src || imgProps.src; + return h("img", Object.assign(Object.assign({}, imgProps), { + loading: ( + // If interseciton observer options is set, do not use native lazy + isImageSupportNativeLazy && !this.intersectionObserverOptions && lazy ? "lazy" : "eager" + ), + src: lazy && this.intersectionObserverOptions ? this.shouldStartLoading ? loadSrc : void 0 : loadSrc, + "data-image-src": loadSrc, + onLoad: this.mergedOnLoad, + onError: this.mergedOnError, + style: [imgProps.style || "", { + objectFit: this.objectFit + }, placeholderNode ? { + height: "0", + width: "0", + visibility: "hidden", + position: "absolute" + } : ""] + })); + } + }); + } + return h("span", { + ref: "selfRef", + class: [`${mergedClsPrefix}-avatar`, this.themeClass], + style: this.cssVars + }, img, lazy && placeholderNode); + } +}); +export { + __unplugin_components_2 as _ +}; diff --git a/out/renderer/assets/Avatar-rQ2og-6c.js.gz b/out/renderer/assets/Avatar-rQ2og-6c.js.gz new file mode 100644 index 0000000..7f32948 Binary files /dev/null and b/out/renderer/assets/Avatar-rQ2og-6c.js.gz differ diff --git a/out/renderer/assets/Drawer-BEJ8Ydua.js b/out/renderer/assets/Drawer-BEJ8Ydua.js new file mode 100644 index 0000000..dea8270 --- /dev/null +++ b/out/renderer/assets/Drawer-BEJ8Ydua.js @@ -0,0 +1,803 @@ +import { d as defineComponent, r as ref, as as inject, G as computed, x as useConfig, F as useRtl, a8 as watchEffect, E as watch, a as onBeforeUnmount, aT as clickoutside, aU as useLockHtmlScroll, $ as provide, w as withDirectives, a6 as vShow, l as h, aV as FocusTrap, ak as Transition, ax as mergeProps, aK as Scrollbar, aW as drawerInjectionKey, aX as drawerBodyInjectionKey, aY as popoverBodyInjectionKey, aZ as modalBodyInjectionKey, m as c, a_ as commonVariables, p as cB, W as cM, Y as cE, a$ as fadeInTransition, aR as isMounted, q as useTheme, C as useMergedState, A as toRef, b0 as useIsComposing, ap as useThemeClass, b1 as LazyTeleport, b2 as drawerLight, b3 as eventEffectNotPerformed, L as call, b4 as zindexable } from "./index-DKaFsuse.js"; +import { f as formatLength } from "./Image-DXClIklC.js"; +const NDrawerBodyWrapper = defineComponent({ + name: "NDrawerContent", + inheritAttrs: false, + props: { + blockScroll: Boolean, + show: { + type: Boolean, + default: void 0 + }, + displayDirective: { + type: String, + required: true + }, + placement: { + type: String, + required: true + }, + contentClass: String, + contentStyle: [Object, String], + nativeScrollbar: { + type: Boolean, + required: true + }, + scrollbarProps: Object, + trapFocus: { + type: Boolean, + default: true + }, + autoFocus: { + type: Boolean, + default: true + }, + showMask: { + type: [Boolean, String], + required: true + }, + maxWidth: Number, + maxHeight: Number, + minWidth: Number, + minHeight: Number, + resizable: Boolean, + onClickoutside: Function, + onAfterLeave: Function, + onAfterEnter: Function, + onEsc: Function + }, + setup(props) { + const displayedRef = ref(!!props.show); + const bodyRef = ref(null); + const NDrawer = inject(drawerInjectionKey); + let startPosition = 0; + let memoizedBodyStyleCursor = ""; + let hoverTimerId = null; + const isHoverOnResizeTriggerRef = ref(false); + const isDraggingRef = ref(false); + const isVertical = computed(() => { + return props.placement === "top" || props.placement === "bottom"; + }); + const { + mergedClsPrefixRef, + mergedRtlRef + } = useConfig(props); + const rtlEnabledRef = useRtl("Drawer", mergedRtlRef, mergedClsPrefixRef); + const handleBodyMouseleave = handleBodyMouseup; + const handleMousedownResizeTrigger = (e) => { + isDraggingRef.value = true; + startPosition = isVertical.value ? e.clientY : e.clientX; + memoizedBodyStyleCursor = document.body.style.cursor; + document.body.style.cursor = isVertical.value ? "ns-resize" : "ew-resize"; + document.body.addEventListener("mousemove", handleBodyMousemove); + document.body.addEventListener("mouseleave", handleBodyMouseleave); + document.body.addEventListener("mouseup", handleBodyMouseup); + }; + const handleMouseenterResizeTrigger = () => { + if (hoverTimerId !== null) { + window.clearTimeout(hoverTimerId); + hoverTimerId = null; + } + if (isDraggingRef.value) { + isHoverOnResizeTriggerRef.value = true; + } else { + hoverTimerId = window.setTimeout(() => { + isHoverOnResizeTriggerRef.value = true; + }, 300); + } + }; + const handleMouseleaveResizeTrigger = () => { + if (hoverTimerId !== null) { + window.clearTimeout(hoverTimerId); + hoverTimerId = null; + } + isHoverOnResizeTriggerRef.value = false; + }; + const { + doUpdateHeight, + doUpdateWidth + } = NDrawer; + const regulateWidth = (size) => { + const { + maxWidth + } = props; + if (maxWidth && size > maxWidth) return maxWidth; + const { + minWidth + } = props; + if (minWidth && size < minWidth) return minWidth; + return size; + }; + const regulateHeight = (size) => { + const { + maxHeight + } = props; + if (maxHeight && size > maxHeight) return maxHeight; + const { + minHeight + } = props; + if (minHeight && size < minHeight) return minHeight; + return size; + }; + function handleBodyMousemove(e) { + var _a, _b; + if (isDraggingRef.value) { + if (isVertical.value) { + let height = ((_a = bodyRef.value) === null || _a === void 0 ? void 0 : _a.offsetHeight) || 0; + const increment = startPosition - e.clientY; + height += props.placement === "bottom" ? increment : -increment; + height = regulateHeight(height); + doUpdateHeight(height); + startPosition = e.clientY; + } else { + let width = ((_b = bodyRef.value) === null || _b === void 0 ? void 0 : _b.offsetWidth) || 0; + const increment = startPosition - e.clientX; + width += props.placement === "right" ? increment : -increment; + width = regulateWidth(width); + doUpdateWidth(width); + startPosition = e.clientX; + } + } + } + function handleBodyMouseup() { + if (isDraggingRef.value) { + startPosition = 0; + isDraggingRef.value = false; + document.body.style.cursor = memoizedBodyStyleCursor; + document.body.removeEventListener("mousemove", handleBodyMousemove); + document.body.removeEventListener("mouseup", handleBodyMouseup); + document.body.removeEventListener("mouseleave", handleBodyMouseleave); + } + } + watchEffect(() => { + if (props.show) displayedRef.value = true; + }); + watch(() => props.show, (value) => { + if (!value) { + handleBodyMouseup(); + } + }); + onBeforeUnmount(() => { + handleBodyMouseup(); + }); + const bodyDirectivesRef = computed(() => { + const { + show + } = props; + const directives = [[vShow, show]]; + if (!props.showMask) { + directives.push([clickoutside, props.onClickoutside, void 0, { + capture: true + }]); + } + return directives; + }); + function handleAfterLeave() { + var _a; + displayedRef.value = false; + (_a = props.onAfterLeave) === null || _a === void 0 ? void 0 : _a.call(props); + } + useLockHtmlScroll(computed(() => props.blockScroll && displayedRef.value)); + provide(drawerBodyInjectionKey, bodyRef); + provide(popoverBodyInjectionKey, null); + provide(modalBodyInjectionKey, null); + return { + bodyRef, + rtlEnabled: rtlEnabledRef, + mergedClsPrefix: NDrawer.mergedClsPrefixRef, + isMounted: NDrawer.isMountedRef, + mergedTheme: NDrawer.mergedThemeRef, + displayed: displayedRef, + transitionName: computed(() => { + return { + right: "slide-in-from-right-transition", + left: "slide-in-from-left-transition", + top: "slide-in-from-top-transition", + bottom: "slide-in-from-bottom-transition" + }[props.placement]; + }), + handleAfterLeave, + bodyDirectives: bodyDirectivesRef, + handleMousedownResizeTrigger, + handleMouseenterResizeTrigger, + handleMouseleaveResizeTrigger, + isDragging: isDraggingRef, + isHoverOnResizeTrigger: isHoverOnResizeTriggerRef + }; + }, + render() { + const { + $slots, + mergedClsPrefix + } = this; + return this.displayDirective === "show" || this.displayed || this.show ? withDirectives( + /* Keep the wrapper dom. Make sure the drawer has a host. + Nor the detached content will disappear without transition */ + h("div", { + role: "none" + }, h(FocusTrap, { + disabled: !this.showMask || !this.trapFocus, + active: this.show, + autoFocus: this.autoFocus, + onEsc: this.onEsc + }, { + default: () => h(Transition, { + name: this.transitionName, + appear: this.isMounted, + onAfterEnter: this.onAfterEnter, + onAfterLeave: this.handleAfterLeave + }, { + default: () => withDirectives(h("div", mergeProps(this.$attrs, { + role: "dialog", + ref: "bodyRef", + "aria-modal": "true", + class: [ + `${mergedClsPrefix}-drawer`, + this.rtlEnabled && `${mergedClsPrefix}-drawer--rtl`, + `${mergedClsPrefix}-drawer--${this.placement}-placement`, + /** + * When the mouse is pressed to resize the drawer, + * disable text selection + */ + this.isDragging && `${mergedClsPrefix}-drawer--unselectable`, + this.nativeScrollbar && `${mergedClsPrefix}-drawer--native-scrollbar` + ] + }), [this.resizable ? h("div", { + class: [`${mergedClsPrefix}-drawer__resize-trigger`, (this.isDragging || this.isHoverOnResizeTrigger) && `${mergedClsPrefix}-drawer__resize-trigger--hover`], + onMouseenter: this.handleMouseenterResizeTrigger, + onMouseleave: this.handleMouseleaveResizeTrigger, + onMousedown: this.handleMousedownResizeTrigger + }) : null, this.nativeScrollbar ? h("div", { + class: [`${mergedClsPrefix}-drawer-content-wrapper`, this.contentClass], + style: this.contentStyle, + role: "none" + }, $slots) : h(Scrollbar, Object.assign({}, this.scrollbarProps, { + contentStyle: this.contentStyle, + contentClass: [`${mergedClsPrefix}-drawer-content-wrapper`, this.contentClass], + theme: this.mergedTheme.peers.Scrollbar, + themeOverrides: this.mergedTheme.peerOverrides.Scrollbar + }), $slots)]), this.bodyDirectives) + }) + })), + [[vShow, this.displayDirective === "if" || this.displayed || this.show]] + ) : null; + } +}); +const { + cubicBezierEaseIn: cubicBezierEaseIn$3, + cubicBezierEaseOut: cubicBezierEaseOut$3 +} = commonVariables; +function slideInFromBottomTransition({ + duration = "0.3s", + leaveDuration = "0.2s", + name = "slide-in-from-bottom" +} = {}) { + return [c(`&.${name}-transition-leave-active`, { + transition: `transform ${leaveDuration} ${cubicBezierEaseIn$3}` + }), c(`&.${name}-transition-enter-active`, { + transition: `transform ${duration} ${cubicBezierEaseOut$3}` + }), c(`&.${name}-transition-enter-to`, { + transform: "translateY(0)" + }), c(`&.${name}-transition-enter-from`, { + transform: "translateY(100%)" + }), c(`&.${name}-transition-leave-from`, { + transform: "translateY(0)" + }), c(`&.${name}-transition-leave-to`, { + transform: "translateY(100%)" + })]; +} +const { + cubicBezierEaseIn: cubicBezierEaseIn$2, + cubicBezierEaseOut: cubicBezierEaseOut$2 +} = commonVariables; +function slideInFromLeftTransition({ + duration = "0.3s", + leaveDuration = "0.2s", + name = "slide-in-from-left" +} = {}) { + return [c(`&.${name}-transition-leave-active`, { + transition: `transform ${leaveDuration} ${cubicBezierEaseIn$2}` + }), c(`&.${name}-transition-enter-active`, { + transition: `transform ${duration} ${cubicBezierEaseOut$2}` + }), c(`&.${name}-transition-enter-to`, { + transform: "translateX(0)" + }), c(`&.${name}-transition-enter-from`, { + transform: "translateX(-100%)" + }), c(`&.${name}-transition-leave-from`, { + transform: "translateX(0)" + }), c(`&.${name}-transition-leave-to`, { + transform: "translateX(-100%)" + })]; +} +const { + cubicBezierEaseIn: cubicBezierEaseIn$1, + cubicBezierEaseOut: cubicBezierEaseOut$1 +} = commonVariables; +function slideInFromRightTransition({ + duration = "0.3s", + leaveDuration = "0.2s", + name = "slide-in-from-right" +} = {}) { + return [c(`&.${name}-transition-leave-active`, { + transition: `transform ${leaveDuration} ${cubicBezierEaseIn$1}` + }), c(`&.${name}-transition-enter-active`, { + transition: `transform ${duration} ${cubicBezierEaseOut$1}` + }), c(`&.${name}-transition-enter-to`, { + transform: "translateX(0)" + }), c(`&.${name}-transition-enter-from`, { + transform: "translateX(100%)" + }), c(`&.${name}-transition-leave-from`, { + transform: "translateX(0)" + }), c(`&.${name}-transition-leave-to`, { + transform: "translateX(100%)" + })]; +} +const { + cubicBezierEaseIn, + cubicBezierEaseOut +} = commonVariables; +function slideInFromTopTransition({ + duration = "0.3s", + leaveDuration = "0.2s", + name = "slide-in-from-top" +} = {}) { + return [c(`&.${name}-transition-leave-active`, { + transition: `transform ${leaveDuration} ${cubicBezierEaseIn}` + }), c(`&.${name}-transition-enter-active`, { + transition: `transform ${duration} ${cubicBezierEaseOut}` + }), c(`&.${name}-transition-enter-to`, { + transform: "translateY(0)" + }), c(`&.${name}-transition-enter-from`, { + transform: "translateY(-100%)" + }), c(`&.${name}-transition-leave-from`, { + transform: "translateY(0)" + }), c(`&.${name}-transition-leave-to`, { + transform: "translateY(-100%)" + })]; +} +const style = c([cB("drawer", ` + word-break: break-word; + line-height: var(--n-line-height); + position: absolute; + pointer-events: all; + box-shadow: var(--n-box-shadow); + transition: + background-color .3s var(--n-bezier), + color .3s var(--n-bezier); + background-color: var(--n-color); + color: var(--n-text-color); + box-sizing: border-box; + `, [slideInFromRightTransition(), slideInFromLeftTransition(), slideInFromTopTransition(), slideInFromBottomTransition(), cM("unselectable", ` + user-select: none; + -webkit-user-select: none; + `), cM("native-scrollbar", [cB("drawer-content-wrapper", ` + overflow: auto; + height: 100%; + `)]), cE("resize-trigger", ` + position: absolute; + background-color: #0000; + transition: background-color .3s var(--n-bezier); + `, [cM("hover", ` + background-color: var(--n-resize-trigger-color-hover); + `)]), cB("drawer-content-wrapper", ` + box-sizing: border-box; + `), cB("drawer-content", ` + height: 100%; + display: flex; + flex-direction: column; + `, [cM("native-scrollbar", [cB("drawer-body-content-wrapper", ` + height: 100%; + overflow: auto; + `)]), cB("drawer-body", ` + flex: 1 0 0; + overflow: hidden; + `), cB("drawer-body-content-wrapper", ` + box-sizing: border-box; + padding: var(--n-body-padding); + `), cB("drawer-header", ` + font-weight: var(--n-title-font-weight); + line-height: 1; + font-size: var(--n-title-font-size); + color: var(--n-title-text-color); + padding: var(--n-header-padding); + transition: border .3s var(--n-bezier); + border-bottom: 1px solid var(--n-divider-color); + border-bottom: var(--n-header-border-bottom); + display: flex; + justify-content: space-between; + align-items: center; + `, [cE("main", ` + flex: 1; + `), cE("close", ` + margin-left: 6px; + transition: + background-color .3s var(--n-bezier), + color .3s var(--n-bezier); + `)]), cB("drawer-footer", ` + display: flex; + justify-content: flex-end; + border-top: var(--n-footer-border-top); + transition: border .3s var(--n-bezier); + padding: var(--n-footer-padding); + `)]), cM("right-placement", ` + top: 0; + bottom: 0; + right: 0; + border-top-left-radius: var(--n-border-radius); + border-bottom-left-radius: var(--n-border-radius); + `, [cE("resize-trigger", ` + width: 3px; + height: 100%; + top: 0; + left: 0; + transform: translateX(-1.5px); + cursor: ew-resize; + `)]), cM("left-placement", ` + top: 0; + bottom: 0; + left: 0; + border-top-right-radius: var(--n-border-radius); + border-bottom-right-radius: var(--n-border-radius); + `, [cE("resize-trigger", ` + width: 3px; + height: 100%; + top: 0; + right: 0; + transform: translateX(1.5px); + cursor: ew-resize; + `)]), cM("top-placement", ` + top: 0; + left: 0; + right: 0; + border-bottom-left-radius: var(--n-border-radius); + border-bottom-right-radius: var(--n-border-radius); + `, [cE("resize-trigger", ` + width: 100%; + height: 3px; + bottom: 0; + left: 0; + transform: translateY(1.5px); + cursor: ns-resize; + `)]), cM("bottom-placement", ` + left: 0; + bottom: 0; + right: 0; + border-top-left-radius: var(--n-border-radius); + border-top-right-radius: var(--n-border-radius); + `, [cE("resize-trigger", ` + width: 100%; + height: 3px; + top: 0; + left: 0; + transform: translateY(-1.5px); + cursor: ns-resize; + `)])]), c("body", [c(">", [cB("drawer-container", ` + position: fixed; + `)])]), cB("drawer-container", ` + position: relative; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + pointer-events: none; + `, [c("> *", ` + pointer-events: all; + `)]), cB("drawer-mask", ` + background-color: rgba(0, 0, 0, .3); + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + `, [cM("invisible", ` + background-color: rgba(0, 0, 0, 0) + `), fadeInTransition({ + enterDuration: "0.2s", + leaveDuration: "0.2s", + enterCubicBezier: "var(--n-bezier-in)", + leaveCubicBezier: "var(--n-bezier-out)" +})])]); +const drawerProps = Object.assign(Object.assign({}, useTheme.props), { + show: Boolean, + width: [Number, String], + height: [Number, String], + placement: { + type: String, + default: "right" + }, + maskClosable: { + type: Boolean, + default: true + }, + showMask: { + type: [Boolean, String], + default: true + }, + to: [String, Object], + displayDirective: { + type: String, + default: "if" + }, + nativeScrollbar: { + type: Boolean, + default: true + }, + zIndex: Number, + onMaskClick: Function, + scrollbarProps: Object, + contentClass: String, + contentStyle: [Object, String], + trapFocus: { + type: Boolean, + default: true + }, + onEsc: Function, + autoFocus: { + type: Boolean, + default: true + }, + closeOnEsc: { + type: Boolean, + default: true + }, + blockScroll: { + type: Boolean, + default: true + }, + maxWidth: Number, + maxHeight: Number, + minWidth: Number, + minHeight: Number, + resizable: Boolean, + defaultWidth: { + type: [Number, String], + default: 251 + }, + defaultHeight: { + type: [Number, String], + default: 251 + }, + onUpdateWidth: [Function, Array], + onUpdateHeight: [Function, Array], + "onUpdate:width": [Function, Array], + "onUpdate:height": [Function, Array], + "onUpdate:show": [Function, Array], + onUpdateShow: [Function, Array], + onAfterEnter: Function, + onAfterLeave: Function, + /** @deprecated */ + drawerStyle: [String, Object], + drawerClass: String, + target: null, + onShow: Function, + onHide: Function +}); +const __unplugin_components_2 = defineComponent({ + name: "Drawer", + inheritAttrs: false, + props: drawerProps, + setup(props) { + const { + mergedClsPrefixRef, + namespaceRef, + inlineThemeDisabled + } = useConfig(props); + const isMountedRef = isMounted(); + const themeRef = useTheme("Drawer", "-drawer", style, drawerLight, props, mergedClsPrefixRef); + const uncontrolledWidthRef = ref(props.defaultWidth); + const uncontrolledHeightRef = ref(props.defaultHeight); + const mergedWidthRef = useMergedState(toRef(props, "width"), uncontrolledWidthRef); + const mergedHeightRef = useMergedState(toRef(props, "height"), uncontrolledHeightRef); + const styleWidthRef = computed(() => { + const { + placement + } = props; + if (placement === "top" || placement === "bottom") return ""; + return formatLength(mergedWidthRef.value); + }); + const styleHeightRef = computed(() => { + const { + placement + } = props; + if (placement === "left" || placement === "right") return ""; + return formatLength(mergedHeightRef.value); + }); + const doUpdateWidth = (value) => { + const { + onUpdateWidth, + "onUpdate:width": _onUpdateWidth + } = props; + if (onUpdateWidth) call(onUpdateWidth, value); + if (_onUpdateWidth) call(_onUpdateWidth, value); + uncontrolledWidthRef.value = value; + }; + const doUpdateHeight = (value) => { + const { + onUpdateHeight, + "onUpdate:width": _onUpdateHeight + } = props; + if (onUpdateHeight) call(onUpdateHeight, value); + if (_onUpdateHeight) call(_onUpdateHeight, value); + uncontrolledHeightRef.value = value; + }; + const mergedBodyStyleRef = computed(() => { + return [{ + width: styleWidthRef.value, + height: styleHeightRef.value + }, props.drawerStyle || ""]; + }); + function handleMaskClick(e) { + const { + onMaskClick, + maskClosable + } = props; + if (maskClosable) { + doUpdateShow(false); + } + if (onMaskClick) onMaskClick(e); + } + function handleOutsideClick(e) { + handleMaskClick(e); + } + const isComposingRef = useIsComposing(); + function handleEsc(e) { + var _a; + (_a = props.onEsc) === null || _a === void 0 ? void 0 : _a.call(props); + if (props.show && props.closeOnEsc && eventEffectNotPerformed(e)) { + if (!isComposingRef.value) { + doUpdateShow(false); + } + } + } + function doUpdateShow(show) { + const { + onHide, + onUpdateShow, + "onUpdate:show": _onUpdateShow + } = props; + if (onUpdateShow) call(onUpdateShow, show); + if (_onUpdateShow) call(_onUpdateShow, show); + if (onHide && !show) call(onHide, show); + } + provide(drawerInjectionKey, { + isMountedRef, + mergedThemeRef: themeRef, + mergedClsPrefixRef, + doUpdateShow, + doUpdateHeight, + doUpdateWidth + }); + const cssVarsRef = computed(() => { + const { + common: { + cubicBezierEaseInOut, + cubicBezierEaseIn: cubicBezierEaseIn2, + cubicBezierEaseOut: cubicBezierEaseOut2 + }, + self: { + color, + textColor, + boxShadow, + lineHeight, + headerPadding, + footerPadding, + borderRadius, + bodyPadding, + titleFontSize, + titleTextColor, + titleFontWeight, + headerBorderBottom, + footerBorderTop, + closeIconColor, + closeIconColorHover, + closeIconColorPressed, + closeColorHover, + closeColorPressed, + closeIconSize, + closeSize, + closeBorderRadius, + resizableTriggerColorHover + } + } = themeRef.value; + return { + "--n-line-height": lineHeight, + "--n-color": color, + "--n-border-radius": borderRadius, + "--n-text-color": textColor, + "--n-box-shadow": boxShadow, + "--n-bezier": cubicBezierEaseInOut, + "--n-bezier-out": cubicBezierEaseOut2, + "--n-bezier-in": cubicBezierEaseIn2, + "--n-header-padding": headerPadding, + "--n-body-padding": bodyPadding, + "--n-footer-padding": footerPadding, + "--n-title-text-color": titleTextColor, + "--n-title-font-size": titleFontSize, + "--n-title-font-weight": titleFontWeight, + "--n-header-border-bottom": headerBorderBottom, + "--n-footer-border-top": footerBorderTop, + "--n-close-icon-color": closeIconColor, + "--n-close-icon-color-hover": closeIconColorHover, + "--n-close-icon-color-pressed": closeIconColorPressed, + "--n-close-size": closeSize, + "--n-close-color-hover": closeColorHover, + "--n-close-color-pressed": closeColorPressed, + "--n-close-icon-size": closeIconSize, + "--n-close-border-radius": closeBorderRadius, + "--n-resize-trigger-color-hover": resizableTriggerColorHover + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("drawer", void 0, cssVarsRef, props) : void 0; + return { + mergedClsPrefix: mergedClsPrefixRef, + namespace: namespaceRef, + mergedBodyStyle: mergedBodyStyleRef, + handleOutsideClick, + handleMaskClick, + handleEsc, + mergedTheme: themeRef, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender, + isMounted: isMountedRef + }; + }, + render() { + const { + mergedClsPrefix + } = this; + return h(LazyTeleport, { + to: this.to, + show: this.show + }, { + default: () => { + var _a; + (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this); + return withDirectives(h("div", { + class: [`${mergedClsPrefix}-drawer-container`, this.namespace, this.themeClass], + style: this.cssVars, + role: "none" + }, this.showMask ? h(Transition, { + name: "fade-in-transition", + appear: this.isMounted + }, { + default: () => this.show ? h("div", { + "aria-hidden": true, + class: [`${mergedClsPrefix}-drawer-mask`, this.showMask === "transparent" && `${mergedClsPrefix}-drawer-mask--invisible`], + onClick: this.handleMaskClick + }) : null + }) : null, h(NDrawerBodyWrapper, Object.assign({}, this.$attrs, { + class: [this.drawerClass, this.$attrs.class], + style: [this.mergedBodyStyle, this.$attrs.style], + blockScroll: this.blockScroll, + contentStyle: this.contentStyle, + contentClass: this.contentClass, + placement: this.placement, + scrollbarProps: this.scrollbarProps, + show: this.show, + displayDirective: this.displayDirective, + nativeScrollbar: this.nativeScrollbar, + onAfterEnter: this.onAfterEnter, + onAfterLeave: this.onAfterLeave, + trapFocus: this.trapFocus, + autoFocus: this.autoFocus, + resizable: this.resizable, + maxHeight: this.maxHeight, + minHeight: this.minHeight, + maxWidth: this.maxWidth, + minWidth: this.minWidth, + showMask: this.showMask, + onEsc: this.handleEsc, + onClickoutside: this.handleOutsideClick + }), this.$slots)), [[zindexable, { + zIndex: this.zIndex, + enabled: this.show + }]]); + } + }); + } +}); +export { + __unplugin_components_2 as _ +}; diff --git a/out/renderer/assets/Drawer-BEJ8Ydua.js.gz b/out/renderer/assets/Drawer-BEJ8Ydua.js.gz new file mode 100644 index 0000000..26c87e9 Binary files /dev/null and b/out/renderer/assets/Drawer-BEJ8Ydua.js.gz differ diff --git a/out/renderer/assets/Ellipsis-D4R5dIX2.js b/out/renderer/assets/Ellipsis-D4R5dIX2.js new file mode 100644 index 0000000..a30ba00 --- /dev/null +++ b/out/renderer/assets/Ellipsis-D4R5dIX2.js @@ -0,0 +1,195 @@ +import { p as cB, V as cNotM, W as cM, q as useTheme, d as defineComponent, b6 as useMergedClsPrefix, b7 as ellipsisLight, r as ref, G as computed, au as onDeactivated, l as h, ax as mergeProps } from "./index-DKaFsuse.js"; +import { _ as __unplugin_components_3 } from "./Image-DXClIklC.js"; +const style = cB("ellipsis", { + overflow: "hidden" +}, [cNotM("line-clamp", ` + white-space: nowrap; + display: inline-block; + vertical-align: bottom; + max-width: 100%; + `), cM("line-clamp", ` + display: -webkit-inline-box; + -webkit-box-orient: vertical; + `), cM("cursor-pointer", ` + cursor: pointer; + `)]); +function createLineClampClass(clsPrefix) { + return `${clsPrefix}-ellipsis--line-clamp`; +} +function createCursorClass(clsPrefix, cursor) { + return `${clsPrefix}-ellipsis--cursor-${cursor}`; +} +const ellipsisProps = Object.assign(Object.assign({}, useTheme.props), { + expandTrigger: String, + lineClamp: [Number, String], + tooltip: { + type: [Boolean, Object], + default: true + } +}); +const __unplugin_components_2 = defineComponent({ + name: "Ellipsis", + inheritAttrs: false, + props: ellipsisProps, + setup(props, { + slots, + attrs + }) { + const mergedClsPrefixRef = useMergedClsPrefix(); + const mergedTheme = useTheme("Ellipsis", "-ellipsis", style, ellipsisLight, props, mergedClsPrefixRef); + const triggerRef = ref(null); + const triggerInnerRef = ref(null); + const tooltipRef = ref(null); + const expandedRef = ref(false); + const ellipsisStyleRef = computed(() => { + const { + lineClamp + } = props; + const { + value: expanded + } = expandedRef; + if (lineClamp !== void 0) { + return { + textOverflow: "", + "-webkit-line-clamp": expanded ? "" : lineClamp + }; + } else { + return { + textOverflow: expanded ? "" : "ellipsis", + "-webkit-line-clamp": "" + }; + } + }); + function getTooltipDisabled() { + let tooltipDisabled = false; + const { + value: expanded + } = expandedRef; + if (expanded) return true; + const { + value: trigger + } = triggerRef; + if (trigger) { + const { + lineClamp + } = props; + syncEllipsisStyle(trigger); + if (lineClamp !== void 0) { + tooltipDisabled = trigger.scrollHeight <= trigger.offsetHeight; + } else { + const { + value: triggerInner + } = triggerInnerRef; + if (triggerInner) { + tooltipDisabled = triggerInner.getBoundingClientRect().width <= trigger.getBoundingClientRect().width; + } + } + syncCursorStyle(trigger, tooltipDisabled); + } + return tooltipDisabled; + } + const handleClickRef = computed(() => { + return props.expandTrigger === "click" ? () => { + var _a; + const { + value: expanded + } = expandedRef; + if (expanded) { + (_a = tooltipRef.value) === null || _a === void 0 ? void 0 : _a.setShow(false); + } + expandedRef.value = !expanded; + } : void 0; + }); + onDeactivated(() => { + var _a; + if (props.tooltip) { + (_a = tooltipRef.value) === null || _a === void 0 ? void 0 : _a.setShow(false); + } + }); + const renderTrigger = () => h("span", Object.assign({}, mergeProps(attrs, { + class: [`${mergedClsPrefixRef.value}-ellipsis`, props.lineClamp !== void 0 ? createLineClampClass(mergedClsPrefixRef.value) : void 0, props.expandTrigger === "click" ? createCursorClass(mergedClsPrefixRef.value, "pointer") : void 0], + style: ellipsisStyleRef.value + }), { + ref: "triggerRef", + onClick: handleClickRef.value, + onMouseenter: ( + // get tooltip disabled will derive cursor style + props.expandTrigger === "click" ? getTooltipDisabled : void 0 + ) + }), props.lineClamp ? slots : h("span", { + ref: "triggerInnerRef" + }, slots)); + function syncEllipsisStyle(trigger) { + if (!trigger) return; + const latestStyle = ellipsisStyleRef.value; + const lineClampClass = createLineClampClass(mergedClsPrefixRef.value); + if (props.lineClamp !== void 0) { + syncTriggerClass(trigger, lineClampClass, "add"); + } else { + syncTriggerClass(trigger, lineClampClass, "remove"); + } + for (const key in latestStyle) { + if (trigger.style[key] !== latestStyle[key]) { + trigger.style[key] = latestStyle[key]; + } + } + } + function syncCursorStyle(trigger, tooltipDisabled) { + const cursorClass = createCursorClass(mergedClsPrefixRef.value, "pointer"); + if (props.expandTrigger === "click" && !tooltipDisabled) { + syncTriggerClass(trigger, cursorClass, "add"); + } else { + syncTriggerClass(trigger, cursorClass, "remove"); + } + } + function syncTriggerClass(trigger, styleClass, action) { + if (action === "add") { + if (!trigger.classList.contains(styleClass)) { + trigger.classList.add(styleClass); + } + } else { + if (trigger.classList.contains(styleClass)) { + trigger.classList.remove(styleClass); + } + } + } + return { + mergedTheme, + triggerRef, + triggerInnerRef, + tooltipRef, + handleClick: handleClickRef, + renderTrigger, + getTooltipDisabled + }; + }, + render() { + var _a; + const { + tooltip, + renderTrigger, + $slots + } = this; + if (tooltip) { + const { + mergedTheme + } = this; + return h(__unplugin_components_3, Object.assign({ + ref: "tooltipRef", + placement: "top" + }, tooltip, { + getDisabled: this.getTooltipDisabled, + theme: mergedTheme.peers.Tooltip, + themeOverrides: mergedTheme.peerOverrides.Tooltip + }), { + trigger: renderTrigger, + default: (_a = $slots.tooltip) !== null && _a !== void 0 ? _a : $slots.default + }); + } else { + return renderTrigger(); + } + } +}); +export { + __unplugin_components_2 as _ +}; diff --git a/out/renderer/assets/Ellipsis-D4R5dIX2.js.gz b/out/renderer/assets/Ellipsis-D4R5dIX2.js.gz new file mode 100644 index 0000000..210f650 Binary files /dev/null and b/out/renderer/assets/Ellipsis-D4R5dIX2.js.gz differ diff --git a/out/renderer/assets/FiraCode-Regular-CRwVj4V2.woff2 b/out/renderer/assets/FiraCode-Regular-CRwVj4V2.woff2 new file mode 100644 index 0000000..d58667c Binary files /dev/null and b/out/renderer/assets/FiraCode-Regular-CRwVj4V2.woff2 differ diff --git a/out/renderer/assets/Icon-DucaliTK.js b/out/renderer/assets/Icon-DucaliTK.js new file mode 100644 index 0000000..c25b924 --- /dev/null +++ b/out/renderer/assets/Icon-DucaliTK.js @@ -0,0 +1,111 @@ +import { p as cB, W as cM, m as c, q as useTheme, d as defineComponent, x as useConfig, bv as iconLight, G as computed, ap as useThemeClass, bd as warn, l as h, ax as mergeProps } from "./index-DKaFsuse.js"; +import { f as formatLength } from "./Image-DXClIklC.js"; +const style = cB("icon", ` + height: 1em; + width: 1em; + line-height: 1em; + text-align: center; + display: inline-block; + position: relative; + fill: currentColor; + transform: translateZ(0); +`, [cM("color-transition", { + transition: "color .3s var(--n-bezier)" +}), cM("depth", { + color: "var(--n-color)" +}, [c("svg", { + opacity: "var(--n-opacity)", + transition: "opacity .3s var(--n-bezier)" +})]), c("svg", { + height: "1em", + width: "1em" +})]); +const iconProps = Object.assign(Object.assign({}, useTheme.props), { + depth: [String, Number], + size: [Number, String], + color: String, + component: [Object, Function] +}); +const NIcon = defineComponent({ + _n_icon__: true, + name: "Icon", + inheritAttrs: false, + props: iconProps, + setup(props) { + const { + mergedClsPrefixRef, + inlineThemeDisabled + } = useConfig(props); + const themeRef = useTheme("Icon", "-icon", style, iconLight, props, mergedClsPrefixRef); + const cssVarsRef = computed(() => { + const { + depth + } = props; + const { + common: { + cubicBezierEaseInOut + }, + self + } = themeRef.value; + if (depth !== void 0) { + const { + color, + [`opacity${depth}Depth`]: opacity + } = self; + return { + "--n-bezier": cubicBezierEaseInOut, + "--n-color": color, + "--n-opacity": opacity + }; + } + return { + "--n-bezier": cubicBezierEaseInOut, + "--n-color": "", + "--n-opacity": "" + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("icon", computed(() => `${props.depth || "d"}`), cssVarsRef, props) : void 0; + return { + mergedClsPrefix: mergedClsPrefixRef, + mergedStyle: computed(() => { + const { + size, + color + } = props; + return { + fontSize: formatLength(size), + color + }; + }), + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }; + }, + render() { + var _a; + const { + $parent, + depth, + mergedClsPrefix, + component, + onRender, + themeClass + } = this; + if ((_a = $parent === null || $parent === void 0 ? void 0 : $parent.$options) === null || _a === void 0 ? void 0 : _a._n_icon__) { + warn("icon", "don't wrap `n-icon` inside `n-icon`"); + } + onRender === null || onRender === void 0 ? void 0 : onRender(); + return h("i", mergeProps(this.$attrs, { + role: "img", + class: [`${mergedClsPrefix}-icon`, themeClass, { + [`${mergedClsPrefix}-icon--depth`]: depth, + [`${mergedClsPrefix}-icon--color-transition`]: depth !== void 0 + }], + style: [this.cssVars, this.mergedStyle] + }), component ? h(component) : this.$slots); + } +}); +export { + NIcon as N +}; diff --git a/out/renderer/assets/Icon-DucaliTK.js.gz b/out/renderer/assets/Icon-DucaliTK.js.gz new file mode 100644 index 0000000..43f451e Binary files /dev/null and b/out/renderer/assets/Icon-DucaliTK.js.gz differ diff --git a/out/renderer/assets/Image-DXClIklC.js b/out/renderer/assets/Image-DXClIklC.js new file mode 100644 index 0000000..591c965 --- /dev/null +++ b/out/renderer/assets/Image-DXClIklC.js @@ -0,0 +1,2864 @@ +import { J as on, aS as off, bA as getNative, bB as root, bC as overArg, bD as isPrototype, bE as isArrayLike, bF as arrayLikeKeys, bG as isArray, bH as isSymbol, bI as MapCache, bJ as toString, bK as toSource, bL as Map$1, bM as baseGetTag, bN as Symbol$1, bO as eq, bP as Uint8Array, bQ as isBuffer, bR as Stack, bS as isTypedArray, bT as isObjectLike, bU as isObject, bV as isLength, bW as isIndex, bX as isArguments, bY as identity, bZ as baseFor, b_ as arrayMap, bk as replaceable, l as h, d as defineComponent, m as c, p as cB, V as cNotM, Y as cE, W as cM, b$ as cCB, x as useConfig, q as useTheme, c0 as popoverLight, r as ref, as as inject, a8 as watchEffect, G as computed, aT as clickoutside, a6 as vShow, ap as useThemeClass, a as onBeforeUnmount, E as watch, A as toRef, c1 as getPreciseEventTarget, $ as provide, ak as Transition, aY as popoverBodyInjectionKey, aX as drawerBodyInjectionKey, aZ as modalBodyInjectionKey, bu as isSlotEmpty, aV as FocusTrap, ax as mergeProps, w as withDirectives, I as resolveWrappedSlot, a3 as Fragment, az as XScrollbar, aR as isMounted, C as useMergedState, D as useMemo, c2 as useCompitable, c3 as getFirstSlotVNode, c4 as cloneVNode, c5 as Text, b4 as zindexable, bf as keep, L as call, c6 as isBrowser, c7 as tooltipLight, aL as createInjectionKey, a$ as fadeInTransition, aM as fadeInScaleUpTransition, c8 as imageLight, N as NBaseIcon, b1 as LazyTeleport, a2 as normalizeStyle, o as onMounted, K as resolveSlot } from "./index-DKaFsuse.js"; +import { d as useAdjustedTo, e as VFollower, V as VTarget, B as Binder, u as useLocale, b as beforeNextFrameOnce } from "./use-locale-DLWAOXez.js"; +const ctxKey = "@@mmoContext"; +const mousemoveoutside = { + mounted(el, { value }) { + el[ctxKey] = { + handler: void 0 + }; + if (typeof value === "function") { + el[ctxKey].handler = value; + on("mousemoveoutside", el, value); + } + }, + updated(el, { value }) { + const ctx = el[ctxKey]; + if (typeof value === "function") { + if (ctx.handler) { + if (ctx.handler !== value) { + off("mousemoveoutside", el, ctx.handler); + ctx.handler = value; + on("mousemoveoutside", el, value); + } + } else { + el[ctxKey].handler = value; + on("mousemoveoutside", el, value); + } + } else { + if (ctx.handler) { + off("mousemoveoutside", el, ctx.handler); + ctx.handler = void 0; + } + } + }, + unmounted(el) { + const { handler } = el[ctxKey]; + if (handler) { + off("mousemoveoutside", el, handler); + } + el[ctxKey].handler = void 0; + } +}; +const pureNumberRegex = /^(\d|\.)+$/; +const numberRegex = /(\d|\.)+/; +function formatLength(length, { + c: c2 = 1, + offset = 0, + attachPx = true +} = {}) { + if (typeof length === "number") { + const result = (length + offset) * c2; + if (result === 0) return "0"; + return `${result}px`; + } else if (typeof length === "string") { + if (pureNumberRegex.test(length)) { + const result = (Number(length) + offset) * c2; + if (attachPx) { + if (result === 0) return "0"; + return `${result}px`; + } else { + return `${result}`; + } + } else { + const result = numberRegex.exec(length); + if (!result) return length; + return length.replace(numberRegex, String((Number(result[0]) + offset) * c2)); + } + } + return length; +} +function download(url, name) { + if (!url) return; + const a = document.createElement("a"); + a.href = url; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); +} +let _isJsdom; +function isJsdom() { + if (_isJsdom === void 0) { + _isJsdom = navigator.userAgent.includes("Node.js") || navigator.userAgent.includes("jsdom"); + } + return _isJsdom; +} +var WeakMap$1 = getNative(root, "WeakMap"); +var nativeKeys = overArg(Object.keys, Object); +var objectProto$3 = Object.prototype; +var hasOwnProperty$2 = objectProto$3.hasOwnProperty; +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$2.call(object, key) && key != "constructor") { + result.push(key); + } + } + return result; +} +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); +} +var FUNC_ERROR_TEXT = "Expected a function"; +function memoize(func, resolver) { + if (typeof func != "function" || resolver != null && typeof resolver != "function") { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache)(); + return memoized; +} +memoize.Cache = MapCache; +var MAX_MEMOIZE_SIZE = 500; +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + var cache = result.cache; + return result; +} +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; +var reEscapeChar = /\\(\\)?/g; +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46) { + result.push(""); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match); + }); + return result; +}); +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} +var INFINITY = 1 / 0; +function toKey(value) { + if (typeof value == "string" || isSymbol(value)) { + return value; + } + var result = value + ""; + return result == "0" && 1 / value == -INFINITY ? "-0" : result; +} +function baseGet(object, path) { + path = castPath(path, object); + var index = 0, length = path.length; + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return index && index == length ? object : void 0; +} +function get(object, path, defaultValue) { + var result = object == null ? void 0 : baseGet(object, path); + return result === void 0 ? defaultValue : result; +} +function arrayPush(array, values) { + var index = -1, length = values.length, offset = array.length; + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, length = array == null ? 0 : array.length; + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} +function basePropertyOf(object) { + return function(key) { + return object == null ? void 0 : object[key]; + }; +} +var deburredLetters = { + // Latin-1 Supplement block. + "À": "A", + "Á": "A", + "Â": "A", + "Ã": "A", + "Ä": "A", + "Å": "A", + "à": "a", + "á": "a", + "â": "a", + "ã": "a", + "ä": "a", + "å": "a", + "Ç": "C", + "ç": "c", + "Ð": "D", + "ð": "d", + "È": "E", + "É": "E", + "Ê": "E", + "Ë": "E", + "è": "e", + "é": "e", + "ê": "e", + "ë": "e", + "Ì": "I", + "Í": "I", + "Î": "I", + "Ï": "I", + "ì": "i", + "í": "i", + "î": "i", + "ï": "i", + "Ñ": "N", + "ñ": "n", + "Ò": "O", + "Ó": "O", + "Ô": "O", + "Õ": "O", + "Ö": "O", + "Ø": "O", + "ò": "o", + "ó": "o", + "ô": "o", + "õ": "o", + "ö": "o", + "ø": "o", + "Ù": "U", + "Ú": "U", + "Û": "U", + "Ü": "U", + "ù": "u", + "ú": "u", + "û": "u", + "ü": "u", + "Ý": "Y", + "ý": "y", + "ÿ": "y", + "Æ": "Ae", + "æ": "ae", + "Þ": "Th", + "þ": "th", + "ß": "ss", + // Latin Extended-A block. + "Ā": "A", + "Ă": "A", + "Ą": "A", + "ā": "a", + "ă": "a", + "ą": "a", + "Ć": "C", + "Ĉ": "C", + "Ċ": "C", + "Č": "C", + "ć": "c", + "ĉ": "c", + "ċ": "c", + "č": "c", + "Ď": "D", + "Đ": "D", + "ď": "d", + "đ": "d", + "Ē": "E", + "Ĕ": "E", + "Ė": "E", + "Ę": "E", + "Ě": "E", + "ē": "e", + "ĕ": "e", + "ė": "e", + "ę": "e", + "ě": "e", + "Ĝ": "G", + "Ğ": "G", + "Ġ": "G", + "Ģ": "G", + "ĝ": "g", + "ğ": "g", + "ġ": "g", + "ģ": "g", + "Ĥ": "H", + "Ħ": "H", + "ĥ": "h", + "ħ": "h", + "Ĩ": "I", + "Ī": "I", + "Ĭ": "I", + "Į": "I", + "İ": "I", + "ĩ": "i", + "ī": "i", + "ĭ": "i", + "į": "i", + "ı": "i", + "Ĵ": "J", + "ĵ": "j", + "Ķ": "K", + "ķ": "k", + "ĸ": "k", + "Ĺ": "L", + "Ļ": "L", + "Ľ": "L", + "Ŀ": "L", + "Ł": "L", + "ĺ": "l", + "ļ": "l", + "ľ": "l", + "ŀ": "l", + "ł": "l", + "Ń": "N", + "Ņ": "N", + "Ň": "N", + "Ŋ": "N", + "ń": "n", + "ņ": "n", + "ň": "n", + "ŋ": "n", + "Ō": "O", + "Ŏ": "O", + "Ő": "O", + "ō": "o", + "ŏ": "o", + "ő": "o", + "Ŕ": "R", + "Ŗ": "R", + "Ř": "R", + "ŕ": "r", + "ŗ": "r", + "ř": "r", + "Ś": "S", + "Ŝ": "S", + "Ş": "S", + "Š": "S", + "ś": "s", + "ŝ": "s", + "ş": "s", + "š": "s", + "Ţ": "T", + "Ť": "T", + "Ŧ": "T", + "ţ": "t", + "ť": "t", + "ŧ": "t", + "Ũ": "U", + "Ū": "U", + "Ŭ": "U", + "Ů": "U", + "Ű": "U", + "Ų": "U", + "ũ": "u", + "ū": "u", + "ŭ": "u", + "ů": "u", + "ű": "u", + "ų": "u", + "Ŵ": "W", + "ŵ": "w", + "Ŷ": "Y", + "ŷ": "y", + "Ÿ": "Y", + "Ź": "Z", + "Ż": "Z", + "Ž": "Z", + "ź": "z", + "ż": "z", + "ž": "z", + "IJ": "IJ", + "ij": "ij", + "Œ": "Oe", + "œ": "oe", + "ʼn": "'n", + "ſ": "s" +}; +var deburrLetter = basePropertyOf(deburredLetters); +var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; +var rsComboMarksRange$1 = "\\u0300-\\u036f", reComboHalfMarksRange$1 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$1 = "\\u20d0-\\u20ff", rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1; +var rsCombo$1 = "[" + rsComboRange$1 + "]"; +var reComboMark = RegExp(rsCombo$1, "g"); +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ""); +} +var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; +function asciiWords(string) { + return string.match(reAsciiWord) || []; +} +var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; +function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); +} +var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; +var rsApos$1 = "['’]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d"; +var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos$1 + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos$1 + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq; +var reUnicodeWord = RegExp([ + rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")", + rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")", + rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower, + rsUpper + "+" + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji +].join("|"), "g"); +function unicodeWords(string) { + return string.match(reUnicodeWord) || []; +} +function words(string, pattern, guard) { + string = toString(string); + pattern = pattern; + if (pattern === void 0) { + return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); + } + return string.match(pattern) || []; +} +var rsApos = "['’]"; +var reApos = RegExp(rsApos, "g"); +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, "")), callback, ""); + }; +} +function arrayFilter(array, predicate) { + var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} +function stubArray() { + return []; +} +var objectProto$2 = Object.prototype; +var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; +var nativeGetSymbols = Object.getOwnPropertySymbols; +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} +var DataView = getNative(root, "DataView"); +var Promise$1 = getNative(root, "Promise"); +var Set$1 = getNative(root, "Set"); +var mapTag$1 = "[object Map]", objectTag$1 = "[object Object]", promiseTag = "[object Promise]", setTag$1 = "[object Set]", weakMapTag = "[object WeakMap]"; +var dataViewTag$1 = "[object DataView]"; +var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1); +var getTag = baseGetTag; +if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$1 || Map$1 && getTag(new Map$1()) != mapTag$1 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$1 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag) { + getTag = function(value) { + var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: + return dataViewTag$1; + case mapCtorString: + return mapTag$1; + case promiseCtorString: + return promiseTag; + case setCtorString: + return setTag$1; + case weakMapCtorString: + return weakMapTag; + } + } + return result; + }; +} +var HASH_UNDEFINED = "__lodash_hash_undefined__"; +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} +function setCacheHas(value) { + return this.__data__.has(value); +} +function SetCache(values) { + var index = -1, length = values == null ? 0 : values.length; + this.__data__ = new MapCache(); + while (++index < length) { + this.add(values[index]); + } +} +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; +function arraySome(array, predicate) { + var index = -1, length = array == null ? 0 : array.length; + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} +function cacheHas(cache, key) { + return cache.has(key); +} +var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2; +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length; + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0; + stack.set(array, other); + stack.set(other, array); + while (++index < arrLength) { + var arrValue = array[index], othValue = other[index]; + if (customizer) { + var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== void 0) { + if (compared) { + continue; + } + result = false; + break; + } + if (seen) { + if (!arraySome(other, function(othValue2, othIndex) { + if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + result = false; + break; + } + } + stack["delete"](array); + stack["delete"](other); + return result; +} +function mapToArray(map2) { + var index = -1, result = Array(map2.size); + map2.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} +function setToArray(set) { + var index = -1, result = Array(set.size); + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} +var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2; +var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]"; +var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]"; +var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { + return false; + } + object = object.buffer; + other = other.buffer; + case arrayBufferTag: + if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + case boolTag: + case dateTag: + case numberTag: + return eq(+object, +other); + case errorTag: + return object.name == other.name && object.message == other.message; + case regexpTag: + case stringTag: + return object == other + ""; + case mapTag: + var convert = mapToArray; + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; + convert || (convert = setToArray); + if (object.size != other.size && !isPartial) { + return false; + } + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG$2; + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack["delete"](object); + return result; + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} +var COMPARE_PARTIAL_FLAG$3 = 1; +var objectProto$1 = Object.prototype; +var hasOwnProperty$1 = objectProto$1.hasOwnProperty; +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty$1.call(other, key))) { + return false; + } + } + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], othValue = other[key]; + if (customizer) { + var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); + } + if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { + result = false; + break; + } + skipCtor || (skipCtor = key == "constructor"); + } + if (result && !skipCtor) { + var objCtor = object.constructor, othCtor = other.constructor; + if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { + result = false; + } + } + stack["delete"](object); + stack["delete"](other); + return result; +} +var COMPARE_PARTIAL_FLAG$2 = 1; +var argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]"; +var objectProto = Object.prototype; +var hasOwnProperty = objectProto.hasOwnProperty; +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack()); + return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; + stack || (stack = new Stack()); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack()); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} +var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2; +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, length = index; + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if (data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], objValue = object[key], srcValue = data[1]; + if (data[2]) { + if (objValue === void 0 && !(key in object)) { + return false; + } + } else { + var stack = new Stack(); + var result; + if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) { + return false; + } + } + } + return true; +} +function isStrictComparable(value) { + return value === value && !isObject(value); +} +function getMatchData(object) { + var result = keys(object), length = result.length; + while (length--) { + var key = result[length], value = object[key]; + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && (srcValue !== void 0 || key in Object(object)); + }; +} +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} +function baseHasIn(object, key) { + return object != null && key in Object(object); +} +function hasPath(object, path, hasFunc) { + path = castPath(path, object); + var index = -1, length = path.length, result = false; + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); +} +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} +var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} +function baseProperty(key) { + return function(object) { + return object == null ? void 0 : object[key]; + }; +} +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} +function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} +function baseIteratee(value) { + if (typeof value == "function") { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == "object") { + return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); + } + return property(value); +} +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, index = -1, iterable = Object(collection); + while (++index < length) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} +var baseEach = createBaseEach(baseForOwn); +function baseMap(collection, iteratee) { + var index = -1, result = isArrayLike(collection) ? Array(collection.length) : []; + baseEach(collection, function(value, key, collection2) { + result[++index] = iteratee(value, key, collection2); + }); + return result; +} +function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, baseIteratee(iteratee)); +} +var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? "-" : "") + word.toLowerCase(); +}); +const DownloadIcon = replaceable("download", () => h("svg", { + viewBox: "0 0 16 16", + version: "1.1", + xmlns: "http://www.w3.org/2000/svg" +}, h("g", { + stroke: "none", + "stroke-width": "1", + fill: "none", + "fill-rule": "evenodd" +}, h("g", { + fill: "currentColor", + "fill-rule": "nonzero" +}, h("path", { + d: "M3.5,13 L12.5,13 C12.7761424,13 13,13.2238576 13,13.5 C13,13.7454599 12.8231248,13.9496084 12.5898756,13.9919443 L12.5,14 L3.5,14 C3.22385763,14 3,13.7761424 3,13.5 C3,13.2545401 3.17687516,13.0503916 3.41012437,13.0080557 L3.5,13 L12.5,13 L3.5,13 Z M7.91012437,1.00805567 L8,1 C8.24545989,1 8.44960837,1.17687516 8.49194433,1.41012437 L8.5,1.5 L8.5,10.292 L11.1819805,7.6109127 C11.3555469,7.43734635 11.6249713,7.4180612 11.8198394,7.55305725 L11.8890873,7.6109127 C12.0626536,7.78447906 12.0819388,8.05390346 11.9469427,8.2487716 L11.8890873,8.31801948 L8.35355339,11.8535534 C8.17998704,12.0271197 7.91056264,12.0464049 7.7156945,11.9114088 L7.64644661,11.8535534 L4.1109127,8.31801948 C3.91565056,8.12275734 3.91565056,7.80617485 4.1109127,7.6109127 C4.28447906,7.43734635 4.55390346,7.4180612 4.7487716,7.55305725 L4.81801948,7.6109127 L7.5,10.292 L7.5,1.5 C7.5,1.25454011 7.67687516,1.05039163 7.91012437,1.00805567 L8,1 L7.91012437,1.00805567 Z" +}))))); +const ResizeSmallIcon = defineComponent({ + name: "ResizeSmall", + render() { + return h("svg", { + xmlns: "http://www.w3.org/2000/svg", + viewBox: "0 0 20 20" + }, h("g", { + fill: "none" + }, h("path", { + d: "M5.5 4A1.5 1.5 0 0 0 4 5.5v1a.5.5 0 0 1-1 0v-1A2.5 2.5 0 0 1 5.5 3h1a.5.5 0 0 1 0 1h-1zM16 5.5A1.5 1.5 0 0 0 14.5 4h-1a.5.5 0 0 1 0-1h1A2.5 2.5 0 0 1 17 5.5v1a.5.5 0 0 1-1 0v-1zm0 9a1.5 1.5 0 0 1-1.5 1.5h-1a.5.5 0 0 0 0 1h1a2.5 2.5 0 0 0 2.5-2.5v-1a.5.5 0 0 0-1 0v1zm-12 0A1.5 1.5 0 0 0 5.5 16h1.25a.5.5 0 0 1 0 1H5.5A2.5 2.5 0 0 1 3 14.5v-1.25a.5.5 0 0 1 1 0v1.25zM8.5 7A1.5 1.5 0 0 0 7 8.5v3A1.5 1.5 0 0 0 8.5 13h3a1.5 1.5 0 0 0 1.5-1.5v-3A1.5 1.5 0 0 0 11.5 7h-3zM8 8.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-3z", + fill: "currentColor" + }))); + } +}); +const RotateClockwiseIcon = replaceable("rotateClockwise", () => h("svg", { + viewBox: "0 0 20 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, h("path", { + d: "M3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10C17 12.7916 15.3658 15.2026 13 16.3265V14.5C13 14.2239 12.7761 14 12.5 14C12.2239 14 12 14.2239 12 14.5V17.5C12 17.7761 12.2239 18 12.5 18H15.5C15.7761 18 16 17.7761 16 17.5C16 17.2239 15.7761 17 15.5 17H13.8758C16.3346 15.6357 18 13.0128 18 10C18 5.58172 14.4183 2 10 2C5.58172 2 2 5.58172 2 10C2 10.2761 2.22386 10.5 2.5 10.5C2.77614 10.5 3 10.2761 3 10Z", + fill: "currentColor" +}), h("path", { + d: "M10 12C11.1046 12 12 11.1046 12 10C12 8.89543 11.1046 8 10 8C8.89543 8 8 8.89543 8 10C8 11.1046 8.89543 12 10 12ZM10 11C9.44772 11 9 10.5523 9 10C9 9.44772 9.44772 9 10 9C10.5523 9 11 9.44772 11 10C11 10.5523 10.5523 11 10 11Z", + fill: "currentColor" +}))); +const RotateCounterclockwiseIcon = replaceable("rotateClockwise", () => h("svg", { + viewBox: "0 0 20 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, h("path", { + d: "M17 10C17 6.13401 13.866 3 10 3C6.13401 3 3 6.13401 3 10C3 12.7916 4.63419 15.2026 7 16.3265V14.5C7 14.2239 7.22386 14 7.5 14C7.77614 14 8 14.2239 8 14.5V17.5C8 17.7761 7.77614 18 7.5 18H4.5C4.22386 18 4 17.7761 4 17.5C4 17.2239 4.22386 17 4.5 17H6.12422C3.66539 15.6357 2 13.0128 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10C18 10.2761 17.7761 10.5 17.5 10.5C17.2239 10.5 17 10.2761 17 10Z", + fill: "currentColor" +}), h("path", { + d: "M10 12C8.89543 12 8 11.1046 8 10C8 8.89543 8.89543 8 10 8C11.1046 8 12 8.89543 12 10C12 11.1046 11.1046 12 10 12ZM10 11C10.5523 11 11 10.5523 11 10C11 9.44772 10.5523 9 10 9C9.44772 9 9 9.44772 9 10C9 10.5523 9.44772 11 10 11Z", + fill: "currentColor" +}))); +const ZoomInIcon = replaceable("zoomIn", () => h("svg", { + viewBox: "0 0 20 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, h("path", { + d: "M11.5 8.5C11.5 8.22386 11.2761 8 11 8H9V6C9 5.72386 8.77614 5.5 8.5 5.5C8.22386 5.5 8 5.72386 8 6V8H6C5.72386 8 5.5 8.22386 5.5 8.5C5.5 8.77614 5.72386 9 6 9H8V11C8 11.2761 8.22386 11.5 8.5 11.5C8.77614 11.5 9 11.2761 9 11V9H11C11.2761 9 11.5 8.77614 11.5 8.5Z", + fill: "currentColor" +}), h("path", { + d: "M8.5 3C11.5376 3 14 5.46243 14 8.5C14 9.83879 13.5217 11.0659 12.7266 12.0196L16.8536 16.1464C17.0488 16.3417 17.0488 16.6583 16.8536 16.8536C16.68 17.0271 16.4106 17.0464 16.2157 16.9114L16.1464 16.8536L12.0196 12.7266C11.0659 13.5217 9.83879 14 8.5 14C5.46243 14 3 11.5376 3 8.5C3 5.46243 5.46243 3 8.5 3ZM8.5 4C6.01472 4 4 6.01472 4 8.5C4 10.9853 6.01472 13 8.5 13C10.9853 13 13 10.9853 13 8.5C13 6.01472 10.9853 4 8.5 4Z", + fill: "currentColor" +}))); +const ZoomOutIcon = replaceable("zoomOut", () => h("svg", { + viewBox: "0 0 20 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, h("path", { + d: "M11 8C11.2761 8 11.5 8.22386 11.5 8.5C11.5 8.77614 11.2761 9 11 9H6C5.72386 9 5.5 8.77614 5.5 8.5C5.5 8.22386 5.72386 8 6 8H11Z", + fill: "currentColor" +}), h("path", { + d: "M14 8.5C14 5.46243 11.5376 3 8.5 3C5.46243 3 3 5.46243 3 8.5C3 11.5376 5.46243 14 8.5 14C9.83879 14 11.0659 13.5217 12.0196 12.7266L16.1464 16.8536L16.2157 16.9114C16.4106 17.0464 16.68 17.0271 16.8536 16.8536C17.0488 16.6583 17.0488 16.3417 16.8536 16.1464L12.7266 12.0196C13.5217 11.0659 14 9.83879 14 8.5ZM4 8.5C4 6.01472 6.01472 4 8.5 4C10.9853 4 13 6.01472 13 8.5C13 10.9853 10.9853 13 8.5 13C6.01472 13 4 10.9853 4 8.5Z", + fill: "currentColor" +}))); +const oppositePlacement = { + top: "bottom", + bottom: "top", + left: "right", + right: "left" +}; +const arrowSize = "var(--n-arrow-height) * 1.414"; +const style$1 = c([cB("popover", ` + transition: + box-shadow .3s var(--n-bezier), + background-color .3s var(--n-bezier), + color .3s var(--n-bezier); + position: relative; + font-size: var(--n-font-size); + color: var(--n-text-color); + box-shadow: var(--n-box-shadow); + word-break: break-word; + `, [c(">", [cB("scrollbar", ` + height: inherit; + max-height: inherit; + `)]), cNotM("raw", ` + background-color: var(--n-color); + border-radius: var(--n-border-radius); + `, [cNotM("scrollable", [cNotM("show-header-or-footer", "padding: var(--n-padding);")])]), cE("header", ` + padding: var(--n-padding); + border-bottom: 1px solid var(--n-divider-color); + transition: border-color .3s var(--n-bezier); + `), cE("footer", ` + padding: var(--n-padding); + border-top: 1px solid var(--n-divider-color); + transition: border-color .3s var(--n-bezier); + `), cM("scrollable, show-header-or-footer", [cE("content", ` + padding: var(--n-padding); + `)])]), cB("popover-shared", ` + transform-origin: inherit; + `, [ + cB("popover-arrow-wrapper", ` + position: absolute; + overflow: hidden; + pointer-events: none; + `, [cB("popover-arrow", ` + transition: background-color .3s var(--n-bezier); + position: absolute; + display: block; + width: calc(${arrowSize}); + height: calc(${arrowSize}); + box-shadow: 0 0 8px 0 rgba(0, 0, 0, .12); + transform: rotate(45deg); + background-color: var(--n-color); + pointer-events: all; + `)]), + // body transition + c("&.popover-transition-enter-from, &.popover-transition-leave-to", ` + opacity: 0; + transform: scale(.85); + `), + c("&.popover-transition-enter-to, &.popover-transition-leave-from", ` + transform: scale(1); + opacity: 1; + `), + c("&.popover-transition-enter-active", ` + transition: + box-shadow .3s var(--n-bezier), + background-color .3s var(--n-bezier), + color .3s var(--n-bezier), + opacity .15s var(--n-bezier-ease-out), + transform .15s var(--n-bezier-ease-out); + `), + c("&.popover-transition-leave-active", ` + transition: + box-shadow .3s var(--n-bezier), + background-color .3s var(--n-bezier), + color .3s var(--n-bezier), + opacity .15s var(--n-bezier-ease-in), + transform .15s var(--n-bezier-ease-in); + `) +]), placementStyle("top-start", ` + top: calc(${arrowSize} / -2); + left: calc(${getArrowOffset("top-start")} - var(--v-offset-left)); + `), placementStyle("top", ` + top: calc(${arrowSize} / -2); + transform: translateX(calc(${arrowSize} / -2)) rotate(45deg); + left: 50%; + `), placementStyle("top-end", ` + top: calc(${arrowSize} / -2); + right: calc(${getArrowOffset("top-end")} + var(--v-offset-left)); + `), placementStyle("bottom-start", ` + bottom: calc(${arrowSize} / -2); + left: calc(${getArrowOffset("bottom-start")} - var(--v-offset-left)); + `), placementStyle("bottom", ` + bottom: calc(${arrowSize} / -2); + transform: translateX(calc(${arrowSize} / -2)) rotate(45deg); + left: 50%; + `), placementStyle("bottom-end", ` + bottom: calc(${arrowSize} / -2); + right: calc(${getArrowOffset("bottom-end")} + var(--v-offset-left)); + `), placementStyle("left-start", ` + left: calc(${arrowSize} / -2); + top: calc(${getArrowOffset("left-start")} - var(--v-offset-top)); + `), placementStyle("left", ` + left: calc(${arrowSize} / -2); + transform: translateY(calc(${arrowSize} / -2)) rotate(45deg); + top: 50%; + `), placementStyle("left-end", ` + left: calc(${arrowSize} / -2); + bottom: calc(${getArrowOffset("left-end")} + var(--v-offset-top)); + `), placementStyle("right-start", ` + right: calc(${arrowSize} / -2); + top: calc(${getArrowOffset("right-start")} - var(--v-offset-top)); + `), placementStyle("right", ` + right: calc(${arrowSize} / -2); + transform: translateY(calc(${arrowSize} / -2)) rotate(45deg); + top: 50%; + `), placementStyle("right-end", ` + right: calc(${arrowSize} / -2); + bottom: calc(${getArrowOffset("right-end")} + var(--v-offset-top)); + `), ...map({ + top: ["right-start", "left-start"], + right: ["top-end", "bottom-end"], + bottom: ["right-end", "left-end"], + left: ["top-start", "bottom-start"] +}, (placements, direction) => { + const isVertical = ["right", "left"].includes(direction); + const sizeType = isVertical ? "width" : "height"; + return placements.map((placement) => { + const isReverse = placement.split("-")[1] === "end"; + const targetSize = `var(--v-target-${sizeType}, 0px)`; + const centerOffset = `calc((${targetSize} - ${arrowSize}) / 2)`; + const offset = getArrowOffset(placement); + return c(`[v-placement="${placement}"] >`, [cB("popover-shared", [cM("center-arrow", [cB("popover-arrow", `${direction}: calc(max(${centerOffset}, ${offset}) ${isReverse ? "+" : "-"} var(--v-offset-${isVertical ? "left" : "top"}));`)])])]); + }); +})]); +function getArrowOffset(placement) { + return ["top", "bottom"].includes(placement.split("-")[0]) ? "var(--n-arrow-offset)" : "var(--n-arrow-offset-vertical)"; +} +function placementStyle(placement, arrowStyleLiteral) { + const position = placement.split("-")[0]; + const sizeStyle = ["top", "bottom"].includes(position) ? "height: var(--n-space-arrow);" : "width: var(--n-space-arrow);"; + return c(`[v-placement="${placement}"] >`, [cB("popover-shared", ` + margin-${oppositePlacement[position]}: var(--n-space); + `, [cM("show-arrow", ` + margin-${oppositePlacement[position]}: var(--n-space-arrow); + `), cM("overlap", ` + margin: 0; + `), cCB("popover-arrow-wrapper", ` + right: 0; + left: 0; + top: 0; + bottom: 0; + ${position}: 100%; + ${oppositePlacement[position]}: auto; + ${sizeStyle} + `, [cB("popover-arrow", arrowStyleLiteral)])])]); +} +const popoverBodyProps = Object.assign(Object.assign({}, useTheme.props), { + to: useAdjustedTo.propTo, + show: Boolean, + trigger: String, + showArrow: Boolean, + delay: Number, + duration: Number, + raw: Boolean, + arrowPointToCenter: Boolean, + arrowClass: String, + arrowStyle: [String, Object], + arrowWrapperClass: String, + arrowWrapperStyle: [String, Object], + displayDirective: String, + x: Number, + y: Number, + flip: Boolean, + overlap: Boolean, + placement: String, + width: [Number, String], + keepAliveOnHover: Boolean, + scrollable: Boolean, + contentClass: String, + contentStyle: [Object, String], + headerClass: String, + headerStyle: [Object, String], + footerClass: String, + footerStyle: [Object, String], + // private + internalDeactivateImmediately: Boolean, + animated: Boolean, + onClickoutside: Function, + internalTrapFocus: Boolean, + internalOnAfterLeave: Function, + // deprecated + minWidth: Number, + maxWidth: Number +}); +function renderArrow({ + arrowClass, + arrowStyle, + arrowWrapperClass, + arrowWrapperStyle, + clsPrefix +}) { + return h("div", { + key: "__popover-arrow__", + style: arrowWrapperStyle, + class: [`${clsPrefix}-popover-arrow-wrapper`, arrowWrapperClass] + }, h("div", { + class: [`${clsPrefix}-popover-arrow`, arrowClass], + style: arrowStyle + })); +} +const NPopoverBody = defineComponent({ + name: "PopoverBody", + inheritAttrs: false, + props: popoverBodyProps, + setup(props, { + slots, + attrs + }) { + const { + namespaceRef, + mergedClsPrefixRef, + inlineThemeDisabled + } = useConfig(props); + const themeRef = useTheme("Popover", "-popover", style$1, popoverLight, props, mergedClsPrefixRef); + const followerRef = ref(null); + const NPopover = inject("NPopover"); + const bodyRef = ref(null); + const followerEnabledRef = ref(props.show); + const displayedRef = ref(false); + watchEffect(() => { + const { + show + } = props; + if (show && !isJsdom() && !props.internalDeactivateImmediately) { + displayedRef.value = true; + } + }); + const directivesRef = computed(() => { + const { + trigger, + onClickoutside + } = props; + const directives = []; + const { + positionManuallyRef: { + value: positionManually + } + } = NPopover; + if (!positionManually) { + if (trigger === "click" && !onClickoutside) { + directives.push([clickoutside, handleClickOutside, void 0, { + capture: true + }]); + } + if (trigger === "hover") { + directives.push([mousemoveoutside, handleMouseMoveOutside]); + } + } + if (onClickoutside) { + directives.push([clickoutside, handleClickOutside, void 0, { + capture: true + }]); + } + if (props.displayDirective === "show" || props.animated && displayedRef.value) { + directives.push([vShow, props.show]); + } + return directives; + }); + const cssVarsRef = computed(() => { + const { + common: { + cubicBezierEaseInOut, + cubicBezierEaseIn, + cubicBezierEaseOut + }, + self: { + space, + spaceArrow, + padding, + fontSize, + textColor, + dividerColor, + color, + boxShadow, + borderRadius, + arrowHeight, + arrowOffset, + arrowOffsetVertical + } + } = themeRef.value; + return { + "--n-box-shadow": boxShadow, + "--n-bezier": cubicBezierEaseInOut, + "--n-bezier-ease-in": cubicBezierEaseIn, + "--n-bezier-ease-out": cubicBezierEaseOut, + "--n-font-size": fontSize, + "--n-text-color": textColor, + "--n-color": color, + "--n-divider-color": dividerColor, + "--n-border-radius": borderRadius, + "--n-arrow-height": arrowHeight, + "--n-arrow-offset": arrowOffset, + "--n-arrow-offset-vertical": arrowOffsetVertical, + "--n-padding": padding, + "--n-space": space, + "--n-space-arrow": spaceArrow + }; + }); + const styleRef = computed(() => { + const width = props.width === "trigger" ? void 0 : formatLength(props.width); + const style2 = []; + if (width) { + style2.push({ + width + }); + } + const { + maxWidth, + minWidth + } = props; + if (maxWidth) { + style2.push({ + maxWidth: formatLength(maxWidth) + }); + } + if (minWidth) { + style2.push({ + maxWidth: formatLength(minWidth) + }); + } + if (!inlineThemeDisabled) { + style2.push(cssVarsRef.value); + } + return style2; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("popover", void 0, cssVarsRef, props) : void 0; + NPopover.setBodyInstance({ + syncPosition + }); + onBeforeUnmount(() => { + NPopover.setBodyInstance(null); + }); + watch(toRef(props, "show"), (value) => { + if (props.animated) return; + if (value) { + followerEnabledRef.value = true; + } else { + followerEnabledRef.value = false; + } + }); + function syncPosition() { + var _a; + (_a = followerRef.value) === null || _a === void 0 ? void 0 : _a.syncPosition(); + } + function handleMouseEnter(e) { + if (props.trigger === "hover" && props.keepAliveOnHover && props.show) { + NPopover.handleMouseEnter(e); + } + } + function handleMouseLeave(e) { + if (props.trigger === "hover" && props.keepAliveOnHover) { + NPopover.handleMouseLeave(e); + } + } + function handleMouseMoveOutside(e) { + if (props.trigger === "hover" && !getTriggerElement().contains(getPreciseEventTarget(e))) { + NPopover.handleMouseMoveOutside(e); + } + } + function handleClickOutside(e) { + if (props.trigger === "click" && !getTriggerElement().contains(getPreciseEventTarget(e)) || props.onClickoutside) { + NPopover.handleClickOutside(e); + } + } + function getTriggerElement() { + return NPopover.getTriggerElement(); + } + provide(popoverBodyInjectionKey, bodyRef); + provide(drawerBodyInjectionKey, null); + provide(modalBodyInjectionKey, null); + function renderContentNode() { + themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender(); + const shouldRenderDom = props.displayDirective === "show" || props.show || props.animated && displayedRef.value; + if (!shouldRenderDom) { + return null; + } + let contentNode; + const renderBody = NPopover.internalRenderBodyRef.value; + const { + value: mergedClsPrefix + } = mergedClsPrefixRef; + if (!renderBody) { + const { + value: extraClass + } = NPopover.extraClassRef; + const { + internalTrapFocus + } = props; + const hasHeaderOrFooter = !isSlotEmpty(slots.header) || !isSlotEmpty(slots.footer); + const renderContentInnerNode = () => { + var _a, _b; + const body = hasHeaderOrFooter ? h(Fragment, null, resolveWrappedSlot(slots.header, (children) => { + return children ? h("div", { + class: [`${mergedClsPrefix}-popover__header`, props.headerClass], + style: props.headerStyle + }, children) : null; + }), resolveWrappedSlot(slots.default, (children) => { + return children ? h("div", { + class: [`${mergedClsPrefix}-popover__content`, props.contentClass], + style: props.contentStyle + }, slots) : null; + }), resolveWrappedSlot(slots.footer, (children) => { + return children ? h("div", { + class: [`${mergedClsPrefix}-popover__footer`, props.footerClass], + style: props.footerStyle + }, children) : null; + })) : props.scrollable ? (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots) : h("div", { + class: [`${mergedClsPrefix}-popover__content`, props.contentClass], + style: props.contentStyle + }, slots); + const maybeScrollableBody = props.scrollable ? h(XScrollbar, { + contentClass: hasHeaderOrFooter ? void 0 : `${mergedClsPrefix}-popover__content ${(_b = props.contentClass) !== null && _b !== void 0 ? _b : ""}`, + contentStyle: hasHeaderOrFooter ? void 0 : props.contentStyle + }, { + default: () => body + }) : body; + const arrow = props.showArrow ? renderArrow({ + arrowClass: props.arrowClass, + arrowStyle: props.arrowStyle, + arrowWrapperClass: props.arrowWrapperClass, + arrowWrapperStyle: props.arrowWrapperStyle, + clsPrefix: mergedClsPrefix + }) : null; + return [maybeScrollableBody, arrow]; + }; + contentNode = h("div", mergeProps({ + class: [`${mergedClsPrefix}-popover`, `${mergedClsPrefix}-popover-shared`, themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass.value, extraClass.map((v) => `${mergedClsPrefix}-${v}`), { + [`${mergedClsPrefix}-popover--scrollable`]: props.scrollable, + [`${mergedClsPrefix}-popover--show-header-or-footer`]: hasHeaderOrFooter, + [`${mergedClsPrefix}-popover--raw`]: props.raw, + [`${mergedClsPrefix}-popover-shared--overlap`]: props.overlap, + [`${mergedClsPrefix}-popover-shared--show-arrow`]: props.showArrow, + [`${mergedClsPrefix}-popover-shared--center-arrow`]: props.arrowPointToCenter + }], + ref: bodyRef, + style: styleRef.value, + onKeydown: NPopover.handleKeydown, + onMouseenter: handleMouseEnter, + onMouseleave: handleMouseLeave + }, attrs), internalTrapFocus ? h(FocusTrap, { + active: props.show, + autoFocus: true + }, { + default: renderContentInnerNode + }) : renderContentInnerNode()); + } else { + contentNode = renderBody( + // The popover class and overlap class must exists, they will be used + // to place the body & transition animation. + // Shadow class exists for reuse box-shadow. + [`${mergedClsPrefix}-popover-shared`, themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass.value, props.overlap && `${mergedClsPrefix}-popover-shared--overlap`, props.showArrow && `${mergedClsPrefix}-popover-shared--show-arrow`, props.arrowPointToCenter && `${mergedClsPrefix}-popover-shared--center-arrow`], + bodyRef, + styleRef.value, + handleMouseEnter, + handleMouseLeave + ); + } + return withDirectives(contentNode, directivesRef.value); + } + return { + displayed: displayedRef, + namespace: namespaceRef, + isMounted: NPopover.isMountedRef, + zIndex: NPopover.zIndexRef, + followerRef, + adjustedTo: useAdjustedTo(props), + followerEnabled: followerEnabledRef, + renderContentNode + }; + }, + render() { + return h(VFollower, { + ref: "followerRef", + zIndex: this.zIndex, + show: this.show, + enabled: this.followerEnabled, + to: this.adjustedTo, + x: this.x, + y: this.y, + flip: this.flip, + placement: this.placement, + containerClass: this.namespace, + overlap: this.overlap, + width: this.width === "trigger" ? "target" : void 0, + teleportDisabled: this.adjustedTo === useAdjustedTo.tdkey + }, { + default: () => { + return this.animated ? h(Transition, { + name: "popover-transition", + appear: this.isMounted, + // Don't use watch to enable follower, since the transition may + // make position sync timing very subtle and buggy. + onEnter: () => { + this.followerEnabled = true; + }, + onAfterLeave: () => { + var _a; + (_a = this.internalOnAfterLeave) === null || _a === void 0 ? void 0 : _a.call(this); + this.followerEnabled = false; + this.displayed = false; + } + }, { + default: this.renderContentNode + }) : this.renderContentNode(); + } + }); + } +}); +const bodyPropKeys = Object.keys(popoverBodyProps); +const triggerEventMap = { + focus: ["onFocus", "onBlur"], + click: ["onClick"], + hover: ["onMouseenter", "onMouseleave"], + manual: [], + nested: ["onFocus", "onBlur", "onMouseenter", "onMouseleave", "onClick"] +}; +function appendEvents(vNode, trigger, events) { + triggerEventMap[trigger].forEach((eventName) => { + if (!vNode.props) { + vNode.props = {}; + } else { + vNode.props = Object.assign({}, vNode.props); + } + const originalHandler = vNode.props[eventName]; + const handler = events[eventName]; + if (!originalHandler) { + vNode.props[eventName] = handler; + } else { + vNode.props[eventName] = (...args) => { + originalHandler(...args); + handler(...args); + }; + } + }); +} +const popoverBaseProps = { + show: { + type: Boolean, + default: void 0 + }, + defaultShow: Boolean, + showArrow: { + type: Boolean, + default: true + }, + trigger: { + type: String, + default: "hover" + }, + delay: { + type: Number, + default: 100 + }, + duration: { + type: Number, + default: 100 + }, + raw: Boolean, + placement: { + type: String, + default: "top" + }, + x: Number, + y: Number, + arrowPointToCenter: Boolean, + disabled: Boolean, + getDisabled: Function, + displayDirective: { + type: String, + default: "if" + }, + arrowClass: String, + arrowStyle: [String, Object], + arrowWrapperClass: String, + arrowWrapperStyle: [String, Object], + flip: { + type: Boolean, + default: true + }, + animated: { + type: Boolean, + default: true + }, + width: { + type: [Number, String], + default: void 0 + }, + overlap: Boolean, + keepAliveOnHover: { + type: Boolean, + default: true + }, + zIndex: Number, + to: useAdjustedTo.propTo, + scrollable: Boolean, + contentClass: String, + contentStyle: [Object, String], + headerClass: String, + headerStyle: [Object, String], + footerClass: String, + footerStyle: [Object, String], + // events + onClickoutside: Function, + "onUpdate:show": [Function, Array], + onUpdateShow: [Function, Array], + // internal + internalDeactivateImmediately: Boolean, + internalSyncTargetWithParent: Boolean, + internalInheritedEventHandlers: { + type: Array, + default: () => [] + }, + internalTrapFocus: Boolean, + internalExtraClass: { + type: Array, + default: () => [] + }, + // deprecated + onShow: [Function, Array], + onHide: [Function, Array], + arrow: { + type: Boolean, + default: void 0 + }, + minWidth: Number, + maxWidth: Number +}; +const popoverProps = Object.assign(Object.assign(Object.assign({}, useTheme.props), popoverBaseProps), { + internalOnAfterLeave: Function, + internalRenderBody: Function +}); +const __unplugin_components_5 = defineComponent({ + name: "Popover", + inheritAttrs: false, + props: popoverProps, + __popover__: true, + setup(props) { + const isMountedRef = isMounted(); + const binderInstRef = ref(null); + const controlledShowRef = computed(() => props.show); + const uncontrolledShowRef = ref(props.defaultShow); + const mergedShowWithoutDisabledRef = useMergedState(controlledShowRef, uncontrolledShowRef); + const mergedShowConsideringDisabledPropRef = useMemo(() => { + if (props.disabled) return false; + return mergedShowWithoutDisabledRef.value; + }); + const getMergedDisabled = () => { + if (props.disabled) return true; + const { + getDisabled + } = props; + if (getDisabled === null || getDisabled === void 0 ? void 0 : getDisabled()) return true; + return false; + }; + const getMergedShow = () => { + if (getMergedDisabled()) return false; + return mergedShowWithoutDisabledRef.value; + }; + const compatibleShowArrowRef = useCompitable(props, ["arrow", "showArrow"]); + const mergedShowArrowRef = computed(() => { + if (props.overlap) return false; + return compatibleShowArrowRef.value; + }); + let bodyInstance = null; + const showTimerIdRef = ref(null); + const hideTimerIdRef = ref(null); + const positionManuallyRef = useMemo(() => { + return props.x !== void 0 && props.y !== void 0; + }); + function doUpdateShow(value) { + const { + "onUpdate:show": _onUpdateShow, + onUpdateShow, + onShow, + onHide + } = props; + uncontrolledShowRef.value = value; + if (_onUpdateShow) { + call(_onUpdateShow, value); + } + if (onUpdateShow) { + call(onUpdateShow, value); + } + if (value && onShow) { + call(onShow, true); + } + if (value && onHide) { + call(onHide, false); + } + } + function syncPosition() { + if (bodyInstance) { + bodyInstance.syncPosition(); + } + } + function clearShowTimer() { + const { + value: showTimerId + } = showTimerIdRef; + if (showTimerId) { + window.clearTimeout(showTimerId); + showTimerIdRef.value = null; + } + } + function clearHideTimer() { + const { + value: hideTimerId + } = hideTimerIdRef; + if (hideTimerId) { + window.clearTimeout(hideTimerId); + hideTimerIdRef.value = null; + } + } + function handleFocus() { + const mergedDisabled = getMergedDisabled(); + if (props.trigger === "focus" && !mergedDisabled) { + if (getMergedShow()) return; + doUpdateShow(true); + } + } + function handleBlur() { + const mergedDisabled = getMergedDisabled(); + if (props.trigger === "focus" && !mergedDisabled) { + if (!getMergedShow()) return; + doUpdateShow(false); + } + } + function handleMouseEnter() { + const mergedDisabled = getMergedDisabled(); + if (props.trigger === "hover" && !mergedDisabled) { + clearHideTimer(); + if (showTimerIdRef.value !== null) return; + if (getMergedShow()) return; + const delayCallback = () => { + doUpdateShow(true); + showTimerIdRef.value = null; + }; + const { + delay + } = props; + if (delay === 0) { + delayCallback(); + } else { + showTimerIdRef.value = window.setTimeout(delayCallback, delay); + } + } + } + function handleMouseLeave() { + const mergedDisabled = getMergedDisabled(); + if (props.trigger === "hover" && !mergedDisabled) { + clearShowTimer(); + if (hideTimerIdRef.value !== null) return; + if (!getMergedShow()) return; + const delayedCallback = () => { + doUpdateShow(false); + hideTimerIdRef.value = null; + }; + const { + duration + } = props; + if (duration === 0) { + delayedCallback(); + } else { + hideTimerIdRef.value = window.setTimeout(delayedCallback, duration); + } + } + } + function handleMouseMoveOutside() { + handleMouseLeave(); + } + function handleClickOutside(e) { + var _a; + if (!getMergedShow()) return; + if (props.trigger === "click") { + clearShowTimer(); + clearHideTimer(); + doUpdateShow(false); + } + (_a = props.onClickoutside) === null || _a === void 0 ? void 0 : _a.call(props, e); + } + function handleClick() { + if (props.trigger === "click" && !getMergedDisabled()) { + clearShowTimer(); + clearHideTimer(); + const nextShow = !getMergedShow(); + doUpdateShow(nextShow); + } + } + function handleKeydown(e) { + if (!props.internalTrapFocus) return; + if (e.key === "Escape") { + clearShowTimer(); + clearHideTimer(); + doUpdateShow(false); + } + } + function setShow(value) { + uncontrolledShowRef.value = value; + } + function getTriggerElement() { + var _a; + return (_a = binderInstRef.value) === null || _a === void 0 ? void 0 : _a.targetRef; + } + function setBodyInstance(value) { + bodyInstance = value; + } + provide("NPopover", { + getTriggerElement, + handleKeydown, + handleMouseEnter, + handleMouseLeave, + handleClickOutside, + handleMouseMoveOutside, + setBodyInstance, + positionManuallyRef, + isMountedRef, + zIndexRef: toRef(props, "zIndex"), + extraClassRef: toRef(props, "internalExtraClass"), + internalRenderBodyRef: toRef(props, "internalRenderBody") + }); + watchEffect(() => { + if (mergedShowWithoutDisabledRef.value && getMergedDisabled()) { + doUpdateShow(false); + } + }); + const returned = { + binderInstRef, + positionManually: positionManuallyRef, + mergedShowConsideringDisabledProp: mergedShowConsideringDisabledPropRef, + // if to show popover body + uncontrolledShow: uncontrolledShowRef, + mergedShowArrow: mergedShowArrowRef, + getMergedShow, + setShow, + handleClick, + handleMouseEnter, + handleMouseLeave, + handleFocus, + handleBlur, + syncPosition + }; + return returned; + }, + render() { + var _a; + const { + positionManually, + $slots: slots + } = this; + let triggerVNode; + let popoverInside = false; + if (!positionManually) { + if (slots.activator) { + triggerVNode = getFirstSlotVNode(slots, "activator"); + } else { + triggerVNode = getFirstSlotVNode(slots, "trigger"); + } + if (triggerVNode) { + triggerVNode = cloneVNode(triggerVNode); + triggerVNode = triggerVNode.type === Text ? h("span", [triggerVNode]) : triggerVNode; + const handlers = { + onClick: this.handleClick, + onMouseenter: this.handleMouseEnter, + onMouseleave: this.handleMouseLeave, + onFocus: this.handleFocus, + onBlur: this.handleBlur + }; + if ((_a = triggerVNode.type) === null || _a === void 0 ? void 0 : _a.__popover__) { + popoverInside = true; + if (!triggerVNode.props) { + triggerVNode.props = { + internalSyncTargetWithParent: true, + internalInheritedEventHandlers: [] + }; + } + triggerVNode.props.internalSyncTargetWithParent = true; + if (!triggerVNode.props.internalInheritedEventHandlers) { + triggerVNode.props.internalInheritedEventHandlers = [handlers]; + } else { + triggerVNode.props.internalInheritedEventHandlers = [handlers, ...triggerVNode.props.internalInheritedEventHandlers]; + } + } else { + const { + internalInheritedEventHandlers + } = this; + const ascendantAndCurrentHandlers = [handlers, ...internalInheritedEventHandlers]; + const mergedHandlers = { + onBlur: (e) => { + ascendantAndCurrentHandlers.forEach((_handlers) => { + _handlers.onBlur(e); + }); + }, + onFocus: (e) => { + ascendantAndCurrentHandlers.forEach((_handlers) => { + _handlers.onFocus(e); + }); + }, + onClick: (e) => { + ascendantAndCurrentHandlers.forEach((_handlers) => { + _handlers.onClick(e); + }); + }, + onMouseenter: (e) => { + ascendantAndCurrentHandlers.forEach((_handlers) => { + _handlers.onMouseenter(e); + }); + }, + onMouseleave: (e) => { + ascendantAndCurrentHandlers.forEach((_handlers) => { + _handlers.onMouseleave(e); + }); + } + }; + appendEvents(triggerVNode, internalInheritedEventHandlers ? "nested" : positionManually ? "manual" : this.trigger, mergedHandlers); + } + } + } + return h(Binder, { + ref: "binderInstRef", + syncTarget: !popoverInside, + syncTargetWithParent: this.internalSyncTargetWithParent + }, { + default: () => { + void this.mergedShowConsideringDisabledProp; + const mergedShow = this.getMergedShow(); + return [this.internalTrapFocus && mergedShow ? withDirectives(h("div", { + style: { + position: "fixed", + top: 0, + right: 0, + bottom: 0, + left: 0 + } + }), [[zindexable, { + enabled: mergedShow, + zIndex: this.zIndex + }]]) : null, positionManually ? null : h(VTarget, null, { + default: () => triggerVNode + }), h(NPopoverBody, keep(this.$props, bodyPropKeys, Object.assign(Object.assign({}, this.$attrs), { + showArrow: this.mergedShowArrow, + show: mergedShow + })), { + default: () => { + var _a2, _b; + return (_b = (_a2 = this.$slots).default) === null || _b === void 0 ? void 0 : _b.call(_a2); + }, + header: () => { + var _a2, _b; + return (_b = (_a2 = this.$slots).header) === null || _b === void 0 ? void 0 : _b.call(_a2); + }, + footer: () => { + var _a2, _b; + return (_b = (_a2 = this.$slots).footer) === null || _b === void 0 ? void 0 : _b.call(_a2); + } + })]; + } + }); + } +}); +const isImageSupportNativeLazy = isBrowser && "loading" in document.createElement("img"); +function resolveOptionsAndHash(options = {}) { + var _a; + const { + root: root2 = null + } = options; + return { + hash: `${options.rootMargin || "0px 0px 0px 0px"}-${Array.isArray(options.threshold) ? options.threshold.join(",") : (_a = options.threshold) !== null && _a !== void 0 ? _a : "0"}`, + options: Object.assign(Object.assign({}, options), { + root: (typeof root2 === "string" ? document.querySelector(root2) : root2) || document.documentElement + }) + }; +} +const observers = /* @__PURE__ */ new WeakMap(); +const unobserveHandleMap = /* @__PURE__ */ new WeakMap(); +const shouldStartLoadingRefMap = /* @__PURE__ */ new WeakMap(); +const observeIntersection = (el, options, shouldStartLoadingRef) => { + if (!el) return () => { + }; + const resolvedOptionsAndHash = resolveOptionsAndHash(options); + const { + root: root2 + } = resolvedOptionsAndHash.options; + let rootObservers; + const _rootObservers = observers.get(root2); + if (_rootObservers) { + rootObservers = _rootObservers; + } else { + rootObservers = /* @__PURE__ */ new Map(); + observers.set(root2, rootObservers); + } + let observer; + let observerAndObservedElements; + if (rootObservers.has(resolvedOptionsAndHash.hash)) { + observerAndObservedElements = rootObservers.get(resolvedOptionsAndHash.hash); + if (!observerAndObservedElements[1].has(el)) { + observer = observerAndObservedElements[0]; + observerAndObservedElements[1].add(el); + observer.observe(el); + } + } else { + observer = new IntersectionObserver((entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + const _unobserve = unobserveHandleMap.get(entry.target); + const _shouldStartLoadingRef = shouldStartLoadingRefMap.get(entry.target); + if (_unobserve) _unobserve(); + if (_shouldStartLoadingRef) { + _shouldStartLoadingRef.value = true; + } + } + }); + }, resolvedOptionsAndHash.options); + observer.observe(el); + observerAndObservedElements = [observer, /* @__PURE__ */ new Set([el])]; + rootObservers.set(resolvedOptionsAndHash.hash, observerAndObservedElements); + } + let unobservered = false; + const unobserve = () => { + if (unobservered) return; + unobserveHandleMap.delete(el); + shouldStartLoadingRefMap.delete(el); + unobservered = true; + if (observerAndObservedElements[1].has(el)) { + observerAndObservedElements[0].unobserve(el); + observerAndObservedElements[1].delete(el); + } + if (observerAndObservedElements[1].size <= 0) { + rootObservers.delete(resolvedOptionsAndHash.hash); + } + if (!rootObservers.size) { + observers.delete(root2); + } + }; + unobserveHandleMap.set(el, unobserve); + shouldStartLoadingRefMap.set(el, shouldStartLoadingRef); + return unobserve; +}; +const tooltipProps = Object.assign(Object.assign({}, popoverBaseProps), useTheme.props); +const __unplugin_components_3 = defineComponent({ + name: "Tooltip", + props: tooltipProps, + __popover__: true, + setup(props) { + const { + mergedClsPrefixRef + } = useConfig(props); + const themeRef = useTheme("Tooltip", "-tooltip", void 0, tooltipLight, props, mergedClsPrefixRef); + const popoverRef = ref(null); + const tooltipExposedMethod = { + syncPosition() { + popoverRef.value.syncPosition(); + }, + setShow(show) { + popoverRef.value.setShow(show); + } + }; + return Object.assign(Object.assign({}, tooltipExposedMethod), { + popoverRef, + mergedTheme: themeRef, + popoverThemeOverrides: computed(() => { + return themeRef.value.self; + }) + }); + }, + render() { + const { + mergedTheme, + internalExtraClass + } = this; + return h(__unplugin_components_5, Object.assign(Object.assign({}, this.$props), { + theme: mergedTheme.peers.Popover, + themeOverrides: mergedTheme.peerOverrides.Popover, + builtinThemeOverrides: this.popoverThemeOverrides, + internalExtraClass: internalExtraClass.concat("tooltip"), + ref: "popoverRef" + }), this.$slots); + } +}); +function renderPrevIcon() { + return h("svg", { + viewBox: "0 0 20 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, h("path", { + d: "M6 5C5.75454 5 5.55039 5.17688 5.50806 5.41012L5.5 5.5V14.5C5.5 14.7761 5.72386 15 6 15C6.24546 15 6.44961 14.8231 6.49194 14.5899L6.5 14.5V5.5C6.5 5.22386 6.27614 5 6 5ZM13.8536 5.14645C13.68 4.97288 13.4106 4.9536 13.2157 5.08859L13.1464 5.14645L8.64645 9.64645C8.47288 9.82001 8.4536 10.0894 8.58859 10.2843L8.64645 10.3536L13.1464 14.8536C13.3417 15.0488 13.6583 15.0488 13.8536 14.8536C14.0271 14.68 14.0464 14.4106 13.9114 14.2157L13.8536 14.1464L9.70711 10L13.8536 5.85355C14.0488 5.65829 14.0488 5.34171 13.8536 5.14645Z", + fill: "currentColor" + })); +} +function renderNextIcon() { + return h("svg", { + viewBox: "0 0 20 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, h("path", { + d: "M13.5 5C13.7455 5 13.9496 5.17688 13.9919 5.41012L14 5.5V14.5C14 14.7761 13.7761 15 13.5 15C13.2545 15 13.0504 14.8231 13.0081 14.5899L13 14.5V5.5C13 5.22386 13.2239 5 13.5 5ZM5.64645 5.14645C5.82001 4.97288 6.08944 4.9536 6.28431 5.08859L6.35355 5.14645L10.8536 9.64645C11.0271 9.82001 11.0464 10.0894 10.9114 10.2843L10.8536 10.3536L6.35355 14.8536C6.15829 15.0488 5.84171 15.0488 5.64645 14.8536C5.47288 14.68 5.4536 14.4106 5.58859 14.2157L5.64645 14.1464L9.79289 10L5.64645 5.85355C5.45118 5.65829 5.45118 5.34171 5.64645 5.14645Z", + fill: "currentColor" + })); +} +function renderCloseIcon() { + return h("svg", { + viewBox: "0 0 20 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, h("path", { + d: "M4.089 4.216l.057-.07a.5.5 0 0 1 .638-.057l.07.057L10 9.293l5.146-5.147a.5.5 0 0 1 .638-.057l.07.057a.5.5 0 0 1 .057.638l-.057.07L10.707 10l5.147 5.146a.5.5 0 0 1 .057.638l-.057.07a.5.5 0 0 1-.638.057l-.07-.057L10 10.707l-5.146 5.147a.5.5 0 0 1-.638.057l-.07-.057a.5.5 0 0 1-.057-.638l.057-.07L9.293 10L4.146 4.854a.5.5 0 0 1-.057-.638l.057-.07l-.057.07z", + fill: "currentColor" + })); +} +const imagePreviewSharedProps = Object.assign(Object.assign({}, useTheme.props), { + onPreviewPrev: Function, + onPreviewNext: Function, + showToolbar: { + type: Boolean, + default: true + }, + showToolbarTooltip: Boolean, + renderToolbar: Function +}); +const imageContextKey = createInjectionKey("n-image"); +const style = c([c("body >", [cB("image-container", "position: fixed;")]), cB("image-preview-container", ` + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + `), cB("image-preview-overlay", ` + z-index: -1; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + background: rgba(0, 0, 0, .3); + `, [fadeInTransition()]), cB("image-preview-toolbar", ` + z-index: 1; + position: absolute; + left: 50%; + transform: translateX(-50%); + border-radius: var(--n-toolbar-border-radius); + height: 48px; + bottom: 40px; + padding: 0 12px; + background: var(--n-toolbar-color); + box-shadow: var(--n-toolbar-box-shadow); + color: var(--n-toolbar-icon-color); + transition: color .3s var(--n-bezier); + display: flex; + align-items: center; + `, [cB("base-icon", ` + padding: 0 8px; + font-size: 28px; + cursor: pointer; + `), fadeInTransition()]), cB("image-preview-wrapper", ` + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + pointer-events: none; + `, [fadeInScaleUpTransition()]), cB("image-preview", ` + user-select: none; + -webkit-user-select: none; + pointer-events: all; + margin: auto; + max-height: calc(100vh - 32px); + max-width: calc(100vw - 32px); + transition: transform .3s var(--n-bezier); + `), cB("image", ` + display: inline-flex; + max-height: 100%; + max-width: 100%; + `, [cNotM("preview-disabled", ` + cursor: pointer; + `), c("img", ` + border-radius: inherit; + `)])]); +const BLEEDING = 32; +const NImagePreview = defineComponent({ + name: "ImagePreview", + props: Object.assign(Object.assign({}, imagePreviewSharedProps), { + onNext: Function, + onPrev: Function, + clsPrefix: { + type: String, + required: true + } + }), + setup(props) { + const themeRef = useTheme("Image", "-image", style, imageLight, props, toRef(props, "clsPrefix")); + let thumbnailEl = null; + const previewRef = ref(null); + const previewWrapperRef = ref(null); + const previewSrcRef = ref(void 0); + const showRef = ref(false); + const displayedRef = ref(false); + const { + localeRef + } = useLocale("Image"); + function syncTransformOrigin() { + const { + value: previewWrapper + } = previewWrapperRef; + if (!thumbnailEl || !previewWrapper) return; + const { + style: style2 + } = previewWrapper; + const tbox = thumbnailEl.getBoundingClientRect(); + const tx = tbox.left + tbox.width / 2; + const ty = tbox.top + tbox.height / 2; + style2.transformOrigin = `${tx}px ${ty}px`; + } + function handleKeydown(e) { + var _a, _b; + switch (e.key) { + case " ": + e.preventDefault(); + break; + case "ArrowLeft": + (_a = props.onPrev) === null || _a === void 0 ? void 0 : _a.call(props); + break; + case "ArrowRight": + (_b = props.onNext) === null || _b === void 0 ? void 0 : _b.call(props); + break; + case "Escape": + toggleShow(); + break; + } + } + watch(showRef, (value) => { + if (value) { + on("keydown", document, handleKeydown); + } else { + off("keydown", document, handleKeydown); + } + }); + onBeforeUnmount(() => { + off("keydown", document, handleKeydown); + }); + let startX = 0; + let startY = 0; + let offsetX = 0; + let offsetY = 0; + let startOffsetX = 0; + let startOffsetY = 0; + let mouseDownClientX = 0; + let mouseDownClientY = 0; + let dragging = false; + function handleMouseMove(e) { + const { + clientX, + clientY + } = e; + offsetX = clientX - startX; + offsetY = clientY - startY; + beforeNextFrameOnce(derivePreviewStyle); + } + function getMoveStrategy(opts) { + const { + mouseUpClientX, + mouseUpClientY, + mouseDownClientX: mouseDownClientX2, + mouseDownClientY: mouseDownClientY2 + } = opts; + const deltaHorizontal = mouseDownClientX2 - mouseUpClientX; + const deltaVertical = mouseDownClientY2 - mouseUpClientY; + const moveVerticalDirection = `vertical${deltaVertical > 0 ? "Top" : "Bottom"}`; + const moveHorizontalDirection = `horizontal${deltaHorizontal > 0 ? "Left" : "Right"}`; + return { + moveVerticalDirection, + moveHorizontalDirection, + deltaHorizontal, + deltaVertical + }; + } + function getDerivedOffset(moveStrategy) { + const { + value: preview + } = previewRef; + if (!preview) return { + offsetX: 0, + offsetY: 0 + }; + const pbox = preview.getBoundingClientRect(); + const { + moveVerticalDirection, + moveHorizontalDirection, + deltaHorizontal, + deltaVertical + } = moveStrategy || {}; + let nextOffsetX = 0; + let nextOffsetY = 0; + if (pbox.width <= window.innerWidth) { + nextOffsetX = 0; + } else if (pbox.left > 0) { + nextOffsetX = (pbox.width - window.innerWidth) / 2; + } else if (pbox.right < window.innerWidth) { + nextOffsetX = -(pbox.width - window.innerWidth) / 2; + } else if (moveHorizontalDirection === "horizontalRight") { + nextOffsetX = Math.min((pbox.width - window.innerWidth) / 2, startOffsetX - (deltaHorizontal !== null && deltaHorizontal !== void 0 ? deltaHorizontal : 0)); + } else { + nextOffsetX = Math.max(-((pbox.width - window.innerWidth) / 2), startOffsetX - (deltaHorizontal !== null && deltaHorizontal !== void 0 ? deltaHorizontal : 0)); + } + if (pbox.height <= window.innerHeight) { + nextOffsetY = 0; + } else if (pbox.top > 0) { + nextOffsetY = (pbox.height - window.innerHeight) / 2; + } else if (pbox.bottom < window.innerHeight) { + nextOffsetY = -(pbox.height - window.innerHeight) / 2; + } else if (moveVerticalDirection === "verticalBottom") { + nextOffsetY = Math.min((pbox.height - window.innerHeight) / 2, startOffsetY - (deltaVertical !== null && deltaVertical !== void 0 ? deltaVertical : 0)); + } else { + nextOffsetY = Math.max(-((pbox.height - window.innerHeight) / 2), startOffsetY - (deltaVertical !== null && deltaVertical !== void 0 ? deltaVertical : 0)); + } + return { + offsetX: nextOffsetX, + offsetY: nextOffsetY + }; + } + function handleMouseUp(e) { + off("mousemove", document, handleMouseMove); + off("mouseup", document, handleMouseUp); + const { + clientX: mouseUpClientX, + clientY: mouseUpClientY + } = e; + dragging = false; + const moveStrategy = getMoveStrategy({ + mouseUpClientX, + mouseUpClientY, + mouseDownClientX, + mouseDownClientY + }); + const offset = getDerivedOffset(moveStrategy); + offsetX = offset.offsetX; + offsetY = offset.offsetY; + derivePreviewStyle(); + } + const imageContext = inject(imageContextKey, null); + function handlePreviewMousedown(e) { + var _a, _b; + (_b = (_a = imageContext === null || imageContext === void 0 ? void 0 : imageContext.previewedImgPropsRef.value) === null || _a === void 0 ? void 0 : _a.onMousedown) === null || _b === void 0 ? void 0 : _b.call(_a, e); + if (e.button !== 0) return; + const { + clientX, + clientY + } = e; + dragging = true; + startX = clientX - offsetX; + startY = clientY - offsetY; + startOffsetX = offsetX; + startOffsetY = offsetY; + mouseDownClientX = clientX; + mouseDownClientY = clientY; + derivePreviewStyle(); + on("mousemove", document, handleMouseMove); + on("mouseup", document, handleMouseUp); + } + const scaleRadix = 1.5; + let scaleExp = 0; + let scale = 1; + let rotate = 0; + function handlePreviewDblclick(e) { + var _a, _b; + (_b = (_a = imageContext === null || imageContext === void 0 ? void 0 : imageContext.previewedImgPropsRef.value) === null || _a === void 0 ? void 0 : _a.onDblclick) === null || _b === void 0 ? void 0 : _b.call(_a, e); + const originalImageSizeScale = getOrignalImageSizeScale(); + scale = scale === originalImageSizeScale ? 1 : originalImageSizeScale; + derivePreviewStyle(); + } + function resetScale() { + scale = 1; + scaleExp = 0; + } + function handleSwitchPrev() { + var _a; + resetScale(); + rotate = 0; + (_a = props.onPrev) === null || _a === void 0 ? void 0 : _a.call(props); + } + function handleSwitchNext() { + var _a; + resetScale(); + rotate = 0; + (_a = props.onNext) === null || _a === void 0 ? void 0 : _a.call(props); + } + function rotateCounterclockwise() { + rotate -= 90; + derivePreviewStyle(); + } + function rotateClockwise() { + rotate += 90; + derivePreviewStyle(); + } + function getMaxScale() { + const { + value: preview + } = previewRef; + if (!preview) return 1; + const { + innerWidth, + innerHeight + } = window; + const heightMaxScale = Math.max(1, preview.naturalHeight / (innerHeight - BLEEDING)); + const widthMaxScale = Math.max(1, preview.naturalWidth / (innerWidth - BLEEDING)); + return Math.max(3, heightMaxScale * 2, widthMaxScale * 2); + } + function getOrignalImageSizeScale() { + const { + value: preview + } = previewRef; + if (!preview) return 1; + const { + innerWidth, + innerHeight + } = window; + const heightScale = preview.naturalHeight / (innerHeight - BLEEDING); + const widthScale = preview.naturalWidth / (innerWidth - BLEEDING); + if (heightScale < 1 && widthScale < 1) { + return 1; + } + return Math.max(heightScale, widthScale); + } + function zoomIn() { + const maxScale = getMaxScale(); + if (scale < maxScale) { + scaleExp += 1; + scale = Math.min(maxScale, Math.pow(scaleRadix, scaleExp)); + derivePreviewStyle(); + } + } + function zoomOut() { + if (scale > 0.5) { + const originalScale = scale; + scaleExp -= 1; + scale = Math.max(0.5, Math.pow(scaleRadix, scaleExp)); + const diff = originalScale - scale; + derivePreviewStyle(false); + const offset = getDerivedOffset(); + scale += diff; + derivePreviewStyle(false); + scale -= diff; + offsetX = offset.offsetX; + offsetY = offset.offsetY; + derivePreviewStyle(); + } + } + function handleDownloadClick() { + const src = previewSrcRef.value; + if (src) { + download(src); + } + } + function derivePreviewStyle(transition = true) { + var _a; + const { + value: preview + } = previewRef; + if (!preview) return; + const { + style: style2 + } = preview; + const controlledStyle = normalizeStyle((_a = imageContext === null || imageContext === void 0 ? void 0 : imageContext.previewedImgPropsRef.value) === null || _a === void 0 ? void 0 : _a.style); + let controlledStyleString = ""; + if (typeof controlledStyle === "string") { + controlledStyleString = `${controlledStyle};`; + } else { + for (const key in controlledStyle) { + controlledStyleString += `${kebabCase(key)}: ${controlledStyle[key]};`; + } + } + const transformStyle = `transform-origin: center; transform: translateX(${offsetX}px) translateY(${offsetY}px) rotate(${rotate}deg) scale(${scale});`; + if (dragging) { + style2.cssText = `${controlledStyleString}cursor: grabbing; transition: none;${transformStyle}`; + } else { + style2.cssText = `${controlledStyleString}cursor: grab;${transformStyle}${transition ? "" : "transition: none;"}`; + } + if (!transition) { + void preview.offsetHeight; + } + } + function toggleShow() { + showRef.value = !showRef.value; + displayedRef.value = true; + } + function resizeToOrignalImageSize() { + scale = getOrignalImageSizeScale(); + scaleExp = Math.ceil(Math.log(scale) / Math.log(scaleRadix)); + offsetX = 0; + offsetY = 0; + derivePreviewStyle(); + } + const exposedMethods = { + setPreviewSrc: (src) => { + previewSrcRef.value = src; + }, + setThumbnailEl: (el) => { + thumbnailEl = el; + }, + toggleShow + }; + function withTooltip(node, tooltipKey) { + if (props.showToolbarTooltip) { + const { + value: theme + } = themeRef; + return h(__unplugin_components_3, { + to: false, + theme: theme.peers.Tooltip, + themeOverrides: theme.peerOverrides.Tooltip, + keepAliveOnHover: false + }, { + default: () => { + return localeRef.value[tooltipKey]; + }, + trigger: () => node + }); + } else { + return node; + } + } + const cssVarsRef = computed(() => { + const { + common: { + cubicBezierEaseInOut + }, + self: { + toolbarIconColor, + toolbarBorderRadius, + toolbarBoxShadow, + toolbarColor + } + } = themeRef.value; + return { + "--n-bezier": cubicBezierEaseInOut, + "--n-toolbar-icon-color": toolbarIconColor, + "--n-toolbar-color": toolbarColor, + "--n-toolbar-border-radius": toolbarBorderRadius, + "--n-toolbar-box-shadow": toolbarBoxShadow + }; + }); + const { + inlineThemeDisabled + } = useConfig(); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("image-preview", void 0, cssVarsRef, props) : void 0; + return Object.assign({ + previewRef, + previewWrapperRef, + previewSrc: previewSrcRef, + show: showRef, + appear: isMounted(), + displayed: displayedRef, + previewedImgProps: imageContext === null || imageContext === void 0 ? void 0 : imageContext.previewedImgPropsRef, + handleWheel(e) { + e.preventDefault(); + }, + handlePreviewMousedown, + handlePreviewDblclick, + syncTransformOrigin, + handleAfterLeave: () => { + resetScale(); + rotate = 0; + displayedRef.value = false; + }, + handleDragStart: (e) => { + var _a, _b; + (_b = (_a = imageContext === null || imageContext === void 0 ? void 0 : imageContext.previewedImgPropsRef.value) === null || _a === void 0 ? void 0 : _a.onDragstart) === null || _b === void 0 ? void 0 : _b.call(_a, e); + e.preventDefault(); + }, + zoomIn, + zoomOut, + handleDownloadClick, + rotateCounterclockwise, + rotateClockwise, + handleSwitchPrev, + handleSwitchNext, + withTooltip, + resizeToOrignalImageSize, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }, exposedMethods); + }, + render() { + var _a, _b; + const { + clsPrefix, + renderToolbar, + withTooltip + } = this; + const prevNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.handleSwitchPrev + }, { + default: renderPrevIcon + }), "tipPrevious"); + const nextNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.handleSwitchNext + }, { + default: renderNextIcon + }), "tipNext"); + const rotateCounterclockwiseNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.rotateCounterclockwise + }, { + default: () => h(RotateCounterclockwiseIcon, null) + }), "tipCounterclockwise"); + const rotateClockwiseNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.rotateClockwise + }, { + default: () => h(RotateClockwiseIcon, null) + }), "tipClockwise"); + const originalSizeNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.resizeToOrignalImageSize + }, { + default: () => { + return h(ResizeSmallIcon, null); + } + }), "tipOriginalSize"); + const zoomOutNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.zoomOut + }, { + default: () => h(ZoomOutIcon, null) + }), "tipZoomOut"); + const downloadNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.handleDownloadClick + }, { + default: () => h(DownloadIcon, null) + }), "tipDownload"); + const closeNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.toggleShow + }, { + default: renderCloseIcon + }), "tipClose"); + const zoomInNode = withTooltip(h(NBaseIcon, { + clsPrefix, + onClick: this.zoomIn + }, { + default: () => h(ZoomInIcon, null) + }), "tipZoomIn"); + return h(Fragment, null, (_b = (_a = this.$slots).default) === null || _b === void 0 ? void 0 : _b.call(_a), h(LazyTeleport, { + show: this.show + }, { + default: () => { + var _a2; + if (!(this.show || this.displayed)) { + return null; + } + (_a2 = this.onRender) === null || _a2 === void 0 ? void 0 : _a2.call(this); + return withDirectives(h("div", { + class: [`${clsPrefix}-image-preview-container`, this.themeClass], + style: this.cssVars, + onWheel: this.handleWheel + }, h(Transition, { + name: "fade-in-transition", + appear: this.appear + }, { + default: () => this.show ? h("div", { + class: `${clsPrefix}-image-preview-overlay`, + onClick: this.toggleShow + }) : null + }), this.showToolbar ? h(Transition, { + name: "fade-in-transition", + appear: this.appear + }, { + default: () => { + if (!this.show) return null; + return h("div", { + class: `${clsPrefix}-image-preview-toolbar` + }, renderToolbar ? renderToolbar({ + nodes: { + prev: prevNode, + next: nextNode, + rotateCounterclockwise: rotateCounterclockwiseNode, + rotateClockwise: rotateClockwiseNode, + resizeToOriginalSize: originalSizeNode, + zoomOut: zoomOutNode, + zoomIn: zoomInNode, + download: downloadNode, + close: closeNode + } + }) : h(Fragment, null, this.onPrev ? h(Fragment, null, prevNode, nextNode) : null, rotateCounterclockwiseNode, rotateClockwiseNode, originalSizeNode, zoomOutNode, zoomInNode, downloadNode, closeNode)); + } + }) : null, h(Transition, { + name: "fade-in-scale-up-transition", + onAfterLeave: this.handleAfterLeave, + appear: this.appear, + // BUG: + // onEnter will be called twice, I don't know why + // Maybe it is a bug of vue + onEnter: this.syncTransformOrigin, + onBeforeLeave: this.syncTransformOrigin + }, { + default: () => { + const { + previewedImgProps = {} + } = this; + return withDirectives(h("div", { + class: `${clsPrefix}-image-preview-wrapper`, + ref: "previewWrapperRef" + }, h("img", Object.assign({}, previewedImgProps, { + draggable: false, + onMousedown: this.handlePreviewMousedown, + onDblclick: this.handlePreviewDblclick, + class: [`${clsPrefix}-image-preview`, previewedImgProps.class], + key: this.previewSrc, + src: this.previewSrc, + ref: "previewRef", + onDragstart: this.handleDragStart + }))), [[vShow, this.show]]); + } + })), [[zindexable, { + enabled: this.show + }]]); + } + })); + } +}); +const imageGroupInjectionKey = createInjectionKey("n-image-group"); +const imageProps = Object.assign({ + alt: String, + height: [String, Number], + imgProps: Object, + previewedImgProps: Object, + lazy: Boolean, + intersectionObserverOptions: Object, + objectFit: { + type: String, + default: "fill" + }, + previewSrc: String, + fallbackSrc: String, + width: [String, Number], + src: String, + previewDisabled: Boolean, + loadDescription: String, + onError: Function, + onLoad: Function +}, imagePreviewSharedProps); +const NImage = defineComponent({ + name: "Image", + props: imageProps, + inheritAttrs: false, + setup(props) { + const imageRef = ref(null); + const showErrorRef = ref(false); + const previewInstRef = ref(null); + const imageGroupHandle = inject(imageGroupInjectionKey, null); + const { + mergedClsPrefixRef + } = imageGroupHandle || useConfig(props); + const exposedMethods = { + click: () => { + if (props.previewDisabled || showErrorRef.value) return; + const mergedPreviewSrc = props.previewSrc || props.src; + if (imageGroupHandle) { + imageGroupHandle.setPreviewSrc(mergedPreviewSrc); + imageGroupHandle.setThumbnailEl(imageRef.value); + imageGroupHandle.toggleShow(); + return; + } + const { + value: previewInst + } = previewInstRef; + if (!previewInst) return; + previewInst.setPreviewSrc(mergedPreviewSrc); + previewInst.setThumbnailEl(imageRef.value); + previewInst.toggleShow(); + } + }; + const shouldStartLoadingRef = ref(!props.lazy); + onMounted(() => { + var _a; + (_a = imageRef.value) === null || _a === void 0 ? void 0 : _a.setAttribute("data-group-id", (imageGroupHandle === null || imageGroupHandle === void 0 ? void 0 : imageGroupHandle.groupId) || ""); + }); + onMounted(() => { + if (props.lazy && props.intersectionObserverOptions) { + let unobserve; + const stopWatchHandle = watchEffect(() => { + unobserve === null || unobserve === void 0 ? void 0 : unobserve(); + unobserve = void 0; + unobserve = observeIntersection(imageRef.value, props.intersectionObserverOptions, shouldStartLoadingRef); + }); + onBeforeUnmount(() => { + stopWatchHandle(); + unobserve === null || unobserve === void 0 ? void 0 : unobserve(); + }); + } + }); + watchEffect(() => { + var _a; + void (props.src || ((_a = props.imgProps) === null || _a === void 0 ? void 0 : _a.src)); + showErrorRef.value = false; + }); + const loadedRef = ref(false); + provide(imageContextKey, { + previewedImgPropsRef: toRef(props, "previewedImgProps") + }); + return Object.assign({ + mergedClsPrefix: mergedClsPrefixRef, + groupId: imageGroupHandle === null || imageGroupHandle === void 0 ? void 0 : imageGroupHandle.groupId, + previewInstRef, + imageRef, + showError: showErrorRef, + shouldStartLoading: shouldStartLoadingRef, + loaded: loadedRef, + mergedOnClick: (e) => { + var _a, _b; + exposedMethods.click(); + (_b = (_a = props.imgProps) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e); + }, + mergedOnError: (e) => { + if (!shouldStartLoadingRef.value) return; + showErrorRef.value = true; + const { + onError, + imgProps: { + onError: imgPropsOnError + } = {} + } = props; + onError === null || onError === void 0 ? void 0 : onError(e); + imgPropsOnError === null || imgPropsOnError === void 0 ? void 0 : imgPropsOnError(e); + }, + mergedOnLoad: (e) => { + const { + onLoad, + imgProps: { + onLoad: imgPropsOnLoad + } = {} + } = props; + onLoad === null || onLoad === void 0 ? void 0 : onLoad(e); + imgPropsOnLoad === null || imgPropsOnLoad === void 0 ? void 0 : imgPropsOnLoad(e); + loadedRef.value = true; + } + }, exposedMethods); + }, + render() { + var _a, _b; + const { + mergedClsPrefix, + imgProps = {}, + loaded, + $attrs, + lazy + } = this; + const errorNode = resolveSlot(this.$slots.error, () => []); + const placeholderNode = (_b = (_a = this.$slots).placeholder) === null || _b === void 0 ? void 0 : _b.call(_a); + const loadSrc = this.src || imgProps.src; + const imgNode = this.showError && errorNode.length ? errorNode : h("img", Object.assign(Object.assign({}, imgProps), { + ref: "imageRef", + width: this.width || imgProps.width, + height: this.height || imgProps.height, + src: this.showError ? this.fallbackSrc : lazy && this.intersectionObserverOptions ? this.shouldStartLoading ? loadSrc : void 0 : loadSrc, + alt: this.alt || imgProps.alt, + "aria-label": this.alt || imgProps.alt, + onClick: this.mergedOnClick, + onError: this.mergedOnError, + onLoad: this.mergedOnLoad, + // If interseciton observer options is set, do not use native lazy + loading: isImageSupportNativeLazy && lazy && !this.intersectionObserverOptions ? "lazy" : "eager", + style: [imgProps.style || "", placeholderNode && !loaded ? { + height: "0", + width: "0", + visibility: "hidden" + } : "", { + objectFit: this.objectFit + }], + "data-error": this.showError, + "data-preview-src": this.previewSrc || this.src + })); + return h("div", Object.assign({}, $attrs, { + role: "none", + class: [$attrs.class, `${mergedClsPrefix}-image`, (this.previewDisabled || this.showError) && `${mergedClsPrefix}-image--preview-disabled`] + }), this.groupId ? imgNode : h(NImagePreview, { + theme: this.theme, + themeOverrides: this.themeOverrides, + clsPrefix: mergedClsPrefix, + ref: "previewInstRef", + showToolbar: this.showToolbar, + showToolbarTooltip: this.showToolbarTooltip, + renderToolbar: this.renderToolbar + }, { + default: () => imgNode, + toolbar: () => { + var _a2, _b2; + return (_b2 = (_a2 = this.$slots).toolbar) === null || _b2 === void 0 ? void 0 : _b2.call(_a2); + } + }), !loaded && placeholderNode); + } +}); +export { + NImage as N, + __unplugin_components_3 as _, + __unplugin_components_5 as a, + formatLength as f, + isImageSupportNativeLazy as i, + observeIntersection as o, + popoverBaseProps as p, + renderArrow as r +}; diff --git a/out/renderer/assets/Image-DXClIklC.js.gz b/out/renderer/assets/Image-DXClIklC.js.gz new file mode 100644 index 0000000..8358a20 Binary files /dev/null and b/out/renderer/assets/Image-DXClIklC.js.gz differ diff --git a/out/renderer/assets/LatoLatin-Regular-Dmlz1U0B.woff2 b/out/renderer/assets/LatoLatin-Regular-Dmlz1U0B.woff2 new file mode 100644 index 0000000..a4d084b Binary files /dev/null and b/out/renderer/assets/LatoLatin-Regular-Dmlz1U0B.woff2 differ diff --git a/out/renderer/assets/LatoLatin-Semibold-Dbk81p2D.woff2 b/out/renderer/assets/LatoLatin-Semibold-Dbk81p2D.woff2 new file mode 100644 index 0000000..1861c24 Binary files /dev/null and b/out/renderer/assets/LatoLatin-Semibold-Dbk81p2D.woff2 differ diff --git a/out/renderer/assets/Layout-CvYBg1vI.js b/out/renderer/assets/Layout-CvYBg1vI.js new file mode 100644 index 0000000..346b0e7 --- /dev/null +++ b/out/renderer/assets/Layout-CvYBg1vI.js @@ -0,0 +1,170 @@ +import { p as cB, W as cM, d as defineComponent, q as useTheme, r as ref, x as useConfig, aI as layoutLight, $ as provide, aJ as useReactivated, G as computed, ap as useThemeClass, l as h, aK as Scrollbar, aL as createInjectionKey } from "./index-DKaFsuse.js"; +const positionProp = { + type: String, + default: "static" +}; +const style = cB("layout", ` + color: var(--n-text-color); + background-color: var(--n-color); + box-sizing: border-box; + position: relative; + z-index: auto; + flex: auto; + overflow: hidden; + transition: + box-shadow .3s var(--n-bezier), + background-color .3s var(--n-bezier), + color .3s var(--n-bezier); +`, [cB("layout-scroll-container", ` + overflow-x: hidden; + box-sizing: border-box; + height: 100%; + `), cM("absolute-positioned", ` + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + `)]); +const layoutProps = { + embedded: Boolean, + position: positionProp, + nativeScrollbar: { + type: Boolean, + default: true + }, + scrollbarProps: Object, + onScroll: Function, + contentClass: String, + contentStyle: { + type: [String, Object], + default: "" + }, + hasSider: Boolean, + siderPlacement: { + type: String, + default: "left" + } +}; +const layoutInjectionKey = createInjectionKey("n-layout"); +function createLayoutComponent(isContent) { + return defineComponent({ + name: "Layout", + props: Object.assign(Object.assign({}, useTheme.props), layoutProps), + setup(props) { + const scrollableElRef = ref(null); + const scrollbarInstRef = ref(null); + const { + mergedClsPrefixRef, + inlineThemeDisabled + } = useConfig(props); + const themeRef = useTheme("Layout", "-layout", style, layoutLight, props, mergedClsPrefixRef); + function scrollTo(options, y) { + if (props.nativeScrollbar) { + const { + value: scrollableEl + } = scrollableElRef; + if (scrollableEl) { + if (y === void 0) { + scrollableEl.scrollTo(options); + } else { + scrollableEl.scrollTo(options, y); + } + } + } else { + const { + value: scrollbarInst + } = scrollbarInstRef; + if (scrollbarInst) { + scrollbarInst.scrollTo(options, y); + } + } + } + provide(layoutInjectionKey, props); + let scrollX = 0; + let scrollY = 0; + const handleNativeElScroll = (e) => { + var _a; + const target = e.target; + scrollX = target.scrollLeft; + scrollY = target.scrollTop; + (_a = props.onScroll) === null || _a === void 0 ? void 0 : _a.call(props, e); + }; + useReactivated(() => { + if (props.nativeScrollbar) { + const el = scrollableElRef.value; + if (el) { + el.scrollTop = scrollY; + el.scrollLeft = scrollX; + } + } + }); + const hasSiderStyle = { + display: "flex", + flexWrap: "nowrap", + width: "100%", + flexDirection: "row" + }; + const exposedMethods = { + scrollTo + }; + const cssVarsRef = computed(() => { + const { + common: { + cubicBezierEaseInOut + }, + self + } = themeRef.value; + return { + "--n-bezier": cubicBezierEaseInOut, + "--n-color": props.embedded ? self.colorEmbedded : self.color, + "--n-text-color": self.textColor + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("layout", computed(() => { + return props.embedded ? "e" : ""; + }), cssVarsRef, props) : void 0; + return Object.assign({ + mergedClsPrefix: mergedClsPrefixRef, + scrollableElRef, + scrollbarInstRef, + hasSiderStyle, + mergedTheme: themeRef, + handleNativeElScroll, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }, exposedMethods); + }, + render() { + var _a; + const { + mergedClsPrefix, + hasSider + } = this; + (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this); + const hasSiderStyle = hasSider ? this.hasSiderStyle : void 0; + const layoutClass = [this.themeClass, isContent, `${mergedClsPrefix}-layout`, `${mergedClsPrefix}-layout--${this.position}-positioned`]; + return h("div", { + class: layoutClass, + style: this.cssVars + }, this.nativeScrollbar ? h("div", { + ref: "scrollableElRef", + class: [`${mergedClsPrefix}-layout-scroll-container`, this.contentClass], + style: [this.contentStyle, hasSiderStyle], + onScroll: this.handleNativeElScroll + }, this.$slots) : h(Scrollbar, Object.assign({}, this.scrollbarProps, { + onScroll: this.onScroll, + ref: "scrollbarInstRef", + theme: this.mergedTheme.peers.Scrollbar, + themeOverrides: this.mergedTheme.peerOverrides.Scrollbar, + contentClass: this.contentClass, + contentStyle: [this.contentStyle, hasSiderStyle] + }), this.$slots)); + } + }); +} +const __unplugin_components_1 = createLayoutComponent(false); +export { + __unplugin_components_1 as _ +}; diff --git a/out/renderer/assets/Layout-CvYBg1vI.js.gz b/out/renderer/assets/Layout-CvYBg1vI.js.gz new file mode 100644 index 0000000..aa82070 Binary files /dev/null and b/out/renderer/assets/Layout-CvYBg1vI.js.gz differ diff --git a/out/renderer/assets/MusicList-NCsRWE81.css b/out/renderer/assets/MusicList-NCsRWE81.css new file mode 100644 index 0000000..e55e713 --- /dev/null +++ b/out/renderer/assets/MusicList-NCsRWE81.css @@ -0,0 +1,162 @@ +.music-title[data-v-1b137c3d] { + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.music-title[data-v-1b137c3d]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.music-page[data-v-1b137c3d] { + height: 100%; + width: 100%; + border-top-left-radius: 1rem; + border-top-right-radius: 1rem; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.75; + padding-left: 2rem; + padding-right: 2rem; +} +.music-page[data-v-1b137c3d]:is(.dark *) { + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.75; +} +.music-page[data-v-1b137c3d] { + -webkit-backdrop-filter: blur(20px); + backdrop-filter: blur(20px); +} +.music-close[data-v-1b137c3d] { + display: flex; + cursor: pointer; + align-items: center; + gap: 0.5rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.music-close[data-v-1b137c3d]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.music-close .icon[data-v-1b137c3d] { + font-size: 1.875rem; + line-height: 2.25rem; +} +.music-content[data-v-1b137c3d] { + display: flex; + height: calc(100% - 60px); +} +.music-info[data-v-1b137c3d] { + display: flex; + width: 25%; + flex-shrink: 0; + flex-direction: column; + padding-right: 2rem; +} +.music-info .music-cover[data-v-1b137c3d] { + margin-bottom: 1rem; + aspect-ratio: 1 / 1; + min-height: 250px; + width: 100%; + overflow: hidden; + border-radius: 1rem; +} +.music-info .music-cover .cover-img[data-v-1b137c3d] { + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.music-info .creator-info[data-v-1b137c3d] { + margin-bottom: 1rem; + display: flex; + align-items: center; +} +.music-info .creator-info .creator-name[data-v-1b137c3d] { + margin-left: 0.5rem; + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); +} +.music-info .creator-info .creator-name[data-v-1b137c3d]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); +} +.music-info .music-desc[data-v-1b137c3d] { + padding-right: 1rem; + font-size: 0.875rem; + line-height: 1.25rem; + line-height: 1.625; + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} +.music-info .music-desc[data-v-1b137c3d]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.music-list[data-v-1b137c3d] { + min-height: 0px; + flex-grow: 1; +} +.music-list-container[data-v-1b137c3d] { + position: relative; + display: flex; + min-height: 0px; + flex-grow: 1; + flex-direction: column; +} +.music-list-content[data-v-1b137c3d] { + min-height: calc(80vh - 60px); +} +.music-list[data-v-1b137c3d] .n-virtual-list__scroll { + scrollbar-width: none; +} +.music-list[data-v-1b137c3d] .n-virtual-list__scroll::-webkit-scrollbar { + display: none; +} +.mobile .music-page[data-v-1b137c3d] { + padding-left: 1rem; + padding-right: 1rem; +} +.mobile .music-content[data-v-1b137c3d] { + flex-direction: column; +} +.mobile .music-info[data-v-1b137c3d] { + margin-bottom: 0.5rem; + display: flex; + width: 100%; + flex-direction: row; + padding-right: 0px; +} +.mobile .music-info .music-cover[data-v-1b137c3d] { + margin-bottom: 1rem; + height: 100px; + width: 100px; + overflow: hidden; + border-radius: 0.5rem; +} +.mobile .music-info .music-detail[data-v-1b137c3d] { + margin-left: 1rem; + flex: 1 1 0%; +} +.loading-more[data-v-1b137c3d] { + padding-top: 1rem; + padding-bottom: 1rem; + text-align: center; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.loading-more[data-v-1b137c3d]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.double-item[data-v-1b137c3d] { + margin-bottom: 0.5rem; + border-radius: 1.5rem; + background-color: rgb(248 249 250 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.2; +} +.double-item[data-v-1b137c3d]:is(.dark *) { + background-color: rgb(22 22 22 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.2; +} \ No newline at end of file diff --git a/out/renderer/assets/MusicList-NCsRWE81.css.gz b/out/renderer/assets/MusicList-NCsRWE81.css.gz new file mode 100644 index 0000000..11946ab Binary files /dev/null and b/out/renderer/assets/MusicList-NCsRWE81.css.gz differ diff --git a/out/renderer/assets/MusicList-s-QHu-iA.js b/out/renderer/assets/MusicList-s-QHu-iA.js new file mode 100644 index 0000000..5fc8e31 --- /dev/null +++ b/out/renderer/assets/MusicList-s-QHu-iA.js @@ -0,0 +1,258 @@ +import { ad as request, d as defineComponent, r as ref, G as computed, E as watch, O as createBlock, f as withCtx, u as unref, g as useStore, j as openBlock, b as createBaseVNode, e as createVNode, t as toDisplayString, a7 as getImgUrl, n as normalizeClass, s as setAnimationClass, c as createElementBlock, T as createCommentVNode, U as PlayBottom, a4 as renderList, a2 as normalizeStyle, a3 as Fragment, ac as isMobile, a5 as setAnimationDelay, S as Scrollbar, aj as __unplugin_components_0, am as getMusicDetail, _ as _export_sfc } from "./index-DKaFsuse.js"; +import { S as SongItem } from "./SongItem-CoswpGn6.js"; +import { _ as __unplugin_components_2 } from "./Drawer-BEJ8Ydua.js"; +import { _ as __unplugin_components_2$2 } from "./Avatar-rQ2og-6c.js"; +import { _ as __unplugin_components_2$1 } from "./Ellipsis-D4R5dIX2.js"; +import { N as NImage } from "./Image-DXClIklC.js"; +function getListByCat(params) { + return request.get("/top/playlist", { + params + }); +} +function getListDetail(id) { + return request.get("/playlist/detail", { params: { id } }); +} +function getAlbum(id) { + return request.get("/album", { params: { id } }); +} +const _hoisted_1 = { class: "music-page" }; +const _hoisted_2 = { class: "music-header h-12 flex items-center justify-between" }; +const _hoisted_3 = { class: "music-title" }; +const _hoisted_4 = { class: "music-content" }; +const _hoisted_5 = { class: "music-info" }; +const _hoisted_6 = { class: "music-cover" }; +const _hoisted_7 = { + key: 0, + class: "creator-info" +}; +const _hoisted_8 = { class: "creator-name" }; +const _hoisted_9 = { + key: 0, + class: "music-desc" +}; +const _hoisted_10 = { class: "music-list-container" }; +const _hoisted_11 = { class: "music-list" }; +const _hoisted_12 = { class: "music-list-content" }; +const _hoisted_13 = { + key: 0, + class: "loading-more" +}; +const pageSize = 20; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "MusicList", + props: { + show: { type: Boolean }, + name: {}, + songList: {}, + loading: { type: Boolean, default: false }, + listInfo: {}, + cover: { type: Boolean, default: true } + }, + emits: ["update:show", "update:loading"], + setup(__props, { emit: __emit }) { + const store = useStore(); + const props = __props; + const emit = __emit; + const page = ref(0); + const isLoadingMore = ref(false); + const displayedSongs = ref([]); + const loadingList = ref(false); + const total = computed(() => { + if (props.listInfo?.trackIds) { + return props.listInfo.trackIds.length; + } + return props.songList.length; + }); + const formatDetail = computed(() => (detail) => { + const song = { + artists: detail.ar, + name: detail.al.name, + id: detail.al.id + }; + detail.song = song; + detail.picUrl = detail.al.picUrl; + return detail; + }); + const handlePlay = () => { + const tracks = props.songList || []; + store.commit( + "setPlayList", + tracks.map((item) => ({ + ...item, + picUrl: item.al.picUrl, + song: { + artists: item.ar + } + })) + ); + }; + const close = () => { + emit("update:show", false); + }; + const loadMoreSongs = async () => { + if (isLoadingMore.value || displayedSongs.value.length >= total.value) return; + isLoadingMore.value = true; + try { + if (props.listInfo?.trackIds) { + const start = page.value * pageSize; + const end = Math.min((page.value + 1) * pageSize, total.value); + const trackIds = props.listInfo.trackIds.slice(start, end).map((item) => item.id); + if (trackIds.length > 0) { + const { data } = await getMusicDetail(trackIds); + displayedSongs.value = [...displayedSongs.value, ...data.songs]; + page.value++; + } + } else { + const start = page.value * pageSize; + const end = Math.min((page.value + 1) * pageSize, props.songList.length); + const newSongs = props.songList.slice(start, end); + displayedSongs.value = [...displayedSongs.value, ...newSongs]; + page.value++; + } + } catch (error) { + console.error("加载歌曲失败:", error); + } finally { + isLoadingMore.value = false; + loadingList.value = false; + } + }; + const getItemAnimationDelay = (index) => { + const currentPageIndex = index % pageSize; + return setAnimationDelay(currentPageIndex, 20); + }; + const handleScroll = (e) => { + const target = e.target; + if (!target) return; + const { scrollTop, scrollHeight, clientHeight } = target; + if (scrollHeight - scrollTop - clientHeight < 100 && !isLoadingMore.value) { + loadMoreSongs(); + } + }; + watch( + () => props.show, + (newVal) => { + loadingList.value = newVal; + if (!props.cover) { + loadingList.value = false; + } + } + ); + watch( + () => props.songList, + (newSongs) => { + page.value = 0; + displayedSongs.value = newSongs.slice(0, pageSize); + if (newSongs.length > pageSize) { + page.value = 1; + } + loadingList.value = false; + }, + { immediate: true } + ); + return (_ctx, _cache) => { + const _component_n_ellipsis = __unplugin_components_2$1; + const _component_n_image = NImage; + const _component_n_avatar = __unplugin_components_2$2; + const _component_n_scrollbar = Scrollbar; + const _component_n_spin = __unplugin_components_0; + const _component_n_drawer = __unplugin_components_2; + return openBlock(), createBlock(_component_n_drawer, { + show: _ctx.show, + height: unref(isMobile) ? "100%" : "80%", + placement: "bottom", + "block-scroll": "", + "mask-closable": "", + style: { backgroundColor: "transparent" }, + to: `#layout-main`, + onMaskClick: close + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + createVNode(_component_n_ellipsis, { "line-clamp": 1 }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_3, toDisplayString(_ctx.name), 1) + ]), + _: 1 + }), + createBaseVNode("div", { class: "music-close" }, [ + createBaseVNode("i", { + class: "icon iconfont icon-icon_error", + onClick: close + }) + ]) + ]), + createBaseVNode("div", _hoisted_4, [ + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("div", _hoisted_6, [ + createVNode(_component_n_image, { + src: unref(getImgUrl)(_ctx.cover ? _ctx.listInfo?.coverImgUrl : unref(displayedSongs)[0]?.picUrl, "500y500"), + class: normalizeClass(["cover-img", unref(setAnimationClass)("animate__fadeIn")]), + "preview-disabled": "", + "object-fit": "cover" + }, null, 8, ["src", "class"]) + ]), + _ctx.listInfo?.creator ? (openBlock(), createElementBlock("div", _hoisted_7, [ + createVNode(_component_n_avatar, { + round: "", + size: 24, + src: unref(getImgUrl)(_ctx.listInfo.creator.avatarUrl, "50y50") + }, null, 8, ["src"]), + createBaseVNode("span", _hoisted_8, toDisplayString(_ctx.listInfo.creator.nickname), 1) + ])) : createCommentVNode("", true), + createVNode(_component_n_scrollbar, { style: { "max-height": "200" } }, { + default: withCtx(() => [ + _ctx.listInfo?.description ? (openBlock(), createElementBlock("div", _hoisted_9, toDisplayString(_ctx.listInfo.description), 1)) : createCommentVNode("", true), + createVNode(PlayBottom) + ]), + _: 1 + }) + ]), + createBaseVNode("div", _hoisted_10, [ + createBaseVNode("div", _hoisted_11, [ + createVNode(_component_n_scrollbar, { onScroll: handleScroll }, { + default: withCtx(() => [ + createVNode(_component_n_spin, { + show: unref(loadingList) || _ctx.loading + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_12, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(displayedSongs), (item, index) => { + return openBlock(), createElementBlock("div", { + key: item.id, + class: normalizeClass(["double-item", unref(setAnimationClass)("animate__bounceInUp")]), + style: normalizeStyle(getItemAnimationDelay(index)) + }, [ + createVNode(SongItem, { + item: unref(formatDetail)(item), + onPlay: handlePlay + }, null, 8, ["item"]) + ], 6); + }), 128)), + unref(isLoadingMore) ? (openBlock(), createElementBlock("div", _hoisted_13, "加载更多...")) : createCommentVNode("", true), + createVNode(PlayBottom) + ]) + ]), + _: 1 + }, 8, ["show"]) + ]), + _: 1 + }) + ]), + createVNode(PlayBottom) + ]) + ]) + ]) + ]), + _: 1 + }, 8, ["show", "height"]); + }; + } +}); +const MusicList = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1b137c3d"]]); +export { + MusicList as M, + getListDetail as a, + getListByCat as b, + getAlbum as g +}; diff --git a/out/renderer/assets/MusicList-s-QHu-iA.js.gz b/out/renderer/assets/MusicList-s-QHu-iA.js.gz new file mode 100644 index 0000000..9984154 Binary files /dev/null and b/out/renderer/assets/MusicList-s-QHu-iA.js.gz differ diff --git a/out/renderer/assets/MvPlayer-BPFZslTY.css b/out/renderer/assets/MvPlayer-BPFZslTY.css new file mode 100644 index 0000000..fd0edf9 --- /dev/null +++ b/out/renderer/assets/MvPlayer-BPFZslTY.css @@ -0,0 +1,177 @@ +.mv-detail[data-v-f4c63e83] { + height: 100%; + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.mv-detail[data-v-f4c63e83]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.mv-detail-title[data-v-f4c63e83] { + position: fixed; + top: 0px; + left: 0px; + right: 0px; + z-index: 10; + padding: 1rem; + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 300ms; + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.7), transparent); +} +.mv-detail-title .title[data-v-f4c63e83] { + font-size: 1.125rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.video-container[data-v-f4c63e83] { + position: relative; + height: 100%; + width: 100%; +} +.video-container .video-player[data-v-f4c63e83] { + height: 100%; + width: 100%; + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + -o-object-fit: contain; + object-fit: contain; +} +.video-container .play-hint[data-v-f4c63e83] { + position: absolute; + inset: 0px; + display: flex; + align-items: center; + justify-content: center; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.5; +} +.video-container .play-hint .n-button[data-v-f4c63e83] { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.video-container .play-hint .n-button[data-v-f4c63e83]:hover { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} +.video-container .custom-controls[data-v-f4c63e83] { + position: absolute; + bottom: 0px; + left: 0px; + right: 0px; + padding: 1rem; + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 300ms; + background: linear-gradient(to top, rgba(0, 0, 0, 0.7), transparent); +} +.video-container .custom-controls .controls-main[data-v-f4c63e83] { + display: flex; + align-items: center; + justify-content: space-between; +} +.video-container .custom-controls .controls-main .left-controls[data-v-f4c63e83], +.video-container .custom-controls .controls-main .right-controls[data-v-f4c63e83] { + display: flex; + align-items: center; + gap: 0.5rem; +} +.video-container .custom-controls .controls-main .left-controls .n-button[data-v-f4c63e83], +.video-container .custom-controls .controls-main .right-controls .n-button[data-v-f4c63e83] { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.video-container .custom-controls .controls-main .left-controls .n-button[data-v-f4c63e83]:hover, +.video-container .custom-controls .controls-main .right-controls .n-button[data-v-f4c63e83]:hover { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} +.video-container .custom-controls .controls-main .left-controls .time-display[data-v-f4c63e83], +.video-container .custom-controls .controls-main .right-controls .time-display[data-v-f4c63e83] { + margin-left: 1rem; + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.mode-hint[data-v-f4c63e83] { + position: absolute; + top: 50%; + left: 50%; + display: flex; + --tw-translate-x: -50%; + --tw-translate-y: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + flex-direction: column; + align-items: center; +} +.mode-hint .mode-icon[data-v-f4c63e83] { + margin-bottom: 0.5rem; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.mode-hint .mode-text[data-v-f4c63e83] { + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.custom-slider[data-v-f4c63e83] .n-slider { + --n-rail-height: 4px; + --n-rail-color: rgba(255, 255, 255, 0.2); + --n-fill-color: #10b981; + --n-handle-size: 12px; + --n-handle-color: #10b981; +} +.progress-bar[data-v-f4c63e83] { + margin-bottom: 1rem; +} +.progress-bar .progress-rail[data-v-f4c63e83] { + position: relative; + height: 0.25rem; + width: 100%; + --tw-bg-opacity: 1; + background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1)); +} +.progress-bar .progress-rail .progress-buffer[data-v-f4c63e83] { + position: absolute; + top: 0px; + left: 0px; + height: 100%; + --tw-bg-opacity: 1; + background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1)); +} +.volume-control[data-v-f4c63e83] { + display: flex; + align-items: center; + gap: 0.5rem; +} +.volume-control .volume-slider[data-v-f4c63e83] { + width: 100px; +} +.controls-hidden[data-v-f4c63e83] { + opacity: 0; + pointer-events: none; +} +.cursor-hidden[data-v-f4c63e83] { + cursor: none; +} +.title-hidden[data-v-f4c63e83] { + opacity: 0; +} +.fade-enter-active[data-v-f4c63e83], +.fade-leave-active[data-v-f4c63e83] { + transition: opacity 0.3s ease; +} +.fade-enter-from[data-v-f4c63e83], +.fade-leave-to[data-v-f4c63e83] { + opacity: 0; +} \ No newline at end of file diff --git a/out/renderer/assets/MvPlayer-BPFZslTY.css.gz b/out/renderer/assets/MvPlayer-BPFZslTY.css.gz new file mode 100644 index 0000000..c3be8aa Binary files /dev/null and b/out/renderer/assets/MvPlayer-BPFZslTY.css.gz differ diff --git a/out/renderer/assets/MvPlayer-I4IDK1xL.js b/out/renderer/assets/MvPlayer-I4IDK1xL.js new file mode 100644 index 0000000..30aa195 --- /dev/null +++ b/out/renderer/assets/MvPlayer-I4IDK1xL.js @@ -0,0 +1,670 @@ +import { ad as request, d as defineComponent, r as ref, E as watch, o as onMounted, a1 as onUnmounted, G as computed, O as createBlock, f as withCtx, g as useStore, j as openBlock, b as createBaseVNode, n as normalizeClass, c as createElementBlock, e as createVNode, u as unref, B as Button, T as createCommentVNode, a2 as normalizeStyle, k as createTextVNode, t as toDisplayString, ak as Transition, M as nextTick, aj as __unplugin_components_0$1, _ as _export_sfc } from "./index-DKaFsuse.js"; +import { N as NIcon } from "./Icon-DucaliTK.js"; +import { _ as __unplugin_components_0 } from "./Slider-BA6NituQ.js"; +import { _ as __unplugin_components_3 } from "./Image-DXClIklC.js"; +import { _ as __unplugin_components_2 } from "./Drawer-BEJ8Ydua.js"; +import { _ as __unplugin_components_2$1 } from "./Ellipsis-D4R5dIX2.js"; +const getTopMv = (params) => { + return request({ + url: "/mv/all", + method: "get", + params + }); +}; +const getAllMv = (params) => { + return request({ + url: "/mv/all", + method: "get", + params + }); +}; +const getMvUrl = (id) => { + return request.get("/mv/url", { + params: { + id + } + }); +}; +const _hoisted_1 = { class: "mv-detail" }; +const _hoisted_2 = ["src"]; +const _hoisted_3 = { class: "progress-bar custom-slider" }; +const _hoisted_4 = { class: "progress-rail" }; +const _hoisted_5 = { class: "controls-main" }; +const _hoisted_6 = { class: "left-controls" }; +const _hoisted_7 = { + key: 1, + class: "ri-skip-back-line" +}; +const _hoisted_8 = { + key: 1, + class: "ri-skip-forward-line" +}; +const _hoisted_9 = { class: "time-display" }; +const _hoisted_10 = { class: "right-controls" }; +const _hoisted_11 = { + key: 0, + class: "volume-control custom-slider" +}; +const _hoisted_12 = { + key: 0, + class: "mode-hint" +}; +const _hoisted_13 = { class: "mode-text" }; +const _hoisted_14 = { class: "title" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "MvPlayer", + props: { + show: { type: Boolean, default: false }, + currentMv: { default: void 0 }, + noList: { type: Boolean, default: false } + }, + emits: ["update:show", "next", "prev"], + setup(__props, { emit: __emit }) { + const PLAY_MODE = { + Single: "single", + Auto: "auto" + }; + const props = __props; + const emit = __emit; + const store = useStore(); + const mvUrl = ref(); + const playMode = ref(PLAY_MODE.Auto); + const videoRef = ref(); + const isPlaying = ref(false); + const currentTime = ref(0); + const duration = ref(0); + const progress = ref(0); + const bufferedProgress = ref(0); + const volume = ref(100); + const showControls = ref(true); + let controlsTimer = null; + const formatTime = (seconds) => { + const minutes = Math.floor(seconds / 60); + const remainingSeconds = Math.floor(seconds % 60); + return `${minutes.toString().padStart(2, "0")}:${remainingSeconds.toString().padStart(2, "0")}`; + }; + const togglePlay = () => { + if (!videoRef.value) return; + if (isPlaying.value) { + videoRef.value.pause(); + } else { + videoRef.value.play(); + } + resetCursorTimer(); + }; + const toggleMute = () => { + if (!videoRef.value) return; + if (volume.value === 0) { + volume.value = 100; + } else { + volume.value = 0; + } + }; + watch(volume, (newVolume) => { + if (videoRef.value) { + videoRef.value.volume = newVolume / 100; + } + }); + const handleProgressChange = (value) => { + if (!videoRef.value || !duration.value) return; + const newTime = value / 100 * duration.value; + videoRef.value.currentTime = newTime; + }; + const handleTimeUpdate = () => { + if (!videoRef.value) return; + currentTime.value = videoRef.value.currentTime; + if (!isDragging.value) { + progress.value = currentTime.value / duration.value * 100; + } + if (videoRef.value.buffered.length > 0) { + bufferedProgress.value = videoRef.value.buffered.end(0) / duration.value * 100; + } + }; + const handleLoadedMetadata = () => { + if (!videoRef.value) return; + duration.value = videoRef.value.duration; + }; + const resetControlsTimer = () => { + if (controlsTimer) { + clearTimeout(controlsTimer); + } + showControls.value = true; + controlsTimer = setTimeout(() => { + if (isPlaying.value) { + showControls.value = false; + } + }, 3e3); + }; + const handleMouseMove = () => { + resetControlsTimer(); + resetCursorTimer(); + }; + onMounted(() => { + document.addEventListener("mousemove", handleMouseMove); + }); + onUnmounted(() => { + document.removeEventListener("mousemove", handleMouseMove); + if (controlsTimer) { + clearTimeout(controlsTimer); + } + if (cursorTimer) { + clearTimeout(cursorTimer); + } + unlockScreenOrientation(); + }); + watch( + () => props.currentMv, + async (newMv) => { + if (newMv) { + await loadMvUrl(newMv); + } + } + ); + const autoPlayBlocked = ref(false); + const playLoading = ref(false); + const loadMvUrl = async (mv) => { + playLoading.value = true; + autoPlayBlocked.value = false; + try { + const res = await getMvUrl(mv.id); + mvUrl.value = res.data.data.url; + await nextTick(); + if (videoRef.value) { + try { + await videoRef.value.play(); + } catch (error) { + console.warn("自动播放失败,可能需要用户交互:", error); + autoPlayBlocked.value = true; + } + } + } catch (error) { + console.error("加载MV地址失败:", error); + } finally { + playLoading.value = false; + } + }; + const handleClose = () => { + emit("update:show", false); + if (store.state.playMusicUrl) { + store.commit("setIsPlay", true); + } + }; + const handleEnded = () => { + if (playMode.value === PLAY_MODE.Single) { + if (props.currentMv) { + loadMvUrl(props.currentMv); + } + } else { + emit("next", (value) => { + nextLoading.value = value; + }); + } + }; + const togglePlayMode = () => { + playMode.value = playMode.value === PLAY_MODE.Auto ? PLAY_MODE.Single : PLAY_MODE.Auto; + showModeHint.value = true; + setTimeout(() => { + showModeHint.value = false; + }, 1500); + }; + const isDragging = ref(false); + const videoContainerRef = ref(); + const isFullscreen = ref(false); + const checkFullscreenAPI = () => { + const doc = document; + return { + requestFullscreen: videoContainerRef.value?.requestFullscreen || videoContainerRef.value?.webkitRequestFullscreen || videoContainerRef.value?.mozRequestFullScreen || videoContainerRef.value?.msRequestFullscreen, + exitFullscreen: doc.exitFullscreen || doc.webkitExitFullscreen || doc.mozCancelFullScreen || doc.msExitFullscreen, + fullscreenElement: doc.fullscreenElement || doc.webkitFullscreenElement || doc.mozFullScreenElement || doc.msFullscreenElement, + fullscreenEnabled: doc.fullscreenEnabled || doc.webkitFullscreenEnabled || doc.mozFullScreenEnabled || doc.msFullscreenEnabled + }; + }; + const lockScreenOrientation = async () => { + try { + if ("orientation" in screen) { + await screen.orientation.lock("landscape"); + } + } catch (error) { + console.warn("无法锁定屏幕方向:", error); + } + }; + const unlockScreenOrientation = () => { + try { + if ("orientation" in screen) { + screen.orientation.unlock(); + } + } catch (error) { + console.warn("无法解锁屏幕方向:", error); + } + }; + const toggleFullscreen = async () => { + const api = checkFullscreenAPI(); + if (!api.fullscreenEnabled) { + console.warn("全屏API不可用"); + return; + } + try { + if (!api.fullscreenElement) { + await videoContainerRef.value?.requestFullscreen(); + isFullscreen.value = true; + if (window.innerWidth <= 768) { + await lockScreenOrientation(); + } + } else { + await document.exitFullscreen(); + isFullscreen.value = false; + if (window.innerWidth <= 768) { + unlockScreenOrientation(); + } + } + } catch (error) { + console.error("切换全屏失败:", error); + } + }; + const handleFullscreenChange = () => { + const api = checkFullscreenAPI(); + isFullscreen.value = !!api.fullscreenElement; + }; + onMounted(() => { + document.addEventListener("fullscreenchange", handleFullscreenChange); + document.addEventListener("webkitfullscreenchange", handleFullscreenChange); + document.addEventListener("mozfullscreenchange", handleFullscreenChange); + document.addEventListener("MSFullscreenChange", handleFullscreenChange); + }); + onUnmounted(() => { + document.removeEventListener("fullscreenchange", handleFullscreenChange); + document.removeEventListener("webkitfullscreenchange", handleFullscreenChange); + document.removeEventListener("mozfullscreenchange", handleFullscreenChange); + document.removeEventListener("MSFullscreenChange", handleFullscreenChange); + }); + const handleKeyPress = (e) => { + if (e.key === "f" || e.key === "F") { + toggleFullscreen(); + } + }; + onMounted(() => { + document.addEventListener("keydown", handleKeyPress); + }); + onUnmounted(() => { + document.removeEventListener("keydown", handleKeyPress); + }); + const showModeHint = ref(false); + const prevLoading = ref(false); + const nextLoading = ref(false); + const handlePrev = () => { + prevLoading.value = true; + emit("prev", (value) => { + prevLoading.value = value; + }); + }; + const handleNext = () => { + nextLoading.value = true; + emit("next", (value) => { + nextLoading.value = value; + }); + }; + const showCursor = ref(true); + let cursorTimer = null; + const resetCursorTimer = () => { + if (cursorTimer) { + clearTimeout(cursorTimer); + } + showCursor.value = true; + if (isPlaying.value && !showControls.value) { + cursorTimer = setTimeout(() => { + showCursor.value = false; + }, 3e3); + } + }; + watch(isPlaying, (newValue) => { + if (!newValue) { + showCursor.value = true; + if (cursorTimer) { + clearTimeout(cursorTimer); + } + } else { + resetCursorTimer(); + } + }); + watch(showControls, (newValue) => { + if (newValue) { + showCursor.value = true; + if (cursorTimer) { + clearTimeout(cursorTimer); + } + } else { + resetCursorTimer(); + } + }); + const isMobile = computed(() => store.state.isMobile); + return (_ctx, _cache) => { + const _component_n_spin = __unplugin_components_0$1; + const _component_n_ellipsis = __unplugin_components_2$1; + const _component_n_drawer = __unplugin_components_2; + return openBlock(), createBlock(_component_n_drawer, { + show: _ctx.show, + height: "100%", + placement: "bottom", + "z-index": 999999999, + to: `#layout-main` + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("div", { + ref_key: "videoContainerRef", + ref: videoContainerRef, + class: normalizeClass(["video-container", { "cursor-hidden": !showCursor.value }]) + }, [ + createBaseVNode("video", { + ref_key: "videoRef", + ref: videoRef, + src: mvUrl.value, + class: "video-player", + onEnded: handleEnded, + onTimeupdate: handleTimeUpdate, + onLoadedmetadata: handleLoadedMetadata, + onPlay: _cache[0] || (_cache[0] = ($event) => isPlaying.value = true), + onPause: _cache[1] || (_cache[1] = ($event) => isPlaying.value = false), + onClick: togglePlay + }, null, 40, _hoisted_2), + autoPlayBlocked.value ? (openBlock(), createElementBlock("div", { + key: 0, + class: "play-hint", + onClick: togglePlay + }, [ + createVNode(unref(Button), { + quaternary: "", + circle: "", + size: "large" + }, { + icon: withCtx(() => [ + createVNode(unref(NIcon), { size: "48" }, { + default: withCtx(() => _cache[4] || (_cache[4] = [ + createBaseVNode("i", { class: "ri-play-circle-line" }, null, -1) + ])), + _: 1 + }) + ]), + _: 1 + }) + ])) : createCommentVNode("", true), + createBaseVNode("div", { + class: normalizeClass(["custom-controls", { "controls-hidden": !showControls.value }]) + }, [ + createBaseVNode("div", _hoisted_3, [ + createVNode(unref(__unplugin_components_0), { + value: progress.value, + "onUpdate:value": [ + _cache[2] || (_cache[2] = ($event) => progress.value = $event), + handleProgressChange + ], + min: 0, + max: 100, + tooltip: false, + step: 0.1 + }, { + rail: withCtx(() => [ + createBaseVNode("div", _hoisted_4, [ + createBaseVNode("div", { + class: "progress-buffer", + style: normalizeStyle({ width: `${bufferedProgress.value}%` }) + }, null, 4) + ]) + ]), + _: 1 + }, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("div", _hoisted_6, [ + !props.noList ? (openBlock(), createBlock(unref(__unplugin_components_3), { + key: 0, + placement: "top" + }, { + trigger: withCtx(() => [ + createVNode(unref(Button), { + quaternary: "", + circle: "", + onClick: handlePrev + }, { + icon: withCtx(() => [ + createVNode(unref(NIcon), { size: "24" }, { + default: withCtx(() => [ + prevLoading.value ? (openBlock(), createBlock(_component_n_spin, { + key: 0, + size: "small" + })) : (openBlock(), createElementBlock("i", _hoisted_7)) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + default: withCtx(() => [ + _cache[5] || (_cache[5] = createTextVNode(" 上一个 ")) + ]), + _: 1 + })) : createCommentVNode("", true), + createVNode(unref(__unplugin_components_3), { placement: "top" }, { + trigger: withCtx(() => [ + createVNode(unref(Button), { + quaternary: "", + circle: "", + onClick: togglePlay + }, { + icon: withCtx(() => [ + createVNode(unref(NIcon), { size: "24" }, { + default: withCtx(() => [ + playLoading.value ? (openBlock(), createBlock(_component_n_spin, { + key: 0, + size: "small" + })) : (openBlock(), createElementBlock("i", { + key: 1, + class: normalizeClass(isPlaying.value ? "ri-pause-line" : "ri-play-line") + }, null, 2)) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + default: withCtx(() => [ + createTextVNode(" " + toDisplayString(isPlaying.value ? "暂停" : "播放"), 1) + ]), + _: 1 + }), + !props.noList ? (openBlock(), createBlock(unref(__unplugin_components_3), { + key: 1, + placement: "top" + }, { + trigger: withCtx(() => [ + createVNode(unref(Button), { + quaternary: "", + circle: "", + onClick: handleNext + }, { + icon: withCtx(() => [ + createVNode(unref(NIcon), { size: "24" }, { + default: withCtx(() => [ + nextLoading.value ? (openBlock(), createBlock(_component_n_spin, { + key: 0, + size: "small" + })) : (openBlock(), createElementBlock("i", _hoisted_8)) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + default: withCtx(() => [ + _cache[6] || (_cache[6] = createTextVNode(" 下一个 ")) + ]), + _: 1 + })) : createCommentVNode("", true), + createBaseVNode("div", _hoisted_9, toDisplayString(formatTime(currentTime.value)) + " / " + toDisplayString(formatTime(duration.value)), 1) + ]), + createBaseVNode("div", _hoisted_10, [ + !isMobile.value ? (openBlock(), createElementBlock("div", _hoisted_11, [ + createVNode(unref(__unplugin_components_3), { placement: "top" }, { + trigger: withCtx(() => [ + createVNode(unref(Button), { + quaternary: "", + circle: "", + onClick: toggleMute + }, { + icon: withCtx(() => [ + createVNode(unref(NIcon), { size: "24" }, { + default: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(volume.value === 0 ? "ri-volume-mute-line" : "ri-volume-up-line") + }, null, 2) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + default: withCtx(() => [ + createTextVNode(" " + toDisplayString(volume.value === 0 ? "取消静音" : "静音"), 1) + ]), + _: 1 + }), + createVNode(unref(__unplugin_components_0), { + value: volume.value, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => volume.value = $event), + min: 0, + max: 100, + tooltip: false, + class: "volume-slider" + }, null, 8, ["value"]) + ])) : createCommentVNode("", true), + !props.noList ? (openBlock(), createBlock(unref(__unplugin_components_3), { + key: 1, + placement: "top" + }, { + trigger: withCtx(() => [ + createVNode(unref(Button), { + quaternary: "", + circle: "", + class: "play-mode-btn", + onClick: togglePlayMode + }, { + icon: withCtx(() => [ + createVNode(unref(NIcon), { size: "24" }, { + default: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass( + playMode.value === "single" ? "ri-repeat-one-line" : "ri-play-list-line" + ) + }, null, 2) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + default: withCtx(() => [ + createTextVNode(" " + toDisplayString(playMode.value === "single" ? "单曲循环" : "列表循环"), 1) + ]), + _: 1 + })) : createCommentVNode("", true), + createVNode(unref(__unplugin_components_3), { placement: "top" }, { + trigger: withCtx(() => [ + createVNode(unref(Button), { + quaternary: "", + circle: "", + onClick: toggleFullscreen + }, { + icon: withCtx(() => [ + createVNode(unref(NIcon), { size: "24" }, { + default: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(isFullscreen.value ? "ri-fullscreen-exit-line" : "ri-fullscreen-line") + }, null, 2) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + default: withCtx(() => [ + createTextVNode(" " + toDisplayString(isFullscreen.value ? "退出全屏" : "全屏"), 1) + ]), + _: 1 + }), + createVNode(unref(__unplugin_components_3), { placement: "top" }, { + trigger: withCtx(() => [ + createVNode(unref(Button), { + quaternary: "", + circle: "", + onClick: handleClose + }, { + icon: withCtx(() => [ + createVNode(unref(NIcon), { size: "24" }, { + default: withCtx(() => _cache[7] || (_cache[7] = [ + createBaseVNode("i", { class: "ri-close-line" }, null, -1) + ])), + _: 1 + }) + ]), + _: 1 + }) + ]), + default: withCtx(() => [ + _cache[8] || (_cache[8] = createTextVNode(" 关闭 ")) + ]), + _: 1 + }) + ]) + ]) + ], 2), + createVNode(Transition, { name: "fade" }, { + default: withCtx(() => [ + showModeHint.value ? (openBlock(), createElementBlock("div", _hoisted_12, [ + createVNode(unref(NIcon), { + size: "48", + class: "mode-icon" + }, { + default: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(playMode.value === "single" ? "ri-repeat-one-line" : "ri-play-list-line") + }, null, 2) + ]), + _: 1 + }), + createBaseVNode("div", _hoisted_13, toDisplayString(playMode.value === "single" ? "单曲循环" : "自动播放下一个"), 1) + ])) : createCommentVNode("", true) + ]), + _: 1 + }) + ], 2), + createBaseVNode("div", { + class: normalizeClass(["mv-detail-title", { "title-hidden": !showControls.value }]) + }, [ + createBaseVNode("div", _hoisted_14, [ + createVNode(_component_n_ellipsis, null, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.currentMv?.name), 1) + ]), + _: 1 + }) + ]) + ], 2) + ]) + ]), + _: 1 + }, 8, ["show"]); + }; + } +}); +const MvPlayer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f4c63e83"]]); +export { + MvPlayer as M, + getAllMv as a, + getTopMv as g +}; diff --git a/out/renderer/assets/MvPlayer-I4IDK1xL.js.gz b/out/renderer/assets/MvPlayer-I4IDK1xL.js.gz new file mode 100644 index 0000000..fa6e166 Binary files /dev/null and b/out/renderer/assets/MvPlayer-I4IDK1xL.js.gz differ diff --git a/out/renderer/assets/PlayBar-BNzUvTGp.js b/out/renderer/assets/PlayBar-BNzUvTGp.js new file mode 100644 index 0000000..a12d40f --- /dev/null +++ b/out/renderer/assets/PlayBar-BNzUvTGp.js @@ -0,0 +1,1620 @@ +import { r as ref, G as computed, D as useMemo, $ as provide, d as defineComponent, as as inject, at as useSsrAdapter, o as onMounted, aq as onActivated, au as onDeactivated, A as toRef, av as depx, aw as pxfy, l as h, ax as mergeProps, ay as VResizeObserver, az as XScrollbar, aA as store, ae as audioService, aB as getTextColors, E as watch, M as nextTick, R as isElectron, a1 as onUnmounted, aC as getHoverBackgroundColor, aD as animateGradient, a as onBeforeUnmount, j as openBlock, O as createBlock, f as withCtx, b as createBaseVNode, a2 as normalizeStyle, u as unref, e as createVNode, a7 as getImgUrl, t as toDisplayString, c as createElementBlock, a3 as Fragment, a4 as renderList, n as normalizeClass, T as createCommentVNode, aE as useDebounceFn, _ as _export_sfc, g as useStore, aF as useThrottleFn, aG as useTemplateRef, i as isRef, k as createTextVNode, ac as isMobile, s as setAnimationClass, aH as secondToMinute } from "./index-DKaFsuse.js"; +import { S as SongItem } from "./SongItem-CoswpGn6.js"; +import { N as NImage, _ as __unplugin_components_3, a as __unplugin_components_5 } from "./Image-DXClIklC.js"; +import { _ as __unplugin_components_1 } from "./Layout-CvYBg1vI.js"; +import { _ as __unplugin_components_2 } from "./Drawer-BEJ8Ydua.js"; +import { c as cssrAnchorMetaName, a as c, b as beforeNextFrameOnce } from "./use-locale-DLWAOXez.js"; +import { _ as __unplugin_components_0 } from "./Slider-BA6NituQ.js"; +import { _ as __unplugin_components_2$1 } from "./Ellipsis-D4R5dIX2.js"; +function lowBit(n) { + return n & -n; +} +class FinweckTree { + /** + * @param l length of the array + * @param min min value of the array + */ + constructor(l, min) { + this.l = l; + this.min = min; + const ft = new Array(l + 1); + for (let i = 0; i < l + 1; ++i) { + ft[i] = 0; + } + this.ft = ft; + } + /** + * Add arr[i] by n, start from 0 + * @param i the index of the element to be added + * @param n the value to be added + */ + add(i, n) { + if (n === 0) + return; + const { l, ft } = this; + i += 1; + while (i <= l) { + ft[i] += n; + i += lowBit(i); + } + } + /** + * Get the value of index i + * @param i index + * @returns value of the index + */ + get(i) { + return this.sum(i + 1) - this.sum(i); + } + /** + * Get the sum of first i elements + * @param i count of head elements to be added + * @returns the sum of first i elements + */ + sum(i) { + if (i === void 0) + i = this.l; + if (i <= 0) + return 0; + const { ft, min, l } = this; + if (i > l) + throw new Error("[FinweckTree.sum]: `i` is larger than length."); + let ret = i * min; + while (i > 0) { + ret += ft[i]; + i -= lowBit(i); + } + return ret; + } + /** + * Get the largest count of head elements whose sum are <= threshold + * @param threshold + * @returns the largest count of head elements whose sum are <= threshold + */ + getBound(threshold) { + let l = 0; + let r = this.l; + while (r > l) { + const m = Math.floor((l + r) / 2); + const sumM = this.sum(m); + if (sumM > threshold) { + r = m; + continue; + } else if (sumM < threshold) { + if (l === m) { + if (this.sum(l + 1) <= threshold) + return l + 1; + return m; + } + l = m; + } else { + return m; + } + } + return l; + } +} +let maybeTouch; +function ensureMaybeTouch() { + if (typeof document === "undefined") + return false; + if (maybeTouch === void 0) { + if ("matchMedia" in window) { + maybeTouch = window.matchMedia("(pointer:coarse)").matches; + } else { + maybeTouch = false; + } + } + return maybeTouch; +} +let wheelScale; +function ensureWheelScale() { + if (typeof document === "undefined") + return 1; + if (wheelScale === void 0) { + wheelScale = "chrome" in window ? window.devicePixelRatio : 1; + } + return wheelScale; +} +const xScrollInjextionKey = "VVirtualListXScroll"; +function setupXScroll({ columnsRef, renderColRef, renderItemWithColsRef }) { + const listWidthRef = ref(0); + const scrollLeftRef = ref(0); + const xFinweckTreeRef = computed(() => { + const columns = columnsRef.value; + if (columns.length === 0) { + return null; + } + const ft = new FinweckTree(columns.length, 0); + columns.forEach((column, index) => { + ft.add(index, column.width); + }); + return ft; + }); + const startIndexRef = useMemo(() => { + const xFinweckTree = xFinweckTreeRef.value; + if (xFinweckTree !== null) { + return Math.max(xFinweckTree.getBound(scrollLeftRef.value) - 1, 0); + } else { + return 0; + } + }); + const getLeft = (index) => { + const xFinweckTree = xFinweckTreeRef.value; + if (xFinweckTree !== null) { + return xFinweckTree.sum(index); + } else { + return 0; + } + }; + const endIndexRef = useMemo(() => { + const xFinweckTree = xFinweckTreeRef.value; + if (xFinweckTree !== null) { + return Math.min(xFinweckTree.getBound(scrollLeftRef.value + listWidthRef.value) + 1, columnsRef.value.length - 1); + } else { + return 0; + } + }); + provide(xScrollInjextionKey, { + startIndexRef, + endIndexRef, + columnsRef, + renderColRef, + renderItemWithColsRef, + getLeft + }); + return { + listWidthRef, + scrollLeftRef + }; +} +const VirtualListRow = defineComponent({ + name: "VirtualListRow", + props: { + index: { type: Number, required: true }, + item: { + type: Object, + required: true + } + }, + setup() { + const { startIndexRef, endIndexRef, columnsRef, getLeft, renderColRef, renderItemWithColsRef } = ( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + inject(xScrollInjextionKey) + ); + return { + startIndex: startIndexRef, + endIndex: endIndexRef, + columns: columnsRef, + renderCol: renderColRef, + renderItemWithCols: renderItemWithColsRef, + getLeft + }; + }, + render() { + const { startIndex, endIndex, columns, renderCol, renderItemWithCols, getLeft, item } = this; + if (renderItemWithCols != null) { + return renderItemWithCols({ + itemIndex: this.index, + startColIndex: startIndex, + endColIndex: endIndex, + allColumns: columns, + item, + getLeft + }); + } + if (renderCol != null) { + const items = []; + for (let i = startIndex; i <= endIndex; ++i) { + const column = columns[i]; + items.push(renderCol({ column, left: getLeft(i), item })); + } + return items; + } + return null; + } +}); +const styles = c(".v-vl", { + maxHeight: "inherit", + height: "100%", + overflow: "auto", + minWidth: "1px" + // a zero width container won't be scrollable +}, [ + c("&:not(.v-vl--show-scrollbar)", { + scrollbarWidth: "none" + }, [ + c("&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb", { + width: 0, + height: 0, + display: "none" + }) + ]) +]); +const VVirtualList = defineComponent({ + name: "VirtualList", + inheritAttrs: false, + props: { + showScrollbar: { + type: Boolean, + default: true + }, + columns: { + type: Array, + default: () => [] + }, + renderCol: Function, + renderItemWithCols: Function, + items: { + type: Array, + default: () => [] + }, + // it is suppose to be the min height + itemSize: { + type: Number, + required: true + }, + itemResizable: Boolean, + itemsStyle: [String, Object], + visibleItemsTag: { + type: [String, Object], + default: "div" + }, + visibleItemsProps: Object, + ignoreItemResize: Boolean, + onScroll: Function, + onWheel: Function, + onResize: Function, + defaultScrollKey: [Number, String], + defaultScrollIndex: Number, + keyField: { + type: String, + default: "key" + }, + // Whether it is a good API? + // ResizeObserver + footer & header is not enough. + // Too complex for simple case + paddingTop: { + type: [Number, String], + default: 0 + }, + paddingBottom: { + type: [Number, String], + default: 0 + } + }, + setup(props) { + const ssrAdapter = useSsrAdapter(); + styles.mount({ + id: "vueuc/virtual-list", + head: true, + anchorMetaName: cssrAnchorMetaName, + ssr: ssrAdapter + }); + onMounted(() => { + const { defaultScrollIndex, defaultScrollKey } = props; + if (defaultScrollIndex !== void 0 && defaultScrollIndex !== null) { + scrollTo({ index: defaultScrollIndex }); + } else if (defaultScrollKey !== void 0 && defaultScrollKey !== null) { + scrollTo({ key: defaultScrollKey }); + } + }); + let isDeactivated = false; + let activateStateInitialized = false; + onActivated(() => { + isDeactivated = false; + if (!activateStateInitialized) { + activateStateInitialized = true; + return; + } + scrollTo({ top: scrollTopRef.value, left: scrollLeftRef.value }); + }); + onDeactivated(() => { + isDeactivated = true; + if (!activateStateInitialized) { + activateStateInitialized = true; + } + }); + const totalWidthRef = useMemo(() => { + if (props.renderCol == null && props.renderItemWithCols == null) { + return void 0; + } + if (props.columns.length === 0) + return void 0; + let width = 0; + props.columns.forEach((column) => { + width += column.width; + }); + return width; + }); + const keyIndexMapRef = computed(() => { + const map = /* @__PURE__ */ new Map(); + const { keyField } = props; + props.items.forEach((item, index) => { + map.set(item[keyField], index); + }); + return map; + }); + const { scrollLeftRef, listWidthRef } = setupXScroll({ + columnsRef: toRef(props, "columns"), + renderColRef: toRef(props, "renderCol"), + renderItemWithColsRef: toRef(props, "renderItemWithCols") + }); + const listElRef = ref(null); + const listHeightRef = ref(void 0); + const keyToHeightOffset = /* @__PURE__ */ new Map(); + const finweckTreeRef = computed(() => { + const { items, itemSize, keyField } = props; + const ft = new FinweckTree(items.length, itemSize); + items.forEach((item, index) => { + const key = item[keyField]; + const heightOffset = keyToHeightOffset.get(key); + if (heightOffset !== void 0) { + ft.add(index, heightOffset); + } + }); + return ft; + }); + const finweckTreeUpdateTrigger = ref(0); + const scrollTopRef = ref(0); + const startIndexRef = useMemo(() => { + return Math.max(finweckTreeRef.value.getBound(scrollTopRef.value - depx(props.paddingTop)) - 1, 0); + }); + const viewportItemsRef = computed(() => { + const { value: listHeight } = listHeightRef; + if (listHeight === void 0) + return []; + const { items, itemSize } = props; + const startIndex = startIndexRef.value; + const endIndex = Math.min(startIndex + Math.ceil(listHeight / itemSize + 1), items.length - 1); + const viewportItems = []; + for (let i = startIndex; i <= endIndex; ++i) { + viewportItems.push(items[i]); + } + return viewportItems; + }); + const scrollTo = (options, y) => { + if (typeof options === "number") { + scrollToPosition(options, y, "auto"); + return; + } + const { left, top, index, key, position, behavior, debounce = true } = options; + if (left !== void 0 || top !== void 0) { + scrollToPosition(left, top, behavior); + } else if (index !== void 0) { + scrollToIndex(index, behavior, debounce); + } else if (key !== void 0) { + const toIndex = keyIndexMapRef.value.get(key); + if (toIndex !== void 0) + scrollToIndex(toIndex, behavior, debounce); + } else if (position === "bottom") { + scrollToPosition(0, Number.MAX_SAFE_INTEGER, behavior); + } else if (position === "top") { + scrollToPosition(0, 0, behavior); + } + }; + let anchorIndex; + let anchorTimerId = null; + function scrollToIndex(index, behavior, debounce) { + const { value: ft } = finweckTreeRef; + const targetTop = ft.sum(index) + depx(props.paddingTop); + if (!debounce) { + listElRef.value.scrollTo({ + left: 0, + top: targetTop, + behavior + }); + } else { + anchorIndex = index; + if (anchorTimerId !== null) { + window.clearTimeout(anchorTimerId); + } + anchorTimerId = window.setTimeout(() => { + anchorIndex = void 0; + anchorTimerId = null; + }, 16); + const { scrollTop, offsetHeight } = listElRef.value; + if (targetTop > scrollTop) { + const itemSize = ft.get(index); + if (targetTop + itemSize <= scrollTop + offsetHeight) ; + else { + listElRef.value.scrollTo({ + left: 0, + top: targetTop + itemSize - offsetHeight, + behavior + }); + } + } else { + listElRef.value.scrollTo({ + left: 0, + top: targetTop, + behavior + }); + } + } + } + function scrollToPosition(left, top, behavior) { + listElRef.value.scrollTo({ + left, + top, + behavior + }); + } + function handleItemResize(key, entry) { + var _a, _b, _c; + if (isDeactivated) + return; + if (props.ignoreItemResize) + return; + if (isHideByVShow(entry.target)) + return; + const { value: ft } = finweckTreeRef; + const index = keyIndexMapRef.value.get(key); + const previousHeight = ft.get(index); + const height = (_c = (_b = (_a = entry.borderBoxSize) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.blockSize) !== null && _c !== void 0 ? _c : entry.contentRect.height; + if (height === previousHeight) + return; + const offset = height - props.itemSize; + if (offset === 0) { + keyToHeightOffset.delete(key); + } else { + keyToHeightOffset.set(key, height - props.itemSize); + } + const delta = height - previousHeight; + if (delta === 0) + return; + ft.add(index, delta); + const listEl = listElRef.value; + if (listEl != null) { + if (anchorIndex === void 0) { + const previousHeightSum = ft.sum(index); + if (listEl.scrollTop > previousHeightSum) { + listEl.scrollBy(0, delta); + } + } else { + if (index < anchorIndex) { + listEl.scrollBy(0, delta); + } else if (index === anchorIndex) { + const previousHeightSum = ft.sum(index); + if (height + previousHeightSum > // Note, listEl shouldn't have border, nor offsetHeight won't be + // correct + listEl.scrollTop + listEl.offsetHeight) { + listEl.scrollBy(0, delta); + } + } + } + syncViewport(); + } + finweckTreeUpdateTrigger.value++; + } + const mayUseWheel = !ensureMaybeTouch(); + let wheelCatched = false; + function handleListScroll(e) { + var _a; + (_a = props.onScroll) === null || _a === void 0 ? void 0 : _a.call(props, e); + if (!mayUseWheel || !wheelCatched) { + syncViewport(); + } + } + function handleListWheel(e) { + var _a; + (_a = props.onWheel) === null || _a === void 0 ? void 0 : _a.call(props, e); + if (mayUseWheel) { + const listEl = listElRef.value; + if (listEl != null) { + if (e.deltaX === 0) { + if (listEl.scrollTop === 0 && e.deltaY <= 0) { + return; + } + if (listEl.scrollTop + listEl.offsetHeight >= listEl.scrollHeight && e.deltaY >= 0) { + return; + } + } + e.preventDefault(); + listEl.scrollTop += e.deltaY / ensureWheelScale(); + listEl.scrollLeft += e.deltaX / ensureWheelScale(); + syncViewport(); + wheelCatched = true; + beforeNextFrameOnce(() => { + wheelCatched = false; + }); + } + } + } + function handleListResize(entry) { + if (isDeactivated) + return; + if (isHideByVShow(entry.target)) + return; + if (props.renderCol == null && props.renderItemWithCols == null) { + if (entry.contentRect.height === listHeightRef.value) + return; + } else { + if (entry.contentRect.height === listHeightRef.value && entry.contentRect.width === listWidthRef.value) { + return; + } + } + listHeightRef.value = entry.contentRect.height; + listWidthRef.value = entry.contentRect.width; + const { onResize } = props; + if (onResize !== void 0) + onResize(entry); + } + function syncViewport() { + const { value: listEl } = listElRef; + if (listEl == null) + return; + scrollTopRef.value = listEl.scrollTop; + scrollLeftRef.value = listEl.scrollLeft; + } + function isHideByVShow(el) { + let cursor = el; + while (cursor !== null) { + if (cursor.style.display === "none") + return true; + cursor = cursor.parentElement; + } + return false; + } + return { + listHeight: listHeightRef, + listStyle: { + overflow: "auto" + }, + keyToIndex: keyIndexMapRef, + itemsStyle: computed(() => { + const { itemResizable } = props; + const height = pxfy(finweckTreeRef.value.sum()); + finweckTreeUpdateTrigger.value; + return [ + props.itemsStyle, + { + boxSizing: "content-box", + width: pxfy(totalWidthRef.value), + height: itemResizable ? "" : height, + minHeight: itemResizable ? height : "", + paddingTop: pxfy(props.paddingTop), + paddingBottom: pxfy(props.paddingBottom) + } + ]; + }), + visibleItemsStyle: computed(() => { + finweckTreeUpdateTrigger.value; + return { + transform: `translateY(${pxfy(finweckTreeRef.value.sum(startIndexRef.value))})` + }; + }), + viewportItems: viewportItemsRef, + listElRef, + itemsElRef: ref(null), + scrollTo, + handleListResize, + handleListScroll, + handleListWheel, + handleItemResize + }; + }, + render() { + const { itemResizable, keyField, keyToIndex, visibleItemsTag } = this; + return h(VResizeObserver, { + onResize: this.handleListResize + }, { + default: () => { + var _a, _b; + return h("div", mergeProps(this.$attrs, { + class: ["v-vl", this.showScrollbar && "v-vl--show-scrollbar"], + onScroll: this.handleListScroll, + onWheel: this.handleListWheel, + ref: "listElRef" + }), [ + this.items.length !== 0 ? h("div", { + ref: "itemsElRef", + class: "v-vl-items", + style: this.itemsStyle + }, [ + h(visibleItemsTag, Object.assign({ + class: "v-vl-visible-items", + style: this.visibleItemsStyle + }, this.visibleItemsProps), { + default: () => { + const { renderCol, renderItemWithCols } = this; + return this.viewportItems.map((item) => { + const key = item[keyField]; + const index = keyToIndex.get(key); + const renderedCols = renderCol != null ? h(VirtualListRow, { + index, + item + }) : void 0; + const renderedItemWithCols = renderItemWithCols != null ? h(VirtualListRow, { + index, + item + }) : void 0; + const itemVNode = this.$slots.default({ + item, + renderedCols, + renderedItemWithCols, + index + })[0]; + if (itemResizable) { + return h(VResizeObserver, { + key, + onResize: (entry) => this.handleItemResize(key, entry) + }, { + default: () => itemVNode + }); + } + itemVNode.key = key; + return itemVNode; + }); + } + }) + ]) : (_b = (_a = this.$slots).empty) === null || _b === void 0 ? void 0 : _b.call(_a) + ]); + } + }); + } +}); +const virtualListProps = { + scrollbarProps: Object, + items: { + type: Array, + default: () => [] + }, + itemSize: { + type: Number, + required: true + }, + itemResizable: Boolean, + itemsStyle: [String, Object], + visibleItemsTag: { + type: [String, Object], + default: "div" + }, + visibleItemsProps: Object, + ignoreItemResize: Boolean, + onScroll: Function, + onWheel: Function, + onResize: Function, + defaultScrollKey: [Number, String], + defaultScrollIndex: Number, + keyField: { + type: String, + default: "key" + }, + paddingTop: { + type: [Number, String], + default: 0 + }, + paddingBottom: { + type: [Number, String], + default: 0 + } +}; +const __unplugin_components_4 = defineComponent({ + name: "VirtualList", + props: virtualListProps, + setup(props) { + const scrollbarInstRef = ref(null); + const virtualListInstRef = ref(null); + function syncScrollbar() { + const { + value: scrollbarInst + } = scrollbarInstRef; + if (scrollbarInst) scrollbarInst.sync(); + } + function handleScroll(e) { + var _a; + syncScrollbar(); + (_a = props.onScroll) === null || _a === void 0 ? void 0 : _a.call(props, e); + } + function handleResize(e) { + var _a; + syncScrollbar(); + (_a = props.onResize) === null || _a === void 0 ? void 0 : _a.call(props, e); + } + function handleWheel(e) { + var _a; + (_a = props.onWheel) === null || _a === void 0 ? void 0 : _a.call(props, e); + } + function scrollTo(options, y) { + var _a, _b; + if (typeof options === "number") { + (_a = virtualListInstRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo(options, y !== null && y !== void 0 ? y : 0); + } else { + (_b = virtualListInstRef.value) === null || _b === void 0 ? void 0 : _b.scrollTo(options); + } + } + function getScrollContainer() { + var _a; + return (_a = virtualListInstRef.value) === null || _a === void 0 ? void 0 : _a.listElRef; + } + function getScrollContent() { + var _a; + return (_a = virtualListInstRef.value) === null || _a === void 0 ? void 0 : _a.itemsElRef; + } + return { + scrollTo, + scrollbarInstRef, + virtualListInstRef, + getScrollContainer, + getScrollContent, + handleScroll, + handleResize, + handleWheel + }; + }, + render() { + return h(XScrollbar, Object.assign({}, this.scrollbarProps, { + ref: "scrollbarInstRef", + container: this.getScrollContainer, + content: this.getScrollContent + }), { + default: () => { + return h(VVirtualList, { + ref: "virtualListInstRef", + showScrollbar: false, + items: this.items, + itemSize: this.itemSize, + itemResizable: this.itemResizable, + itemsStyle: this.itemsStyle, + visibleItemsTag: this.visibleItemsTag, + visibleItemsProps: this.visibleItemsProps, + ignoreItemResize: this.ignoreItemResize, + keyField: this.keyField, + defaultScrollKey: this.defaultScrollKey, + defaultScrollIndex: this.defaultScrollIndex, + paddingTop: this.paddingTop, + paddingBottom: this.paddingBottom, + onScroll: this.handleScroll, + onResize: this.handleResize, + onWheel: this.handleWheel + }, { + default: ({ + item, + index + }) => { + var _a, _b; + return (_b = (_a = this.$slots).default) === null || _b === void 0 ? void 0 : _b.call(_a, { + item, + index + }); + } + }); + } + }); + } +}); +const windowData = window; +const lrcArray = ref([]); +const lrcTimeArray = ref([]); +const nowTime = ref(0); +const allTime = ref(0); +const nowIndex = ref(0); +const correctionTime = ref(0.4); +const currentLrcProgress = ref(0); +const playMusic = computed(() => store.state.playMusic); +const sound = ref(audioService.getCurrentSound()); +const isLyricWindowOpen = ref(false); +const textColors = ref(getTextColors()); +document.onkeyup = (e) => { + const target = e.target; + if (target.tagName === "INPUT" || target.tagName === "TEXTAREA") { + return; + } + switch (e.code) { + case "Space": + if (store.state.play) { + store.commit("setPlayMusic", false); + audioService.getCurrentSound()?.pause(); + } else { + store.commit("setPlayMusic", true); + audioService.getCurrentSound()?.play(); + } + break; + } +}; +watch( + () => store.state.playMusicUrl, + (newVal) => { + if (newVal) { + audioService.play(newVal); + sound.value = audioService.getCurrentSound(); + audioServiceOn(audioService); + } + } +); +watch( + () => store.state.playMusic, + () => { + nextTick(async () => { + lrcArray.value = playMusic.value.lyric?.lrcArray || []; + lrcTimeArray.value = playMusic.value.lyric?.lrcTimeArray || []; + if (isElectron && isLyricWindowOpen.value && lrcArray.value.length > 0) { + sendLyricToWin(); + } + }); + }, + { + deep: true, + immediate: true + } +); +const audioServiceOn = (audio) => { + let interval = null; + audio.onPlay(() => { + store.commit("setPlayMusic", true); + interval = setInterval(() => { + nowTime.value = sound.value?.seek(); + allTime.value = sound.value?.duration(); + const newIndex = getLrcIndex(nowTime.value); + if (newIndex !== nowIndex.value) { + nowIndex.value = newIndex; + currentLrcProgress.value = 0; + if (isElectron && isLyricWindowOpen.value) { + sendLyricToWin(); + } + } + if (isElectron && isLyricWindowOpen.value) { + sendLyricToWin(); + } + }, 50); + }); + audio.onPause(() => { + store.commit("setPlayMusic", false); + clearInterval(interval); + if (isElectron && isLyricWindowOpen.value) { + sendLyricToWin(); + } + }); + audio.onEnd(() => { + if (store.state.playMode === 1) { + audio.getCurrentSound()?.play(); + } else if (store.state.playMode === 2) { + const { playList } = store.state; + if (playList.length <= 1) { + audio.getCurrentSound()?.play(); + } else { + let randomIndex; + do { + randomIndex = Math.floor(Math.random() * playList.length); + } while (randomIndex === store.state.playListIndex && playList.length > 1); + store.state.playListIndex = randomIndex; + store.commit("setPlay", playList[randomIndex]); + } + } else { + store.commit("nextPlay"); + } + }); +}; +const isPlaying = computed(() => store.state.play); +const isCurrentLrc = (index, time) => { + const currentTime = lrcTimeArray.value[index]; + const nextTime = lrcTimeArray.value[index + 1]; + const nowTime2 = time + correctionTime.value; + const isTrue = nowTime2 > currentTime && nowTime2 < nextTime; + return isTrue; +}; +const getLrcIndex = (time) => { + for (let i = 0; i < lrcTimeArray.value.length; i++) { + if (isCurrentLrc(i, time)) { + nowIndex.value = i; + return i; + } + } + return nowIndex.value; +}; +const currentLrcTiming = computed(() => { + const start = lrcTimeArray.value[nowIndex.value] || 0; + const end = lrcTimeArray.value[nowIndex.value + 1] || start + 1; + return { start, end }; +}); +const getLrcStyle = (index) => { + if (index === nowIndex.value) { + return { + backgroundImage: `linear-gradient(to right, #ffffff ${currentLrcProgress.value}%, #ffffff8a ${currentLrcProgress.value}%)`, + backgroundClip: "text", + WebkitBackgroundClip: "text", + color: "transparent", + transition: "background-image 0.1s linear" + }; + } + return {}; +}; +const useLyricProgress = () => { + let animationFrameId = null; + const updateProgress = () => { + if (!isPlaying.value) return; + const currentSound = sound.value; + if (!currentSound) return; + const { start, end } = currentLrcTiming.value; + const duration = end - start; + const elapsed = currentSound.seek() - start; + currentLrcProgress.value = Math.min(Math.max(elapsed / duration * 100, 0), 100); + animationFrameId = requestAnimationFrame(updateProgress); + }; + const startProgressAnimation = () => { + if (!animationFrameId && isPlaying.value) { + updateProgress(); + } + }; + const stopProgressAnimation = () => { + if (animationFrameId) { + cancelAnimationFrame(animationFrameId); + animationFrameId = null; + } + }; + watch(isPlaying, (newIsPlaying) => { + if (newIsPlaying) { + startProgressAnimation(); + } else { + stopProgressAnimation(); + } + }); + onMounted(() => { + if (isPlaying.value) { + startProgressAnimation(); + } + }); + onUnmounted(() => { + stopProgressAnimation(); + }); + return { + currentLrcProgress, + getLrcStyle + }; +}; +const setAudioTime = (index) => { + const currentSound = sound.value; + if (!currentSound) return; + currentSound.seek(lrcTimeArray.value[index]); + currentSound.play(); +}; +watch( + () => lrcArray.value, + (newLrcArray) => { + if (newLrcArray.length > 0 && isElectron && isLyricWindowOpen.value) { + sendLyricToWin(); + } + } +); +const sendLyricToWin = () => { + if (!isElectron || !isLyricWindowOpen.value) { + console.log("Cannot send lyric: electron or lyric window not available"); + return; + } + try { + if (lrcArray.value.length > 0) { + const nowIndex2 = getLrcIndex(nowTime.value); + const updateData = { + type: "full", + nowIndex: nowIndex2, + nowTime: nowTime.value, + startCurrentTime: lrcTimeArray.value[nowIndex2], + nextTime: lrcTimeArray.value[nowIndex2 + 1], + isPlay: isPlaying.value, + lrcArray: lrcArray.value, + lrcTimeArray: lrcTimeArray.value, + allTime: allTime.value, + playMusic: playMusic.value + }; + window.api.sendLyric(JSON.stringify(updateData)); + } + } catch (error) { + console.error("Error sending lyric update:", error); + } +}; +const openLyric = () => { + if (!isElectron) return; + console.log("Opening lyric window with current song:", playMusic.value?.name); + isLyricWindowOpen.value = !isLyricWindowOpen.value; + if (isLyricWindowOpen.value) { + setTimeout(() => { + window.api.openLyric(); + sendLyricToWin(); + }, 500); + sendLyricToWin(); + } else { + closeLyric(); + } +}; +const closeLyric = () => { + if (!isElectron) return; + windowData.electron.ipcRenderer.send("close-lyric"); +}; +if (isElectron) { + windowData.electron.ipcRenderer.on("lyric-control-back", (_, command) => { + switch (command) { + case "playpause": + if (store.state.play) { + store.commit("setPlayMusic", false); + audioService.getCurrentSound()?.pause(); + } else { + store.commit("setPlayMusic", true); + audioService.getCurrentSound()?.play(); + } + break; + case "prev": + store.commit("prevPlay"); + break; + case "next": + store.commit("nextPlay"); + break; + case "close": + closeLyric(); + break; + default: + console.log("Unknown command:", command); + break; + } + }); +} +const _hoisted_1$1 = { id: "drawer-target" }; +const _hoisted_2$1 = { class: "music-content-name" }; +const _hoisted_3$1 = { class: "music-content-singer" }; +const _hoisted_4$1 = { class: "music-content" }; +const _hoisted_5$1 = ["id", "onClick"]; +const _hoisted_6$1 = { class: "music-lrc-text-tr" }; +const _hoisted_7$1 = { + key: 0, + class: "music-lrc-text mt-40" +}; +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "MusicFull", + props: { + musicFull: { + type: Boolean, + default: false + }, + background: { + type: String, + default: "" + } + }, + setup(__props, { expose: __expose }) { + const lrcSider = ref(null); + const isMouse = ref(false); + const lrcContainer = ref(null); + const currentBackground = ref(""); + const animationFrame = ref(null); + const isDark = ref(false); + const props = __props; + const lrcScroll = (behavior = "smooth") => { + const nowEl = document.querySelector(`#music-lrc-text-${nowIndex.value}`); + if (props.musicFull && !isMouse.value && nowEl && lrcContainer.value) { + const containerRect = lrcContainer.value.getBoundingClientRect(); + const nowElRect = nowEl.getBoundingClientRect(); + const relativeTop = nowElRect.top - containerRect.top; + const scrollTop = relativeTop - lrcSider.value.$el.getBoundingClientRect().height / 2; + lrcSider.value.scrollTo({ top: scrollTop, behavior }); + } + }; + const debouncedLrcScroll = useDebounceFn(lrcScroll, 200); + const mouseOverLayout = () => { + isMouse.value = true; + }; + const mouseLeaveLayout = () => { + setTimeout(() => { + isMouse.value = false; + lrcScroll(); + }, 2e3); + }; + watch(nowIndex, () => { + debouncedLrcScroll(); + }); + watch( + () => props.musicFull, + () => { + if (props.musicFull) { + nextTick(() => { + lrcScroll("instant"); + }); + } + } + ); + watch( + () => props.background, + (newBg) => { + if (!newBg) { + textColors.value = getTextColors(); + document.documentElement.style.setProperty( + "--hover-bg-color", + getHoverBackgroundColor(false) + ); + document.documentElement.style.setProperty("--text-color-primary", textColors.value.primary); + document.documentElement.style.setProperty("--text-color-active", textColors.value.active); + return; + } + if (currentBackground.value) { + if (animationFrame.value) { + cancelAnimationFrame(animationFrame.value); + } + animationFrame.value = animateGradient(currentBackground.value, newBg, (gradient) => { + currentBackground.value = gradient; + }); + } else { + currentBackground.value = newBg; + } + textColors.value = getTextColors(newBg); + isDark.value = textColors.value.active === "#000000"; + document.documentElement.style.setProperty( + "--hover-bg-color", + getHoverBackgroundColor(isDark.value) + ); + document.documentElement.style.setProperty("--text-color-primary", textColors.value.primary); + document.documentElement.style.setProperty("--text-color-active", textColors.value.active); + }, + { immediate: true } + ); + const { getLrcStyle: originalLrcStyle } = useLyricProgress(); + const getLrcStyle2 = (index) => { + const colors = textColors.value || getTextColors; + const originalStyle = originalLrcStyle(index); + if (index === nowIndex.value) { + return { + ...originalStyle, + backgroundImage: originalStyle.backgroundImage?.replace(/#ffffff/g, colors.active).replace(/#ffffff8a/g, `${colors.primary}`), + backgroundClip: "text", + WebkitBackgroundClip: "text", + color: "transparent" + }; + } + return { + color: colors.primary + }; + }; + onBeforeUnmount(() => { + if (animationFrame.value) { + cancelAnimationFrame(animationFrame.value); + } + }); + __expose({ + lrcScroll + }); + return (_ctx, _cache) => { + const _component_n_image = NImage; + const _component_n_layout = __unplugin_components_1; + const _component_n_drawer = __unplugin_components_2; + return openBlock(), createBlock(_component_n_drawer, { + show: __props.musicFull, + height: "100%", + placement: "bottom", + style: normalizeStyle({ background: currentBackground.value || __props.background }), + to: `#layout-main` + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1$1, [ + _cache[1] || (_cache[1] = createBaseVNode("div", { class: "drawer-back" }, null, -1)), + createBaseVNode("div", { + class: "music-img", + style: normalizeStyle({ color: unref(textColors).theme === "dark" ? "#000000" : "#ffffff" }) + }, [ + createVNode(_component_n_image, { + ref: "PicImgRef", + src: unref(getImgUrl)(unref(playMusic)?.picUrl, "500y500"), + class: "img", + lazy: "", + "preview-disabled": "" + }, null, 8, ["src"]), + createBaseVNode("div", null, [ + createBaseVNode("div", _hoisted_2$1, toDisplayString(unref(playMusic).name), 1), + createBaseVNode("div", _hoisted_3$1, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(playMusic).ar || unref(playMusic).song.artists, (item, index) => { + return openBlock(), createElementBlock("span", { key: index }, toDisplayString(item.name) + toDisplayString(index < (unref(playMusic).ar || unref(playMusic).song.artists).length - 1 ? " / " : ""), 1); + }), 128)) + ]) + ]) + ], 4), + createBaseVNode("div", _hoisted_4$1, [ + createVNode(_component_n_layout, { + ref_key: "lrcSider", + ref: lrcSider, + class: "music-lrc", + style: { "height": "60vh" }, + "native-scrollbar": false, + onMouseover: mouseOverLayout, + onMouseleave: mouseLeaveLayout + }, { + default: withCtx(() => [ + createBaseVNode("div", { + ref_key: "lrcContainer", + ref: lrcContainer + }, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(lrcArray), (item, index) => { + return openBlock(), createElementBlock("div", { + id: `music-lrc-text-${index}`, + key: index, + class: normalizeClass(["music-lrc-text", { "now-text": index === unref(nowIndex), "hover-text": item.text }]), + onClick: ($event) => unref(setAudioTime)(index) + }, [ + createBaseVNode("span", { + style: normalizeStyle(getLrcStyle2(index)) + }, toDisplayString(item.text), 5), + createBaseVNode("div", _hoisted_6$1, toDisplayString(item.trText), 1) + ], 10, _hoisted_5$1); + }), 128)), + !unref(lrcArray).length ? (openBlock(), createElementBlock("div", _hoisted_7$1, _cache[0] || (_cache[0] = [ + createBaseVNode("span", null, "暂无歌词, 请欣赏", -1) + ]))) : createCommentVNode("", true) + ], 512) + ]), + _: 1 + }, 512) + ]) + ]) + ]), + _: 1 + }, 8, ["show", "style"]); + }; + } +}); +const MusicFull = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-03432cea"]]); +const _hoisted_1 = { class: "music-time custom-slider" }; +const _hoisted_2 = { class: "hover-arrow" }; +const _hoisted_3 = { class: "hover-content" }; +const _hoisted_4 = { class: "hover-text" }; +const _hoisted_5 = { class: "music-content" }; +const _hoisted_6 = { class: "music-content-title" }; +const _hoisted_7 = { class: "music-content-name" }; +const _hoisted_8 = { class: "music-buttons" }; +const _hoisted_9 = { class: "audio-button" }; +const _hoisted_10 = { class: "audio-volume custom-slider" }; +const _hoisted_11 = { class: "volume-slider" }; +const _hoisted_12 = { class: "music-play-list" }; +const _hoisted_13 = { class: "music-play-list-content" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "PlayBar", + setup(__props) { + const store2 = useStore(); + const playMusic2 = computed(() => store2.state.playMusic); + const play = computed(() => store2.state.play); + const playList = computed(() => store2.state.playList); + const background = ref("#000"); + watch( + () => store2.state.playMusic, + async () => { + background.value = playMusic2.value.backgroundColor; + }, + { immediate: true, deep: true } + ); + const throttledSeek = useThrottleFn((value) => { + if (!sound.value) return; + sound.value.seek(value); + nowTime.value = value; + }, 50); + const timeSlider = computed({ + get: () => nowTime.value, + set: throttledSeek + }); + const formatTooltip = (value) => { + return `${secondToMinute(value)} / ${secondToMinute(allTime.value)}`; + }; + const audioVolume = ref( + localStorage.getItem("volume") ? parseFloat(localStorage.getItem("volume")) : 1 + ); + const getVolumeIcon = computed(() => { + if (audioVolume.value === 0) { + return "ri-volume-mute-line"; + } + if (audioVolume.value <= 0.5) { + return "ri-volume-down-line"; + } + return "ri-volume-up-line"; + }); + const volumeSlider = computed({ + get: () => audioVolume.value * 100, + set: (value) => { + if (!sound.value) return; + localStorage.setItem("volume", (value / 100).toString()); + sound.value.volume(value / 100); + audioVolume.value = value / 100; + } + }); + const mute = () => { + if (volumeSlider.value === 0) { + volumeSlider.value = 30; + } else { + volumeSlider.value = 0; + } + }; + const playMode = computed(() => store2.state.playMode); + const playModeIcon = computed(() => { + switch (playMode.value) { + case 0: + return "ri-repeat-2-line"; + case 1: + return "ri-repeat-one-line"; + case 2: + return "ri-shuffle-line"; + default: + return "ri-repeat-2-line"; + } + }); + const playModeText = computed(() => { + switch (playMode.value) { + case 0: + return "列表循环"; + case 1: + return "单曲循环"; + case 2: + return "随机播放"; + default: + return "列表循环"; + } + }); + const togglePlayMode = () => { + store2.commit("togglePlayMode"); + }; + function handleNext() { + store2.commit("nextPlay"); + } + function handlePrev() { + store2.commit("prevPlay"); + } + const MusicFullRef = ref(null); + const playMusicEvent = async () => { + if (play.value) { + if (sound.value) { + sound.value.pause(); + } + store2.commit("setPlayMusic", false); + } else { + if (sound.value) { + sound.value.play(); + } + store2.commit("setPlayMusic", true); + } + }; + const musicFullVisible = ref(false); + const setMusicFull = () => { + musicFullVisible.value = !musicFullVisible.value; + }; + const palyListRef = useTemplateRef("palyListRef"); + const scrollToPlayList = (val) => { + if (!val) return; + setTimeout(() => { + palyListRef.value?.scrollTo({ top: store2.state.playListIndex * 62 }); + }, 50); + }; + const isFavorite = computed(() => { + return store2.state.favoriteList.includes(playMusic2.value.id); + }); + const toggleFavorite = async (e) => { + e.stopPropagation(); + if (isFavorite.value) { + store2.commit("removeFromFavorite", playMusic2.value.id); + } else { + store2.commit("addToFavorite", playMusic2.value.id); + } + }; + const openLyricWindow = () => { + openLyric(); + }; + return (_ctx, _cache) => { + const _component_n_slider = __unplugin_components_0; + const _component_n_image = NImage; + const _component_n_ellipsis = __unplugin_components_2$1; + const _component_n_tooltip = __unplugin_components_3; + const _component_n_virtual_list = __unplugin_components_4; + const _component_n_popover = __unplugin_components_5; + return openBlock(), createElementBlock(Fragment, null, [ + createVNode(MusicFull, { + ref_key: "MusicFullRef", + ref: MusicFullRef, + "music-full": unref(musicFullVisible), + "onUpdate:musicFull": _cache[0] || (_cache[0] = ($event) => isRef(musicFullVisible) ? musicFullVisible.value = $event : null), + background: unref(background) + }, null, 8, ["music-full", "background"]), + createBaseVNode("div", { + class: normalizeClass([ + "music-play-bar", + unref(setAnimationClass)("animate__bounceInUp") + " " + (unref(musicFullVisible) ? "play-bar-opcity" : "") + ]), + style: normalizeStyle({ + color: unref(musicFullVisible) ? unref(textColors).theme === "dark" ? "#000000" : "#ffffff" : unref(store2).state.theme === "dark" ? "#ffffff" : "#000000" + }) + }, [ + createBaseVNode("div", _hoisted_1, [ + createVNode(_component_n_slider, { + value: unref(timeSlider), + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => isRef(timeSlider) ? timeSlider.value = $event : null), + step: 1, + max: unref(allTime), + min: 0, + "format-tooltip": formatTooltip + }, null, 8, ["value", "max"]) + ]), + createBaseVNode("div", { + class: "play-bar-img-wrapper", + onClick: setMusicFull + }, [ + createVNode(_component_n_image, { + src: unref(getImgUrl)(unref(playMusic2)?.picUrl, "500y500"), + class: "play-bar-img", + lazy: "", + "preview-disabled": "" + }, null, 8, ["src"]), + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("i", { + class: normalizeClass(["text-3xl", unref(musicFullVisible) ? "ri-arrow-down-s-line" : "ri-arrow-up-s-line"]) + }, null, 2), + createBaseVNode("span", _hoisted_4, toDisplayString(unref(musicFullVisible) ? "收起" : "展开") + "歌词", 1) + ]) + ]) + ]), + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("div", _hoisted_6, [ + createVNode(_component_n_ellipsis, { + class: "text-ellipsis", + "line-clamp": "1" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(unref(playMusic2).name), 1) + ]), + _: 1 + }) + ]), + createBaseVNode("div", _hoisted_7, [ + createVNode(_component_n_ellipsis, { + class: "text-ellipsis", + "line-clamp": "1" + }, { + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(playMusic2).ar || unref(playMusic2).song.artists, (artists, artistsindex) => { + return openBlock(), createElementBlock("span", { key: artistsindex }, toDisplayString(artists.name) + toDisplayString(artistsindex < (unref(playMusic2).ar || unref(playMusic2).song.artists).length - 1 ? " / " : ""), 1); + }), 128)) + ]), + _: 1 + }) + ]) + ]), + createBaseVNode("div", _hoisted_8, [ + createBaseVNode("div", { + class: "music-buttons-prev", + onClick: handlePrev + }, _cache[3] || (_cache[3] = [ + createBaseVNode("i", { class: "iconfont icon-prev" }, null, -1) + ])), + createBaseVNode("div", { + class: "music-buttons-play", + onClick: playMusicEvent + }, [ + createBaseVNode("i", { + class: normalizeClass(["iconfont icon", unref(play) ? "icon-stop" : "icon-play"]) + }, null, 2) + ]), + createBaseVNode("div", { + class: "music-buttons-next", + onClick: handleNext + }, _cache[4] || (_cache[4] = [ + createBaseVNode("i", { class: "iconfont icon-next" }, null, -1) + ])) + ]), + createBaseVNode("div", _hoisted_9, [ + createBaseVNode("div", _hoisted_10, [ + createBaseVNode("div", { + class: "volume-icon", + onClick: mute + }, [ + createBaseVNode("i", { + class: normalizeClass(["iconfont", unref(getVolumeIcon)]) + }, null, 2) + ]), + createBaseVNode("div", _hoisted_11, [ + createVNode(_component_n_slider, { + value: unref(volumeSlider), + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => isRef(volumeSlider) ? volumeSlider.value = $event : null), + step: 0.01, + tooltip: false, + vertical: "" + }, null, 8, ["value"]) + ]) + ]), + !unref(isMobile) ? (openBlock(), createBlock(_component_n_tooltip, { + key: 0, + trigger: "hover", + "z-index": 9999999 + }, { + trigger: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(["iconfont", unref(playModeIcon)]), + onClick: togglePlayMode + }, null, 2) + ]), + default: withCtx(() => [ + createTextVNode(" " + toDisplayString(unref(playModeText)), 1) + ]), + _: 1 + })) : createCommentVNode("", true), + !unref(isMobile) ? (openBlock(), createBlock(_component_n_tooltip, { + key: 1, + trigger: "hover", + "z-index": 9999999 + }, { + trigger: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(["iconfont icon-likefill", { "like-active": unref(isFavorite) }]), + onClick: toggleFavorite + }, null, 2) + ]), + default: withCtx(() => [ + _cache[5] || (_cache[5] = createTextVNode(" 喜欢 ")) + ]), + _: 1 + })) : createCommentVNode("", true), + unref(isElectron) ? (openBlock(), createBlock(_component_n_tooltip, { + key: 2, + class: "music-lyric", + trigger: "hover", + "z-index": 9999999 + }, { + trigger: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(["iconfont ri-netease-cloud-music-line", { "text-green-500": unref(isLyricWindowOpen) }]), + onClick: openLyricWindow + }, null, 2) + ]), + default: withCtx(() => [ + _cache[6] || (_cache[6] = createTextVNode(" 歌词 ")) + ]), + _: 1 + })) : createCommentVNode("", true), + createVNode(_component_n_popover, { + trigger: "click", + "z-index": 99999999, + "content-class": "music-play", + raw: "", + "show-arrow": false, + delay: 200, + "arrow-wrapper-style": " border-radius:1.5rem", + onUpdateShow: scrollToPlayList + }, { + trigger: withCtx(() => [ + createVNode(_component_n_tooltip, { + trigger: "manual", + "z-index": 9999999 + }, { + trigger: withCtx(() => _cache[7] || (_cache[7] = [ + createBaseVNode("i", { class: "iconfont icon-list" }, null, -1) + ])), + default: withCtx(() => [ + _cache[8] || (_cache[8] = createTextVNode(" 播放列表 ")) + ]), + _: 1 + }) + ]), + default: withCtx(() => [ + createBaseVNode("div", _hoisted_12, [ + _cache[9] || (_cache[9] = createBaseVNode("div", { class: "music-play-list-back" }, null, -1)), + createVNode(_component_n_virtual_list, { + ref_key: "palyListRef", + ref: palyListRef, + "item-size": 62, + "item-resizable": "", + items: unref(playList) + }, { + default: withCtx(({ item }) => [ + createBaseVNode("div", _hoisted_13, [ + (openBlock(), createBlock(SongItem, { + key: item.id, + item, + mini: "" + }, null, 8, ["item"])) + ]) + ]), + _: 1 + }, 8, ["items"]) + ]) + ]), + _: 1 + }) + ]) + ], 6) + ], 64); + }; + } +}); +const PlayBar = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-5d6cadda"]]); +export { + PlayBar as default +}; diff --git a/out/renderer/assets/PlayBar-BNzUvTGp.js.gz b/out/renderer/assets/PlayBar-BNzUvTGp.js.gz new file mode 100644 index 0000000..a4773f8 Binary files /dev/null and b/out/renderer/assets/PlayBar-BNzUvTGp.js.gz differ diff --git a/out/renderer/assets/PlayBar-Ct36doNR.css b/out/renderer/assets/PlayBar-Ct36doNR.css new file mode 100644 index 0000000..59acd4d --- /dev/null +++ b/out/renderer/assets/PlayBar-Ct36doNR.css @@ -0,0 +1,502 @@ +@keyframes round-03432cea { +0% { + transform: rotate(0deg); +} +100% { + transform: rotate(360deg); +} +} +.drawer-back[data-v-03432cea] { + position: absolute; + background-size: cover; + background-position: center; + z-index: -1; + width: 200%; + height: 200%; + top: -50%; + left: -50%; +} +.drawer-back.paused[data-v-03432cea] { + animation-play-state: paused; +} +#drawer-target[data-v-03432cea] { + position: absolute; + top: 0px; + left: 0px; + display: flex; + height: 100%; + width: 100%; + align-items: center; + justify-content: center; + overflow: hidden; + border-radius: 0.25rem; + padding-left: 6rem; + padding-right: 6rem; + padding-bottom: 2rem; + animation-duration: 300ms; +} +#drawer-target .music-img[data-v-03432cea] { + margin-right: 4rem; + display: flex; + flex: 1 1 0%; + flex-direction: column; + justify-content: center; + max-width: 360px; + max-height: 360px; +} +#drawer-target .music-img .img[data-v-03432cea] { + height: 100%; + width: 100%; + border-radius: 0.75rem; + --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +#drawer-target .music-content[data-v-03432cea] { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} +#drawer-target .music-content-name[data-v-03432cea] { + padding-bottom: 0.25rem; + padding-top: 1rem; + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700; +} +#drawer-target .music-content-singer[data-v-03432cea] { + font-size: 1rem; + line-height: 1.5rem; +} +#drawer-target .music-content-time[data-v-03432cea] { + display: none; + display: flex; + align-items: center; + justify-content: center; +} +#drawer-target .music-lrc[data-v-03432cea] { + background-color: inherit; + width: 500px; + height: 550px; + -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%); + mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%); +} +#drawer-target .music-lrc-text[data-v-03432cea] { + cursor: pointer; + padding-left: 0.5rem; + padding-right: 0.5rem; + padding-top: 1rem; + padding-bottom: 1rem; + font-size: 1.5rem; + line-height: 2rem; + font-weight: 700; + transition: all 0.3s ease; + background-color: transparent; +} +#drawer-target .music-lrc-text span[data-v-03432cea] { + background-clip: text !important; + -webkit-background-clip: text !important; + padding-right: 30px; +} +#drawer-target .music-lrc-text-tr[data-v-03432cea] { + font-weight: 400; + opacity: 0.7; + color: var(--text-color-primary); +} +#drawer-target .music-lrc .hover-text[data-v-03432cea]:hover { + border-radius: 0.75rem; + font-weight: 700; + opacity: 1; + background-color: var(--hover-bg-color); +} +#drawer-target .music-lrc .hover-text:hover span[data-v-03432cea] { + color: var(--text-color-active) !important; +} +.mobile #drawer-target[data-v-03432cea] { + flex-direction: column; + justify-content: flex-start; + padding: 1rem; + padding-top: 2rem; +} +.mobile #drawer-target .music-img[data-v-03432cea] { + display: none; +} +.mobile #drawer-target .music-lrc[data-v-03432cea] { + height: calc(100vh - 260px) !important; + width: 100vw; +} +.mobile #drawer-target .music-lrc span[data-v-03432cea] { + padding-right: 0px !important; +} +.mobile #drawer-target .music-lrc-text[data-v-03432cea] { + text-align: center; + font-size: 1.25rem; + line-height: 1.75rem; +} +.music-drawer[data-v-03432cea] { + transition: none; +}.text-ellipsis[data-v-5d6cadda] { + width: 100%; +} +.music-play-bar[data-v-5d6cadda] { + position: absolute; + bottom: 0px; + left: 0px; + box-sizing: border-box; + display: flex; + height: 5rem; + width: 100%; + align-items: center; + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-bottom: 0.5rem; + padding-top: 0.75rem; + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); + --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow-color: #d1d5db; + --tw-shadow: var(--tw-shadow-colored); +} +.music-play-bar[data-v-5d6cadda]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.music-play-bar[data-v-5d6cadda] { + z-index: 9999; + animation-duration: 0.5s !important; +} +.music-play-bar .music-content[data-v-5d6cadda] { + width: 160px; + margin-left: 1rem; +} +.music-play-bar .music-content-title[data-v-5d6cadda] { + font-size: 1rem; + line-height: 1.5rem; +} +.music-play-bar .music-content-name[data-v-5d6cadda] { + margin-top: 0.25rem; + font-size: 0.75rem; + line-height: 1rem; + opacity: 0.8; +} +.play-bar-opcity[data-v-5d6cadda] { + background-color: transparent !important; + box-shadow: 0 0 20px 5px rgba(0, 0, 0, 0.1137254902); +} +.play-bar-img[data-v-5d6cadda] { + height: 3.5rem; + width: 3.5rem; + border-radius: 1rem; +} +.music-buttons[data-v-5d6cadda] { + margin-left: 1.5rem; + margin-right: 1.5rem; + flex: 1 1 0%; + justify-content: center; + display: flex; + align-items: center; +} +.music-buttons .iconfont[data-v-5d6cadda] { + font-size: 1.5rem; + line-height: 2rem; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.music-buttons .iconfont[data-v-5d6cadda]:hover { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} +.music-buttons .icon[data-v-5d6cadda] { + font-size: 1.875rem; + line-height: 2.25rem; +} +.music-buttons .icon[data-v-5d6cadda]:hover { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} +.music-buttons > div[data-v-5d6cadda] { + cursor: pointer; +} +.music-buttons-play[data-v-5d6cadda] { + margin-left: 1rem; + margin-right: 1rem; + display: flex; + height: 3rem; + width: 5rem; + align-items: center; + justify-content: center; + border-radius: 9999px; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.6; +} +.music-buttons-play[data-v-5d6cadda]:hover { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); +} +.audio-volume[data-v-5d6cadda] { + position: relative; + display: flex; + align-items: center; +} +.audio-volume:hover .volume-slider[data-v-5d6cadda] { + visibility: visible; + opacity: 1; +} +.audio-volume .volume-icon[data-v-5d6cadda] { + cursor: pointer; +} +.audio-volume .iconfont[data-v-5d6cadda] { + font-size: 1.5rem; + line-height: 2rem; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.audio-volume .iconfont[data-v-5d6cadda]:hover { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} +.audio-volume .volume-slider[data-v-5d6cadda] { + visibility: hidden; + position: absolute; + bottom: 30px; + left: 50%; + height: 180px; + --tw-translate-x: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + border-radius: 0.75rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + padding-top: 1rem; + padding-bottom: 1rem; + opacity: 0; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 300ms; + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.audio-volume .volume-slider[data-v-5d6cadda]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} +.audio-volume .volume-slider[data-v-5d6cadda] { + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); +} +.audio-volume .volume-slider[data-v-5d6cadda]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); +} +.audio-button[data-v-5d6cadda] { + margin-left: 1rem; + margin-right: 1rem; + display: flex; + align-items: center; +} +.audio-button .iconfont[data-v-5d6cadda] { + margin: 1rem; + cursor: pointer; + font-size: 1.5rem; + line-height: 2rem; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.audio-button .iconfont[data-v-5d6cadda]:hover { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} +.music-play-list[data-v-5d6cadda] { + height: 50vh; + width: 300px; + position: relative; + overflow: hidden; + border-radius: 1.5rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.music-play-list-back[data-v-5d6cadda] { + -webkit-backdrop-filter: blur(20px); + backdrop-filter: blur(20px); + position: absolute; + top: 0px; + left: 0px; + height: 100%; + width: 100%; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.75; +} +.music-play-list-back[data-v-5d6cadda]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.music-play-list-content[data-v-5d6cadda] { + margin-left: 0.5rem; + margin-right: 0.5rem; +} +.mobile .music-play-bar[data-v-5d6cadda] { + padding-left: 1rem; + padding-right: 1rem; + bottom: 70px; +} +.mobile .music-time[data-v-5d6cadda] { + display: none; +} +.mobile .ri-netease-cloud-music-line[data-v-5d6cadda] { + display: none; +} +.mobile .audio-volume[data-v-5d6cadda] { + display: none; +} +.mobile .audio-button[data-v-5d6cadda] { + margin-left: 0px; + margin-right: 0px; +} +.mobile .music-buttons[data-v-5d6cadda] { + margin: 0px; +} +.mobile .music-buttons-prev[data-v-5d6cadda], .mobile .music-buttons-next[data-v-5d6cadda] { + display: none; +} +.mobile .music-buttons-play[data-v-5d6cadda] { + margin: 0px; +} +.mobile .music-content[data-v-5d6cadda] { + flex: 1; +} +.custom-slider[data-v-5d6cadda] .n-slider { + --n-rail-height: 4px; + --n-rail-color: #e5e7eb; + --n-rail-color-dark: #374151; + --n-fill-color: #22c55e; + --n-handle-size: 12px; + --n-handle-color: #22c55e; +} +.custom-slider[data-v-5d6cadda] .n-slider.n-slider--vertical { + height: 100%; +} +.custom-slider[data-v-5d6cadda] .n-slider.n-slider--vertical .n-slider-rail { + width: 4px; +} +.custom-slider[data-v-5d6cadda] .n-slider.n-slider--vertical:hover .n-slider-rail { + width: 6px; +} +.custom-slider[data-v-5d6cadda] .n-slider.n-slider--vertical:hover .n-slider-handle { + width: 14px; + height: 14px; +} +.custom-slider[data-v-5d6cadda] .n-slider .n-slider-rail { + overflow: hidden; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; + background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1)) !important; + --tw-bg-opacity: 0.1 !important; +} +.custom-slider[data-v-5d6cadda] .n-slider .n-slider-rail:is(.dark *) { + --tw-bg-opacity: 1 !important; + background-color: rgb(61 61 61 / var(--tw-bg-opacity, 1)) !important; +} +.custom-slider[data-v-5d6cadda] .n-slider .n-slider-handle { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; + opacity: 0; +} +.custom-slider[data-v-5d6cadda] .n-slider:hover .n-slider-handle { + opacity: 1; +} +.play-bar-img-wrapper[data-v-5d6cadda] { + position: relative; + height: 3.5rem; + width: 3.5rem; + cursor: pointer; +} +.play-bar-img-wrapper .hover-arrow[data-v-5d6cadda] { + position: absolute; + inset: 0px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 1rem; + opacity: 0; + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 300ms; + background: rgba(0, 0, 0, 0.5); +} +.play-bar-img-wrapper .hover-arrow .hover-content[data-v-5d6cadda] { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} +.play-bar-img-wrapper .hover-arrow .hover-content i[data-v-5d6cadda] { + margin-bottom: 0.125rem; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.play-bar-img-wrapper .hover-arrow .hover-content .hover-text[data-v-5d6cadda] { + --tw-scale-x: .9; + --tw-scale-y: .9; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + font-size: 0.75rem; + line-height: 1rem; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.play-bar-img-wrapper:hover .hover-arrow[data-v-5d6cadda] { + opacity: 1; +} +.tooltip-content[data-v-5d6cadda] { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + font-size: 0.875rem; + line-height: 1.25rem; +} +.play-bar-img[data-v-5d6cadda] { + height: 3.5rem; + width: 3.5rem; + border-radius: 1rem; +} +.like-active[data-v-5d6cadda] { + --tw-text-opacity: 1 !important; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)) !important; +} +.like-active[data-v-5d6cadda]:hover { + --tw-text-opacity: 1 !important; + color: rgb(220 38 38 / var(--tw-text-opacity, 1)) !important; +} +.icon-loop[data-v-5d6cadda], +.icon-single-loop[data-v-5d6cadda] { + font-size: 1.5rem; +} +.music-time .n-slider[data-v-5d6cadda] { + position: absolute; + top: 0; + left: 0; + padding: 0; + border-radius: 0; +} \ No newline at end of file diff --git a/out/renderer/assets/PlayBar-Ct36doNR.css.gz b/out/renderer/assets/PlayBar-Ct36doNR.css.gz new file mode 100644 index 0000000..1c18e39 Binary files /dev/null and b/out/renderer/assets/PlayBar-Ct36doNR.css.gz differ diff --git a/out/renderer/assets/SearchBar-CIYxJjXH.css b/out/renderer/assets/SearchBar-CIYxJjXH.css new file mode 100644 index 0000000..e2a2a46 --- /dev/null +++ b/out/renderer/assets/SearchBar-CIYxJjXH.css @@ -0,0 +1,219 @@ +.user-box[data-v-064c45e9] { + margin-left: 1rem; + display: flex; + align-items: center; + justify-content: center; + border-radius: 9999px; + font-size: 1.125rem; + line-height: 1.75rem; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); +}.user-box[data-v-064c45e9]:hover { + --tw-border-opacity: 1; + border-color: rgb(156 163 175 / var(--tw-border-opacity, 1)); +}.user-box[data-v-064c45e9]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)); +}.user-box[data-v-064c45e9]:hover:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(156 163 175 / var(--tw-border-opacity, 1)); +}.user-box[data-v-064c45e9] { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +}.user-box[data-v-064c45e9]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} +.search-box[data-v-064c45e9] { + padding-bottom: 1rem; + padding-right: 1rem; +} +.search-box-input[data-v-064c45e9] { + position: relative; +} +.search-box-input[data-v-064c45e9] .n-input { + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); +} +.search-box-input[data-v-064c45e9] .n-input:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.search-box-input[data-v-064c45e9] .n-input .n-input__input-el { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.search-box-input[data-v-064c45e9] .n-input .n-input__input-el:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.search-box-input[data-v-064c45e9] .n-input .n-input__prefix { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.search-box-input[data-v-064c45e9] .n-input .n-input__prefix:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.mobile .search-box[data-v-064c45e9] { + padding-left: 1rem; +} +.github[data-v-064c45e9] { + margin-left: 1rem; + display: flex; + height: 100%; + cursor: pointer; + align-items: center; + justify-content: center; + border-radius: 9999px; + padding-left: 0.5rem; + padding-right: 0.5rem; + font-size: 1.25rem; + line-height: 1.75rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.github[data-v-064c45e9]:hover { + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} +.github[data-v-064c45e9]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +.github[data-v-064c45e9]:hover:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.github[data-v-064c45e9] { + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.github[data-v-064c45e9]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.user-popover[data-v-064c45e9] { + min-width: 280px; + overflow: hidden; + border-radius: 0.75rem; + padding: 0px; + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.user-popover[data-v-064c45e9]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.user-popover[data-v-064c45e9] { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} +.user-popover .user-header[data-v-064c45e9] { + display: flex; + cursor: pointer; + align-items: center; + gap: 0.5rem; + padding: 0.75rem; + border-bottom-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); +} +.user-popover .user-header[data-v-064c45e9]:hover { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} +.user-popover .user-header[data-v-064c45e9]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); +} +.user-popover .user-header[data-v-064c45e9]:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); +} +.user-popover .user-header .username[data-v-064c45e9] { + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 500; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.user-popover .user-header .username[data-v-064c45e9]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity, 1)); +} +.user-popover .menu-items[data-v-064c45e9] { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} +.user-popover .menu-items .menu-item[data-v-064c45e9] { + display: flex; + cursor: pointer; + align-items: center; + padding-left: 0.75rem; + padding-right: 0.75rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); +} +.user-popover .menu-items .menu-item[data-v-064c45e9]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); +} +.user-popover .menu-items .menu-item[data-v-064c45e9] { + transition: background-color 0.2s; +} +.user-popover .menu-items .menu-item[data-v-064c45e9]:hover { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} +.user-popover .menu-items .menu-item[data-v-064c45e9]:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); +} +.user-popover .menu-items .menu-item i[data-v-064c45e9] { + margin-right: 0.25rem; + font-size: 1.125rem; + line-height: 1.75rem; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.user-popover .menu-items .menu-item i[data-v-064c45e9]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.user-popover .menu-items .menu-item .version-info[data-v-064c45e9] { + margin-left: auto; + display: flex; + align-items: center; +} +.user-popover .menu-items .menu-item .version-info .version-number[data-v-064c45e9] { + border-radius: 0.25rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + padding-top: 0.125rem; + padding-bottom: 0.125rem; + font-size: 0.75rem; + line-height: 1rem; + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} +.user-popover .menu-items .menu-item .version-info .version-number[data-v-064c45e9]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); +} \ No newline at end of file diff --git a/out/renderer/assets/SearchBar-CIYxJjXH.css.gz b/out/renderer/assets/SearchBar-CIYxJjXH.css.gz new file mode 100644 index 0000000..4992291 Binary files /dev/null and b/out/renderer/assets/SearchBar-CIYxJjXH.css.gz differ diff --git a/out/renderer/assets/SearchBar-Cx7zzS9t.js b/out/renderer/assets/SearchBar-Cx7zzS9t.js new file mode 100644 index 0000000..840cbd7 --- /dev/null +++ b/out/renderer/assets/SearchBar-Cx7zzS9t.js @@ -0,0 +1,2263 @@ +import { b8 as reactive, b9 as hasInstance, ba as onBeforeMount, a as onBeforeUnmount, aS as off, bb as readonly, J as on, E as watch, r as ref, d as defineComponent, l as h, aL as createInjectionKey, as as inject, bc as render, aY as popoverBodyInjectionKey, G as computed, $ as provide, D as useMemo, ak as Transition, ax as mergeProps, bd as warn, a3 as Fragment, aZ as modalBodyInjectionKey, aX as drawerBodyInjectionKey, az as XScrollbar, p as cB, aM as fadeInScaleUpTransition, m as c, V as cNotM, W as cM, Y as cE, C as useMergedState, A as toRef, x as useConfig, q as useTheme, be as dropdownLight, L as call, ao as createKey, ap as useThemeClass, bf as keep, j as openBlock, c as createElementBlock, e as createVNode, f as withCtx, bg as renderSlot, u as unref, B as Button, k as createTextVNode, b as createBaseVNode, h as useRouter, g as useStore, a8 as watchEffect, o as onMounted, Q as config, P as checkUpdate, t as toDisplayString, bh as withKeys, O as createBlock, a7 as getImgUrl, T as createCommentVNode, n as normalizeClass, _ as _export_sfc } from "./index-DKaFsuse.js"; +import { f as getSearchKeyword } from "./home-BXGE9AqN.js"; +import { u as useMessage, b as getUserDetail, d as logout } from "./login-BsPxQYi6.js"; +import { r as renderArrow, a as __unplugin_components_5, p as popoverBaseProps, N as NImage } from "./Image-DXClIklC.js"; +import { B as Binder, V as VTarget, e as VFollower } from "./use-locale-DLWAOXez.js"; +import { N as NIcon } from "./Icon-DucaliTK.js"; +import { _ as __unplugin_components_1, a as __unplugin_components_3 } from "./Switch-D3Z_Vg3u.js"; +import { _ as __unplugin_components_2 } from "./Avatar-rQ2og-6c.js"; +import { _ as __unplugin_components_4 } from "./Tag-C0oC92WF.js"; +function happensIn(e, dataSetPropName) { + let { target } = e; + while (target) { + if (target.dataset) { + if (target.dataset[dataSetPropName] !== void 0) + return true; + } + target = target.parentElement; + } + return false; +} +function useKeyboard(options = {}, enabledRef) { + const state = reactive({ + ctrl: false, + command: false, + win: false, + shift: false, + tab: false + }); + const { keydown, keyup } = options; + const keydownHandler = (e) => { + switch (e.key) { + case "Control": + state.ctrl = true; + break; + case "Meta": + state.command = true; + state.win = true; + break; + case "Shift": + state.shift = true; + break; + case "Tab": + state.tab = true; + break; + } + if (keydown !== void 0) { + Object.keys(keydown).forEach((key) => { + if (key !== e.key) + return; + const handler = keydown[key]; + if (typeof handler === "function") { + handler(e); + } else { + const { stop = false, prevent = false } = handler; + if (stop) + e.stopPropagation(); + if (prevent) + e.preventDefault(); + handler.handler(e); + } + }); + } + }; + const keyupHandler = (e) => { + switch (e.key) { + case "Control": + state.ctrl = false; + break; + case "Meta": + state.command = false; + state.win = false; + break; + case "Shift": + state.shift = false; + break; + case "Tab": + state.tab = false; + break; + } + if (keyup !== void 0) { + Object.keys(keyup).forEach((key) => { + if (key !== e.key) + return; + const handler = keyup[key]; + if (typeof handler === "function") { + handler(e); + } else { + const { stop = false, prevent = false } = handler; + if (stop) + e.stopPropagation(); + if (prevent) + e.preventDefault(); + handler.handler(e); + } + }); + } + }; + const setup = () => { + if (enabledRef === void 0 || enabledRef.value) { + on("keydown", document, keydownHandler); + on("keyup", document, keyupHandler); + } + if (enabledRef !== void 0) { + watch(enabledRef, (value) => { + if (value) { + on("keydown", document, keydownHandler); + on("keyup", document, keyupHandler); + } else { + off("keydown", document, keydownHandler); + off("keyup", document, keyupHandler); + } + }); + } + }; + if (hasInstance()) { + onBeforeMount(setup); + onBeforeUnmount(() => { + if (enabledRef === void 0 || enabledRef.value) { + off("keydown", document, keydownHandler); + off("keyup", document, keyupHandler); + } + }); + } else { + setup(); + } + return readonly(state); +} +function useDeferredTrue(valueRef, delay, shouldDelayRef) { + const delayedRef = ref(valueRef.value); + let timerId = null; + watch(valueRef, (value) => { + if (timerId !== null) window.clearTimeout(timerId); + if (value === true) { + if (shouldDelayRef && !shouldDelayRef.value) { + delayedRef.value = true; + } else { + timerId = window.setTimeout(() => { + delayedRef.value = true; + }, delay); + } + } else { + delayedRef.value = false; + } + }); + return delayedRef; +} +function createRefSetter(ref2) { + return (inst) => { + if (inst) { + ref2.value = inst.$el; + } else { + ref2.value = null; + } + }; +} +const ChevronRightIcon = defineComponent({ + name: "ChevronRight", + render() { + return h("svg", { + viewBox: "0 0 16 16", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, h("path", { + d: "M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z", + fill: "currentColor" + })); + } +}); +function toArray(arg) { + if (Array.isArray(arg)) + return arg; + return [arg]; +} +const TRAVERSE_COMMAND = { + STOP: "STOP" +}; +function traverseWithCb(treeNode, callback) { + const command = callback(treeNode); + if (treeNode.children !== void 0 && command !== TRAVERSE_COMMAND.STOP) { + treeNode.children.forEach((childNode) => traverseWithCb(childNode, callback)); + } +} +function getNonLeafKeys(treeNodes, options = {}) { + const { preserveGroup = false } = options; + const keys = []; + const cb = preserveGroup ? (node) => { + if (!node.isLeaf) { + keys.push(node.key); + traverse(node.children); + } + } : (node) => { + if (!node.isLeaf) { + if (!node.isGroup) + keys.push(node.key); + traverse(node.children); + } + }; + function traverse(nodes) { + nodes.forEach(cb); + } + traverse(treeNodes); + return keys; +} +function isLeaf(rawNode, getChildren) { + const { isLeaf: isLeaf2 } = rawNode; + if (isLeaf2 !== void 0) + return isLeaf2; + else if (!getChildren(rawNode)) + return true; + return false; +} +function defaultGetChildren(node) { + return node.children; +} +function defaultGetKey(node) { + return node.key; +} +function isIgnored() { + return false; +} +function isShallowLoaded(rawNode, getChildren) { + const { isLeaf: isLeaf2 } = rawNode; + if (isLeaf2 === false && !Array.isArray(getChildren(rawNode))) + return false; + return true; +} +function isDisabled(rawNode) { + return rawNode.disabled === true; +} +function isExpilicitlyNotLoaded(rawNode, getChildren) { + return rawNode.isLeaf === false && !Array.isArray(getChildren(rawNode)); +} +function unwrapCheckedKeys(result) { + var _a; + if (result === void 0 || result === null) + return []; + if (Array.isArray(result)) + return result; + return (_a = result.checkedKeys) !== null && _a !== void 0 ? _a : []; +} +function unwrapIndeterminateKeys(result) { + var _a; + if (result === void 0 || result === null || Array.isArray(result)) { + return []; + } + return (_a = result.indeterminateKeys) !== null && _a !== void 0 ? _a : []; +} +function merge(originalKeys, keysToAdd) { + const set = new Set(originalKeys); + keysToAdd.forEach((key) => { + if (!set.has(key)) { + set.add(key); + } + }); + return Array.from(set); +} +function minus(originalKeys, keysToRemove) { + const set = new Set(originalKeys); + keysToRemove.forEach((key) => { + if (set.has(key)) { + set.delete(key); + } + }); + return Array.from(set); +} +function isGroup(rawNode) { + return (rawNode === null || rawNode === void 0 ? void 0 : rawNode.type) === "group"; +} +class SubtreeNotLoadedError extends Error { + constructor() { + super(); + this.message = "SubtreeNotLoadedError: checking a subtree whose required nodes are not fully loaded."; + } +} +function getExtendedCheckedKeySetAfterCheck(checkKeys, currentCheckedKeys, treeMate, allowNotLoaded) { + return getExtendedCheckedKeySet(currentCheckedKeys.concat(checkKeys), treeMate, allowNotLoaded, false); +} +function getAvailableAscendantNodeSet(uncheckedKeys, treeMate) { + const visitedKeys = /* @__PURE__ */ new Set(); + uncheckedKeys.forEach((uncheckedKey) => { + const uncheckedTreeNode = treeMate.treeNodeMap.get(uncheckedKey); + if (uncheckedTreeNode !== void 0) { + let nodeCursor = uncheckedTreeNode.parent; + while (nodeCursor !== null) { + if (nodeCursor.disabled) + break; + if (visitedKeys.has(nodeCursor.key)) + break; + else { + visitedKeys.add(nodeCursor.key); + } + nodeCursor = nodeCursor.parent; + } + } + }); + return visitedKeys; +} +function getExtendedCheckedKeySetAfterUncheck(uncheckedKeys, currentCheckedKeys, treeMate, allowNotLoaded) { + const extendedCheckedKeySet = getExtendedCheckedKeySet(currentCheckedKeys, treeMate, allowNotLoaded, false); + const extendedKeySetToUncheck = getExtendedCheckedKeySet(uncheckedKeys, treeMate, allowNotLoaded, true); + const ascendantKeySet = getAvailableAscendantNodeSet(uncheckedKeys, treeMate); + const keysToRemove = []; + extendedCheckedKeySet.forEach((key) => { + if (extendedKeySetToUncheck.has(key) || ascendantKeySet.has(key)) { + keysToRemove.push(key); + } + }); + keysToRemove.forEach((key) => extendedCheckedKeySet.delete(key)); + return extendedCheckedKeySet; +} +function getCheckedKeys(options, treeMate) { + const { checkedKeys, keysToCheck, keysToUncheck, indeterminateKeys, cascade, leafOnly, checkStrategy, allowNotLoaded } = options; + if (!cascade) { + if (keysToCheck !== void 0) { + return { + checkedKeys: merge(checkedKeys, keysToCheck), + indeterminateKeys: Array.from(indeterminateKeys) + }; + } else if (keysToUncheck !== void 0) { + return { + checkedKeys: minus(checkedKeys, keysToUncheck), + indeterminateKeys: Array.from(indeterminateKeys) + }; + } else { + return { + checkedKeys: Array.from(checkedKeys), + indeterminateKeys: Array.from(indeterminateKeys) + }; + } + } + const { levelTreeNodeMap } = treeMate; + let extendedCheckedKeySet; + if (keysToUncheck !== void 0) { + extendedCheckedKeySet = getExtendedCheckedKeySetAfterUncheck(keysToUncheck, checkedKeys, treeMate, allowNotLoaded); + } else if (keysToCheck !== void 0) { + extendedCheckedKeySet = getExtendedCheckedKeySetAfterCheck(keysToCheck, checkedKeys, treeMate, allowNotLoaded); + } else { + extendedCheckedKeySet = getExtendedCheckedKeySet(checkedKeys, treeMate, allowNotLoaded, false); + } + const checkStrategyIsParent = checkStrategy === "parent"; + const checkStrategyIsChild = checkStrategy === "child" || leafOnly; + const syntheticCheckedKeySet = extendedCheckedKeySet; + const syntheticIndeterminateKeySet = /* @__PURE__ */ new Set(); + const maxLevel = Math.max.apply(null, Array.from(levelTreeNodeMap.keys())); + for (let level = maxLevel; level >= 0; level -= 1) { + const levelIsZero = level === 0; + const levelTreeNodes = levelTreeNodeMap.get(level); + for (const levelTreeNode of levelTreeNodes) { + if (levelTreeNode.isLeaf) + continue; + const { key: levelTreeNodeKey, shallowLoaded } = levelTreeNode; + if (checkStrategyIsChild && shallowLoaded) { + levelTreeNode.children.forEach((v) => { + if (!v.disabled && !v.isLeaf && v.shallowLoaded && syntheticCheckedKeySet.has(v.key)) { + syntheticCheckedKeySet.delete(v.key); + } + }); + } + if (levelTreeNode.disabled || !shallowLoaded) { + continue; + } + let fullyChecked = true; + let partialChecked = false; + let allDisabled = true; + for (const childNode of levelTreeNode.children) { + const childKey = childNode.key; + if (childNode.disabled) + continue; + if (allDisabled) + allDisabled = false; + if (syntheticCheckedKeySet.has(childKey)) { + partialChecked = true; + } else if (syntheticIndeterminateKeySet.has(childKey)) { + partialChecked = true; + fullyChecked = false; + break; + } else { + fullyChecked = false; + if (partialChecked) { + break; + } + } + } + if (fullyChecked && !allDisabled) { + if (checkStrategyIsParent) { + levelTreeNode.children.forEach((v) => { + if (!v.disabled && syntheticCheckedKeySet.has(v.key)) { + syntheticCheckedKeySet.delete(v.key); + } + }); + } + syntheticCheckedKeySet.add(levelTreeNodeKey); + } else if (partialChecked) { + syntheticIndeterminateKeySet.add(levelTreeNodeKey); + } + if (levelIsZero && checkStrategyIsChild && syntheticCheckedKeySet.has(levelTreeNodeKey)) { + syntheticCheckedKeySet.delete(levelTreeNodeKey); + } + } + } + return { + checkedKeys: Array.from(syntheticCheckedKeySet), + indeterminateKeys: Array.from(syntheticIndeterminateKeySet) + }; +} +function getExtendedCheckedKeySet(checkedKeys, treeMate, allowNotLoaded, isUnchecking) { + const { treeNodeMap, getChildren } = treeMate; + const visitedKeySet = /* @__PURE__ */ new Set(); + const extendedKeySet = new Set(checkedKeys); + checkedKeys.forEach((checkedKey) => { + const checkedTreeNode = treeNodeMap.get(checkedKey); + if (checkedTreeNode !== void 0) { + traverseWithCb(checkedTreeNode, (treeNode) => { + if (treeNode.disabled) { + return TRAVERSE_COMMAND.STOP; + } + const { key } = treeNode; + if (visitedKeySet.has(key)) + return; + visitedKeySet.add(key); + extendedKeySet.add(key); + if (isExpilicitlyNotLoaded(treeNode.rawNode, getChildren)) { + if (isUnchecking) { + return TRAVERSE_COMMAND.STOP; + } else if (!allowNotLoaded) { + throw new SubtreeNotLoadedError(); + } + } + }); + } + }); + return extendedKeySet; +} +function getPath(key, { includeGroup = false, includeSelf = true }, treeMate) { + var _a; + const treeNodeMap = treeMate.treeNodeMap; + let treeNode = key === null || key === void 0 ? null : (_a = treeNodeMap.get(key)) !== null && _a !== void 0 ? _a : null; + const mergedPath = { + keyPath: [], + treeNodePath: [], + treeNode + }; + if (treeNode === null || treeNode === void 0 ? void 0 : treeNode.ignored) { + mergedPath.treeNode = null; + return mergedPath; + } + while (treeNode) { + if (!treeNode.ignored && (includeGroup || !treeNode.isGroup)) { + mergedPath.treeNodePath.push(treeNode); + } + treeNode = treeNode.parent; + } + mergedPath.treeNodePath.reverse(); + if (!includeSelf) + mergedPath.treeNodePath.pop(); + mergedPath.keyPath = mergedPath.treeNodePath.map((treeNode2) => treeNode2.key); + return mergedPath; +} +function getFirstAvailableNode(nodes) { + if (nodes.length === 0) + return null; + const node = nodes[0]; + if (node.isGroup || node.ignored || node.disabled) { + return node.getNext(); + } + return node; +} +function rawGetNext(node, loop) { + const sibs = node.siblings; + const l = sibs.length; + const { index } = node; + if (loop) { + return sibs[(index + 1) % l]; + } else { + if (index === sibs.length - 1) + return null; + return sibs[index + 1]; + } +} +function move(fromNode, dir, { loop = false, includeDisabled = false } = {}) { + const iterate = dir === "prev" ? rawGetPrev : rawGetNext; + const getChildOptions = { + reverse: dir === "prev" + }; + let meet = false; + let endNode = null; + function traverse(node) { + if (node === null) + return; + if (node === fromNode) { + if (!meet) { + meet = true; + } else if (!fromNode.disabled && !fromNode.isGroup) { + endNode = fromNode; + return; + } + } else { + if ((!node.disabled || includeDisabled) && !node.ignored && !node.isGroup) { + endNode = node; + return; + } + } + if (node.isGroup) { + const child = getChild(node, getChildOptions); + if (child !== null) { + endNode = child; + } else { + traverse(iterate(node, loop)); + } + } else { + const nextNode = iterate(node, false); + if (nextNode !== null) { + traverse(nextNode); + } else { + const parent = rawGetParent(node); + if (parent === null || parent === void 0 ? void 0 : parent.isGroup) { + traverse(iterate(parent, loop)); + } else if (loop) { + traverse(iterate(node, true)); + } + } + } + } + traverse(fromNode); + return endNode; +} +function rawGetPrev(node, loop) { + const sibs = node.siblings; + const l = sibs.length; + const { index } = node; + if (loop) { + return sibs[(index - 1 + l) % l]; + } else { + if (index === 0) + return null; + return sibs[index - 1]; + } +} +function rawGetParent(node) { + return node.parent; +} +function getChild(node, options = {}) { + const { reverse = false } = options; + const { children } = node; + if (children) { + const { length } = children; + const start = reverse ? length - 1 : 0; + const end = reverse ? -1 : length; + const delta = reverse ? -1 : 1; + for (let i = start; i !== end; i += delta) { + const child = children[i]; + if (!child.disabled && !child.ignored) { + if (child.isGroup) { + const childInGroup = getChild(child, options); + if (childInGroup !== null) + return childInGroup; + } else { + return child; + } + } + } + } + return null; +} +const moveMethods = { + getChild() { + if (this.ignored) + return null; + return getChild(this); + }, + getParent() { + const { parent } = this; + if (parent === null || parent === void 0 ? void 0 : parent.isGroup) { + return parent.getParent(); + } + return parent; + }, + getNext(options = {}) { + return move(this, "next", options); + }, + getPrev(options = {}) { + return move(this, "prev", options); + } +}; +function flatten(treeNodes, expandedKeys) { + const expandedKeySet = expandedKeys ? new Set(expandedKeys) : void 0; + const flattenedNodes = []; + function traverse(treeNodes2) { + treeNodes2.forEach((treeNode) => { + flattenedNodes.push(treeNode); + if (treeNode.isLeaf || !treeNode.children || treeNode.ignored) + return; + if (treeNode.isGroup) { + traverse(treeNode.children); + } else if ( + // normal non-leaf node + expandedKeySet === void 0 || expandedKeySet.has(treeNode.key) + ) { + traverse(treeNode.children); + } + }); + } + traverse(treeNodes); + return flattenedNodes; +} +function contains(parent, child) { + const parentKey = parent.key; + while (child) { + if (child.key === parentKey) + return true; + child = child.parent; + } + return false; +} +function createTreeNodes(rawNodes, treeNodeMap, levelTreeNodeMap, nodeProto, getChildren, parent = null, level = 0) { + const treeNodes = []; + rawNodes.forEach((rawNode, index) => { + var _a; + const treeNode = Object.create(nodeProto); + treeNode.rawNode = rawNode; + treeNode.siblings = treeNodes; + treeNode.level = level; + treeNode.index = index; + treeNode.isFirstChild = index === 0; + treeNode.isLastChild = index + 1 === rawNodes.length; + treeNode.parent = parent; + if (!treeNode.ignored) { + const rawChildren = getChildren(rawNode); + if (Array.isArray(rawChildren)) { + treeNode.children = createTreeNodes(rawChildren, treeNodeMap, levelTreeNodeMap, nodeProto, getChildren, treeNode, level + 1); + } + } + treeNodes.push(treeNode); + treeNodeMap.set(treeNode.key, treeNode); + if (!levelTreeNodeMap.has(level)) + levelTreeNodeMap.set(level, []); + (_a = levelTreeNodeMap.get(level)) === null || _a === void 0 ? void 0 : _a.push(treeNode); + }); + return treeNodes; +} +function createTreeMate(rawNodes, options = {}) { + var _a; + const treeNodeMap = /* @__PURE__ */ new Map(); + const levelTreeNodeMap = /* @__PURE__ */ new Map(); + const { getDisabled = isDisabled, getIgnored = isIgnored, getIsGroup = isGroup, getKey = defaultGetKey } = options; + const _getChildren = (_a = options.getChildren) !== null && _a !== void 0 ? _a : defaultGetChildren; + const getChildren = options.ignoreEmptyChildren ? (node) => { + const children = _getChildren(node); + if (Array.isArray(children)) { + if (!children.length) + return null; + return children; + } + return children; + } : _getChildren; + const nodeProto = Object.assign({ + get key() { + return getKey(this.rawNode); + }, + get disabled() { + return getDisabled(this.rawNode); + }, + get isGroup() { + return getIsGroup(this.rawNode); + }, + get isLeaf() { + return isLeaf(this.rawNode, getChildren); + }, + get shallowLoaded() { + return isShallowLoaded(this.rawNode, getChildren); + }, + get ignored() { + return getIgnored(this.rawNode); + }, + contains(node) { + return contains(this, node); + } + }, moveMethods); + const treeNodes = createTreeNodes(rawNodes, treeNodeMap, levelTreeNodeMap, nodeProto, getChildren); + function getNode(key) { + if (key === null || key === void 0) + return null; + const tmNode = treeNodeMap.get(key); + if (tmNode && !tmNode.isGroup && !tmNode.ignored) { + return tmNode; + } + return null; + } + function _getNode(key) { + if (key === null || key === void 0) + return null; + const tmNode = treeNodeMap.get(key); + if (tmNode && !tmNode.ignored) { + return tmNode; + } + return null; + } + function getPrev(key, options2) { + const node = _getNode(key); + if (!node) + return null; + return node.getPrev(options2); + } + function getNext(key, options2) { + const node = _getNode(key); + if (!node) + return null; + return node.getNext(options2); + } + function getParent(key) { + const node = _getNode(key); + if (!node) + return null; + return node.getParent(); + } + function getChild2(key) { + const node = _getNode(key); + if (!node) + return null; + return node.getChild(); + } + const treemate = { + treeNodes, + treeNodeMap, + levelTreeNodeMap, + maxLevel: Math.max(...levelTreeNodeMap.keys()), + getChildren, + getFlattenedNodes(expandedKeys) { + return flatten(treeNodes, expandedKeys); + }, + getNode, + getPrev, + getNext, + getParent, + getChild: getChild2, + getFirstAvailableNode() { + return getFirstAvailableNode(treeNodes); + }, + getPath(key, options2 = {}) { + return getPath(key, options2, treemate); + }, + getCheckedKeys(checkedKeys, options2 = {}) { + const { cascade = true, leafOnly = false, checkStrategy = "all", allowNotLoaded = false } = options2; + return getCheckedKeys({ + checkedKeys: unwrapCheckedKeys(checkedKeys), + indeterminateKeys: unwrapIndeterminateKeys(checkedKeys), + cascade, + leafOnly, + checkStrategy, + allowNotLoaded + }, treemate); + }, + check(keysToCheck, checkedKeys, options2 = {}) { + const { cascade = true, leafOnly = false, checkStrategy = "all", allowNotLoaded = false } = options2; + return getCheckedKeys({ + checkedKeys: unwrapCheckedKeys(checkedKeys), + indeterminateKeys: unwrapIndeterminateKeys(checkedKeys), + keysToCheck: keysToCheck === void 0 || keysToCheck === null ? [] : toArray(keysToCheck), + cascade, + leafOnly, + checkStrategy, + allowNotLoaded + }, treemate); + }, + uncheck(keysToUncheck, checkedKeys, options2 = {}) { + const { cascade = true, leafOnly = false, checkStrategy = "all", allowNotLoaded = false } = options2; + return getCheckedKeys({ + checkedKeys: unwrapCheckedKeys(checkedKeys), + indeterminateKeys: unwrapIndeterminateKeys(checkedKeys), + keysToUncheck: keysToUncheck === null || keysToUncheck === void 0 ? [] : toArray(keysToUncheck), + cascade, + leafOnly, + checkStrategy, + allowNotLoaded + }, treemate); + }, + getNonLeafKeys(options2 = {}) { + return getNonLeafKeys(treeNodes, options2); + } + }; + return treemate; +} +const dropdownMenuInjectionKey = createInjectionKey("n-dropdown-menu"); +const dropdownInjectionKey = createInjectionKey("n-dropdown"); +const dropdownOptionInjectionKey = createInjectionKey("n-dropdown-option"); +const NDropdownDivider = defineComponent({ + name: "DropdownDivider", + props: { + clsPrefix: { + type: String, + required: true + } + }, + render() { + return h("div", { + class: `${this.clsPrefix}-dropdown-divider` + }); + } +}); +const NDropdownGroupHeader = defineComponent({ + name: "DropdownGroupHeader", + props: { + clsPrefix: { + type: String, + required: true + }, + tmNode: { + type: Object, + required: true + } + }, + setup() { + const { + showIconRef, + hasSubmenuRef + } = inject(dropdownMenuInjectionKey); + const { + renderLabelRef, + labelFieldRef, + nodePropsRef, + renderOptionRef + } = inject(dropdownInjectionKey); + return { + labelField: labelFieldRef, + showIcon: showIconRef, + hasSubmenu: hasSubmenuRef, + renderLabel: renderLabelRef, + nodeProps: nodePropsRef, + renderOption: renderOptionRef + }; + }, + render() { + var _a; + const { + clsPrefix, + hasSubmenu, + showIcon, + nodeProps, + renderLabel, + renderOption + } = this; + const { + rawNode + } = this.tmNode; + const node = h("div", Object.assign({ + class: `${clsPrefix}-dropdown-option` + }, nodeProps === null || nodeProps === void 0 ? void 0 : nodeProps(rawNode)), h("div", { + class: `${clsPrefix}-dropdown-option-body ${clsPrefix}-dropdown-option-body--group` + }, h("div", { + "data-dropdown-option": true, + class: [`${clsPrefix}-dropdown-option-body__prefix`, showIcon && `${clsPrefix}-dropdown-option-body__prefix--show-icon`] + }, render(rawNode.icon)), h("div", { + class: `${clsPrefix}-dropdown-option-body__label`, + "data-dropdown-option": true + }, renderLabel ? renderLabel(rawNode) : render((_a = rawNode.title) !== null && _a !== void 0 ? _a : rawNode[this.labelField])), h("div", { + class: [`${clsPrefix}-dropdown-option-body__suffix`, hasSubmenu && `${clsPrefix}-dropdown-option-body__suffix--has-submenu`], + "data-dropdown-option": true + }))); + if (renderOption) { + return renderOption({ + node, + option: rawNode + }); + } + return node; + } +}); +function isSubmenuNode(rawNode, childrenField) { + return rawNode.type === "submenu" || rawNode.type === void 0 && rawNode[childrenField] !== void 0; +} +function isGroupNode(rawNode) { + return rawNode.type === "group"; +} +function isDividerNode(rawNode) { + return rawNode.type === "divider"; +} +function isRenderNode(rawNode) { + return rawNode.type === "render"; +} +const NDropdownOption = defineComponent({ + name: "DropdownOption", + props: { + clsPrefix: { + type: String, + required: true + }, + tmNode: { + type: Object, + required: true + }, + parentKey: { + type: [String, Number], + default: null + }, + placement: { + type: String, + default: "right-start" + }, + props: Object, + scrollable: Boolean + }, + setup(props) { + const NDropdown = inject(dropdownInjectionKey); + const { + hoverKeyRef, + keyboardKeyRef, + lastToggledSubmenuKeyRef, + pendingKeyPathRef, + activeKeyPathRef, + animatedRef, + mergedShowRef, + renderLabelRef, + renderIconRef, + labelFieldRef, + childrenFieldRef, + renderOptionRef, + nodePropsRef, + menuPropsRef + } = NDropdown; + const NDropdownOption2 = inject(dropdownOptionInjectionKey, null); + const NDropdownMenu2 = inject(dropdownMenuInjectionKey); + const NPopoverBody = inject(popoverBodyInjectionKey); + const rawNodeRef = computed(() => props.tmNode.rawNode); + const hasSubmenuRef = computed(() => { + const { + value: childrenField + } = childrenFieldRef; + return isSubmenuNode(props.tmNode.rawNode, childrenField); + }); + const mergedDisabledRef = computed(() => { + const { + disabled + } = props.tmNode; + return disabled; + }); + const showSubmenuRef = computed(() => { + if (!hasSubmenuRef.value) return false; + const { + key, + disabled + } = props.tmNode; + if (disabled) return false; + const { + value: hoverKey + } = hoverKeyRef; + const { + value: keyboardKey + } = keyboardKeyRef; + const { + value: lastToggledSubmenuKey + } = lastToggledSubmenuKeyRef; + const { + value: pendingKeyPath + } = pendingKeyPathRef; + if (hoverKey !== null) return pendingKeyPath.includes(key); + if (keyboardKey !== null) { + return pendingKeyPath.includes(key) && pendingKeyPath[pendingKeyPath.length - 1] !== key; + } + if (lastToggledSubmenuKey !== null) return pendingKeyPath.includes(key); + return false; + }); + const shouldDelayRef = computed(() => { + return keyboardKeyRef.value === null && !animatedRef.value; + }); + const deferredShowSubmenuRef = useDeferredTrue(showSubmenuRef, 300, shouldDelayRef); + const parentEnteringSubmenuRef = computed(() => { + return !!(NDropdownOption2 === null || NDropdownOption2 === void 0 ? void 0 : NDropdownOption2.enteringSubmenuRef.value); + }); + const enteringSubmenuRef = ref(false); + provide(dropdownOptionInjectionKey, { + enteringSubmenuRef + }); + function handleSubmenuBeforeEnter() { + enteringSubmenuRef.value = true; + } + function handleSubmenuAfterEnter() { + enteringSubmenuRef.value = false; + } + function handleMouseEnter() { + const { + parentKey, + tmNode + } = props; + if (tmNode.disabled) return; + if (!mergedShowRef.value) return; + lastToggledSubmenuKeyRef.value = parentKey; + keyboardKeyRef.value = null; + hoverKeyRef.value = tmNode.key; + } + function handleMouseMove() { + const { + tmNode + } = props; + if (tmNode.disabled) return; + if (!mergedShowRef.value) return; + if (hoverKeyRef.value === tmNode.key) return; + handleMouseEnter(); + } + function handleMouseLeave(e) { + if (props.tmNode.disabled) return; + if (!mergedShowRef.value) return; + const { + relatedTarget + } = e; + if (relatedTarget && !happensIn({ + target: relatedTarget + }, "dropdownOption") && !happensIn({ + target: relatedTarget + }, "scrollbarRail")) { + hoverKeyRef.value = null; + } + } + function handleClick() { + const { + value: hasSubmenu + } = hasSubmenuRef; + const { + tmNode + } = props; + if (!mergedShowRef.value) return; + if (!hasSubmenu && !tmNode.disabled) { + NDropdown.doSelect(tmNode.key, tmNode.rawNode); + NDropdown.doUpdateShow(false); + } + } + return { + labelField: labelFieldRef, + renderLabel: renderLabelRef, + renderIcon: renderIconRef, + siblingHasIcon: NDropdownMenu2.showIconRef, + siblingHasSubmenu: NDropdownMenu2.hasSubmenuRef, + menuProps: menuPropsRef, + popoverBody: NPopoverBody, + animated: animatedRef, + mergedShowSubmenu: computed(() => { + return deferredShowSubmenuRef.value && !parentEnteringSubmenuRef.value; + }), + rawNode: rawNodeRef, + hasSubmenu: hasSubmenuRef, + pending: useMemo(() => { + const { + value: pendingKeyPath + } = pendingKeyPathRef; + const { + key + } = props.tmNode; + return pendingKeyPath.includes(key); + }), + childActive: useMemo(() => { + const { + value: activeKeyPath + } = activeKeyPathRef; + const { + key + } = props.tmNode; + const index = activeKeyPath.findIndex((k) => key === k); + if (index === -1) return false; + return index < activeKeyPath.length - 1; + }), + active: useMemo(() => { + const { + value: activeKeyPath + } = activeKeyPathRef; + const { + key + } = props.tmNode; + const index = activeKeyPath.findIndex((k) => key === k); + if (index === -1) return false; + return index === activeKeyPath.length - 1; + }), + mergedDisabled: mergedDisabledRef, + renderOption: renderOptionRef, + nodeProps: nodePropsRef, + handleClick, + handleMouseMove, + handleMouseEnter, + handleMouseLeave, + handleSubmenuBeforeEnter, + handleSubmenuAfterEnter + }; + }, + render() { + var _a, _b; + const { + animated, + rawNode, + mergedShowSubmenu, + clsPrefix, + siblingHasIcon, + siblingHasSubmenu, + renderLabel, + renderIcon, + renderOption, + nodeProps, + props, + scrollable + } = this; + let submenuVNode = null; + if (mergedShowSubmenu) { + const submenuNodeProps = (_a = this.menuProps) === null || _a === void 0 ? void 0 : _a.call(this, rawNode, rawNode.children); + submenuVNode = h(NDropdownMenu, Object.assign({}, submenuNodeProps, { + clsPrefix, + scrollable: this.scrollable, + tmNodes: this.tmNode.children, + parentKey: this.tmNode.key + })); + } + const builtinProps = { + class: [`${clsPrefix}-dropdown-option-body`, this.pending && `${clsPrefix}-dropdown-option-body--pending`, this.active && `${clsPrefix}-dropdown-option-body--active`, this.childActive && `${clsPrefix}-dropdown-option-body--child-active`, this.mergedDisabled && `${clsPrefix}-dropdown-option-body--disabled`], + onMousemove: this.handleMouseMove, + onMouseenter: this.handleMouseEnter, + onMouseleave: this.handleMouseLeave, + onClick: this.handleClick + }; + const optionNodeProps = nodeProps === null || nodeProps === void 0 ? void 0 : nodeProps(rawNode); + const node = h("div", Object.assign({ + class: [`${clsPrefix}-dropdown-option`, optionNodeProps === null || optionNodeProps === void 0 ? void 0 : optionNodeProps.class], + "data-dropdown-option": true + }, optionNodeProps), h("div", mergeProps(builtinProps, props), [h("div", { + class: [`${clsPrefix}-dropdown-option-body__prefix`, siblingHasIcon && `${clsPrefix}-dropdown-option-body__prefix--show-icon`] + }, [renderIcon ? renderIcon(rawNode) : render(rawNode.icon)]), h("div", { + "data-dropdown-option": true, + class: `${clsPrefix}-dropdown-option-body__label` + }, renderLabel ? renderLabel(rawNode) : render((_b = rawNode[this.labelField]) !== null && _b !== void 0 ? _b : rawNode.title)), h("div", { + "data-dropdown-option": true, + class: [`${clsPrefix}-dropdown-option-body__suffix`, siblingHasSubmenu && `${clsPrefix}-dropdown-option-body__suffix--has-submenu`] + }, this.hasSubmenu ? h(NIcon, null, { + default: () => h(ChevronRightIcon, null) + }) : null)]), this.hasSubmenu ? h(Binder, null, { + default: () => [h(VTarget, null, { + default: () => h("div", { + class: `${clsPrefix}-dropdown-offset-container` + }, h(VFollower, { + show: this.mergedShowSubmenu, + placement: this.placement, + to: scrollable ? this.popoverBody || void 0 : void 0, + teleportDisabled: !scrollable + }, { + default: () => { + return h("div", { + class: `${clsPrefix}-dropdown-menu-wrapper` + }, animated ? h(Transition, { + onBeforeEnter: this.handleSubmenuBeforeEnter, + onAfterEnter: this.handleSubmenuAfterEnter, + name: "fade-in-scale-up-transition", + appear: true + }, { + default: () => submenuVNode + }) : submenuVNode); + } + })) + })] + }) : null); + if (renderOption) { + return renderOption({ + node, + option: rawNode + }); + } + return node; + } +}); +const NDropdownGroup = defineComponent({ + name: "NDropdownGroup", + props: { + clsPrefix: { + type: String, + required: true + }, + tmNode: { + type: Object, + required: true + }, + parentKey: { + type: [String, Number], + default: null + } + }, + render() { + const { + tmNode, + parentKey, + clsPrefix + } = this; + const { + children + } = tmNode; + return h(Fragment, null, h(NDropdownGroupHeader, { + clsPrefix, + tmNode, + key: tmNode.key + }), children === null || children === void 0 ? void 0 : children.map((child) => { + const { + rawNode + } = child; + if (rawNode.show === false) return null; + if (isDividerNode(rawNode)) { + return h(NDropdownDivider, { + clsPrefix, + key: child.key + }); + } + if (child.isGroup) { + warn("dropdown", "`group` node is not allowed to be put in `group` node."); + return null; + } + return h(NDropdownOption, { + clsPrefix, + tmNode: child, + parentKey, + key: child.key + }); + })); + } +}); +const NDropdownRenderOption = defineComponent({ + name: "DropdownRenderOption", + props: { + tmNode: { + type: Object, + required: true + } + }, + render() { + const { + rawNode: { + render: render2, + props + } + } = this.tmNode; + return h("div", props, [render2 === null || render2 === void 0 ? void 0 : render2()]); + } +}); +const NDropdownMenu = defineComponent({ + name: "DropdownMenu", + props: { + scrollable: Boolean, + showArrow: Boolean, + arrowStyle: [String, Object], + clsPrefix: { + type: String, + required: true + }, + tmNodes: { + type: Array, + default: () => [] + }, + parentKey: { + type: [String, Number], + default: null + } + }, + setup(props) { + const { + renderIconRef, + childrenFieldRef + } = inject(dropdownInjectionKey); + provide(dropdownMenuInjectionKey, { + showIconRef: computed(() => { + const renderIcon = renderIconRef.value; + return props.tmNodes.some((tmNode) => { + var _a; + if (tmNode.isGroup) { + return (_a = tmNode.children) === null || _a === void 0 ? void 0 : _a.some(({ + rawNode: rawChild + }) => renderIcon ? renderIcon(rawChild) : rawChild.icon); + } + const { + rawNode + } = tmNode; + return renderIcon ? renderIcon(rawNode) : rawNode.icon; + }); + }), + hasSubmenuRef: computed(() => { + const { + value: childrenField + } = childrenFieldRef; + return props.tmNodes.some((tmNode) => { + var _a; + if (tmNode.isGroup) { + return (_a = tmNode.children) === null || _a === void 0 ? void 0 : _a.some(({ + rawNode: rawChild + }) => isSubmenuNode(rawChild, childrenField)); + } + const { + rawNode + } = tmNode; + return isSubmenuNode(rawNode, childrenField); + }); + }) + }); + const bodyRef = ref(null); + provide(modalBodyInjectionKey, null); + provide(drawerBodyInjectionKey, null); + provide(popoverBodyInjectionKey, bodyRef); + return { + bodyRef + }; + }, + render() { + const { + parentKey, + clsPrefix, + scrollable + } = this; + const menuOptionsNode = this.tmNodes.map((tmNode) => { + const { + rawNode + } = tmNode; + if (rawNode.show === false) return null; + if (isRenderNode(rawNode)) { + return h(NDropdownRenderOption, { + tmNode, + key: tmNode.key + }); + } + if (isDividerNode(rawNode)) { + return h(NDropdownDivider, { + clsPrefix, + key: tmNode.key + }); + } + if (isGroupNode(rawNode)) { + return h(NDropdownGroup, { + clsPrefix, + tmNode, + parentKey, + key: tmNode.key + }); + } + return h(NDropdownOption, { + clsPrefix, + tmNode, + parentKey, + key: tmNode.key, + props: rawNode.props, + scrollable + }); + }); + return h("div", { + class: [`${clsPrefix}-dropdown-menu`, scrollable && `${clsPrefix}-dropdown-menu--scrollable`], + ref: "bodyRef" + }, scrollable ? h(XScrollbar, { + contentClass: `${clsPrefix}-dropdown-menu__content` + }, { + default: () => menuOptionsNode + }) : menuOptionsNode, this.showArrow ? renderArrow({ + clsPrefix, + arrowStyle: this.arrowStyle, + arrowClass: void 0, + arrowWrapperClass: void 0, + arrowWrapperStyle: void 0 + }) : null); + } +}); +const style = cB("dropdown-menu", ` + transform-origin: var(--v-transform-origin); + background-color: var(--n-color); + border-radius: var(--n-border-radius); + box-shadow: var(--n-box-shadow); + position: relative; + transition: + background-color .3s var(--n-bezier), + box-shadow .3s var(--n-bezier); +`, [fadeInScaleUpTransition(), cB("dropdown-option", ` + position: relative; + `, [c("a", ` + text-decoration: none; + color: inherit; + outline: none; + `, [c("&::before", ` + content: ""; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + `)]), cB("dropdown-option-body", ` + display: flex; + cursor: pointer; + position: relative; + height: var(--n-option-height); + line-height: var(--n-option-height); + font-size: var(--n-font-size); + color: var(--n-option-text-color); + transition: color .3s var(--n-bezier); + `, [c("&::before", ` + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 4px; + right: 4px; + transition: background-color .3s var(--n-bezier); + border-radius: var(--n-border-radius); + `), cNotM("disabled", [cM("pending", ` + color: var(--n-option-text-color-hover); + `, [cE("prefix, suffix", ` + color: var(--n-option-text-color-hover); + `), c("&::before", "background-color: var(--n-option-color-hover);")]), cM("active", ` + color: var(--n-option-text-color-active); + `, [cE("prefix, suffix", ` + color: var(--n-option-text-color-active); + `), c("&::before", "background-color: var(--n-option-color-active);")]), cM("child-active", ` + color: var(--n-option-text-color-child-active); + `, [cE("prefix, suffix", ` + color: var(--n-option-text-color-child-active); + `)])]), cM("disabled", ` + cursor: not-allowed; + opacity: var(--n-option-opacity-disabled); + `), cM("group", ` + font-size: calc(var(--n-font-size) - 1px); + color: var(--n-group-header-text-color); + `, [cE("prefix", ` + width: calc(var(--n-option-prefix-width) / 2); + `, [cM("show-icon", ` + width: calc(var(--n-option-icon-prefix-width) / 2); + `)])]), cE("prefix", ` + width: var(--n-option-prefix-width); + display: flex; + justify-content: center; + align-items: center; + color: var(--n-prefix-color); + transition: color .3s var(--n-bezier); + z-index: 1; + `, [cM("show-icon", ` + width: var(--n-option-icon-prefix-width); + `), cB("icon", ` + font-size: var(--n-option-icon-size); + `)]), cE("label", ` + white-space: nowrap; + flex: 1; + z-index: 1; + `), cE("suffix", ` + box-sizing: border-box; + flex-grow: 0; + flex-shrink: 0; + display: flex; + justify-content: flex-end; + align-items: center; + min-width: var(--n-option-suffix-width); + padding: 0 8px; + transition: color .3s var(--n-bezier); + color: var(--n-suffix-color); + z-index: 1; + `, [cM("has-submenu", ` + width: var(--n-option-icon-suffix-width); + `), cB("icon", ` + font-size: var(--n-option-icon-size); + `)]), cB("dropdown-menu", "pointer-events: all;")]), cB("dropdown-offset-container", ` + pointer-events: none; + position: absolute; + left: 0; + right: 0; + top: -4px; + bottom: -4px; + `)]), cB("dropdown-divider", ` + transition: background-color .3s var(--n-bezier); + background-color: var(--n-divider-color); + height: 1px; + margin: 4px 0; + `), cB("dropdown-menu-wrapper", ` + transform-origin: var(--v-transform-origin); + width: fit-content; + `), c(">", [cB("scrollbar", ` + height: inherit; + max-height: inherit; + `)]), cNotM("scrollable", ` + padding: var(--n-padding); + `), cM("scrollable", [cE("content", ` + padding: var(--n-padding); + `)])]); +const dropdownBaseProps = { + animated: { + type: Boolean, + default: true + }, + keyboard: { + type: Boolean, + default: true + }, + size: { + type: String, + default: "medium" + }, + inverted: Boolean, + placement: { + type: String, + default: "bottom" + }, + onSelect: [Function, Array], + options: { + type: Array, + default: () => [] + }, + menuProps: Function, + showArrow: Boolean, + renderLabel: Function, + renderIcon: Function, + renderOption: Function, + nodeProps: Function, + labelField: { + type: String, + default: "label" + }, + keyField: { + type: String, + default: "key" + }, + childrenField: { + type: String, + default: "children" + }, + // for menu, not documented + value: [String, Number] +}; +const popoverPropKeys = Object.keys(popoverBaseProps); +const dropdownProps = Object.assign(Object.assign(Object.assign({}, popoverBaseProps), dropdownBaseProps), useTheme.props); +const __unplugin_components_0 = defineComponent({ + name: "Dropdown", + inheritAttrs: false, + props: dropdownProps, + setup(props) { + const uncontrolledShowRef = ref(false); + const mergedShowRef = useMergedState(toRef(props, "show"), uncontrolledShowRef); + const treemateRef = computed(() => { + const { + keyField, + childrenField + } = props; + return createTreeMate(props.options, { + getKey(node) { + return node[keyField]; + }, + getDisabled(node) { + return node.disabled === true; + }, + getIgnored(node) { + return node.type === "divider" || node.type === "render"; + }, + getChildren(node) { + return node[childrenField]; + } + }); + }); + const tmNodesRef = computed(() => { + return treemateRef.value.treeNodes; + }); + const hoverKeyRef = ref(null); + const keyboardKeyRef = ref(null); + const lastToggledSubmenuKeyRef = ref(null); + const pendingKeyRef = computed(() => { + var _a, _b, _c; + return (_c = (_b = (_a = hoverKeyRef.value) !== null && _a !== void 0 ? _a : keyboardKeyRef.value) !== null && _b !== void 0 ? _b : lastToggledSubmenuKeyRef.value) !== null && _c !== void 0 ? _c : null; + }); + const pendingKeyPathRef = computed(() => treemateRef.value.getPath(pendingKeyRef.value).keyPath); + const activeKeyPathRef = computed(() => treemateRef.value.getPath(props.value).keyPath); + const keyboardEnabledRef = useMemo(() => { + return props.keyboard && mergedShowRef.value; + }); + useKeyboard({ + keydown: { + ArrowUp: { + prevent: true, + handler: handleKeydownUp + }, + ArrowRight: { + prevent: true, + handler: handleKeydownRight + }, + ArrowDown: { + prevent: true, + handler: handleKeydownDown + }, + ArrowLeft: { + prevent: true, + handler: handleKeydownLeft + }, + Enter: { + prevent: true, + handler: handleKeydownEnter + }, + Escape: handleKeydownEsc + } + }, keyboardEnabledRef); + const { + mergedClsPrefixRef, + inlineThemeDisabled + } = useConfig(props); + const themeRef = useTheme("Dropdown", "-dropdown", style, dropdownLight, props, mergedClsPrefixRef); + provide(dropdownInjectionKey, { + labelFieldRef: toRef(props, "labelField"), + childrenFieldRef: toRef(props, "childrenField"), + renderLabelRef: toRef(props, "renderLabel"), + renderIconRef: toRef(props, "renderIcon"), + hoverKeyRef, + keyboardKeyRef, + lastToggledSubmenuKeyRef, + pendingKeyPathRef, + activeKeyPathRef, + animatedRef: toRef(props, "animated"), + mergedShowRef, + nodePropsRef: toRef(props, "nodeProps"), + renderOptionRef: toRef(props, "renderOption"), + menuPropsRef: toRef(props, "menuProps"), + doSelect, + doUpdateShow + }); + watch(mergedShowRef, (value) => { + if (!props.animated && !value) { + clearPendingState(); + } + }); + function doSelect(key, node) { + const { + onSelect + } = props; + if (onSelect) call(onSelect, key, node); + } + function doUpdateShow(value) { + const { + "onUpdate:show": _onUpdateShow, + onUpdateShow + } = props; + if (_onUpdateShow) call(_onUpdateShow, value); + if (onUpdateShow) call(onUpdateShow, value); + uncontrolledShowRef.value = value; + } + function clearPendingState() { + hoverKeyRef.value = null; + keyboardKeyRef.value = null; + lastToggledSubmenuKeyRef.value = null; + } + function handleKeydownEsc() { + doUpdateShow(false); + } + function handleKeydownLeft() { + handleKeydown("left"); + } + function handleKeydownRight() { + handleKeydown("right"); + } + function handleKeydownUp() { + handleKeydown("up"); + } + function handleKeydownDown() { + handleKeydown("down"); + } + function handleKeydownEnter() { + const pendingNode = getPendingNode(); + if ((pendingNode === null || pendingNode === void 0 ? void 0 : pendingNode.isLeaf) && mergedShowRef.value) { + doSelect(pendingNode.key, pendingNode.rawNode); + doUpdateShow(false); + } + } + function getPendingNode() { + var _a; + const { + value: treeMate + } = treemateRef; + const { + value: pendingKey + } = pendingKeyRef; + if (!treeMate || pendingKey === null) return null; + return (_a = treeMate.getNode(pendingKey)) !== null && _a !== void 0 ? _a : null; + } + function handleKeydown(direction) { + const { + value: pendingKey + } = pendingKeyRef; + const { + value: { + getFirstAvailableNode: getFirstAvailableNode2 + } + } = treemateRef; + let nextKeyboardKey = null; + if (pendingKey === null) { + const firstNode = getFirstAvailableNode2(); + if (firstNode !== null) { + nextKeyboardKey = firstNode.key; + } + } else { + const currentNode = getPendingNode(); + if (currentNode) { + let nextNode; + switch (direction) { + case "down": + nextNode = currentNode.getNext(); + break; + case "up": + nextNode = currentNode.getPrev(); + break; + case "right": + nextNode = currentNode.getChild(); + break; + case "left": + nextNode = currentNode.getParent(); + break; + } + if (nextNode) nextKeyboardKey = nextNode.key; + } + } + if (nextKeyboardKey !== null) { + hoverKeyRef.value = null; + keyboardKeyRef.value = nextKeyboardKey; + } + } + const cssVarsRef = computed(() => { + const { + size, + inverted + } = props; + const { + common: { + cubicBezierEaseInOut + }, + self + } = themeRef.value; + const { + padding, + dividerColor, + borderRadius, + optionOpacityDisabled, + [createKey("optionIconSuffixWidth", size)]: optionIconSuffixWidth, + [createKey("optionSuffixWidth", size)]: optionSuffixWidth, + [createKey("optionIconPrefixWidth", size)]: optionIconPrefixWidth, + [createKey("optionPrefixWidth", size)]: optionPrefixWidth, + [createKey("fontSize", size)]: fontSize, + [createKey("optionHeight", size)]: optionHeight, + [createKey("optionIconSize", size)]: optionIconSize + } = self; + const vars = { + "--n-bezier": cubicBezierEaseInOut, + "--n-font-size": fontSize, + "--n-padding": padding, + "--n-border-radius": borderRadius, + "--n-option-height": optionHeight, + "--n-option-prefix-width": optionPrefixWidth, + "--n-option-icon-prefix-width": optionIconPrefixWidth, + "--n-option-suffix-width": optionSuffixWidth, + "--n-option-icon-suffix-width": optionIconSuffixWidth, + "--n-option-icon-size": optionIconSize, + "--n-divider-color": dividerColor, + "--n-option-opacity-disabled": optionOpacityDisabled + }; + if (inverted) { + vars["--n-color"] = self.colorInverted; + vars["--n-option-color-hover"] = self.optionColorHoverInverted; + vars["--n-option-color-active"] = self.optionColorActiveInverted; + vars["--n-option-text-color"] = self.optionTextColorInverted; + vars["--n-option-text-color-hover"] = self.optionTextColorHoverInverted; + vars["--n-option-text-color-active"] = self.optionTextColorActiveInverted; + vars["--n-option-text-color-child-active"] = self.optionTextColorChildActiveInverted; + vars["--n-prefix-color"] = self.prefixColorInverted; + vars["--n-suffix-color"] = self.suffixColorInverted; + vars["--n-group-header-text-color"] = self.groupHeaderTextColorInverted; + } else { + vars["--n-color"] = self.color; + vars["--n-option-color-hover"] = self.optionColorHover; + vars["--n-option-color-active"] = self.optionColorActive; + vars["--n-option-text-color"] = self.optionTextColor; + vars["--n-option-text-color-hover"] = self.optionTextColorHover; + vars["--n-option-text-color-active"] = self.optionTextColorActive; + vars["--n-option-text-color-child-active"] = self.optionTextColorChildActive; + vars["--n-prefix-color"] = self.prefixColor; + vars["--n-suffix-color"] = self.suffixColor; + vars["--n-group-header-text-color"] = self.groupHeaderTextColor; + } + return vars; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("dropdown", computed(() => `${props.size[0]}${props.inverted ? "i" : ""}`), cssVarsRef, props) : void 0; + return { + mergedClsPrefix: mergedClsPrefixRef, + mergedTheme: themeRef, + // data + tmNodes: tmNodesRef, + // show + mergedShow: mergedShowRef, + // methods + handleAfterLeave: () => { + if (!props.animated) return; + clearPendingState(); + }, + doUpdateShow, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }; + }, + render() { + const renderPopoverBody = (className, ref2, style2, onMouseenter, onMouseleave) => { + var _a; + const { + mergedClsPrefix, + menuProps + } = this; + (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this); + const menuNodeProps = (menuProps === null || menuProps === void 0 ? void 0 : menuProps(void 0, this.tmNodes.map((v) => v.rawNode))) || {}; + const dropdownProps2 = { + ref: createRefSetter(ref2), + class: [className, `${mergedClsPrefix}-dropdown`, this.themeClass], + clsPrefix: mergedClsPrefix, + tmNodes: this.tmNodes, + style: [...style2, this.cssVars], + showArrow: this.showArrow, + arrowStyle: this.arrowStyle, + scrollable: this.scrollable, + onMouseenter, + onMouseleave + }; + return h(NDropdownMenu, mergeProps(this.$attrs, dropdownProps2, menuNodeProps)); + }; + const { + mergedTheme + } = this; + const popoverProps = { + show: this.mergedShow, + theme: mergedTheme.peers.Popover, + themeOverrides: mergedTheme.peerOverrides.Popover, + internalOnAfterLeave: this.handleAfterLeave, + internalRenderBody: renderPopoverBody, + onUpdateShow: this.doUpdateShow, + "onUpdate:show": void 0 + }; + return h(__unplugin_components_5, Object.assign({}, keep(this.$props, popoverPropKeys), popoverProps), { + trigger: () => { + var _a, _b; + return (_b = (_a = this.$slots).default) === null || _b === void 0 ? void 0 : _b.call(_a); + } + }); + } +}); +const alipay = "" + new URL("alipay-CcfmUela.png", import.meta.url).href; +const wechat = "" + new URL("wechat-DjfpYhZS.png", import.meta.url).href; +const _hoisted_1$1 = { class: "relative inline-block" }; +const _hoisted_2$1 = { class: "p-6 rounded-lg shadow-lg bg-light dark:bg-gray-800" }; +const _hoisted_3$1 = { class: "flex gap-10" }; +const _hoisted_4$1 = { class: "flex flex-col items-center gap-2" }; +const _hoisted_5$1 = { class: "flex flex-col items-center gap-2" }; +const _sfc_main$1 = { + __name: "Coffee", + props: { + alipayQR: { + type: String, + required: true + }, + wechatQR: { + type: String, + required: true + } + }, + setup(__props) { + const message = useMessage(); + const copyQQ = () => { + navigator.clipboard.writeText("789288579"); + message.success("已复制到剪贴板"); + }; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$1, [ + createVNode(unref(__unplugin_components_5), { + trigger: "hover", + placement: "top", + "show-arrow": true, + raw: true, + delay: 100 + }, { + trigger: withCtx(() => [ + renderSlot(_ctx.$slots, "default", {}, () => [ + createVNode(unref(Button), { + quaternary: "", + class: "inline-flex items-center gap-2 px-4 py-2 transition-all duration-300 hover:-translate-y-0.5" + }, { + default: withCtx(() => _cache[0] || (_cache[0] = [ + createTextVNode(" 请我喝咖啡 ") + ])), + _: 1 + }) + ]) + ]), + default: withCtx(() => [ + createBaseVNode("div", _hoisted_2$1, [ + createBaseVNode("div", _hoisted_3$1, [ + createBaseVNode("div", _hoisted_4$1, [ + createVNode(unref(NImage), { + src: __props.alipayQR, + alt: "支付宝收款码", + class: "w-32 h-32 rounded-lg cursor-none", + "preview-disabled": "" + }, null, 8, ["src"]), + _cache[1] || (_cache[1] = createBaseVNode("span", { class: "text-sm text-gray-700 dark:text-gray-200" }, "支付宝", -1)) + ]), + createBaseVNode("div", _hoisted_5$1, [ + createVNode(unref(NImage), { + src: __props.wechatQR, + alt: "微信收款码", + class: "w-32 h-32 rounded-lg cursor-none", + "preview-disabled": "" + }, null, 8, ["src"]), + _cache[2] || (_cache[2] = createBaseVNode("span", { class: "text-sm text-gray-700 dark:text-gray-200" }, "微信支付", -1)) + ]) + ]), + createBaseVNode("div", { class: "mt-4" }, [ + createBaseVNode("p", { + class: "text-sm text-gray-700 dark:text-gray-200 text-center cursor-pointer hover:text-green-500", + onClick: copyQQ + }, " QQ群:789288579 ") + ]) + ]) + ]), + _: 3 + }) + ]); + }; + } +}; +const USER_SET_OPTIONS = [ + // { + // label: '打卡', + // key: 'card', + // }, + // { + // label: '听歌升级', + // key: 'card_music', + // }, + // { + // label: '歌曲次数', + // key: 'listen', + // }, + { + label: "退出登录", + key: "logout" + }, + { + label: "设置", + key: "set" + } +]; +const SEARCH_TYPES = [ + { + label: "单曲", + key: 1 + }, + { + label: "专辑", + key: 10 + }, + // { + // label: '歌手', + // key: 100, + // }, + { + label: "歌单", + key: 1e3 + }, + // { + // label: '用户', + // key: 1002, + // }, + { + label: "MV", + key: 1004 + } + // { + // label: '歌词', + // key: 1006, + // }, + // { + // label: '电台', + // key: 1009, + // }, + // { + // label: '视频', + // key: 1014, + // }, + // { + // label: '综合', + // key: 1018, + // }, +]; +const _hoisted_1 = { class: "search-box flex" }; +const _hoisted_2 = { class: "search-box-input flex-1" }; +const _hoisted_3 = { class: "w-20 px-3 flex justify-between items-center" }; +const _hoisted_4 = { class: "user-box" }; +const _hoisted_5 = { class: "user-popover" }; +const _hoisted_6 = { class: "username" }; +const _hoisted_7 = { class: "menu-items" }; +const _hoisted_8 = { class: "menu-item" }; +const _hoisted_9 = { class: "version-info" }; +const _hoisted_10 = { class: "version-number" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "SearchBar", + setup(__props) { + const router = useRouter(); + const store = useStore(); + const userSetOptions = ref(USER_SET_OPTIONS); + const hotSearchKeyword = ref("搜索点什么吧..."); + const hotSearchValue = ref(""); + const loadHotSearchKeyword = async () => { + const { data } = await getSearchKeyword(); + hotSearchKeyword.value = data.data.showKeyword; + hotSearchValue.value = data.data.realkeyword; + }; + const loadPage = async () => { + const token = localStorage.getItem("token"); + if (!token) return; + const { data } = await getUserDetail(); + store.state.user = data.profile; + localStorage.setItem("user", JSON.stringify(data.profile)); + }; + loadPage(); + watchEffect(() => { + if (store.state.user) { + userSetOptions.value = USER_SET_OPTIONS; + } else { + userSetOptions.value = USER_SET_OPTIONS.filter((item) => item.key !== "logout"); + } + }); + const restartApp = () => { + window.electron.ipcRenderer.send("restart"); + }; + const toLogin = () => { + router.push("/login"); + }; + onMounted(() => { + loadHotSearchKeyword(); + loadPage(); + checkForUpdates(); + }); + const isDarkTheme = computed({ + get: () => store.state.theme === "dark", + set: () => store.commit("toggleTheme") + }); + const searchValue = ref(""); + const search = () => { + const { value } = searchValue; + if (value === "") { + searchValue.value = hotSearchValue.value; + return; + } + if (router.currentRoute.value.path === "/search") { + store.state.searchValue = value; + return; + } + router.push({ + path: "/search", + query: { + keyword: value + } + }); + }; + const selectSearchType = (key) => { + store.state.searchType = key; + }; + const searchTypeOptions = ref(SEARCH_TYPES); + const selectItem = async (key) => { + switch (key) { + case "logout": + logout().then(() => { + store.state.user = null; + localStorage.clear(); + router.push("/login"); + }); + break; + case "login": + router.push("/login"); + break; + case "set": + router.push("/set"); + break; + case "user": + router.push("/user"); + break; + } + }; + const toGithub = () => { + window.open("https://github.com/algerkong/AlgerMusicPlayer", "_blank"); + }; + const updateInfo = ref({ + hasUpdate: false, + latestVersion: "", + currentVersion: config.version, + releaseInfo: null + }); + const checkForUpdates = async () => { + try { + const result = await checkUpdate(); + updateInfo.value = result; + } catch (error) { + console.error("检查更新失败:", error); + } + }; + const toGithubRelease = () => { + if (updateInfo.value.hasUpdate) { + window.open("https://github.com/algerkong/AlgerMusicPlayer/releases/latest", "_blank"); + } else { + window.open("https://github.com/algerkong/AlgerMusicPlayer/releases", "_blank"); + } + }; + return (_ctx, _cache) => { + const _component_n_dropdown = __unplugin_components_0; + const _component_n_input = __unplugin_components_1; + const _component_n_avatar = __unplugin_components_2; + const _component_n_switch = __unplugin_components_3; + const _component_n_tag = __unplugin_components_4; + const _component_n_popover = __unplugin_components_5; + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + createVNode(_component_n_input, { + value: searchValue.value, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => searchValue.value = $event), + size: "medium", + round: "", + placeholder: hotSearchKeyword.value, + class: "border dark:border-gray-600 border-gray-200", + onKeydown: withKeys(search, ["enter"]) + }, { + prefix: withCtx(() => _cache[5] || (_cache[5] = [ + createBaseVNode("i", { class: "iconfont icon-search" }, null, -1) + ])), + suffix: withCtx(() => [ + createVNode(_component_n_dropdown, { + trigger: "hover", + options: searchTypeOptions.value, + onSelect: selectSearchType + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("div", null, toDisplayString(searchTypeOptions.value.find((item) => item.key === unref(store).state.searchType)?.label), 1), + _cache[6] || (_cache[6] = createBaseVNode("i", { class: "iconfont icon-xiasanjiaoxing" }, null, -1)) + ]) + ]), + _: 1 + }, 8, ["options"]) + ]), + _: 1 + }, 8, ["value", "placeholder"]) + ]), + createVNode(_component_n_popover, { + trigger: "hover", + placement: "bottom", + "show-arrow": false, + raw: "" + }, { + trigger: withCtx(() => [ + createBaseVNode("div", _hoisted_4, [ + unref(store).state.user ? (openBlock(), createBlock(_component_n_avatar, { + key: 0, + class: "cursor-pointer", + circle: "", + size: "medium", + src: unref(getImgUrl)(unref(store).state.user.avatarUrl), + onClick: _cache[1] || (_cache[1] = ($event) => selectItem("user")) + }, null, 8, ["src"])) : (openBlock(), createElementBlock("div", { + key: 1, + class: "mx-2 rounded-full cursor-pointer text-sm", + onClick: toLogin + }, "登录")) + ]) + ]), + default: withCtx(() => [ + createBaseVNode("div", _hoisted_5, [ + unref(store).state.user ? (openBlock(), createElementBlock("div", { + key: 0, + class: "user-header", + onClick: _cache[2] || (_cache[2] = ($event) => selectItem("user")) + }, [ + createVNode(_component_n_avatar, { + circle: "", + size: "small", + src: unref(getImgUrl)(unref(store).state.user?.avatarUrl) + }, null, 8, ["src"]), + createBaseVNode("span", _hoisted_6, toDisplayString(unref(store).state.user?.nickname || "Theodore"), 1) + ])) : createCommentVNode("", true), + createBaseVNode("div", _hoisted_7, [ + !unref(store).state.user ? (openBlock(), createElementBlock("div", { + key: 0, + class: "menu-item", + onClick: toLogin + }, _cache[7] || (_cache[7] = [ + createBaseVNode("i", { class: "iconfont ri-login-box-line" }, null, -1), + createBaseVNode("span", null, "去登录", -1) + ]))) : createCommentVNode("", true), + createBaseVNode("div", { + class: "menu-item", + onClick: _cache[3] || (_cache[3] = ($event) => selectItem("set")) + }, _cache[8] || (_cache[8] = [ + createBaseVNode("i", { class: "iconfont ri-settings-3-line" }, null, -1), + createBaseVNode("span", null, "设置", -1) + ])), + createBaseVNode("div", _hoisted_8, [ + createBaseVNode("i", { + class: normalizeClass(["iconfont", isDarkTheme.value ? "ri-moon-line" : "ri-sun-line"]) + }, null, 2), + _cache[11] || (_cache[11] = createBaseVNode("span", null, "主题", -1)), + createVNode(_component_n_switch, { + value: isDarkTheme.value, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => isDarkTheme.value = $event), + class: "ml-auto" + }, { + checked: withCtx(() => _cache[9] || (_cache[9] = [ + createBaseVNode("i", { class: "ri-moon-line" }, null, -1) + ])), + unchecked: withCtx(() => _cache[10] || (_cache[10] = [ + createBaseVNode("i", { class: "ri-sun-line" }, null, -1) + ])), + _: 1 + }, 8, ["value"]) + ]), + createBaseVNode("div", { + class: "menu-item", + onClick: restartApp + }, _cache[12] || (_cache[12] = [ + createBaseVNode("i", { class: "iconfont ri-restart-line" }, null, -1), + createBaseVNode("span", null, "重启", -1) + ])), + createBaseVNode("div", { + class: "menu-item", + onClick: toGithubRelease + }, [ + _cache[13] || (_cache[13] = createBaseVNode("i", { class: "iconfont ri-refresh-line" }, null, -1)), + _cache[14] || (_cache[14] = createBaseVNode("span", null, "当前版本", -1)), + createBaseVNode("div", _hoisted_9, [ + createBaseVNode("span", _hoisted_10, toDisplayString(updateInfo.value.currentVersion), 1), + updateInfo.value.hasUpdate ? (openBlock(), createBlock(_component_n_tag, { + key: 0, + type: "success", + size: "small", + class: "ml-1" + }, { + default: withCtx(() => [ + createTextVNode(" New " + toDisplayString(updateInfo.value.latestVersion), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]) + ]) + ]) + ]) + ]), + _: 1 + }), + createVNode(_sfc_main$1, { + "alipay-q-r": unref(alipay), + "wechat-q-r": unref(wechat) + }, { + default: withCtx(() => [ + createBaseVNode("div", { + class: "github", + onClick: toGithub + }, _cache[15] || (_cache[15] = [ + createBaseVNode("i", { class: "ri-github-fill" }, null, -1) + ])) + ]), + _: 1 + }, 8, ["alipay-q-r", "wechat-q-r"]) + ]); + }; + } +}); +const SearchBar = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-064c45e9"]]); +export { + SearchBar as default +}; diff --git a/out/renderer/assets/SearchBar-Cx7zzS9t.js.gz b/out/renderer/assets/SearchBar-Cx7zzS9t.js.gz new file mode 100644 index 0000000..2d44eb4 Binary files /dev/null and b/out/renderer/assets/SearchBar-Cx7zzS9t.js.gz differ diff --git a/out/renderer/assets/Slider-BA6NituQ.js b/out/renderer/assets/Slider-BA6NituQ.js new file mode 100644 index 0000000..487e189 --- /dev/null +++ b/out/renderer/assets/Slider-BA6NituQ.js @@ -0,0 +1,864 @@ +import { m as c, p as cB, W as cM, Y as cE, aM as fadeInScaleUpTransition, aN as insideModal, aO as insidePopover, aP as onBeforeUpdate, q as useTheme, d as defineComponent, x as useConfig, aQ as sliderLight, r as ref, z as useFormItem, G as computed, A as toRef, C as useMergedState, E as watch, a as onBeforeUnmount, ap as useThemeClass, aR as isMounted, l as h, K as resolveSlot, ak as Transition, L as call, J as on, aS as off, M as nextTick } from "./index-DKaFsuse.js"; +import { d as useAdjustedTo, B as Binder, V as VTarget, e as VFollower } from "./use-locale-DLWAOXez.js"; +const style = c([cB("slider", ` + display: block; + padding: calc((var(--n-handle-size) - var(--n-rail-height)) / 2) 0; + position: relative; + z-index: 0; + width: 100%; + cursor: pointer; + user-select: none; + -webkit-user-select: none; + `, [cM("reverse", [cB("slider-handles", [cB("slider-handle-wrapper", ` + transform: translate(50%, -50%); + `)]), cB("slider-dots", [cB("slider-dot", ` + transform: translateX(50%, -50%); + `)]), cM("vertical", [cB("slider-handles", [cB("slider-handle-wrapper", ` + transform: translate(-50%, -50%); + `)]), cB("slider-marks", [cB("slider-mark", ` + transform: translateY(calc(-50% + var(--n-dot-height) / 2)); + `)]), cB("slider-dots", [cB("slider-dot", ` + transform: translateX(-50%) translateY(0); + `)])])]), cM("vertical", ` + box-sizing: content-box; + padding: 0 calc((var(--n-handle-size) - var(--n-rail-height)) / 2); + width: var(--n-rail-width-vertical); + height: 100%; + `, [cB("slider-handles", ` + top: calc(var(--n-handle-size) / 2); + right: 0; + bottom: calc(var(--n-handle-size) / 2); + left: 0; + `, [cB("slider-handle-wrapper", ` + top: unset; + left: 50%; + transform: translate(-50%, 50%); + `)]), cB("slider-rail", ` + height: 100%; + `, [cE("fill", ` + top: unset; + right: 0; + bottom: unset; + left: 0; + `)]), cM("with-mark", ` + width: var(--n-rail-width-vertical); + margin: 0 32px 0 8px; + `), cB("slider-marks", ` + top: calc(var(--n-handle-size) / 2); + right: unset; + bottom: calc(var(--n-handle-size) / 2); + left: 22px; + font-size: var(--n-mark-font-size); + `, [cB("slider-mark", ` + transform: translateY(50%); + white-space: nowrap; + `)]), cB("slider-dots", ` + top: calc(var(--n-handle-size) / 2); + right: unset; + bottom: calc(var(--n-handle-size) / 2); + left: 50%; + `, [cB("slider-dot", ` + transform: translateX(-50%) translateY(50%); + `)])]), cM("disabled", ` + cursor: not-allowed; + opacity: var(--n-opacity-disabled); + `, [cB("slider-handle", ` + cursor: not-allowed; + `)]), cM("with-mark", ` + width: 100%; + margin: 8px 0 32px 0; + `), c("&:hover", [cB("slider-rail", { + backgroundColor: "var(--n-rail-color-hover)" +}, [cE("fill", { + backgroundColor: "var(--n-fill-color-hover)" +})]), cB("slider-handle", { + boxShadow: "var(--n-handle-box-shadow-hover)" +})]), cM("active", [cB("slider-rail", { + backgroundColor: "var(--n-rail-color-hover)" +}, [cE("fill", { + backgroundColor: "var(--n-fill-color-hover)" +})]), cB("slider-handle", { + boxShadow: "var(--n-handle-box-shadow-hover)" +})]), cB("slider-marks", ` + position: absolute; + top: 18px; + left: calc(var(--n-handle-size) / 2); + right: calc(var(--n-handle-size) / 2); + `, [cB("slider-mark", ` + position: absolute; + transform: translateX(-50%); + white-space: nowrap; + `)]), cB("slider-rail", ` + width: 100%; + position: relative; + height: var(--n-rail-height); + background-color: var(--n-rail-color); + transition: background-color .3s var(--n-bezier); + border-radius: calc(var(--n-rail-height) / 2); + `, [cE("fill", ` + position: absolute; + top: 0; + bottom: 0; + border-radius: calc(var(--n-rail-height) / 2); + transition: background-color .3s var(--n-bezier); + background-color: var(--n-fill-color); + `)]), cB("slider-handles", ` + position: absolute; + top: 0; + right: calc(var(--n-handle-size) / 2); + bottom: 0; + left: calc(var(--n-handle-size) / 2); + `, [cB("slider-handle-wrapper", ` + outline: none; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + cursor: pointer; + display: flex; + `, [cB("slider-handle", ` + height: var(--n-handle-size); + width: var(--n-handle-size); + border-radius: 50%; + overflow: hidden; + transition: box-shadow .2s var(--n-bezier), background-color .3s var(--n-bezier); + background-color: var(--n-handle-color); + box-shadow: var(--n-handle-box-shadow); + `, [c("&:hover", ` + box-shadow: var(--n-handle-box-shadow-hover); + `)]), c("&:focus", [cB("slider-handle", ` + box-shadow: var(--n-handle-box-shadow-focus); + `, [c("&:hover", ` + box-shadow: var(--n-handle-box-shadow-active); + `)])])])]), cB("slider-dots", ` + position: absolute; + top: 50%; + left: calc(var(--n-handle-size) / 2); + right: calc(var(--n-handle-size) / 2); + `, [cM("transition-disabled", [cB("slider-dot", "transition: none;")]), cB("slider-dot", ` + transition: + border-color .3s var(--n-bezier), + box-shadow .3s var(--n-bezier), + background-color .3s var(--n-bezier); + position: absolute; + transform: translate(-50%, -50%); + height: var(--n-dot-height); + width: var(--n-dot-width); + border-radius: var(--n-dot-border-radius); + overflow: hidden; + box-sizing: border-box; + border: var(--n-dot-border); + background-color: var(--n-dot-color); + `, [cM("active", "border: var(--n-dot-border-active);")])])]), cB("slider-handle-indicator", ` + font-size: var(--n-font-size); + padding: 6px 10px; + border-radius: var(--n-indicator-border-radius); + color: var(--n-indicator-text-color); + background-color: var(--n-indicator-color); + box-shadow: var(--n-indicator-box-shadow); + `, [fadeInScaleUpTransition()]), cB("slider-handle-indicator", ` + font-size: var(--n-font-size); + padding: 6px 10px; + border-radius: var(--n-indicator-border-radius); + color: var(--n-indicator-text-color); + background-color: var(--n-indicator-color); + box-shadow: var(--n-indicator-box-shadow); + `, [cM("top", ` + margin-bottom: 12px; + `), cM("right", ` + margin-left: 12px; + `), cM("bottom", ` + margin-top: 12px; + `), cM("left", ` + margin-right: 12px; + `), fadeInScaleUpTransition()]), insideModal(cB("slider", [cB("slider-dot", "background-color: var(--n-dot-color-modal);")])), insidePopover(cB("slider", [cB("slider-dot", "background-color: var(--n-dot-color-popover);")]))]); +function isTouchEvent(e) { + return window.TouchEvent && e instanceof window.TouchEvent; +} +function useRefs() { + const refs = /* @__PURE__ */ new Map(); + const setRefs = (index) => (el) => { + refs.set(index, el); + }; + onBeforeUpdate(() => { + refs.clear(); + }); + return [refs, setRefs]; +} +const eventButtonLeft = 0; +const sliderProps = Object.assign(Object.assign({}, useTheme.props), { + to: useAdjustedTo.propTo, + defaultValue: { + type: [Number, Array], + default: 0 + }, + marks: Object, + disabled: { + type: Boolean, + default: void 0 + }, + formatTooltip: Function, + keyboard: { + type: Boolean, + default: true + }, + min: { + type: Number, + default: 0 + }, + max: { + type: Number, + default: 100 + }, + step: { + type: [Number, String], + default: 1 + }, + range: Boolean, + value: [Number, Array], + placement: String, + showTooltip: { + type: Boolean, + default: void 0 + }, + tooltip: { + type: Boolean, + default: true + }, + vertical: Boolean, + reverse: Boolean, + "onUpdate:value": [Function, Array], + onUpdateValue: [Function, Array], + onDragstart: [Function], + onDragend: [Function] +}); +const __unplugin_components_0 = defineComponent({ + name: "Slider", + props: sliderProps, + setup(props) { + const { + mergedClsPrefixRef, + namespaceRef, + inlineThemeDisabled + } = useConfig(props); + const themeRef = useTheme("Slider", "-slider", style, sliderLight, props, mergedClsPrefixRef); + const handleRailRef = ref(null); + const [handleRefs, setHandleRefs] = useRefs(); + const [followerRefs, setFollowerRefs] = useRefs(); + const followerEnabledIndexSetRef = ref(/* @__PURE__ */ new Set()); + const formItem = useFormItem(props); + const { + mergedDisabledRef + } = formItem; + const precisionRef = computed(() => { + const { + step + } = props; + if (Number(step) <= 0 || step === "mark") return 0; + const stepString = step.toString(); + let precision = 0; + if (stepString.includes(".")) { + precision = stepString.length - stepString.indexOf(".") - 1; + } + return precision; + }); + const uncontrolledValueRef = ref(props.defaultValue); + const controlledValueRef = toRef(props, "value"); + const mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef); + const arrifiedValueRef = computed(() => { + const { + value: mergedValue + } = mergedValueRef; + return (props.range ? mergedValue : [mergedValue]).map(clampValue); + }); + const handleCountExceeds2Ref = computed(() => arrifiedValueRef.value.length > 2); + const mergedPlacementRef = computed(() => { + return props.placement === void 0 ? props.vertical ? "right" : "top" : props.placement; + }); + const markValuesRef = computed(() => { + const { + marks + } = props; + return marks ? Object.keys(marks).map(Number.parseFloat) : null; + }); + const activeIndexRef = ref(-1); + const previousIndexRef = ref(-1); + const hoverIndexRef = ref(-1); + const draggingRef = ref(false); + const dotTransitionDisabledRef = ref(false); + const styleDirectionRef = computed(() => { + const { + vertical, + reverse + } = props; + const left = reverse ? "right" : "left"; + const bottom = reverse ? "top" : "bottom"; + return vertical ? bottom : left; + }); + const fillStyleRef = computed(() => { + if (handleCountExceeds2Ref.value) return; + const values = arrifiedValueRef.value; + const start = valueToPercentage(props.range ? Math.min(...values) : props.min); + const end = valueToPercentage(props.range ? Math.max(...values) : values[0]); + const { + value: styleDirection + } = styleDirectionRef; + return props.vertical ? { + [styleDirection]: `${start}%`, + height: `${end - start}%` + } : { + [styleDirection]: `${start}%`, + width: `${end - start}%` + }; + }); + const markInfosRef = computed(() => { + const mergedMarks = []; + const { + marks + } = props; + if (marks) { + const orderValues = arrifiedValueRef.value.slice(); + orderValues.sort((a, b) => a - b); + const { + value: styleDirection + } = styleDirectionRef; + const { + value: handleCountExceeds2 + } = handleCountExceeds2Ref; + const { + range + } = props; + const isActive = handleCountExceeds2 ? () => false : (num) => range ? num >= orderValues[0] && num <= orderValues[orderValues.length - 1] : num <= orderValues[0]; + for (const key of Object.keys(marks)) { + const num = Number(key); + mergedMarks.push({ + active: isActive(num), + key: num, + label: marks[key], + style: { + [styleDirection]: `${valueToPercentage(num)}%` + } + }); + } + } + return mergedMarks; + }); + function getHandleStyle(value, index) { + const percentage = valueToPercentage(value); + const { + value: styleDirection + } = styleDirectionRef; + return { + [styleDirection]: `${percentage}%`, + zIndex: index === activeIndexRef.value ? 1 : 0 + }; + } + function isShowTooltip(index) { + return props.showTooltip || hoverIndexRef.value === index || activeIndexRef.value === index && draggingRef.value; + } + function shouldKeepTooltipTransition(index) { + if (!draggingRef.value) return true; + return !(activeIndexRef.value === index && previousIndexRef.value === index); + } + function focusActiveHandle(index) { + var _a; + if (~index) { + activeIndexRef.value = index; + (_a = handleRefs.get(index)) === null || _a === void 0 ? void 0 : _a.focus(); + } + } + function syncPosition() { + followerRefs.forEach((inst, index) => { + if (isShowTooltip(index)) inst.syncPosition(); + }); + } + function doUpdateValue(value) { + const { + "onUpdate:value": _onUpdateValue, + onUpdateValue + } = props; + const { + nTriggerFormInput, + nTriggerFormChange + } = formItem; + if (onUpdateValue) call(onUpdateValue, value); + if (_onUpdateValue) call(_onUpdateValue, value); + uncontrolledValueRef.value = value; + nTriggerFormInput(); + nTriggerFormChange(); + } + function dispatchValueUpdate(value) { + const { + range + } = props; + if (range) { + if (Array.isArray(value)) { + const { + value: oldValues + } = arrifiedValueRef; + if (value.join() !== oldValues.join()) { + doUpdateValue(value); + } + } + } else if (!Array.isArray(value)) { + const oldValue = arrifiedValueRef.value[0]; + if (oldValue !== value) { + doUpdateValue(value); + } + } + } + function doDispatchValue(value, index) { + if (props.range) { + const values = arrifiedValueRef.value.slice(); + values.splice(index, 1, value); + dispatchValueUpdate(values); + } else { + dispatchValueUpdate(value); + } + } + function sanitizeValue(value, currentValue, stepBuffer) { + const stepping = stepBuffer !== void 0; + if (!stepBuffer) { + stepBuffer = value - currentValue > 0 ? 1 : -1; + } + const markValues = markValuesRef.value || []; + const { + step + } = props; + if (step === "mark") { + const closestMark2 = getClosestMark(value, markValues.concat(currentValue), stepping ? stepBuffer : void 0); + return closestMark2 ? closestMark2.value : currentValue; + } + if (step <= 0) return currentValue; + const { + value: precision + } = precisionRef; + let closestMark; + if (stepping) { + const currentStep = Number((currentValue / step).toFixed(precision)); + const actualStep = Math.floor(currentStep); + const leftStep = currentStep > actualStep ? actualStep : actualStep - 1; + const rightStep = currentStep < actualStep ? actualStep : actualStep + 1; + closestMark = getClosestMark(currentValue, [Number((leftStep * step).toFixed(precision)), Number((rightStep * step).toFixed(precision)), ...markValues], stepBuffer); + } else { + const roundValue = getRoundValue(value); + closestMark = getClosestMark(value, [...markValues, roundValue]); + } + return closestMark ? clampValue(closestMark.value) : currentValue; + } + function clampValue(value) { + return Math.min(props.max, Math.max(props.min, value)); + } + function valueToPercentage(value) { + const { + max, + min + } = props; + return (value - min) / (max - min) * 100; + } + function percentageToValue(percentage) { + const { + max, + min + } = props; + return min + (max - min) * percentage; + } + function getRoundValue(value) { + const { + step, + min + } = props; + if (Number(step) <= 0 || step === "mark") return value; + const newValue = Math.round((value - min) / step) * step + min; + return Number(newValue.toFixed(precisionRef.value)); + } + function getClosestMark(currentValue, markValues = markValuesRef.value, buffer) { + if (!(markValues === null || markValues === void 0 ? void 0 : markValues.length)) return null; + let closestMark = null; + let index = -1; + while (++index < markValues.length) { + const diff = markValues[index] - currentValue; + const distance = Math.abs(diff); + if ( + // find marks in the same direction + (buffer === void 0 || diff * buffer > 0) && (closestMark === null || distance < closestMark.distance) + ) { + closestMark = { + index, + distance, + value: markValues[index] + }; + } + } + return closestMark; + } + function getPointValue(event) { + const railEl = handleRailRef.value; + if (!railEl) return; + const touchEvent = isTouchEvent(event) ? event.touches[0] : event; + const railRect = railEl.getBoundingClientRect(); + let percentage; + if (props.vertical) { + percentage = (railRect.bottom - touchEvent.clientY) / railRect.height; + } else { + percentage = (touchEvent.clientX - railRect.left) / railRect.width; + } + if (props.reverse) { + percentage = 1 - percentage; + } + return percentageToValue(percentage); + } + function handleRailKeyDown(e) { + if (mergedDisabledRef.value || !props.keyboard) return; + const { + vertical, + reverse + } = props; + switch (e.key) { + case "ArrowUp": + e.preventDefault(); + handleStepValue(vertical && reverse ? -1 : 1); + break; + case "ArrowRight": + e.preventDefault(); + handleStepValue(!vertical && reverse ? -1 : 1); + break; + case "ArrowDown": + e.preventDefault(); + handleStepValue(vertical && reverse ? 1 : -1); + break; + case "ArrowLeft": + e.preventDefault(); + handleStepValue(!vertical && reverse ? 1 : -1); + break; + } + } + function handleStepValue(ratio) { + const activeIndex = activeIndexRef.value; + if (activeIndex === -1) return; + const { + step + } = props; + const currentValue = arrifiedValueRef.value[activeIndex]; + const nextValue = Number(step) <= 0 || step === "mark" ? currentValue : currentValue + step * ratio; + doDispatchValue( + // Avoid the number of value does not change when `step` is null + sanitizeValue(nextValue, currentValue, ratio > 0 ? 1 : -1), + activeIndex + ); + } + function handleRailMouseDown(event) { + var _a, _b; + if (mergedDisabledRef.value) return; + if (!isTouchEvent(event) && event.button !== eventButtonLeft) { + return; + } + const pointValue = getPointValue(event); + if (pointValue === void 0) return; + const values = arrifiedValueRef.value.slice(); + const activeIndex = props.range ? (_b = (_a = getClosestMark(pointValue, values)) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1 : 0; + if (activeIndex !== -1) { + event.preventDefault(); + focusActiveHandle(activeIndex); + startDragging(); + doDispatchValue(sanitizeValue(pointValue, arrifiedValueRef.value[activeIndex]), activeIndex); + } + } + function startDragging() { + if (!draggingRef.value) { + draggingRef.value = true; + if (props.onDragstart) call(props.onDragstart); + on("touchend", document, handleMouseUp); + on("mouseup", document, handleMouseUp); + on("touchmove", document, handleMouseMove); + on("mousemove", document, handleMouseMove); + } + } + function stopDragging() { + if (draggingRef.value) { + draggingRef.value = false; + if (props.onDragend) call(props.onDragend); + off("touchend", document, handleMouseUp); + off("mouseup", document, handleMouseUp); + off("touchmove", document, handleMouseMove); + off("mousemove", document, handleMouseMove); + } + } + function handleMouseMove(event) { + const { + value: activeIndex + } = activeIndexRef; + if (!draggingRef.value || activeIndex === -1) { + stopDragging(); + return; + } + const pointValue = getPointValue(event); + if (pointValue === void 0) return; + doDispatchValue(sanitizeValue(pointValue, arrifiedValueRef.value[activeIndex]), activeIndex); + } + function handleMouseUp() { + stopDragging(); + } + function handleHandleFocus(index) { + activeIndexRef.value = index; + if (!mergedDisabledRef.value) { + hoverIndexRef.value = index; + } + } + function handleHandleBlur(index) { + if (activeIndexRef.value === index) { + activeIndexRef.value = -1; + stopDragging(); + } + if (hoverIndexRef.value === index) { + hoverIndexRef.value = -1; + } + } + function handleHandleMouseEnter(index) { + hoverIndexRef.value = index; + } + function handleHandleMouseLeave(index) { + if (hoverIndexRef.value === index) { + hoverIndexRef.value = -1; + } + } + watch(activeIndexRef, (_, previous) => void nextTick(() => previousIndexRef.value = previous)); + watch(mergedValueRef, () => { + if (props.marks) { + if (dotTransitionDisabledRef.value) return; + dotTransitionDisabledRef.value = true; + void nextTick(() => { + dotTransitionDisabledRef.value = false; + }); + } + void nextTick(syncPosition); + }); + onBeforeUnmount(() => { + stopDragging(); + }); + const cssVarsRef = computed(() => { + const { + self: { + markFontSize, + railColor, + railColorHover, + fillColor, + fillColorHover, + handleColor, + opacityDisabled, + dotColor, + dotColorModal, + handleBoxShadow, + handleBoxShadowHover, + handleBoxShadowActive, + handleBoxShadowFocus, + dotBorder, + dotBoxShadow, + railHeight, + railWidthVertical, + handleSize, + dotHeight, + dotWidth, + dotBorderRadius, + fontSize, + dotBorderActive, + dotColorPopover + }, + common: { + cubicBezierEaseInOut + } + } = themeRef.value; + return { + "--n-bezier": cubicBezierEaseInOut, + "--n-dot-border": dotBorder, + "--n-dot-border-active": dotBorderActive, + "--n-dot-border-radius": dotBorderRadius, + "--n-dot-box-shadow": dotBoxShadow, + "--n-dot-color": dotColor, + "--n-dot-color-modal": dotColorModal, + "--n-dot-color-popover": dotColorPopover, + "--n-dot-height": dotHeight, + "--n-dot-width": dotWidth, + "--n-fill-color": fillColor, + "--n-fill-color-hover": fillColorHover, + "--n-font-size": fontSize, + "--n-handle-box-shadow": handleBoxShadow, + "--n-handle-box-shadow-active": handleBoxShadowActive, + "--n-handle-box-shadow-focus": handleBoxShadowFocus, + "--n-handle-box-shadow-hover": handleBoxShadowHover, + "--n-handle-color": handleColor, + "--n-handle-size": handleSize, + "--n-opacity-disabled": opacityDisabled, + "--n-rail-color": railColor, + "--n-rail-color-hover": railColorHover, + "--n-rail-height": railHeight, + "--n-rail-width-vertical": railWidthVertical, + "--n-mark-font-size": markFontSize + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("slider", void 0, cssVarsRef, props) : void 0; + const indicatorCssVarsRef = computed(() => { + const { + self: { + fontSize, + indicatorColor, + indicatorBoxShadow, + indicatorTextColor, + indicatorBorderRadius + } + } = themeRef.value; + return { + "--n-font-size": fontSize, + "--n-indicator-border-radius": indicatorBorderRadius, + "--n-indicator-box-shadow": indicatorBoxShadow, + "--n-indicator-color": indicatorColor, + "--n-indicator-text-color": indicatorTextColor + }; + }); + const indicatorThemeClassHandle = inlineThemeDisabled ? useThemeClass("slider-indicator", void 0, indicatorCssVarsRef, props) : void 0; + return { + mergedClsPrefix: mergedClsPrefixRef, + namespace: namespaceRef, + uncontrolledValue: uncontrolledValueRef, + mergedValue: mergedValueRef, + mergedDisabled: mergedDisabledRef, + mergedPlacement: mergedPlacementRef, + isMounted: isMounted(), + adjustedTo: useAdjustedTo(props), + dotTransitionDisabled: dotTransitionDisabledRef, + markInfos: markInfosRef, + isShowTooltip, + shouldKeepTooltipTransition, + handleRailRef, + setHandleRefs, + setFollowerRefs, + fillStyle: fillStyleRef, + getHandleStyle, + activeIndex: activeIndexRef, + arrifiedValues: arrifiedValueRef, + followerEnabledIndexSet: followerEnabledIndexSetRef, + handleRailMouseDown, + handleHandleFocus, + handleHandleBlur, + handleHandleMouseEnter, + handleHandleMouseLeave, + handleRailKeyDown, + indicatorCssVars: inlineThemeDisabled ? void 0 : indicatorCssVarsRef, + indicatorThemeClass: indicatorThemeClassHandle === null || indicatorThemeClassHandle === void 0 ? void 0 : indicatorThemeClassHandle.themeClass, + indicatorOnRender: indicatorThemeClassHandle === null || indicatorThemeClassHandle === void 0 ? void 0 : indicatorThemeClassHandle.onRender, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }; + }, + render() { + var _a; + const { + mergedClsPrefix, + themeClass, + formatTooltip + } = this; + (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this); + return h("div", { + class: [`${mergedClsPrefix}-slider`, themeClass, { + [`${mergedClsPrefix}-slider--disabled`]: this.mergedDisabled, + [`${mergedClsPrefix}-slider--active`]: this.activeIndex !== -1, + [`${mergedClsPrefix}-slider--with-mark`]: this.marks, + [`${mergedClsPrefix}-slider--vertical`]: this.vertical, + [`${mergedClsPrefix}-slider--reverse`]: this.reverse + }], + style: this.cssVars, + onKeydown: this.handleRailKeyDown, + onMousedown: this.handleRailMouseDown, + onTouchstart: this.handleRailMouseDown + }, h("div", { + class: `${mergedClsPrefix}-slider-rail` + }, h("div", { + class: `${mergedClsPrefix}-slider-rail__fill`, + style: this.fillStyle + }), this.marks ? h("div", { + class: [`${mergedClsPrefix}-slider-dots`, this.dotTransitionDisabled && `${mergedClsPrefix}-slider-dots--transition-disabled`] + }, this.markInfos.map((mark) => h("div", { + key: mark.key, + class: [`${mergedClsPrefix}-slider-dot`, { + [`${mergedClsPrefix}-slider-dot--active`]: mark.active + }], + style: mark.style + }))) : null, h("div", { + ref: "handleRailRef", + class: `${mergedClsPrefix}-slider-handles` + }, this.arrifiedValues.map((value, index) => { + const showTooltip = this.isShowTooltip(index); + return h(Binder, null, { + default: () => [h(VTarget, null, { + default: () => h("div", { + ref: this.setHandleRefs(index), + class: `${mergedClsPrefix}-slider-handle-wrapper`, + tabindex: this.mergedDisabled ? -1 : 0, + role: "slider", + "aria-valuenow": value, + "aria-valuemin": this.min, + "aria-valuemax": this.max, + "aria-orientation": this.vertical ? "vertical" : "horizontal", + "aria-disabled": this.disabled, + style: this.getHandleStyle(value, index), + onFocus: () => { + this.handleHandleFocus(index); + }, + onBlur: () => { + this.handleHandleBlur(index); + }, + onMouseenter: () => { + this.handleHandleMouseEnter(index); + }, + onMouseleave: () => { + this.handleHandleMouseLeave(index); + } + }, resolveSlot(this.$slots.thumb, () => [h("div", { + class: `${mergedClsPrefix}-slider-handle` + })])) + }), this.tooltip && h(VFollower, { + ref: this.setFollowerRefs(index), + show: showTooltip, + to: this.adjustedTo, + enabled: this.showTooltip && !this.range || this.followerEnabledIndexSet.has(index), + teleportDisabled: this.adjustedTo === useAdjustedTo.tdkey, + placement: this.mergedPlacement, + containerClass: this.namespace + }, { + default: () => h(Transition, { + name: "fade-in-scale-up-transition", + appear: this.isMounted, + css: this.shouldKeepTooltipTransition(index), + onEnter: () => { + this.followerEnabledIndexSet.add(index); + }, + onAfterLeave: () => { + this.followerEnabledIndexSet.delete(index); + } + }, { + default: () => { + var _a2; + if (showTooltip) { + (_a2 = this.indicatorOnRender) === null || _a2 === void 0 ? void 0 : _a2.call(this); + return h("div", { + class: [`${mergedClsPrefix}-slider-handle-indicator`, this.indicatorThemeClass, `${mergedClsPrefix}-slider-handle-indicator--${this.mergedPlacement}`], + style: this.indicatorCssVars + }, typeof formatTooltip === "function" ? formatTooltip(value) : value); + } + return null; + } + }) + })] + }); + })), this.marks ? h("div", { + class: `${mergedClsPrefix}-slider-marks` + }, this.markInfos.map((mark) => h("div", { + key: mark.key, + class: `${mergedClsPrefix}-slider-mark`, + style: mark.style + }, typeof mark.label === "function" ? mark.label() : mark.label))) : null)); + } +}); +export { + __unplugin_components_0 as _ +}; diff --git a/out/renderer/assets/Slider-BA6NituQ.js.gz b/out/renderer/assets/Slider-BA6NituQ.js.gz new file mode 100644 index 0000000..56da44e Binary files /dev/null and b/out/renderer/assets/Slider-BA6NituQ.js.gz differ diff --git a/out/renderer/assets/SongItem-Bw5Qa7XV.css b/out/renderer/assets/SongItem-Bw5Qa7XV.css new file mode 100644 index 0000000..8895831 --- /dev/null +++ b/out/renderer/assets/SongItem-Bw5Qa7XV.css @@ -0,0 +1,296 @@ +.text-ellipsis[data-v-aae6c67f] { + width: 100%; +} +.song-item[data-v-aae6c67f] { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + display: flex; + align-items: center; + border-radius: 1.5rem; + background-color: transparent; + padding: 0.75rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.song-item[data-v-aae6c67f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.song-item[data-v-aae6c67f]:hover { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} +.song-item[data-v-aae6c67f]:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} +.song-item-img[data-v-aae6c67f] { + margin-right: 1rem; + height: 3rem; + width: 3rem; + border-radius: 1rem; +} +.song-item-content[data-v-aae6c67f] { + flex: 1 1 0%; +} +.song-item-content-title[data-v-aae6c67f] { + font-size: 1rem; + line-height: 1.5rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.song-item-content-title[data-v-aae6c67f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.song-item-content-name[data-v-aae6c67f] { + font-size: 0.75rem; + line-height: 1rem; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.song-item-content-name[data-v-aae6c67f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.song-item-operating[data-v-aae6c67f] { + margin-left: 1rem; + display: flex; + align-items: center; + border-radius: 9999px; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.song-item-operating[data-v-aae6c67f]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.song-item-operating .iconfont[data-v-aae6c67f] { + font-size: 1.25rem; + line-height: 1.75rem; +} +.song-item-operating .icon-likefill[data-v-aae6c67f] { + font-size: 1.25rem; + line-height: 1.75rem; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.song-item-operating .icon-likefill[data-v-aae6c67f]:hover { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} +.song-item-operating .icon-likefill[data-v-aae6c67f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.song-item-operating-like[data-v-aae6c67f] { + margin-right: 0.5rem; + margin-left: 1rem; + cursor: pointer; +} +.song-item-operating .like-active[data-v-aae6c67f] { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} +.song-item-operating-play[data-v-aae6c67f] { + display: flex; + height: 2.5rem; + width: 2.5rem; + cursor: pointer; + align-items: center; + justify-content: center; + border-radius: 9999px; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.song-item-operating-play[data-v-aae6c67f]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.song-item-operating-play[data-v-aae6c67f]:hover, .song-item-operating-play.bg-green-600[data-v-aae6c67f] { + --tw-border-opacity: 1; + border-color: rgb(34 197 94 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.song-mini[data-v-aae6c67f] { + border-radius: 1rem; + padding: 0.5rem; +} +.song-mini .song-item[data-v-aae6c67f] { + padding: 0px; +} +.song-mini .song-item-img[data-v-aae6c67f] { + margin-right: 0.5rem; + height: 2.5rem; + width: 2.5rem; +} +.song-mini .song-item-content[data-v-aae6c67f] { + flex: 1 1 0%; +} +.song-mini .song-item-content-title[data-v-aae6c67f] { + font-size: 0.875rem; + line-height: 1.25rem; +} +.song-mini .song-item-content-name[data-v-aae6c67f] { + font-size: 0.75rem; + line-height: 1rem; +} +.song-mini .song-item-operating[data-v-aae6c67f] { + padding-left: 0.5rem; +} +.song-mini .song-item-operating .iconfont[data-v-aae6c67f] { + font-size: 1rem; + line-height: 1.5rem; +} +.song-mini .song-item-operating-like[data-v-aae6c67f] { + margin-right: 0.25rem; + margin-left: 0.25rem; +} +.song-mini .song-item-operating-play[data-v-aae6c67f] { + height: 2rem; + width: 2rem; +} +.song-list[data-v-aae6c67f] { + margin-bottom: 0.5rem; + border-radius: 0.5rem; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + padding: 0.5rem; +} +.song-list[data-v-aae6c67f]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(31 41 55 / var(--tw-border-opacity, 1)); +} +.song-list[data-v-aae6c67f]:hover { + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); +} +.song-list[data-v-aae6c67f]:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} +.song-list .song-item-img[data-v-aae6c67f] { + margin-right: 0.75rem; + height: 2.5rem; + width: 2.5rem; + border-radius: 0.5rem; +} +.song-list .song-item-content[data-v-aae6c67f] { + display: flex; + flex: 1 1 0%; + align-items: center; +} +.song-list .song-item-content-wrapper[data-v-aae6c67f] { + display: flex; + flex: 1 1 0%; + align-items: center; + font-size: 0.875rem; + line-height: 1.25rem; +} +.song-list .song-item-content-title[data-v-aae6c67f] { + max-width: 45%; + flex-shrink: 0; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-content-title[data-v-aae6c67f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-content-divider[data-v-aae6c67f] { + margin-left: 0.5rem; + margin-right: 0.5rem; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-content-divider[data-v-aae6c67f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-content-name[data-v-aae6c67f] { + min-width: 0px; + flex: 1 1 0%; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-content-name[data-v-aae6c67f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-operating[data-v-aae6c67f] { + display: flex; + align-items: center; + gap: 0.5rem; +} +.song-list .song-item-operating-like[data-v-aae6c67f] { + cursor: pointer; + transition-property: transform; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.song-list .song-item-operating-like[data-v-aae6c67f]:hover { + --tw-scale-x: 1.1; + --tw-scale-y: 1.1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.song-list .song-item-operating-like .iconfont[data-v-aae6c67f] { + font-size: 1rem; + line-height: 1.5rem; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-operating-like .iconfont[data-v-aae6c67f]:hover { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-operating-like .iconfont[data-v-aae6c67f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.song-list .song-item-operating-play[data-v-aae6c67f] { + height: 1.75rem; + width: 1.75rem; + cursor: pointer; + transition-property: transform; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.song-list .song-item-operating-play[data-v-aae6c67f]:hover { + --tw-scale-x: 1.1; + --tw-scale-y: 1.1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.song-list .song-item-operating-play .iconfont[data-v-aae6c67f] { + font-size: 1rem; + line-height: 1.5rem; +} \ No newline at end of file diff --git a/out/renderer/assets/SongItem-Bw5Qa7XV.css.gz b/out/renderer/assets/SongItem-Bw5Qa7XV.css.gz new file mode 100644 index 0000000..5304efb Binary files /dev/null and b/out/renderer/assets/SongItem-Bw5Qa7XV.css.gz differ diff --git a/out/renderer/assets/SongItem-CoswpGn6.js b/out/renderer/assets/SongItem-CoswpGn6.js new file mode 100644 index 0000000..2e6953d --- /dev/null +++ b/out/renderer/assets/SongItem-CoswpGn6.js @@ -0,0 +1,170 @@ +import { d as defineComponent, g as useStore, G as computed, aG as useTemplateRef, j as openBlock, c as createElementBlock, O as createBlock, u as unref, a7 as getImgUrl, T as createCommentVNode, b as createBaseVNode, e as createVNode, f as withCtx, k as createTextVNode, t as toDisplayString, a3 as Fragment, a4 as renderList, n as normalizeClass, ah as withModifiers, b5 as getImageBackground, ae as audioService, _ as _export_sfc } from "./index-DKaFsuse.js"; +import { N as NImage } from "./Image-DXClIklC.js"; +import { _ as __unplugin_components_2 } from "./Ellipsis-D4R5dIX2.js"; +const _hoisted_1 = { class: "song-item-content" }; +const _hoisted_2 = { + key: 0, + class: "song-item-content-wrapper" +}; +const _hoisted_3 = { class: "song-item-content-title" }; +const _hoisted_4 = { class: "song-item-content-name" }; +const _hoisted_5 = { + key: 0, + class: "song-item-operating-like" +}; +const _hoisted_6 = { + key: 0, + class: "iconfont icon-stop" +}; +const _hoisted_7 = { + key: 1, + class: "iconfont icon-playfill" +}; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "SongItem", + props: { + item: {}, + mini: { type: Boolean, default: false }, + list: { type: Boolean, default: false }, + favorite: { type: Boolean, default: true } + }, + emits: ["play"], + setup(__props, { emit: __emit }) { + const props = __props; + const store = useStore(); + const play = computed(() => store.state.play); + const playMusic = computed(() => store.state.playMusic); + const playLoading = computed( + () => playMusic.value.id === props.item.id && playMusic.value.playLoading + ); + const isPlaying = computed(() => { + return playMusic.value.id === props.item.id; + }); + const emits = __emit; + const songImageRef = useTemplateRef("songImg"); + const imageLoad = async () => { + if (!songImageRef.value) { + return; + } + const { backgroundColor } = await getImageBackground( + songImageRef.value.imageRef + ); + props.item.backgroundColor = backgroundColor; + }; + const playMusicEvent = async (item) => { + if (playMusic.value.id === item.id) { + if (play.value) { + store.commit("setPlayMusic", false); + audioService.getCurrentSound()?.pause(); + } else { + store.commit("setPlayMusic", true); + audioService.getCurrentSound()?.play(); + } + return; + } + await store.commit("setPlay", item); + store.commit("setIsPlay", true); + emits("play", item); + }; + const isFavorite = computed(() => { + return store.state.favoriteList.includes(props.item.id); + }); + const toggleFavorite = async (e) => { + e.stopPropagation(); + if (isFavorite.value) { + store.commit("removeFromFavorite", props.item.id); + } else { + store.commit("addToFavorite", props.item.id); + } + }; + return (_ctx, _cache) => { + const _component_n_image = NImage; + const _component_n_ellipsis = __unplugin_components_2; + return openBlock(), createElementBlock("div", { + class: normalizeClass(["song-item", { "song-mini": _ctx.mini, "song-list": _ctx.list }]) + }, [ + _ctx.item.picUrl ? (openBlock(), createBlock(_component_n_image, { + key: 0, + ref: "songImg", + src: unref(getImgUrl)(_ctx.item.picUrl, "100y100"), + class: "song-item-img", + "preview-disabled": "", + "img-props": { + crossorigin: "anonymous" + }, + onLoad: imageLoad + }, null, 8, ["src"])) : createCommentVNode("", true), + createBaseVNode("div", _hoisted_1, [ + _ctx.list ? (openBlock(), createElementBlock("div", _hoisted_2, [ + createVNode(_component_n_ellipsis, { + class: "song-item-content-title text-ellipsis", + "line-clamp": "1" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.item.name), 1) + ]), + _: 1 + }), + _cache[1] || (_cache[1] = createBaseVNode("div", { class: "song-item-content-divider" }, "-", -1)), + createVNode(_component_n_ellipsis, { + class: "song-item-content-name text-ellipsis", + "line-clamp": "1" + }, { + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.item.ar || _ctx.item.song.artists, (artists, artistsindex) => { + return openBlock(), createElementBlock("span", { key: artistsindex }, toDisplayString(artists.name) + toDisplayString(artistsindex < (_ctx.item.ar || _ctx.item.song.artists).length - 1 ? " / " : ""), 1); + }), 128)) + ]), + _: 1 + }) + ])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [ + createBaseVNode("div", _hoisted_3, [ + createVNode(_component_n_ellipsis, { + class: "text-ellipsis", + "line-clamp": "1" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.item.name), 1) + ]), + _: 1 + }) + ]), + createBaseVNode("div", _hoisted_4, [ + createVNode(_component_n_ellipsis, { + class: "text-ellipsis", + "line-clamp": "1" + }, { + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.item.ar || _ctx.item.song.artists, (artists, artistsindex) => { + return openBlock(), createElementBlock("span", { key: artistsindex }, toDisplayString(artists.name) + toDisplayString(artistsindex < (_ctx.item.ar || _ctx.item.song.artists).length - 1 ? " / " : ""), 1); + }), 128)) + ]), + _: 1 + }) + ]) + ], 64)) + ]), + createBaseVNode("div", { + class: normalizeClass(["song-item-operating", { "song-item-operating-list": _ctx.list }]) + }, [ + _ctx.favorite ? (openBlock(), createElementBlock("div", _hoisted_5, [ + createBaseVNode("i", { + class: normalizeClass(["iconfont icon-likefill", { "like-active": isFavorite.value }]), + onClick: withModifiers(toggleFavorite, ["stop"]) + }, null, 2) + ])) : createCommentVNode("", true), + createBaseVNode("div", { + class: normalizeClass(["song-item-operating-play bg-gray-300 dark:bg-gray-800 animate__animated", { "bg-green-600": isPlaying.value, animate__flipInY: playLoading.value }]), + onClick: _cache[0] || (_cache[0] = ($event) => playMusicEvent(_ctx.item)) + }, [ + isPlaying.value && play.value ? (openBlock(), createElementBlock("i", _hoisted_6)) : (openBlock(), createElementBlock("i", _hoisted_7)) + ], 2) + ], 2) + ], 2); + }; + } +}); +const SongItem = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-aae6c67f"]]); +export { + SongItem as S +}; diff --git a/out/renderer/assets/SongItem-CoswpGn6.js.gz b/out/renderer/assets/SongItem-CoswpGn6.js.gz new file mode 100644 index 0000000..877070a Binary files /dev/null and b/out/renderer/assets/SongItem-CoswpGn6.js.gz differ diff --git a/out/renderer/assets/Switch-D3Z_Vg3u.js b/out/renderer/assets/Switch-D3Z_Vg3u.js new file mode 100644 index 0000000..176fd48 --- /dev/null +++ b/out/renderer/assets/Switch-D3Z_Vg3u.js @@ -0,0 +1,2185 @@ +import { d as defineComponent, l as h, bk as replaceable, p as cB, m as c, Y as cE, bl as iconSwitchTransition, Z as useStyle, A as toRef, bm as NIconSwitchTransition, K as resolveSlot, N as NBaseIcon, bn as NBaseLoading, aL as createInjectionKey, W as cM, V as cNotM, r as ref, E as watch, as as inject, G as computed, bo as resolveSlotWithProps, x as useConfig, q as useTheme, bp as inputLight, bq as isSafari, C as useMergedState, z as useFormItem, D as useMemo, o as onMounted, br as getCurrentInstance, a8 as watchEffect, $ as provide, F as useRtl, ao as createKey, bs as getMargin, ap as useThemeClass, I as resolveWrappedSlot, aK as Scrollbar, a3 as Fragment, ay as VResizeObserver, M as nextTick, J as on, L as call, aS as off, bt as switchLight, aw as pxfy, av as depx, bu as isSlotEmpty } from "./index-DKaFsuse.js"; +import { u as useLocale } from "./use-locale-DLWAOXez.js"; +const ChevronDownIcon = defineComponent({ + name: "ChevronDown", + render() { + return h("svg", { + viewBox: "0 0 16 16", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, h("path", { + d: "M3.14645 5.64645C3.34171 5.45118 3.65829 5.45118 3.85355 5.64645L8 9.79289L12.1464 5.64645C12.3417 5.45118 12.6583 5.45118 12.8536 5.64645C13.0488 5.84171 13.0488 6.15829 12.8536 6.35355L8.35355 10.8536C8.15829 11.0488 7.84171 11.0488 7.64645 10.8536L3.14645 6.35355C2.95118 6.15829 2.95118 5.84171 3.14645 5.64645Z", + fill: "currentColor" + })); + } +}); +const ClearIcon = replaceable("clear", () => h("svg", { + viewBox: "0 0 16 16", + version: "1.1", + xmlns: "http://www.w3.org/2000/svg" +}, h("g", { + stroke: "none", + "stroke-width": "1", + fill: "none", + "fill-rule": "evenodd" +}, h("g", { + fill: "currentColor", + "fill-rule": "nonzero" +}, h("path", { + d: "M8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 C2,4.6862915 4.6862915,2 8,2 Z M6.5343055,5.83859116 C6.33943736,5.70359511 6.07001296,5.72288026 5.89644661,5.89644661 L5.89644661,5.89644661 L5.83859116,5.9656945 C5.70359511,6.16056264 5.72288026,6.42998704 5.89644661,6.60355339 L5.89644661,6.60355339 L7.293,8 L5.89644661,9.39644661 L5.83859116,9.4656945 C5.70359511,9.66056264 5.72288026,9.92998704 5.89644661,10.1035534 L5.89644661,10.1035534 L5.9656945,10.1614088 C6.16056264,10.2964049 6.42998704,10.2771197 6.60355339,10.1035534 L6.60355339,10.1035534 L8,8.707 L9.39644661,10.1035534 L9.4656945,10.1614088 C9.66056264,10.2964049 9.92998704,10.2771197 10.1035534,10.1035534 L10.1035534,10.1035534 L10.1614088,10.0343055 C10.2964049,9.83943736 10.2771197,9.57001296 10.1035534,9.39644661 L10.1035534,9.39644661 L8.707,8 L10.1035534,6.60355339 L10.1614088,6.5343055 C10.2964049,6.33943736 10.2771197,6.07001296 10.1035534,5.89644661 L10.1035534,5.89644661 L10.0343055,5.83859116 C9.83943736,5.70359511 9.57001296,5.72288026 9.39644661,5.89644661 L9.39644661,5.89644661 L8,7.293 L6.60355339,5.89644661 Z" +}))))); +const EyeIcon = defineComponent({ + name: "Eye", + render() { + return h("svg", { + xmlns: "http://www.w3.org/2000/svg", + viewBox: "0 0 512 512" + }, h("path", { + d: "M255.66 112c-77.94 0-157.89 45.11-220.83 135.33a16 16 0 0 0-.27 17.77C82.92 340.8 161.8 400 255.66 400c92.84 0 173.34-59.38 221.79-135.25a16.14 16.14 0 0 0 0-17.47C428.89 172.28 347.8 112 255.66 112z", + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "32" + }), h("circle", { + cx: "256", + cy: "256", + r: "80", + fill: "none", + stroke: "currentColor", + "stroke-miterlimit": "10", + "stroke-width": "32" + })); + } +}); +const EyeOffIcon = defineComponent({ + name: "EyeOff", + render() { + return h("svg", { + xmlns: "http://www.w3.org/2000/svg", + viewBox: "0 0 512 512" + }, h("path", { + d: "M432 448a15.92 15.92 0 0 1-11.31-4.69l-352-352a16 16 0 0 1 22.62-22.62l352 352A16 16 0 0 1 432 448z", + fill: "currentColor" + }), h("path", { + d: "M255.66 384c-41.49 0-81.5-12.28-118.92-36.5c-34.07-22-64.74-53.51-88.7-91v-.08c19.94-28.57 41.78-52.73 65.24-72.21a2 2 0 0 0 .14-2.94L93.5 161.38a2 2 0 0 0-2.71-.12c-24.92 21-48.05 46.76-69.08 76.92a31.92 31.92 0 0 0-.64 35.54c26.41 41.33 60.4 76.14 98.28 100.65C162 402 207.9 416 255.66 416a239.13 239.13 0 0 0 75.8-12.58a2 2 0 0 0 .77-3.31l-21.58-21.58a4 4 0 0 0-3.83-1a204.8 204.8 0 0 1-51.16 6.47z", + fill: "currentColor" + }), h("path", { + d: "M490.84 238.6c-26.46-40.92-60.79-75.68-99.27-100.53C349 110.55 302 96 255.66 96a227.34 227.34 0 0 0-74.89 12.83a2 2 0 0 0-.75 3.31l21.55 21.55a4 4 0 0 0 3.88 1a192.82 192.82 0 0 1 50.21-6.69c40.69 0 80.58 12.43 118.55 37c34.71 22.4 65.74 53.88 89.76 91a.13.13 0 0 1 0 .16a310.72 310.72 0 0 1-64.12 72.73a2 2 0 0 0-.15 2.95l19.9 19.89a2 2 0 0 0 2.7.13a343.49 343.49 0 0 0 68.64-78.48a32.2 32.2 0 0 0-.1-34.78z", + fill: "currentColor" + }), h("path", { + d: "M256 160a95.88 95.88 0 0 0-21.37 2.4a2 2 0 0 0-1 3.38l112.59 112.56a2 2 0 0 0 3.38-1A96 96 0 0 0 256 160z", + fill: "currentColor" + }), h("path", { + d: "M165.78 233.66a2 2 0 0 0-3.38 1a96 96 0 0 0 115 115a2 2 0 0 0 1-3.38z", + fill: "currentColor" + })); + } +}); +const style$2 = cB("base-clear", ` + flex-shrink: 0; + height: 1em; + width: 1em; + position: relative; +`, [c(">", [cE("clear", ` + font-size: var(--n-clear-size); + height: 1em; + width: 1em; + cursor: pointer; + color: var(--n-clear-color); + transition: color .3s var(--n-bezier); + display: flex; + `, [c("&:hover", ` + color: var(--n-clear-color-hover)!important; + `), c("&:active", ` + color: var(--n-clear-color-pressed)!important; + `)]), cE("placeholder", ` + display: flex; + `), cE("clear, placeholder", ` + position: absolute; + left: 50%; + top: 50%; + transform: translateX(-50%) translateY(-50%); + `, [iconSwitchTransition({ + originalTransform: "translateX(-50%) translateY(-50%)", + left: "50%", + top: "50%" +})])])]); +const NBaseClear = defineComponent({ + name: "BaseClear", + props: { + clsPrefix: { + type: String, + required: true + }, + show: Boolean, + onClear: Function + }, + setup(props) { + useStyle("-base-clear", style$2, toRef(props, "clsPrefix")); + return { + handleMouseDown(e) { + e.preventDefault(); + } + }; + }, + render() { + const { + clsPrefix + } = this; + return h("div", { + class: `${clsPrefix}-base-clear` + }, h(NIconSwitchTransition, null, { + default: () => { + var _a, _b; + return this.show ? h("div", { + key: "dismiss", + class: `${clsPrefix}-base-clear__clear`, + onClick: this.onClear, + onMousedown: this.handleMouseDown, + "data-clear": true + }, resolveSlot(this.$slots.icon, () => [h(NBaseIcon, { + clsPrefix + }, { + default: () => h(ClearIcon, null) + })])) : h("div", { + key: "icon", + class: `${clsPrefix}-base-clear__placeholder` + }, (_b = (_a = this.$slots).placeholder) === null || _b === void 0 ? void 0 : _b.call(_a)); + } + })); + } +}); +const NBaseSuffix = defineComponent({ + name: "InternalSelectionSuffix", + props: { + clsPrefix: { + type: String, + required: true + }, + showArrow: { + type: Boolean, + default: void 0 + }, + showClear: { + type: Boolean, + default: void 0 + }, + loading: { + type: Boolean, + default: false + }, + onClear: Function + }, + setup(props, { + slots + }) { + return () => { + const { + clsPrefix + } = props; + return h(NBaseLoading, { + clsPrefix, + class: `${clsPrefix}-base-suffix`, + strokeWidth: 24, + scale: 0.85, + show: props.loading + }, { + default: () => props.showArrow ? h(NBaseClear, { + clsPrefix, + show: props.showClear, + onClear: props.onClear + }, { + placeholder: () => h(NBaseIcon, { + clsPrefix, + class: `${clsPrefix}-base-suffix__arrow` + }, { + default: () => resolveSlot(slots.default, () => [h(ChevronDownIcon, null)]) + }) + }) : null + }); + }; + } +}); +const inputInjectionKey = createInjectionKey("n-input"); +const style$1 = cB("input", ` + max-width: 100%; + cursor: text; + line-height: 1.5; + z-index: auto; + outline: none; + box-sizing: border-box; + position: relative; + display: inline-flex; + border-radius: var(--n-border-radius); + background-color: var(--n-color); + transition: background-color .3s var(--n-bezier); + font-size: var(--n-font-size); + font-weight: var(--n-font-weight); + --n-padding-vertical: calc((var(--n-height) - 1.5 * var(--n-font-size)) / 2); +`, [ + // common + cE("input, textarea", ` + overflow: hidden; + flex-grow: 1; + position: relative; + `), + cE("input-el, textarea-el, input-mirror, textarea-mirror, separator, placeholder", ` + box-sizing: border-box; + font-size: inherit; + line-height: 1.5; + font-family: inherit; + border: none; + outline: none; + background-color: #0000; + text-align: inherit; + transition: + -webkit-text-fill-color .3s var(--n-bezier), + caret-color .3s var(--n-bezier), + color .3s var(--n-bezier), + text-decoration-color .3s var(--n-bezier); + `), + cE("input-el, textarea-el", ` + -webkit-appearance: none; + scrollbar-width: none; + width: 100%; + min-width: 0; + text-decoration-color: var(--n-text-decoration-color); + color: var(--n-text-color); + caret-color: var(--n-caret-color); + background-color: transparent; + `, [c("&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb", ` + width: 0; + height: 0; + display: none; + `), c("&::placeholder", ` + color: #0000; + -webkit-text-fill-color: transparent !important; + `), c("&:-webkit-autofill ~", [cE("placeholder", "display: none;")])]), + cM("round", [cNotM("textarea", "border-radius: calc(var(--n-height) / 2);")]), + cE("placeholder", ` + pointer-events: none; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + overflow: hidden; + color: var(--n-placeholder-color); + `, [c("span", ` + width: 100%; + display: inline-block; + `)]), + cM("textarea", [cE("placeholder", "overflow: visible;")]), + cNotM("autosize", "width: 100%;"), + cM("autosize", [cE("textarea-el, input-el", ` + position: absolute; + top: 0; + left: 0; + height: 100%; + `)]), + // input + cB("input-wrapper", ` + overflow: hidden; + display: inline-flex; + flex-grow: 1; + position: relative; + padding-left: var(--n-padding-left); + padding-right: var(--n-padding-right); + `), + cE("input-mirror", ` + padding: 0; + height: var(--n-height); + line-height: var(--n-height); + overflow: hidden; + visibility: hidden; + position: static; + white-space: pre; + pointer-events: none; + `), + cE("input-el", ` + padding: 0; + height: var(--n-height); + line-height: var(--n-height); + `, [c("&[type=password]::-ms-reveal", "display: none;"), c("+", [cE("placeholder", ` + display: flex; + align-items: center; + `)])]), + cNotM("textarea", [cE("placeholder", "white-space: nowrap;")]), + cE("eye", ` + display: flex; + align-items: center; + justify-content: center; + transition: color .3s var(--n-bezier); + `), + // textarea + cM("textarea", "width: 100%;", [cB("input-word-count", ` + position: absolute; + right: var(--n-padding-right); + bottom: var(--n-padding-vertical); + `), cM("resizable", [cB("input-wrapper", ` + resize: vertical; + min-height: var(--n-height); + `)]), cE("textarea-el, textarea-mirror, placeholder", ` + height: 100%; + padding-left: 0; + padding-right: 0; + padding-top: var(--n-padding-vertical); + padding-bottom: var(--n-padding-vertical); + word-break: break-word; + display: inline-block; + vertical-align: bottom; + box-sizing: border-box; + line-height: var(--n-line-height-textarea); + margin: 0; + resize: none; + white-space: pre-wrap; + scroll-padding-block-end: var(--n-padding-vertical); + `), cE("textarea-mirror", ` + width: 100%; + pointer-events: none; + overflow: hidden; + visibility: hidden; + position: static; + white-space: pre-wrap; + overflow-wrap: break-word; + `)]), + // pair + cM("pair", [cE("input-el, placeholder", "text-align: center;"), cE("separator", ` + display: flex; + align-items: center; + transition: color .3s var(--n-bezier); + color: var(--n-text-color); + white-space: nowrap; + `, [cB("icon", ` + color: var(--n-icon-color); + `), cB("base-icon", ` + color: var(--n-icon-color); + `)])]), + cM("disabled", ` + cursor: not-allowed; + background-color: var(--n-color-disabled); + `, [cE("border", "border: var(--n-border-disabled);"), cE("input-el, textarea-el", ` + cursor: not-allowed; + color: var(--n-text-color-disabled); + text-decoration-color: var(--n-text-color-disabled); + `), cE("placeholder", "color: var(--n-placeholder-color-disabled);"), cE("separator", "color: var(--n-text-color-disabled);", [cB("icon", ` + color: var(--n-icon-color-disabled); + `), cB("base-icon", ` + color: var(--n-icon-color-disabled); + `)]), cB("input-word-count", ` + color: var(--n-count-text-color-disabled); + `), cE("suffix, prefix", "color: var(--n-text-color-disabled);", [cB("icon", ` + color: var(--n-icon-color-disabled); + `), cB("internal-icon", ` + color: var(--n-icon-color-disabled); + `)])]), + cNotM("disabled", [cE("eye", ` + color: var(--n-icon-color); + cursor: pointer; + `, [c("&:hover", ` + color: var(--n-icon-color-hover); + `), c("&:active", ` + color: var(--n-icon-color-pressed); + `)]), c("&:hover", [cE("state-border", "border: var(--n-border-hover);")]), cM("focus", "background-color: var(--n-color-focus);", [cE("state-border", ` + border: var(--n-border-focus); + box-shadow: var(--n-box-shadow-focus); + `)])]), + cE("border, state-border", ` + box-sizing: border-box; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + pointer-events: none; + border-radius: inherit; + border: var(--n-border); + transition: + box-shadow .3s var(--n-bezier), + border-color .3s var(--n-bezier); + `), + cE("state-border", ` + border-color: #0000; + z-index: 1; + `), + cE("prefix", "margin-right: 4px;"), + cE("suffix", ` + margin-left: 4px; + `), + cE("suffix, prefix", ` + transition: color .3s var(--n-bezier); + flex-wrap: nowrap; + flex-shrink: 0; + line-height: var(--n-height); + white-space: nowrap; + display: inline-flex; + align-items: center; + justify-content: center; + color: var(--n-suffix-text-color); + `, [cB("base-loading", ` + font-size: var(--n-icon-size); + margin: 0 2px; + color: var(--n-loading-color); + `), cB("base-clear", ` + font-size: var(--n-icon-size); + `, [cE("placeholder", [cB("base-icon", ` + transition: color .3s var(--n-bezier); + color: var(--n-icon-color); + font-size: var(--n-icon-size); + `)])]), c(">", [cB("icon", ` + transition: color .3s var(--n-bezier); + color: var(--n-icon-color); + font-size: var(--n-icon-size); + `)]), cB("base-icon", ` + font-size: var(--n-icon-size); + `)]), + cB("input-word-count", ` + pointer-events: none; + line-height: 1.5; + font-size: .85em; + color: var(--n-count-text-color); + transition: color .3s var(--n-bezier); + margin-left: 4px; + font-variant: tabular-nums; + `), + ["warning", "error"].map((status) => cM(`${status}-status`, [cNotM("disabled", [cB("base-loading", ` + color: var(--n-loading-color-${status}) + `), cE("input-el, textarea-el", ` + caret-color: var(--n-caret-color-${status}); + `), cE("state-border", ` + border: var(--n-border-${status}); + `), c("&:hover", [cE("state-border", ` + border: var(--n-border-hover-${status}); + `)]), c("&:focus", ` + background-color: var(--n-color-focus-${status}); + `, [cE("state-border", ` + box-shadow: var(--n-box-shadow-focus-${status}); + border: var(--n-border-focus-${status}); + `)]), cM("focus", ` + background-color: var(--n-color-focus-${status}); + `, [cE("state-border", ` + box-shadow: var(--n-box-shadow-focus-${status}); + border: var(--n-border-focus-${status}); + `)])])])) +]); +const safariStyle = cB("input", [cM("disabled", [cE("input-el, textarea-el", ` + -webkit-text-fill-color: var(--n-text-color-disabled); + `)])]); +function len(s) { + let count = 0; + for (const _ of s) { + count++; + } + return count; +} +function isEmptyInputValue(value) { + return value === "" || value == null; +} +function useCursor(inputElRef) { + const selectionRef = ref(null); + function recordCursor() { + const { + value: input + } = inputElRef; + if (!(input === null || input === void 0 ? void 0 : input.focus)) { + reset(); + return; + } + const { + selectionStart, + selectionEnd, + value + } = input; + if (selectionStart == null || selectionEnd == null) { + reset(); + return; + } + selectionRef.value = { + start: selectionStart, + end: selectionEnd, + beforeText: value.slice(0, selectionStart), + afterText: value.slice(selectionEnd) + }; + } + function restoreCursor() { + var _a; + const { + value: selection + } = selectionRef; + const { + value: inputEl + } = inputElRef; + if (!selection || !inputEl) { + return; + } + const { + value + } = inputEl; + const { + start, + beforeText, + afterText + } = selection; + let startPos = value.length; + if (value.endsWith(afterText)) { + startPos = value.length - afterText.length; + } else if (value.startsWith(beforeText)) { + startPos = beforeText.length; + } else { + const beforeLastChar = beforeText[start - 1]; + const newIndex = value.indexOf(beforeLastChar, start - 1); + if (newIndex !== -1) { + startPos = newIndex + 1; + } + } + (_a = inputEl.setSelectionRange) === null || _a === void 0 ? void 0 : _a.call(inputEl, startPos, startPos); + } + function reset() { + selectionRef.value = null; + } + watch(inputElRef, reset); + return { + recordCursor, + restoreCursor + }; +} +const WordCount = defineComponent({ + name: "InputWordCount", + setup(_, { + slots + }) { + const { + mergedValueRef, + maxlengthRef, + mergedClsPrefixRef, + countGraphemesRef + } = inject(inputInjectionKey); + const wordCountRef = computed(() => { + const { + value: mergedValue + } = mergedValueRef; + if (mergedValue === null || Array.isArray(mergedValue)) return 0; + return (countGraphemesRef.value || len)(mergedValue); + }); + return () => { + const { + value: maxlength + } = maxlengthRef; + const { + value: mergedValue + } = mergedValueRef; + return h("span", { + class: `${mergedClsPrefixRef.value}-input-word-count` + }, resolveSlotWithProps(slots.default, { + value: mergedValue === null || Array.isArray(mergedValue) ? "" : mergedValue + }, () => [maxlength === void 0 ? wordCountRef.value : `${wordCountRef.value} / ${maxlength}`])); + }; + } +}); +const inputProps = Object.assign(Object.assign({}, useTheme.props), { + bordered: { + type: Boolean, + default: void 0 + }, + type: { + type: String, + default: "text" + }, + placeholder: [Array, String], + defaultValue: { + type: [String, Array], + default: null + }, + value: [String, Array], + disabled: { + type: Boolean, + default: void 0 + }, + size: String, + rows: { + type: [Number, String], + default: 3 + }, + round: Boolean, + minlength: [String, Number], + maxlength: [String, Number], + clearable: Boolean, + autosize: { + type: [Boolean, Object], + default: false + }, + pair: Boolean, + separator: String, + readonly: { + type: [String, Boolean], + default: false + }, + passivelyActivated: Boolean, + showPasswordOn: String, + stateful: { + type: Boolean, + default: true + }, + autofocus: Boolean, + inputProps: Object, + resizable: { + type: Boolean, + default: true + }, + showCount: Boolean, + loading: { + type: Boolean, + default: void 0 + }, + allowInput: Function, + renderCount: Function, + onMousedown: Function, + onKeydown: Function, + onKeyup: [Function, Array], + onInput: [Function, Array], + onFocus: [Function, Array], + onBlur: [Function, Array], + onClick: [Function, Array], + onChange: [Function, Array], + onClear: [Function, Array], + countGraphemes: Function, + status: String, + "onUpdate:value": [Function, Array], + onUpdateValue: [Function, Array], + /** private */ + textDecoration: [String, Array], + attrSize: { + type: Number, + default: 20 + }, + onInputBlur: [Function, Array], + onInputFocus: [Function, Array], + onDeactivate: [Function, Array], + onActivate: [Function, Array], + onWrapperFocus: [Function, Array], + onWrapperBlur: [Function, Array], + internalDeactivateOnEnter: Boolean, + internalForceFocus: Boolean, + internalLoadingBeforeSuffix: { + type: Boolean, + default: true + }, + /** deprecated */ + showPasswordToggle: Boolean +}); +const __unplugin_components_1 = defineComponent({ + name: "Input", + props: inputProps, + setup(props) { + const { + mergedClsPrefixRef, + mergedBorderedRef, + inlineThemeDisabled, + mergedRtlRef + } = useConfig(props); + const themeRef = useTheme("Input", "-input", style$1, inputLight, props, mergedClsPrefixRef); + if (isSafari) { + useStyle("-input-safari", safariStyle, mergedClsPrefixRef); + } + const wrapperElRef = ref(null); + const textareaElRef = ref(null); + const textareaMirrorElRef = ref(null); + const inputMirrorElRef = ref(null); + const inputElRef = ref(null); + const inputEl2Ref = ref(null); + const currentFocusedInputRef = ref(null); + const focusedInputCursorControl = useCursor(currentFocusedInputRef); + const textareaScrollbarInstRef = ref(null); + const { + localeRef + } = useLocale("Input"); + const uncontrolledValueRef = ref(props.defaultValue); + const controlledValueRef = toRef(props, "value"); + const mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef); + const formItem = useFormItem(props); + const { + mergedSizeRef, + mergedDisabledRef, + mergedStatusRef + } = formItem; + const focusedRef = ref(false); + const hoverRef = ref(false); + const isComposingRef = ref(false); + const activatedRef = ref(false); + let syncSource = null; + const mergedPlaceholderRef = computed(() => { + const { + placeholder, + pair + } = props; + if (pair) { + if (Array.isArray(placeholder)) { + return placeholder; + } else if (placeholder === void 0) { + return ["", ""]; + } + return [placeholder, placeholder]; + } else if (placeholder === void 0) { + return [localeRef.value.placeholder]; + } else { + return [placeholder]; + } + }); + const showPlaceholder1Ref = computed(() => { + const { + value: isComposing + } = isComposingRef; + const { + value: mergedValue + } = mergedValueRef; + const { + value: mergedPlaceholder + } = mergedPlaceholderRef; + return !isComposing && (isEmptyInputValue(mergedValue) || Array.isArray(mergedValue) && isEmptyInputValue(mergedValue[0])) && mergedPlaceholder[0]; + }); + const showPlaceholder2Ref = computed(() => { + const { + value: isComposing + } = isComposingRef; + const { + value: mergedValue + } = mergedValueRef; + const { + value: mergedPlaceholder + } = mergedPlaceholderRef; + return !isComposing && mergedPlaceholder[1] && (isEmptyInputValue(mergedValue) || Array.isArray(mergedValue) && isEmptyInputValue(mergedValue[1])); + }); + const mergedFocusRef = useMemo(() => { + return props.internalForceFocus || focusedRef.value; + }); + const showClearButton = useMemo(() => { + if (mergedDisabledRef.value || props.readonly || !props.clearable || !mergedFocusRef.value && !hoverRef.value) { + return false; + } + const { + value: mergedValue + } = mergedValueRef; + const { + value: mergedFocus + } = mergedFocusRef; + if (props.pair) { + return !!(Array.isArray(mergedValue) && (mergedValue[0] || mergedValue[1])) && (hoverRef.value || mergedFocus); + } else { + return !!mergedValue && (hoverRef.value || mergedFocus); + } + }); + const mergedShowPasswordOnRef = computed(() => { + const { + showPasswordOn + } = props; + if (showPasswordOn) { + return showPasswordOn; + } + if (props.showPasswordToggle) return "click"; + return void 0; + }); + const passwordVisibleRef = ref(false); + const textDecorationStyleRef = computed(() => { + const { + textDecoration + } = props; + if (!textDecoration) return ["", ""]; + if (Array.isArray(textDecoration)) { + return textDecoration.map((v) => ({ + textDecoration: v + })); + } + return [{ + textDecoration + }]; + }); + const textAreaScrollContainerWidthRef = ref(void 0); + const updateTextAreaStyle = () => { + var _a, _b; + if (props.type === "textarea") { + const { + autosize + } = props; + if (autosize) { + textAreaScrollContainerWidthRef.value = (_b = (_a = textareaScrollbarInstRef.value) === null || _a === void 0 ? void 0 : _a.$el) === null || _b === void 0 ? void 0 : _b.offsetWidth; + } + if (!textareaElRef.value) return; + if (typeof autosize === "boolean") return; + const { + paddingTop: stylePaddingTop, + paddingBottom: stylePaddingBottom, + lineHeight: styleLineHeight + } = window.getComputedStyle(textareaElRef.value); + const paddingTop = Number(stylePaddingTop.slice(0, -2)); + const paddingBottom = Number(stylePaddingBottom.slice(0, -2)); + const lineHeight = Number(styleLineHeight.slice(0, -2)); + const { + value: textareaMirrorEl + } = textareaMirrorElRef; + if (!textareaMirrorEl) return; + if (autosize.minRows) { + const minRows = Math.max(autosize.minRows, 1); + const styleMinHeight = `${paddingTop + paddingBottom + lineHeight * minRows}px`; + textareaMirrorEl.style.minHeight = styleMinHeight; + } + if (autosize.maxRows) { + const styleMaxHeight = `${paddingTop + paddingBottom + lineHeight * autosize.maxRows}px`; + textareaMirrorEl.style.maxHeight = styleMaxHeight; + } + } + }; + const maxlengthRef = computed(() => { + const { + maxlength + } = props; + return maxlength === void 0 ? void 0 : Number(maxlength); + }); + onMounted(() => { + const { + value + } = mergedValueRef; + if (!Array.isArray(value)) { + syncMirror(value); + } + }); + const vm = getCurrentInstance().proxy; + function doUpdateValue(value, meta) { + const { + onUpdateValue, + "onUpdate:value": _onUpdateValue, + onInput + } = props; + const { + nTriggerFormInput + } = formItem; + if (onUpdateValue) call(onUpdateValue, value, meta); + if (_onUpdateValue) call(_onUpdateValue, value, meta); + if (onInput) call(onInput, value, meta); + uncontrolledValueRef.value = value; + nTriggerFormInput(); + } + function doChange(value, meta) { + const { + onChange + } = props; + const { + nTriggerFormChange + } = formItem; + if (onChange) call(onChange, value, meta); + uncontrolledValueRef.value = value; + nTriggerFormChange(); + } + function doBlur(e) { + const { + onBlur + } = props; + const { + nTriggerFormBlur + } = formItem; + if (onBlur) call(onBlur, e); + nTriggerFormBlur(); + } + function doFocus(e) { + const { + onFocus + } = props; + const { + nTriggerFormFocus + } = formItem; + if (onFocus) call(onFocus, e); + nTriggerFormFocus(); + } + function doClear(e) { + const { + onClear + } = props; + if (onClear) call(onClear, e); + } + function doUpdateValueBlur(e) { + const { + onInputBlur + } = props; + if (onInputBlur) call(onInputBlur, e); + } + function doUpdateValueFocus(e) { + const { + onInputFocus + } = props; + if (onInputFocus) call(onInputFocus, e); + } + function doDeactivate() { + const { + onDeactivate + } = props; + if (onDeactivate) call(onDeactivate); + } + function doActivate() { + const { + onActivate + } = props; + if (onActivate) call(onActivate); + } + function doClick(e) { + const { + onClick + } = props; + if (onClick) call(onClick, e); + } + function doWrapperFocus(e) { + const { + onWrapperFocus + } = props; + if (onWrapperFocus) call(onWrapperFocus, e); + } + function doWrapperBlur(e) { + const { + onWrapperBlur + } = props; + if (onWrapperBlur) call(onWrapperBlur, e); + } + function handleCompositionStart() { + isComposingRef.value = true; + } + function handleCompositionEnd(e) { + isComposingRef.value = false; + if (e.target === inputEl2Ref.value) { + handleInput(e, 1); + } else { + handleInput(e, 0); + } + } + function handleInput(e, index = 0, event = "input") { + const targetValue = e.target.value; + syncMirror(targetValue); + if (e instanceof InputEvent && !e.isComposing) { + isComposingRef.value = false; + } + if (props.type === "textarea") { + const { + value: textareaScrollbarInst + } = textareaScrollbarInstRef; + if (textareaScrollbarInst) { + textareaScrollbarInst.syncUnifiedContainer(); + } + } + syncSource = targetValue; + if (isComposingRef.value) return; + focusedInputCursorControl.recordCursor(); + const isIncomingValueValid = allowInput(targetValue); + if (isIncomingValueValid) { + if (!props.pair) { + if (event === "input") { + doUpdateValue(targetValue, { + source: index + }); + } else { + doChange(targetValue, { + source: index + }); + } + } else { + let { + value + } = mergedValueRef; + if (!Array.isArray(value)) { + value = ["", ""]; + } else { + value = [value[0], value[1]]; + } + value[index] = targetValue; + if (event === "input") { + doUpdateValue(value, { + source: index + }); + } else { + doChange(value, { + source: index + }); + } + } + } + vm.$forceUpdate(); + if (!isIncomingValueValid) { + void nextTick(focusedInputCursorControl.restoreCursor); + } + } + function allowInput(value) { + const { + countGraphemes, + maxlength, + minlength + } = props; + if (countGraphemes) { + let graphemesCount; + if (maxlength !== void 0) { + if (graphemesCount === void 0) { + graphemesCount = countGraphemes(value); + } + if (graphemesCount > Number(maxlength)) return false; + } + if (minlength !== void 0) { + if (graphemesCount === void 0) { + graphemesCount = countGraphemes(value); + } + if (graphemesCount < Number(maxlength)) return false; + } + } + const { + allowInput: allowInput2 + } = props; + if (typeof allowInput2 === "function") { + return allowInput2(value); + } + return true; + } + function handleInputBlur(e) { + doUpdateValueBlur(e); + if (e.relatedTarget === wrapperElRef.value) { + doDeactivate(); + } + if (!(e.relatedTarget !== null && (e.relatedTarget === inputElRef.value || e.relatedTarget === inputEl2Ref.value || e.relatedTarget === textareaElRef.value))) { + activatedRef.value = false; + } + dealWithEvent(e, "blur"); + currentFocusedInputRef.value = null; + } + function handleInputFocus(e, index) { + doUpdateValueFocus(e); + focusedRef.value = true; + activatedRef.value = true; + doActivate(); + dealWithEvent(e, "focus"); + if (index === 0) { + currentFocusedInputRef.value = inputElRef.value; + } else if (index === 1) { + currentFocusedInputRef.value = inputEl2Ref.value; + } else if (index === 2) { + currentFocusedInputRef.value = textareaElRef.value; + } + } + function handleWrapperBlur(e) { + if (props.passivelyActivated) { + doWrapperBlur(e); + dealWithEvent(e, "blur"); + } + } + function handleWrapperFocus(e) { + if (props.passivelyActivated) { + focusedRef.value = true; + doWrapperFocus(e); + dealWithEvent(e, "focus"); + } + } + function dealWithEvent(e, type) { + if (e.relatedTarget !== null && (e.relatedTarget === inputElRef.value || e.relatedTarget === inputEl2Ref.value || e.relatedTarget === textareaElRef.value || e.relatedTarget === wrapperElRef.value)) ; + else { + if (type === "focus") { + doFocus(e); + focusedRef.value = true; + } else if (type === "blur") { + doBlur(e); + focusedRef.value = false; + } + } + } + function handleChange(e, index) { + handleInput(e, index, "change"); + } + function handleClick(e) { + doClick(e); + } + function handleClear(e) { + doClear(e); + clearValue(); + } + function clearValue() { + if (props.pair) { + doUpdateValue(["", ""], { + source: "clear" + }); + doChange(["", ""], { + source: "clear" + }); + } else { + doUpdateValue("", { + source: "clear" + }); + doChange("", { + source: "clear" + }); + } + } + function handleMouseDown(e) { + const { + onMousedown + } = props; + if (onMousedown) onMousedown(e); + const { + tagName + } = e.target; + if (tagName !== "INPUT" && tagName !== "TEXTAREA") { + if (props.resizable) { + const { + value: wrapperEl + } = wrapperElRef; + if (wrapperEl) { + const { + left, + top, + width, + height + } = wrapperEl.getBoundingClientRect(); + const resizeHandleSize = 14; + if (left + width - resizeHandleSize < e.clientX && e.clientX < left + width && top + height - resizeHandleSize < e.clientY && e.clientY < top + height) { + return; + } + } + } + e.preventDefault(); + if (!focusedRef.value) { + focus(); + } + } + } + function handleMouseEnter() { + var _a; + hoverRef.value = true; + if (props.type === "textarea") { + (_a = textareaScrollbarInstRef.value) === null || _a === void 0 ? void 0 : _a.handleMouseEnterWrapper(); + } + } + function handleMouseLeave() { + var _a; + hoverRef.value = false; + if (props.type === "textarea") { + (_a = textareaScrollbarInstRef.value) === null || _a === void 0 ? void 0 : _a.handleMouseLeaveWrapper(); + } + } + function handlePasswordToggleClick() { + if (mergedDisabledRef.value) return; + if (mergedShowPasswordOnRef.value !== "click") return; + passwordVisibleRef.value = !passwordVisibleRef.value; + } + function handlePasswordToggleMousedown(e) { + if (mergedDisabledRef.value) return; + e.preventDefault(); + const preventDefaultOnce = (e2) => { + e2.preventDefault(); + off("mouseup", document, preventDefaultOnce); + }; + on("mouseup", document, preventDefaultOnce); + if (mergedShowPasswordOnRef.value !== "mousedown") return; + passwordVisibleRef.value = true; + const hidePassword = () => { + passwordVisibleRef.value = false; + off("mouseup", document, hidePassword); + }; + on("mouseup", document, hidePassword); + } + function handleWrapperKeyup(e) { + if (props.onKeyup) call(props.onKeyup, e); + } + function handleWrapperKeydown(e) { + if (props.onKeydown) call(props.onKeydown, e); + switch (e.key) { + case "Escape": + handleWrapperKeydownEsc(); + break; + case "Enter": + handleWrapperKeydownEnter(e); + break; + } + } + function handleWrapperKeydownEnter(e) { + var _a, _b; + if (props.passivelyActivated) { + const { + value: focused + } = activatedRef; + if (focused) { + if (props.internalDeactivateOnEnter) { + handleWrapperKeydownEsc(); + } + return; + } + e.preventDefault(); + if (props.type === "textarea") { + (_a = textareaElRef.value) === null || _a === void 0 ? void 0 : _a.focus(); + } else { + (_b = inputElRef.value) === null || _b === void 0 ? void 0 : _b.focus(); + } + } + } + function handleWrapperKeydownEsc() { + if (props.passivelyActivated) { + activatedRef.value = false; + void nextTick(() => { + var _a; + (_a = wrapperElRef.value) === null || _a === void 0 ? void 0 : _a.focus(); + }); + } + } + function focus() { + var _a, _b, _c; + if (mergedDisabledRef.value) return; + if (props.passivelyActivated) { + (_a = wrapperElRef.value) === null || _a === void 0 ? void 0 : _a.focus(); + } else { + (_b = textareaElRef.value) === null || _b === void 0 ? void 0 : _b.focus(); + (_c = inputElRef.value) === null || _c === void 0 ? void 0 : _c.focus(); + } + } + function blur() { + var _a; + if ((_a = wrapperElRef.value) === null || _a === void 0 ? void 0 : _a.contains(document.activeElement)) { + document.activeElement.blur(); + } + } + function select() { + var _a, _b; + (_a = textareaElRef.value) === null || _a === void 0 ? void 0 : _a.select(); + (_b = inputElRef.value) === null || _b === void 0 ? void 0 : _b.select(); + } + function activate() { + if (mergedDisabledRef.value) return; + if (textareaElRef.value) textareaElRef.value.focus(); + else if (inputElRef.value) inputElRef.value.focus(); + } + function deactivate() { + const { + value: wrapperEl + } = wrapperElRef; + if ((wrapperEl === null || wrapperEl === void 0 ? void 0 : wrapperEl.contains(document.activeElement)) && wrapperEl !== document.activeElement) { + handleWrapperKeydownEsc(); + } + } + function scrollTo(options) { + if (props.type === "textarea") { + const { + value: textareaEl + } = textareaElRef; + textareaEl === null || textareaEl === void 0 ? void 0 : textareaEl.scrollTo(options); + } else { + const { + value: inputEl + } = inputElRef; + inputEl === null || inputEl === void 0 ? void 0 : inputEl.scrollTo(options); + } + } + function syncMirror(value) { + const { + type, + pair, + autosize + } = props; + if (!pair && autosize) { + if (type === "textarea") { + const { + value: textareaMirrorEl + } = textareaMirrorElRef; + if (textareaMirrorEl) { + textareaMirrorEl.textContent = `${value !== null && value !== void 0 ? value : ""}\r +`; + } + } else { + const { + value: inputMirrorEl + } = inputMirrorElRef; + if (inputMirrorEl) { + if (value) { + inputMirrorEl.textContent = value; + } else { + inputMirrorEl.innerHTML = " "; + } + } + } + } + } + function handleTextAreaMirrorResize() { + updateTextAreaStyle(); + } + const placeholderStyleRef = ref({ + top: "0" + }); + function handleTextAreaScroll(e) { + var _a; + const { + scrollTop + } = e.target; + placeholderStyleRef.value.top = `${-scrollTop}px`; + (_a = textareaScrollbarInstRef.value) === null || _a === void 0 ? void 0 : _a.syncUnifiedContainer(); + } + let stopWatchMergedValue1 = null; + watchEffect(() => { + const { + autosize, + type + } = props; + if (autosize && type === "textarea") { + stopWatchMergedValue1 = watch(mergedValueRef, (value) => { + if (!Array.isArray(value) && value !== syncSource) { + syncMirror(value); + } + }); + } else { + stopWatchMergedValue1 === null || stopWatchMergedValue1 === void 0 ? void 0 : stopWatchMergedValue1(); + } + }); + let stopWatchMergedValue2 = null; + watchEffect(() => { + if (props.type === "textarea") { + stopWatchMergedValue2 = watch(mergedValueRef, (value) => { + var _a; + if (!Array.isArray(value) && value !== syncSource) { + (_a = textareaScrollbarInstRef.value) === null || _a === void 0 ? void 0 : _a.syncUnifiedContainer(); + } + }); + } else { + stopWatchMergedValue2 === null || stopWatchMergedValue2 === void 0 ? void 0 : stopWatchMergedValue2(); + } + }); + provide(inputInjectionKey, { + mergedValueRef, + maxlengthRef, + mergedClsPrefixRef, + countGraphemesRef: toRef(props, "countGraphemes") + }); + const exposedProps = { + wrapperElRef, + inputElRef, + textareaElRef, + isCompositing: isComposingRef, + clear: clearValue, + focus, + blur, + select, + deactivate, + activate, + scrollTo + }; + const rtlEnabledRef = useRtl("Input", mergedRtlRef, mergedClsPrefixRef); + const cssVarsRef = computed(() => { + const { + value: size + } = mergedSizeRef; + const { + common: { + cubicBezierEaseInOut + }, + self: { + color, + borderRadius, + textColor, + caretColor, + caretColorError, + caretColorWarning, + textDecorationColor, + border, + borderDisabled, + borderHover, + borderFocus, + placeholderColor, + placeholderColorDisabled, + lineHeightTextarea, + colorDisabled, + colorFocus, + textColorDisabled, + boxShadowFocus, + iconSize, + colorFocusWarning, + boxShadowFocusWarning, + borderWarning, + borderFocusWarning, + borderHoverWarning, + colorFocusError, + boxShadowFocusError, + borderError, + borderFocusError, + borderHoverError, + clearSize, + clearColor, + clearColorHover, + clearColorPressed, + iconColor, + iconColorDisabled, + suffixTextColor, + countTextColor, + countTextColorDisabled, + iconColorHover, + iconColorPressed, + loadingColor, + loadingColorError, + loadingColorWarning, + fontWeight, + [createKey("padding", size)]: padding, + [createKey("fontSize", size)]: fontSize, + [createKey("height", size)]: height + } + } = themeRef.value; + const { + left: paddingLeft, + right: paddingRight + } = getMargin(padding); + return { + "--n-bezier": cubicBezierEaseInOut, + "--n-count-text-color": countTextColor, + "--n-count-text-color-disabled": countTextColorDisabled, + "--n-color": color, + "--n-font-size": fontSize, + "--n-font-weight": fontWeight, + "--n-border-radius": borderRadius, + "--n-height": height, + "--n-padding-left": paddingLeft, + "--n-padding-right": paddingRight, + "--n-text-color": textColor, + "--n-caret-color": caretColor, + "--n-text-decoration-color": textDecorationColor, + "--n-border": border, + "--n-border-disabled": borderDisabled, + "--n-border-hover": borderHover, + "--n-border-focus": borderFocus, + "--n-placeholder-color": placeholderColor, + "--n-placeholder-color-disabled": placeholderColorDisabled, + "--n-icon-size": iconSize, + "--n-line-height-textarea": lineHeightTextarea, + "--n-color-disabled": colorDisabled, + "--n-color-focus": colorFocus, + "--n-text-color-disabled": textColorDisabled, + "--n-box-shadow-focus": boxShadowFocus, + "--n-loading-color": loadingColor, + // form warning + "--n-caret-color-warning": caretColorWarning, + "--n-color-focus-warning": colorFocusWarning, + "--n-box-shadow-focus-warning": boxShadowFocusWarning, + "--n-border-warning": borderWarning, + "--n-border-focus-warning": borderFocusWarning, + "--n-border-hover-warning": borderHoverWarning, + "--n-loading-color-warning": loadingColorWarning, + // form error + "--n-caret-color-error": caretColorError, + "--n-color-focus-error": colorFocusError, + "--n-box-shadow-focus-error": boxShadowFocusError, + "--n-border-error": borderError, + "--n-border-focus-error": borderFocusError, + "--n-border-hover-error": borderHoverError, + "--n-loading-color-error": loadingColorError, + // clear-button + "--n-clear-color": clearColor, + "--n-clear-size": clearSize, + "--n-clear-color-hover": clearColorHover, + "--n-clear-color-pressed": clearColorPressed, + "--n-icon-color": iconColor, + "--n-icon-color-hover": iconColorHover, + "--n-icon-color-pressed": iconColorPressed, + "--n-icon-color-disabled": iconColorDisabled, + "--n-suffix-text-color": suffixTextColor + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("input", computed(() => { + const { + value: size + } = mergedSizeRef; + return size[0]; + }), cssVarsRef, props) : void 0; + return Object.assign(Object.assign({}, exposedProps), { + // DOM ref + wrapperElRef, + inputElRef, + inputMirrorElRef, + inputEl2Ref, + textareaElRef, + textareaMirrorElRef, + textareaScrollbarInstRef, + // value + rtlEnabled: rtlEnabledRef, + uncontrolledValue: uncontrolledValueRef, + mergedValue: mergedValueRef, + passwordVisible: passwordVisibleRef, + mergedPlaceholder: mergedPlaceholderRef, + showPlaceholder1: showPlaceholder1Ref, + showPlaceholder2: showPlaceholder2Ref, + mergedFocus: mergedFocusRef, + isComposing: isComposingRef, + activated: activatedRef, + showClearButton, + mergedSize: mergedSizeRef, + mergedDisabled: mergedDisabledRef, + textDecorationStyle: textDecorationStyleRef, + mergedClsPrefix: mergedClsPrefixRef, + mergedBordered: mergedBorderedRef, + mergedShowPasswordOn: mergedShowPasswordOnRef, + placeholderStyle: placeholderStyleRef, + mergedStatus: mergedStatusRef, + textAreaScrollContainerWidth: textAreaScrollContainerWidthRef, + // methods + handleTextAreaScroll, + handleCompositionStart, + handleCompositionEnd, + handleInput, + handleInputBlur, + handleInputFocus, + handleWrapperBlur, + handleWrapperFocus, + handleMouseEnter, + handleMouseLeave, + handleMouseDown, + handleChange, + handleClick, + handleClear, + handlePasswordToggleClick, + handlePasswordToggleMousedown, + handleWrapperKeydown, + handleWrapperKeyup, + handleTextAreaMirrorResize, + getTextareaScrollContainer: () => { + return textareaElRef.value; + }, + mergedTheme: themeRef, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }); + }, + render() { + var _a, _b; + const { + mergedClsPrefix, + mergedStatus, + themeClass, + type, + countGraphemes, + onRender + } = this; + const $slots = this.$slots; + onRender === null || onRender === void 0 ? void 0 : onRender(); + return h("div", { + ref: "wrapperElRef", + class: [`${mergedClsPrefix}-input`, themeClass, mergedStatus && `${mergedClsPrefix}-input--${mergedStatus}-status`, { + [`${mergedClsPrefix}-input--rtl`]: this.rtlEnabled, + [`${mergedClsPrefix}-input--disabled`]: this.mergedDisabled, + [`${mergedClsPrefix}-input--textarea`]: type === "textarea", + [`${mergedClsPrefix}-input--resizable`]: this.resizable && !this.autosize, + [`${mergedClsPrefix}-input--autosize`]: this.autosize, + [`${mergedClsPrefix}-input--round`]: this.round && !(type === "textarea"), + [`${mergedClsPrefix}-input--pair`]: this.pair, + [`${mergedClsPrefix}-input--focus`]: this.mergedFocus, + [`${mergedClsPrefix}-input--stateful`]: this.stateful + }], + style: this.cssVars, + tabindex: !this.mergedDisabled && this.passivelyActivated && !this.activated ? 0 : void 0, + onFocus: this.handleWrapperFocus, + onBlur: this.handleWrapperBlur, + onClick: this.handleClick, + onMousedown: this.handleMouseDown, + onMouseenter: this.handleMouseEnter, + onMouseleave: this.handleMouseLeave, + onCompositionstart: this.handleCompositionStart, + onCompositionend: this.handleCompositionEnd, + onKeyup: this.handleWrapperKeyup, + onKeydown: this.handleWrapperKeydown + }, h("div", { + class: `${mergedClsPrefix}-input-wrapper` + }, resolveWrappedSlot($slots.prefix, (children) => children && h("div", { + class: `${mergedClsPrefix}-input__prefix` + }, children)), type === "textarea" ? h(Scrollbar, { + ref: "textareaScrollbarInstRef", + class: `${mergedClsPrefix}-input__textarea`, + container: this.getTextareaScrollContainer, + triggerDisplayManually: true, + useUnifiedContainer: true, + internalHoistYRail: true + }, { + default: () => { + var _a2, _b2; + const { + textAreaScrollContainerWidth + } = this; + const scrollContainerWidthStyle = { + width: this.autosize && textAreaScrollContainerWidth && `${textAreaScrollContainerWidth}px` + }; + return h(Fragment, null, h("textarea", Object.assign({}, this.inputProps, { + ref: "textareaElRef", + class: [`${mergedClsPrefix}-input__textarea-el`, (_a2 = this.inputProps) === null || _a2 === void 0 ? void 0 : _a2.class], + autofocus: this.autofocus, + rows: Number(this.rows), + placeholder: this.placeholder, + value: this.mergedValue, + disabled: this.mergedDisabled, + maxlength: countGraphemes ? void 0 : this.maxlength, + minlength: countGraphemes ? void 0 : this.minlength, + readonly: this.readonly, + tabindex: this.passivelyActivated && !this.activated ? -1 : void 0, + style: [this.textDecorationStyle[0], (_b2 = this.inputProps) === null || _b2 === void 0 ? void 0 : _b2.style, scrollContainerWidthStyle], + onBlur: this.handleInputBlur, + onFocus: (e) => { + this.handleInputFocus(e, 2); + }, + onInput: this.handleInput, + onChange: this.handleChange, + onScroll: this.handleTextAreaScroll + })), this.showPlaceholder1 ? h("div", { + class: `${mergedClsPrefix}-input__placeholder`, + style: [this.placeholderStyle, scrollContainerWidthStyle], + key: "placeholder" + }, this.mergedPlaceholder[0]) : null, this.autosize ? h(VResizeObserver, { + onResize: this.handleTextAreaMirrorResize + }, { + default: () => h("div", { + ref: "textareaMirrorElRef", + class: `${mergedClsPrefix}-input__textarea-mirror`, + key: "mirror" + }) + }) : null); + } + }) : h("div", { + class: `${mergedClsPrefix}-input__input` + }, h("input", Object.assign({ + type: type === "password" && this.mergedShowPasswordOn && this.passwordVisible ? "text" : type + }, this.inputProps, { + ref: "inputElRef", + class: [`${mergedClsPrefix}-input__input-el`, (_a = this.inputProps) === null || _a === void 0 ? void 0 : _a.class], + style: [this.textDecorationStyle[0], (_b = this.inputProps) === null || _b === void 0 ? void 0 : _b.style], + tabindex: this.passivelyActivated && !this.activated ? -1 : void 0, + placeholder: this.mergedPlaceholder[0], + disabled: this.mergedDisabled, + maxlength: countGraphemes ? void 0 : this.maxlength, + minlength: countGraphemes ? void 0 : this.minlength, + value: Array.isArray(this.mergedValue) ? this.mergedValue[0] : this.mergedValue, + readonly: this.readonly, + autofocus: this.autofocus, + size: this.attrSize, + onBlur: this.handleInputBlur, + onFocus: (e) => { + this.handleInputFocus(e, 0); + }, + onInput: (e) => { + this.handleInput(e, 0); + }, + onChange: (e) => { + this.handleChange(e, 0); + } + })), this.showPlaceholder1 ? h("div", { + class: `${mergedClsPrefix}-input__placeholder` + }, h("span", null, this.mergedPlaceholder[0])) : null, this.autosize ? h("div", { + class: `${mergedClsPrefix}-input__input-mirror`, + key: "mirror", + ref: "inputMirrorElRef" + }, " ") : null), !this.pair && resolveWrappedSlot($slots.suffix, (children) => { + return children || this.clearable || this.showCount || this.mergedShowPasswordOn || this.loading !== void 0 ? h("div", { + class: `${mergedClsPrefix}-input__suffix` + }, [resolveWrappedSlot($slots["clear-icon-placeholder"], (children2) => { + return (this.clearable || children2) && h(NBaseClear, { + clsPrefix: mergedClsPrefix, + show: this.showClearButton, + onClear: this.handleClear + }, { + placeholder: () => children2, + icon: () => { + var _a2, _b2; + return (_b2 = (_a2 = this.$slots)["clear-icon"]) === null || _b2 === void 0 ? void 0 : _b2.call(_a2); + } + }); + }), !this.internalLoadingBeforeSuffix ? children : null, this.loading !== void 0 ? h(NBaseSuffix, { + clsPrefix: mergedClsPrefix, + loading: this.loading, + showArrow: false, + showClear: false, + style: this.cssVars + }) : null, this.internalLoadingBeforeSuffix ? children : null, this.showCount && this.type !== "textarea" ? h(WordCount, null, { + default: (props) => { + var _a2; + return (_a2 = $slots.count) === null || _a2 === void 0 ? void 0 : _a2.call($slots, props); + } + }) : null, this.mergedShowPasswordOn && this.type === "password" ? h("div", { + class: `${mergedClsPrefix}-input__eye`, + onMousedown: this.handlePasswordToggleMousedown, + onClick: this.handlePasswordToggleClick + }, this.passwordVisible ? resolveSlot($slots["password-visible-icon"], () => [h(NBaseIcon, { + clsPrefix: mergedClsPrefix + }, { + default: () => h(EyeIcon, null) + })]) : resolveSlot($slots["password-invisible-icon"], () => [h(NBaseIcon, { + clsPrefix: mergedClsPrefix + }, { + default: () => h(EyeOffIcon, null) + })])) : null]) : null; + })), this.pair ? h("span", { + class: `${mergedClsPrefix}-input__separator` + }, resolveSlot($slots.separator, () => [this.separator])) : null, this.pair ? h("div", { + class: `${mergedClsPrefix}-input-wrapper` + }, h("div", { + class: `${mergedClsPrefix}-input__input` + }, h("input", { + ref: "inputEl2Ref", + type: this.type, + class: `${mergedClsPrefix}-input__input-el`, + tabindex: this.passivelyActivated && !this.activated ? -1 : void 0, + placeholder: this.mergedPlaceholder[1], + disabled: this.mergedDisabled, + maxlength: countGraphemes ? void 0 : this.maxlength, + minlength: countGraphemes ? void 0 : this.minlength, + value: Array.isArray(this.mergedValue) ? this.mergedValue[1] : void 0, + readonly: this.readonly, + style: this.textDecorationStyle[1], + onBlur: this.handleInputBlur, + onFocus: (e) => { + this.handleInputFocus(e, 1); + }, + onInput: (e) => { + this.handleInput(e, 1); + }, + onChange: (e) => { + this.handleChange(e, 1); + } + }), this.showPlaceholder2 ? h("div", { + class: `${mergedClsPrefix}-input__placeholder` + }, h("span", null, this.mergedPlaceholder[1])) : null), resolveWrappedSlot($slots.suffix, (children) => { + return (this.clearable || children) && h("div", { + class: `${mergedClsPrefix}-input__suffix` + }, [this.clearable && h(NBaseClear, { + clsPrefix: mergedClsPrefix, + show: this.showClearButton, + onClear: this.handleClear + }, { + icon: () => { + var _a2; + return (_a2 = $slots["clear-icon"]) === null || _a2 === void 0 ? void 0 : _a2.call($slots); + }, + placeholder: () => { + var _a2; + return (_a2 = $slots["clear-icon-placeholder"]) === null || _a2 === void 0 ? void 0 : _a2.call($slots); + } + }), children]); + })) : null, this.mergedBordered ? h("div", { + class: `${mergedClsPrefix}-input__border` + }) : null, this.mergedBordered ? h("div", { + class: `${mergedClsPrefix}-input__state-border` + }) : null, this.showCount && type === "textarea" ? h(WordCount, null, { + default: (props) => { + var _a2; + const { + renderCount + } = this; + if (renderCount) { + return renderCount(props); + } + return (_a2 = $slots.count) === null || _a2 === void 0 ? void 0 : _a2.call($slots, props); + } + }) : null); + } +}); +const style = cB("switch", ` + height: var(--n-height); + min-width: var(--n-width); + vertical-align: middle; + user-select: none; + -webkit-user-select: none; + display: inline-flex; + outline: none; + justify-content: center; + align-items: center; +`, [cE("children-placeholder", ` + height: var(--n-rail-height); + display: flex; + flex-direction: column; + overflow: hidden; + pointer-events: none; + visibility: hidden; + `), cE("rail-placeholder", ` + display: flex; + flex-wrap: none; + `), cE("button-placeholder", ` + width: calc(1.75 * var(--n-rail-height)); + height: var(--n-rail-height); + `), cB("base-loading", ` + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + font-size: calc(var(--n-button-width) - 4px); + color: var(--n-loading-color); + transition: color .3s var(--n-bezier); + `, [iconSwitchTransition({ + left: "50%", + top: "50%", + originalTransform: "translateX(-50%) translateY(-50%)" +})]), cE("checked, unchecked", ` + transition: color .3s var(--n-bezier); + color: var(--n-text-color); + box-sizing: border-box; + position: absolute; + white-space: nowrap; + top: 0; + bottom: 0; + display: flex; + align-items: center; + line-height: 1; + `), cE("checked", ` + right: 0; + padding-right: calc(1.25 * var(--n-rail-height) - var(--n-offset)); + `), cE("unchecked", ` + left: 0; + justify-content: flex-end; + padding-left: calc(1.25 * var(--n-rail-height) - var(--n-offset)); + `), c("&:focus", [cE("rail", ` + box-shadow: var(--n-box-shadow-focus); + `)]), cM("round", [cE("rail", "border-radius: calc(var(--n-rail-height) / 2);", [cE("button", "border-radius: calc(var(--n-button-height) / 2);")])]), cNotM("disabled", [cNotM("icon", [cM("rubber-band", [cM("pressed", [cE("rail", [cE("button", "max-width: var(--n-button-width-pressed);")])]), cE("rail", [c("&:active", [cE("button", "max-width: var(--n-button-width-pressed);")])]), cM("active", [cM("pressed", [cE("rail", [cE("button", "left: calc(100% - var(--n-offset) - var(--n-button-width-pressed));")])]), cE("rail", [c("&:active", [cE("button", "left: calc(100% - var(--n-offset) - var(--n-button-width-pressed));")])])])])])]), cM("active", [cE("rail", [cE("button", "left: calc(100% - var(--n-button-width) - var(--n-offset))")])]), cE("rail", ` + overflow: hidden; + height: var(--n-rail-height); + min-width: var(--n-rail-width); + border-radius: var(--n-rail-border-radius); + cursor: pointer; + position: relative; + transition: + opacity .3s var(--n-bezier), + background .3s var(--n-bezier), + box-shadow .3s var(--n-bezier); + background-color: var(--n-rail-color); + `, [cE("button-icon", ` + color: var(--n-icon-color); + transition: color .3s var(--n-bezier); + font-size: calc(var(--n-button-height) - 4px); + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; + line-height: 1; + `, [iconSwitchTransition()]), cE("button", ` + align-items: center; + top: var(--n-offset); + left: var(--n-offset); + height: var(--n-button-height); + width: var(--n-button-width-pressed); + max-width: var(--n-button-width); + border-radius: var(--n-button-border-radius); + background-color: var(--n-button-color); + box-shadow: var(--n-button-box-shadow); + box-sizing: border-box; + cursor: inherit; + content: ""; + position: absolute; + transition: + background-color .3s var(--n-bezier), + left .3s var(--n-bezier), + opacity .3s var(--n-bezier), + max-width .3s var(--n-bezier), + box-shadow .3s var(--n-bezier); + `)]), cM("active", [cE("rail", "background-color: var(--n-rail-color-active);")]), cM("loading", [cE("rail", ` + cursor: wait; + `)]), cM("disabled", [cE("rail", ` + cursor: not-allowed; + opacity: .5; + `)])]); +const switchProps = Object.assign(Object.assign({}, useTheme.props), { + size: { + type: String, + default: "medium" + }, + value: { + type: [String, Number, Boolean], + default: void 0 + }, + loading: Boolean, + defaultValue: { + type: [String, Number, Boolean], + default: false + }, + disabled: { + type: Boolean, + default: void 0 + }, + round: { + type: Boolean, + default: true + }, + "onUpdate:value": [Function, Array], + onUpdateValue: [Function, Array], + checkedValue: { + type: [String, Number, Boolean], + default: true + }, + uncheckedValue: { + type: [String, Number, Boolean], + default: false + }, + railStyle: Function, + rubberBand: { + type: Boolean, + default: true + }, + /** @deprecated */ + onChange: [Function, Array] +}); +let supportCssMax; +const __unplugin_components_3 = defineComponent({ + name: "Switch", + props: switchProps, + setup(props) { + if (supportCssMax === void 0) { + if (typeof CSS !== "undefined") { + if (typeof CSS.supports !== "undefined") { + supportCssMax = CSS.supports("width", "max(1px)"); + } else { + supportCssMax = false; + } + } else { + supportCssMax = true; + } + } + const { + mergedClsPrefixRef, + inlineThemeDisabled + } = useConfig(props); + const themeRef = useTheme("Switch", "-switch", style, switchLight, props, mergedClsPrefixRef); + const formItem = useFormItem(props); + const { + mergedSizeRef, + mergedDisabledRef + } = formItem; + const uncontrolledValueRef = ref(props.defaultValue); + const controlledValueRef = toRef(props, "value"); + const mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef); + const checkedRef = computed(() => { + return mergedValueRef.value === props.checkedValue; + }); + const pressedRef = ref(false); + const focusedRef = ref(false); + const mergedRailStyleRef = computed(() => { + const { + railStyle + } = props; + if (!railStyle) return void 0; + return railStyle({ + focused: focusedRef.value, + checked: checkedRef.value + }); + }); + function doUpdateValue(value) { + const { + "onUpdate:value": _onUpdateValue, + onChange, + onUpdateValue + } = props; + const { + nTriggerFormInput, + nTriggerFormChange + } = formItem; + if (_onUpdateValue) call(_onUpdateValue, value); + if (onUpdateValue) call(onUpdateValue, value); + if (onChange) call(onChange, value); + uncontrolledValueRef.value = value; + nTriggerFormInput(); + nTriggerFormChange(); + } + function doFocus() { + const { + nTriggerFormFocus + } = formItem; + nTriggerFormFocus(); + } + function doBlur() { + const { + nTriggerFormBlur + } = formItem; + nTriggerFormBlur(); + } + function handleClick() { + if (props.loading || mergedDisabledRef.value) return; + if (mergedValueRef.value !== props.checkedValue) { + doUpdateValue(props.checkedValue); + } else { + doUpdateValue(props.uncheckedValue); + } + } + function handleFocus() { + focusedRef.value = true; + doFocus(); + } + function handleBlur() { + focusedRef.value = false; + doBlur(); + pressedRef.value = false; + } + function handleKeyup(e) { + if (props.loading || mergedDisabledRef.value) return; + if (e.key === " ") { + if (mergedValueRef.value !== props.checkedValue) { + doUpdateValue(props.checkedValue); + } else { + doUpdateValue(props.uncheckedValue); + } + pressedRef.value = false; + } + } + function handleKeydown(e) { + if (props.loading || mergedDisabledRef.value) return; + if (e.key === " ") { + e.preventDefault(); + pressedRef.value = true; + } + } + const cssVarsRef = computed(() => { + const { + value: size + } = mergedSizeRef; + const { + self: { + opacityDisabled, + railColor, + railColorActive, + buttonBoxShadow, + buttonColor, + boxShadowFocus, + loadingColor, + textColor, + iconColor, + [createKey("buttonHeight", size)]: buttonHeight, + [createKey("buttonWidth", size)]: buttonWidth, + [createKey("buttonWidthPressed", size)]: buttonWidthPressed, + [createKey("railHeight", size)]: railHeight, + [createKey("railWidth", size)]: railWidth, + [createKey("railBorderRadius", size)]: railBorderRadius, + [createKey("buttonBorderRadius", size)]: buttonBorderRadius + }, + common: { + cubicBezierEaseInOut + } + } = themeRef.value; + let offset; + let height; + let width; + if (supportCssMax) { + offset = `calc((${railHeight} - ${buttonHeight}) / 2)`; + height = `max(${railHeight}, ${buttonHeight})`; + width = `max(${railWidth}, calc(${railWidth} + ${buttonHeight} - ${railHeight}))`; + } else { + offset = pxfy((depx(railHeight) - depx(buttonHeight)) / 2); + height = pxfy(Math.max(depx(railHeight), depx(buttonHeight))); + width = depx(railHeight) > depx(buttonHeight) ? railWidth : pxfy(depx(railWidth) + depx(buttonHeight) - depx(railHeight)); + } + return { + "--n-bezier": cubicBezierEaseInOut, + "--n-button-border-radius": buttonBorderRadius, + "--n-button-box-shadow": buttonBoxShadow, + "--n-button-color": buttonColor, + "--n-button-width": buttonWidth, + "--n-button-width-pressed": buttonWidthPressed, + "--n-button-height": buttonHeight, + "--n-height": height, + "--n-offset": offset, + "--n-opacity-disabled": opacityDisabled, + "--n-rail-border-radius": railBorderRadius, + "--n-rail-color": railColor, + "--n-rail-color-active": railColorActive, + "--n-rail-height": railHeight, + "--n-rail-width": railWidth, + "--n-width": width, + "--n-box-shadow-focus": boxShadowFocus, + "--n-loading-color": loadingColor, + "--n-text-color": textColor, + "--n-icon-color": iconColor + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("switch", computed(() => { + return mergedSizeRef.value[0]; + }), cssVarsRef, props) : void 0; + return { + handleClick, + handleBlur, + handleFocus, + handleKeyup, + handleKeydown, + mergedRailStyle: mergedRailStyleRef, + pressed: pressedRef, + mergedClsPrefix: mergedClsPrefixRef, + mergedValue: mergedValueRef, + checked: checkedRef, + mergedDisabled: mergedDisabledRef, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }; + }, + render() { + const { + mergedClsPrefix, + mergedDisabled, + checked, + mergedRailStyle, + onRender, + $slots + } = this; + onRender === null || onRender === void 0 ? void 0 : onRender(); + const { + checked: checkedSlot, + unchecked: uncheckedSlot, + icon: iconSlot, + "checked-icon": checkedIconSlot, + "unchecked-icon": uncheckedIconSlot + } = $slots; + const hasIcon = !(isSlotEmpty(iconSlot) && isSlotEmpty(checkedIconSlot) && isSlotEmpty(uncheckedIconSlot)); + return h("div", { + role: "switch", + "aria-checked": checked, + class: [`${mergedClsPrefix}-switch`, this.themeClass, hasIcon && `${mergedClsPrefix}-switch--icon`, checked && `${mergedClsPrefix}-switch--active`, mergedDisabled && `${mergedClsPrefix}-switch--disabled`, this.round && `${mergedClsPrefix}-switch--round`, this.loading && `${mergedClsPrefix}-switch--loading`, this.pressed && `${mergedClsPrefix}-switch--pressed`, this.rubberBand && `${mergedClsPrefix}-switch--rubber-band`], + tabindex: !this.mergedDisabled ? 0 : void 0, + style: this.cssVars, + onClick: this.handleClick, + onFocus: this.handleFocus, + onBlur: this.handleBlur, + onKeyup: this.handleKeyup, + onKeydown: this.handleKeydown + }, h("div", { + class: `${mergedClsPrefix}-switch__rail`, + "aria-hidden": "true", + style: mergedRailStyle + }, resolveWrappedSlot(checkedSlot, (checkedSlotChildren) => resolveWrappedSlot(uncheckedSlot, (uncheckedSlotChildren) => { + if (checkedSlotChildren || uncheckedSlotChildren) { + return h("div", { + "aria-hidden": true, + class: `${mergedClsPrefix}-switch__children-placeholder` + }, h("div", { + class: `${mergedClsPrefix}-switch__rail-placeholder` + }, h("div", { + class: `${mergedClsPrefix}-switch__button-placeholder` + }), checkedSlotChildren), h("div", { + class: `${mergedClsPrefix}-switch__rail-placeholder` + }, h("div", { + class: `${mergedClsPrefix}-switch__button-placeholder` + }), uncheckedSlotChildren)); + } + return null; + })), h("div", { + class: `${mergedClsPrefix}-switch__button` + }, resolveWrappedSlot(iconSlot, (icon) => resolveWrappedSlot(checkedIconSlot, (checkedIcon) => resolveWrappedSlot(uncheckedIconSlot, (uncheckedIcon) => { + return h(NIconSwitchTransition, null, { + default: () => this.loading ? h(NBaseLoading, { + key: "loading", + clsPrefix: mergedClsPrefix, + strokeWidth: 20 + }) : this.checked && (checkedIcon || icon) ? h("div", { + class: `${mergedClsPrefix}-switch__button-icon`, + key: checkedIcon ? "checked-icon" : "icon" + }, checkedIcon || icon) : !this.checked && (uncheckedIcon || icon) ? h("div", { + class: `${mergedClsPrefix}-switch__button-icon`, + key: uncheckedIcon ? "unchecked-icon" : "icon" + }, uncheckedIcon || icon) : null + }); + }))), resolveWrappedSlot(checkedSlot, (children) => children && h("div", { + key: "checked", + class: `${mergedClsPrefix}-switch__checked` + }, children)), resolveWrappedSlot(uncheckedSlot, (children) => children && h("div", { + key: "unchecked", + class: `${mergedClsPrefix}-switch__unchecked` + }, children))))); + } +}); +export { + __unplugin_components_1 as _, + __unplugin_components_3 as a +}; diff --git a/out/renderer/assets/Switch-D3Z_Vg3u.js.gz b/out/renderer/assets/Switch-D3Z_Vg3u.js.gz new file mode 100644 index 0000000..3e65ca6 Binary files /dev/null and b/out/renderer/assets/Switch-D3Z_Vg3u.js.gz differ diff --git a/out/renderer/assets/Tag-C0oC92WF.js b/out/renderer/assets/Tag-C0oC92WF.js new file mode 100644 index 0000000..1c3002f --- /dev/null +++ b/out/renderer/assets/Tag-C0oC92WF.js @@ -0,0 +1,344 @@ +import { p as cB, W as cM, Y as cE, V as cNotM, m as c, q as useTheme, d as defineComponent, r as ref, x as useConfig, by as tagLight, $ as provide, A as toRef, F as useRtl, G as computed, ao as createKey, bs as getMargin, ap as useThemeClass, bx as color2Class, I as resolveWrappedSlot, l as h, bz as NBaseClose, aL as createInjectionKey, L as call } from "./index-DKaFsuse.js"; +const commonProps = { + color: Object, + type: { + type: String, + default: "default" + }, + round: Boolean, + size: { + type: String, + default: "medium" + }, + closable: Boolean, + disabled: { + type: Boolean, + default: void 0 + } +}; +const style = cB("tag", ` + --n-close-margin: var(--n-close-margin-top) var(--n-close-margin-right) var(--n-close-margin-bottom) var(--n-close-margin-left); + white-space: nowrap; + position: relative; + box-sizing: border-box; + cursor: default; + display: inline-flex; + align-items: center; + flex-wrap: nowrap; + padding: var(--n-padding); + border-radius: var(--n-border-radius); + color: var(--n-text-color); + background-color: var(--n-color); + transition: + border-color .3s var(--n-bezier), + background-color .3s var(--n-bezier), + color .3s var(--n-bezier), + box-shadow .3s var(--n-bezier), + opacity .3s var(--n-bezier); + line-height: 1; + height: var(--n-height); + font-size: var(--n-font-size); +`, [cM("strong", ` + font-weight: var(--n-font-weight-strong); + `), cE("border", ` + pointer-events: none; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + border-radius: inherit; + border: var(--n-border); + transition: border-color .3s var(--n-bezier); + `), cE("icon", ` + display: flex; + margin: 0 4px 0 0; + color: var(--n-text-color); + transition: color .3s var(--n-bezier); + font-size: var(--n-avatar-size-override); + `), cE("avatar", ` + display: flex; + margin: 0 6px 0 0; + `), cE("close", ` + margin: var(--n-close-margin); + transition: + background-color .3s var(--n-bezier), + color .3s var(--n-bezier); + `), cM("round", ` + padding: 0 calc(var(--n-height) / 3); + border-radius: calc(var(--n-height) / 2); + `, [cE("icon", ` + margin: 0 4px 0 calc((var(--n-height) - 8px) / -2); + `), cE("avatar", ` + margin: 0 6px 0 calc((var(--n-height) - 8px) / -2); + `), cM("closable", ` + padding: 0 calc(var(--n-height) / 4) 0 calc(var(--n-height) / 3); + `)]), cM("icon, avatar", [cM("round", ` + padding: 0 calc(var(--n-height) / 3) 0 calc(var(--n-height) / 2); + `)]), cM("disabled", ` + cursor: not-allowed !important; + opacity: var(--n-opacity-disabled); + `), cM("checkable", ` + cursor: pointer; + box-shadow: none; + color: var(--n-text-color-checkable); + background-color: var(--n-color-checkable); + `, [cNotM("disabled", [c("&:hover", "background-color: var(--n-color-hover-checkable);", [cNotM("checked", "color: var(--n-text-color-hover-checkable);")]), c("&:active", "background-color: var(--n-color-pressed-checkable);", [cNotM("checked", "color: var(--n-text-color-pressed-checkable);")])]), cM("checked", ` + color: var(--n-text-color-checked); + background-color: var(--n-color-checked); + `, [cNotM("disabled", [c("&:hover", "background-color: var(--n-color-checked-hover);"), c("&:active", "background-color: var(--n-color-checked-pressed);")])])])]); +const tagProps = Object.assign(Object.assign(Object.assign({}, useTheme.props), commonProps), { + bordered: { + type: Boolean, + default: void 0 + }, + checked: Boolean, + checkable: Boolean, + strong: Boolean, + triggerClickOnClose: Boolean, + onClose: [Array, Function], + onMouseenter: Function, + onMouseleave: Function, + "onUpdate:checked": Function, + onUpdateChecked: Function, + // private + internalCloseFocusable: { + type: Boolean, + default: true + }, + internalCloseIsButtonTag: { + type: Boolean, + default: true + }, + // deprecated + onCheckedChange: Function +}); +const tagInjectionKey = createInjectionKey("n-tag"); +const __unplugin_components_4 = defineComponent({ + name: "Tag", + props: tagProps, + setup(props) { + const contentRef = ref(null); + const { + mergedBorderedRef, + mergedClsPrefixRef, + inlineThemeDisabled, + mergedRtlRef + } = useConfig(props); + const themeRef = useTheme("Tag", "-tag", style, tagLight, props, mergedClsPrefixRef); + provide(tagInjectionKey, { + roundRef: toRef(props, "round") + }); + function handleClick() { + if (!props.disabled) { + if (props.checkable) { + const { + checked, + onCheckedChange, + onUpdateChecked, + "onUpdate:checked": _onUpdateChecked + } = props; + if (onUpdateChecked) onUpdateChecked(!checked); + if (_onUpdateChecked) _onUpdateChecked(!checked); + if (onCheckedChange) onCheckedChange(!checked); + } + } + } + function handleCloseClick(e) { + if (!props.triggerClickOnClose) { + e.stopPropagation(); + } + if (!props.disabled) { + const { + onClose + } = props; + if (onClose) call(onClose, e); + } + } + const tagPublicMethods = { + setTextContent(textContent) { + const { + value + } = contentRef; + if (value) value.textContent = textContent; + } + }; + const rtlEnabledRef = useRtl("Tag", mergedRtlRef, mergedClsPrefixRef); + const cssVarsRef = computed(() => { + const { + type, + size, + color: { + color, + textColor + } = {} + } = props; + const { + common: { + cubicBezierEaseInOut + }, + self: { + padding, + closeMargin, + borderRadius, + opacityDisabled, + textColorCheckable, + textColorHoverCheckable, + textColorPressedCheckable, + textColorChecked, + colorCheckable, + colorHoverCheckable, + colorPressedCheckable, + colorChecked, + colorCheckedHover, + colorCheckedPressed, + closeBorderRadius, + fontWeightStrong, + [createKey("colorBordered", type)]: colorBordered, + [createKey("closeSize", size)]: closeSize, + [createKey("closeIconSize", size)]: closeIconSize, + [createKey("fontSize", size)]: fontSize, + [createKey("height", size)]: height, + [createKey("color", type)]: typedColor, + [createKey("textColor", type)]: typeTextColor, + [createKey("border", type)]: border, + [createKey("closeIconColor", type)]: closeIconColor, + [createKey("closeIconColorHover", type)]: closeIconColorHover, + [createKey("closeIconColorPressed", type)]: closeIconColorPressed, + [createKey("closeColorHover", type)]: closeColorHover, + [createKey("closeColorPressed", type)]: closeColorPressed + } + } = themeRef.value; + const closeMarginDiscrete = getMargin(closeMargin); + return { + "--n-font-weight-strong": fontWeightStrong, + "--n-avatar-size-override": `calc(${height} - 8px)`, + "--n-bezier": cubicBezierEaseInOut, + "--n-border-radius": borderRadius, + "--n-border": border, + "--n-close-icon-size": closeIconSize, + "--n-close-color-pressed": closeColorPressed, + "--n-close-color-hover": closeColorHover, + "--n-close-border-radius": closeBorderRadius, + "--n-close-icon-color": closeIconColor, + "--n-close-icon-color-hover": closeIconColorHover, + "--n-close-icon-color-pressed": closeIconColorPressed, + "--n-close-icon-color-disabled": closeIconColor, + "--n-close-margin-top": closeMarginDiscrete.top, + "--n-close-margin-right": closeMarginDiscrete.right, + "--n-close-margin-bottom": closeMarginDiscrete.bottom, + "--n-close-margin-left": closeMarginDiscrete.left, + "--n-close-size": closeSize, + "--n-color": color || (mergedBorderedRef.value ? colorBordered : typedColor), + "--n-color-checkable": colorCheckable, + "--n-color-checked": colorChecked, + "--n-color-checked-hover": colorCheckedHover, + "--n-color-checked-pressed": colorCheckedPressed, + "--n-color-hover-checkable": colorHoverCheckable, + "--n-color-pressed-checkable": colorPressedCheckable, + "--n-font-size": fontSize, + "--n-height": height, + "--n-opacity-disabled": opacityDisabled, + "--n-padding": padding, + "--n-text-color": textColor || typeTextColor, + "--n-text-color-checkable": textColorCheckable, + "--n-text-color-checked": textColorChecked, + "--n-text-color-hover-checkable": textColorHoverCheckable, + "--n-text-color-pressed-checkable": textColorPressedCheckable + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("tag", computed(() => { + let hash = ""; + const { + type, + size, + color: { + color, + textColor + } = {} + } = props; + hash += type[0]; + hash += size[0]; + if (color) { + hash += `a${color2Class(color)}`; + } + if (textColor) { + hash += `b${color2Class(textColor)}`; + } + if (mergedBorderedRef.value) { + hash += "c"; + } + return hash; + }), cssVarsRef, props) : void 0; + return Object.assign(Object.assign({}, tagPublicMethods), { + rtlEnabled: rtlEnabledRef, + mergedClsPrefix: mergedClsPrefixRef, + contentRef, + mergedBordered: mergedBorderedRef, + handleClick, + handleCloseClick, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }); + }, + render() { + var _a, _b; + const { + mergedClsPrefix, + rtlEnabled, + closable, + color: { + borderColor + } = {}, + round, + onRender, + $slots + } = this; + onRender === null || onRender === void 0 ? void 0 : onRender(); + const avatarNode = resolveWrappedSlot($slots.avatar, (children) => children && h("div", { + class: `${mergedClsPrefix}-tag__avatar` + }, children)); + const iconNode = resolveWrappedSlot($slots.icon, (children) => children && h("div", { + class: `${mergedClsPrefix}-tag__icon` + }, children)); + return h("div", { + class: [`${mergedClsPrefix}-tag`, this.themeClass, { + [`${mergedClsPrefix}-tag--rtl`]: rtlEnabled, + [`${mergedClsPrefix}-tag--strong`]: this.strong, + [`${mergedClsPrefix}-tag--disabled`]: this.disabled, + [`${mergedClsPrefix}-tag--checkable`]: this.checkable, + [`${mergedClsPrefix}-tag--checked`]: this.checkable && this.checked, + [`${mergedClsPrefix}-tag--round`]: round, + [`${mergedClsPrefix}-tag--avatar`]: avatarNode, + [`${mergedClsPrefix}-tag--icon`]: iconNode, + [`${mergedClsPrefix}-tag--closable`]: closable + }], + style: this.cssVars, + onClick: this.handleClick, + onMouseenter: this.onMouseenter, + onMouseleave: this.onMouseleave + }, iconNode || avatarNode, h("span", { + class: `${mergedClsPrefix}-tag__content`, + ref: "contentRef" + }, (_b = (_a = this.$slots).default) === null || _b === void 0 ? void 0 : _b.call(_a)), !this.checkable && closable ? h(NBaseClose, { + clsPrefix: mergedClsPrefix, + class: `${mergedClsPrefix}-tag__close`, + disabled: this.disabled, + onClick: this.handleCloseClick, + focusable: this.internalCloseFocusable, + round, + isButtonTag: this.internalCloseIsButtonTag, + absolute: true + }) : null, !this.checkable && this.mergedBordered ? h("div", { + class: `${mergedClsPrefix}-tag__border`, + style: { + borderColor + } + }) : null); + } +}); +export { + __unplugin_components_4 as _, + tagInjectionKey as t +}; diff --git a/out/renderer/assets/Tag-C0oC92WF.js.gz b/out/renderer/assets/Tag-C0oC92WF.js.gz new file mode 100644 index 0000000..debcfbe Binary files /dev/null and b/out/renderer/assets/Tag-C0oC92WF.js.gz differ diff --git a/out/renderer/assets/TitleBar-Bl1cFyS0.js b/out/renderer/assets/TitleBar-Bl1cFyS0.js new file mode 100644 index 0000000..93ebdd2 --- /dev/null +++ b/out/renderer/assets/TitleBar-Bl1cFyS0.js @@ -0,0 +1,63 @@ +import { as as inject, ce as dialogApiInjectionKey, bi as throwError, d as defineComponent, j as openBlock, c as createElementBlock, b as createBaseVNode, R as isElectron, _ as _export_sfc } from "./index-DKaFsuse.js"; +function useDialog() { + const dialog = inject(dialogApiInjectionKey, null); + if (dialog === null) { + throwError("use-dialog", "No outer founded."); + } + return dialog; +} +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "TitleBar", + setup(__props) { + const dialog = useDialog(); + const minimize = () => { + if (!isElectron) { + return; + } + window.api.minimize(); + }; + const close = () => { + if (!isElectron) { + return; + } + dialog.warning({ + title: "提示", + content: "确定要退出吗?", + positiveText: "最小化", + negativeText: "关闭", + onPositiveClick: () => { + window.api.minimize(); + }, + onNegativeClick: () => { + window.api.close(); + } + }); + }; + const drag = (event) => { + if (!isElectron) { + return; + } + window.api.dragStart(event); + }; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", { + id: "title-bar", + onMousedown: drag + }, [ + _cache[2] || (_cache[2] = createBaseVNode("div", { id: "title" }, "Alger Music", -1)), + createBaseVNode("div", { id: "buttons" }, [ + createBaseVNode("button", { onClick: minimize }, _cache[0] || (_cache[0] = [ + createBaseVNode("i", { class: "iconfont icon-minisize" }, null, -1) + ])), + createBaseVNode("button", { onClick: close }, _cache[1] || (_cache[1] = [ + createBaseVNode("i", { class: "iconfont icon-close" }, null, -1) + ])) + ]) + ], 32); + }; + } +}); +const TitleBar = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-6ad4ce60"]]); +export { + TitleBar as default +}; diff --git a/out/renderer/assets/TitleBar-Bl1cFyS0.js.gz b/out/renderer/assets/TitleBar-Bl1cFyS0.js.gz new file mode 100644 index 0000000..dc21eaa Binary files /dev/null and b/out/renderer/assets/TitleBar-Bl1cFyS0.js.gz differ diff --git a/out/renderer/assets/TitleBar-DxNBjVsT.css b/out/renderer/assets/TitleBar-DxNBjVsT.css new file mode 100644 index 0000000..6f68512 --- /dev/null +++ b/out/renderer/assets/TitleBar-DxNBjVsT.css @@ -0,0 +1,37 @@ +#title-bar[data-v-6ad4ce60] { + -webkit-app-region: drag; + position: relative; + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + justify-content: space-between; + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity, 1)); +}#title-bar[data-v-6ad4ce60]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +}#title-bar[data-v-6ad4ce60] { + z-index: 9999999; +} +#buttons[data-v-6ad4ce60] { + display: flex; + gap: 1rem; + -webkit-app-region: no-drag; +} +button[data-v-6ad4ce60] { + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} +button[data-v-6ad4ce60]:hover { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} +button[data-v-6ad4ce60]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} \ No newline at end of file diff --git a/src/assets/alipay.png b/out/renderer/assets/alipay-CcfmUela.png similarity index 100% rename from src/assets/alipay.png rename to out/renderer/assets/alipay-CcfmUela.png diff --git a/out/renderer/assets/home-BXGE9AqN.js b/out/renderer/assets/home-BXGE9AqN.js new file mode 100644 index 0000000..dfbcc25 --- /dev/null +++ b/out/renderer/assets/home-BXGE9AqN.js @@ -0,0 +1,31 @@ +import { ad as request } from "./index-DKaFsuse.js"; +const getHotSinger = (params) => { + return request.get("/top/artists", { params }); +}; +const getSearchKeyword = () => { + return request.get("/search/default"); +}; +const getHotSearch = () => { + return request.get("/search/hot/detail"); +}; +const getPlaylistCategory = () => { + return request.get("/playlist/catlist"); +}; +const getRecommendMusic = (params) => { + return request.get("/personalized/newsong", { params }); +}; +const getDayRecommend = () => { + return request.get("/recommend/songs"); +}; +const getNewAlbum = () => { + return request.get("/album/newest"); +}; +export { + getNewAlbum as a, + getHotSinger as b, + getDayRecommend as c, + getRecommendMusic as d, + getHotSearch as e, + getSearchKeyword as f, + getPlaylistCategory as g +}; diff --git a/public/icon.png b/out/renderer/assets/icon-mGmYaNg4.png similarity index 100% rename from public/icon.png rename to out/renderer/assets/icon-mGmYaNg4.png diff --git a/public/icon/iconfont.woff b/out/renderer/assets/iconfont-53c_NoX9.woff similarity index 100% rename from public/icon/iconfont.woff rename to out/renderer/assets/iconfont-53c_NoX9.woff diff --git a/public/icon/iconfont.ttf b/out/renderer/assets/iconfont-Cio8idH0.ttf similarity index 100% rename from public/icon/iconfont.ttf rename to out/renderer/assets/iconfont-Cio8idH0.ttf diff --git a/public/icon/iconfont.woff2 b/out/renderer/assets/iconfont-DzQUHqRQ.woff2 similarity index 100% rename from public/icon/iconfont.woff2 rename to out/renderer/assets/iconfont-DzQUHqRQ.woff2 diff --git a/out/renderer/assets/index-B-m4kL_6.css b/out/renderer/assets/index-B-m4kL_6.css new file mode 100644 index 0000000..c9ea2bb --- /dev/null +++ b/out/renderer/assets/index-B-m4kL_6.css @@ -0,0 +1,43 @@ +.favorite-page[data-v-2d1a7423] {display: flex;height: 100%;flex-direction: column;padding-top: 0.5rem;--tw-bg-opacity: 1;background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)) +}.favorite-page[data-v-2d1a7423]:is(.dark *) {--tw-bg-opacity: 1;background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)) +} +.favorite-page .favorite-header[data-v-2d1a7423] {display: flex;flex-shrink: 0;align-items: center;justify-content: space-between;padding-left: 1rem;padding-right: 1rem +} +.favorite-page .favorite-header h2[data-v-2d1a7423] {padding-bottom: 0.5rem;font-size: 1.25rem;line-height: 1.75rem;font-weight: 700;--tw-text-opacity: 1;color: rgb(17 24 39 / var(--tw-text-opacity, 1)) +} +.favorite-page .favorite-header h2[data-v-2d1a7423]:is(.dark *) {--tw-text-opacity: 1;color: rgb(255 255 255 / var(--tw-text-opacity, 1)) +} +.favorite-page .favorite-header .favorite-count[data-v-2d1a7423] {font-size: 0.875rem;line-height: 1.25rem;--tw-text-opacity: 1;color: rgb(107 114 128 / var(--tw-text-opacity, 1)) +} +.favorite-page .favorite-header .favorite-count[data-v-2d1a7423]:is(.dark *) {--tw-text-opacity: 1;color: rgb(156 163 175 / var(--tw-text-opacity, 1)) +} +.favorite-page .favorite-main[data-v-2d1a7423] {display: flex;min-height: 0px;flex-grow: 1;flex-direction: column +} +.favorite-page .favorite-main .favorite-content[data-v-2d1a7423] {min-height: 0px;flex-grow: 1 +} +.favorite-page .favorite-main .favorite-content .empty-tip[data-v-2d1a7423] {display: flex;height: 100%;align-items: center;justify-content: center;--tw-text-opacity: 1;color: rgb(107 114 128 / var(--tw-text-opacity, 1)) +} +.favorite-page .favorite-main .favorite-content .empty-tip[data-v-2d1a7423]:is(.dark *) {--tw-text-opacity: 1;color: rgb(156 163 175 / var(--tw-text-opacity, 1)) +} +.favorite-page .favorite-main .favorite-content .favorite-list[data-v-2d1a7423] > :not([hidden]) ~ :not([hidden]) {--tw-space-y-reverse: 0;margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)) +} +.favorite-page .favorite-main .favorite-content .favorite-list[data-v-2d1a7423] {padding-left: 1rem;padding-right: 1rem;padding-bottom: 1rem +} +.favorite-page .favorite-main .favorite-content .favorite-list-more[data-v-2d1a7423] {margin-top: 1rem +} +.favorite-page .favorite-main .favorite-content .favorite-list-more .n-button[data-v-2d1a7423] {--tw-text-opacity: 1;color: rgb(34 197 94 / var(--tw-text-opacity, 1)) +} +.favorite-page .favorite-main .favorite-content .favorite-list-more .n-button[data-v-2d1a7423]:hover {--tw-text-opacity: 1;color: rgb(22 163 74 / var(--tw-text-opacity, 1)) +} +.loading-wrapper[data-v-2d1a7423] {display: flex;align-items: center;justify-content: center;padding-top: 5rem;padding-bottom: 5rem +} +.no-more-tip[data-v-2d1a7423] {padding-top: 1rem;padding-bottom: 1rem;text-align: center;font-size: 0.875rem;line-height: 1.25rem;--tw-text-opacity: 1;color: rgb(107 114 128 / var(--tw-text-opacity, 1)) +} +.no-more-tip[data-v-2d1a7423]:is(.dark *) {--tw-text-opacity: 1;color: rgb(156 163 175 / var(--tw-text-opacity, 1)) +} +.mobile .favorite-page[data-v-2d1a7423] {padding: 1rem +} +.mobile .favorite-page .favorite-header[data-v-2d1a7423] {margin-bottom: 1rem +} +.mobile .favorite-page .favorite-header h2[data-v-2d1a7423] {font-size: 1.25rem;line-height: 1.75rem +} \ No newline at end of file diff --git a/out/renderer/assets/index-B-m4kL_6.css.gz b/out/renderer/assets/index-B-m4kL_6.css.gz new file mode 100644 index 0000000..f823f02 Binary files /dev/null and b/out/renderer/assets/index-B-m4kL_6.css.gz differ diff --git a/out/renderer/assets/index-BCv4VDKm.js b/out/renderer/assets/index-BCv4VDKm.js new file mode 100644 index 0000000..3bf4984 --- /dev/null +++ b/out/renderer/assets/index-BCv4VDKm.js @@ -0,0 +1,540 @@ +import { p as cB, V as cNotM, m as c, W as cM, Y as cE, d as defineComponent, x as useConfig, Z as useStyle, $ as provide, F as useRtl, l as h, a0 as buttonGroupInjectionKey, r as ref, G as computed, E as watch, o as onMounted, a1 as onUnmounted, c as createElementBlock, b as createBaseVNode, e as createVNode, f as withCtx, t as toDisplayString, n as normalizeClass, a2 as normalizeStyle, a3 as Fragment, a4 as renderList, j as openBlock, T as createCommentVNode, B as Button, _ as _export_sfc } from "./index-DKaFsuse.js"; +const zero = "0!important"; +const n1 = "-1px!important"; +function createLeftBorderStyle(type) { + return cM(`${type}-type`, [c("& +", [cB("button", {}, [cM(`${type}-type`, [cE("border", { + borderLeftWidth: zero + }), cE("state-border", { + left: n1 + })])])])]); +} +function createTopBorderStyle(type) { + return cM(`${type}-type`, [c("& +", [cB("button", [cM(`${type}-type`, [cE("border", { + borderTopWidth: zero + }), cE("state-border", { + top: n1 + })])])])]); +} +const style = cB("button-group", ` + flex-wrap: nowrap; + display: inline-flex; + position: relative; +`, [cNotM("vertical", { + flexDirection: "row" +}, [cNotM("rtl", [cB("button", [c("&:first-child:not(:last-child)", ` + margin-right: ${zero}; + border-top-right-radius: ${zero}; + border-bottom-right-radius: ${zero}; + `), c("&:last-child:not(:first-child)", ` + margin-left: ${zero}; + border-top-left-radius: ${zero}; + border-bottom-left-radius: ${zero}; + `), c("&:not(:first-child):not(:last-child)", ` + margin-left: ${zero}; + margin-right: ${zero}; + border-radius: ${zero}; + `), createLeftBorderStyle("default"), cM("ghost", [createLeftBorderStyle("primary"), createLeftBorderStyle("info"), createLeftBorderStyle("success"), createLeftBorderStyle("warning"), createLeftBorderStyle("error")])])])]), cM("vertical", { + flexDirection: "column" +}, [cB("button", [c("&:first-child:not(:last-child)", ` + margin-bottom: ${zero}; + margin-left: ${zero}; + margin-right: ${zero}; + border-bottom-left-radius: ${zero}; + border-bottom-right-radius: ${zero}; + `), c("&:last-child:not(:first-child)", ` + margin-top: ${zero}; + margin-left: ${zero}; + margin-right: ${zero}; + border-top-left-radius: ${zero}; + border-top-right-radius: ${zero}; + `), c("&:not(:first-child):not(:last-child)", ` + margin: ${zero}; + border-radius: ${zero}; + `), createTopBorderStyle("default"), cM("ghost", [createTopBorderStyle("primary"), createTopBorderStyle("info"), createTopBorderStyle("success"), createTopBorderStyle("warning"), createTopBorderStyle("error")])])])]); +const buttonGroupProps = { + size: { + type: String, + default: void 0 + }, + vertical: Boolean +}; +const __unplugin_components_1 = defineComponent({ + name: "ButtonGroup", + props: buttonGroupProps, + setup(props) { + const { + mergedClsPrefixRef, + mergedRtlRef + } = useConfig(props); + useStyle("-button-group", style, mergedClsPrefixRef); + provide(buttonGroupInjectionKey, props); + const rtlEnabledRef = useRtl("ButtonGroup", mergedRtlRef, mergedClsPrefixRef); + return { + rtlEnabled: rtlEnabledRef, + mergedClsPrefix: mergedClsPrefixRef + }; + }, + render() { + const { + mergedClsPrefix + } = this; + return h("div", { + class: [`${mergedClsPrefix}-button-group`, this.rtlEnabled && `${mergedClsPrefix}-button-group--rtl`, this.vertical && `${mergedClsPrefix}-button-group--vertical`], + role: "group" + }, this.$slots); + } +}); +const _hoisted_1 = { class: "font-size-controls" }; +const _hoisted_2 = { class: "play-controls" }; +const _hoisted_3 = { class: "control-buttons" }; +const _hoisted_4 = { + key: 0, + class: "ri-sun-line" +}; +const _hoisted_5 = { + key: 1, + class: "ri-moon-line" +}; +const _hoisted_6 = { + key: 0, + class: "ri-lock-line" +}; +const _hoisted_7 = { + key: 1, + class: "ri-lock-unlock-line" +}; +const _hoisted_8 = { class: "lyric-scroll" }; +const _hoisted_9 = { + key: 1, + class: "lyric-empty" +}; +const fontSizeStep = 2; +const TIME_OFFSET = 400; +const _sfc_main = /* @__PURE__ */ defineComponent({ + ...{ + name: "Lyric" + }, + __name: "index", + setup(__props) { + const windowData = window; + const containerRef = ref(null); + const containerHeight = ref(0); + const lineHeight = ref(60); + const currentIndex = ref(0); + const fontSize = ref(24); + const animationFrameId = ref(null); + const lastUpdateTime = ref(performance.now()); + const staticData = ref({ + lrcArray: [], + lrcTimeArray: [], + allTime: 0, + playMusic: {} + }); + const dynamicData = ref({ + nowTime: 0, + startCurrentTime: 0, + nextTime: 0, + isPlay: true + }); + const lyricSetting = ref({ + ...localStorage.getItem("lyricData") ? JSON.parse(localStorage.getItem("lyricData") || "") : { + isTop: false, + theme: "dark", + isLock: false + } + }); + const isHovering = ref(false); + const showControls = computed(() => { + if (lyricSetting.value.isLock) { + return isHovering.value; + } + return true; + }); + const handleMouseEnter = () => { + if (lyricSetting.value.isLock) { + isHovering.value = true; + windowData.electron.ipcRenderer.send("set-ignore-mouse", true); + } else { + windowData.electron.ipcRenderer.send("set-ignore-mouse", false); + } + }; + const handleMouseLeave = () => { + if (!lyricSetting.value.isLock) return; + isHovering.value = false; + windowData.electron.ipcRenderer.send("set-ignore-mouse", false); + }; + watch( + () => lyricSetting.value.isLock, + (newLock) => { + if (newLock) { + isHovering.value = false; + } + } + ); + onMounted(() => { + if (lyricSetting.value.isLock) { + isHovering.value = false; + } + }); + onUnmounted(() => { + }); + const wrapperStyle = computed(() => { + if (!containerHeight.value) { + return { + transform: "translateY(0)", + transition: "none" + }; + } + const containerCenter = containerHeight.value / 2; + const currentLineTop = currentIndex.value * lineHeight.value + containerHeight.value * 0.2 + lineHeight.value; + const targetOffset = containerCenter - currentLineTop; + const contentHeight = staticData.value.lrcArray.length * lineHeight.value + containerHeight.value * 0.4; + const minOffset = -(contentHeight - containerHeight.value); + const maxOffset = 0; + const finalOffset = Math.min(maxOffset, Math.max(minOffset, targetOffset)); + return { + transform: `translateY(${finalOffset}px)`, + transition: "transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)" + }; + }); + const lyricLineStyle = computed(() => ({ + height: `${lineHeight.value}px` + })); + const updateContainerHeight = () => { + if (!containerRef.value) return; + containerHeight.value = containerRef.value.clientHeight; + const baseLineHeight = fontSize.value * 2.5; + const maxAllowedHeight = containerHeight.value / 3; + lineHeight.value = Math.min(maxAllowedHeight, Math.max(40, baseLineHeight)); + }; + const handleFontSizeChange = async () => { + saveFontSize(); + updateContainerHeight(); + }; + const increaseFontSize = async () => { + if (fontSize.value < 48) { + fontSize.value += fontSizeStep; + await handleFontSizeChange(); + } + }; + const decreaseFontSize = async () => { + if (fontSize.value > 12) { + fontSize.value -= fontSizeStep; + await handleFontSizeChange(); + } + }; + const saveFontSize = () => { + localStorage.setItem("lyricFontSize", fontSize.value.toString()); + }; + onMounted(() => { + const resizeObserver = new ResizeObserver(() => { + updateContainerHeight(); + }); + if (containerRef.value) { + resizeObserver.observe(containerRef.value); + } + onUnmounted(() => { + resizeObserver.disconnect(); + }); + }); + const actualTime = ref(0); + const currentProgress = computed(() => { + const { startCurrentTime, nextTime } = dynamicData.value; + if (!startCurrentTime || !nextTime) return 0; + const duration = nextTime - startCurrentTime; + const elapsed = actualTime.value - startCurrentTime; + return Math.min(Math.max(elapsed / duration, 0), 1); + }); + const getLyricStyle = (index2) => { + if (index2 !== currentIndex.value) return {}; + const progress = currentProgress.value * 100; + return { + background: `linear-gradient(to right, var(--highlight-color) ${progress}%, var(--text-color) ${progress}%)`, + WebkitBackgroundClip: "text", + WebkitTextFillColor: "transparent", + transition: "all 0.1s linear" + }; + }; + const updateProgress = () => { + if (!dynamicData.value.isPlay) { + if (animationFrameId.value) { + cancelAnimationFrame(animationFrameId.value); + animationFrameId.value = null; + } + return; + } + const timeDiff = (performance.now() - lastUpdateTime.value) / 1e3; + actualTime.value = dynamicData.value.nowTime + timeDiff + TIME_OFFSET / 1e3; + animationFrameId.value = requestAnimationFrame(updateProgress); + }; + watch( + () => dynamicData.value, + (newData) => { + lastUpdateTime.value = performance.now(); + actualTime.value = newData.nowTime + TIME_OFFSET / 1e3; + if (newData.isPlay && !animationFrameId.value) { + updateProgress(); + } + }, + { deep: true } + ); + watch( + () => dynamicData.value.isPlay, + (isPlaying) => { + if (isPlaying) { + lastUpdateTime.value = performance.now(); + updateProgress(); + } else if (animationFrameId.value) { + cancelAnimationFrame(animationFrameId.value); + animationFrameId.value = null; + } + } + ); + const handleDataUpdate = (parsedData) => { + if (!parsedData) { + console.error("Invalid update data received:", parsedData); + return; + } + staticData.value = { + lrcArray: parsedData.lrcArray || [], + lrcTimeArray: parsedData.lrcTimeArray || [], + allTime: parsedData.allTime || 0, + playMusic: parsedData.playMusic || {} + }; + dynamicData.value = { + nowTime: parsedData.nowTime || 0, + startCurrentTime: parsedData.startCurrentTime || 0, + nextTime: parsedData.nextTime || 0, + isPlay: parsedData.isPlay + }; + if (typeof parsedData.nowIndex === "number") { + currentIndex.value = parsedData.nowIndex; + } + }; + onMounted(() => { + const savedFontSize = localStorage.getItem("lyricFontSize"); + if (savedFontSize) { + fontSize.value = Number(savedFontSize); + lineHeight.value = fontSize.value * 2.5; + } + updateContainerHeight(); + window.addEventListener("resize", updateContainerHeight); + windowData.electron.ipcRenderer.on("receive-lyric", (_, data) => { + try { + const parsedData = JSON.parse(data); + handleDataUpdate(parsedData); + } catch (error) { + console.error("Error parsing lyric data:", error); + } + }); + }); + onUnmounted(() => { + window.removeEventListener("resize", updateContainerHeight); + }); + const checkTheme = () => { + if (lyricSetting.value.theme === "light") { + lyricSetting.value.theme = "dark"; + } else { + lyricSetting.value.theme = "light"; + } + }; + const handleLock = () => { + lyricSetting.value.isLock = !lyricSetting.value.isLock; + windowData.electron.ipcRenderer.send("set-ignore-mouse", lyricSetting.value.isLock); + }; + const handleClose = () => { + windowData.electron.ipcRenderer.send("close-lyric"); + }; + watch( + () => lyricSetting.value, + (newValue) => { + localStorage.setItem("lyricData", JSON.stringify(newValue)); + }, + { deep: true } + ); + const isDragging = ref(false); + const startPosition = ref({ x: 0, y: 0 }); + const handleMouseDown = (e) => { + if (lyricSetting.value.isLock || e.target.closest(".control-buttons") || e.target.closest(".font-size-controls")) { + return; + } + if (e.button !== 0) return; + isDragging.value = true; + startPosition.value = { x: e.screenX, y: e.screenY }; + const handleMouseMove = (e2) => { + if (!isDragging.value) return; + const deltaX = e2.screenX - startPosition.value.x; + const deltaY = e2.screenY - startPosition.value.y; + windowData.electron.ipcRenderer.send("lyric-drag-move", { deltaX, deltaY }); + startPosition.value = { x: e2.screenX, y: e2.screenY }; + }; + const handleMouseUp = () => { + if (!isDragging.value) return; + isDragging.value = false; + document.removeEventListener("mousemove", handleMouseMove); + document.removeEventListener("mouseup", handleMouseUp); + }; + document.addEventListener("mousemove", handleMouseMove); + document.addEventListener("mouseup", handleMouseUp); + }; + onUnmounted(() => { + isDragging.value = false; + }); + onMounted(() => { + const lyricLock = document.getElementById("lyric-lock"); + if (lyricLock) { + lyricLock.onmouseenter = () => { + if (lyricSetting.value.isLock) { + windowData.electron.ipcRenderer.send("set-ignore-mouse", false); + } + }; + lyricLock.onmouseleave = () => { + if (lyricSetting.value.isLock) { + windowData.electron.ipcRenderer.send("set-ignore-mouse", true); + } + }; + } + }); + const handlePlayPause = () => { + windowData.electron.ipcRenderer.send("control-back", "playpause"); + }; + const handlePrev = () => { + windowData.electron.ipcRenderer.send("control-back", "prev"); + }; + const handleNext = () => { + windowData.electron.ipcRenderer.send("control-back", "next"); + }; + return (_ctx, _cache) => { + const _component_n_button = Button; + const _component_n_button_group = __unplugin_components_1; + return openBlock(), createElementBlock("div", { + class: normalizeClass(["lyric-window", [lyricSetting.value.theme, { lyric_lock: lyricSetting.value.isLock }]]), + onMousedown: handleMouseDown, + onMouseenter: handleMouseEnter, + onMouseleave: handleMouseLeave + }, [ + _cache[5] || (_cache[5] = createBaseVNode("div", { class: "drag-overlay" }, null, -1)), + createBaseVNode("div", { + class: normalizeClass(["control-bar", { "control-bar-show": showControls.value }]) + }, [ + createBaseVNode("div", _hoisted_1, [ + createVNode(_component_n_button_group, null, { + default: withCtx(() => [ + createVNode(_component_n_button, { + quaternary: "", + size: "small", + disabled: fontSize.value <= 12, + onClick: decreaseFontSize + }, { + default: withCtx(() => _cache[0] || (_cache[0] = [ + createBaseVNode("i", { class: "ri-subtract-line" }, null, -1) + ])), + _: 1 + }, 8, ["disabled"]), + createVNode(_component_n_button, { + quaternary: "", + size: "small", + disabled: fontSize.value >= 48, + onClick: increaseFontSize + }, { + default: withCtx(() => _cache[1] || (_cache[1] = [ + createBaseVNode("i", { class: "ri-add-line" }, null, -1) + ])), + _: 1 + }, 8, ["disabled"]) + ]), + _: 1 + }), + createBaseVNode("div", null, toDisplayString(staticData.value.playMusic.name), 1) + ]), + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", { + class: "control-button", + onClick: handlePrev + }, _cache[2] || (_cache[2] = [ + createBaseVNode("i", { class: "ri-skip-back-fill" }, null, -1) + ])), + createBaseVNode("div", { + class: "control-button play-button", + onClick: handlePlayPause + }, [ + createBaseVNode("i", { + class: normalizeClass(dynamicData.value.isPlay ? "ri-pause-fill" : "ri-play-fill") + }, null, 2) + ]), + createBaseVNode("div", { + class: "control-button", + onClick: handleNext + }, _cache[3] || (_cache[3] = [ + createBaseVNode("i", { class: "ri-skip-forward-fill" }, null, -1) + ])) + ]), + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("div", { + class: "control-button", + onClick: checkTheme + }, [ + lyricSetting.value.theme === "light" ? (openBlock(), createElementBlock("i", _hoisted_4)) : (openBlock(), createElementBlock("i", _hoisted_5)) + ]), + createBaseVNode("div", { + id: "lyric-lock", + class: "control-button", + onClick: handleLock + }, [ + lyricSetting.value.isLock ? (openBlock(), createElementBlock("i", _hoisted_6)) : (openBlock(), createElementBlock("i", _hoisted_7)) + ]), + createBaseVNode("div", { + class: "control-button", + onClick: handleClose + }, _cache[4] || (_cache[4] = [ + createBaseVNode("i", { class: "ri-close-line" }, null, -1) + ])) + ]) + ], 2), + createBaseVNode("div", { + ref_key: "containerRef", + ref: containerRef, + class: "lyric-container" + }, [ + createBaseVNode("div", _hoisted_8, [ + createBaseVNode("div", { + class: "lyric-wrapper", + style: normalizeStyle(wrapperStyle.value) + }, [ + staticData.value.lrcArray?.length > 0 ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(staticData.value.lrcArray, (line, index2) => { + return openBlock(), createElementBlock("div", { + key: index2, + class: normalizeClass(["lyric-line", { + "lyric-line-current": index2 === currentIndex.value, + "lyric-line-passed": index2 < currentIndex.value, + "lyric-line-next": index2 === currentIndex.value + 1 + }]), + style: normalizeStyle(lyricLineStyle.value) + }, [ + createBaseVNode("div", { + class: "lyric-text", + style: normalizeStyle({ fontSize: `${fontSize.value}px` }) + }, [ + createBaseVNode("span", { + class: "lyric-text-inner", + style: normalizeStyle(getLyricStyle(index2)) + }, toDisplayString(line.text || ""), 5) + ], 4), + line.trText ? (openBlock(), createElementBlock("div", { + key: 0, + class: "lyric-translation", + style: normalizeStyle({ fontSize: `${fontSize.value * 0.6}px` }) + }, toDisplayString(line.trText), 5)) : createCommentVNode("", true) + ], 6); + }), 128)) : (openBlock(), createElementBlock("div", _hoisted_9, "无歌词")) + ], 4) + ]) + ], 512) + ], 34); + }; + } +}); +const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4abaac34"]]); +export { + index as default +}; diff --git a/out/renderer/assets/index-BCv4VDKm.js.gz b/out/renderer/assets/index-BCv4VDKm.js.gz new file mode 100644 index 0000000..5ecef4a Binary files /dev/null and b/out/renderer/assets/index-BCv4VDKm.js.gz differ diff --git a/out/renderer/assets/index-BE7j41Na.css b/out/renderer/assets/index-BE7j41Na.css new file mode 100644 index 0000000..9bce8ff --- /dev/null +++ b/out/renderer/assets/index-BE7j41Na.css @@ -0,0 +1,203 @@ + +body { + background-color: transparent !important; +} +.lyric-window[data-v-4abaac34] { + width: 100vw; + height: 100vh; + position: relative; + overflow: hidden; + background: transparent; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + transition: background-color 0.2s ease; + cursor: default; +} +.lyric-window[data-v-4abaac34]:hover { + background: rgba(0, 0, 0, 0.5); +} +.lyric-window:hover .control-bar-show[data-v-4abaac34] { + opacity: 1; + visibility: visible; +} +.lyric-window[data-v-4abaac34]:active { + cursor: grabbing; +} +.lyric-window.dark[data-v-4abaac34] { + --text-color: #ffffff; + --text-secondary: rgba(255, 255, 255, 0.6); + --highlight-color: #1db954; + --control-bg: rgba(124, 124, 124, 0.3); +} +.lyric-window.light[data-v-4abaac34] { + --text-color: #333333; + --text-secondary: rgba(51, 51, 51, 0.6); + --highlight-color: #1db954; + --control-bg: rgba(255, 255, 255, 0.3); +} +.control-bar[data-v-4abaac34] { + position: absolute; + top: 10px; + left: 0; + right: 0; + height: 80px; + display: flex; + justify-content: space-between; + align-items: start; + padding: 0 20px; + opacity: 0; + visibility: hidden; + transition: opacity 0.2s ease, visibility 0.2s ease; + z-index: 100; +} +.control-bar .font-size-controls[data-v-4abaac34] { + -webkit-app-region: no-drag; + color: var(--text-color); + display: flex; + align-items: center; + gap: 16px; +} +.control-bar .play-controls[data-v-4abaac34] { + position: absolute; + top: 0px; + left: 50%; + transform: translateX(-50%); + display: flex; + align-items: center; + gap: 16px; + -webkit-app-region: no-drag; +} +.control-bar .play-controls .play-button[data-v-4abaac34] { + width: 36px; + height: 36px; +} +.control-bar .play-controls .play-button i[data-v-4abaac34] { + font-size: 24px; +} +.control-bar .control-buttons[data-v-4abaac34] { + -webkit-app-region: no-drag; +} +.control-buttons[data-v-4abaac34] { + display: flex; + gap: 16px; + -webkit-app-region: no-drag; +} +.control-button[data-v-4abaac34] { + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + border-radius: 8px; + color: var(--text-color); + transition: all 0.2s ease; +} +.control-button[data-v-4abaac34]:hover { + background: var(--control-bg); +} +.control-button i[data-v-4abaac34] { + font-size: 20px; + text-shadow: 0 0 10px rgba(0, 0, 0, 0.3); +} +.control-button i.active[data-v-4abaac34] { + color: var(--highlight-color); +} +.lyric-container[data-v-4abaac34] { + position: absolute; + top: 80px; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; + z-index: 100; +} +.lyric-scroll[data-v-4abaac34] { + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 20%, black 80%, transparent 100%); + mask-image: linear-gradient(to bottom, transparent 0%, black 20%, black 80%, transparent 100%); +} +.lyric-wrapper[data-v-4abaac34] { + will-change: transform; + padding: 20vh 0; + transform-origin: center center; + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} +.lyric-line[data-v-4abaac34] { + padding: 4px 20px; + text-align: center; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.lyric-line.lyric-line-current[data-v-4abaac34] { + transform: scale(1.05); + opacity: 1; +} +.lyric-line.lyric-line-passed[data-v-4abaac34] { + opacity: 0.6; +} +.lyric-text[data-v-4abaac34] { + font-weight: 600; + margin-bottom: 2px; + color: var(--text-color); + white-space: pre-wrap; + word-break: break-all; + text-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + transition: all 0.2s ease; + line-height: 1.4; +} +.lyric-translation[data-v-4abaac34] { + color: var(--text-secondary); + white-space: pre-wrap; + word-break: break-all; + text-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + transition: font-size 0.2s ease; + line-height: 1.4; +} +.lyric-empty[data-v-4abaac34] { + text-align: center; + color: var(--text-secondary); + font-size: 16px; + padding: 20px; +} +body[data-v-4abaac34] { + background-color: transparent !important; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; +} +.lyric-content[data-v-4abaac34] { + transition: font-size 0.2s ease; +} +.lyric-line-current[data-v-4abaac34] { + opacity: 1; +} +.lyric_lock .control-bar .control-buttons .control-button[data-v-4abaac34]:not(:has(.ri-lock-line)):not(:has(.ri-lock-unlock-line)) { + display: none; +} +.lyric_lock .control-bar .font-size-controls[data-v-4abaac34] { + display: none; +} +.lyric_lock .control-bar .play-controls[data-v-4abaac34] { + display: none; +} +.lyric_lock[data-v-4abaac34] { + background: transparent; +} +.lyric_lock[data-v-4abaac34]:hover { + background: transparent; +} +.lyric_lock #lyric-lock[data-v-4abaac34] { + position: absolute; + top: 0; + right: 72px; + background: var(--control-bg); +} \ No newline at end of file diff --git a/out/renderer/assets/index-BE7j41Na.css.gz b/out/renderer/assets/index-BE7j41Na.css.gz new file mode 100644 index 0000000..74e0ed9 Binary files /dev/null and b/out/renderer/assets/index-BE7j41Na.css.gz differ diff --git a/out/renderer/assets/index-BPmJoRDi.js b/out/renderer/assets/index-BPmJoRDi.js new file mode 100644 index 0000000..cb3acc0 --- /dev/null +++ b/out/renderer/assets/index-BPmJoRDi.js @@ -0,0 +1,203 @@ +import { ad as request, d as defineComponent, r as ref, G as computed, aq as onActivated, c as createElementBlock, n as normalizeClass, u as unref, a2 as normalizeStyle, b as createBaseVNode, t as toDisplayString, e as createVNode, f as withCtx, T as createCommentVNode, w as withDirectives, S as Scrollbar, ab as resolveDirective, g as useStore, h as useRouter, j as openBlock, s as setAnimationClass, a7 as getImgUrl, a3 as Fragment, a4 as renderList, U as PlayBottom, ac as isMobile, a5 as setAnimationDelay, _ as _export_sfc } from "./index-DKaFsuse.js"; +import { M as MusicList, a as getListDetail } from "./MusicList-s-QHu-iA.js"; +import { S as SongItem } from "./SongItem-CoswpGn6.js"; +import { _ as __unplugin_components_2 } from "./Avatar-rQ2og-6c.js"; +import { N as NImage } from "./Image-DXClIklC.js"; +import "./Drawer-BEJ8Ydua.js"; +import "./Ellipsis-D4R5dIX2.js"; +import "./Tag-C0oC92WF.js"; +import "./use-locale-DLWAOXez.js"; +function getUserDetail(uid) { + return request.get("/user/detail", { params: { uid } }); +} +function getUserPlaylist(uid) { + return request.get("/user/playlist", { params: { uid } }); +} +function getUserRecord(uid, type = 0) { + return request.get("/user/record", { params: { uid, type } }); +} +const _hoisted_1 = { class: "user-page" }; +const _hoisted_2 = { class: "page" }; +const _hoisted_3 = { class: "user-name" }; +const _hoisted_4 = { class: "user-info" }; +const _hoisted_5 = { class: "user-info-list" }; +const _hoisted_6 = { class: "user-info-item" }; +const _hoisted_7 = { class: "label" }; +const _hoisted_8 = { class: "user-info-item" }; +const _hoisted_9 = { class: "label" }; +const _hoisted_10 = { class: "user-info-item" }; +const _hoisted_11 = { class: "label" }; +const _hoisted_12 = { class: "uesr-signature" }; +const _hoisted_13 = ["onClick"]; +const _hoisted_14 = { class: "play-list-item-info" }; +const _hoisted_15 = { class: "play-list-item-name" }; +const _hoisted_16 = { class: "play-list-item-count" }; +const _hoisted_17 = { class: "record-list" }; +const _hoisted_18 = { class: "play-count" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + ...{ + name: "User" + }, + __name: "index", + setup(__props) { + const store = useStore(); + const router = useRouter(); + const userDetail = ref(); + const playList = ref([]); + const recordList = ref(); + const infoLoading = ref(false); + const user = computed(() => store.state.user); + const loadPage = async () => { + if (!user.value) { + router.push("/login"); + return; + } + infoLoading.value = true; + const { data: userData } = await getUserDetail(user.value.userId); + userDetail.value = userData; + const { data: playlistData } = await getUserPlaylist(user.value.userId); + playList.value = playlistData.playlist; + const { data: recordData } = await getUserRecord(user.value.userId); + recordList.value = recordData.allData.map((item) => ({ + ...item, + ...item.song, + picUrl: item.song.al.picUrl + })); + infoLoading.value = false; + }; + onActivated(() => { + if (!user.value) { + router.push("/login"); + } else { + loadPage(); + } + }); + const isShowList = ref(false); + const list = ref(); + const listLoading = ref(false); + const showPlaylist = async (id, name) => { + isShowList.value = true; + listLoading.value = true; + list.value = { + name + }; + const { data } = await getListDetail(id); + list.value = data.playlist; + listLoading.value = false; + }; + const handlePlay = () => { + const tracks = recordList.value || []; + store.commit("setPlayList", tracks); + }; + return (_ctx, _cache) => { + const _component_n_avatar = __unplugin_components_2; + const _component_n_image = NImage; + const _component_n_scrollbar = Scrollbar; + const _directive_loading = resolveDirective("loading"); + return openBlock(), createElementBlock("div", _hoisted_1, [ + userDetail.value ? (openBlock(), createElementBlock("div", { + key: 0, + class: normalizeClass(["left", unref(setAnimationClass)("animate__fadeInLeft")]), + style: normalizeStyle({ backgroundImage: `url(${unref(getImgUrl)(user.value.backgroundUrl)})` }) + }, [ + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", _hoisted_3, toDisplayString(user.value.nickname), 1), + createBaseVNode("div", _hoisted_4, [ + createVNode(_component_n_avatar, { + round: "", + size: 50, + src: unref(getImgUrl)(user.value.avatarUrl, "50y50") + }, null, 8, ["src"]), + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("div", _hoisted_6, [ + createBaseVNode("div", _hoisted_7, toDisplayString(userDetail.value.profile.followeds), 1), + _cache[1] || (_cache[1] = createBaseVNode("div", null, "粉丝", -1)) + ]), + createBaseVNode("div", _hoisted_8, [ + createBaseVNode("div", _hoisted_9, toDisplayString(userDetail.value.profile.follows), 1), + _cache[2] || (_cache[2] = createBaseVNode("div", null, "关注", -1)) + ]), + createBaseVNode("div", _hoisted_10, [ + createBaseVNode("div", _hoisted_11, toDisplayString(userDetail.value.level), 1), + _cache[3] || (_cache[3] = createBaseVNode("div", null, "等级", -1)) + ]) + ]) + ]), + createBaseVNode("div", _hoisted_12, toDisplayString(userDetail.value.profile.signature), 1), + createBaseVNode("div", { + class: normalizeClass(["play-list", unref(setAnimationClass)("animate__fadeInLeft")]) + }, [ + _cache[4] || (_cache[4] = createBaseVNode("div", { class: "title" }, "创建的歌单", -1)), + createVNode(_component_n_scrollbar, null, { + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(playList.value, (item, index2) => { + return openBlock(), createElementBlock("div", { + key: index2, + class: "play-list-item", + onClick: ($event) => showPlaylist(item.id, item.name) + }, [ + createVNode(_component_n_image, { + src: unref(getImgUrl)(item.coverImgUrl, "50y50"), + class: "play-list-item-img", + lazy: "", + "preview-disabled": "" + }, null, 8, ["src"]), + createBaseVNode("div", _hoisted_14, [ + createBaseVNode("div", _hoisted_15, toDisplayString(item.name), 1), + createBaseVNode("div", _hoisted_16, toDisplayString(item.trackCount) + "首,播放" + toDisplayString(item.playCount) + "次 ", 1) + ]) + ], 8, _hoisted_13); + }), 128)), + createVNode(PlayBottom) + ]), + _: 1 + }) + ], 2) + ]) + ], 6)) : createCommentVNode("", true), + !unref(isMobile) ? withDirectives((openBlock(), createElementBlock("div", { + key: 1, + class: normalizeClass(["right", unref(setAnimationClass)("animate__fadeInRight")]) + }, [ + _cache[5] || (_cache[5] = createBaseVNode("div", { class: "title" }, "听歌排行", -1)), + createBaseVNode("div", _hoisted_17, [ + createVNode(_component_n_scrollbar, null, { + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(recordList.value, (item, index2) => { + return openBlock(), createElementBlock("div", { + key: item.id, + class: normalizeClass(["record-item", unref(setAnimationClass)("animate__bounceInUp")]), + style: normalizeStyle(unref(setAnimationDelay)(index2, 25)) + }, [ + createVNode(SongItem, { + class: "song-item", + item, + onPlay: handlePlay + }, null, 8, ["item"]), + createBaseVNode("div", _hoisted_18, toDisplayString(item.playCount) + "次", 1) + ], 6); + }), 128)), + createVNode(PlayBottom) + ]), + _: 1 + }) + ]) + ], 2)), [ + [_directive_loading, infoLoading.value] + ]) : createCommentVNode("", true), + createVNode(MusicList, { + show: isShowList.value, + "onUpdate:show": _cache[0] || (_cache[0] = ($event) => isShowList.value = $event), + name: list.value?.name || "", + "song-list": list.value?.tracks || [], + "list-info": list.value, + loading: listLoading.value + }, null, 8, ["show", "name", "song-list", "list-info", "loading"]) + ]); + }; + } +}); +const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-be63ae6f"]]); +export { + index as default +}; diff --git a/out/renderer/assets/index-BPmJoRDi.js.gz b/out/renderer/assets/index-BPmJoRDi.js.gz new file mode 100644 index 0000000..a2be49e Binary files /dev/null and b/out/renderer/assets/index-BPmJoRDi.js.gz differ diff --git a/out/renderer/assets/index-Bc5fdT5j.js b/out/renderer/assets/index-Bc5fdT5j.js new file mode 100644 index 0000000..fe3f94f --- /dev/null +++ b/out/renderer/assets/index-Bc5fdT5j.js @@ -0,0 +1,233 @@ +import { d as defineComponent, r as ref, G as computed, o as onMounted, E as watch, c as createElementBlock, b as createBaseVNode, e as createVNode, f as withCtx, u as unref, i as isRef, af as useRoute, S as Scrollbar, a5 as setAnimationDelay, ab as resolveDirective, j as openBlock, ah as withModifiers, a3 as Fragment, a4 as renderList, n as normalizeClass, s as setAnimationClass, a2 as normalizeStyle, t as toDisplayString, w as withDirectives, a7 as getImgUrl, ai as formatNumber, T as createCommentVNode, aj as __unplugin_components_0, _ as _export_sfc } from "./index-DKaFsuse.js"; +import { g as getPlaylistCategory } from "./home-BXGE9AqN.js"; +import { M as MusicList, b as getListByCat, a as getListDetail } from "./MusicList-s-QHu-iA.js"; +import { N as NImage } from "./Image-DXClIklC.js"; +import "./SongItem-CoswpGn6.js"; +import "./Ellipsis-D4R5dIX2.js"; +import "./Drawer-BEJ8Ydua.js"; +import "./Avatar-rQ2og-6c.js"; +import "./Tag-C0oC92WF.js"; +import "./use-locale-DLWAOXez.js"; +const _hoisted_1 = { class: "list-page" }; +const _hoisted_2 = { class: "play-list-type" }; +const _hoisted_3 = ["onClick"]; +const _hoisted_4 = { class: "recommend-list" }; +const _hoisted_5 = ["onClick"]; +const _hoisted_6 = { class: "recommend-item-img" }; +const _hoisted_7 = { class: "top" }; +const _hoisted_8 = { class: "play-count" }; +const _hoisted_9 = { class: "recommend-item-title" }; +const _hoisted_10 = { + key: 0, + class: "loading-more" +}; +const _hoisted_11 = { + key: 1, + class: "no-more" +}; +const TOTAL_ITEMS = 42; +const _sfc_main = /* @__PURE__ */ defineComponent({ + ...{ + name: "List" + }, + __name: "index", + setup(__props) { + const recommendList = ref([]); + const showMusic = ref(false); + const page = ref(0); + const hasMore = ref(true); + const isLoadingMore = ref(false); + const getItemAnimationDelay = (index2) => { + const currentPageIndex = index2 % TOTAL_ITEMS; + return setAnimationDelay(currentPageIndex, 30); + }; + const recommendItem = ref(); + const listDetail = ref(); + const listLoading = ref(true); + const selectRecommendItem = async (item) => { + listLoading.value = true; + recommendItem.value = null; + listDetail.value = null; + showMusic.value = true; + recommendItem.value = item; + const { data } = await getListDetail(item.id); + listDetail.value = data; + listLoading.value = false; + }; + const route = useRoute(); + const listTitle = ref(route.query.type || "歌单列表"); + const loading = ref(false); + const loadList = async (type, isLoadMore = false) => { + if (!hasMore.value && isLoadMore) return; + if (isLoadMore) { + isLoadingMore.value = true; + } else { + loading.value = true; + page.value = 0; + recommendList.value = []; + } + try { + const params = { + cat: type === "每日推荐" ? "" : type, + limit: TOTAL_ITEMS, + offset: page.value * TOTAL_ITEMS + }; + const { data } = await getListByCat(params); + if (isLoadMore) { + recommendList.value.push(...data.playlists); + } else { + recommendList.value = data.playlists; + } + hasMore.value = data.more; + page.value++; + } catch (error) { + console.error("加载歌单列表失败:", error); + } finally { + loading.value = false; + isLoadingMore.value = false; + } + }; + const handleScroll = (e) => { + const { scrollTop, scrollHeight, clientHeight } = e.target; + if (scrollTop + clientHeight >= scrollHeight - 100 && !isLoadingMore.value && hasMore.value) { + loadList(route.query.type, true); + } + }; + const playlistCategory = ref(); + const currentType = ref(route.query.type || "每日推荐"); + const getAnimationDelay = computed(() => { + return (index2) => setAnimationDelay(index2, 30); + }); + const loadPlaylistCategory = async () => { + const { data } = await getPlaylistCategory(); + playlistCategory.value = { + ...data, + sub: [ + { + name: "每日推荐", + category: 0 + }, + ...data.sub + ] + }; + }; + const handleClickPlaylistType = (type) => { + currentType.value = type; + listTitle.value = type; + loading.value = true; + loadList(type); + }; + const scrollbarRef = ref(); + const handleWheel = (e) => { + const scrollbar = scrollbarRef.value; + if (scrollbar) { + const delta = e.deltaY || e.detail; + scrollbar.scrollBy({ left: delta }); + } + }; + onMounted(() => { + loadPlaylistCategory(); + currentType.value = route.query.type || currentType.value; + loadList(currentType.value); + }); + watch( + () => route.query, + async (newParams) => { + if (newParams.type) { + recommendList.value = []; + listTitle.value = newParams.type || "歌单列表"; + currentType.value = newParams.type; + loading.value = true; + loadList(newParams.type); + } + } + ); + return (_ctx, _cache) => { + const _component_n_scrollbar = Scrollbar; + const _component_n_image = NImage; + const _component_n_spin = __unplugin_components_0; + const _directive_loading = resolveDirective("loading"); + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + createVNode(_component_n_scrollbar, { + ref_key: "scrollbarRef", + ref: scrollbarRef, + "x-scrollable": "" + }, { + default: withCtx(() => [ + createBaseVNode("div", { + class: "categories-wrapper", + onWheel: withModifiers(handleWheel, ["prevent"]) + }, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(playlistCategory)?.sub, (item, index2) => { + return openBlock(), createElementBlock("span", { + key: item.name, + class: normalizeClass(["play-list-type-item", [unref(setAnimationClass)("animate__bounceIn"), { active: unref(currentType) === item.name }]]), + style: normalizeStyle(unref(getAnimationDelay)(index2)), + onClick: ($event) => handleClickPlaylistType(item.name) + }, toDisplayString(item.name), 15, _hoisted_3); + }), 128)) + ], 32) + ]), + _: 1 + }, 512) + ]), + createVNode(_component_n_scrollbar, { + class: "recommend", + size: 100, + onScroll: handleScroll + }, { + default: withCtx(() => [ + withDirectives((openBlock(), createElementBlock("div", _hoisted_4, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(recommendList), (item, index2) => { + return openBlock(), createElementBlock("div", { + key: item.id, + class: normalizeClass(["recommend-item", unref(setAnimationClass)("animate__bounceIn")]), + style: normalizeStyle(getItemAnimationDelay(index2)), + onClick: withModifiers(($event) => selectRecommendItem(item), ["stop"]) + }, [ + createBaseVNode("div", _hoisted_6, [ + createVNode(_component_n_image, { + class: "recommend-item-img-img", + src: unref(getImgUrl)(item.picUrl || item.coverImgUrl, "200y200"), + width: "200", + height: "200", + lazy: "", + "preview-disabled": "" + }, null, 8, ["src"]), + createBaseVNode("div", _hoisted_7, [ + createBaseVNode("div", _hoisted_8, toDisplayString(unref(formatNumber)(item.playCount)), 1), + _cache[2] || (_cache[2] = createBaseVNode("i", { class: "iconfont icon-videofill" }, null, -1)) + ]) + ]), + createBaseVNode("div", _hoisted_9, toDisplayString(item.name), 1) + ], 14, _hoisted_5); + }), 128)) + ])), [ + [_directive_loading, unref(loading)] + ]), + unref(isLoadingMore) ? (openBlock(), createElementBlock("div", _hoisted_10, [ + createVNode(_component_n_spin, { size: "small" }), + _cache[3] || (_cache[3] = createBaseVNode("span", { class: "ml-2" }, "加载中...", -1)) + ])) : createCommentVNode("", true), + !unref(hasMore) && unref(recommendList).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_11, "没有更多了")) : createCommentVNode("", true) + ]), + _: 1 + }), + createVNode(MusicList, { + show: unref(showMusic), + "onUpdate:show": _cache[0] || (_cache[0] = ($event) => isRef(showMusic) ? showMusic.value = $event : null), + loading: unref(listLoading), + "onUpdate:loading": _cache[1] || (_cache[1] = ($event) => isRef(listLoading) ? listLoading.value = $event : null), + name: unref(recommendItem)?.name || "", + "song-list": unref(listDetail)?.playlist.tracks || [], + "list-info": unref(listDetail)?.playlist + }, null, 8, ["show", "loading", "name", "song-list", "list-info"]) + ]); + }; + } +}); +const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f9f1189c"]]); +export { + index as default +}; diff --git a/out/renderer/assets/index-Bc5fdT5j.js.gz b/out/renderer/assets/index-Bc5fdT5j.js.gz new file mode 100644 index 0000000..954327f Binary files /dev/null and b/out/renderer/assets/index-Bc5fdT5j.js.gz differ diff --git a/out/renderer/assets/index-BlaUC8oz.css b/out/renderer/assets/index-BlaUC8oz.css new file mode 100644 index 0000000..79d9ff1 --- /dev/null +++ b/out/renderer/assets/index-BlaUC8oz.css @@ -0,0 +1,336 @@ +.title[data-v-686a7f41] { + margin-bottom: 1rem; + font-size: 1.125rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.title[data-v-686a7f41]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.play-list-type[data-v-686a7f41] { + width: 250px; + margin-right: 1rem; +} +.play-list-type-item[data-v-686a7f41], .play-list-type-showall[data-v-686a7f41] { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.play-list-type-item[data-v-686a7f41]:is(.dark *), .play-list-type-showall[data-v-686a7f41]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.play-list-type-item[data-v-686a7f41], .play-list-type-showall[data-v-686a7f41] { + margin-right: 0.75rem; + margin-bottom: 0.75rem; + display: inline-block; + cursor: pointer; + border-radius: 0.75rem; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 0.75rem; + padding-right: 0.75rem; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.play-list-type-item[data-v-686a7f41]:hover, .play-list-type-showall[data-v-686a7f41]:hover { + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.play-list-type-item[data-v-686a7f41]:is(.dark *), .play-list-type-showall[data-v-686a7f41]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); +} +.play-list-type-showall[data-v-686a7f41] { + display: block; + text-align: center; +} +.mobile .play-list-type[data-v-686a7f41] { + margin-left: 0px; + margin-right: 0px; + width: 100%; +}.recommend-album[data-v-1df7dbee] { + margin-left: 1.25rem; + margin-right: 1.25rem; + flex: 1 1 0%; +} +.recommend-album .title[data-v-1df7dbee] { + margin-bottom: 1rem; + font-size: 1.125rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.recommend-album .title[data-v-1df7dbee]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.recommend-album .recommend-album-list[data-v-1df7dbee] { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-rows: repeat(3, minmax(0, 1fr)); + gap: 0.5rem; +} +.recommend-album .recommend-album-list-item[data-v-1df7dbee] { + position: relative; + overflow: hidden; + border-radius: 0.75rem; +} +.recommend-album .recommend-album-list-item-img[data-v-1df7dbee] { + height: 100%; + width: 100%; + border-radius: 0.75rem; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.recommend-album .recommend-album-list-item:hover img[data-v-1df7dbee] { + filter: brightness(50%); +} +.recommend-album .recommend-album-list-item-content[data-v-1df7dbee] { + position: absolute; + top: 0px; + left: 0px; + z-index: 10; + height: 100%; + width: 100%; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.6; + padding: 1rem; + font-size: 1.25rem; + line-height: 1.75rem; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + opacity: 0; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.recommend-album .recommend-album-list-item-content[data-v-1df7dbee]:is(.dark *) { + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.6; +} +.recommend-album .recommend-album-list-item-content[data-v-1df7dbee]:hover { + opacity: 1; +}.recommend-singer-list[data-v-f8da161d] { + display: flex; + height: 280px; +} +.recommend-singer-item[data-v-f8da161d] { + margin-right: 1.25rem; + display: flex; + height: 100%; + flex: 1 1 0%; + flex-direction: column; + justify-content: space-between; + overflow: hidden; + border-radius: 1.5rem; + padding: 1.25rem; +} +.recommend-singer-item-bg[data-v-f8da161d] { + position: absolute; + top: 0px; + left: 0px; + z-index: 0; + height: 100%; + width: 100%; + border-radius: 1.5rem; + --tw-bg-opacity: 1; + background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} +.recommend-singer-item-bg[data-v-f8da161d]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} +.recommend-singer-item-bg[data-v-f8da161d] { + filter: brightness(60%); +} +.recommend-singer-item-info[data-v-f8da161d] { + display: flex; + align-items: center; + padding: 0.5rem; +} +.recommend-singer-item-info-play[data-v-f8da161d] { + display: flex; + height: 3rem; + width: 3rem; + cursor: pointer; + align-items: center; + justify-content: center; + border-radius: 9999px; + --tw-bg-opacity: 1; + background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.recommend-singer-item-info-play[data-v-f8da161d]:hover { + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); +} +.recommend-singer-item-info-name[data-v-f8da161d] { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +.recommend-singer-item-info-name[data-v-f8da161d]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +.recommend-singer-item-count[data-v-f8da161d] { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +.recommend-singer-item-count[data-v-f8da161d]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +.mobile .recommend-singer-list[data-v-f8da161d] { + height: 180px; + margin-left: 1rem; +} +.mobile .recommend-singer-item[data-v-f8da161d] { + border-radius: 0.75rem; + padding: 1rem; +} +.mobile .recommend-singer-item-bg[data-v-f8da161d] { + border-radius: 0.75rem; +}.title[data-v-ae2da107] { + margin-bottom: 1rem; + font-size: 1.125rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.title[data-v-ae2da107]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.recommend-music[data-v-ae2da107] { + flex: 1 1 auto; +} +.recommend-music .text-ellipsis[data-v-ae2da107] { + width: 100%; +} +.recommend-music-list[data-v-ae2da107] { + width: 100%; + border-radius: 1.5rem; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); + padding: 0.5rem; +} +.recommend-music-list[data-v-ae2da107]:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +}.main-page[data-v-b0ca1b97] { + + height: 100%; + + width: 100%; + + overflow: hidden; + + --tw-bg-opacity: 1; + + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)) +} +.main-page[data-v-b0ca1b97]:is(.dark *) { + + --tw-bg-opacity: 1; + + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)) +} +.main-content[data-v-b0ca1b97] { + + margin-top: 1.5rem; + + margin-bottom: 7rem; + + display: flex +} +.mobile .main-content[data-v-b0ca1b97] { + + margin-left: 1rem; + + margin-right: 1rem; + + flex-direction: column +} +.mobile[data-v-b0ca1b97] .favorite-page { + + margin-left: 1rem; + + margin-right: 1rem; + + height: 100%; + + padding: 0px +} +[data-v-b0ca1b97] .favorite-page { + + margin-left: 1rem; + + margin-right: 1rem; + + height: 300px; + + padding: 0px +} +[data-v-b0ca1b97] .favorite-page .favorite-header { + + margin-bottom: 0px !important; + + padding-left: 0px !important; + + padding-right: 0px !important +} +[data-v-b0ca1b97] .favorite-page .favorite-header h2 { + + font-size: 1.125rem; + + line-height: 1.75rem; + + font-weight: 700; + + --tw-text-opacity: 1; + + color: rgb(17 24 39 / var(--tw-text-opacity, 1)) +} +[data-v-b0ca1b97] .favorite-page .favorite-header h2:is(.dark *) { + + --tw-text-opacity: 1; + + color: rgb(255 255 255 / var(--tw-text-opacity, 1)) +} +[data-v-b0ca1b97] .favorite-page .favorite-list { + + padding-left: 0px !important; + + padding-right: 0px !important +} \ No newline at end of file diff --git a/out/renderer/assets/index-BlaUC8oz.css.gz b/out/renderer/assets/index-BlaUC8oz.css.gz new file mode 100644 index 0000000..2b686f4 Binary files /dev/null and b/out/renderer/assets/index-BlaUC8oz.css.gz differ diff --git a/out/renderer/assets/index-BmgzcEyo.css b/out/renderer/assets/index-BmgzcEyo.css new file mode 100644 index 0000000..eed51fc --- /dev/null +++ b/out/renderer/assets/index-BmgzcEyo.css @@ -0,0 +1,44 @@ +.history-page[data-v-7e434221] {height: 100%;width: 100%;padding-top: 0.5rem;--tw-bg-opacity: 1;background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)) +}.history-page[data-v-7e434221]:is(.dark *) {--tw-bg-opacity: 1;background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)) +} +.history-page .title[data-v-7e434221] {padding-right: 1rem;padding-left: 1rem;padding-bottom: 0.5rem;font-size: 1.25rem;line-height: 1.75rem;font-weight: 700;--tw-text-opacity: 1;color: rgb(17 24 39 / var(--tw-text-opacity, 1)) +} +.history-page .title[data-v-7e434221]:is(.dark *) {--tw-text-opacity: 1;color: rgb(255 255 255 / var(--tw-text-opacity, 1)) +} +.history-page .history-list-content[data-v-7e434221] {margin-top: 0.5rem;padding-left: 1rem;padding-right: 1rem;padding-bottom: 7rem +} +.history-page .history-list-content .history-item[data-v-7e434221] {display: flex;align-items: center;justify-content: space-between +} +.history-page .history-list-content .history-item-content[data-v-7e434221] {flex: 1 1 0% +} +.history-page .history-list-content .history-item-count[data-v-7e434221] {padding-left: 1rem;padding-right: 1rem;text-align: center;font-size: 1.125rem;line-height: 1.75rem;--tw-text-opacity: 1;color: rgb(75 85 99 / var(--tw-text-opacity, 1)) +} +.history-page .history-list-content .history-item-count[data-v-7e434221]:is(.dark *) {--tw-text-opacity: 1;color: rgb(156 163 175 / var(--tw-text-opacity, 1)) +} +.history-page .history-list-content .history-item-delete[data-v-7e434221] {display: flex;height: 2rem;width: 2rem;cursor: pointer;align-items: center;justify-content: center;border-radius: 9999px;border-width: 2px;--tw-border-opacity: 1;border-color: rgb(156 163 175 / var(--tw-border-opacity, 1)) +} +.history-page .history-list-content .history-item-delete[data-v-7e434221]:is(.dark *) {--tw-border-opacity: 1;border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)) +} +.history-page .history-list-content .history-item-delete[data-v-7e434221] {--tw-text-opacity: 1;color: rgb(75 85 99 / var(--tw-text-opacity, 1)) +} +.history-page .history-list-content .history-item-delete[data-v-7e434221]:is(.dark *) {--tw-text-opacity: 1;color: rgb(156 163 175 / var(--tw-text-opacity, 1)) +} +.history-page .history-list-content .history-item-delete[data-v-7e434221]:hover {--tw-border-opacity: 1;border-color: rgb(239 68 68 / var(--tw-border-opacity, 1));--tw-text-opacity: 1;color: rgb(239 68 68 / var(--tw-text-opacity, 1)) +} +.loading-wrapper[data-v-7e434221] {display: flex;align-items: center;justify-content: center;padding-top: 2rem;padding-bottom: 2rem +} +.no-more-tip[data-v-7e434221] {padding-top: 1rem;padding-bottom: 1rem;text-align: center;font-size: 0.875rem;line-height: 1.25rem;--tw-text-opacity: 1;color: rgb(107 114 128 / var(--tw-text-opacity, 1)) +} +.no-more-tip[data-v-7e434221]:is(.dark *) {--tw-text-opacity: 1;color: rgb(156 163 175 / var(--tw-text-opacity, 1)) +} +.flex-item[data-v-36d023b3] { + flex: 1 1 0%; + overflow: hidden; + border-radius: 1rem; + --tw-bg-opacity: 1; + background-color: rgb(248 249 250 / var(--tw-bg-opacity, 1)) +} +.flex-item[data-v-36d023b3]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(22 22 22 / var(--tw-bg-opacity, 1)) +} diff --git a/out/renderer/assets/index-BmgzcEyo.css.gz b/out/renderer/assets/index-BmgzcEyo.css.gz new file mode 100644 index 0000000..28756f6 Binary files /dev/null and b/out/renderer/assets/index-BmgzcEyo.css.gz differ diff --git a/out/renderer/assets/index-C-VCusx9.js b/out/renderer/assets/index-C-VCusx9.js new file mode 100644 index 0000000..56bc1ac --- /dev/null +++ b/out/renderer/assets/index-C-VCusx9.js @@ -0,0 +1,276 @@ +import { ad as request, d as defineComponent, r as ref, g as useStore, j as openBlock, c as createElementBlock, b as createBaseVNode, e as createVNode, u as unref, a7 as getImgUrl, T as createCommentVNode, t as toDisplayString, O as createBlock, i as isRef, n as normalizeClass, ae as audioService, _ as _export_sfc, G as computed, o as onMounted, E as watch, f as withCtx, af as useRoute, ag as useDateFormat, ab as resolveDirective, ac as isMobile, a3 as Fragment, a4 as renderList, s as setAnimationClass, a2 as normalizeStyle, a5 as setAnimationDelay, ah as withModifiers, k as createTextVNode, w as withDirectives } from "./index-DKaFsuse.js"; +import { e as getHotSearch } from "./home-BXGE9AqN.js"; +import { S as SongItem } from "./SongItem-CoswpGn6.js"; +import { M as MusicList, g as getAlbum, a as getListDetail } from "./MusicList-s-QHu-iA.js"; +import { M as MvPlayer } from "./MvPlayer-I4IDK1xL.js"; +import { N as NImage } from "./Image-DXClIklC.js"; +import { _ as __unplugin_components_1 } from "./Layout-CvYBg1vI.js"; +import "./Ellipsis-D4R5dIX2.js"; +import "./Drawer-BEJ8Ydua.js"; +import "./Avatar-rQ2og-6c.js"; +import "./Tag-C0oC92WF.js"; +import "./Icon-DucaliTK.js"; +import "./Slider-BA6NituQ.js"; +import "./use-locale-DLWAOXez.js"; +const getSearch = (params) => { + return request.get("/cloudsearch", { + params + }); +}; +const _hoisted_1$1 = { class: "search-item-img" }; +const _hoisted_2$1 = { + key: 0, + class: "play" +}; +const _hoisted_3$1 = { class: "search-item-info" }; +const _hoisted_4$1 = { class: "search-item-name" }; +const _hoisted_5$1 = { class: "search-item-artist" }; +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "SearchItem", + props: { + item: {} + }, + setup(__props) { + const props = __props; + const songList = ref([]); + const showPop = ref(false); + const listInfo = ref(null); + const getCurrentMv = () => { + return { + id: props.item.id, + name: props.item.name + }; + }; + const store = useStore(); + const handleClick = async () => { + listInfo.value = null; + if (props.item.type === "专辑") { + showPop.value = true; + const res = await getAlbum(props.item.id); + songList.value = res.data.songs.map((song) => { + song.al.picUrl = song.al.picUrl || props.item.picUrl; + return song; + }); + listInfo.value = { + ...res.data.album, + creator: { + avatarUrl: res.data.album.artist.img1v1Url, + nickname: `${res.data.album.artist.name} - ${res.data.album.company}` + }, + description: res.data.album.description + }; + } + if (props.item.type === "playlist") { + showPop.value = true; + const res = await getListDetail(props.item.id); + songList.value = res.data.playlist.tracks; + listInfo.value = res.data.playlist; + } + if (props.item.type === "mv") { + store.commit("setIsPlay", false); + store.commit("setPlayMusic", false); + audioService.getCurrentSound()?.pause(); + showPop.value = true; + } + }; + return (_ctx, _cache) => { + const _component_n_image = NImage; + return openBlock(), createElementBlock("div", { + class: normalizeClass(["search-item", _ctx.item.type]), + onClick: handleClick + }, [ + createBaseVNode("div", _hoisted_1$1, [ + createVNode(_component_n_image, { + src: unref(getImgUrl)(_ctx.item.picUrl, _ctx.item.type === "mv" ? "320y180" : "100y100"), + lazy: "", + "preview-disabled": "" + }, null, 8, ["src"]), + _ctx.item.type === "mv" ? (openBlock(), createElementBlock("div", _hoisted_2$1, _cache[2] || (_cache[2] = [ + createBaseVNode("i", { class: "iconfont icon icon-play" }, null, -1) + ]))) : createCommentVNode("", true) + ]), + createBaseVNode("div", _hoisted_3$1, [ + createBaseVNode("p", _hoisted_4$1, toDisplayString(_ctx.item.name), 1), + createBaseVNode("p", _hoisted_5$1, toDisplayString(_ctx.item.desc), 1) + ]), + ["专辑", "playlist"].includes(_ctx.item.type) ? (openBlock(), createBlock(MusicList, { + key: 0, + show: unref(showPop), + "onUpdate:show": _cache[0] || (_cache[0] = ($event) => isRef(showPop) ? showPop.value = $event : null), + name: _ctx.item.name, + "song-list": unref(songList), + "list-info": unref(listInfo), + cover: false + }, null, 8, ["show", "name", "song-list", "list-info"])) : createCommentVNode("", true), + _ctx.item.type === "mv" ? (openBlock(), createBlock(MvPlayer, { + key: 1, + show: unref(showPop), + "onUpdate:show": _cache[1] || (_cache[1] = ($event) => isRef(showPop) ? showPop.value = $event : null), + "current-mv": getCurrentMv(), + "no-list": "" + }, null, 8, ["show", "current-mv"])) : createCommentVNode("", true) + ], 2); + }; + } +}); +const SearchItem = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-3449f610"]]); +const _hoisted_1 = { class: "search-page" }; +const _hoisted_2 = { class: "hot-search-list" }; +const _hoisted_3 = ["onClick"]; +const _hoisted_4 = { class: "title" }; +const _hoisted_5 = { class: "search-list-box" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + ...{ + name: "Search" + }, + __name: "index", + setup(__props) { + const route = useRoute(); + const store = useStore(); + const searchDetail = ref(); + const searchType = computed(() => store.state.searchType); + const searchDetailLoading = ref(false); + const hotSearchData = ref(); + const loadHotSearch = async () => { + const { data } = await getHotSearch(); + hotSearchData.value = data; + }; + onMounted(() => { + loadHotSearch(); + loadSearch(route.query.keyword); + }); + const hotKeyword = ref(route.query.keyword || "搜索列表"); + watch( + () => store.state.searchValue, + (value) => { + loadSearch(value); + } + ); + const dateFormat = (time) => useDateFormat(time, "YYYY.MM.DD").value; + const loadSearch = async (keywords, type = null) => { + hotKeyword.value = keywords; + searchDetail.value = void 0; + if (!keywords) return; + searchDetailLoading.value = true; + const { data } = await getSearch({ keywords, type: type || searchType.value }); + const songs = data.result.songs || []; + const albums = data.result.albums || []; + const mvs = (data.result.mvs || []).map((item) => ({ + ...item, + picUrl: item.cover, + playCount: item.playCount, + desc: item.artists.map((artist) => artist.name).join("/"), + type: "mv" + })); + const playlists = (data.result.playlists || []).map((item) => ({ + ...item, + picUrl: item.coverImgUrl, + playCount: item.playCount, + desc: item.creator.nickname, + type: "playlist" + })); + songs.forEach((item) => { + item.picUrl = item.al.picUrl; + item.artists = item.ar; + }); + albums.forEach((item) => { + item.desc = `${item.artist.name} ${item.company} ${dateFormat(item.publishTime)}`; + }); + searchDetail.value = { + songs, + albums, + mvs, + playlists + }; + searchDetailLoading.value = false; + }; + watch( + () => route.path, + async (path) => { + if (path === "/search") { + store.state.searchValue = route.query.keyword; + } + } + ); + const handlePlay = () => { + const tracks = searchDetail.value?.songs || []; + store.commit("setPlayList", tracks); + }; + return (_ctx, _cache) => { + const _component_n_layout = __unplugin_components_1; + const _directive_loading = resolveDirective("loading"); + return openBlock(), createElementBlock("div", _hoisted_1, [ + (unref(isMobile) ? !searchDetail.value : true) ? (openBlock(), createBlock(_component_n_layout, { + key: 0, + class: normalizeClass(["hot-search", unref(setAnimationClass)("animate__fadeInDown")]), + "native-scrollbar": false + }, { + default: withCtx(() => [ + _cache[0] || (_cache[0] = createBaseVNode("div", { class: "title" }, "热搜列表", -1)), + createBaseVNode("div", _hoisted_2, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(hotSearchData.value?.data, (item, index2) => { + return openBlock(), createElementBlock("div", { + key: index2, + class: normalizeClass([unref(setAnimationClass)("animate__bounceInLeft"), "hot-search-item"]), + style: normalizeStyle(unref(setAnimationDelay)(index2, 10)), + onClick: withModifiers(($event) => loadSearch(item.searchWord, 1), ["stop"]) + }, [ + createBaseVNode("span", { + class: normalizeClass(["hot-search-item-count", { "hot-search-item-count-3": index2 < 3 }]) + }, toDisplayString(index2 + 1), 3), + createTextVNode(" " + toDisplayString(item.searchWord), 1) + ], 14, _hoisted_3); + }), 128)) + ]) + ]), + _: 1 + }, 8, ["class"])) : createCommentVNode("", true), + (unref(isMobile) ? searchDetail.value : true) ? (openBlock(), createBlock(_component_n_layout, { + key: 1, + class: normalizeClass(["search-list", unref(setAnimationClass)("animate__fadeInUp")]), + "native-scrollbar": false + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_4, toDisplayString(hotKeyword.value), 1), + withDirectives((openBlock(), createElementBlock("div", _hoisted_5, [ + searchDetail.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(searchDetail.value?.songs, (item, index2) => { + return openBlock(), createElementBlock("div", { + key: item.id, + class: normalizeClass(unref(setAnimationClass)("animate__bounceInRight")), + style: normalizeStyle(unref(setAnimationDelay)(index2, 50)) + }, [ + createVNode(SongItem, { + item, + onPlay: handlePlay + }, null, 8, ["item"]) + ], 6); + }), 128)), + (openBlock(true), createElementBlock(Fragment, null, renderList(searchDetail.value, (list, key) => { + return openBlock(), createElementBlock(Fragment, null, [ + key.toString() !== "songs" ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(list, (item, index2) => { + return openBlock(), createElementBlock("div", { + key: item.id, + class: normalizeClass(unref(setAnimationClass)("animate__bounceInRight")), + style: normalizeStyle(unref(setAnimationDelay)(index2, 50)) + }, [ + createVNode(SearchItem, { item }, null, 8, ["item"]) + ], 6); + }), 128)) : createCommentVNode("", true) + ], 64); + }), 256)) + ], 64)) : createCommentVNode("", true) + ])), [ + [_directive_loading, searchDetailLoading.value] + ]) + ]), + _: 1 + }, 8, ["class"])) : createCommentVNode("", true) + ]); + }; + } +}); +const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-254ebbc1"]]); +export { + index as default +}; diff --git a/out/renderer/assets/index-C-VCusx9.js.gz b/out/renderer/assets/index-C-VCusx9.js.gz new file mode 100644 index 0000000..49050e5 Binary files /dev/null and b/out/renderer/assets/index-C-VCusx9.js.gz differ diff --git a/out/renderer/assets/index-COH3Oisr.css b/out/renderer/assets/index-COH3Oisr.css new file mode 100644 index 0000000..d389a75 --- /dev/null +++ b/out/renderer/assets/index-COH3Oisr.css @@ -0,0 +1,197 @@ +.user-page[data-v-be63ae6f] { + display: flex; + height: 100%; +} +.user-page .left[data-v-be63ae6f] { + max-width: 600px; + position: relative; + height: 100%; + flex: 1 1 0%; + overflow: hidden; + border-radius: 1rem; + background-repeat: no-repeat; + --tw-bg-opacity: 1; + background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); +} +.user-page .left[data-v-be63ae6f]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} +.user-page .left .page[data-v-be63ae6f] { + z-index: 10; + display: flex; + height: 100%; + width: 100%; + flex-direction: column; + padding: 1rem; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.4; +} +.user-page .left .title[data-v-be63ae6f] { + font-size: 1.125rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.user-page .left .title[data-v-be63ae6f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.user-page .left .user-name[data-v-be63ae6f] { + margin-bottom: 1rem; + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 0.7; +} +.user-page .left .uesr-signature[data-v-be63ae6f] { + margin-top: 1rem; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 0.7; +} +.user-page .left .user-info[data-v-be63ae6f] { + display: flex; + align-items: center; +} +.user-page .left .user-info-list[data-v-be63ae6f] { + display: flex; + width: 40%; + justify-content: space-around; + text-align: center; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 0.7; +} +.user-page .left .user-info-list .label[data-v-be63ae6f] { + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.user-page .right[data-v-be63ae6f] { + margin-left: 1rem; + height: 100%; + flex: 1 1 0%; + overflow: hidden; +} +.user-page .right .record-list[data-v-be63ae6f] { + border-radius: 1rem; + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.user-page .right .record-list[data-v-be63ae6f]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.user-page .right .record-list[data-v-be63ae6f] { + height: calc(100% - 3.75rem); +} +.user-page .right .record-list .record-item[data-v-be63ae6f] { + display: flex; + align-items: center; + padding-left: 1rem; + padding-right: 1rem; +} +.user-page .right .record-list .song-item[data-v-be63ae6f] { + flex: 1 1 0%; +} +.user-page .right .record-list .play-count[data-v-be63ae6f] { + margin-left: 1rem; + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} +.user-page .right .record-list .play-count[data-v-be63ae6f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.user-page .right .title[data-v-be63ae6f] { + margin: 1rem; + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.user-page .right .title[data-v-be63ae6f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.play-list[data-v-be63ae6f] { + margin-top: 1rem; + flex: 1 1 0%; + overflow: hidden; + border-radius: 0.75rem; + padding-top: 1rem; + padding-bottom: 1rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.play-list[data-v-be63ae6f]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.play-list-title[data-v-be63ae6f] { + font-size: 1.125rem; + line-height: 1.75rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.play-list-title[data-v-be63ae6f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.play-list-item[data-v-be63ae6f] { + display: flex; + cursor: pointer; + align-items: center; + border-radius: 0.75rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; +} +.play-list-item[data-v-be63ae6f]:hover { + --tw-bg-opacity: 1; + background-color: rgb(233 236 239 / var(--tw-bg-opacity, 1)); +} +.play-list-item[data-v-be63ae6f]:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(45 45 45 / var(--tw-bg-opacity, 1)); +} +.play-list-item-img[data-v-be63ae6f] { + width: 60px; + height: 60px; + border-radius: 0.75rem; +} +.play-list-item-info[data-v-be63ae6f] { + margin-left: 0.5rem; +} +.play-list-item-name[data-v-be63ae6f] { + font-size: 1rem; + line-height: 1.5rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.play-list-item-name[data-v-be63ae6f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.play-list-item-count[data-v-be63ae6f] { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.play-list-item-count[data-v-be63ae6f]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.mobile .user-page[data-v-be63ae6f] { + padding-left: 1rem; + padding-right: 1rem; +} \ No newline at end of file diff --git a/out/renderer/assets/index-COH3Oisr.css.gz b/out/renderer/assets/index-COH3Oisr.css.gz new file mode 100644 index 0000000..32dffea Binary files /dev/null and b/out/renderer/assets/index-COH3Oisr.css.gz differ diff --git a/out/renderer/assets/index-ChDcb7c6.css b/out/renderer/assets/index-ChDcb7c6.css new file mode 100644 index 0000000..8006188 --- /dev/null +++ b/out/renderer/assets/index-ChDcb7c6.css @@ -0,0 +1,7332 @@ +@charset "UTF-8";@font-face { + font-family: 'iconfont'; /* Project id 2685283 */ + src: + url('./iconfont-DzQUHqRQ.woff2?t=1703643214551') format('woff2'), + url('./iconfont-53c_NoX9.woff?t=1703643214551') format('woff'), + url('./iconfont-Cio8idH0.ttf?t=1703643214551') format('truetype'); +} + +.iconfont { + font-family: 'iconfont' !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-list:before { + content: '\e603'; +} + +.icon-maxsize:before { + content: '\e692'; +} + +.icon-close:before { + content: '\e616'; +} + +.icon-minisize:before { + content: '\e602'; +} + +.icon-shuaxin:before { + content: '\e627'; +} + +.icon-icon_error:before { + content: '\e615'; +} + +.icon-a-3User:before { + content: '\e601'; +} + +.icon-Chat:before { + content: '\e605'; +} + +.icon-Category:before { + content: '\e606'; +} + +.icon-Document:before { + content: '\e607'; +} + +.icon-Heart:before { + content: '\e608'; +} + +.icon-Hide:before { + content: '\e609'; +} + +.icon-Home:before { + content: '\e60a'; +} + +.icon-a-Image2:before { + content: '\e60b'; +} + +.icon-Profile:before { + content: '\e60c'; +} + +.icon-Search:before { + content: '\e60d'; +} + +.icon-Paper:before { + content: '\e60e'; +} + +.icon-Play:before { + content: '\e60f'; +} + +.icon-Setting:before { + content: '\e610'; +} + +.icon-a-TicketStar:before { + content: '\e611'; +} + +.icon-a-VolumeOff:before { + content: '\e612'; +} + +.icon-a-VolumeUp:before { + content: '\e613'; +} + +.icon-a-VolumeDown:before { + content: '\e614'; +} + +.icon-stop:before { + content: '\e600'; +} + +.icon-next:before { + content: '\e6a9'; +} + +.icon-prev:before { + content: '\e6ac'; +} + +.icon-play:before { + content: '\e6aa'; +} + +.icon-xiasanjiaoxing:before { + content: '\e642'; +} + +.icon-videofill:before { + content: '\e7c7'; +} + +.icon-favorfill:before { + content: '\e64b'; +} + +.icon-favor:before { + content: '\e64c'; +} + +.icon-loading:before { + content: '\e64f'; +} + +.icon-search:before { + content: '\e65c'; +} + +.icon-likefill:before { + content: '\e668'; +} + +.icon-like:before { + content: '\e669'; +} + +.icon-notificationfill:before { + content: '\e66a'; +} + +.icon-notification:before { + content: '\e66b'; +} + +.icon-evaluate:before { + content: '\e672'; +} + +.icon-homefill:before { + content: '\e6bb'; +} + +.icon-link:before { + content: '\e6bf'; +} + +.icon-roundaddfill:before { + content: '\e6d8'; +} + +.icon-roundadd:before { + content: '\e6d9'; +} + +.icon-add:before { + content: '\e6da'; +} + +.icon-appreciatefill:before { + content: '\e6e3'; +} + +.icon-forwardfill:before { + content: '\e6ea'; +} + +.icon-voicefill:before { + content: '\e6f0'; +} + +.icon-wefill:before { + content: '\e6f4'; +} + +.icon-keyboard:before { + content: '\e71b'; +} + +.icon-picfill:before { + content: '\e72c'; +} + +.icon-markfill:before { + content: '\e730'; +} + +.icon-presentfill:before { + content: '\e732'; +} + +.icon-peoplefill:before { + content: '\e735'; +} + +.icon-read:before { + content: '\e742'; +} + +.icon-backwardfill:before { + content: '\e74d'; +} + +.icon-playfill:before { + content: '\e74f'; +} + +.icon-all:before { + content: '\e755'; +} + +.icon-hotfill:before { + content: '\e757'; +} + +.icon-recordfill:before { + content: '\e7a4'; +} + +.icon-full:before { + content: '\e7bc'; +} + +.icon-favor_fill_light:before { + content: '\e7ec'; +} + +.icon-round_favor_fill:before { + content: '\e80a'; +} + +.icon-round_location_fill:before { + content: '\e80b'; +} + +.icon-round_like_fill:before { + content: '\e80c'; +} + +.icon-round_people_fill:before { + content: '\e80d'; +} + +.icon-round_skin_fill:before { + content: '\e80e'; +} + +.icon-broadcast_fill:before { + content: '\e81d'; +} + +.icon-card_fill:before { + content: '\e81f'; +} + /*! + * animate.css - https://animate.style/ + * Version - 4.1.1 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2020 Animate.css + */ +:root { + --animate-duration: 1s; + --animate-delay: 1s; + --animate-repeat: 1; +} +.animate__animated { + animation-duration: 1s; + animation-duration: var(--animate-duration); + animation-fill-mode: both; +} +.animate__animated.animate__infinite { + animation-iteration-count: infinite; +} +.animate__animated.animate__repeat-1 { + animation-iteration-count: 1; + animation-iteration-count: var(--animate-repeat); +} +.animate__animated.animate__repeat-2 { + animation-iteration-count: 2; + animation-iteration-count: calc(var(--animate-repeat) * 2); +} +.animate__animated.animate__repeat-3 { + animation-iteration-count: 3; + animation-iteration-count: calc(var(--animate-repeat) * 3); +} +.animate__animated.animate__delay-1s { + animation-delay: 1s; + animation-delay: var(--animate-delay); +} +.animate__animated.animate__delay-2s { + animation-delay: 2s; + animation-delay: calc(var(--animate-delay) * 2); +} +.animate__animated.animate__delay-3s { + animation-delay: 3s; + animation-delay: calc(var(--animate-delay) * 3); +} +.animate__animated.animate__delay-4s { + animation-delay: 4s; + animation-delay: calc(var(--animate-delay) * 4); +} +.animate__animated.animate__delay-5s { + animation-delay: 5s; + animation-delay: calc(var(--animate-delay) * 5); +} +.animate__animated.animate__faster { + animation-duration: 0.5s; + animation-duration: calc(var(--animate-duration) / 2); +} +.animate__animated.animate__fast { + animation-duration: 0.8s; + animation-duration: calc(var(--animate-duration) * 0.8); +} +.animate__animated.animate__slow { + animation-duration: 2s; + animation-duration: calc(var(--animate-duration) * 2); +} +.animate__animated.animate__slower { + animation-duration: 3s; + animation-duration: calc(var(--animate-duration) * 3); +} +@media (prefers-reduced-motion: reduce), print { + .animate__animated { + animation-duration: 1ms !important; + transition-duration: 1ms !important; + animation-iteration-count: 1 !important; + } + .animate__animated[class*='Out'] { + opacity: 0; + } +} +@keyframes bounce { + 0%, + 20%, + 53%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transform: translateZ(0); + } + 40%, + 43% { + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transform: translate3d(0, -30px, 0) scaleY(1.1); + } + 70% { + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transform: translate3d(0, -15px, 0) scaleY(1.05); + } + 80% { + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transform: translateZ(0) scaleY(0.95); + } + 90% { + transform: translate3d(0, -4px, 0) scaleY(1.02); + } +} +.animate__bounce { + animation-name: bounce; + transform-origin: center bottom; +} +@keyframes flash { + 0%, + 50%, + to { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +.animate__flash { + animation-name: flash; +} +@keyframes pulse { + 0% { + transform: scaleX(1); + } + 50% { + transform: scale3d(1.05, 1.05, 1.05); + } + to { + transform: scaleX(1); + } +} +.animate__pulse { + animation-name: pulse; + animation-timing-function: ease-in-out; +} +@keyframes rubberBand { + 0% { + transform: scaleX(1); + } + 30% { + transform: scale3d(1.25, 0.75, 1); + } + 40% { + transform: scale3d(0.75, 1.25, 1); + } + 50% { + transform: scale3d(1.15, 0.85, 1); + } + 65% { + transform: scale3d(0.95, 1.05, 1); + } + 75% { + transform: scale3d(1.05, 0.95, 1); + } + to { + transform: scaleX(1); + } +} +.animate__rubberBand { + animation-name: rubberBand; +} +@keyframes shakeX { + 0%, + to { + transform: translateZ(0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translate3d(-10px, 0, 0); + } + 20%, + 40%, + 60%, + 80% { + transform: translate3d(10px, 0, 0); + } +} +.animate__shakeX { + animation-name: shakeX; +} +@keyframes shakeY { + 0%, + to { + transform: translateZ(0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translate3d(0, -10px, 0); + } + 20%, + 40%, + 60%, + 80% { + transform: translate3d(0, 10px, 0); + } +} +.animate__shakeY { + animation-name: shakeY; +} +@keyframes headShake { + 0% { + transform: translateX(0); + } + 6.5% { + transform: translateX(-6px) rotateY(-9deg); + } + 18.5% { + transform: translateX(5px) rotateY(7deg); + } + 31.5% { + transform: translateX(-3px) rotateY(-5deg); + } + 43.5% { + transform: translateX(2px) rotateY(3deg); + } + 50% { + transform: translateX(0); + } +} +.animate__headShake { + animation-timing-function: ease-in-out; + animation-name: headShake; +} +@keyframes swing { + 20% { + transform: rotate(15deg); + } + 40% { + transform: rotate(-10deg); + } + 60% { + transform: rotate(5deg); + } + 80% { + transform: rotate(-5deg); + } + to { + transform: rotate(0deg); + } +} +.animate__swing { + transform-origin: top center; + animation-name: swing; +} +@keyframes tada { + 0% { + transform: scaleX(1); + } + 10%, + 20% { + transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg); + } + 30%, + 50%, + 70%, + 90% { + transform: scale3d(1.1, 1.1, 1.1) rotate(3deg); + } + 40%, + 60%, + 80% { + transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg); + } + to { + transform: scaleX(1); + } +} +.animate__tada { + animation-name: tada; +} +@keyframes wobble { + 0% { + transform: translateZ(0); + } + 15% { + transform: translate3d(-25%, 0, 0) rotate(-5deg); + } + 30% { + transform: translate3d(20%, 0, 0) rotate(3deg); + } + 45% { + transform: translate3d(-15%, 0, 0) rotate(-3deg); + } + 60% { + transform: translate3d(10%, 0, 0) rotate(2deg); + } + 75% { + transform: translate3d(-5%, 0, 0) rotate(-1deg); + } + to { + transform: translateZ(0); + } +} +.animate__wobble { + animation-name: wobble; +} +@keyframes jello { + 0%, + 11.1%, + to { + transform: translateZ(0); + } + 22.2% { + transform: skewX(-12.5deg) skewY(-12.5deg); + } + 33.3% { + transform: skewX(6.25deg) skewY(6.25deg); + } + 44.4% { + transform: skewX(-3.125deg) skewY(-3.125deg); + } + 55.5% { + transform: skewX(1.5625deg) skewY(1.5625deg); + } + 66.6% { + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + 77.7% { + transform: skewX(0.390625deg) skewY(0.390625deg); + } + 88.8% { + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} +.animate__jello { + animation-name: jello; + transform-origin: center; +} +@keyframes heartBeat { + 0% { + transform: scale(1); + } + 14% { + transform: scale(1.3); + } + 28% { + transform: scale(1); + } + 42% { + transform: scale(1.3); + } + 70% { + transform: scale(1); + } +} +.animate__heartBeat { + animation-name: heartBeat; + animation-duration: 1.3s; + animation-duration: calc(var(--animate-duration) * 1.3); + animation-timing-function: ease-in-out; +} +@keyframes backInDown { + 0% { + transform: translateY(-1200px) scale(0.7); + opacity: 0.7; + } + 80% { + transform: translateY(0) scale(0.7); + opacity: 0.7; + } + to { + transform: scale(1); + opacity: 1; + } +} +.animate__backInDown { + animation-name: backInDown; +} +@keyframes backInLeft { + 0% { + transform: translateX(-2000px) scale(0.7); + opacity: 0.7; + } + 80% { + transform: translateX(0) scale(0.7); + opacity: 0.7; + } + to { + transform: scale(1); + opacity: 1; + } +} +.animate__backInLeft { + animation-name: backInLeft; +} +@keyframes backInRight { + 0% { + transform: translateX(2000px) scale(0.7); + opacity: 0.7; + } + 80% { + transform: translateX(0) scale(0.7); + opacity: 0.7; + } + to { + transform: scale(1); + opacity: 1; + } +} +.animate__backInRight { + animation-name: backInRight; +} +@keyframes backInUp { + 0% { + transform: translateY(1200px) scale(0.7); + opacity: 0.7; + } + 80% { + transform: translateY(0) scale(0.7); + opacity: 0.7; + } + to { + transform: scale(1); + opacity: 1; + } +} +.animate__backInUp { + animation-name: backInUp; +} +@keyframes backOutDown { + 0% { + transform: scale(1); + opacity: 1; + } + 20% { + transform: translateY(0) scale(0.7); + opacity: 0.7; + } + to { + transform: translateY(700px) scale(0.7); + opacity: 0.7; + } +} +.animate__backOutDown { + animation-name: backOutDown; +} +@keyframes backOutLeft { + 0% { + transform: scale(1); + opacity: 1; + } + 20% { + transform: translateX(0) scale(0.7); + opacity: 0.7; + } + to { + transform: translateX(-2000px) scale(0.7); + opacity: 0.7; + } +} +.animate__backOutLeft { + animation-name: backOutLeft; +} +@keyframes backOutRight { + 0% { + transform: scale(1); + opacity: 1; + } + 20% { + transform: translateX(0) scale(0.7); + opacity: 0.7; + } + to { + transform: translateX(2000px) scale(0.7); + opacity: 0.7; + } +} +.animate__backOutRight { + animation-name: backOutRight; +} +@keyframes backOutUp { + 0% { + transform: scale(1); + opacity: 1; + } + 20% { + transform: translateY(0) scale(0.7); + opacity: 0.7; + } + to { + transform: translateY(-700px) scale(0.7); + opacity: 0.7; + } +} +.animate__backOutUp { + animation-name: backOutUp; +} +@keyframes bounceIn { + 0%, + 20%, + 40%, + 60%, + 80%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + 20% { + transform: scale3d(1.1, 1.1, 1.1); + } + 40% { + transform: scale3d(0.9, 0.9, 0.9); + } + 60% { + opacity: 1; + transform: scale3d(1.03, 1.03, 1.03); + } + 80% { + transform: scale3d(0.97, 0.97, 0.97); + } + to { + opacity: 1; + transform: scaleX(1); + } +} +.animate__bounceIn { + animation-duration: 0.75s; + animation-duration: calc(var(--animate-duration) * 0.75); + animation-name: bounceIn; +} +@keyframes bounceInDown { + 0%, + 60%, + 75%, + 90%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + transform: translate3d(0, -3000px, 0) scaleY(3); + } + 60% { + opacity: 1; + transform: translate3d(0, 25px, 0) scaleY(0.9); + } + 75% { + transform: translate3d(0, -10px, 0) scaleY(0.95); + } + 90% { + transform: translate3d(0, 5px, 0) scaleY(0.985); + } + to { + transform: translateZ(0); + } +} +.animate__bounceInDown { + animation-name: bounceInDown; +} +@keyframes bounceInLeft { + 0%, + 60%, + 75%, + 90%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + transform: translate3d(-3000px, 0, 0) scaleX(3); + } + 60% { + opacity: 1; + transform: translate3d(25px, 0, 0) scaleX(1); + } + 75% { + transform: translate3d(-10px, 0, 0) scaleX(0.98); + } + 90% { + transform: translate3d(5px, 0, 0) scaleX(0.995); + } + to { + transform: translateZ(0); + } +} +.animate__bounceInLeft { + animation-name: bounceInLeft; +} +@keyframes bounceInRight { + 0%, + 60%, + 75%, + 90%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + transform: translate3d(3000px, 0, 0) scaleX(3); + } + 60% { + opacity: 1; + transform: translate3d(-25px, 0, 0) scaleX(1); + } + 75% { + transform: translate3d(10px, 0, 0) scaleX(0.98); + } + 90% { + transform: translate3d(-5px, 0, 0) scaleX(0.995); + } + to { + transform: translateZ(0); + } +} +.animate__bounceInRight { + animation-name: bounceInRight; +} +@keyframes bounceInUp { + 0%, + 60%, + 75%, + 90%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 0% { + opacity: 0; + transform: translate3d(0, 3000px, 0) scaleY(5); + } + 60% { + opacity: 1; + transform: translate3d(0, -20px, 0) scaleY(0.9); + } + 75% { + transform: translate3d(0, 10px, 0) scaleY(0.95); + } + 90% { + transform: translate3d(0, -5px, 0) scaleY(0.985); + } + to { + transform: translateZ(0); + } +} +.animate__bounceInUp { + animation-name: bounceInUp; +} +@keyframes bounceOut { + 20% { + transform: scale3d(0.9, 0.9, 0.9); + } + 50%, + 55% { + opacity: 1; + transform: scale3d(1.1, 1.1, 1.1); + } + to { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } +} +.animate__bounceOut { + animation-duration: 0.75s; + animation-duration: calc(var(--animate-duration) * 0.75); + animation-name: bounceOut; +} +@keyframes bounceOutDown { + 20% { + transform: translate3d(0, 10px, 0) scaleY(0.985); + } + 40%, + 45% { + opacity: 1; + transform: translate3d(0, -20px, 0) scaleY(0.9); + } + to { + opacity: 0; + transform: translate3d(0, 2000px, 0) scaleY(3); + } +} +.animate__bounceOutDown { + animation-name: bounceOutDown; +} +@keyframes bounceOutLeft { + 20% { + opacity: 1; + transform: translate3d(20px, 0, 0) scaleX(0.9); + } + to { + opacity: 0; + transform: translate3d(-2000px, 0, 0) scaleX(2); + } +} +.animate__bounceOutLeft { + animation-name: bounceOutLeft; +} +@keyframes bounceOutRight { + 20% { + opacity: 1; + transform: translate3d(-20px, 0, 0) scaleX(0.9); + } + to { + opacity: 0; + transform: translate3d(2000px, 0, 0) scaleX(2); + } +} +.animate__bounceOutRight { + animation-name: bounceOutRight; +} +@keyframes bounceOutUp { + 20% { + transform: translate3d(0, -10px, 0) scaleY(0.985); + } + 40%, + 45% { + opacity: 1; + transform: translate3d(0, 20px, 0) scaleY(0.9); + } + to { + opacity: 0; + transform: translate3d(0, -2000px, 0) scaleY(3); + } +} +.animate__bounceOutUp { + animation-name: bounceOutUp; +} +@keyframes fadeIn { + 0% { + opacity: 0; + } + to { + opacity: 1; + } +} +.animate__fadeIn { + animation-name: fadeIn; +} +@keyframes fadeInDown { + 0% { + opacity: 0; + transform: translate3d(0, -100%, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInDown { + animation-name: fadeInDown; +} +@keyframes fadeInDownBig { + 0% { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInDownBig { + animation-name: fadeInDownBig; +} +@keyframes fadeInLeft { + 0% { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInLeft { + animation-name: fadeInLeft; +} +@keyframes fadeInLeftBig { + 0% { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInLeftBig { + animation-name: fadeInLeftBig; +} +@keyframes fadeInRight { + 0% { + opacity: 0; + transform: translate3d(100%, 0, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInRight { + animation-name: fadeInRight; +} +@keyframes fadeInRightBig { + 0% { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInRightBig { + animation-name: fadeInRightBig; +} +@keyframes fadeInUp { + 0% { + opacity: 0; + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInUp { + animation-name: fadeInUp; +} +@keyframes fadeInUpBig { + 0% { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInUpBig { + animation-name: fadeInUpBig; +} +@keyframes fadeInTopLeft { + 0% { + opacity: 0; + transform: translate3d(-100%, -100%, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInTopLeft { + animation-name: fadeInTopLeft; +} +@keyframes fadeInTopRight { + 0% { + opacity: 0; + transform: translate3d(100%, -100%, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInTopRight { + animation-name: fadeInTopRight; +} +@keyframes fadeInBottomLeft { + 0% { + opacity: 0; + transform: translate3d(-100%, 100%, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInBottomLeft { + animation-name: fadeInBottomLeft; +} +@keyframes fadeInBottomRight { + 0% { + opacity: 0; + transform: translate3d(100%, 100%, 0); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__fadeInBottomRight { + animation-name: fadeInBottomRight; +} +@keyframes fadeOut { + 0% { + opacity: 1; + } + to { + opacity: 0; + } +} +.animate__fadeOut { + animation-name: fadeOut; +} +@keyframes fadeOutDown { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(0, 100%, 0); + } +} +.animate__fadeOutDown { + animation-name: fadeOutDown; +} +@keyframes fadeOutDownBig { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } +} +.animate__fadeOutDownBig { + animation-name: fadeOutDownBig; +} +@keyframes fadeOutLeft { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } +} +.animate__fadeOutLeft { + animation-name: fadeOutLeft; +} +@keyframes fadeOutLeftBig { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } +} +.animate__fadeOutLeftBig { + animation-name: fadeOutLeftBig; +} +@keyframes fadeOutRight { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(100%, 0, 0); + } +} +.animate__fadeOutRight { + animation-name: fadeOutRight; +} +@keyframes fadeOutRightBig { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } +} +.animate__fadeOutRightBig { + animation-name: fadeOutRightBig; +} +@keyframes fadeOutUp { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(0, -100%, 0); + } +} +.animate__fadeOutUp { + animation-name: fadeOutUp; +} +@keyframes fadeOutUpBig { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } +} +.animate__fadeOutUpBig { + animation-name: fadeOutUpBig; +} +@keyframes fadeOutTopLeft { + 0% { + opacity: 1; + transform: translateZ(0); + } + to { + opacity: 0; + transform: translate3d(-100%, -100%, 0); + } +} +.animate__fadeOutTopLeft { + animation-name: fadeOutTopLeft; +} +@keyframes fadeOutTopRight { + 0% { + opacity: 1; + transform: translateZ(0); + } + to { + opacity: 0; + transform: translate3d(100%, -100%, 0); + } +} +.animate__fadeOutTopRight { + animation-name: fadeOutTopRight; +} +@keyframes fadeOutBottomRight { + 0% { + opacity: 1; + transform: translateZ(0); + } + to { + opacity: 0; + transform: translate3d(100%, 100%, 0); + } +} +.animate__fadeOutBottomRight { + animation-name: fadeOutBottomRight; +} +@keyframes fadeOutBottomLeft { + 0% { + opacity: 1; + transform: translateZ(0); + } + to { + opacity: 0; + transform: translate3d(-100%, 100%, 0); + } +} +.animate__fadeOutBottomLeft { + animation-name: fadeOutBottomLeft; +} +@keyframes flip { + 0% { + transform: perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn); + animation-timing-function: ease-out; + } + 40% { + transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg); + animation-timing-function: ease-out; + } + 50% { + transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg); + animation-timing-function: ease-in; + } + 80% { + transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translateZ(0) rotateY(0deg); + animation-timing-function: ease-in; + } + to { + transform: perspective(400px) scaleX(1) translateZ(0) rotateY(0deg); + animation-timing-function: ease-in; + } +} +.animate__animated.animate__flip { + backface-visibility: visible; + animation-name: flip; +} +@keyframes flipInX { + 0% { + transform: perspective(400px) rotateX(90deg); + animation-timing-function: ease-in; + opacity: 0; + } + 40% { + transform: perspective(400px) rotateX(-20deg); + animation-timing-function: ease-in; + } + 60% { + transform: perspective(400px) rotateX(10deg); + opacity: 1; + } + 80% { + transform: perspective(400px) rotateX(-5deg); + } + to { + transform: perspective(400px); + } +} +.animate__flipInX { + backface-visibility: visible !important; + animation-name: flipInX; +} +@keyframes flipInY { + 0% { + transform: perspective(400px) rotateY(90deg); + animation-timing-function: ease-in; + opacity: 0; + } + 40% { + transform: perspective(400px) rotateY(-20deg); + animation-timing-function: ease-in; + } + 60% { + transform: perspective(400px) rotateY(10deg); + opacity: 1; + } + 80% { + transform: perspective(400px) rotateY(-5deg); + } + to { + transform: perspective(400px); + } +} +.animate__flipInY { + backface-visibility: visible !important; + animation-name: flipInY; +} +@keyframes flipOutX { + 0% { + transform: perspective(400px); + } + 30% { + transform: perspective(400px) rotateX(-20deg); + opacity: 1; + } + to { + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } +} +.animate__flipOutX { + animation-duration: 0.75s; + animation-duration: calc(var(--animate-duration) * 0.75); + animation-name: flipOutX; + backface-visibility: visible !important; +} +@keyframes flipOutY { + 0% { + transform: perspective(400px); + } + 30% { + transform: perspective(400px) rotateY(-15deg); + opacity: 1; + } + to { + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } +} +.animate__flipOutY { + animation-duration: 0.75s; + animation-duration: calc(var(--animate-duration) * 0.75); + backface-visibility: visible !important; + animation-name: flipOutY; +} +@keyframes lightSpeedInRight { + 0% { + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + 60% { + transform: skewX(20deg); + opacity: 1; + } + 80% { + transform: skewX(-5deg); + } + to { + transform: translateZ(0); + } +} +.animate__lightSpeedInRight { + animation-name: lightSpeedInRight; + animation-timing-function: ease-out; +} +@keyframes lightSpeedInLeft { + 0% { + transform: translate3d(-100%, 0, 0) skewX(30deg); + opacity: 0; + } + 60% { + transform: skewX(-20deg); + opacity: 1; + } + 80% { + transform: skewX(5deg); + } + to { + transform: translateZ(0); + } +} +.animate__lightSpeedInLeft { + animation-name: lightSpeedInLeft; + animation-timing-function: ease-out; +} +@keyframes lightSpeedOutRight { + 0% { + opacity: 1; + } + to { + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} +.animate__lightSpeedOutRight { + animation-name: lightSpeedOutRight; + animation-timing-function: ease-in; +} +@keyframes lightSpeedOutLeft { + 0% { + opacity: 1; + } + to { + transform: translate3d(-100%, 0, 0) skewX(-30deg); + opacity: 0; + } +} +.animate__lightSpeedOutLeft { + animation-name: lightSpeedOutLeft; + animation-timing-function: ease-in; +} +@keyframes rotateIn { + 0% { + transform: rotate(-200deg); + opacity: 0; + } + to { + transform: translateZ(0); + opacity: 1; + } +} +.animate__rotateIn { + animation-name: rotateIn; + transform-origin: center; +} +@keyframes rotateInDownLeft { + 0% { + transform: rotate(-45deg); + opacity: 0; + } + to { + transform: translateZ(0); + opacity: 1; + } +} +.animate__rotateInDownLeft { + animation-name: rotateInDownLeft; + transform-origin: left bottom; +} +@keyframes rotateInDownRight { + 0% { + transform: rotate(45deg); + opacity: 0; + } + to { + transform: translateZ(0); + opacity: 1; + } +} +.animate__rotateInDownRight { + animation-name: rotateInDownRight; + transform-origin: right bottom; +} +@keyframes rotateInUpLeft { + 0% { + transform: rotate(45deg); + opacity: 0; + } + to { + transform: translateZ(0); + opacity: 1; + } +} +.animate__rotateInUpLeft { + animation-name: rotateInUpLeft; + transform-origin: left bottom; +} +@keyframes rotateInUpRight { + 0% { + transform: rotate(-90deg); + opacity: 0; + } + to { + transform: translateZ(0); + opacity: 1; + } +} +.animate__rotateInUpRight { + animation-name: rotateInUpRight; + transform-origin: right bottom; +} +@keyframes rotateOut { + 0% { + opacity: 1; + } + to { + transform: rotate(200deg); + opacity: 0; + } +} +.animate__rotateOut { + animation-name: rotateOut; + transform-origin: center; +} +@keyframes rotateOutDownLeft { + 0% { + opacity: 1; + } + to { + transform: rotate(45deg); + opacity: 0; + } +} +.animate__rotateOutDownLeft { + animation-name: rotateOutDownLeft; + transform-origin: left bottom; +} +@keyframes rotateOutDownRight { + 0% { + opacity: 1; + } + to { + transform: rotate(-45deg); + opacity: 0; + } +} +.animate__rotateOutDownRight { + animation-name: rotateOutDownRight; + transform-origin: right bottom; +} +@keyframes rotateOutUpLeft { + 0% { + opacity: 1; + } + to { + transform: rotate(-45deg); + opacity: 0; + } +} +.animate__rotateOutUpLeft { + animation-name: rotateOutUpLeft; + transform-origin: left bottom; +} +@keyframes rotateOutUpRight { + 0% { + opacity: 1; + } + to { + transform: rotate(90deg); + opacity: 0; + } +} +.animate__rotateOutUpRight { + animation-name: rotateOutUpRight; + transform-origin: right bottom; +} +@keyframes hinge { + 0% { + animation-timing-function: ease-in-out; + } + 20%, + 60% { + transform: rotate(80deg); + animation-timing-function: ease-in-out; + } + 40%, + 80% { + transform: rotate(60deg); + animation-timing-function: ease-in-out; + opacity: 1; + } + to { + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} +.animate__hinge { + animation-duration: 2s; + animation-duration: calc(var(--animate-duration) * 2); + animation-name: hinge; + transform-origin: top left; +} +@keyframes jackInTheBox { + 0% { + opacity: 0; + transform: scale(0.1) rotate(30deg); + transform-origin: center bottom; + } + 50% { + transform: rotate(-10deg); + } + 70% { + transform: rotate(3deg); + } + to { + opacity: 1; + transform: scale(1); + } +} +.animate__jackInTheBox { + animation-name: jackInTheBox; +} +@keyframes rollIn { + 0% { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotate(-120deg); + } + to { + opacity: 1; + transform: translateZ(0); + } +} +.animate__rollIn { + animation-name: rollIn; +} +@keyframes rollOut { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: translate3d(100%, 0, 0) rotate(120deg); + } +} +.animate__rollOut { + animation-name: rollOut; +} +@keyframes zoomIn { + 0% { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + 50% { + opacity: 1; + } +} +.animate__zoomIn { + animation-name: zoomIn; +} +@keyframes zoomInDown { + 0% { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.animate__zoomInDown { + animation-name: zoomInDown; +} +@keyframes zoomInLeft { + 0% { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.animate__zoomInLeft { + animation-name: zoomInLeft; +} +@keyframes zoomInRight { + 0% { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.animate__zoomInRight { + animation-name: zoomInRight; +} +@keyframes zoomInUp { + 0% { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 60% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.animate__zoomInUp { + animation-name: zoomInUp; +} +@keyframes zoomOut { + 0% { + opacity: 1; + } + 50% { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + to { + opacity: 0; + } +} +.animate__zoomOut { + animation-name: zoomOut; +} +@keyframes zoomOutDown { + 40% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + to { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.animate__zoomOutDown { + animation-name: zoomOutDown; + transform-origin: center bottom; +} +@keyframes zoomOutLeft { + 40% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + to { + opacity: 0; + transform: scale(0.1) translate3d(-2000px, 0, 0); + } +} +.animate__zoomOutLeft { + animation-name: zoomOutLeft; + transform-origin: left center; +} +@keyframes zoomOutRight { + 40% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + to { + opacity: 0; + transform: scale(0.1) translate3d(2000px, 0, 0); + } +} +.animate__zoomOutRight { + animation-name: zoomOutRight; + transform-origin: right center; +} +@keyframes zoomOutUp { + 40% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + to { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} +.animate__zoomOutUp { + animation-name: zoomOutUp; + transform-origin: center bottom; +} +@keyframes slideInDown { + 0% { + transform: translate3d(0, -100%, 0); + visibility: visible; + } + to { + transform: translateZ(0); + } +} +.animate__slideInDown { + animation-name: slideInDown; +} +@keyframes slideInLeft { + 0% { + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + to { + transform: translateZ(0); + } +} +.animate__slideInLeft { + animation-name: slideInLeft; +} +@keyframes slideInRight { + 0% { + transform: translate3d(100%, 0, 0); + visibility: visible; + } + to { + transform: translateZ(0); + } +} +.animate__slideInRight { + animation-name: slideInRight; +} +@keyframes slideInUp { + 0% { + transform: translate3d(0, 100%, 0); + visibility: visible; + } + to { + transform: translateZ(0); + } +} +.animate__slideInUp { + animation-name: slideInUp; +} +@keyframes slideOutDown { + 0% { + transform: translateZ(0); + } + to { + visibility: hidden; + transform: translate3d(0, 100%, 0); + } +} +.animate__slideOutDown { + animation-name: slideOutDown; +} +@keyframes slideOutLeft { + 0% { + transform: translateZ(0); + } + to { + visibility: hidden; + transform: translate3d(-100%, 0, 0); + } +} +.animate__slideOutLeft { + animation-name: slideOutLeft; +} +@keyframes slideOutRight { + 0% { + transform: translateZ(0); + } + to { + visibility: hidden; + transform: translate3d(100%, 0, 0); + } +} +.animate__slideOutRight { + animation-name: slideOutRight; +} +@keyframes slideOutUp { + 0% { + transform: translateZ(0); + } + to { + visibility: hidden; + transform: translate3d(0, -100%, 0); + } +} +.animate__slideOutUp { + animation-name: slideOutUp; +} +body { + /* background-color: #000; */ +} + +.n-popover:has(.music-play) { + border-radius: 1.5rem !important; +} +@font-face { + font-family: "v-sans"; + font-weight: 400; + src: url("./LatoLatin-Regular-Dmlz1U0B.woff2"); +} + +@font-face { + font-family: "v-sans"; + font-weight: 600; + src: url("./LatoLatin-Semibold-Dbk81p2D.woff2"); +}@font-face { + font-family: "v-mono"; + font-weight: 400; + src: url("./FiraCode-Regular-CRwVj4V2.woff2"); +}/* ./src/index.css */ + +/*! @import */ + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +/* ! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com */ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; /* 1 */ + border-width: 0; /* 2 */ + border-style: solid; /* 2 */ + border-color: #e5e7eb; /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -moz-tab-size: 4; /* 3 */ + -o-tab-size: 4; + tab-size: 4; /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */ + font-feature-settings: normal; /* 5 */ + font-variation-settings: normal; /* 6 */ + -webkit-tap-highlight-color: transparent; /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; /* 1 */ + line-height: inherit; /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; /* 1 */ + color: inherit; /* 2 */ + border-top-width: 1px; /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ + font-feature-settings: normal; /* 2 */ + font-variation-settings: normal; /* 3 */ + font-size: 1em; /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; /* 1 */ + border-color: inherit; /* 2 */ + border-collapse: collapse; /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-feature-settings: inherit; /* 1 */ + font-variation-settings: inherit; /* 1 */ + font-size: 100%; /* 1 */ + font-weight: inherit; /* 1 */ + line-height: inherit; /* 1 */ + letter-spacing: inherit; /* 1 */ + color: inherit; /* 1 */ + margin: 0; /* 2 */ + padding: 0; /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; /* 1 */ + background-color: transparent; /* 2 */ + background-image: none; /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; /* 1 */ + color: #9ca3af; /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; /* 1 */ + color: #9ca3af; /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; /* 1 */ + vertical-align: middle; /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden]:where(:not([hidden="until-found"])) { + display: none; +} + +.container { + width: 100%; +} + +@media (min-width: 640px) { + + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + + .container { + max-width: 1536px; + } +} + +.visible { + visibility: visible; +} + +.invisible { + visibility: hidden; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.inset-0 { + inset: 0px; +} + +.bottom-0 { + bottom: 0px; +} + +.bottom-\[30px\] { + bottom: 30px; +} + +.left-0 { + left: 0px; +} + +.left-1\/2 { + left: 50%; +} + +.left-2 { + left: 0.5rem; +} + +.right-0 { + right: 0px; +} + +.right-2 { + right: 0.5rem; +} + +.right-4 { + right: 1rem; +} + +.top-0 { + top: 0px; +} + +.top-1\/2 { + top: 50%; +} + +.top-2 { + top: 0.5rem; +} + +.top-4 { + top: 1rem; +} + +.z-10 { + z-index: 10; +} + +.mx-0 { + margin-left: 0px; + margin-right: 0px; +} + +.mx-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} + +.mx-4 { + margin-left: 1rem; + margin-right: 1rem; +} + +.mx-6 { + margin-left: 1.5rem; + margin-right: 1.5rem; +} + +.my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.my-4 { + margin-top: 1rem; + margin-bottom: 1rem; +} + +.mb-0 { + margin-bottom: 0px; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.mb-6 { + margin-bottom: 1.5rem; +} + +.ml-1 { + margin-left: 0.25rem; +} + +.ml-2 { + margin-left: 0.5rem; +} + +.ml-3 { + margin-left: 0.75rem; +} + +.ml-4 { + margin-left: 1rem; +} + +.ml-auto { + margin-left: auto; +} + +.mr-0 { + margin-right: 0px; +} + +.mr-1 { + margin-right: 0.25rem; +} + +.mr-16 { + margin-right: 4rem; +} + +.mr-2 { + margin-right: 0.5rem; +} + +.mr-3 { + margin-right: 0.75rem; +} + +.mr-4 { + margin-right: 1rem; +} + +.mr-5 { + margin-right: 1.25rem; +} + +.mr-6 { + margin-right: 1.5rem; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mt-10 { + margin-top: 2.5rem; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.mt-4 { + margin-top: 1rem; +} + +.mt-40 { + margin-top: 10rem; +} + +.mt-6 { + margin-top: 1.5rem; +} + +.box-border { + box-sizing: border-box; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.flex { + display: flex; +} + +.inline-flex { + display: inline-flex; +} + +.table { + display: table; +} + +.grid { + display: grid; +} + +.hidden { + display: none; +} + +.aspect-square { + aspect-ratio: 1 / 1; +} + +.h-1 { + height: 0.25rem; +} + +.h-10 { + height: 2.5rem; +} + +.h-12 { + height: 3rem; +} + +.h-14 { + height: 3.5rem; +} + +.h-20 { + height: 5rem; +} + +.h-24 { + height: 6rem; +} + +.h-32 { + height: 8rem; +} + +.h-7 { + height: 1.75rem; +} + +.h-8 { + height: 2rem; +} + +.h-9 { + height: 2.25rem; +} + +.h-\[100px\] { + height: 100px; +} + +.h-\[180px\] { + height: 180px; +} + +.h-\[300px\] { + height: 300px; +} + +.h-\[calc\(100\%-60px\)\] { + height: calc(100% - 60px); +} + +.h-full { + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.min-h-0 { + min-height: 0px; +} + +.min-h-\[250px\] { + min-height: 250px; +} + +.min-h-\[calc\(80vh-60px\)\] { + min-height: calc(80vh - 60px); +} + +.w-10 { + width: 2.5rem; +} + +.w-12 { + width: 3rem; +} + +.w-14 { + width: 3.5rem; +} + +.w-2\/5 { + width: 40%; +} + +.w-20 { + width: 5rem; +} + +.w-24 { + width: 6rem; +} + +.w-32 { + width: 8rem; +} + +.w-40 { + width: 10rem; +} + +.w-7 { + width: 1.75rem; +} + +.w-8 { + width: 2rem; +} + +.w-9 { + width: 2.25rem; +} + +.w-\[100px\] { + width: 100px; +} + +.w-\[160px\] { + width: 160px; +} + +.w-\[200px\] { + width: 200px; +} + +.w-\[25\%\] { + width: 25%; +} + +.w-full { + width: 100%; +} + +.w-screen { + width: 100vw; +} + +.min-w-0 { + min-width: 0px; +} + +.min-w-\[280px\] { + min-width: 280px; +} + +.min-w-\[60px\] { + min-width: 60px; +} + +.max-w-\[45\%\] { + max-width: 45%; +} + +.flex-1 { + flex: 1 1 0%; +} + +.flex-shrink-0 { + flex-shrink: 0; +} + +.flex-grow { + flex-grow: 1; +} + +.-translate-x-1\/2 { + --tw-translate-x: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.-translate-y-1\/2 { + --tw-translate-y: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.scale-105 { + --tw-scale-x: 1.05; + --tw-scale-y: 1.05; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.scale-150 { + --tw-scale-x: 1.5; + --tw-scale-y: 1.5; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.transform { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.cursor-none { + cursor: none; +} + +.cursor-pointer { + cursor: pointer; +} + +.select-none { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.resize { + resize: both; +} + +.list-inside { + list-style-position: inside; +} + +.list-decimal { + list-style-type: decimal; +} + +.list-disc { + list-style-type: disc; +} + +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.grid-rows-3 { + grid-template-rows: repeat(3, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +.gap-10 { + gap: 2.5rem; +} + +.gap-2 { + gap: 0.5rem; +} + +.gap-3 { + gap: 0.75rem; +} + +.gap-4 { + gap: 1rem; +} + +.gap-x-8 { + -moz-column-gap: 2rem; + column-gap: 2rem; +} + +.gap-y-6 { + row-gap: 1.5rem; +} + +.space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); +} + +.overflow-hidden { + overflow: hidden; +} + +.overflow-x-auto { + overflow-x: auto; +} + +.text-ellipsis { + text-overflow: ellipsis; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-2xl { + border-radius: 1rem; +} + +.rounded-3xl { + border-radius: 1.5rem; +} + +.rounded-full { + border-radius: 9999px; +} + +.rounded-lg { + border-radius: 0.5rem; +} + +.rounded-xl { + border-radius: 0.75rem; +} + +.rounded-b-none { + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; +} + +.border { + border-width: 1px; +} + +.border-2 { + border-width: 2px; +} + +.border-b { + border-bottom-width: 1px; +} + +.border-l-4 { + border-left-width: 4px; +} + +.border-t { + border-top-width: 1px; +} + +.border-gray-100 { + --tw-border-opacity: 1; + border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); +} + +.border-gray-200 { + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); +} + +.border-gray-400 { + --tw-border-opacity: 1; + border-color: rgb(156 163 175 / var(--tw-border-opacity, 1)); +} + +.border-green-500 { + --tw-border-opacity: 1; + border-color: rgb(34 197 94 / var(--tw-border-opacity, 1)); +} + +.bg-black { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-100 { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-300 { + --tw-bg-opacity: 1; + background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-50 { + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-500 { + --tw-bg-opacity: 1; + background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-800 { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-900 { + --tw-bg-opacity: 1; + background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); +} + +.bg-green-50 { + --tw-bg-opacity: 1; + background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1)); +} + +.bg-green-500 { + --tw-bg-opacity: 1; + background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)); +} + +.bg-green-600 { + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); +} + +.bg-light { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} + +.bg-light-100 { + --tw-bg-opacity: 1; + background-color: rgb(248 249 250 / var(--tw-bg-opacity, 1)); +} + +.bg-transparent { + background-color: transparent; +} + +.bg-opacity-10 { + --tw-bg-opacity: 0.1; +} + +.bg-opacity-20 { + --tw-bg-opacity: 0.2; +} + +.bg-opacity-50 { + --tw-bg-opacity: 0.5; +} + +.bg-opacity-60 { + --tw-bg-opacity: 0.6; +} + +.bg-opacity-75 { + --tw-bg-opacity: 0.75; +} + +.bg-opacity-90 { + --tw-bg-opacity: 0.9; +} + +.bg-cover { + background-size: cover; +} + +.bg-center { + background-position: center; +} + +.bg-no-repeat { + background-repeat: no-repeat; +} + +.object-contain { + -o-object-fit: contain; + object-fit: contain; +} + +.object-cover { + -o-object-fit: cover; + object-fit: cover; +} + +.p-0 { + padding: 0px; +} + +.p-2 { + padding: 0.5rem; +} + +.p-20 { + padding: 5rem; +} + +.p-3 { + padding: 0.75rem; +} + +.p-4 { + padding: 1rem; +} + +.p-5 { + padding: 1.25rem; +} + +.p-6 { + padding: 1.5rem; +} + +.px-0 { + padding-left: 0px; + padding-right: 0px; +} + +.px-1\.5 { + padding-left: 0.375rem; + padding-right: 0.375rem; +} + +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +.px-24 { + padding-left: 6rem; + padding-right: 6rem; +} + +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.px-8 { + padding-left: 2rem; + padding-right: 2rem; +} + +.py-0\.5 { + padding-top: 0.125rem; + padding-bottom: 0.125rem; +} + +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.pb-1 { + padding-bottom: 0.25rem; +} + +.pb-2 { + padding-bottom: 0.5rem; +} + +.pb-20 { + padding-bottom: 5rem; +} + +.pb-28 { + padding-bottom: 7rem; +} + +.pb-4 { + padding-bottom: 1rem; +} + +.pl-4 { + padding-left: 1rem; +} + +.pr-0 { + padding-right: 0px; +} + +.pr-3 { + padding-right: 0.75rem; +} + +.pr-8 { + padding-right: 2rem; +} + +.pt-2 { + padding-top: 0.5rem; +} + +.pt-6 { + padding-top: 1.5rem; +} + +.pt-8 { + padding-top: 2rem; +} + +.text-center { + text-align: center; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-5xl { + font-size: 3rem; + line-height: 1; +} + +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + +.font-bold { + font-weight: 700; +} + +.font-medium { + font-weight: 500; +} + +.leading-relaxed { + line-height: 1.625; +} + +.text-dark { + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity, 1)); +} + +.text-gray-100 { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} + +.text-gray-200 { + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity, 1)); +} + +.text-gray-300 { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); +} + +.text-gray-400 { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} + +.text-gray-500 { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} + +.text-gray-600 { + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} + +.text-gray-700 { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); +} + +.text-gray-800 { + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)); +} + +.text-gray-900 { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} + +.text-green-500 { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} + +.text-red-500 { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} + +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} + +.placeholder-gray-500::-moz-placeholder { + --tw-placeholder-opacity: 1; + color: rgb(107 114 128 / var(--tw-placeholder-opacity, 1)); +} + +.placeholder-gray-500::placeholder { + --tw-placeholder-opacity: 1; + color: rgb(107 114 128 / var(--tw-placeholder-opacity, 1)); +} + +.opacity-0 { + opacity: 0; +} + +.opacity-100 { + opacity: 1; +} + +.shadow-2xl { + --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-lg { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.blur { + --tw-blur: blur(8px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.filter { + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.backdrop-filter { + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-opacity { + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-200 { + transition-duration: 200ms; +} + +.duration-300 { + transition-duration: 300ms; +} + +.duration-500 { + transition-duration: 500ms; +} + +.ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +.n-image img { + background-color: #111111; + width: 100%; +} + +.n-slider-handle-indicator--top { + margin-bottom: 0px !important; + background-color: transparent !important; + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + font-size: 1.5rem !important; + line-height: 2rem !important; + color: #000000dd !important; + --tw-shadow: 0 0 #0000 !important; + --tw-shadow-colored: 0 0 #0000 !important; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important; +} + +.n-slider-handle-indicator--top:is(.dark *) { + color: #ffffffdd !important; +} + +.text-el { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.theme-dark { + --bg-color: #000; + --text-color: #fff; + --bg-color-100: #161616; + --bg-color-200: #2d2d2d; + --bg-color-300: #3d3d3d; + --text-color: #f8f9fa; + --text-color-100: #e9ecef; + --text-color-200: #dee2e6; + --text-color-300: #dde0e3; + --primary-color: #22c55e; +} + +.theme-light { + --bg-color: #fff; + --bg-color-100: #f8f9fa; + --bg-color-200: #e9ecef; + --bg-color-300: #dee2e6; + --text-color: #000; + --text-color-100: #161616; + --text-color-200: #2d2d2d; + --text-color-300: #3d3d3d; + --primary-color: #22c55e; +} + +.theme-gray { + --bg-color: #f8f9fa; + --bg-color-100: #e9ecef; + --bg-color-200: #dee2e6; + --bg-color-300: #dde0e3; + --text-color: #000; + --text-color-100: #161616; + --text-color-200: #2d2d2d; + --text-color-300: #3d3d3d; + --primary-color: #22c55e; +} + +.hover\:-translate-y-0\.5:hover { + --tw-translate-y: -0.125rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:scale-110:hover { + --tw-scale-x: 1.1; + --tw-scale-y: 1.1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:border-gray-400:hover { + --tw-border-opacity: 1; + border-color: rgb(156 163 175 / var(--tw-border-opacity, 1)); +} + +.hover\:border-red-500:hover { + --tw-border-opacity: 1; + border-color: rgb(239 68 68 / var(--tw-border-opacity, 1)); +} + +.hover\:bg-gray-100:hover { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-green-600:hover { + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-green-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-green-950:hover { + --tw-bg-opacity: 1; + background-color: rgb(5 46 22 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-light-200:hover { + --tw-bg-opacity: 1; + background-color: rgb(233 236 239 / var(--tw-bg-opacity, 1)); +} + +.hover\:text-gray-600:hover { + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} + +.hover\:text-gray-800:hover { + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)); +} + +.hover\:text-green-500:hover { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} + +.hover\:text-green-600:hover { + --tw-text-opacity: 1; + color: rgb(22 163 74 / var(--tw-text-opacity, 1)); +} + +.hover\:text-red-600:hover { + --tw-text-opacity: 1; + color: rgb(220 38 38 / var(--tw-text-opacity, 1)); +} + +.hover\:text-white:hover { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} + +.dark\:border-gray-600:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)); +} + +.dark\:border-gray-700:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); +} + +.dark\:border-gray-800:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(31 41 55 / var(--tw-border-opacity, 1)); +} + +.dark\:bg-black:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} + +.dark\:bg-dark:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} + +.dark\:bg-dark-100:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(22 22 22 / var(--tw-bg-opacity, 1)); +} + +.dark\:bg-dark-300:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(61 61 61 / var(--tw-bg-opacity, 1)); +} + +.dark\:bg-gray-700:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); +} + +.dark\:bg-gray-800:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} + +.dark\:bg-opacity-20:is(.dark *) { + --tw-bg-opacity: 0.2; +} + +.dark\:bg-opacity-60:is(.dark *) { + --tw-bg-opacity: 0.6; +} + +.dark\:bg-opacity-75:is(.dark *) { + --tw-bg-opacity: 0.75; +} + +.dark\:text-gray-100:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} + +.dark\:text-gray-200:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity, 1)); +} + +.dark\:text-gray-400:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} + +.dark\:text-white:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} + +.dark\:hover\:bg-gray-800:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} + +.dark\:hover\:text-gray-400:hover:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} + +.hover\:dark\:text-white:is(.dark *):hover { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +/* +* Remix Icon v4.6.0 +* https://remixicon.com +* https://github.com/Remix-Design/RemixIcon +* +* Copyright RemixIcon.com +* Released under the Apache License Version 2.0 +* +* Date: 2024-12-17 +*/ +@font-face { + font-family: "remixicon"; + src: url('./remixicon-BVJ9S1ev.eot?t=1734404658139'); /* IE9*/ + src: url('./remixicon-BVJ9S1ev.eot?t=1734404658139#iefix') format('embedded-opentype'), + url("./remixicon-BVvFtaex.woff2?t=1734404658139") format("woff2"), + url("./remixicon-BBpe-Xu7.woff?t=1734404658139") format("woff"), + url('./remixicon-CfJD46dY.ttf?t=1734404658139') format('truetype'), + url('./remixicon-C2wQ2gtc.svg?t=1734404658139#remixicon') format('svg'); /* iOS 4.1- */ + font-display: swap; +} + +[class^="ri-"], [class*=" ri-"] { + font-family: 'remixicon' !important; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.ri-lg { font-size: 1.3333em; line-height: 0.75em; vertical-align: -.0667em; } +.ri-xl { font-size: 1.5em; line-height: 0.6666em; vertical-align: -.075em; } +.ri-xxs { font-size: .5em; } +.ri-xs { font-size: .75em; } +.ri-sm { font-size: .875em } +.ri-1x { font-size: 1em; } +.ri-2x { font-size: 2em; } +.ri-3x { font-size: 3em; } +.ri-4x { font-size: 4em; } +.ri-5x { font-size: 5em; } +.ri-6x { font-size: 6em; } +.ri-7x { font-size: 7em; } +.ri-8x { font-size: 8em; } +.ri-9x { font-size: 9em; } +.ri-10x { font-size: 10em; } +.ri-fw { text-align: center; width: 1.25em; } + +.ri-24-hours-fill:before { content: "\ea01"; } +.ri-24-hours-line:before { content: "\ea02"; } +.ri-4k-fill:before { content: "\ea03"; } +.ri-4k-line:before { content: "\ea04"; } +.ri-a-b:before { content: "\ea05"; } +.ri-account-box-fill:before { content: "\ea06"; } +.ri-account-box-line:before { content: "\ea07"; } +.ri-account-circle-fill:before { content: "\ea08"; } +.ri-account-circle-line:before { content: "\ea09"; } +.ri-account-pin-box-fill:before { content: "\ea0a"; } +.ri-account-pin-box-line:before { content: "\ea0b"; } +.ri-account-pin-circle-fill:before { content: "\ea0c"; } +.ri-account-pin-circle-line:before { content: "\ea0d"; } +.ri-add-box-fill:before { content: "\ea0e"; } +.ri-add-box-line:before { content: "\ea0f"; } +.ri-add-circle-fill:before { content: "\ea10"; } +.ri-add-circle-line:before { content: "\ea11"; } +.ri-add-fill:before { content: "\ea12"; } +.ri-add-line:before { content: "\ea13"; } +.ri-admin-fill:before { content: "\ea14"; } +.ri-admin-line:before { content: "\ea15"; } +.ri-advertisement-fill:before { content: "\ea16"; } +.ri-advertisement-line:before { content: "\ea17"; } +.ri-airplay-fill:before { content: "\ea18"; } +.ri-airplay-line:before { content: "\ea19"; } +.ri-alarm-fill:before { content: "\ea1a"; } +.ri-alarm-line:before { content: "\ea1b"; } +.ri-alarm-warning-fill:before { content: "\ea1c"; } +.ri-alarm-warning-line:before { content: "\ea1d"; } +.ri-album-fill:before { content: "\ea1e"; } +.ri-album-line:before { content: "\ea1f"; } +.ri-alert-fill:before { content: "\ea20"; } +.ri-alert-line:before { content: "\ea21"; } +.ri-aliens-fill:before { content: "\ea22"; } +.ri-aliens-line:before { content: "\ea23"; } +.ri-align-bottom:before { content: "\ea24"; } +.ri-align-center:before { content: "\ea25"; } +.ri-align-justify:before { content: "\ea26"; } +.ri-align-left:before { content: "\ea27"; } +.ri-align-right:before { content: "\ea28"; } +.ri-align-top:before { content: "\ea29"; } +.ri-align-vertically:before { content: "\ea2a"; } +.ri-alipay-fill:before { content: "\ea2b"; } +.ri-alipay-line:before { content: "\ea2c"; } +.ri-amazon-fill:before { content: "\ea2d"; } +.ri-amazon-line:before { content: "\ea2e"; } +.ri-anchor-fill:before { content: "\ea2f"; } +.ri-anchor-line:before { content: "\ea30"; } +.ri-ancient-gate-fill:before { content: "\ea31"; } +.ri-ancient-gate-line:before { content: "\ea32"; } +.ri-ancient-pavilion-fill:before { content: "\ea33"; } +.ri-ancient-pavilion-line:before { content: "\ea34"; } +.ri-android-fill:before { content: "\ea35"; } +.ri-android-line:before { content: "\ea36"; } +.ri-angularjs-fill:before { content: "\ea37"; } +.ri-angularjs-line:before { content: "\ea38"; } +.ri-anticlockwise-2-fill:before { content: "\ea39"; } +.ri-anticlockwise-2-line:before { content: "\ea3a"; } +.ri-anticlockwise-fill:before { content: "\ea3b"; } +.ri-anticlockwise-line:before { content: "\ea3c"; } +.ri-app-store-fill:before { content: "\ea3d"; } +.ri-app-store-line:before { content: "\ea3e"; } +.ri-apple-fill:before { content: "\ea3f"; } +.ri-apple-line:before { content: "\ea40"; } +.ri-apps-2-fill:before { content: "\ea41"; } +.ri-apps-2-line:before { content: "\ea42"; } +.ri-apps-fill:before { content: "\ea43"; } +.ri-apps-line:before { content: "\ea44"; } +.ri-archive-drawer-fill:before { content: "\ea45"; } +.ri-archive-drawer-line:before { content: "\ea46"; } +.ri-archive-fill:before { content: "\ea47"; } +.ri-archive-line:before { content: "\ea48"; } +.ri-arrow-down-circle-fill:before { content: "\ea49"; } +.ri-arrow-down-circle-line:before { content: "\ea4a"; } +.ri-arrow-down-fill:before { content: "\ea4b"; } +.ri-arrow-down-line:before { content: "\ea4c"; } +.ri-arrow-down-s-fill:before { content: "\ea4d"; } +.ri-arrow-down-s-line:before { content: "\ea4e"; } +.ri-arrow-drop-down-fill:before { content: "\ea4f"; } +.ri-arrow-drop-down-line:before { content: "\ea50"; } +.ri-arrow-drop-left-fill:before { content: "\ea51"; } +.ri-arrow-drop-left-line:before { content: "\ea52"; } +.ri-arrow-drop-right-fill:before { content: "\ea53"; } +.ri-arrow-drop-right-line:before { content: "\ea54"; } +.ri-arrow-drop-up-fill:before { content: "\ea55"; } +.ri-arrow-drop-up-line:before { content: "\ea56"; } +.ri-arrow-go-back-fill:before { content: "\ea57"; } +.ri-arrow-go-back-line:before { content: "\ea58"; } +.ri-arrow-go-forward-fill:before { content: "\ea59"; } +.ri-arrow-go-forward-line:before { content: "\ea5a"; } +.ri-arrow-left-circle-fill:before { content: "\ea5b"; } +.ri-arrow-left-circle-line:before { content: "\ea5c"; } +.ri-arrow-left-down-fill:before { content: "\ea5d"; } +.ri-arrow-left-down-line:before { content: "\ea5e"; } +.ri-arrow-left-fill:before { content: "\ea5f"; } +.ri-arrow-left-line:before { content: "\ea60"; } +.ri-arrow-left-right-fill:before { content: "\ea61"; } +.ri-arrow-left-right-line:before { content: "\ea62"; } +.ri-arrow-left-s-fill:before { content: "\ea63"; } +.ri-arrow-left-s-line:before { content: "\ea64"; } +.ri-arrow-left-up-fill:before { content: "\ea65"; } +.ri-arrow-left-up-line:before { content: "\ea66"; } +.ri-arrow-right-circle-fill:before { content: "\ea67"; } +.ri-arrow-right-circle-line:before { content: "\ea68"; } +.ri-arrow-right-down-fill:before { content: "\ea69"; } +.ri-arrow-right-down-line:before { content: "\ea6a"; } +.ri-arrow-right-fill:before { content: "\ea6b"; } +.ri-arrow-right-line:before { content: "\ea6c"; } +.ri-arrow-right-s-fill:before { content: "\ea6d"; } +.ri-arrow-right-s-line:before { content: "\ea6e"; } +.ri-arrow-right-up-fill:before { content: "\ea6f"; } +.ri-arrow-right-up-line:before { content: "\ea70"; } +.ri-arrow-up-circle-fill:before { content: "\ea71"; } +.ri-arrow-up-circle-line:before { content: "\ea72"; } +.ri-arrow-up-down-fill:before { content: "\ea73"; } +.ri-arrow-up-down-line:before { content: "\ea74"; } +.ri-arrow-up-fill:before { content: "\ea75"; } +.ri-arrow-up-line:before { content: "\ea76"; } +.ri-arrow-up-s-fill:before { content: "\ea77"; } +.ri-arrow-up-s-line:before { content: "\ea78"; } +.ri-artboard-2-fill:before { content: "\ea79"; } +.ri-artboard-2-line:before { content: "\ea7a"; } +.ri-artboard-fill:before { content: "\ea7b"; } +.ri-artboard-line:before { content: "\ea7c"; } +.ri-article-fill:before { content: "\ea7d"; } +.ri-article-line:before { content: "\ea7e"; } +.ri-aspect-ratio-fill:before { content: "\ea7f"; } +.ri-aspect-ratio-line:before { content: "\ea80"; } +.ri-asterisk:before { content: "\ea81"; } +.ri-at-fill:before { content: "\ea82"; } +.ri-at-line:before { content: "\ea83"; } +.ri-attachment-2:before { content: "\ea84"; } +.ri-attachment-fill:before { content: "\ea85"; } +.ri-attachment-line:before { content: "\ea86"; } +.ri-auction-fill:before { content: "\ea87"; } +.ri-auction-line:before { content: "\ea88"; } +.ri-award-fill:before { content: "\ea89"; } +.ri-award-line:before { content: "\ea8a"; } +.ri-baidu-fill:before { content: "\ea8b"; } +.ri-baidu-line:before { content: "\ea8c"; } +.ri-ball-pen-fill:before { content: "\ea8d"; } +.ri-ball-pen-line:before { content: "\ea8e"; } +.ri-bank-card-2-fill:before { content: "\ea8f"; } +.ri-bank-card-2-line:before { content: "\ea90"; } +.ri-bank-card-fill:before { content: "\ea91"; } +.ri-bank-card-line:before { content: "\ea92"; } +.ri-bank-fill:before { content: "\ea93"; } +.ri-bank-line:before { content: "\ea94"; } +.ri-bar-chart-2-fill:before { content: "\ea95"; } +.ri-bar-chart-2-line:before { content: "\ea96"; } +.ri-bar-chart-box-fill:before { content: "\ea97"; } +.ri-bar-chart-box-line:before { content: "\ea98"; } +.ri-bar-chart-fill:before { content: "\ea99"; } +.ri-bar-chart-grouped-fill:before { content: "\ea9a"; } +.ri-bar-chart-grouped-line:before { content: "\ea9b"; } +.ri-bar-chart-horizontal-fill:before { content: "\ea9c"; } +.ri-bar-chart-horizontal-line:before { content: "\ea9d"; } +.ri-bar-chart-line:before { content: "\ea9e"; } +.ri-barcode-box-fill:before { content: "\ea9f"; } +.ri-barcode-box-line:before { content: "\eaa0"; } +.ri-barcode-fill:before { content: "\eaa1"; } +.ri-barcode-line:before { content: "\eaa2"; } +.ri-barricade-fill:before { content: "\eaa3"; } +.ri-barricade-line:before { content: "\eaa4"; } +.ri-base-station-fill:before { content: "\eaa5"; } +.ri-base-station-line:before { content: "\eaa6"; } +.ri-basketball-fill:before { content: "\eaa7"; } +.ri-basketball-line:before { content: "\eaa8"; } +.ri-battery-2-charge-fill:before { content: "\eaa9"; } +.ri-battery-2-charge-line:before { content: "\eaaa"; } +.ri-battery-2-fill:before { content: "\eaab"; } +.ri-battery-2-line:before { content: "\eaac"; } +.ri-battery-charge-fill:before { content: "\eaad"; } +.ri-battery-charge-line:before { content: "\eaae"; } +.ri-battery-fill:before { content: "\eaaf"; } +.ri-battery-line:before { content: "\eab0"; } +.ri-battery-low-fill:before { content: "\eab1"; } +.ri-battery-low-line:before { content: "\eab2"; } +.ri-battery-saver-fill:before { content: "\eab3"; } +.ri-battery-saver-line:before { content: "\eab4"; } +.ri-battery-share-fill:before { content: "\eab5"; } +.ri-battery-share-line:before { content: "\eab6"; } +.ri-bear-smile-fill:before { content: "\eab7"; } +.ri-bear-smile-line:before { content: "\eab8"; } +.ri-behance-fill:before { content: "\eab9"; } +.ri-behance-line:before { content: "\eaba"; } +.ri-bell-fill:before { content: "\eabb"; } +.ri-bell-line:before { content: "\eabc"; } +.ri-bike-fill:before { content: "\eabd"; } +.ri-bike-line:before { content: "\eabe"; } +.ri-bilibili-fill:before { content: "\eabf"; } +.ri-bilibili-line:before { content: "\eac0"; } +.ri-bill-fill:before { content: "\eac1"; } +.ri-bill-line:before { content: "\eac2"; } +.ri-billiards-fill:before { content: "\eac3"; } +.ri-billiards-line:before { content: "\eac4"; } +.ri-bit-coin-fill:before { content: "\eac5"; } +.ri-bit-coin-line:before { content: "\eac6"; } +.ri-blaze-fill:before { content: "\eac7"; } +.ri-blaze-line:before { content: "\eac8"; } +.ri-bluetooth-connect-fill:before { content: "\eac9"; } +.ri-bluetooth-connect-line:before { content: "\eaca"; } +.ri-bluetooth-fill:before { content: "\eacb"; } +.ri-bluetooth-line:before { content: "\eacc"; } +.ri-blur-off-fill:before { content: "\eacd"; } +.ri-blur-off-line:before { content: "\eace"; } +.ri-body-scan-fill:before { content: "\eacf"; } +.ri-body-scan-line:before { content: "\ead0"; } +.ri-bold:before { content: "\ead1"; } +.ri-book-2-fill:before { content: "\ead2"; } +.ri-book-2-line:before { content: "\ead3"; } +.ri-book-3-fill:before { content: "\ead4"; } +.ri-book-3-line:before { content: "\ead5"; } +.ri-book-fill:before { content: "\ead6"; } +.ri-book-line:before { content: "\ead7"; } +.ri-book-marked-fill:before { content: "\ead8"; } +.ri-book-marked-line:before { content: "\ead9"; } +.ri-book-open-fill:before { content: "\eada"; } +.ri-book-open-line:before { content: "\eadb"; } +.ri-book-read-fill:before { content: "\eadc"; } +.ri-book-read-line:before { content: "\eadd"; } +.ri-booklet-fill:before { content: "\eade"; } +.ri-booklet-line:before { content: "\eadf"; } +.ri-bookmark-2-fill:before { content: "\eae0"; } +.ri-bookmark-2-line:before { content: "\eae1"; } +.ri-bookmark-3-fill:before { content: "\eae2"; } +.ri-bookmark-3-line:before { content: "\eae3"; } +.ri-bookmark-fill:before { content: "\eae4"; } +.ri-bookmark-line:before { content: "\eae5"; } +.ri-boxing-fill:before { content: "\eae6"; } +.ri-boxing-line:before { content: "\eae7"; } +.ri-braces-fill:before { content: "\eae8"; } +.ri-braces-line:before { content: "\eae9"; } +.ri-brackets-fill:before { content: "\eaea"; } +.ri-brackets-line:before { content: "\eaeb"; } +.ri-briefcase-2-fill:before { content: "\eaec"; } +.ri-briefcase-2-line:before { content: "\eaed"; } +.ri-briefcase-3-fill:before { content: "\eaee"; } +.ri-briefcase-3-line:before { content: "\eaef"; } +.ri-briefcase-4-fill:before { content: "\eaf0"; } +.ri-briefcase-4-line:before { content: "\eaf1"; } +.ri-briefcase-5-fill:before { content: "\eaf2"; } +.ri-briefcase-5-line:before { content: "\eaf3"; } +.ri-briefcase-fill:before { content: "\eaf4"; } +.ri-briefcase-line:before { content: "\eaf5"; } +.ri-bring-forward:before { content: "\eaf6"; } +.ri-bring-to-front:before { content: "\eaf7"; } +.ri-broadcast-fill:before { content: "\eaf8"; } +.ri-broadcast-line:before { content: "\eaf9"; } +.ri-brush-2-fill:before { content: "\eafa"; } +.ri-brush-2-line:before { content: "\eafb"; } +.ri-brush-3-fill:before { content: "\eafc"; } +.ri-brush-3-line:before { content: "\eafd"; } +.ri-brush-4-fill:before { content: "\eafe"; } +.ri-brush-4-line:before { content: "\eaff"; } +.ri-brush-fill:before { content: "\eb00"; } +.ri-brush-line:before { content: "\eb01"; } +.ri-bubble-chart-fill:before { content: "\eb02"; } +.ri-bubble-chart-line:before { content: "\eb03"; } +.ri-bug-2-fill:before { content: "\eb04"; } +.ri-bug-2-line:before { content: "\eb05"; } +.ri-bug-fill:before { content: "\eb06"; } +.ri-bug-line:before { content: "\eb07"; } +.ri-building-2-fill:before { content: "\eb08"; } +.ri-building-2-line:before { content: "\eb09"; } +.ri-building-3-fill:before { content: "\eb0a"; } +.ri-building-3-line:before { content: "\eb0b"; } +.ri-building-4-fill:before { content: "\eb0c"; } +.ri-building-4-line:before { content: "\eb0d"; } +.ri-building-fill:before { content: "\eb0e"; } +.ri-building-line:before { content: "\eb0f"; } +.ri-bus-2-fill:before { content: "\eb10"; } +.ri-bus-2-line:before { content: "\eb11"; } +.ri-bus-fill:before { content: "\eb12"; } +.ri-bus-line:before { content: "\eb13"; } +.ri-bus-wifi-fill:before { content: "\eb14"; } +.ri-bus-wifi-line:before { content: "\eb15"; } +.ri-cactus-fill:before { content: "\eb16"; } +.ri-cactus-line:before { content: "\eb17"; } +.ri-cake-2-fill:before { content: "\eb18"; } +.ri-cake-2-line:before { content: "\eb19"; } +.ri-cake-3-fill:before { content: "\eb1a"; } +.ri-cake-3-line:before { content: "\eb1b"; } +.ri-cake-fill:before { content: "\eb1c"; } +.ri-cake-line:before { content: "\eb1d"; } +.ri-calculator-fill:before { content: "\eb1e"; } +.ri-calculator-line:before { content: "\eb1f"; } +.ri-calendar-2-fill:before { content: "\eb20"; } +.ri-calendar-2-line:before { content: "\eb21"; } +.ri-calendar-check-fill:before { content: "\eb22"; } +.ri-calendar-check-line:before { content: "\eb23"; } +.ri-calendar-event-fill:before { content: "\eb24"; } +.ri-calendar-event-line:before { content: "\eb25"; } +.ri-calendar-fill:before { content: "\eb26"; } +.ri-calendar-line:before { content: "\eb27"; } +.ri-calendar-todo-fill:before { content: "\eb28"; } +.ri-calendar-todo-line:before { content: "\eb29"; } +.ri-camera-2-fill:before { content: "\eb2a"; } +.ri-camera-2-line:before { content: "\eb2b"; } +.ri-camera-3-fill:before { content: "\eb2c"; } +.ri-camera-3-line:before { content: "\eb2d"; } +.ri-camera-fill:before { content: "\eb2e"; } +.ri-camera-lens-fill:before { content: "\eb2f"; } +.ri-camera-lens-line:before { content: "\eb30"; } +.ri-camera-line:before { content: "\eb31"; } +.ri-camera-off-fill:before { content: "\eb32"; } +.ri-camera-off-line:before { content: "\eb33"; } +.ri-camera-switch-fill:before { content: "\eb34"; } +.ri-camera-switch-line:before { content: "\eb35"; } +.ri-capsule-fill:before { content: "\eb36"; } +.ri-capsule-line:before { content: "\eb37"; } +.ri-car-fill:before { content: "\eb38"; } +.ri-car-line:before { content: "\eb39"; } +.ri-car-washing-fill:before { content: "\eb3a"; } +.ri-car-washing-line:before { content: "\eb3b"; } +.ri-caravan-fill:before { content: "\eb3c"; } +.ri-caravan-line:before { content: "\eb3d"; } +.ri-cast-fill:before { content: "\eb3e"; } +.ri-cast-line:before { content: "\eb3f"; } +.ri-cellphone-fill:before { content: "\eb40"; } +.ri-cellphone-line:before { content: "\eb41"; } +.ri-celsius-fill:before { content: "\eb42"; } +.ri-celsius-line:before { content: "\eb43"; } +.ri-centos-fill:before { content: "\eb44"; } +.ri-centos-line:before { content: "\eb45"; } +.ri-character-recognition-fill:before { content: "\eb46"; } +.ri-character-recognition-line:before { content: "\eb47"; } +.ri-charging-pile-2-fill:before { content: "\eb48"; } +.ri-charging-pile-2-line:before { content: "\eb49"; } +.ri-charging-pile-fill:before { content: "\eb4a"; } +.ri-charging-pile-line:before { content: "\eb4b"; } +.ri-chat-1-fill:before { content: "\eb4c"; } +.ri-chat-1-line:before { content: "\eb4d"; } +.ri-chat-2-fill:before { content: "\eb4e"; } +.ri-chat-2-line:before { content: "\eb4f"; } +.ri-chat-3-fill:before { content: "\eb50"; } +.ri-chat-3-line:before { content: "\eb51"; } +.ri-chat-4-fill:before { content: "\eb52"; } +.ri-chat-4-line:before { content: "\eb53"; } +.ri-chat-check-fill:before { content: "\eb54"; } +.ri-chat-check-line:before { content: "\eb55"; } +.ri-chat-delete-fill:before { content: "\eb56"; } +.ri-chat-delete-line:before { content: "\eb57"; } +.ri-chat-download-fill:before { content: "\eb58"; } +.ri-chat-download-line:before { content: "\eb59"; } +.ri-chat-follow-up-fill:before { content: "\eb5a"; } +.ri-chat-follow-up-line:before { content: "\eb5b"; } +.ri-chat-forward-fill:before { content: "\eb5c"; } +.ri-chat-forward-line:before { content: "\eb5d"; } +.ri-chat-heart-fill:before { content: "\eb5e"; } +.ri-chat-heart-line:before { content: "\eb5f"; } +.ri-chat-history-fill:before { content: "\eb60"; } +.ri-chat-history-line:before { content: "\eb61"; } +.ri-chat-new-fill:before { content: "\eb62"; } +.ri-chat-new-line:before { content: "\eb63"; } +.ri-chat-off-fill:before { content: "\eb64"; } +.ri-chat-off-line:before { content: "\eb65"; } +.ri-chat-poll-fill:before { content: "\eb66"; } +.ri-chat-poll-line:before { content: "\eb67"; } +.ri-chat-private-fill:before { content: "\eb68"; } +.ri-chat-private-line:before { content: "\eb69"; } +.ri-chat-quote-fill:before { content: "\eb6a"; } +.ri-chat-quote-line:before { content: "\eb6b"; } +.ri-chat-settings-fill:before { content: "\eb6c"; } +.ri-chat-settings-line:before { content: "\eb6d"; } +.ri-chat-smile-2-fill:before { content: "\eb6e"; } +.ri-chat-smile-2-line:before { content: "\eb6f"; } +.ri-chat-smile-3-fill:before { content: "\eb70"; } +.ri-chat-smile-3-line:before { content: "\eb71"; } +.ri-chat-smile-fill:before { content: "\eb72"; } +.ri-chat-smile-line:before { content: "\eb73"; } +.ri-chat-upload-fill:before { content: "\eb74"; } +.ri-chat-upload-line:before { content: "\eb75"; } +.ri-chat-voice-fill:before { content: "\eb76"; } +.ri-chat-voice-line:before { content: "\eb77"; } +.ri-check-double-fill:before { content: "\eb78"; } +.ri-check-double-line:before { content: "\eb79"; } +.ri-check-fill:before { content: "\eb7a"; } +.ri-check-line:before { content: "\eb7b"; } +.ri-checkbox-blank-circle-fill:before { content: "\eb7c"; } +.ri-checkbox-blank-circle-line:before { content: "\eb7d"; } +.ri-checkbox-blank-fill:before { content: "\eb7e"; } +.ri-checkbox-blank-line:before { content: "\eb7f"; } +.ri-checkbox-circle-fill:before { content: "\eb80"; } +.ri-checkbox-circle-line:before { content: "\eb81"; } +.ri-checkbox-fill:before { content: "\eb82"; } +.ri-checkbox-indeterminate-fill:before { content: "\eb83"; } +.ri-checkbox-indeterminate-line:before { content: "\eb84"; } +.ri-checkbox-line:before { content: "\eb85"; } +.ri-checkbox-multiple-blank-fill:before { content: "\eb86"; } +.ri-checkbox-multiple-blank-line:before { content: "\eb87"; } +.ri-checkbox-multiple-fill:before { content: "\eb88"; } +.ri-checkbox-multiple-line:before { content: "\eb89"; } +.ri-china-railway-fill:before { content: "\eb8a"; } +.ri-china-railway-line:before { content: "\eb8b"; } +.ri-chrome-fill:before { content: "\eb8c"; } +.ri-chrome-line:before { content: "\eb8d"; } +.ri-clapperboard-fill:before { content: "\eb8e"; } +.ri-clapperboard-line:before { content: "\eb8f"; } +.ri-clipboard-fill:before { content: "\eb90"; } +.ri-clipboard-line:before { content: "\eb91"; } +.ri-clockwise-2-fill:before { content: "\eb92"; } +.ri-clockwise-2-line:before { content: "\eb93"; } +.ri-clockwise-fill:before { content: "\eb94"; } +.ri-clockwise-line:before { content: "\eb95"; } +.ri-close-circle-fill:before { content: "\eb96"; } +.ri-close-circle-line:before { content: "\eb97"; } +.ri-close-fill:before { content: "\eb98"; } +.ri-close-line:before { content: "\eb99"; } +.ri-closed-captioning-fill:before { content: "\eb9a"; } +.ri-closed-captioning-line:before { content: "\eb9b"; } +.ri-cloud-fill:before { content: "\eb9c"; } +.ri-cloud-line:before { content: "\eb9d"; } +.ri-cloud-off-fill:before { content: "\eb9e"; } +.ri-cloud-off-line:before { content: "\eb9f"; } +.ri-cloud-windy-fill:before { content: "\eba0"; } +.ri-cloud-windy-line:before { content: "\eba1"; } +.ri-cloudy-2-fill:before { content: "\eba2"; } +.ri-cloudy-2-line:before { content: "\eba3"; } +.ri-cloudy-fill:before { content: "\eba4"; } +.ri-cloudy-line:before { content: "\eba5"; } +.ri-code-box-fill:before { content: "\eba6"; } +.ri-code-box-line:before { content: "\eba7"; } +.ri-code-fill:before { content: "\eba8"; } +.ri-code-line:before { content: "\eba9"; } +.ri-code-s-fill:before { content: "\ebaa"; } +.ri-code-s-line:before { content: "\ebab"; } +.ri-code-s-slash-fill:before { content: "\ebac"; } +.ri-code-s-slash-line:before { content: "\ebad"; } +.ri-code-view:before { content: "\ebae"; } +.ri-codepen-fill:before { content: "\ebaf"; } +.ri-codepen-line:before { content: "\ebb0"; } +.ri-coin-fill:before { content: "\ebb1"; } +.ri-coin-line:before { content: "\ebb2"; } +.ri-coins-fill:before { content: "\ebb3"; } +.ri-coins-line:before { content: "\ebb4"; } +.ri-collage-fill:before { content: "\ebb5"; } +.ri-collage-line:before { content: "\ebb6"; } +.ri-command-fill:before { content: "\ebb7"; } +.ri-command-line:before { content: "\ebb8"; } +.ri-community-fill:before { content: "\ebb9"; } +.ri-community-line:before { content: "\ebba"; } +.ri-compass-2-fill:before { content: "\ebbb"; } +.ri-compass-2-line:before { content: "\ebbc"; } +.ri-compass-3-fill:before { content: "\ebbd"; } +.ri-compass-3-line:before { content: "\ebbe"; } +.ri-compass-4-fill:before { content: "\ebbf"; } +.ri-compass-4-line:before { content: "\ebc0"; } +.ri-compass-discover-fill:before { content: "\ebc1"; } +.ri-compass-discover-line:before { content: "\ebc2"; } +.ri-compass-fill:before { content: "\ebc3"; } +.ri-compass-line:before { content: "\ebc4"; } +.ri-compasses-2-fill:before { content: "\ebc5"; } +.ri-compasses-2-line:before { content: "\ebc6"; } +.ri-compasses-fill:before { content: "\ebc7"; } +.ri-compasses-line:before { content: "\ebc8"; } +.ri-computer-fill:before { content: "\ebc9"; } +.ri-computer-line:before { content: "\ebca"; } +.ri-contacts-book-2-fill:before { content: "\ebcb"; } +.ri-contacts-book-2-line:before { content: "\ebcc"; } +.ri-contacts-book-fill:before { content: "\ebcd"; } +.ri-contacts-book-line:before { content: "\ebce"; } +.ri-contacts-book-upload-fill:before { content: "\ebcf"; } +.ri-contacts-book-upload-line:before { content: "\ebd0"; } +.ri-contacts-fill:before { content: "\ebd1"; } +.ri-contacts-line:before { content: "\ebd2"; } +.ri-contrast-2-fill:before { content: "\ebd3"; } +.ri-contrast-2-line:before { content: "\ebd4"; } +.ri-contrast-drop-2-fill:before { content: "\ebd5"; } +.ri-contrast-drop-2-line:before { content: "\ebd6"; } +.ri-contrast-drop-fill:before { content: "\ebd7"; } +.ri-contrast-drop-line:before { content: "\ebd8"; } +.ri-contrast-fill:before { content: "\ebd9"; } +.ri-contrast-line:before { content: "\ebda"; } +.ri-copper-coin-fill:before { content: "\ebdb"; } +.ri-copper-coin-line:before { content: "\ebdc"; } +.ri-copper-diamond-fill:before { content: "\ebdd"; } +.ri-copper-diamond-line:before { content: "\ebde"; } +.ri-copyleft-fill:before { content: "\ebdf"; } +.ri-copyleft-line:before { content: "\ebe0"; } +.ri-copyright-fill:before { content: "\ebe1"; } +.ri-copyright-line:before { content: "\ebe2"; } +.ri-coreos-fill:before { content: "\ebe3"; } +.ri-coreos-line:before { content: "\ebe4"; } +.ri-coupon-2-fill:before { content: "\ebe5"; } +.ri-coupon-2-line:before { content: "\ebe6"; } +.ri-coupon-3-fill:before { content: "\ebe7"; } +.ri-coupon-3-line:before { content: "\ebe8"; } +.ri-coupon-4-fill:before { content: "\ebe9"; } +.ri-coupon-4-line:before { content: "\ebea"; } +.ri-coupon-5-fill:before { content: "\ebeb"; } +.ri-coupon-5-line:before { content: "\ebec"; } +.ri-coupon-fill:before { content: "\ebed"; } +.ri-coupon-line:before { content: "\ebee"; } +.ri-cpu-fill:before { content: "\ebef"; } +.ri-cpu-line:before { content: "\ebf0"; } +.ri-creative-commons-by-fill:before { content: "\ebf1"; } +.ri-creative-commons-by-line:before { content: "\ebf2"; } +.ri-creative-commons-fill:before { content: "\ebf3"; } +.ri-creative-commons-line:before { content: "\ebf4"; } +.ri-creative-commons-nc-fill:before { content: "\ebf5"; } +.ri-creative-commons-nc-line:before { content: "\ebf6"; } +.ri-creative-commons-nd-fill:before { content: "\ebf7"; } +.ri-creative-commons-nd-line:before { content: "\ebf8"; } +.ri-creative-commons-sa-fill:before { content: "\ebf9"; } +.ri-creative-commons-sa-line:before { content: "\ebfa"; } +.ri-creative-commons-zero-fill:before { content: "\ebfb"; } +.ri-creative-commons-zero-line:before { content: "\ebfc"; } +.ri-criminal-fill:before { content: "\ebfd"; } +.ri-criminal-line:before { content: "\ebfe"; } +.ri-crop-2-fill:before { content: "\ebff"; } +.ri-crop-2-line:before { content: "\ec00"; } +.ri-crop-fill:before { content: "\ec01"; } +.ri-crop-line:before { content: "\ec02"; } +.ri-css3-fill:before { content: "\ec03"; } +.ri-css3-line:before { content: "\ec04"; } +.ri-cup-fill:before { content: "\ec05"; } +.ri-cup-line:before { content: "\ec06"; } +.ri-currency-fill:before { content: "\ec07"; } +.ri-currency-line:before { content: "\ec08"; } +.ri-cursor-fill:before { content: "\ec09"; } +.ri-cursor-line:before { content: "\ec0a"; } +.ri-customer-service-2-fill:before { content: "\ec0b"; } +.ri-customer-service-2-line:before { content: "\ec0c"; } +.ri-customer-service-fill:before { content: "\ec0d"; } +.ri-customer-service-line:before { content: "\ec0e"; } +.ri-dashboard-2-fill:before { content: "\ec0f"; } +.ri-dashboard-2-line:before { content: "\ec10"; } +.ri-dashboard-3-fill:before { content: "\ec11"; } +.ri-dashboard-3-line:before { content: "\ec12"; } +.ri-dashboard-fill:before { content: "\ec13"; } +.ri-dashboard-line:before { content: "\ec14"; } +.ri-database-2-fill:before { content: "\ec15"; } +.ri-database-2-line:before { content: "\ec16"; } +.ri-database-fill:before { content: "\ec17"; } +.ri-database-line:before { content: "\ec18"; } +.ri-delete-back-2-fill:before { content: "\ec19"; } +.ri-delete-back-2-line:before { content: "\ec1a"; } +.ri-delete-back-fill:before { content: "\ec1b"; } +.ri-delete-back-line:before { content: "\ec1c"; } +.ri-delete-bin-2-fill:before { content: "\ec1d"; } +.ri-delete-bin-2-line:before { content: "\ec1e"; } +.ri-delete-bin-3-fill:before { content: "\ec1f"; } +.ri-delete-bin-3-line:before { content: "\ec20"; } +.ri-delete-bin-4-fill:before { content: "\ec21"; } +.ri-delete-bin-4-line:before { content: "\ec22"; } +.ri-delete-bin-5-fill:before { content: "\ec23"; } +.ri-delete-bin-5-line:before { content: "\ec24"; } +.ri-delete-bin-6-fill:before { content: "\ec25"; } +.ri-delete-bin-6-line:before { content: "\ec26"; } +.ri-delete-bin-7-fill:before { content: "\ec27"; } +.ri-delete-bin-7-line:before { content: "\ec28"; } +.ri-delete-bin-fill:before { content: "\ec29"; } +.ri-delete-bin-line:before { content: "\ec2a"; } +.ri-delete-column:before { content: "\ec2b"; } +.ri-delete-row:before { content: "\ec2c"; } +.ri-device-fill:before { content: "\ec2d"; } +.ri-device-line:before { content: "\ec2e"; } +.ri-device-recover-fill:before { content: "\ec2f"; } +.ri-device-recover-line:before { content: "\ec30"; } +.ri-dingding-fill:before { content: "\ec31"; } +.ri-dingding-line:before { content: "\ec32"; } +.ri-direction-fill:before { content: "\ec33"; } +.ri-direction-line:before { content: "\ec34"; } +.ri-disc-fill:before { content: "\ec35"; } +.ri-disc-line:before { content: "\ec36"; } +.ri-discord-fill:before { content: "\ec37"; } +.ri-discord-line:before { content: "\ec38"; } +.ri-discuss-fill:before { content: "\ec39"; } +.ri-discuss-line:before { content: "\ec3a"; } +.ri-dislike-fill:before { content: "\ec3b"; } +.ri-dislike-line:before { content: "\ec3c"; } +.ri-disqus-fill:before { content: "\ec3d"; } +.ri-disqus-line:before { content: "\ec3e"; } +.ri-divide-fill:before { content: "\ec3f"; } +.ri-divide-line:before { content: "\ec40"; } +.ri-donut-chart-fill:before { content: "\ec41"; } +.ri-donut-chart-line:before { content: "\ec42"; } +.ri-door-closed-fill:before { content: "\ec43"; } +.ri-door-closed-line:before { content: "\ec44"; } +.ri-door-fill:before { content: "\ec45"; } +.ri-door-line:before { content: "\ec46"; } +.ri-door-lock-box-fill:before { content: "\ec47"; } +.ri-door-lock-box-line:before { content: "\ec48"; } +.ri-door-lock-fill:before { content: "\ec49"; } +.ri-door-lock-line:before { content: "\ec4a"; } +.ri-door-open-fill:before { content: "\ec4b"; } +.ri-door-open-line:before { content: "\ec4c"; } +.ri-dossier-fill:before { content: "\ec4d"; } +.ri-dossier-line:before { content: "\ec4e"; } +.ri-douban-fill:before { content: "\ec4f"; } +.ri-douban-line:before { content: "\ec50"; } +.ri-double-quotes-l:before { content: "\ec51"; } +.ri-double-quotes-r:before { content: "\ec52"; } +.ri-download-2-fill:before { content: "\ec53"; } +.ri-download-2-line:before { content: "\ec54"; } +.ri-download-cloud-2-fill:before { content: "\ec55"; } +.ri-download-cloud-2-line:before { content: "\ec56"; } +.ri-download-cloud-fill:before { content: "\ec57"; } +.ri-download-cloud-line:before { content: "\ec58"; } +.ri-download-fill:before { content: "\ec59"; } +.ri-download-line:before { content: "\ec5a"; } +.ri-draft-fill:before { content: "\ec5b"; } +.ri-draft-line:before { content: "\ec5c"; } +.ri-drag-drop-fill:before { content: "\ec5d"; } +.ri-drag-drop-line:before { content: "\ec5e"; } +.ri-drag-move-2-fill:before { content: "\ec5f"; } +.ri-drag-move-2-line:before { content: "\ec60"; } +.ri-drag-move-fill:before { content: "\ec61"; } +.ri-drag-move-line:before { content: "\ec62"; } +.ri-dribbble-fill:before { content: "\ec63"; } +.ri-dribbble-line:before { content: "\ec64"; } +.ri-drive-fill:before { content: "\ec65"; } +.ri-drive-line:before { content: "\ec66"; } +.ri-drizzle-fill:before { content: "\ec67"; } +.ri-drizzle-line:before { content: "\ec68"; } +.ri-drop-fill:before { content: "\ec69"; } +.ri-drop-line:before { content: "\ec6a"; } +.ri-dropbox-fill:before { content: "\ec6b"; } +.ri-dropbox-line:before { content: "\ec6c"; } +.ri-dual-sim-1-fill:before { content: "\ec6d"; } +.ri-dual-sim-1-line:before { content: "\ec6e"; } +.ri-dual-sim-2-fill:before { content: "\ec6f"; } +.ri-dual-sim-2-line:before { content: "\ec70"; } +.ri-dv-fill:before { content: "\ec71"; } +.ri-dv-line:before { content: "\ec72"; } +.ri-dvd-fill:before { content: "\ec73"; } +.ri-dvd-line:before { content: "\ec74"; } +.ri-e-bike-2-fill:before { content: "\ec75"; } +.ri-e-bike-2-line:before { content: "\ec76"; } +.ri-e-bike-fill:before { content: "\ec77"; } +.ri-e-bike-line:before { content: "\ec78"; } +.ri-earth-fill:before { content: "\ec79"; } +.ri-earth-line:before { content: "\ec7a"; } +.ri-earthquake-fill:before { content: "\ec7b"; } +.ri-earthquake-line:before { content: "\ec7c"; } +.ri-edge-fill:before { content: "\ec7d"; } +.ri-edge-line:before { content: "\ec7e"; } +.ri-edit-2-fill:before { content: "\ec7f"; } +.ri-edit-2-line:before { content: "\ec80"; } +.ri-edit-box-fill:before { content: "\ec81"; } +.ri-edit-box-line:before { content: "\ec82"; } +.ri-edit-circle-fill:before { content: "\ec83"; } +.ri-edit-circle-line:before { content: "\ec84"; } +.ri-edit-fill:before { content: "\ec85"; } +.ri-edit-line:before { content: "\ec86"; } +.ri-eject-fill:before { content: "\ec87"; } +.ri-eject-line:before { content: "\ec88"; } +.ri-emotion-2-fill:before { content: "\ec89"; } +.ri-emotion-2-line:before { content: "\ec8a"; } +.ri-emotion-fill:before { content: "\ec8b"; } +.ri-emotion-happy-fill:before { content: "\ec8c"; } +.ri-emotion-happy-line:before { content: "\ec8d"; } +.ri-emotion-laugh-fill:before { content: "\ec8e"; } +.ri-emotion-laugh-line:before { content: "\ec8f"; } +.ri-emotion-line:before { content: "\ec90"; } +.ri-emotion-normal-fill:before { content: "\ec91"; } +.ri-emotion-normal-line:before { content: "\ec92"; } +.ri-emotion-sad-fill:before { content: "\ec93"; } +.ri-emotion-sad-line:before { content: "\ec94"; } +.ri-emotion-unhappy-fill:before { content: "\ec95"; } +.ri-emotion-unhappy-line:before { content: "\ec96"; } +.ri-empathize-fill:before { content: "\ec97"; } +.ri-empathize-line:before { content: "\ec98"; } +.ri-emphasis-cn:before { content: "\ec99"; } +.ri-emphasis:before { content: "\ec9a"; } +.ri-english-input:before { content: "\ec9b"; } +.ri-equalizer-fill:before { content: "\ec9c"; } +.ri-equalizer-line:before { content: "\ec9d"; } +.ri-eraser-fill:before { content: "\ec9e"; } +.ri-eraser-line:before { content: "\ec9f"; } +.ri-error-warning-fill:before { content: "\eca0"; } +.ri-error-warning-line:before { content: "\eca1"; } +.ri-evernote-fill:before { content: "\eca2"; } +.ri-evernote-line:before { content: "\eca3"; } +.ri-exchange-box-fill:before { content: "\eca4"; } +.ri-exchange-box-line:before { content: "\eca5"; } +.ri-exchange-cny-fill:before { content: "\eca6"; } +.ri-exchange-cny-line:before { content: "\eca7"; } +.ri-exchange-dollar-fill:before { content: "\eca8"; } +.ri-exchange-dollar-line:before { content: "\eca9"; } +.ri-exchange-fill:before { content: "\ecaa"; } +.ri-exchange-funds-fill:before { content: "\ecab"; } +.ri-exchange-funds-line:before { content: "\ecac"; } +.ri-exchange-line:before { content: "\ecad"; } +.ri-external-link-fill:before { content: "\ecae"; } +.ri-external-link-line:before { content: "\ecaf"; } +.ri-eye-2-fill:before { content: "\ecb0"; } +.ri-eye-2-line:before { content: "\ecb1"; } +.ri-eye-close-fill:before { content: "\ecb2"; } +.ri-eye-close-line:before { content: "\ecb3"; } +.ri-eye-fill:before { content: "\ecb4"; } +.ri-eye-line:before { content: "\ecb5"; } +.ri-eye-off-fill:before { content: "\ecb6"; } +.ri-eye-off-line:before { content: "\ecb7"; } +.ri-facebook-box-fill:before { content: "\ecb8"; } +.ri-facebook-box-line:before { content: "\ecb9"; } +.ri-facebook-circle-fill:before { content: "\ecba"; } +.ri-facebook-circle-line:before { content: "\ecbb"; } +.ri-facebook-fill:before { content: "\ecbc"; } +.ri-facebook-line:before { content: "\ecbd"; } +.ri-fahrenheit-fill:before { content: "\ecbe"; } +.ri-fahrenheit-line:before { content: "\ecbf"; } +.ri-feedback-fill:before { content: "\ecc0"; } +.ri-feedback-line:before { content: "\ecc1"; } +.ri-file-2-fill:before { content: "\ecc2"; } +.ri-file-2-line:before { content: "\ecc3"; } +.ri-file-3-fill:before { content: "\ecc4"; } +.ri-file-3-line:before { content: "\ecc5"; } +.ri-file-4-fill:before { content: "\ecc6"; } +.ri-file-4-line:before { content: "\ecc7"; } +.ri-file-add-fill:before { content: "\ecc8"; } +.ri-file-add-line:before { content: "\ecc9"; } +.ri-file-chart-2-fill:before { content: "\ecca"; } +.ri-file-chart-2-line:before { content: "\eccb"; } +.ri-file-chart-fill:before { content: "\eccc"; } +.ri-file-chart-line:before { content: "\eccd"; } +.ri-file-cloud-fill:before { content: "\ecce"; } +.ri-file-cloud-line:before { content: "\eccf"; } +.ri-file-code-fill:before { content: "\ecd0"; } +.ri-file-code-line:before { content: "\ecd1"; } +.ri-file-copy-2-fill:before { content: "\ecd2"; } +.ri-file-copy-2-line:before { content: "\ecd3"; } +.ri-file-copy-fill:before { content: "\ecd4"; } +.ri-file-copy-line:before { content: "\ecd5"; } +.ri-file-damage-fill:before { content: "\ecd6"; } +.ri-file-damage-line:before { content: "\ecd7"; } +.ri-file-download-fill:before { content: "\ecd8"; } +.ri-file-download-line:before { content: "\ecd9"; } +.ri-file-edit-fill:before { content: "\ecda"; } +.ri-file-edit-line:before { content: "\ecdb"; } +.ri-file-excel-2-fill:before { content: "\ecdc"; } +.ri-file-excel-2-line:before { content: "\ecdd"; } +.ri-file-excel-fill:before { content: "\ecde"; } +.ri-file-excel-line:before { content: "\ecdf"; } +.ri-file-fill:before { content: "\ece0"; } +.ri-file-forbid-fill:before { content: "\ece1"; } +.ri-file-forbid-line:before { content: "\ece2"; } +.ri-file-gif-fill:before { content: "\ece3"; } +.ri-file-gif-line:before { content: "\ece4"; } +.ri-file-history-fill:before { content: "\ece5"; } +.ri-file-history-line:before { content: "\ece6"; } +.ri-file-hwp-fill:before { content: "\ece7"; } +.ri-file-hwp-line:before { content: "\ece8"; } +.ri-file-info-fill:before { content: "\ece9"; } +.ri-file-info-line:before { content: "\ecea"; } +.ri-file-line:before { content: "\eceb"; } +.ri-file-list-2-fill:before { content: "\ecec"; } +.ri-file-list-2-line:before { content: "\eced"; } +.ri-file-list-3-fill:before { content: "\ecee"; } +.ri-file-list-3-line:before { content: "\ecef"; } +.ri-file-list-fill:before { content: "\ecf0"; } +.ri-file-list-line:before { content: "\ecf1"; } +.ri-file-lock-fill:before { content: "\ecf2"; } +.ri-file-lock-line:before { content: "\ecf3"; } +.ri-file-marked-fill:before { content: "\ecf4"; } +.ri-file-marked-line:before { content: "\ecf5"; } +.ri-file-music-fill:before { content: "\ecf6"; } +.ri-file-music-line:before { content: "\ecf7"; } +.ri-file-paper-2-fill:before { content: "\ecf8"; } +.ri-file-paper-2-line:before { content: "\ecf9"; } +.ri-file-paper-fill:before { content: "\ecfa"; } +.ri-file-paper-line:before { content: "\ecfb"; } +.ri-file-pdf-fill:before { content: "\ecfc"; } +.ri-file-pdf-line:before { content: "\ecfd"; } +.ri-file-ppt-2-fill:before { content: "\ecfe"; } +.ri-file-ppt-2-line:before { content: "\ecff"; } +.ri-file-ppt-fill:before { content: "\ed00"; } +.ri-file-ppt-line:before { content: "\ed01"; } +.ri-file-reduce-fill:before { content: "\ed02"; } +.ri-file-reduce-line:before { content: "\ed03"; } +.ri-file-search-fill:before { content: "\ed04"; } +.ri-file-search-line:before { content: "\ed05"; } +.ri-file-settings-fill:before { content: "\ed06"; } +.ri-file-settings-line:before { content: "\ed07"; } +.ri-file-shield-2-fill:before { content: "\ed08"; } +.ri-file-shield-2-line:before { content: "\ed09"; } +.ri-file-shield-fill:before { content: "\ed0a"; } +.ri-file-shield-line:before { content: "\ed0b"; } +.ri-file-shred-fill:before { content: "\ed0c"; } +.ri-file-shred-line:before { content: "\ed0d"; } +.ri-file-text-fill:before { content: "\ed0e"; } +.ri-file-text-line:before { content: "\ed0f"; } +.ri-file-transfer-fill:before { content: "\ed10"; } +.ri-file-transfer-line:before { content: "\ed11"; } +.ri-file-unknow-fill:before { content: "\ed12"; } +.ri-file-unknow-line:before { content: "\ed13"; } +.ri-file-upload-fill:before { content: "\ed14"; } +.ri-file-upload-line:before { content: "\ed15"; } +.ri-file-user-fill:before { content: "\ed16"; } +.ri-file-user-line:before { content: "\ed17"; } +.ri-file-warning-fill:before { content: "\ed18"; } +.ri-file-warning-line:before { content: "\ed19"; } +.ri-file-word-2-fill:before { content: "\ed1a"; } +.ri-file-word-2-line:before { content: "\ed1b"; } +.ri-file-word-fill:before { content: "\ed1c"; } +.ri-file-word-line:before { content: "\ed1d"; } +.ri-file-zip-fill:before { content: "\ed1e"; } +.ri-file-zip-line:before { content: "\ed1f"; } +.ri-film-fill:before { content: "\ed20"; } +.ri-film-line:before { content: "\ed21"; } +.ri-filter-2-fill:before { content: "\ed22"; } +.ri-filter-2-line:before { content: "\ed23"; } +.ri-filter-3-fill:before { content: "\ed24"; } +.ri-filter-3-line:before { content: "\ed25"; } +.ri-filter-fill:before { content: "\ed26"; } +.ri-filter-line:before { content: "\ed27"; } +.ri-filter-off-fill:before { content: "\ed28"; } +.ri-filter-off-line:before { content: "\ed29"; } +.ri-find-replace-fill:before { content: "\ed2a"; } +.ri-find-replace-line:before { content: "\ed2b"; } +.ri-finder-fill:before { content: "\ed2c"; } +.ri-finder-line:before { content: "\ed2d"; } +.ri-fingerprint-2-fill:before { content: "\ed2e"; } +.ri-fingerprint-2-line:before { content: "\ed2f"; } +.ri-fingerprint-fill:before { content: "\ed30"; } +.ri-fingerprint-line:before { content: "\ed31"; } +.ri-fire-fill:before { content: "\ed32"; } +.ri-fire-line:before { content: "\ed33"; } +.ri-firefox-fill:before { content: "\ed34"; } +.ri-firefox-line:before { content: "\ed35"; } +.ri-first-aid-kit-fill:before { content: "\ed36"; } +.ri-first-aid-kit-line:before { content: "\ed37"; } +.ri-flag-2-fill:before { content: "\ed38"; } +.ri-flag-2-line:before { content: "\ed39"; } +.ri-flag-fill:before { content: "\ed3a"; } +.ri-flag-line:before { content: "\ed3b"; } +.ri-flashlight-fill:before { content: "\ed3c"; } +.ri-flashlight-line:before { content: "\ed3d"; } +.ri-flask-fill:before { content: "\ed3e"; } +.ri-flask-line:before { content: "\ed3f"; } +.ri-flight-land-fill:before { content: "\ed40"; } +.ri-flight-land-line:before { content: "\ed41"; } +.ri-flight-takeoff-fill:before { content: "\ed42"; } +.ri-flight-takeoff-line:before { content: "\ed43"; } +.ri-flood-fill:before { content: "\ed44"; } +.ri-flood-line:before { content: "\ed45"; } +.ri-flow-chart:before { content: "\ed46"; } +.ri-flutter-fill:before { content: "\ed47"; } +.ri-flutter-line:before { content: "\ed48"; } +.ri-focus-2-fill:before { content: "\ed49"; } +.ri-focus-2-line:before { content: "\ed4a"; } +.ri-focus-3-fill:before { content: "\ed4b"; } +.ri-focus-3-line:before { content: "\ed4c"; } +.ri-focus-fill:before { content: "\ed4d"; } +.ri-focus-line:before { content: "\ed4e"; } +.ri-foggy-fill:before { content: "\ed4f"; } +.ri-foggy-line:before { content: "\ed50"; } +.ri-folder-2-fill:before { content: "\ed51"; } +.ri-folder-2-line:before { content: "\ed52"; } +.ri-folder-3-fill:before { content: "\ed53"; } +.ri-folder-3-line:before { content: "\ed54"; } +.ri-folder-4-fill:before { content: "\ed55"; } +.ri-folder-4-line:before { content: "\ed56"; } +.ri-folder-5-fill:before { content: "\ed57"; } +.ri-folder-5-line:before { content: "\ed58"; } +.ri-folder-add-fill:before { content: "\ed59"; } +.ri-folder-add-line:before { content: "\ed5a"; } +.ri-folder-chart-2-fill:before { content: "\ed5b"; } +.ri-folder-chart-2-line:before { content: "\ed5c"; } +.ri-folder-chart-fill:before { content: "\ed5d"; } +.ri-folder-chart-line:before { content: "\ed5e"; } +.ri-folder-download-fill:before { content: "\ed5f"; } +.ri-folder-download-line:before { content: "\ed60"; } +.ri-folder-fill:before { content: "\ed61"; } +.ri-folder-forbid-fill:before { content: "\ed62"; } +.ri-folder-forbid-line:before { content: "\ed63"; } +.ri-folder-history-fill:before { content: "\ed64"; } +.ri-folder-history-line:before { content: "\ed65"; } +.ri-folder-info-fill:before { content: "\ed66"; } +.ri-folder-info-line:before { content: "\ed67"; } +.ri-folder-keyhole-fill:before { content: "\ed68"; } +.ri-folder-keyhole-line:before { content: "\ed69"; } +.ri-folder-line:before { content: "\ed6a"; } +.ri-folder-lock-fill:before { content: "\ed6b"; } +.ri-folder-lock-line:before { content: "\ed6c"; } +.ri-folder-music-fill:before { content: "\ed6d"; } +.ri-folder-music-line:before { content: "\ed6e"; } +.ri-folder-open-fill:before { content: "\ed6f"; } +.ri-folder-open-line:before { content: "\ed70"; } +.ri-folder-received-fill:before { content: "\ed71"; } +.ri-folder-received-line:before { content: "\ed72"; } +.ri-folder-reduce-fill:before { content: "\ed73"; } +.ri-folder-reduce-line:before { content: "\ed74"; } +.ri-folder-settings-fill:before { content: "\ed75"; } +.ri-folder-settings-line:before { content: "\ed76"; } +.ri-folder-shared-fill:before { content: "\ed77"; } +.ri-folder-shared-line:before { content: "\ed78"; } +.ri-folder-shield-2-fill:before { content: "\ed79"; } +.ri-folder-shield-2-line:before { content: "\ed7a"; } +.ri-folder-shield-fill:before { content: "\ed7b"; } +.ri-folder-shield-line:before { content: "\ed7c"; } +.ri-folder-transfer-fill:before { content: "\ed7d"; } +.ri-folder-transfer-line:before { content: "\ed7e"; } +.ri-folder-unknow-fill:before { content: "\ed7f"; } +.ri-folder-unknow-line:before { content: "\ed80"; } +.ri-folder-upload-fill:before { content: "\ed81"; } +.ri-folder-upload-line:before { content: "\ed82"; } +.ri-folder-user-fill:before { content: "\ed83"; } +.ri-folder-user-line:before { content: "\ed84"; } +.ri-folder-warning-fill:before { content: "\ed85"; } +.ri-folder-warning-line:before { content: "\ed86"; } +.ri-folder-zip-fill:before { content: "\ed87"; } +.ri-folder-zip-line:before { content: "\ed88"; } +.ri-folders-fill:before { content: "\ed89"; } +.ri-folders-line:before { content: "\ed8a"; } +.ri-font-color:before { content: "\ed8b"; } +.ri-font-size-2:before { content: "\ed8c"; } +.ri-font-size:before { content: "\ed8d"; } +.ri-football-fill:before { content: "\ed8e"; } +.ri-football-line:before { content: "\ed8f"; } +.ri-footprint-fill:before { content: "\ed90"; } +.ri-footprint-line:before { content: "\ed91"; } +.ri-forbid-2-fill:before { content: "\ed92"; } +.ri-forbid-2-line:before { content: "\ed93"; } +.ri-forbid-fill:before { content: "\ed94"; } +.ri-forbid-line:before { content: "\ed95"; } +.ri-format-clear:before { content: "\ed96"; } +.ri-fridge-fill:before { content: "\ed97"; } +.ri-fridge-line:before { content: "\ed98"; } +.ri-fullscreen-exit-fill:before { content: "\ed99"; } +.ri-fullscreen-exit-line:before { content: "\ed9a"; } +.ri-fullscreen-fill:before { content: "\ed9b"; } +.ri-fullscreen-line:before { content: "\ed9c"; } +.ri-function-fill:before { content: "\ed9d"; } +.ri-function-line:before { content: "\ed9e"; } +.ri-functions:before { content: "\ed9f"; } +.ri-funds-box-fill:before { content: "\eda0"; } +.ri-funds-box-line:before { content: "\eda1"; } +.ri-funds-fill:before { content: "\eda2"; } +.ri-funds-line:before { content: "\eda3"; } +.ri-gallery-fill:before { content: "\eda4"; } +.ri-gallery-line:before { content: "\eda5"; } +.ri-gallery-upload-fill:before { content: "\eda6"; } +.ri-gallery-upload-line:before { content: "\eda7"; } +.ri-game-fill:before { content: "\eda8"; } +.ri-game-line:before { content: "\eda9"; } +.ri-gamepad-fill:before { content: "\edaa"; } +.ri-gamepad-line:before { content: "\edab"; } +.ri-gas-station-fill:before { content: "\edac"; } +.ri-gas-station-line:before { content: "\edad"; } +.ri-gatsby-fill:before { content: "\edae"; } +.ri-gatsby-line:before { content: "\edaf"; } +.ri-genderless-fill:before { content: "\edb0"; } +.ri-genderless-line:before { content: "\edb1"; } +.ri-ghost-2-fill:before { content: "\edb2"; } +.ri-ghost-2-line:before { content: "\edb3"; } +.ri-ghost-fill:before { content: "\edb4"; } +.ri-ghost-line:before { content: "\edb5"; } +.ri-ghost-smile-fill:before { content: "\edb6"; } +.ri-ghost-smile-line:before { content: "\edb7"; } +.ri-gift-2-fill:before { content: "\edb8"; } +.ri-gift-2-line:before { content: "\edb9"; } +.ri-gift-fill:before { content: "\edba"; } +.ri-gift-line:before { content: "\edbb"; } +.ri-git-branch-fill:before { content: "\edbc"; } +.ri-git-branch-line:before { content: "\edbd"; } +.ri-git-commit-fill:before { content: "\edbe"; } +.ri-git-commit-line:before { content: "\edbf"; } +.ri-git-merge-fill:before { content: "\edc0"; } +.ri-git-merge-line:before { content: "\edc1"; } +.ri-git-pull-request-fill:before { content: "\edc2"; } +.ri-git-pull-request-line:before { content: "\edc3"; } +.ri-git-repository-commits-fill:before { content: "\edc4"; } +.ri-git-repository-commits-line:before { content: "\edc5"; } +.ri-git-repository-fill:before { content: "\edc6"; } +.ri-git-repository-line:before { content: "\edc7"; } +.ri-git-repository-private-fill:before { content: "\edc8"; } +.ri-git-repository-private-line:before { content: "\edc9"; } +.ri-github-fill:before { content: "\edca"; } +.ri-github-line:before { content: "\edcb"; } +.ri-gitlab-fill:before { content: "\edcc"; } +.ri-gitlab-line:before { content: "\edcd"; } +.ri-global-fill:before { content: "\edce"; } +.ri-global-line:before { content: "\edcf"; } +.ri-globe-fill:before { content: "\edd0"; } +.ri-globe-line:before { content: "\edd1"; } +.ri-goblet-fill:before { content: "\edd2"; } +.ri-goblet-line:before { content: "\edd3"; } +.ri-google-fill:before { content: "\edd4"; } +.ri-google-line:before { content: "\edd5"; } +.ri-google-play-fill:before { content: "\edd6"; } +.ri-google-play-line:before { content: "\edd7"; } +.ri-government-fill:before { content: "\edd8"; } +.ri-government-line:before { content: "\edd9"; } +.ri-gps-fill:before { content: "\edda"; } +.ri-gps-line:before { content: "\eddb"; } +.ri-gradienter-fill:before { content: "\eddc"; } +.ri-gradienter-line:before { content: "\eddd"; } +.ri-grid-fill:before { content: "\edde"; } +.ri-grid-line:before { content: "\eddf"; } +.ri-group-2-fill:before { content: "\ede0"; } +.ri-group-2-line:before { content: "\ede1"; } +.ri-group-fill:before { content: "\ede2"; } +.ri-group-line:before { content: "\ede3"; } +.ri-guide-fill:before { content: "\ede4"; } +.ri-guide-line:before { content: "\ede5"; } +.ri-h-1:before { content: "\ede6"; } +.ri-h-2:before { content: "\ede7"; } +.ri-h-3:before { content: "\ede8"; } +.ri-h-4:before { content: "\ede9"; } +.ri-h-5:before { content: "\edea"; } +.ri-h-6:before { content: "\edeb"; } +.ri-hail-fill:before { content: "\edec"; } +.ri-hail-line:before { content: "\eded"; } +.ri-hammer-fill:before { content: "\edee"; } +.ri-hammer-line:before { content: "\edef"; } +.ri-hand-coin-fill:before { content: "\edf0"; } +.ri-hand-coin-line:before { content: "\edf1"; } +.ri-hand-heart-fill:before { content: "\edf2"; } +.ri-hand-heart-line:before { content: "\edf3"; } +.ri-hand-sanitizer-fill:before { content: "\edf4"; } +.ri-hand-sanitizer-line:before { content: "\edf5"; } +.ri-handbag-fill:before { content: "\edf6"; } +.ri-handbag-line:before { content: "\edf7"; } +.ri-hard-drive-2-fill:before { content: "\edf8"; } +.ri-hard-drive-2-line:before { content: "\edf9"; } +.ri-hard-drive-fill:before { content: "\edfa"; } +.ri-hard-drive-line:before { content: "\edfb"; } +.ri-hashtag:before { content: "\edfc"; } +.ri-haze-2-fill:before { content: "\edfd"; } +.ri-haze-2-line:before { content: "\edfe"; } +.ri-haze-fill:before { content: "\edff"; } +.ri-haze-line:before { content: "\ee00"; } +.ri-hd-fill:before { content: "\ee01"; } +.ri-hd-line:before { content: "\ee02"; } +.ri-heading:before { content: "\ee03"; } +.ri-headphone-fill:before { content: "\ee04"; } +.ri-headphone-line:before { content: "\ee05"; } +.ri-health-book-fill:before { content: "\ee06"; } +.ri-health-book-line:before { content: "\ee07"; } +.ri-heart-2-fill:before { content: "\ee08"; } +.ri-heart-2-line:before { content: "\ee09"; } +.ri-heart-3-fill:before { content: "\ee0a"; } +.ri-heart-3-line:before { content: "\ee0b"; } +.ri-heart-add-fill:before { content: "\ee0c"; } +.ri-heart-add-line:before { content: "\ee0d"; } +.ri-heart-fill:before { content: "\ee0e"; } +.ri-heart-line:before { content: "\ee0f"; } +.ri-heart-pulse-fill:before { content: "\ee10"; } +.ri-heart-pulse-line:before { content: "\ee11"; } +.ri-hearts-fill:before { content: "\ee12"; } +.ri-hearts-line:before { content: "\ee13"; } +.ri-heavy-showers-fill:before { content: "\ee14"; } +.ri-heavy-showers-line:before { content: "\ee15"; } +.ri-history-fill:before { content: "\ee16"; } +.ri-history-line:before { content: "\ee17"; } +.ri-home-2-fill:before { content: "\ee18"; } +.ri-home-2-line:before { content: "\ee19"; } +.ri-home-3-fill:before { content: "\ee1a"; } +.ri-home-3-line:before { content: "\ee1b"; } +.ri-home-4-fill:before { content: "\ee1c"; } +.ri-home-4-line:before { content: "\ee1d"; } +.ri-home-5-fill:before { content: "\ee1e"; } +.ri-home-5-line:before { content: "\ee1f"; } +.ri-home-6-fill:before { content: "\ee20"; } +.ri-home-6-line:before { content: "\ee21"; } +.ri-home-7-fill:before { content: "\ee22"; } +.ri-home-7-line:before { content: "\ee23"; } +.ri-home-8-fill:before { content: "\ee24"; } +.ri-home-8-line:before { content: "\ee25"; } +.ri-home-fill:before { content: "\ee26"; } +.ri-home-gear-fill:before { content: "\ee27"; } +.ri-home-gear-line:before { content: "\ee28"; } +.ri-home-heart-fill:before { content: "\ee29"; } +.ri-home-heart-line:before { content: "\ee2a"; } +.ri-home-line:before { content: "\ee2b"; } +.ri-home-smile-2-fill:before { content: "\ee2c"; } +.ri-home-smile-2-line:before { content: "\ee2d"; } +.ri-home-smile-fill:before { content: "\ee2e"; } +.ri-home-smile-line:before { content: "\ee2f"; } +.ri-home-wifi-fill:before { content: "\ee30"; } +.ri-home-wifi-line:before { content: "\ee31"; } +.ri-honor-of-kings-fill:before { content: "\ee32"; } +.ri-honor-of-kings-line:before { content: "\ee33"; } +.ri-honour-fill:before { content: "\ee34"; } +.ri-honour-line:before { content: "\ee35"; } +.ri-hospital-fill:before { content: "\ee36"; } +.ri-hospital-line:before { content: "\ee37"; } +.ri-hotel-bed-fill:before { content: "\ee38"; } +.ri-hotel-bed-line:before { content: "\ee39"; } +.ri-hotel-fill:before { content: "\ee3a"; } +.ri-hotel-line:before { content: "\ee3b"; } +.ri-hotspot-fill:before { content: "\ee3c"; } +.ri-hotspot-line:before { content: "\ee3d"; } +.ri-hq-fill:before { content: "\ee3e"; } +.ri-hq-line:before { content: "\ee3f"; } +.ri-html5-fill:before { content: "\ee40"; } +.ri-html5-line:before { content: "\ee41"; } +.ri-ie-fill:before { content: "\ee42"; } +.ri-ie-line:before { content: "\ee43"; } +.ri-image-2-fill:before { content: "\ee44"; } +.ri-image-2-line:before { content: "\ee45"; } +.ri-image-add-fill:before { content: "\ee46"; } +.ri-image-add-line:before { content: "\ee47"; } +.ri-image-edit-fill:before { content: "\ee48"; } +.ri-image-edit-line:before { content: "\ee49"; } +.ri-image-fill:before { content: "\ee4a"; } +.ri-image-line:before { content: "\ee4b"; } +.ri-inbox-archive-fill:before { content: "\ee4c"; } +.ri-inbox-archive-line:before { content: "\ee4d"; } +.ri-inbox-fill:before { content: "\ee4e"; } +.ri-inbox-line:before { content: "\ee4f"; } +.ri-inbox-unarchive-fill:before { content: "\ee50"; } +.ri-inbox-unarchive-line:before { content: "\ee51"; } +.ri-increase-decrease-fill:before { content: "\ee52"; } +.ri-increase-decrease-line:before { content: "\ee53"; } +.ri-indent-decrease:before { content: "\ee54"; } +.ri-indent-increase:before { content: "\ee55"; } +.ri-indeterminate-circle-fill:before { content: "\ee56"; } +.ri-indeterminate-circle-line:before { content: "\ee57"; } +.ri-information-fill:before { content: "\ee58"; } +.ri-information-line:before { content: "\ee59"; } +.ri-infrared-thermometer-fill:before { content: "\ee5a"; } +.ri-infrared-thermometer-line:before { content: "\ee5b"; } +.ri-ink-bottle-fill:before { content: "\ee5c"; } +.ri-ink-bottle-line:before { content: "\ee5d"; } +.ri-input-cursor-move:before { content: "\ee5e"; } +.ri-input-method-fill:before { content: "\ee5f"; } +.ri-input-method-line:before { content: "\ee60"; } +.ri-insert-column-left:before { content: "\ee61"; } +.ri-insert-column-right:before { content: "\ee62"; } +.ri-insert-row-bottom:before { content: "\ee63"; } +.ri-insert-row-top:before { content: "\ee64"; } +.ri-instagram-fill:before { content: "\ee65"; } +.ri-instagram-line:before { content: "\ee66"; } +.ri-install-fill:before { content: "\ee67"; } +.ri-install-line:before { content: "\ee68"; } +.ri-invision-fill:before { content: "\ee69"; } +.ri-invision-line:before { content: "\ee6a"; } +.ri-italic:before { content: "\ee6b"; } +.ri-kakao-talk-fill:before { content: "\ee6c"; } +.ri-kakao-talk-line:before { content: "\ee6d"; } +.ri-key-2-fill:before { content: "\ee6e"; } +.ri-key-2-line:before { content: "\ee6f"; } +.ri-key-fill:before { content: "\ee70"; } +.ri-key-line:before { content: "\ee71"; } +.ri-keyboard-box-fill:before { content: "\ee72"; } +.ri-keyboard-box-line:before { content: "\ee73"; } +.ri-keyboard-fill:before { content: "\ee74"; } +.ri-keyboard-line:before { content: "\ee75"; } +.ri-keynote-fill:before { content: "\ee76"; } +.ri-keynote-line:before { content: "\ee77"; } +.ri-knife-blood-fill:before { content: "\ee78"; } +.ri-knife-blood-line:before { content: "\ee79"; } +.ri-knife-fill:before { content: "\ee7a"; } +.ri-knife-line:before { content: "\ee7b"; } +.ri-landscape-fill:before { content: "\ee7c"; } +.ri-landscape-line:before { content: "\ee7d"; } +.ri-layout-2-fill:before { content: "\ee7e"; } +.ri-layout-2-line:before { content: "\ee7f"; } +.ri-layout-3-fill:before { content: "\ee80"; } +.ri-layout-3-line:before { content: "\ee81"; } +.ri-layout-4-fill:before { content: "\ee82"; } +.ri-layout-4-line:before { content: "\ee83"; } +.ri-layout-5-fill:before { content: "\ee84"; } +.ri-layout-5-line:before { content: "\ee85"; } +.ri-layout-6-fill:before { content: "\ee86"; } +.ri-layout-6-line:before { content: "\ee87"; } +.ri-layout-bottom-2-fill:before { content: "\ee88"; } +.ri-layout-bottom-2-line:before { content: "\ee89"; } +.ri-layout-bottom-fill:before { content: "\ee8a"; } +.ri-layout-bottom-line:before { content: "\ee8b"; } +.ri-layout-column-fill:before { content: "\ee8c"; } +.ri-layout-column-line:before { content: "\ee8d"; } +.ri-layout-fill:before { content: "\ee8e"; } +.ri-layout-grid-fill:before { content: "\ee8f"; } +.ri-layout-grid-line:before { content: "\ee90"; } +.ri-layout-left-2-fill:before { content: "\ee91"; } +.ri-layout-left-2-line:before { content: "\ee92"; } +.ri-layout-left-fill:before { content: "\ee93"; } +.ri-layout-left-line:before { content: "\ee94"; } +.ri-layout-line:before { content: "\ee95"; } +.ri-layout-masonry-fill:before { content: "\ee96"; } +.ri-layout-masonry-line:before { content: "\ee97"; } +.ri-layout-right-2-fill:before { content: "\ee98"; } +.ri-layout-right-2-line:before { content: "\ee99"; } +.ri-layout-right-fill:before { content: "\ee9a"; } +.ri-layout-right-line:before { content: "\ee9b"; } +.ri-layout-row-fill:before { content: "\ee9c"; } +.ri-layout-row-line:before { content: "\ee9d"; } +.ri-layout-top-2-fill:before { content: "\ee9e"; } +.ri-layout-top-2-line:before { content: "\ee9f"; } +.ri-layout-top-fill:before { content: "\eea0"; } +.ri-layout-top-line:before { content: "\eea1"; } +.ri-leaf-fill:before { content: "\eea2"; } +.ri-leaf-line:before { content: "\eea3"; } +.ri-lifebuoy-fill:before { content: "\eea4"; } +.ri-lifebuoy-line:before { content: "\eea5"; } +.ri-lightbulb-fill:before { content: "\eea6"; } +.ri-lightbulb-flash-fill:before { content: "\eea7"; } +.ri-lightbulb-flash-line:before { content: "\eea8"; } +.ri-lightbulb-line:before { content: "\eea9"; } +.ri-line-chart-fill:before { content: "\eeaa"; } +.ri-line-chart-line:before { content: "\eeab"; } +.ri-line-fill:before { content: "\eeac"; } +.ri-line-height:before { content: "\eead"; } +.ri-line-line:before { content: "\eeae"; } +.ri-link-m:before { content: "\eeaf"; } +.ri-link-unlink-m:before { content: "\eeb0"; } +.ri-link-unlink:before { content: "\eeb1"; } +.ri-link:before { content: "\eeb2"; } +.ri-linkedin-box-fill:before { content: "\eeb3"; } +.ri-linkedin-box-line:before { content: "\eeb4"; } +.ri-linkedin-fill:before { content: "\eeb5"; } +.ri-linkedin-line:before { content: "\eeb6"; } +.ri-links-fill:before { content: "\eeb7"; } +.ri-links-line:before { content: "\eeb8"; } +.ri-list-check-2:before { content: "\eeb9"; } +.ri-list-check:before { content: "\eeba"; } +.ri-list-ordered:before { content: "\eebb"; } +.ri-list-settings-fill:before { content: "\eebc"; } +.ri-list-settings-line:before { content: "\eebd"; } +.ri-list-unordered:before { content: "\eebe"; } +.ri-live-fill:before { content: "\eebf"; } +.ri-live-line:before { content: "\eec0"; } +.ri-loader-2-fill:before { content: "\eec1"; } +.ri-loader-2-line:before { content: "\eec2"; } +.ri-loader-3-fill:before { content: "\eec3"; } +.ri-loader-3-line:before { content: "\eec4"; } +.ri-loader-4-fill:before { content: "\eec5"; } +.ri-loader-4-line:before { content: "\eec6"; } +.ri-loader-5-fill:before { content: "\eec7"; } +.ri-loader-5-line:before { content: "\eec8"; } +.ri-loader-fill:before { content: "\eec9"; } +.ri-loader-line:before { content: "\eeca"; } +.ri-lock-2-fill:before { content: "\eecb"; } +.ri-lock-2-line:before { content: "\eecc"; } +.ri-lock-fill:before { content: "\eecd"; } +.ri-lock-line:before { content: "\eece"; } +.ri-lock-password-fill:before { content: "\eecf"; } +.ri-lock-password-line:before { content: "\eed0"; } +.ri-lock-unlock-fill:before { content: "\eed1"; } +.ri-lock-unlock-line:before { content: "\eed2"; } +.ri-login-box-fill:before { content: "\eed3"; } +.ri-login-box-line:before { content: "\eed4"; } +.ri-login-circle-fill:before { content: "\eed5"; } +.ri-login-circle-line:before { content: "\eed6"; } +.ri-logout-box-fill:before { content: "\eed7"; } +.ri-logout-box-line:before { content: "\eed8"; } +.ri-logout-box-r-fill:before { content: "\eed9"; } +.ri-logout-box-r-line:before { content: "\eeda"; } +.ri-logout-circle-fill:before { content: "\eedb"; } +.ri-logout-circle-line:before { content: "\eedc"; } +.ri-logout-circle-r-fill:before { content: "\eedd"; } +.ri-logout-circle-r-line:before { content: "\eede"; } +.ri-luggage-cart-fill:before { content: "\eedf"; } +.ri-luggage-cart-line:before { content: "\eee0"; } +.ri-luggage-deposit-fill:before { content: "\eee1"; } +.ri-luggage-deposit-line:before { content: "\eee2"; } +.ri-lungs-fill:before { content: "\eee3"; } +.ri-lungs-line:before { content: "\eee4"; } +.ri-mac-fill:before { content: "\eee5"; } +.ri-mac-line:before { content: "\eee6"; } +.ri-macbook-fill:before { content: "\eee7"; } +.ri-macbook-line:before { content: "\eee8"; } +.ri-magic-fill:before { content: "\eee9"; } +.ri-magic-line:before { content: "\eeea"; } +.ri-mail-add-fill:before { content: "\eeeb"; } +.ri-mail-add-line:before { content: "\eeec"; } +.ri-mail-check-fill:before { content: "\eeed"; } +.ri-mail-check-line:before { content: "\eeee"; } +.ri-mail-close-fill:before { content: "\eeef"; } +.ri-mail-close-line:before { content: "\eef0"; } +.ri-mail-download-fill:before { content: "\eef1"; } +.ri-mail-download-line:before { content: "\eef2"; } +.ri-mail-fill:before { content: "\eef3"; } +.ri-mail-forbid-fill:before { content: "\eef4"; } +.ri-mail-forbid-line:before { content: "\eef5"; } +.ri-mail-line:before { content: "\eef6"; } +.ri-mail-lock-fill:before { content: "\eef7"; } +.ri-mail-lock-line:before { content: "\eef8"; } +.ri-mail-open-fill:before { content: "\eef9"; } +.ri-mail-open-line:before { content: "\eefa"; } +.ri-mail-send-fill:before { content: "\eefb"; } +.ri-mail-send-line:before { content: "\eefc"; } +.ri-mail-settings-fill:before { content: "\eefd"; } +.ri-mail-settings-line:before { content: "\eefe"; } +.ri-mail-star-fill:before { content: "\eeff"; } +.ri-mail-star-line:before { content: "\ef00"; } +.ri-mail-unread-fill:before { content: "\ef01"; } +.ri-mail-unread-line:before { content: "\ef02"; } +.ri-mail-volume-fill:before { content: "\ef03"; } +.ri-mail-volume-line:before { content: "\ef04"; } +.ri-map-2-fill:before { content: "\ef05"; } +.ri-map-2-line:before { content: "\ef06"; } +.ri-map-fill:before { content: "\ef07"; } +.ri-map-line:before { content: "\ef08"; } +.ri-map-pin-2-fill:before { content: "\ef09"; } +.ri-map-pin-2-line:before { content: "\ef0a"; } +.ri-map-pin-3-fill:before { content: "\ef0b"; } +.ri-map-pin-3-line:before { content: "\ef0c"; } +.ri-map-pin-4-fill:before { content: "\ef0d"; } +.ri-map-pin-4-line:before { content: "\ef0e"; } +.ri-map-pin-5-fill:before { content: "\ef0f"; } +.ri-map-pin-5-line:before { content: "\ef10"; } +.ri-map-pin-add-fill:before { content: "\ef11"; } +.ri-map-pin-add-line:before { content: "\ef12"; } +.ri-map-pin-fill:before { content: "\ef13"; } +.ri-map-pin-line:before { content: "\ef14"; } +.ri-map-pin-range-fill:before { content: "\ef15"; } +.ri-map-pin-range-line:before { content: "\ef16"; } +.ri-map-pin-time-fill:before { content: "\ef17"; } +.ri-map-pin-time-line:before { content: "\ef18"; } +.ri-map-pin-user-fill:before { content: "\ef19"; } +.ri-map-pin-user-line:before { content: "\ef1a"; } +.ri-mark-pen-fill:before { content: "\ef1b"; } +.ri-mark-pen-line:before { content: "\ef1c"; } +.ri-markdown-fill:before { content: "\ef1d"; } +.ri-markdown-line:before { content: "\ef1e"; } +.ri-markup-fill:before { content: "\ef1f"; } +.ri-markup-line:before { content: "\ef20"; } +.ri-mastercard-fill:before { content: "\ef21"; } +.ri-mastercard-line:before { content: "\ef22"; } +.ri-mastodon-fill:before { content: "\ef23"; } +.ri-mastodon-line:before { content: "\ef24"; } +.ri-medal-2-fill:before { content: "\ef25"; } +.ri-medal-2-line:before { content: "\ef26"; } +.ri-medal-fill:before { content: "\ef27"; } +.ri-medal-line:before { content: "\ef28"; } +.ri-medicine-bottle-fill:before { content: "\ef29"; } +.ri-medicine-bottle-line:before { content: "\ef2a"; } +.ri-medium-fill:before { content: "\ef2b"; } +.ri-medium-line:before { content: "\ef2c"; } +.ri-men-fill:before { content: "\ef2d"; } +.ri-men-line:before { content: "\ef2e"; } +.ri-mental-health-fill:before { content: "\ef2f"; } +.ri-mental-health-line:before { content: "\ef30"; } +.ri-menu-2-fill:before { content: "\ef31"; } +.ri-menu-2-line:before { content: "\ef32"; } +.ri-menu-3-fill:before { content: "\ef33"; } +.ri-menu-3-line:before { content: "\ef34"; } +.ri-menu-4-fill:before { content: "\ef35"; } +.ri-menu-4-line:before { content: "\ef36"; } +.ri-menu-5-fill:before { content: "\ef37"; } +.ri-menu-5-line:before { content: "\ef38"; } +.ri-menu-add-fill:before { content: "\ef39"; } +.ri-menu-add-line:before { content: "\ef3a"; } +.ri-menu-fill:before { content: "\ef3b"; } +.ri-menu-fold-fill:before { content: "\ef3c"; } +.ri-menu-fold-line:before { content: "\ef3d"; } +.ri-menu-line:before { content: "\ef3e"; } +.ri-menu-unfold-fill:before { content: "\ef3f"; } +.ri-menu-unfold-line:before { content: "\ef40"; } +.ri-merge-cells-horizontal:before { content: "\ef41"; } +.ri-merge-cells-vertical:before { content: "\ef42"; } +.ri-message-2-fill:before { content: "\ef43"; } +.ri-message-2-line:before { content: "\ef44"; } +.ri-message-3-fill:before { content: "\ef45"; } +.ri-message-3-line:before { content: "\ef46"; } +.ri-message-fill:before { content: "\ef47"; } +.ri-message-line:before { content: "\ef48"; } +.ri-messenger-fill:before { content: "\ef49"; } +.ri-messenger-line:before { content: "\ef4a"; } +.ri-meteor-fill:before { content: "\ef4b"; } +.ri-meteor-line:before { content: "\ef4c"; } +.ri-mic-2-fill:before { content: "\ef4d"; } +.ri-mic-2-line:before { content: "\ef4e"; } +.ri-mic-fill:before { content: "\ef4f"; } +.ri-mic-line:before { content: "\ef50"; } +.ri-mic-off-fill:before { content: "\ef51"; } +.ri-mic-off-line:before { content: "\ef52"; } +.ri-mickey-fill:before { content: "\ef53"; } +.ri-mickey-line:before { content: "\ef54"; } +.ri-microscope-fill:before { content: "\ef55"; } +.ri-microscope-line:before { content: "\ef56"; } +.ri-microsoft-fill:before { content: "\ef57"; } +.ri-microsoft-line:before { content: "\ef58"; } +.ri-mind-map:before { content: "\ef59"; } +.ri-mini-program-fill:before { content: "\ef5a"; } +.ri-mini-program-line:before { content: "\ef5b"; } +.ri-mist-fill:before { content: "\ef5c"; } +.ri-mist-line:before { content: "\ef5d"; } +.ri-money-cny-box-fill:before { content: "\ef5e"; } +.ri-money-cny-box-line:before { content: "\ef5f"; } +.ri-money-cny-circle-fill:before { content: "\ef60"; } +.ri-money-cny-circle-line:before { content: "\ef61"; } +.ri-money-dollar-box-fill:before { content: "\ef62"; } +.ri-money-dollar-box-line:before { content: "\ef63"; } +.ri-money-dollar-circle-fill:before { content: "\ef64"; } +.ri-money-dollar-circle-line:before { content: "\ef65"; } +.ri-money-euro-box-fill:before { content: "\ef66"; } +.ri-money-euro-box-line:before { content: "\ef67"; } +.ri-money-euro-circle-fill:before { content: "\ef68"; } +.ri-money-euro-circle-line:before { content: "\ef69"; } +.ri-money-pound-box-fill:before { content: "\ef6a"; } +.ri-money-pound-box-line:before { content: "\ef6b"; } +.ri-money-pound-circle-fill:before { content: "\ef6c"; } +.ri-money-pound-circle-line:before { content: "\ef6d"; } +.ri-moon-clear-fill:before { content: "\ef6e"; } +.ri-moon-clear-line:before { content: "\ef6f"; } +.ri-moon-cloudy-fill:before { content: "\ef70"; } +.ri-moon-cloudy-line:before { content: "\ef71"; } +.ri-moon-fill:before { content: "\ef72"; } +.ri-moon-foggy-fill:before { content: "\ef73"; } +.ri-moon-foggy-line:before { content: "\ef74"; } +.ri-moon-line:before { content: "\ef75"; } +.ri-more-2-fill:before { content: "\ef76"; } +.ri-more-2-line:before { content: "\ef77"; } +.ri-more-fill:before { content: "\ef78"; } +.ri-more-line:before { content: "\ef79"; } +.ri-motorbike-fill:before { content: "\ef7a"; } +.ri-motorbike-line:before { content: "\ef7b"; } +.ri-mouse-fill:before { content: "\ef7c"; } +.ri-mouse-line:before { content: "\ef7d"; } +.ri-movie-2-fill:before { content: "\ef7e"; } +.ri-movie-2-line:before { content: "\ef7f"; } +.ri-movie-fill:before { content: "\ef80"; } +.ri-movie-line:before { content: "\ef81"; } +.ri-music-2-fill:before { content: "\ef82"; } +.ri-music-2-line:before { content: "\ef83"; } +.ri-music-fill:before { content: "\ef84"; } +.ri-music-line:before { content: "\ef85"; } +.ri-mv-fill:before { content: "\ef86"; } +.ri-mv-line:before { content: "\ef87"; } +.ri-navigation-fill:before { content: "\ef88"; } +.ri-navigation-line:before { content: "\ef89"; } +.ri-netease-cloud-music-fill:before { content: "\ef8a"; } +.ri-netease-cloud-music-line:before { content: "\ef8b"; } +.ri-netflix-fill:before { content: "\ef8c"; } +.ri-netflix-line:before { content: "\ef8d"; } +.ri-newspaper-fill:before { content: "\ef8e"; } +.ri-newspaper-line:before { content: "\ef8f"; } +.ri-node-tree:before { content: "\ef90"; } +.ri-notification-2-fill:before { content: "\ef91"; } +.ri-notification-2-line:before { content: "\ef92"; } +.ri-notification-3-fill:before { content: "\ef93"; } +.ri-notification-3-line:before { content: "\ef94"; } +.ri-notification-4-fill:before { content: "\ef95"; } +.ri-notification-4-line:before { content: "\ef96"; } +.ri-notification-badge-fill:before { content: "\ef97"; } +.ri-notification-badge-line:before { content: "\ef98"; } +.ri-notification-fill:before { content: "\ef99"; } +.ri-notification-line:before { content: "\ef9a"; } +.ri-notification-off-fill:before { content: "\ef9b"; } +.ri-notification-off-line:before { content: "\ef9c"; } +.ri-npmjs-fill:before { content: "\ef9d"; } +.ri-npmjs-line:before { content: "\ef9e"; } +.ri-number-0:before { content: "\ef9f"; } +.ri-number-1:before { content: "\efa0"; } +.ri-number-2:before { content: "\efa1"; } +.ri-number-3:before { content: "\efa2"; } +.ri-number-4:before { content: "\efa3"; } +.ri-number-5:before { content: "\efa4"; } +.ri-number-6:before { content: "\efa5"; } +.ri-number-7:before { content: "\efa6"; } +.ri-number-8:before { content: "\efa7"; } +.ri-number-9:before { content: "\efa8"; } +.ri-numbers-fill:before { content: "\efa9"; } +.ri-numbers-line:before { content: "\efaa"; } +.ri-nurse-fill:before { content: "\efab"; } +.ri-nurse-line:before { content: "\efac"; } +.ri-oil-fill:before { content: "\efad"; } +.ri-oil-line:before { content: "\efae"; } +.ri-omega:before { content: "\efaf"; } +.ri-open-arm-fill:before { content: "\efb0"; } +.ri-open-arm-line:before { content: "\efb1"; } +.ri-open-source-fill:before { content: "\efb2"; } +.ri-open-source-line:before { content: "\efb3"; } +.ri-opera-fill:before { content: "\efb4"; } +.ri-opera-line:before { content: "\efb5"; } +.ri-order-play-fill:before { content: "\efb6"; } +.ri-order-play-line:before { content: "\efb7"; } +.ri-organization-chart:before { content: "\efb8"; } +.ri-outlet-2-fill:before { content: "\efb9"; } +.ri-outlet-2-line:before { content: "\efba"; } +.ri-outlet-fill:before { content: "\efbb"; } +.ri-outlet-line:before { content: "\efbc"; } +.ri-page-separator:before { content: "\efbd"; } +.ri-pages-fill:before { content: "\efbe"; } +.ri-pages-line:before { content: "\efbf"; } +.ri-paint-brush-fill:before { content: "\efc0"; } +.ri-paint-brush-line:before { content: "\efc1"; } +.ri-paint-fill:before { content: "\efc2"; } +.ri-paint-line:before { content: "\efc3"; } +.ri-palette-fill:before { content: "\efc4"; } +.ri-palette-line:before { content: "\efc5"; } +.ri-pantone-fill:before { content: "\efc6"; } +.ri-pantone-line:before { content: "\efc7"; } +.ri-paragraph:before { content: "\efc8"; } +.ri-parent-fill:before { content: "\efc9"; } +.ri-parent-line:before { content: "\efca"; } +.ri-parentheses-fill:before { content: "\efcb"; } +.ri-parentheses-line:before { content: "\efcc"; } +.ri-parking-box-fill:before { content: "\efcd"; } +.ri-parking-box-line:before { content: "\efce"; } +.ri-parking-fill:before { content: "\efcf"; } +.ri-parking-line:before { content: "\efd0"; } +.ri-passport-fill:before { content: "\efd1"; } +.ri-passport-line:before { content: "\efd2"; } +.ri-patreon-fill:before { content: "\efd3"; } +.ri-patreon-line:before { content: "\efd4"; } +.ri-pause-circle-fill:before { content: "\efd5"; } +.ri-pause-circle-line:before { content: "\efd6"; } +.ri-pause-fill:before { content: "\efd7"; } +.ri-pause-line:before { content: "\efd8"; } +.ri-pause-mini-fill:before { content: "\efd9"; } +.ri-pause-mini-line:before { content: "\efda"; } +.ri-paypal-fill:before { content: "\efdb"; } +.ri-paypal-line:before { content: "\efdc"; } +.ri-pen-nib-fill:before { content: "\efdd"; } +.ri-pen-nib-line:before { content: "\efde"; } +.ri-pencil-fill:before { content: "\efdf"; } +.ri-pencil-line:before { content: "\efe0"; } +.ri-pencil-ruler-2-fill:before { content: "\efe1"; } +.ri-pencil-ruler-2-line:before { content: "\efe2"; } +.ri-pencil-ruler-fill:before { content: "\efe3"; } +.ri-pencil-ruler-line:before { content: "\efe4"; } +.ri-percent-fill:before { content: "\efe5"; } +.ri-percent-line:before { content: "\efe6"; } +.ri-phone-camera-fill:before { content: "\efe7"; } +.ri-phone-camera-line:before { content: "\efe8"; } +.ri-phone-fill:before { content: "\efe9"; } +.ri-phone-find-fill:before { content: "\efea"; } +.ri-phone-find-line:before { content: "\efeb"; } +.ri-phone-line:before { content: "\efec"; } +.ri-phone-lock-fill:before { content: "\efed"; } +.ri-phone-lock-line:before { content: "\efee"; } +.ri-picture-in-picture-2-fill:before { content: "\efef"; } +.ri-picture-in-picture-2-line:before { content: "\eff0"; } +.ri-picture-in-picture-exit-fill:before { content: "\eff1"; } +.ri-picture-in-picture-exit-line:before { content: "\eff2"; } +.ri-picture-in-picture-fill:before { content: "\eff3"; } +.ri-picture-in-picture-line:before { content: "\eff4"; } +.ri-pie-chart-2-fill:before { content: "\eff5"; } +.ri-pie-chart-2-line:before { content: "\eff6"; } +.ri-pie-chart-box-fill:before { content: "\eff7"; } +.ri-pie-chart-box-line:before { content: "\eff8"; } +.ri-pie-chart-fill:before { content: "\eff9"; } +.ri-pie-chart-line:before { content: "\effa"; } +.ri-pin-distance-fill:before { content: "\effb"; } +.ri-pin-distance-line:before { content: "\effc"; } +.ri-ping-pong-fill:before { content: "\effd"; } +.ri-ping-pong-line:before { content: "\effe"; } +.ri-pinterest-fill:before { content: "\efff"; } +.ri-pinterest-line:before { content: "\f000"; } +.ri-pinyin-input:before { content: "\f001"; } +.ri-pixelfed-fill:before { content: "\f002"; } +.ri-pixelfed-line:before { content: "\f003"; } +.ri-plane-fill:before { content: "\f004"; } +.ri-plane-line:before { content: "\f005"; } +.ri-plant-fill:before { content: "\f006"; } +.ri-plant-line:before { content: "\f007"; } +.ri-play-circle-fill:before { content: "\f008"; } +.ri-play-circle-line:before { content: "\f009"; } +.ri-play-fill:before { content: "\f00a"; } +.ri-play-line:before { content: "\f00b"; } +.ri-play-list-2-fill:before { content: "\f00c"; } +.ri-play-list-2-line:before { content: "\f00d"; } +.ri-play-list-add-fill:before { content: "\f00e"; } +.ri-play-list-add-line:before { content: "\f00f"; } +.ri-play-list-fill:before { content: "\f010"; } +.ri-play-list-line:before { content: "\f011"; } +.ri-play-mini-fill:before { content: "\f012"; } +.ri-play-mini-line:before { content: "\f013"; } +.ri-playstation-fill:before { content: "\f014"; } +.ri-playstation-line:before { content: "\f015"; } +.ri-plug-2-fill:before { content: "\f016"; } +.ri-plug-2-line:before { content: "\f017"; } +.ri-plug-fill:before { content: "\f018"; } +.ri-plug-line:before { content: "\f019"; } +.ri-polaroid-2-fill:before { content: "\f01a"; } +.ri-polaroid-2-line:before { content: "\f01b"; } +.ri-polaroid-fill:before { content: "\f01c"; } +.ri-polaroid-line:before { content: "\f01d"; } +.ri-police-car-fill:before { content: "\f01e"; } +.ri-police-car-line:before { content: "\f01f"; } +.ri-price-tag-2-fill:before { content: "\f020"; } +.ri-price-tag-2-line:before { content: "\f021"; } +.ri-price-tag-3-fill:before { content: "\f022"; } +.ri-price-tag-3-line:before { content: "\f023"; } +.ri-price-tag-fill:before { content: "\f024"; } +.ri-price-tag-line:before { content: "\f025"; } +.ri-printer-cloud-fill:before { content: "\f026"; } +.ri-printer-cloud-line:before { content: "\f027"; } +.ri-printer-fill:before { content: "\f028"; } +.ri-printer-line:before { content: "\f029"; } +.ri-product-hunt-fill:before { content: "\f02a"; } +.ri-product-hunt-line:before { content: "\f02b"; } +.ri-profile-fill:before { content: "\f02c"; } +.ri-profile-line:before { content: "\f02d"; } +.ri-projector-2-fill:before { content: "\f02e"; } +.ri-projector-2-line:before { content: "\f02f"; } +.ri-projector-fill:before { content: "\f030"; } +.ri-projector-line:before { content: "\f031"; } +.ri-psychotherapy-fill:before { content: "\f032"; } +.ri-psychotherapy-line:before { content: "\f033"; } +.ri-pulse-fill:before { content: "\f034"; } +.ri-pulse-line:before { content: "\f035"; } +.ri-pushpin-2-fill:before { content: "\f036"; } +.ri-pushpin-2-line:before { content: "\f037"; } +.ri-pushpin-fill:before { content: "\f038"; } +.ri-pushpin-line:before { content: "\f039"; } +.ri-qq-fill:before { content: "\f03a"; } +.ri-qq-line:before { content: "\f03b"; } +.ri-qr-code-fill:before { content: "\f03c"; } +.ri-qr-code-line:before { content: "\f03d"; } +.ri-qr-scan-2-fill:before { content: "\f03e"; } +.ri-qr-scan-2-line:before { content: "\f03f"; } +.ri-qr-scan-fill:before { content: "\f040"; } +.ri-qr-scan-line:before { content: "\f041"; } +.ri-question-answer-fill:before { content: "\f042"; } +.ri-question-answer-line:before { content: "\f043"; } +.ri-question-fill:before { content: "\f044"; } +.ri-question-line:before { content: "\f045"; } +.ri-question-mark:before { content: "\f046"; } +.ri-questionnaire-fill:before { content: "\f047"; } +.ri-questionnaire-line:before { content: "\f048"; } +.ri-quill-pen-fill:before { content: "\f049"; } +.ri-quill-pen-line:before { content: "\f04a"; } +.ri-radar-fill:before { content: "\f04b"; } +.ri-radar-line:before { content: "\f04c"; } +.ri-radio-2-fill:before { content: "\f04d"; } +.ri-radio-2-line:before { content: "\f04e"; } +.ri-radio-button-fill:before { content: "\f04f"; } +.ri-radio-button-line:before { content: "\f050"; } +.ri-radio-fill:before { content: "\f051"; } +.ri-radio-line:before { content: "\f052"; } +.ri-rainbow-fill:before { content: "\f053"; } +.ri-rainbow-line:before { content: "\f054"; } +.ri-rainy-fill:before { content: "\f055"; } +.ri-rainy-line:before { content: "\f056"; } +.ri-reactjs-fill:before { content: "\f057"; } +.ri-reactjs-line:before { content: "\f058"; } +.ri-record-circle-fill:before { content: "\f059"; } +.ri-record-circle-line:before { content: "\f05a"; } +.ri-record-mail-fill:before { content: "\f05b"; } +.ri-record-mail-line:before { content: "\f05c"; } +.ri-recycle-fill:before { content: "\f05d"; } +.ri-recycle-line:before { content: "\f05e"; } +.ri-red-packet-fill:before { content: "\f05f"; } +.ri-red-packet-line:before { content: "\f060"; } +.ri-reddit-fill:before { content: "\f061"; } +.ri-reddit-line:before { content: "\f062"; } +.ri-refresh-fill:before { content: "\f063"; } +.ri-refresh-line:before { content: "\f064"; } +.ri-refund-2-fill:before { content: "\f065"; } +.ri-refund-2-line:before { content: "\f066"; } +.ri-refund-fill:before { content: "\f067"; } +.ri-refund-line:before { content: "\f068"; } +.ri-registered-fill:before { content: "\f069"; } +.ri-registered-line:before { content: "\f06a"; } +.ri-remixicon-fill:before { content: "\f06b"; } +.ri-remixicon-line:before { content: "\f06c"; } +.ri-remote-control-2-fill:before { content: "\f06d"; } +.ri-remote-control-2-line:before { content: "\f06e"; } +.ri-remote-control-fill:before { content: "\f06f"; } +.ri-remote-control-line:before { content: "\f070"; } +.ri-repeat-2-fill:before { content: "\f071"; } +.ri-repeat-2-line:before { content: "\f072"; } +.ri-repeat-fill:before { content: "\f073"; } +.ri-repeat-line:before { content: "\f074"; } +.ri-repeat-one-fill:before { content: "\f075"; } +.ri-repeat-one-line:before { content: "\f076"; } +.ri-reply-all-fill:before { content: "\f077"; } +.ri-reply-all-line:before { content: "\f078"; } +.ri-reply-fill:before { content: "\f079"; } +.ri-reply-line:before { content: "\f07a"; } +.ri-reserved-fill:before { content: "\f07b"; } +.ri-reserved-line:before { content: "\f07c"; } +.ri-rest-time-fill:before { content: "\f07d"; } +.ri-rest-time-line:before { content: "\f07e"; } +.ri-restart-fill:before { content: "\f07f"; } +.ri-restart-line:before { content: "\f080"; } +.ri-restaurant-2-fill:before { content: "\f081"; } +.ri-restaurant-2-line:before { content: "\f082"; } +.ri-restaurant-fill:before { content: "\f083"; } +.ri-restaurant-line:before { content: "\f084"; } +.ri-rewind-fill:before { content: "\f085"; } +.ri-rewind-line:before { content: "\f086"; } +.ri-rewind-mini-fill:before { content: "\f087"; } +.ri-rewind-mini-line:before { content: "\f088"; } +.ri-rhythm-fill:before { content: "\f089"; } +.ri-rhythm-line:before { content: "\f08a"; } +.ri-riding-fill:before { content: "\f08b"; } +.ri-riding-line:before { content: "\f08c"; } +.ri-road-map-fill:before { content: "\f08d"; } +.ri-road-map-line:before { content: "\f08e"; } +.ri-roadster-fill:before { content: "\f08f"; } +.ri-roadster-line:before { content: "\f090"; } +.ri-robot-fill:before { content: "\f091"; } +.ri-robot-line:before { content: "\f092"; } +.ri-rocket-2-fill:before { content: "\f093"; } +.ri-rocket-2-line:before { content: "\f094"; } +.ri-rocket-fill:before { content: "\f095"; } +.ri-rocket-line:before { content: "\f096"; } +.ri-rotate-lock-fill:before { content: "\f097"; } +.ri-rotate-lock-line:before { content: "\f098"; } +.ri-rounded-corner:before { content: "\f099"; } +.ri-route-fill:before { content: "\f09a"; } +.ri-route-line:before { content: "\f09b"; } +.ri-router-fill:before { content: "\f09c"; } +.ri-router-line:before { content: "\f09d"; } +.ri-rss-fill:before { content: "\f09e"; } +.ri-rss-line:before { content: "\f09f"; } +.ri-ruler-2-fill:before { content: "\f0a0"; } +.ri-ruler-2-line:before { content: "\f0a1"; } +.ri-ruler-fill:before { content: "\f0a2"; } +.ri-ruler-line:before { content: "\f0a3"; } +.ri-run-fill:before { content: "\f0a4"; } +.ri-run-line:before { content: "\f0a5"; } +.ri-safari-fill:before { content: "\f0a6"; } +.ri-safari-line:before { content: "\f0a7"; } +.ri-safe-2-fill:before { content: "\f0a8"; } +.ri-safe-2-line:before { content: "\f0a9"; } +.ri-safe-fill:before { content: "\f0aa"; } +.ri-safe-line:before { content: "\f0ab"; } +.ri-sailboat-fill:before { content: "\f0ac"; } +.ri-sailboat-line:before { content: "\f0ad"; } +.ri-save-2-fill:before { content: "\f0ae"; } +.ri-save-2-line:before { content: "\f0af"; } +.ri-save-3-fill:before { content: "\f0b0"; } +.ri-save-3-line:before { content: "\f0b1"; } +.ri-save-fill:before { content: "\f0b2"; } +.ri-save-line:before { content: "\f0b3"; } +.ri-scales-2-fill:before { content: "\f0b4"; } +.ri-scales-2-line:before { content: "\f0b5"; } +.ri-scales-3-fill:before { content: "\f0b6"; } +.ri-scales-3-line:before { content: "\f0b7"; } +.ri-scales-fill:before { content: "\f0b8"; } +.ri-scales-line:before { content: "\f0b9"; } +.ri-scan-2-fill:before { content: "\f0ba"; } +.ri-scan-2-line:before { content: "\f0bb"; } +.ri-scan-fill:before { content: "\f0bc"; } +.ri-scan-line:before { content: "\f0bd"; } +.ri-scissors-2-fill:before { content: "\f0be"; } +.ri-scissors-2-line:before { content: "\f0bf"; } +.ri-scissors-cut-fill:before { content: "\f0c0"; } +.ri-scissors-cut-line:before { content: "\f0c1"; } +.ri-scissors-fill:before { content: "\f0c2"; } +.ri-scissors-line:before { content: "\f0c3"; } +.ri-screenshot-2-fill:before { content: "\f0c4"; } +.ri-screenshot-2-line:before { content: "\f0c5"; } +.ri-screenshot-fill:before { content: "\f0c6"; } +.ri-screenshot-line:before { content: "\f0c7"; } +.ri-sd-card-fill:before { content: "\f0c8"; } +.ri-sd-card-line:before { content: "\f0c9"; } +.ri-sd-card-mini-fill:before { content: "\f0ca"; } +.ri-sd-card-mini-line:before { content: "\f0cb"; } +.ri-search-2-fill:before { content: "\f0cc"; } +.ri-search-2-line:before { content: "\f0cd"; } +.ri-search-eye-fill:before { content: "\f0ce"; } +.ri-search-eye-line:before { content: "\f0cf"; } +.ri-search-fill:before { content: "\f0d0"; } +.ri-search-line:before { content: "\f0d1"; } +.ri-secure-payment-fill:before { content: "\f0d2"; } +.ri-secure-payment-line:before { content: "\f0d3"; } +.ri-seedling-fill:before { content: "\f0d4"; } +.ri-seedling-line:before { content: "\f0d5"; } +.ri-send-backward:before { content: "\f0d6"; } +.ri-send-plane-2-fill:before { content: "\f0d7"; } +.ri-send-plane-2-line:before { content: "\f0d8"; } +.ri-send-plane-fill:before { content: "\f0d9"; } +.ri-send-plane-line:before { content: "\f0da"; } +.ri-send-to-back:before { content: "\f0db"; } +.ri-sensor-fill:before { content: "\f0dc"; } +.ri-sensor-line:before { content: "\f0dd"; } +.ri-separator:before { content: "\f0de"; } +.ri-server-fill:before { content: "\f0df"; } +.ri-server-line:before { content: "\f0e0"; } +.ri-service-fill:before { content: "\f0e1"; } +.ri-service-line:before { content: "\f0e2"; } +.ri-settings-2-fill:before { content: "\f0e3"; } +.ri-settings-2-line:before { content: "\f0e4"; } +.ri-settings-3-fill:before { content: "\f0e5"; } +.ri-settings-3-line:before { content: "\f0e6"; } +.ri-settings-4-fill:before { content: "\f0e7"; } +.ri-settings-4-line:before { content: "\f0e8"; } +.ri-settings-5-fill:before { content: "\f0e9"; } +.ri-settings-5-line:before { content: "\f0ea"; } +.ri-settings-6-fill:before { content: "\f0eb"; } +.ri-settings-6-line:before { content: "\f0ec"; } +.ri-settings-fill:before { content: "\f0ed"; } +.ri-settings-line:before { content: "\f0ee"; } +.ri-shape-2-fill:before { content: "\f0ef"; } +.ri-shape-2-line:before { content: "\f0f0"; } +.ri-shape-fill:before { content: "\f0f1"; } +.ri-shape-line:before { content: "\f0f2"; } +.ri-share-box-fill:before { content: "\f0f3"; } +.ri-share-box-line:before { content: "\f0f4"; } +.ri-share-circle-fill:before { content: "\f0f5"; } +.ri-share-circle-line:before { content: "\f0f6"; } +.ri-share-fill:before { content: "\f0f7"; } +.ri-share-forward-2-fill:before { content: "\f0f8"; } +.ri-share-forward-2-line:before { content: "\f0f9"; } +.ri-share-forward-box-fill:before { content: "\f0fa"; } +.ri-share-forward-box-line:before { content: "\f0fb"; } +.ri-share-forward-fill:before { content: "\f0fc"; } +.ri-share-forward-line:before { content: "\f0fd"; } +.ri-share-line:before { content: "\f0fe"; } +.ri-shield-check-fill:before { content: "\f0ff"; } +.ri-shield-check-line:before { content: "\f100"; } +.ri-shield-cross-fill:before { content: "\f101"; } +.ri-shield-cross-line:before { content: "\f102"; } +.ri-shield-fill:before { content: "\f103"; } +.ri-shield-flash-fill:before { content: "\f104"; } +.ri-shield-flash-line:before { content: "\f105"; } +.ri-shield-keyhole-fill:before { content: "\f106"; } +.ri-shield-keyhole-line:before { content: "\f107"; } +.ri-shield-line:before { content: "\f108"; } +.ri-shield-star-fill:before { content: "\f109"; } +.ri-shield-star-line:before { content: "\f10a"; } +.ri-shield-user-fill:before { content: "\f10b"; } +.ri-shield-user-line:before { content: "\f10c"; } +.ri-ship-2-fill:before { content: "\f10d"; } +.ri-ship-2-line:before { content: "\f10e"; } +.ri-ship-fill:before { content: "\f10f"; } +.ri-ship-line:before { content: "\f110"; } +.ri-shirt-fill:before { content: "\f111"; } +.ri-shirt-line:before { content: "\f112"; } +.ri-shopping-bag-2-fill:before { content: "\f113"; } +.ri-shopping-bag-2-line:before { content: "\f114"; } +.ri-shopping-bag-3-fill:before { content: "\f115"; } +.ri-shopping-bag-3-line:before { content: "\f116"; } +.ri-shopping-bag-fill:before { content: "\f117"; } +.ri-shopping-bag-line:before { content: "\f118"; } +.ri-shopping-basket-2-fill:before { content: "\f119"; } +.ri-shopping-basket-2-line:before { content: "\f11a"; } +.ri-shopping-basket-fill:before { content: "\f11b"; } +.ri-shopping-basket-line:before { content: "\f11c"; } +.ri-shopping-cart-2-fill:before { content: "\f11d"; } +.ri-shopping-cart-2-line:before { content: "\f11e"; } +.ri-shopping-cart-fill:before { content: "\f11f"; } +.ri-shopping-cart-line:before { content: "\f120"; } +.ri-showers-fill:before { content: "\f121"; } +.ri-showers-line:before { content: "\f122"; } +.ri-shuffle-fill:before { content: "\f123"; } +.ri-shuffle-line:before { content: "\f124"; } +.ri-shut-down-fill:before { content: "\f125"; } +.ri-shut-down-line:before { content: "\f126"; } +.ri-side-bar-fill:before { content: "\f127"; } +.ri-side-bar-line:before { content: "\f128"; } +.ri-signal-tower-fill:before { content: "\f129"; } +.ri-signal-tower-line:before { content: "\f12a"; } +.ri-signal-wifi-1-fill:before { content: "\f12b"; } +.ri-signal-wifi-1-line:before { content: "\f12c"; } +.ri-signal-wifi-2-fill:before { content: "\f12d"; } +.ri-signal-wifi-2-line:before { content: "\f12e"; } +.ri-signal-wifi-3-fill:before { content: "\f12f"; } +.ri-signal-wifi-3-line:before { content: "\f130"; } +.ri-signal-wifi-error-fill:before { content: "\f131"; } +.ri-signal-wifi-error-line:before { content: "\f132"; } +.ri-signal-wifi-fill:before { content: "\f133"; } +.ri-signal-wifi-line:before { content: "\f134"; } +.ri-signal-wifi-off-fill:before { content: "\f135"; } +.ri-signal-wifi-off-line:before { content: "\f136"; } +.ri-sim-card-2-fill:before { content: "\f137"; } +.ri-sim-card-2-line:before { content: "\f138"; } +.ri-sim-card-fill:before { content: "\f139"; } +.ri-sim-card-line:before { content: "\f13a"; } +.ri-single-quotes-l:before { content: "\f13b"; } +.ri-single-quotes-r:before { content: "\f13c"; } +.ri-sip-fill:before { content: "\f13d"; } +.ri-sip-line:before { content: "\f13e"; } +.ri-skip-back-fill:before { content: "\f13f"; } +.ri-skip-back-line:before { content: "\f140"; } +.ri-skip-back-mini-fill:before { content: "\f141"; } +.ri-skip-back-mini-line:before { content: "\f142"; } +.ri-skip-forward-fill:before { content: "\f143"; } +.ri-skip-forward-line:before { content: "\f144"; } +.ri-skip-forward-mini-fill:before { content: "\f145"; } +.ri-skip-forward-mini-line:before { content: "\f146"; } +.ri-skull-2-fill:before { content: "\f147"; } +.ri-skull-2-line:before { content: "\f148"; } +.ri-skull-fill:before { content: "\f149"; } +.ri-skull-line:before { content: "\f14a"; } +.ri-skype-fill:before { content: "\f14b"; } +.ri-skype-line:before { content: "\f14c"; } +.ri-slack-fill:before { content: "\f14d"; } +.ri-slack-line:before { content: "\f14e"; } +.ri-slice-fill:before { content: "\f14f"; } +.ri-slice-line:before { content: "\f150"; } +.ri-slideshow-2-fill:before { content: "\f151"; } +.ri-slideshow-2-line:before { content: "\f152"; } +.ri-slideshow-3-fill:before { content: "\f153"; } +.ri-slideshow-3-line:before { content: "\f154"; } +.ri-slideshow-4-fill:before { content: "\f155"; } +.ri-slideshow-4-line:before { content: "\f156"; } +.ri-slideshow-fill:before { content: "\f157"; } +.ri-slideshow-line:before { content: "\f158"; } +.ri-smartphone-fill:before { content: "\f159"; } +.ri-smartphone-line:before { content: "\f15a"; } +.ri-snapchat-fill:before { content: "\f15b"; } +.ri-snapchat-line:before { content: "\f15c"; } +.ri-snowy-fill:before { content: "\f15d"; } +.ri-snowy-line:before { content: "\f15e"; } +.ri-sort-asc:before { content: "\f15f"; } +.ri-sort-desc:before { content: "\f160"; } +.ri-sound-module-fill:before { content: "\f161"; } +.ri-sound-module-line:before { content: "\f162"; } +.ri-soundcloud-fill:before { content: "\f163"; } +.ri-soundcloud-line:before { content: "\f164"; } +.ri-space-ship-fill:before { content: "\f165"; } +.ri-space-ship-line:before { content: "\f166"; } +.ri-space:before { content: "\f167"; } +.ri-spam-2-fill:before { content: "\f168"; } +.ri-spam-2-line:before { content: "\f169"; } +.ri-spam-3-fill:before { content: "\f16a"; } +.ri-spam-3-line:before { content: "\f16b"; } +.ri-spam-fill:before { content: "\f16c"; } +.ri-spam-line:before { content: "\f16d"; } +.ri-speaker-2-fill:before { content: "\f16e"; } +.ri-speaker-2-line:before { content: "\f16f"; } +.ri-speaker-3-fill:before { content: "\f170"; } +.ri-speaker-3-line:before { content: "\f171"; } +.ri-speaker-fill:before { content: "\f172"; } +.ri-speaker-line:before { content: "\f173"; } +.ri-spectrum-fill:before { content: "\f174"; } +.ri-spectrum-line:before { content: "\f175"; } +.ri-speed-fill:before { content: "\f176"; } +.ri-speed-line:before { content: "\f177"; } +.ri-speed-mini-fill:before { content: "\f178"; } +.ri-speed-mini-line:before { content: "\f179"; } +.ri-split-cells-horizontal:before { content: "\f17a"; } +.ri-split-cells-vertical:before { content: "\f17b"; } +.ri-spotify-fill:before { content: "\f17c"; } +.ri-spotify-line:before { content: "\f17d"; } +.ri-spy-fill:before { content: "\f17e"; } +.ri-spy-line:before { content: "\f17f"; } +.ri-stack-fill:before { content: "\f180"; } +.ri-stack-line:before { content: "\f181"; } +.ri-stack-overflow-fill:before { content: "\f182"; } +.ri-stack-overflow-line:before { content: "\f183"; } +.ri-stackshare-fill:before { content: "\f184"; } +.ri-stackshare-line:before { content: "\f185"; } +.ri-star-fill:before { content: "\f186"; } +.ri-star-half-fill:before { content: "\f187"; } +.ri-star-half-line:before { content: "\f188"; } +.ri-star-half-s-fill:before { content: "\f189"; } +.ri-star-half-s-line:before { content: "\f18a"; } +.ri-star-line:before { content: "\f18b"; } +.ri-star-s-fill:before { content: "\f18c"; } +.ri-star-s-line:before { content: "\f18d"; } +.ri-star-smile-fill:before { content: "\f18e"; } +.ri-star-smile-line:before { content: "\f18f"; } +.ri-steam-fill:before { content: "\f190"; } +.ri-steam-line:before { content: "\f191"; } +.ri-steering-2-fill:before { content: "\f192"; } +.ri-steering-2-line:before { content: "\f193"; } +.ri-steering-fill:before { content: "\f194"; } +.ri-steering-line:before { content: "\f195"; } +.ri-stethoscope-fill:before { content: "\f196"; } +.ri-stethoscope-line:before { content: "\f197"; } +.ri-sticky-note-2-fill:before { content: "\f198"; } +.ri-sticky-note-2-line:before { content: "\f199"; } +.ri-sticky-note-fill:before { content: "\f19a"; } +.ri-sticky-note-line:before { content: "\f19b"; } +.ri-stock-fill:before { content: "\f19c"; } +.ri-stock-line:before { content: "\f19d"; } +.ri-stop-circle-fill:before { content: "\f19e"; } +.ri-stop-circle-line:before { content: "\f19f"; } +.ri-stop-fill:before { content: "\f1a0"; } +.ri-stop-line:before { content: "\f1a1"; } +.ri-stop-mini-fill:before { content: "\f1a2"; } +.ri-stop-mini-line:before { content: "\f1a3"; } +.ri-store-2-fill:before { content: "\f1a4"; } +.ri-store-2-line:before { content: "\f1a5"; } +.ri-store-3-fill:before { content: "\f1a6"; } +.ri-store-3-line:before { content: "\f1a7"; } +.ri-store-fill:before { content: "\f1a8"; } +.ri-store-line:before { content: "\f1a9"; } +.ri-strikethrough-2:before { content: "\f1aa"; } +.ri-strikethrough:before { content: "\f1ab"; } +.ri-subscript-2:before { content: "\f1ac"; } +.ri-subscript:before { content: "\f1ad"; } +.ri-subtract-fill:before { content: "\f1ae"; } +.ri-subtract-line:before { content: "\f1af"; } +.ri-subway-fill:before { content: "\f1b0"; } +.ri-subway-line:before { content: "\f1b1"; } +.ri-subway-wifi-fill:before { content: "\f1b2"; } +.ri-subway-wifi-line:before { content: "\f1b3"; } +.ri-suitcase-2-fill:before { content: "\f1b4"; } +.ri-suitcase-2-line:before { content: "\f1b5"; } +.ri-suitcase-3-fill:before { content: "\f1b6"; } +.ri-suitcase-3-line:before { content: "\f1b7"; } +.ri-suitcase-fill:before { content: "\f1b8"; } +.ri-suitcase-line:before { content: "\f1b9"; } +.ri-sun-cloudy-fill:before { content: "\f1ba"; } +.ri-sun-cloudy-line:before { content: "\f1bb"; } +.ri-sun-fill:before { content: "\f1bc"; } +.ri-sun-foggy-fill:before { content: "\f1bd"; } +.ri-sun-foggy-line:before { content: "\f1be"; } +.ri-sun-line:before { content: "\f1bf"; } +.ri-superscript-2:before { content: "\f1c0"; } +.ri-superscript:before { content: "\f1c1"; } +.ri-surgical-mask-fill:before { content: "\f1c2"; } +.ri-surgical-mask-line:before { content: "\f1c3"; } +.ri-surround-sound-fill:before { content: "\f1c4"; } +.ri-surround-sound-line:before { content: "\f1c5"; } +.ri-survey-fill:before { content: "\f1c6"; } +.ri-survey-line:before { content: "\f1c7"; } +.ri-swap-box-fill:before { content: "\f1c8"; } +.ri-swap-box-line:before { content: "\f1c9"; } +.ri-swap-fill:before { content: "\f1ca"; } +.ri-swap-line:before { content: "\f1cb"; } +.ri-switch-fill:before { content: "\f1cc"; } +.ri-switch-line:before { content: "\f1cd"; } +.ri-sword-fill:before { content: "\f1ce"; } +.ri-sword-line:before { content: "\f1cf"; } +.ri-syringe-fill:before { content: "\f1d0"; } +.ri-syringe-line:before { content: "\f1d1"; } +.ri-t-box-fill:before { content: "\f1d2"; } +.ri-t-box-line:before { content: "\f1d3"; } +.ri-t-shirt-2-fill:before { content: "\f1d4"; } +.ri-t-shirt-2-line:before { content: "\f1d5"; } +.ri-t-shirt-air-fill:before { content: "\f1d6"; } +.ri-t-shirt-air-line:before { content: "\f1d7"; } +.ri-t-shirt-fill:before { content: "\f1d8"; } +.ri-t-shirt-line:before { content: "\f1d9"; } +.ri-table-2:before { content: "\f1da"; } +.ri-table-alt-fill:before { content: "\f1db"; } +.ri-table-alt-line:before { content: "\f1dc"; } +.ri-table-fill:before { content: "\f1dd"; } +.ri-table-line:before { content: "\f1de"; } +.ri-tablet-fill:before { content: "\f1df"; } +.ri-tablet-line:before { content: "\f1e0"; } +.ri-takeaway-fill:before { content: "\f1e1"; } +.ri-takeaway-line:before { content: "\f1e2"; } +.ri-taobao-fill:before { content: "\f1e3"; } +.ri-taobao-line:before { content: "\f1e4"; } +.ri-tape-fill:before { content: "\f1e5"; } +.ri-tape-line:before { content: "\f1e6"; } +.ri-task-fill:before { content: "\f1e7"; } +.ri-task-line:before { content: "\f1e8"; } +.ri-taxi-fill:before { content: "\f1e9"; } +.ri-taxi-line:before { content: "\f1ea"; } +.ri-taxi-wifi-fill:before { content: "\f1eb"; } +.ri-taxi-wifi-line:before { content: "\f1ec"; } +.ri-team-fill:before { content: "\f1ed"; } +.ri-team-line:before { content: "\f1ee"; } +.ri-telegram-fill:before { content: "\f1ef"; } +.ri-telegram-line:before { content: "\f1f0"; } +.ri-temp-cold-fill:before { content: "\f1f1"; } +.ri-temp-cold-line:before { content: "\f1f2"; } +.ri-temp-hot-fill:before { content: "\f1f3"; } +.ri-temp-hot-line:before { content: "\f1f4"; } +.ri-terminal-box-fill:before { content: "\f1f5"; } +.ri-terminal-box-line:before { content: "\f1f6"; } +.ri-terminal-fill:before { content: "\f1f7"; } +.ri-terminal-line:before { content: "\f1f8"; } +.ri-terminal-window-fill:before { content: "\f1f9"; } +.ri-terminal-window-line:before { content: "\f1fa"; } +.ri-test-tube-fill:before { content: "\f1fb"; } +.ri-test-tube-line:before { content: "\f1fc"; } +.ri-text-direction-l:before { content: "\f1fd"; } +.ri-text-direction-r:before { content: "\f1fe"; } +.ri-text-spacing:before { content: "\f1ff"; } +.ri-text-wrap:before { content: "\f200"; } +.ri-text:before { content: "\f201"; } +.ri-thermometer-fill:before { content: "\f202"; } +.ri-thermometer-line:before { content: "\f203"; } +.ri-thumb-down-fill:before { content: "\f204"; } +.ri-thumb-down-line:before { content: "\f205"; } +.ri-thumb-up-fill:before { content: "\f206"; } +.ri-thumb-up-line:before { content: "\f207"; } +.ri-thunderstorms-fill:before { content: "\f208"; } +.ri-thunderstorms-line:before { content: "\f209"; } +.ri-ticket-2-fill:before { content: "\f20a"; } +.ri-ticket-2-line:before { content: "\f20b"; } +.ri-ticket-fill:before { content: "\f20c"; } +.ri-ticket-line:before { content: "\f20d"; } +.ri-time-fill:before { content: "\f20e"; } +.ri-time-line:before { content: "\f20f"; } +.ri-timer-2-fill:before { content: "\f210"; } +.ri-timer-2-line:before { content: "\f211"; } +.ri-timer-fill:before { content: "\f212"; } +.ri-timer-flash-fill:before { content: "\f213"; } +.ri-timer-flash-line:before { content: "\f214"; } +.ri-timer-line:before { content: "\f215"; } +.ri-todo-fill:before { content: "\f216"; } +.ri-todo-line:before { content: "\f217"; } +.ri-toggle-fill:before { content: "\f218"; } +.ri-toggle-line:before { content: "\f219"; } +.ri-tools-fill:before { content: "\f21a"; } +.ri-tools-line:before { content: "\f21b"; } +.ri-tornado-fill:before { content: "\f21c"; } +.ri-tornado-line:before { content: "\f21d"; } +.ri-trademark-fill:before { content: "\f21e"; } +.ri-trademark-line:before { content: "\f21f"; } +.ri-traffic-light-fill:before { content: "\f220"; } +.ri-traffic-light-line:before { content: "\f221"; } +.ri-train-fill:before { content: "\f222"; } +.ri-train-line:before { content: "\f223"; } +.ri-train-wifi-fill:before { content: "\f224"; } +.ri-train-wifi-line:before { content: "\f225"; } +.ri-translate-2:before { content: "\f226"; } +.ri-translate:before { content: "\f227"; } +.ri-travesti-fill:before { content: "\f228"; } +.ri-travesti-line:before { content: "\f229"; } +.ri-treasure-map-fill:before { content: "\f22a"; } +.ri-treasure-map-line:before { content: "\f22b"; } +.ri-trello-fill:before { content: "\f22c"; } +.ri-trello-line:before { content: "\f22d"; } +.ri-trophy-fill:before { content: "\f22e"; } +.ri-trophy-line:before { content: "\f22f"; } +.ri-truck-fill:before { content: "\f230"; } +.ri-truck-line:before { content: "\f231"; } +.ri-tumblr-fill:before { content: "\f232"; } +.ri-tumblr-line:before { content: "\f233"; } +.ri-tv-2-fill:before { content: "\f234"; } +.ri-tv-2-line:before { content: "\f235"; } +.ri-tv-fill:before { content: "\f236"; } +.ri-tv-line:before { content: "\f237"; } +.ri-twitch-fill:before { content: "\f238"; } +.ri-twitch-line:before { content: "\f239"; } +.ri-twitter-fill:before { content: "\f23a"; } +.ri-twitter-line:before { content: "\f23b"; } +.ri-typhoon-fill:before { content: "\f23c"; } +.ri-typhoon-line:before { content: "\f23d"; } +.ri-u-disk-fill:before { content: "\f23e"; } +.ri-u-disk-line:before { content: "\f23f"; } +.ri-ubuntu-fill:before { content: "\f240"; } +.ri-ubuntu-line:before { content: "\f241"; } +.ri-umbrella-fill:before { content: "\f242"; } +.ri-umbrella-line:before { content: "\f243"; } +.ri-underline:before { content: "\f244"; } +.ri-uninstall-fill:before { content: "\f245"; } +.ri-uninstall-line:before { content: "\f246"; } +.ri-unsplash-fill:before { content: "\f247"; } +.ri-unsplash-line:before { content: "\f248"; } +.ri-upload-2-fill:before { content: "\f249"; } +.ri-upload-2-line:before { content: "\f24a"; } +.ri-upload-cloud-2-fill:before { content: "\f24b"; } +.ri-upload-cloud-2-line:before { content: "\f24c"; } +.ri-upload-cloud-fill:before { content: "\f24d"; } +.ri-upload-cloud-line:before { content: "\f24e"; } +.ri-upload-fill:before { content: "\f24f"; } +.ri-upload-line:before { content: "\f250"; } +.ri-usb-fill:before { content: "\f251"; } +.ri-usb-line:before { content: "\f252"; } +.ri-user-2-fill:before { content: "\f253"; } +.ri-user-2-line:before { content: "\f254"; } +.ri-user-3-fill:before { content: "\f255"; } +.ri-user-3-line:before { content: "\f256"; } +.ri-user-4-fill:before { content: "\f257"; } +.ri-user-4-line:before { content: "\f258"; } +.ri-user-5-fill:before { content: "\f259"; } +.ri-user-5-line:before { content: "\f25a"; } +.ri-user-6-fill:before { content: "\f25b"; } +.ri-user-6-line:before { content: "\f25c"; } +.ri-user-add-fill:before { content: "\f25d"; } +.ri-user-add-line:before { content: "\f25e"; } +.ri-user-fill:before { content: "\f25f"; } +.ri-user-follow-fill:before { content: "\f260"; } +.ri-user-follow-line:before { content: "\f261"; } +.ri-user-heart-fill:before { content: "\f262"; } +.ri-user-heart-line:before { content: "\f263"; } +.ri-user-line:before { content: "\f264"; } +.ri-user-location-fill:before { content: "\f265"; } +.ri-user-location-line:before { content: "\f266"; } +.ri-user-received-2-fill:before { content: "\f267"; } +.ri-user-received-2-line:before { content: "\f268"; } +.ri-user-received-fill:before { content: "\f269"; } +.ri-user-received-line:before { content: "\f26a"; } +.ri-user-search-fill:before { content: "\f26b"; } +.ri-user-search-line:before { content: "\f26c"; } +.ri-user-settings-fill:before { content: "\f26d"; } +.ri-user-settings-line:before { content: "\f26e"; } +.ri-user-shared-2-fill:before { content: "\f26f"; } +.ri-user-shared-2-line:before { content: "\f270"; } +.ri-user-shared-fill:before { content: "\f271"; } +.ri-user-shared-line:before { content: "\f272"; } +.ri-user-smile-fill:before { content: "\f273"; } +.ri-user-smile-line:before { content: "\f274"; } +.ri-user-star-fill:before { content: "\f275"; } +.ri-user-star-line:before { content: "\f276"; } +.ri-user-unfollow-fill:before { content: "\f277"; } +.ri-user-unfollow-line:before { content: "\f278"; } +.ri-user-voice-fill:before { content: "\f279"; } +.ri-user-voice-line:before { content: "\f27a"; } +.ri-video-add-fill:before { content: "\f27b"; } +.ri-video-add-line:before { content: "\f27c"; } +.ri-video-chat-fill:before { content: "\f27d"; } +.ri-video-chat-line:before { content: "\f27e"; } +.ri-video-download-fill:before { content: "\f27f"; } +.ri-video-download-line:before { content: "\f280"; } +.ri-video-fill:before { content: "\f281"; } +.ri-video-line:before { content: "\f282"; } +.ri-video-upload-fill:before { content: "\f283"; } +.ri-video-upload-line:before { content: "\f284"; } +.ri-vidicon-2-fill:before { content: "\f285"; } +.ri-vidicon-2-line:before { content: "\f286"; } +.ri-vidicon-fill:before { content: "\f287"; } +.ri-vidicon-line:before { content: "\f288"; } +.ri-vimeo-fill:before { content: "\f289"; } +.ri-vimeo-line:before { content: "\f28a"; } +.ri-vip-crown-2-fill:before { content: "\f28b"; } +.ri-vip-crown-2-line:before { content: "\f28c"; } +.ri-vip-crown-fill:before { content: "\f28d"; } +.ri-vip-crown-line:before { content: "\f28e"; } +.ri-vip-diamond-fill:before { content: "\f28f"; } +.ri-vip-diamond-line:before { content: "\f290"; } +.ri-vip-fill:before { content: "\f291"; } +.ri-vip-line:before { content: "\f292"; } +.ri-virus-fill:before { content: "\f293"; } +.ri-virus-line:before { content: "\f294"; } +.ri-visa-fill:before { content: "\f295"; } +.ri-visa-line:before { content: "\f296"; } +.ri-voice-recognition-fill:before { content: "\f297"; } +.ri-voice-recognition-line:before { content: "\f298"; } +.ri-voiceprint-fill:before { content: "\f299"; } +.ri-voiceprint-line:before { content: "\f29a"; } +.ri-volume-down-fill:before { content: "\f29b"; } +.ri-volume-down-line:before { content: "\f29c"; } +.ri-volume-mute-fill:before { content: "\f29d"; } +.ri-volume-mute-line:before { content: "\f29e"; } +.ri-volume-off-vibrate-fill:before { content: "\f29f"; } +.ri-volume-off-vibrate-line:before { content: "\f2a0"; } +.ri-volume-up-fill:before { content: "\f2a1"; } +.ri-volume-up-line:before { content: "\f2a2"; } +.ri-volume-vibrate-fill:before { content: "\f2a3"; } +.ri-volume-vibrate-line:before { content: "\f2a4"; } +.ri-vuejs-fill:before { content: "\f2a5"; } +.ri-vuejs-line:before { content: "\f2a6"; } +.ri-walk-fill:before { content: "\f2a7"; } +.ri-walk-line:before { content: "\f2a8"; } +.ri-wallet-2-fill:before { content: "\f2a9"; } +.ri-wallet-2-line:before { content: "\f2aa"; } +.ri-wallet-3-fill:before { content: "\f2ab"; } +.ri-wallet-3-line:before { content: "\f2ac"; } +.ri-wallet-fill:before { content: "\f2ad"; } +.ri-wallet-line:before { content: "\f2ae"; } +.ri-water-flash-fill:before { content: "\f2af"; } +.ri-water-flash-line:before { content: "\f2b0"; } +.ri-webcam-fill:before { content: "\f2b1"; } +.ri-webcam-line:before { content: "\f2b2"; } +.ri-wechat-2-fill:before { content: "\f2b3"; } +.ri-wechat-2-line:before { content: "\f2b4"; } +.ri-wechat-fill:before { content: "\f2b5"; } +.ri-wechat-line:before { content: "\f2b6"; } +.ri-wechat-pay-fill:before { content: "\f2b7"; } +.ri-wechat-pay-line:before { content: "\f2b8"; } +.ri-weibo-fill:before { content: "\f2b9"; } +.ri-weibo-line:before { content: "\f2ba"; } +.ri-whatsapp-fill:before { content: "\f2bb"; } +.ri-whatsapp-line:before { content: "\f2bc"; } +.ri-wheelchair-fill:before { content: "\f2bd"; } +.ri-wheelchair-line:before { content: "\f2be"; } +.ri-wifi-fill:before { content: "\f2bf"; } +.ri-wifi-line:before { content: "\f2c0"; } +.ri-wifi-off-fill:before { content: "\f2c1"; } +.ri-wifi-off-line:before { content: "\f2c2"; } +.ri-window-2-fill:before { content: "\f2c3"; } +.ri-window-2-line:before { content: "\f2c4"; } +.ri-window-fill:before { content: "\f2c5"; } +.ri-window-line:before { content: "\f2c6"; } +.ri-windows-fill:before { content: "\f2c7"; } +.ri-windows-line:before { content: "\f2c8"; } +.ri-windy-fill:before { content: "\f2c9"; } +.ri-windy-line:before { content: "\f2ca"; } +.ri-wireless-charging-fill:before { content: "\f2cb"; } +.ri-wireless-charging-line:before { content: "\f2cc"; } +.ri-women-fill:before { content: "\f2cd"; } +.ri-women-line:before { content: "\f2ce"; } +.ri-wubi-input:before { content: "\f2cf"; } +.ri-xbox-fill:before { content: "\f2d0"; } +.ri-xbox-line:before { content: "\f2d1"; } +.ri-xing-fill:before { content: "\f2d2"; } +.ri-xing-line:before { content: "\f2d3"; } +.ri-youtube-fill:before { content: "\f2d4"; } +.ri-youtube-line:before { content: "\f2d5"; } +.ri-zcool-fill:before { content: "\f2d6"; } +.ri-zcool-line:before { content: "\f2d7"; } +.ri-zhihu-fill:before { content: "\f2d8"; } +.ri-zhihu-line:before { content: "\f2d9"; } +.ri-zoom-in-fill:before { content: "\f2da"; } +.ri-zoom-in-line:before { content: "\f2db"; } +.ri-zoom-out-fill:before { content: "\f2dc"; } +.ri-zoom-out-line:before { content: "\f2dd"; } +.ri-zzz-fill:before { content: "\f2de"; } +.ri-zzz-line:before { content: "\f2df"; } +.ri-arrow-down-double-fill:before { content: "\f2e0"; } +.ri-arrow-down-double-line:before { content: "\f2e1"; } +.ri-arrow-left-double-fill:before { content: "\f2e2"; } +.ri-arrow-left-double-line:before { content: "\f2e3"; } +.ri-arrow-right-double-fill:before { content: "\f2e4"; } +.ri-arrow-right-double-line:before { content: "\f2e5"; } +.ri-arrow-turn-back-fill:before { content: "\f2e6"; } +.ri-arrow-turn-back-line:before { content: "\f2e7"; } +.ri-arrow-turn-forward-fill:before { content: "\f2e8"; } +.ri-arrow-turn-forward-line:before { content: "\f2e9"; } +.ri-arrow-up-double-fill:before { content: "\f2ea"; } +.ri-arrow-up-double-line:before { content: "\f2eb"; } +.ri-bard-fill:before { content: "\f2ec"; } +.ri-bard-line:before { content: "\f2ed"; } +.ri-bootstrap-fill:before { content: "\f2ee"; } +.ri-bootstrap-line:before { content: "\f2ef"; } +.ri-box-1-fill:before { content: "\f2f0"; } +.ri-box-1-line:before { content: "\f2f1"; } +.ri-box-2-fill:before { content: "\f2f2"; } +.ri-box-2-line:before { content: "\f2f3"; } +.ri-box-3-fill:before { content: "\f2f4"; } +.ri-box-3-line:before { content: "\f2f5"; } +.ri-brain-fill:before { content: "\f2f6"; } +.ri-brain-line:before { content: "\f2f7"; } +.ri-candle-fill:before { content: "\f2f8"; } +.ri-candle-line:before { content: "\f2f9"; } +.ri-cash-fill:before { content: "\f2fa"; } +.ri-cash-line:before { content: "\f2fb"; } +.ri-contract-left-fill:before { content: "\f2fc"; } +.ri-contract-left-line:before { content: "\f2fd"; } +.ri-contract-left-right-fill:before { content: "\f2fe"; } +.ri-contract-left-right-line:before { content: "\f2ff"; } +.ri-contract-right-fill:before { content: "\f300"; } +.ri-contract-right-line:before { content: "\f301"; } +.ri-contract-up-down-fill:before { content: "\f302"; } +.ri-contract-up-down-line:before { content: "\f303"; } +.ri-copilot-fill:before { content: "\f304"; } +.ri-copilot-line:before { content: "\f305"; } +.ri-corner-down-left-fill:before { content: "\f306"; } +.ri-corner-down-left-line:before { content: "\f307"; } +.ri-corner-down-right-fill:before { content: "\f308"; } +.ri-corner-down-right-line:before { content: "\f309"; } +.ri-corner-left-down-fill:before { content: "\f30a"; } +.ri-corner-left-down-line:before { content: "\f30b"; } +.ri-corner-left-up-fill:before { content: "\f30c"; } +.ri-corner-left-up-line:before { content: "\f30d"; } +.ri-corner-right-down-fill:before { content: "\f30e"; } +.ri-corner-right-down-line:before { content: "\f30f"; } +.ri-corner-right-up-fill:before { content: "\f310"; } +.ri-corner-right-up-line:before { content: "\f311"; } +.ri-corner-up-left-double-fill:before { content: "\f312"; } +.ri-corner-up-left-double-line:before { content: "\f313"; } +.ri-corner-up-left-fill:before { content: "\f314"; } +.ri-corner-up-left-line:before { content: "\f315"; } +.ri-corner-up-right-double-fill:before { content: "\f316"; } +.ri-corner-up-right-double-line:before { content: "\f317"; } +.ri-corner-up-right-fill:before { content: "\f318"; } +.ri-corner-up-right-line:before { content: "\f319"; } +.ri-cross-fill:before { content: "\f31a"; } +.ri-cross-line:before { content: "\f31b"; } +.ri-edge-new-fill:before { content: "\f31c"; } +.ri-edge-new-line:before { content: "\f31d"; } +.ri-equal-fill:before { content: "\f31e"; } +.ri-equal-line:before { content: "\f31f"; } +.ri-expand-left-fill:before { content: "\f320"; } +.ri-expand-left-line:before { content: "\f321"; } +.ri-expand-left-right-fill:before { content: "\f322"; } +.ri-expand-left-right-line:before { content: "\f323"; } +.ri-expand-right-fill:before { content: "\f324"; } +.ri-expand-right-line:before { content: "\f325"; } +.ri-expand-up-down-fill:before { content: "\f326"; } +.ri-expand-up-down-line:before { content: "\f327"; } +.ri-flickr-fill:before { content: "\f328"; } +.ri-flickr-line:before { content: "\f329"; } +.ri-forward-10-fill:before { content: "\f32a"; } +.ri-forward-10-line:before { content: "\f32b"; } +.ri-forward-15-fill:before { content: "\f32c"; } +.ri-forward-15-line:before { content: "\f32d"; } +.ri-forward-30-fill:before { content: "\f32e"; } +.ri-forward-30-line:before { content: "\f32f"; } +.ri-forward-5-fill:before { content: "\f330"; } +.ri-forward-5-line:before { content: "\f331"; } +.ri-graduation-cap-fill:before { content: "\f332"; } +.ri-graduation-cap-line:before { content: "\f333"; } +.ri-home-office-fill:before { content: "\f334"; } +.ri-home-office-line:before { content: "\f335"; } +.ri-hourglass-2-fill:before { content: "\f336"; } +.ri-hourglass-2-line:before { content: "\f337"; } +.ri-hourglass-fill:before { content: "\f338"; } +.ri-hourglass-line:before { content: "\f339"; } +.ri-javascript-fill:before { content: "\f33a"; } +.ri-javascript-line:before { content: "\f33b"; } +.ri-loop-left-fill:before { content: "\f33c"; } +.ri-loop-left-line:before { content: "\f33d"; } +.ri-loop-right-fill:before { content: "\f33e"; } +.ri-loop-right-line:before { content: "\f33f"; } +.ri-memories-fill:before { content: "\f340"; } +.ri-memories-line:before { content: "\f341"; } +.ri-meta-fill:before { content: "\f342"; } +.ri-meta-line:before { content: "\f343"; } +.ri-microsoft-loop-fill:before { content: "\f344"; } +.ri-microsoft-loop-line:before { content: "\f345"; } +.ri-nft-fill:before { content: "\f346"; } +.ri-nft-line:before { content: "\f347"; } +.ri-notion-fill:before { content: "\f348"; } +.ri-notion-line:before { content: "\f349"; } +.ri-openai-fill:before { content: "\f34a"; } +.ri-openai-line:before { content: "\f34b"; } +.ri-overline:before { content: "\f34c"; } +.ri-p2p-fill:before { content: "\f34d"; } +.ri-p2p-line:before { content: "\f34e"; } +.ri-presentation-fill:before { content: "\f34f"; } +.ri-presentation-line:before { content: "\f350"; } +.ri-replay-10-fill:before { content: "\f351"; } +.ri-replay-10-line:before { content: "\f352"; } +.ri-replay-15-fill:before { content: "\f353"; } +.ri-replay-15-line:before { content: "\f354"; } +.ri-replay-30-fill:before { content: "\f355"; } +.ri-replay-30-line:before { content: "\f356"; } +.ri-replay-5-fill:before { content: "\f357"; } +.ri-replay-5-line:before { content: "\f358"; } +.ri-school-fill:before { content: "\f359"; } +.ri-school-line:before { content: "\f35a"; } +.ri-shining-2-fill:before { content: "\f35b"; } +.ri-shining-2-line:before { content: "\f35c"; } +.ri-shining-fill:before { content: "\f35d"; } +.ri-shining-line:before { content: "\f35e"; } +.ri-sketching:before { content: "\f35f"; } +.ri-skip-down-fill:before { content: "\f360"; } +.ri-skip-down-line:before { content: "\f361"; } +.ri-skip-left-fill:before { content: "\f362"; } +.ri-skip-left-line:before { content: "\f363"; } +.ri-skip-right-fill:before { content: "\f364"; } +.ri-skip-right-line:before { content: "\f365"; } +.ri-skip-up-fill:before { content: "\f366"; } +.ri-skip-up-line:before { content: "\f367"; } +.ri-slow-down-fill:before { content: "\f368"; } +.ri-slow-down-line:before { content: "\f369"; } +.ri-sparkling-2-fill:before { content: "\f36a"; } +.ri-sparkling-2-line:before { content: "\f36b"; } +.ri-sparkling-fill:before { content: "\f36c"; } +.ri-sparkling-line:before { content: "\f36d"; } +.ri-speak-fill:before { content: "\f36e"; } +.ri-speak-line:before { content: "\f36f"; } +.ri-speed-up-fill:before { content: "\f370"; } +.ri-speed-up-line:before { content: "\f371"; } +.ri-tiktok-fill:before { content: "\f372"; } +.ri-tiktok-line:before { content: "\f373"; } +.ri-token-swap-fill:before { content: "\f374"; } +.ri-token-swap-line:before { content: "\f375"; } +.ri-unpin-fill:before { content: "\f376"; } +.ri-unpin-line:before { content: "\f377"; } +.ri-wechat-channels-fill:before { content: "\f378"; } +.ri-wechat-channels-line:before { content: "\f379"; } +.ri-wordpress-fill:before { content: "\f37a"; } +.ri-wordpress-line:before { content: "\f37b"; } +.ri-blender-fill:before { content: "\f37c"; } +.ri-blender-line:before { content: "\f37d"; } +.ri-emoji-sticker-fill:before { content: "\f37e"; } +.ri-emoji-sticker-line:before { content: "\f37f"; } +.ri-git-close-pull-request-fill:before { content: "\f380"; } +.ri-git-close-pull-request-line:before { content: "\f381"; } +.ri-instance-fill:before { content: "\f382"; } +.ri-instance-line:before { content: "\f383"; } +.ri-megaphone-fill:before { content: "\f384"; } +.ri-megaphone-line:before { content: "\f385"; } +.ri-pass-expired-fill:before { content: "\f386"; } +.ri-pass-expired-line:before { content: "\f387"; } +.ri-pass-pending-fill:before { content: "\f388"; } +.ri-pass-pending-line:before { content: "\f389"; } +.ri-pass-valid-fill:before { content: "\f38a"; } +.ri-pass-valid-line:before { content: "\f38b"; } +.ri-ai-generate:before { content: "\f38c"; } +.ri-calendar-close-fill:before { content: "\f38d"; } +.ri-calendar-close-line:before { content: "\f38e"; } +.ri-draggable:before { content: "\f38f"; } +.ri-font-family:before { content: "\f390"; } +.ri-font-mono:before { content: "\f391"; } +.ri-font-sans-serif:before { content: "\f392"; } +.ri-font-sans:before { content: "\f393"; } +.ri-hard-drive-3-fill:before { content: "\f394"; } +.ri-hard-drive-3-line:before { content: "\f395"; } +.ri-kick-fill:before { content: "\f396"; } +.ri-kick-line:before { content: "\f397"; } +.ri-list-check-3:before { content: "\f398"; } +.ri-list-indefinite:before { content: "\f399"; } +.ri-list-ordered-2:before { content: "\f39a"; } +.ri-list-radio:before { content: "\f39b"; } +.ri-openbase-fill:before { content: "\f39c"; } +.ri-openbase-line:before { content: "\f39d"; } +.ri-planet-fill:before { content: "\f39e"; } +.ri-planet-line:before { content: "\f39f"; } +.ri-prohibited-fill:before { content: "\f3a0"; } +.ri-prohibited-line:before { content: "\f3a1"; } +.ri-quote-text:before { content: "\f3a2"; } +.ri-seo-fill:before { content: "\f3a3"; } +.ri-seo-line:before { content: "\f3a4"; } +.ri-slash-commands:before { content: "\f3a5"; } +.ri-archive-2-fill:before { content: "\f3a6"; } +.ri-archive-2-line:before { content: "\f3a7"; } +.ri-inbox-2-fill:before { content: "\f3a8"; } +.ri-inbox-2-line:before { content: "\f3a9"; } +.ri-shake-hands-fill:before { content: "\f3aa"; } +.ri-shake-hands-line:before { content: "\f3ab"; } +.ri-supabase-fill:before { content: "\f3ac"; } +.ri-supabase-line:before { content: "\f3ad"; } +.ri-water-percent-fill:before { content: "\f3ae"; } +.ri-water-percent-line:before { content: "\f3af"; } +.ri-yuque-fill:before { content: "\f3b0"; } +.ri-yuque-line:before { content: "\f3b1"; } +.ri-crosshair-2-fill:before { content: "\f3b2"; } +.ri-crosshair-2-line:before { content: "\f3b3"; } +.ri-crosshair-fill:before { content: "\f3b4"; } +.ri-crosshair-line:before { content: "\f3b5"; } +.ri-file-close-fill:before { content: "\f3b6"; } +.ri-file-close-line:before { content: "\f3b7"; } +.ri-infinity-fill:before { content: "\f3b8"; } +.ri-infinity-line:before { content: "\f3b9"; } +.ri-rfid-fill:before { content: "\f3ba"; } +.ri-rfid-line:before { content: "\f3bb"; } +.ri-slash-commands-2:before { content: "\f3bc"; } +.ri-user-forbid-fill:before { content: "\f3bd"; } +.ri-user-forbid-line:before { content: "\f3be"; } +.ri-beer-fill:before { content: "\f3bf"; } +.ri-beer-line:before { content: "\f3c0"; } +.ri-circle-fill:before { content: "\f3c1"; } +.ri-circle-line:before { content: "\f3c2"; } +.ri-dropdown-list:before { content: "\f3c3"; } +.ri-file-image-fill:before { content: "\f3c4"; } +.ri-file-image-line:before { content: "\f3c5"; } +.ri-file-pdf-2-fill:before { content: "\f3c6"; } +.ri-file-pdf-2-line:before { content: "\f3c7"; } +.ri-file-video-fill:before { content: "\f3c8"; } +.ri-file-video-line:before { content: "\f3c9"; } +.ri-folder-image-fill:before { content: "\f3ca"; } +.ri-folder-image-line:before { content: "\f3cb"; } +.ri-folder-video-fill:before { content: "\f3cc"; } +.ri-folder-video-line:before { content: "\f3cd"; } +.ri-hexagon-fill:before { content: "\f3ce"; } +.ri-hexagon-line:before { content: "\f3cf"; } +.ri-menu-search-fill:before { content: "\f3d0"; } +.ri-menu-search-line:before { content: "\f3d1"; } +.ri-octagon-fill:before { content: "\f3d2"; } +.ri-octagon-line:before { content: "\f3d3"; } +.ri-pentagon-fill:before { content: "\f3d4"; } +.ri-pentagon-line:before { content: "\f3d5"; } +.ri-rectangle-fill:before { content: "\f3d6"; } +.ri-rectangle-line:before { content: "\f3d7"; } +.ri-robot-2-fill:before { content: "\f3d8"; } +.ri-robot-2-line:before { content: "\f3d9"; } +.ri-shapes-fill:before { content: "\f3da"; } +.ri-shapes-line:before { content: "\f3db"; } +.ri-square-fill:before { content: "\f3dc"; } +.ri-square-line:before { content: "\f3dd"; } +.ri-tent-fill:before { content: "\f3de"; } +.ri-tent-line:before { content: "\f3df"; } +.ri-threads-fill:before { content: "\f3e0"; } +.ri-threads-line:before { content: "\f3e1"; } +.ri-tree-fill:before { content: "\f3e2"; } +.ri-tree-line:before { content: "\f3e3"; } +.ri-triangle-fill:before { content: "\f3e4"; } +.ri-triangle-line:before { content: "\f3e5"; } +.ri-twitter-x-fill:before { content: "\f3e6"; } +.ri-twitter-x-line:before { content: "\f3e7"; } +.ri-verified-badge-fill:before { content: "\f3e8"; } +.ri-verified-badge-line:before { content: "\f3e9"; } +.ri-armchair-fill:before { content: "\f3ea"; } +.ri-armchair-line:before { content: "\f3eb"; } +.ri-bnb-fill:before { content: "\f3ec"; } +.ri-bnb-line:before { content: "\f3ed"; } +.ri-bread-fill:before { content: "\f3ee"; } +.ri-bread-line:before { content: "\f3ef"; } +.ri-btc-fill:before { content: "\f3f0"; } +.ri-btc-line:before { content: "\f3f1"; } +.ri-calendar-schedule-fill:before { content: "\f3f2"; } +.ri-calendar-schedule-line:before { content: "\f3f3"; } +.ri-dice-1-fill:before { content: "\f3f4"; } +.ri-dice-1-line:before { content: "\f3f5"; } +.ri-dice-2-fill:before { content: "\f3f6"; } +.ri-dice-2-line:before { content: "\f3f7"; } +.ri-dice-3-fill:before { content: "\f3f8"; } +.ri-dice-3-line:before { content: "\f3f9"; } +.ri-dice-4-fill:before { content: "\f3fa"; } +.ri-dice-4-line:before { content: "\f3fb"; } +.ri-dice-5-fill:before { content: "\f3fc"; } +.ri-dice-5-line:before { content: "\f3fd"; } +.ri-dice-6-fill:before { content: "\f3fe"; } +.ri-dice-6-line:before { content: "\f3ff"; } +.ri-dice-fill:before { content: "\f400"; } +.ri-dice-line:before { content: "\f401"; } +.ri-drinks-fill:before { content: "\f402"; } +.ri-drinks-line:before { content: "\f403"; } +.ri-equalizer-2-fill:before { content: "\f404"; } +.ri-equalizer-2-line:before { content: "\f405"; } +.ri-equalizer-3-fill:before { content: "\f406"; } +.ri-equalizer-3-line:before { content: "\f407"; } +.ri-eth-fill:before { content: "\f408"; } +.ri-eth-line:before { content: "\f409"; } +.ri-flower-fill:before { content: "\f40a"; } +.ri-flower-line:before { content: "\f40b"; } +.ri-glasses-2-fill:before { content: "\f40c"; } +.ri-glasses-2-line:before { content: "\f40d"; } +.ri-glasses-fill:before { content: "\f40e"; } +.ri-glasses-line:before { content: "\f40f"; } +.ri-goggles-fill:before { content: "\f410"; } +.ri-goggles-line:before { content: "\f411"; } +.ri-image-circle-fill:before { content: "\f412"; } +.ri-image-circle-line:before { content: "\f413"; } +.ri-info-i:before { content: "\f414"; } +.ri-money-rupee-circle-fill:before { content: "\f415"; } +.ri-money-rupee-circle-line:before { content: "\f416"; } +.ri-news-fill:before { content: "\f417"; } +.ri-news-line:before { content: "\f418"; } +.ri-robot-3-fill:before { content: "\f419"; } +.ri-robot-3-line:before { content: "\f41a"; } +.ri-share-2-fill:before { content: "\f41b"; } +.ri-share-2-line:before { content: "\f41c"; } +.ri-sofa-fill:before { content: "\f41d"; } +.ri-sofa-line:before { content: "\f41e"; } +.ri-svelte-fill:before { content: "\f41f"; } +.ri-svelte-line:before { content: "\f420"; } +.ri-vk-fill:before { content: "\f421"; } +.ri-vk-line:before { content: "\f422"; } +.ri-xrp-fill:before { content: "\f423"; } +.ri-xrp-line:before { content: "\f424"; } +.ri-xtz-fill:before { content: "\f425"; } +.ri-xtz-line:before { content: "\f426"; } +.ri-archive-stack-fill:before { content: "\f427"; } +.ri-archive-stack-line:before { content: "\f428"; } +.ri-bowl-fill:before { content: "\f429"; } +.ri-bowl-line:before { content: "\f42a"; } +.ri-calendar-view:before { content: "\f42b"; } +.ri-carousel-view:before { content: "\f42c"; } +.ri-code-block:before { content: "\f42d"; } +.ri-color-filter-fill:before { content: "\f42e"; } +.ri-color-filter-line:before { content: "\f42f"; } +.ri-contacts-book-3-fill:before { content: "\f430"; } +.ri-contacts-book-3-line:before { content: "\f431"; } +.ri-contract-fill:before { content: "\f432"; } +.ri-contract-line:before { content: "\f433"; } +.ri-drinks-2-fill:before { content: "\f434"; } +.ri-drinks-2-line:before { content: "\f435"; } +.ri-export-fill:before { content: "\f436"; } +.ri-export-line:before { content: "\f437"; } +.ri-file-check-fill:before { content: "\f438"; } +.ri-file-check-line:before { content: "\f439"; } +.ri-focus-mode:before { content: "\f43a"; } +.ri-folder-6-fill:before { content: "\f43b"; } +.ri-folder-6-line:before { content: "\f43c"; } +.ri-folder-check-fill:before { content: "\f43d"; } +.ri-folder-check-line:before { content: "\f43e"; } +.ri-folder-close-fill:before { content: "\f43f"; } +.ri-folder-close-line:before { content: "\f440"; } +.ri-folder-cloud-fill:before { content: "\f441"; } +.ri-folder-cloud-line:before { content: "\f442"; } +.ri-gallery-view-2:before { content: "\f443"; } +.ri-gallery-view:before { content: "\f444"; } +.ri-hand:before { content: "\f445"; } +.ri-import-fill:before { content: "\f446"; } +.ri-import-line:before { content: "\f447"; } +.ri-information-2-fill:before { content: "\f448"; } +.ri-information-2-line:before { content: "\f449"; } +.ri-kanban-view-2:before { content: "\f44a"; } +.ri-kanban-view:before { content: "\f44b"; } +.ri-list-view:before { content: "\f44c"; } +.ri-lock-star-fill:before { content: "\f44d"; } +.ri-lock-star-line:before { content: "\f44e"; } +.ri-puzzle-2-fill:before { content: "\f44f"; } +.ri-puzzle-2-line:before { content: "\f450"; } +.ri-puzzle-fill:before { content: "\f451"; } +.ri-puzzle-line:before { content: "\f452"; } +.ri-ram-2-fill:before { content: "\f453"; } +.ri-ram-2-line:before { content: "\f454"; } +.ri-ram-fill:before { content: "\f455"; } +.ri-ram-line:before { content: "\f456"; } +.ri-receipt-fill:before { content: "\f457"; } +.ri-receipt-line:before { content: "\f458"; } +.ri-shadow-fill:before { content: "\f459"; } +.ri-shadow-line:before { content: "\f45a"; } +.ri-sidebar-fold-fill:before { content: "\f45b"; } +.ri-sidebar-fold-line:before { content: "\f45c"; } +.ri-sidebar-unfold-fill:before { content: "\f45d"; } +.ri-sidebar-unfold-line:before { content: "\f45e"; } +.ri-slideshow-view:before { content: "\f45f"; } +.ri-sort-alphabet-asc:before { content: "\f460"; } +.ri-sort-alphabet-desc:before { content: "\f461"; } +.ri-sort-number-asc:before { content: "\f462"; } +.ri-sort-number-desc:before { content: "\f463"; } +.ri-stacked-view:before { content: "\f464"; } +.ri-sticky-note-add-fill:before { content: "\f465"; } +.ri-sticky-note-add-line:before { content: "\f466"; } +.ri-swap-2-fill:before { content: "\f467"; } +.ri-swap-2-line:before { content: "\f468"; } +.ri-swap-3-fill:before { content: "\f469"; } +.ri-swap-3-line:before { content: "\f46a"; } +.ri-table-3:before { content: "\f46b"; } +.ri-table-view:before { content: "\f46c"; } +.ri-text-block:before { content: "\f46d"; } +.ri-text-snippet:before { content: "\f46e"; } +.ri-timeline-view:before { content: "\f46f"; } +.ri-blogger-fill:before { content: "\f470"; } +.ri-blogger-line:before { content: "\f471"; } +.ri-chat-thread-fill:before { content: "\f472"; } +.ri-chat-thread-line:before { content: "\f473"; } +.ri-discount-percent-fill:before { content: "\f474"; } +.ri-discount-percent-line:before { content: "\f475"; } +.ri-exchange-2-fill:before { content: "\f476"; } +.ri-exchange-2-line:before { content: "\f477"; } +.ri-git-fork-fill:before { content: "\f478"; } +.ri-git-fork-line:before { content: "\f479"; } +.ri-input-field:before { content: "\f47a"; } +.ri-progress-1-fill:before { content: "\f47b"; } +.ri-progress-1-line:before { content: "\f47c"; } +.ri-progress-2-fill:before { content: "\f47d"; } +.ri-progress-2-line:before { content: "\f47e"; } +.ri-progress-3-fill:before { content: "\f47f"; } +.ri-progress-3-line:before { content: "\f480"; } +.ri-progress-4-fill:before { content: "\f481"; } +.ri-progress-4-line:before { content: "\f482"; } +.ri-progress-5-fill:before { content: "\f483"; } +.ri-progress-5-line:before { content: "\f484"; } +.ri-progress-6-fill:before { content: "\f485"; } +.ri-progress-6-line:before { content: "\f486"; } +.ri-progress-7-fill:before { content: "\f487"; } +.ri-progress-7-line:before { content: "\f488"; } +.ri-progress-8-fill:before { content: "\f489"; } +.ri-progress-8-line:before { content: "\f48a"; } +.ri-remix-run-fill:before { content: "\f48b"; } +.ri-remix-run-line:before { content: "\f48c"; } +.ri-signpost-fill:before { content: "\f48d"; } +.ri-signpost-line:before { content: "\f48e"; } +.ri-time-zone-fill:before { content: "\f48f"; } +.ri-time-zone-line:before { content: "\f490"; } +.ri-arrow-down-wide-fill:before { content: "\f491"; } +.ri-arrow-down-wide-line:before { content: "\f492"; } +.ri-arrow-left-wide-fill:before { content: "\f493"; } +.ri-arrow-left-wide-line:before { content: "\f494"; } +.ri-arrow-right-wide-fill:before { content: "\f495"; } +.ri-arrow-right-wide-line:before { content: "\f496"; } +.ri-arrow-up-wide-fill:before { content: "\f497"; } +.ri-arrow-up-wide-line:before { content: "\f498"; } +.ri-bluesky-fill:before { content: "\f499"; } +.ri-bluesky-line:before { content: "\f49a"; } +.ri-expand-height-fill:before { content: "\f49b"; } +.ri-expand-height-line:before { content: "\f49c"; } +.ri-expand-width-fill:before { content: "\f49d"; } +.ri-expand-width-line:before { content: "\f49e"; } +.ri-forward-end-fill:before { content: "\f49f"; } +.ri-forward-end-line:before { content: "\f4a0"; } +.ri-forward-end-mini-fill:before { content: "\f4a1"; } +.ri-forward-end-mini-line:before { content: "\f4a2"; } +.ri-friendica-fill:before { content: "\f4a3"; } +.ri-friendica-line:before { content: "\f4a4"; } +.ri-git-pr-draft-fill:before { content: "\f4a5"; } +.ri-git-pr-draft-line:before { content: "\f4a6"; } +.ri-play-reverse-fill:before { content: "\f4a7"; } +.ri-play-reverse-line:before { content: "\f4a8"; } +.ri-play-reverse-mini-fill:before { content: "\f4a9"; } +.ri-play-reverse-mini-line:before { content: "\f4aa"; } +.ri-rewind-start-fill:before { content: "\f4ab"; } +.ri-rewind-start-line:before { content: "\f4ac"; } +.ri-rewind-start-mini-fill:before { content: "\f4ad"; } +.ri-rewind-start-mini-line:before { content: "\f4ae"; } +.ri-scroll-to-bottom-fill:before { content: "\f4af"; } +.ri-scroll-to-bottom-line:before { content: "\f4b0"; } +.ri-add-large-fill:before { content: "\f4b1"; } +.ri-add-large-line:before { content: "\f4b2"; } +.ri-aed-electrodes-fill:before { content: "\f4b3"; } +.ri-aed-electrodes-line:before { content: "\f4b4"; } +.ri-aed-fill:before { content: "\f4b5"; } +.ri-aed-line:before { content: "\f4b6"; } +.ri-alibaba-cloud-fill:before { content: "\f4b7"; } +.ri-alibaba-cloud-line:before { content: "\f4b8"; } +.ri-align-item-bottom-fill:before { content: "\f4b9"; } +.ri-align-item-bottom-line:before { content: "\f4ba"; } +.ri-align-item-horizontal-center-fill:before { content: "\f4bb"; } +.ri-align-item-horizontal-center-line:before { content: "\f4bc"; } +.ri-align-item-left-fill:before { content: "\f4bd"; } +.ri-align-item-left-line:before { content: "\f4be"; } +.ri-align-item-right-fill:before { content: "\f4bf"; } +.ri-align-item-right-line:before { content: "\f4c0"; } +.ri-align-item-top-fill:before { content: "\f4c1"; } +.ri-align-item-top-line:before { content: "\f4c2"; } +.ri-align-item-vertical-center-fill:before { content: "\f4c3"; } +.ri-align-item-vertical-center-line:before { content: "\f4c4"; } +.ri-apps-2-add-fill:before { content: "\f4c5"; } +.ri-apps-2-add-line:before { content: "\f4c6"; } +.ri-close-large-fill:before { content: "\f4c7"; } +.ri-close-large-line:before { content: "\f4c8"; } +.ri-collapse-diagonal-2-fill:before { content: "\f4c9"; } +.ri-collapse-diagonal-2-line:before { content: "\f4ca"; } +.ri-collapse-diagonal-fill:before { content: "\f4cb"; } +.ri-collapse-diagonal-line:before { content: "\f4cc"; } +.ri-dashboard-horizontal-fill:before { content: "\f4cd"; } +.ri-dashboard-horizontal-line:before { content: "\f4ce"; } +.ri-expand-diagonal-2-fill:before { content: "\f4cf"; } +.ri-expand-diagonal-2-line:before { content: "\f4d0"; } +.ri-expand-diagonal-fill:before { content: "\f4d1"; } +.ri-expand-diagonal-line:before { content: "\f4d2"; } +.ri-firebase-fill:before { content: "\f4d3"; } +.ri-firebase-line:before { content: "\f4d4"; } +.ri-flip-horizontal-2-fill:before { content: "\f4d5"; } +.ri-flip-horizontal-2-line:before { content: "\f4d6"; } +.ri-flip-horizontal-fill:before { content: "\f4d7"; } +.ri-flip-horizontal-line:before { content: "\f4d8"; } +.ri-flip-vertical-2-fill:before { content: "\f4d9"; } +.ri-flip-vertical-2-line:before { content: "\f4da"; } +.ri-flip-vertical-fill:before { content: "\f4db"; } +.ri-flip-vertical-line:before { content: "\f4dc"; } +.ri-formula:before { content: "\f4dd"; } +.ri-function-add-fill:before { content: "\f4de"; } +.ri-function-add-line:before { content: "\f4df"; } +.ri-goblet-2-fill:before { content: "\f4e0"; } +.ri-goblet-2-line:before { content: "\f4e1"; } +.ri-golf-ball-fill:before { content: "\f4e2"; } +.ri-golf-ball-line:before { content: "\f4e3"; } +.ri-group-3-fill:before { content: "\f4e4"; } +.ri-group-3-line:before { content: "\f4e5"; } +.ri-heart-add-2-fill:before { content: "\f4e6"; } +.ri-heart-add-2-line:before { content: "\f4e7"; } +.ri-id-card-fill:before { content: "\f4e8"; } +.ri-id-card-line:before { content: "\f4e9"; } +.ri-information-off-fill:before { content: "\f4ea"; } +.ri-information-off-line:before { content: "\f4eb"; } +.ri-java-fill:before { content: "\f4ec"; } +.ri-java-line:before { content: "\f4ed"; } +.ri-layout-grid-2-fill:before { content: "\f4ee"; } +.ri-layout-grid-2-line:before { content: "\f4ef"; } +.ri-layout-horizontal-fill:before { content: "\f4f0"; } +.ri-layout-horizontal-line:before { content: "\f4f1"; } +.ri-layout-vertical-fill:before { content: "\f4f2"; } +.ri-layout-vertical-line:before { content: "\f4f3"; } +.ri-menu-fold-2-fill:before { content: "\f4f4"; } +.ri-menu-fold-2-line:before { content: "\f4f5"; } +.ri-menu-fold-3-fill:before { content: "\f4f6"; } +.ri-menu-fold-3-line:before { content: "\f4f7"; } +.ri-menu-fold-4-fill:before { content: "\f4f8"; } +.ri-menu-fold-4-line:before { content: "\f4f9"; } +.ri-menu-unfold-2-fill:before { content: "\f4fa"; } +.ri-menu-unfold-2-line:before { content: "\f4fb"; } +.ri-menu-unfold-3-fill:before { content: "\f4fc"; } +.ri-menu-unfold-3-line:before { content: "\f4fd"; } +.ri-menu-unfold-4-fill:before { content: "\f4fe"; } +.ri-menu-unfold-4-line:before { content: "\f4ff"; } +.ri-mobile-download-fill:before { content: "\f500"; } +.ri-mobile-download-line:before { content: "\f501"; } +.ri-nextjs-fill:before { content: "\f502"; } +.ri-nextjs-line:before { content: "\f503"; } +.ri-nodejs-fill:before { content: "\f504"; } +.ri-nodejs-line:before { content: "\f505"; } +.ri-pause-large-fill:before { content: "\f506"; } +.ri-pause-large-line:before { content: "\f507"; } +.ri-play-large-fill:before { content: "\f508"; } +.ri-play-large-line:before { content: "\f509"; } +.ri-play-reverse-large-fill:before { content: "\f50a"; } +.ri-play-reverse-large-line:before { content: "\f50b"; } +.ri-police-badge-fill:before { content: "\f50c"; } +.ri-police-badge-line:before { content: "\f50d"; } +.ri-prohibited-2-fill:before { content: "\f50e"; } +.ri-prohibited-2-line:before { content: "\f50f"; } +.ri-shopping-bag-4-fill:before { content: "\f510"; } +.ri-shopping-bag-4-line:before { content: "\f511"; } +.ri-snowflake-fill:before { content: "\f512"; } +.ri-snowflake-line:before { content: "\f513"; } +.ri-square-root:before { content: "\f514"; } +.ri-stop-large-fill:before { content: "\f515"; } +.ri-stop-large-line:before { content: "\f516"; } +.ri-tailwind-css-fill:before { content: "\f517"; } +.ri-tailwind-css-line:before { content: "\f518"; } +.ri-tooth-fill:before { content: "\f519"; } +.ri-tooth-line:before { content: "\f51a"; } +.ri-video-off-fill:before { content: "\f51b"; } +.ri-video-off-line:before { content: "\f51c"; } +.ri-video-on-fill:before { content: "\f51d"; } +.ri-video-on-line:before { content: "\f51e"; } +.ri-webhook-fill:before { content: "\f51f"; } +.ri-webhook-line:before { content: "\f520"; } +.ri-weight-fill:before { content: "\f521"; } +.ri-weight-line:before { content: "\f522"; } +.ri-book-shelf-fill:before { content: "\f523"; } +.ri-book-shelf-line:before { content: "\f524"; } +.ri-brain-2-fill:before { content: "\f525"; } +.ri-brain-2-line:before { content: "\f526"; } +.ri-chat-search-fill:before { content: "\f527"; } +.ri-chat-search-line:before { content: "\f528"; } +.ri-chat-unread-fill:before { content: "\f529"; } +.ri-chat-unread-line:before { content: "\f52a"; } +.ri-collapse-horizontal-fill:before { content: "\f52b"; } +.ri-collapse-horizontal-line:before { content: "\f52c"; } +.ri-collapse-vertical-fill:before { content: "\f52d"; } +.ri-collapse-vertical-line:before { content: "\f52e"; } +.ri-dna-fill:before { content: "\f52f"; } +.ri-dna-line:before { content: "\f530"; } +.ri-dropper-fill:before { content: "\f531"; } +.ri-dropper-line:before { content: "\f532"; } +.ri-expand-diagonal-s-2-fill:before { content: "\f533"; } +.ri-expand-diagonal-s-2-line:before { content: "\f534"; } +.ri-expand-diagonal-s-fill:before { content: "\f535"; } +.ri-expand-diagonal-s-line:before { content: "\f536"; } +.ri-expand-horizontal-fill:before { content: "\f537"; } +.ri-expand-horizontal-line:before { content: "\f538"; } +.ri-expand-horizontal-s-fill:before { content: "\f539"; } +.ri-expand-horizontal-s-line:before { content: "\f53a"; } +.ri-expand-vertical-fill:before { content: "\f53b"; } +.ri-expand-vertical-line:before { content: "\f53c"; } +.ri-expand-vertical-s-fill:before { content: "\f53d"; } +.ri-expand-vertical-s-line:before { content: "\f53e"; } +.ri-gemini-fill:before { content: "\f53f"; } +.ri-gemini-line:before { content: "\f540"; } +.ri-reset-left-fill:before { content: "\f541"; } +.ri-reset-left-line:before { content: "\f542"; } +.ri-reset-right-fill:before { content: "\f543"; } +.ri-reset-right-line:before { content: "\f544"; } +.ri-stairs-fill:before { content: "\f545"; } +.ri-stairs-line:before { content: "\f546"; } +.ri-telegram-2-fill:before { content: "\f547"; } +.ri-telegram-2-line:before { content: "\f548"; } +.ri-triangular-flag-fill:before { content: "\f549"; } +.ri-triangular-flag-line:before { content: "\f54a"; } +.ri-user-minus-fill:before { content: "\f54b"; } +.ri-user-minus-line:before { content: "\f54c"; } +.ri-account-box-2-fill:before { content: "\f54d"; } +.ri-account-box-2-line:before { content: "\f54e"; } +.ri-account-circle-2-fill:before { content: "\f54f"; } +.ri-account-circle-2-line:before { content: "\f550"; } +.ri-alarm-snooze-fill:before { content: "\f551"; } +.ri-alarm-snooze-line:before { content: "\f552"; } +.ri-arrow-down-box-fill:before { content: "\f553"; } +.ri-arrow-down-box-line:before { content: "\f554"; } +.ri-arrow-left-box-fill:before { content: "\f555"; } +.ri-arrow-left-box-line:before { content: "\f556"; } +.ri-arrow-left-down-box-fill:before { content: "\f557"; } +.ri-arrow-left-down-box-line:before { content: "\f558"; } +.ri-arrow-left-up-box-fill:before { content: "\f559"; } +.ri-arrow-left-up-box-line:before { content: "\f55a"; } +.ri-arrow-right-box-fill:before { content: "\f55b"; } +.ri-arrow-right-box-line:before { content: "\f55c"; } +.ri-arrow-right-down-box-fill:before { content: "\f55d"; } +.ri-arrow-right-down-box-line:before { content: "\f55e"; } +.ri-arrow-right-up-box-fill:before { content: "\f55f"; } +.ri-arrow-right-up-box-line:before { content: "\f560"; } +.ri-arrow-up-box-fill:before { content: "\f561"; } +.ri-arrow-up-box-line:before { content: "\f562"; } +.ri-bar-chart-box-ai-fill:before { content: "\f563"; } +.ri-bar-chart-box-ai-line:before { content: "\f564"; } +.ri-brush-ai-fill:before { content: "\f565"; } +.ri-brush-ai-line:before { content: "\f566"; } +.ri-camera-ai-fill:before { content: "\f567"; } +.ri-camera-ai-line:before { content: "\f568"; } +.ri-chat-ai-fill:before { content: "\f569"; } +.ri-chat-ai-line:before { content: "\f56a"; } +.ri-chat-smile-ai-fill:before { content: "\f56b"; } +.ri-chat-smile-ai-line:before { content: "\f56c"; } +.ri-chat-voice-ai-fill:before { content: "\f56d"; } +.ri-chat-voice-ai-line:before { content: "\f56e"; } +.ri-code-ai-fill:before { content: "\f56f"; } +.ri-code-ai-line:before { content: "\f570"; } +.ri-color-filter-ai-fill:before { content: "\f571"; } +.ri-color-filter-ai-line:before { content: "\f572"; } +.ri-custom-size:before { content: "\f573"; } +.ri-fediverse-fill:before { content: "\f574"; } +.ri-fediverse-line:before { content: "\f575"; } +.ri-flag-off-fill:before { content: "\f576"; } +.ri-flag-off-line:before { content: "\f577"; } +.ri-home-9-fill:before { content: "\f578"; } +.ri-home-9-line:before { content: "\f579"; } +.ri-image-ai-fill:before { content: "\f57a"; } +.ri-image-ai-line:before { content: "\f57b"; } +.ri-image-circle-ai-fill:before { content: "\f57c"; } +.ri-image-circle-ai-line:before { content: "\f57d"; } +.ri-info-card-fill:before { content: "\f57e"; } +.ri-info-card-line:before { content: "\f57f"; } +.ri-landscape-ai-fill:before { content: "\f580"; } +.ri-landscape-ai-line:before { content: "\f581"; } +.ri-letter-spacing-2:before { content: "\f582"; } +.ri-line-height-2:before { content: "\f583"; } +.ri-mail-ai-fill:before { content: "\f584"; } +.ri-mail-ai-line:before { content: "\f585"; } +.ri-mic-2-ai-fill:before { content: "\f586"; } +.ri-mic-2-ai-line:before { content: "\f587"; } +.ri-mic-ai-fill:before { content: "\f588"; } +.ri-mic-ai-line:before { content: "\f589"; } +.ri-movie-ai-fill:before { content: "\f58a"; } +.ri-movie-ai-line:before { content: "\f58b"; } +.ri-music-ai-fill:before { content: "\f58c"; } +.ri-music-ai-line:before { content: "\f58d"; } +.ri-notification-snooze-fill:before { content: "\f58e"; } +.ri-notification-snooze-line:before { content: "\f58f"; } +.ri-php-fill:before { content: "\f590"; } +.ri-php-line:before { content: "\f591"; } +.ri-pix-fill:before { content: "\f592"; } +.ri-pix-line:before { content: "\f593"; } +.ri-pulse-ai-fill:before { content: "\f594"; } +.ri-pulse-ai-line:before { content: "\f595"; } +.ri-quill-pen-ai-fill:before { content: "\f596"; } +.ri-quill-pen-ai-line:before { content: "\f597"; } +.ri-speak-ai-fill:before { content: "\f598"; } +.ri-speak-ai-line:before { content: "\f599"; } +.ri-star-off-fill:before { content: "\f59a"; } +.ri-star-off-line:before { content: "\f59b"; } +.ri-translate-ai-2:before { content: "\f59c"; } +.ri-translate-ai:before { content: "\f59d"; } +.ri-user-community-fill:before { content: "\f59e"; } +.ri-user-community-line:before { content: "\f59f"; } +.ri-vercel-fill:before { content: "\f5a0"; } +.ri-vercel-line:before { content: "\f5a1"; } +.ri-video-ai-fill:before { content: "\f5a2"; } +.ri-video-ai-line:before { content: "\f5a3"; } +.ri-video-on-ai-fill:before { content: "\f5a4"; } +.ri-video-on-ai-line:before { content: "\f5a5"; } +.ri-voice-ai-fill:before { content: "\f5a6"; } +.ri-voice-ai-line:before { content: "\f5a7"; } +.ri-ai-generate-2:before { content: "\f5a8"; } +.ri-ai-generate-text:before { content: "\f5a9"; } +.ri-anthropic-fill:before { content: "\f5aa"; } +.ri-anthropic-line:before { content: "\f5ab"; } +.ri-apps-2-ai-fill:before { content: "\f5ac"; } +.ri-apps-2-ai-line:before { content: "\f5ad"; } +.ri-camera-lens-ai-fill:before { content: "\f5ae"; } +.ri-camera-lens-ai-line:before { content: "\f5af"; } +.ri-clapperboard-ai-fill:before { content: "\f5b0"; } +.ri-clapperboard-ai-line:before { content: "\f5b1"; } +.ri-claude-fill:before { content: "\f5b2"; } +.ri-claude-line:before { content: "\f5b3"; } +.ri-closed-captioning-ai-fill:before { content: "\f5b4"; } +.ri-closed-captioning-ai-line:before { content: "\f5b5"; } +.ri-dvd-ai-fill:before { content: "\f5b6"; } +.ri-dvd-ai-line:before { content: "\f5b7"; } +.ri-film-ai-fill:before { content: "\f5b8"; } +.ri-film-ai-line:before { content: "\f5b9"; } +.ri-font-size-ai:before { content: "\f5ba"; } +.ri-mixtral-fill:before { content: "\f5bb"; } +.ri-mixtral-line:before { content: "\f5bc"; } +.ri-movie-2-ai-fill:before { content: "\f5bd"; } +.ri-movie-2-ai-line:before { content: "\f5be"; } +.ri-mv-ai-fill:before { content: "\f5bf"; } +.ri-mv-ai-line:before { content: "\f5c0"; } +.ri-perplexity-fill:before { content: "\f5c1"; } +.ri-perplexity-line:before { content: "\f5c2"; } +.ri-poker-clubs-fill:before { content: "\f5c3"; } +.ri-poker-clubs-line:before { content: "\f5c4"; } +.ri-poker-diamonds-fill:before { content: "\f5c5"; } +.ri-poker-diamonds-line:before { content: "\f5c6"; } +.ri-poker-hearts-fill:before { content: "\f5c7"; } +.ri-poker-hearts-line:before { content: "\f5c8"; } +.ri-poker-spades-fill:before { content: "\f5c9"; } +.ri-poker-spades-line:before { content: "\f5ca"; } +.ri-safe-3-fill:before { content: "\f5cb"; } +.ri-safe-3-line:before { content: "\f5cc"; } +.ri-accessibility-fill:before { content: "\f5cd"; } +.ri-accessibility-line:before { content: "\f5ce"; } +.ri-alarm-add-fill:before { content: "\f5cf"; } +.ri-alarm-add-line:before { content: "\f5d0"; } +.ri-arrow-down-long-fill:before { content: "\f5d1"; } +.ri-arrow-down-long-line:before { content: "\f5d2"; } +.ri-arrow-left-down-long-fill:before { content: "\f5d3"; } +.ri-arrow-left-down-long-line:before { content: "\f5d4"; } +.ri-arrow-left-long-fill:before { content: "\f5d5"; } +.ri-arrow-left-long-line:before { content: "\f5d6"; } +.ri-arrow-left-up-long-fill:before { content: "\f5d7"; } +.ri-arrow-left-up-long-line:before { content: "\f5d8"; } +.ri-arrow-right-down-long-fill:before { content: "\f5d9"; } +.ri-arrow-right-down-long-line:before { content: "\f5da"; } +.ri-arrow-right-long-fill:before { content: "\f5db"; } +.ri-arrow-right-long-line:before { content: "\f5dc"; } +.ri-arrow-right-up-long-fill:before { content: "\f5dd"; } +.ri-arrow-right-up-long-line:before { content: "\f5de"; } +.ri-arrow-up-long-fill:before { content: "\f5df"; } +.ri-arrow-up-long-line:before { content: "\f5e0"; } +.ri-chess-fill:before { content: "\f5e1"; } +.ri-chess-line:before { content: "\f5e2"; } +.ri-diamond-fill:before { content: "\f5e3"; } +.ri-diamond-line:before { content: "\f5e4"; } +.ri-diamond-ring-fill:before { content: "\f5e5"; } +.ri-diamond-ring-line:before { content: "\f5e6"; } +.ri-figma-fill:before { content: "\f5e7"; } +.ri-figma-line:before { content: "\f5e8"; } +.ri-firefox-browser-fill:before { content: "\f5e9"; } +.ri-firefox-browser-line:before { content: "\f5ea"; } +.ri-jewelry-fill:before { content: "\f5eb"; } +.ri-jewelry-line:before { content: "\f5ec"; } +.ri-multi-image-fill:before { content: "\f5ed"; } +.ri-multi-image-line:before { content: "\f5ee"; } +.ri-no-credit-card-fill:before { content: "\f5ef"; } +.ri-no-credit-card-line:before { content: "\f5f0"; } +.ri-service-bell-fill:before { content: "\f5f1"; } +.ri-service-bell-line:before { content: "\f5f2"; } + +.install-app-modal[data-v-40e226b5] .n-modal { + max-width: 24rem +} +.install-app-modal .modal-content[data-v-40e226b5] { + padding: 1rem; + padding-bottom: 0px +} +.install-app-modal .modal-content .modal-header[data-v-40e226b5] { + margin-bottom: 1.5rem; + display: flex; + align-items: center +} +.install-app-modal .modal-content .modal-header .app-icon[data-v-40e226b5] { + margin-right: 1rem; + height: 5rem; + width: 5rem; + overflow: hidden; + border-radius: 1rem +} +.install-app-modal .modal-content .modal-header .app-icon img[data-v-40e226b5] { + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover +} +.install-app-modal .modal-content .modal-header .app-info[data-v-40e226b5] { + flex: 1 1 0% +} +.install-app-modal .modal-content .modal-header .app-info .app-name[data-v-40e226b5] { + margin-bottom: 0.25rem; + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700 +} +.install-app-modal .modal-content .modal-header .app-info .app-desc[data-v-40e226b5] { + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)) +} +.install-app-modal .modal-content .modal-actions[data-v-40e226b5] { + margin-top: 1rem; + display: flex; + gap: 0.75rem +} +.install-app-modal .modal-content .modal-actions .n-button[data-v-40e226b5] { + flex: 1 1 0% +} +.install-app-modal .modal-content .modal-actions .cancel-btn[data-v-40e226b5] { + border-style: none; + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)) +} +.install-app-modal .modal-content .modal-actions .cancel-btn[data-v-40e226b5]:hover { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)) +} +.install-app-modal .modal-content .modal-actions .install-btn[data-v-40e226b5] { + border-style: none; + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)) +} +.install-app-modal .modal-content .modal-actions .install-btn[data-v-40e226b5]:hover { + --tw-bg-opacity: 1; + background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)) +}.bottom[data-v-7497922f] { + height: 7rem +}.update-app-modal[data-v-f3abdbb7] .n-modal { + max-width: 56rem +} +.update-app-modal .modal-content[data-v-f3abdbb7] { + padding: 1.5rem; + padding-bottom: 1rem +} +.update-app-modal .modal-content .modal-header[data-v-f3abdbb7] { + margin-bottom: 1.5rem; + display: flex; + align-items: center +} +.update-app-modal .modal-content .modal-header .app-icon[data-v-f3abdbb7] { + margin-right: 1.5rem; + height: 6rem; + width: 6rem; + overflow: hidden; + border-radius: 1rem +} +.update-app-modal .modal-content .modal-header .app-icon img[data-v-f3abdbb7] { + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover +} +.update-app-modal .modal-content .modal-header .app-info[data-v-f3abdbb7] { + flex: 1 1 0% +} +.update-app-modal .modal-content .modal-header .app-info .app-name[data-v-f3abdbb7] { + margin-bottom: 0.5rem; + font-size: 1.5rem; + line-height: 2rem; + font-weight: 700 +} +.update-app-modal .modal-content .modal-header .app-info .app-desc[data-v-f3abdbb7] { + font-size: 1rem; + line-height: 1.5rem; + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .update-info[data-v-f3abdbb7] { + margin-bottom: 1.5rem; + border-radius: 0.5rem; + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)) +} +.update-app-modal .modal-content .update-info[data-v-f3abdbb7]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-title[data-v-f3abdbb7] { + padding: 1rem; + padding-bottom: 0.5rem; + font-size: 1rem; + line-height: 1.5rem; + font-weight: 500 +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] { + padding: 1rem; + padding-top: 0.5rem; + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] h1 { + margin-bottom: 0.75rem; + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700 +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] h2 { + margin-bottom: 0.75rem; + font-size: 1.125rem; + line-height: 1.75rem; + font-weight: 700 +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] h3 { + margin-bottom: 0.5rem; + font-size: 1rem; + line-height: 1.5rem; + font-weight: 700 +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] p { + margin-bottom: 0.75rem; + line-height: 1.625 +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] ul { + margin-bottom: 0.75rem; + list-style-position: inside; + list-style-type: disc +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] ol { + margin-bottom: 0.75rem; + list-style-position: inside; + list-style-type: decimal +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] li { + margin-bottom: 0.5rem; + line-height: 1.625 +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] code { + border-radius: 0.25rem; + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + padding-left: 0.375rem; + padding-right: 0.375rem; + padding-top: 0.125rem; + padding-bottom: 0.125rem; + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] code:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] pre { + margin-bottom: 0.75rem; + overflow-x: auto; + border-radius: 0.25rem; + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + padding: 0.75rem +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] pre:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] pre code { + background-color: transparent; + padding: 0px +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] blockquote { + margin-bottom: 0.75rem; + border-left-width: 4px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + padding-left: 1rem +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] blockquote:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] a { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] a:hover { + --tw-text-opacity: 1; + color: rgb(22 163 74 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] a:hover:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(74 222 128 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] hr { + margin-top: 1rem; + margin-bottom: 1rem; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] hr:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] table { + margin-bottom: 0.75rem; + width: 100% +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] table th, .update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] table td { + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + padding-left: 0.75rem; + padding-right: 0.75rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] table th:is(.dark *), .update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] table td:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] table th { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)) +} +.update-app-modal .modal-content .update-info .update-body[data-v-f3abdbb7] table th:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)) +} +.update-app-modal .modal-content .modal-actions[data-v-f3abdbb7] { + margin-top: 1.5rem; + display: flex; + gap: 1rem +} +.update-app-modal .modal-content .modal-actions .n-button[data-v-f3abdbb7] { + flex: 1 1 0%; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + font-size: 1rem; + line-height: 1.5rem +} +.update-app-modal .modal-content .modal-actions .cancel-btn[data-v-f3abdbb7] { + border-style: none; + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)) +} +.update-app-modal .modal-content .modal-actions .cancel-btn[data-v-f3abdbb7]:hover { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)) +} +.update-app-modal .modal-content .modal-actions .update-btn[data-v-f3abdbb7] { + border-style: none; + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)) +} +.update-app-modal .modal-content .modal-actions .update-btn[data-v-f3abdbb7]:hover { + --tw-bg-opacity: 1; + background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)) +}.layout-page[data-v-f03a9852] { + height: 100vh; + width: 100vw; + overflow: hidden; + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.layout-page[data-v-f03a9852]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.layout-main[data-v-f03a9852] { + position: relative; + height: 100%; + width: 100%; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.layout-main[data-v-f03a9852]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.layout-main-page[data-v-f03a9852] { + display: flex; + height: 100%; +} +.menu[data-v-f03a9852] { + height: 100%; +} +.main[data-v-f03a9852] { + display: flex; + flex: 1 1 0%; + flex-direction: column; + overflow: hidden; +} +.main-content[data-v-f03a9852] { + flex: 1 1 0%; + overflow: hidden; +} +.main-page[data-v-f03a9852] { + height: 100%; +} +.mobile .main-content[data-v-f03a9852] { + height: calc(100vh - 146px); + overflow: auto; + display: block; + flex: none; +}.app-container[data-v-49a312c0] { + height: 100%; + width: 100%; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.mobile .text-base[data-v-49a312c0] { + font-size: 14px !important; +} +.html[data-v-49a312c0]:has(.mobile) { + font-size: 14px; +}.loading-box[data-v-d776f97a] { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 9999; +} +.loading-box .mask[data-v-d776f97a] { + width: 100%; + height: 100%; + background-color: rgb(248 249 250 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.5; +} +.loading-box .mask[data-v-d776f97a]:is(.dark *) { + background-color: rgb(22 22 22 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.5; +} +.loading-box .loading-content-box[data-v-d776f97a] { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.loading-box .tip[data-v-d776f97a] { + font-size: 14px; + margin-top: 8px; +} \ No newline at end of file diff --git a/out/renderer/assets/index-ChDcb7c6.css.gz b/out/renderer/assets/index-ChDcb7c6.css.gz new file mode 100644 index 0000000..9f35491 Binary files /dev/null and b/out/renderer/assets/index-ChDcb7c6.css.gz differ diff --git a/out/renderer/assets/index-CzpNk4J5.css b/out/renderer/assets/index-CzpNk4J5.css new file mode 100644 index 0000000..d9e01e1 --- /dev/null +++ b/out/renderer/assets/index-CzpNk4J5.css @@ -0,0 +1,172 @@ +.search-item[data-v-3449f610] { + display: flex; + cursor: pointer; + align-items: center; + border-radius: 1.5rem; + padding: 0.75rem; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +}.search-item[data-v-3449f610]:hover { + --tw-bg-opacity: 1; + background-color: rgb(233 236 239 / var(--tw-bg-opacity, 1)); +}.search-item[data-v-3449f610]:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +}.search-item[data-v-3449f610] { + margin: 0 10px; +} +.search-item .search-item-img[data-v-3449f610] { + margin-right: 1rem; + height: 3rem; + width: 3rem; + overflow: hidden; + border-radius: 1rem; +} +.search-item .search-item-info[data-v-3449f610] { + flex: 1 1 0%; + overflow: hidden; +} +.search-item .search-item-info-name[data-v-3449f610] { + text-align: center; + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.search-item .search-item-info-artist[data-v-3449f610] { + text-align: center; + font-size: 0.75rem; + line-height: 1rem; + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.mv:hover .play[data-v-3449f610] { + opacity: 0.6; +} +.mv .search-item-img[data-v-3449f610] { + width: 160px; + height: 90px; + position: relative; + border-radius: 0.5rem; +} +.mv .play[data-v-3449f610] { + position: absolute; + top: 50%; + left: 50%; + --tw-translate-x: -50%; + --tw-translate-y: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + opacity: 0; + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.mv .play .icon[data-v-3449f610] { + font-size: 3rem; + line-height: 1; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +}.search-page[data-v-254ebbc1] { + display: flex; + height: 100%; +} +.hot-search[data-v-254ebbc1] { + margin-right: 1rem; + flex: 1 1 0%; + overflow: hidden; + border-radius: 0.75rem; + --tw-bg-opacity: 1; + background-color: rgb(248 249 250 / var(--tw-bg-opacity, 1)); +} +.hot-search[data-v-254ebbc1]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(22 22 22 / var(--tw-bg-opacity, 1)); +} +.hot-search[data-v-254ebbc1] { + animation-duration: 0.2s; + min-width: 400px; + height: 100%; +} +.hot-search-list[data-v-254ebbc1] { + padding-bottom: 7rem; +} +.hot-search-item[data-v-254ebbc1] { + cursor: pointer; + border-radius: 0.75rem; + padding-left: 1rem; + padding-right: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-size: 1.125rem; + line-height: 1.75rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.hot-search-item[data-v-254ebbc1]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.hot-search-item[data-v-254ebbc1] { + transition: all 0.3s ease; +} +.hot-search-item[data-v-254ebbc1]:hover { + --tw-bg-opacity: 1; + background-color: rgb(248 249 250 / var(--tw-bg-opacity, 1)); +} +.hot-search-item[data-v-254ebbc1]:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(45 45 45 / var(--tw-bg-opacity, 1)); +} +.hot-search-item-count[data-v-254ebbc1] { + margin-left: 0.75rem; + display: inline-block; + width: 2rem; + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} +.hot-search-item-count-3[data-v-254ebbc1] { + margin-left: 0.75rem; + display: inline-block; + width: 2rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} +.search-list[data-v-254ebbc1] { + flex: 1 1 0%; + border-radius: 0.75rem; + --tw-bg-opacity: 1; + background-color: rgb(248 249 250 / var(--tw-bg-opacity, 1)); +} +.search-list[data-v-254ebbc1]:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgb(22 22 22 / var(--tw-bg-opacity, 1)); +} +.search-list[data-v-254ebbc1] { + height: 100%; +} +.search-list-box[data-v-254ebbc1] { + padding-bottom: 7rem; +} +.title[data-v-254ebbc1] { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + margin-left: 1rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.title[data-v-254ebbc1]:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.mobile .hot-search[data-v-254ebbc1] { + margin-right: 0px; + width: 100%; +} \ No newline at end of file diff --git a/out/renderer/assets/index-CzpNk4J5.css.gz b/out/renderer/assets/index-CzpNk4J5.css.gz new file mode 100644 index 0000000..b428f7d Binary files /dev/null and b/out/renderer/assets/index-CzpNk4J5.css.gz differ diff --git a/out/renderer/assets/index-DKaFsuse.js b/out/renderer/assets/index-DKaFsuse.js new file mode 100644 index 0000000..8a78114 --- /dev/null +++ b/out/renderer/assets/index-DKaFsuse.js @@ -0,0 +1,34584 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-DSilVM87.js","./home-BXGE9AqN.js","./MusicList-s-QHu-iA.js","./SongItem-CoswpGn6.js","./Image-DXClIklC.js","./use-locale-DLWAOXez.js","./Ellipsis-D4R5dIX2.js","./SongItem-Bw5Qa7XV.css","./Drawer-BEJ8Ydua.js","./Avatar-rQ2og-6c.js","./Tag-C0oC92WF.js","./MusicList-NCsRWE81.css","./index-JJypdZPY.js","./index-B-m4kL_6.css","./index-BlaUC8oz.css","./index-C-VCusx9.js","./MvPlayer-I4IDK1xL.js","./Icon-DucaliTK.js","./Slider-BA6NituQ.js","./MvPlayer-BPFZslTY.css","./Layout-CvYBg1vI.js","./index-CzpNk4J5.css","./index-Bc5fdT5j.js","./index-s6QFASec.css","./index-SvIREzLs.js","./index-b8HibJP6.css","./index-DhLgZEXT.js","./index-BmgzcEyo.css","./index-BPmJoRDi.js","./index-COH3Oisr.css","./index-RCxsGzpS.js","./Switch-D3Z_Vg3u.js","./index-DVDStqOk.css","./AppMenu-CbDXL_JE.js","./AppMenu-iZYnVe2B.css","./PlayBar-BNzUvTGp.js","./PlayBar-Ct36doNR.css","./SearchBar-Cx7zzS9t.js","./login-BsPxQYi6.js","./SearchBar-CIYxJjXH.css","./TitleBar-Bl1cFyS0.js","./TitleBar-DxNBjVsT.css","./index-Dn0J0Jmw.js","./index-DcmHQdN6.css","./index-BCv4VDKm.js","./index-BE7j41Na.css"])))=>i.map(i=>d[i]); +/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function makeMap(str) { + const map = /* @__PURE__ */ Object.create(null); + for (const key of str.split(",")) map[key] = 1; + return (val) => val in map; +} +const EMPTY_OBJ = {}; +const EMPTY_ARR = []; +const NOOP = () => { +}; +const NO = () => false; +const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter +(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); +const isModelListener = (key) => key.startsWith("onUpdate:"); +const extend$1 = Object.assign; +const remove = (arr, el) => { + const i = arr.indexOf(el); + if (i > -1) { + arr.splice(i, 1); + } +}; +const hasOwnProperty$b = Object.prototype.hasOwnProperty; +const hasOwn = (val, key) => hasOwnProperty$b.call(val, key); +const isArray$3 = Array.isArray; +const isMap = (val) => toTypeString(val) === "[object Map]"; +const isSet = (val) => toTypeString(val) === "[object Set]"; +const isRegExp$1 = (val) => toTypeString(val) === "[object RegExp]"; +const isFunction$2 = (val) => typeof val === "function"; +const isString$1 = (val) => typeof val === "string"; +const isSymbol$1 = (val) => typeof val === "symbol"; +const isObject$4 = (val) => val !== null && typeof val === "object"; +const isPromise$1 = (val) => { + return (isObject$4(val) || isFunction$2(val)) && isFunction$2(val.then) && isFunction$2(val.catch); +}; +const objectToString$1 = Object.prototype.toString; +const toTypeString = (value) => objectToString$1.call(value); +const toRawType = (value) => { + return toTypeString(value).slice(8, -1); +}; +const isPlainObject$2 = (val) => toTypeString(val) === "[object Object]"; +const isIntegerKey = (key) => isString$1(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; +const isReservedProp = /* @__PURE__ */ makeMap( + // the leading comma is intentional so empty string "" is also included + ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" +); +const cacheStringFunction = (fn) => { + const cache2 = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache2[str]; + return hit || (cache2[str] = fn(str)); + }; +}; +const camelizeRE = /-(\w)/g; +const camelize = cacheStringFunction( + (str) => { + return str.replace(camelizeRE, (_, c2) => c2 ? c2.toUpperCase() : ""); + } +); +const hyphenateRE = /\B([A-Z])/g; +const hyphenate = cacheStringFunction( + (str) => str.replace(hyphenateRE, "-$1").toLowerCase() +); +const capitalize = cacheStringFunction((str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +}); +const toHandlerKey = cacheStringFunction( + (str) => { + const s = str ? `on${capitalize(str)}` : ``; + return s; + } +); +const hasChanged = (value, oldValue) => !Object.is(value, oldValue); +const invokeArrayFns = (fns, ...arg) => { + for (let i = 0; i < fns.length; i++) { + fns[i](...arg); + } +}; +const def$1 = (obj, key, value, writable = false) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + writable, + value + }); +}; +const looseToNumber = (val) => { + const n = parseFloat(val); + return isNaN(n) ? val : n; +}; +const toNumber = (val) => { + const n = isString$1(val) ? Number(val) : NaN; + return isNaN(n) ? val : n; +}; +let _globalThis; +const getGlobalThis = () => { + return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); +}; +function normalizeStyle(value) { + if (isArray$3(value)) { + const res = {}; + for (let i = 0; i < value.length; i++) { + const item = value[i]; + const normalized = isString$1(item) ? parseStringStyle(item) : normalizeStyle(item); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } else if (isString$1(value) || isObject$4(value)) { + return value; + } +} +const listDelimiterRE = /;(?![^(]*\))/g; +const propertyDelimiterRE = /:([^]+)/; +const styleCommentRE = /\/\*[^]*?\*\//g; +function parseStringStyle(cssText) { + const ret = {}; + cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { + if (item) { + const tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; +} +function normalizeClass(value) { + let res = ""; + if (isString$1(value)) { + res = value; + } else if (isArray$3(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]); + if (normalized) { + res += normalized + " "; + } + } + } else if (isObject$4(value)) { + for (const name2 in value) { + if (value[name2]) { + res += name2 + " "; + } + } + } + return res.trim(); +} +const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; +const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs); +function includeBooleanAttr(value) { + return !!value || value === ""; +} +const isRef$1 = (val) => { + return !!(val && val["__v_isRef"] === true); +}; +const toDisplayString = (val) => { + return isString$1(val) ? val : val == null ? "" : isArray$3(val) || isObject$4(val) && (val.toString === objectToString$1 || !isFunction$2(val.toString)) ? isRef$1(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val); +}; +const replacer = (_key, val) => { + if (isRef$1(val)) { + return replacer(_key, val.value); + } else if (isMap(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce( + (entries, [key, val2], i) => { + entries[stringifySymbol(key, i) + " =>"] = val2; + return entries; + }, + {} + ) + }; + } else if (isSet(val)) { + return { + [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) + }; + } else if (isSymbol$1(val)) { + return stringifySymbol(val); + } else if (isObject$4(val) && !isArray$3(val) && !isPlainObject$2(val)) { + return String(val); + } + return val; +}; +const stringifySymbol = (v, i = "") => { + var _a; + return ( + // Symbol.description in es2019+ so we need to cast here to pass + // the lib: es2016 check + isSymbol$1(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v + ); +}; +/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +let activeEffectScope; +class EffectScope { + constructor(detached = false) { + this.detached = detached; + this._active = true; + this.effects = []; + this.cleanups = []; + this._isPaused = false; + this.parent = activeEffectScope; + if (!detached && activeEffectScope) { + this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( + this + ) - 1; + } + } + get active() { + return this._active; + } + pause() { + if (this._active) { + this._isPaused = true; + let i, l; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].pause(); + } + } + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].pause(); + } + } + } + /** + * Resumes the effect scope, including all child scopes and effects. + */ + resume() { + if (this._active) { + if (this._isPaused) { + this._isPaused = false; + let i, l; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].resume(); + } + } + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].resume(); + } + } + } + } + run(fn) { + if (this._active) { + const currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } finally { + activeEffectScope = currentEffectScope; + } + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + activeEffectScope = this; + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + activeEffectScope = this.parent; + } + stop(fromParent) { + if (this._active) { + this._active = false; + let i, l; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop(); + } + this.effects.length = 0; + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); + } + this.cleanups.length = 0; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); + } + this.scopes.length = 0; + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.parent = void 0; + } + } +} +function effectScope(detached) { + return new EffectScope(detached); +} +function getCurrentScope() { + return activeEffectScope; +} +function onScopeDispose(fn, failSilently = false) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } +} +let activeSub; +const pausedQueueEffects = /* @__PURE__ */ new WeakSet(); +class ReactiveEffect { + constructor(fn) { + this.fn = fn; + this.deps = void 0; + this.depsTail = void 0; + this.flags = 1 | 4; + this.next = void 0; + this.cleanup = void 0; + this.scheduler = void 0; + if (activeEffectScope && activeEffectScope.active) { + activeEffectScope.effects.push(this); + } + } + pause() { + this.flags |= 64; + } + resume() { + if (this.flags & 64) { + this.flags &= ~64; + if (pausedQueueEffects.has(this)) { + pausedQueueEffects.delete(this); + this.trigger(); + } + } + } + /** + * @internal + */ + notify() { + if (this.flags & 2 && !(this.flags & 32)) { + return; + } + if (!(this.flags & 8)) { + batch(this); + } + } + run() { + if (!(this.flags & 1)) { + return this.fn(); + } + this.flags |= 2; + cleanupEffect(this); + prepareDeps(this); + const prevEffect = activeSub; + const prevShouldTrack = shouldTrack; + activeSub = this; + shouldTrack = true; + try { + return this.fn(); + } finally { + cleanupDeps(this); + activeSub = prevEffect; + shouldTrack = prevShouldTrack; + this.flags &= ~2; + } + } + stop() { + if (this.flags & 1) { + for (let link2 = this.deps; link2; link2 = link2.nextDep) { + removeSub(link2); + } + this.deps = this.depsTail = void 0; + cleanupEffect(this); + this.onStop && this.onStop(); + this.flags &= ~1; + } + } + trigger() { + if (this.flags & 64) { + pausedQueueEffects.add(this); + } else if (this.scheduler) { + this.scheduler(); + } else { + this.runIfDirty(); + } + } + /** + * @internal + */ + runIfDirty() { + if (isDirty(this)) { + this.run(); + } + } + get dirty() { + return isDirty(this); + } +} +let batchDepth = 0; +let batchedSub; +let batchedComputed; +function batch(sub, isComputed = false) { + sub.flags |= 8; + if (isComputed) { + sub.next = batchedComputed; + batchedComputed = sub; + return; + } + sub.next = batchedSub; + batchedSub = sub; +} +function startBatch() { + batchDepth++; +} +function endBatch() { + if (--batchDepth > 0) { + return; + } + if (batchedComputed) { + let e = batchedComputed; + batchedComputed = void 0; + while (e) { + const next = e.next; + e.next = void 0; + e.flags &= ~8; + e = next; + } + } + let error; + while (batchedSub) { + let e = batchedSub; + batchedSub = void 0; + while (e) { + const next = e.next; + e.next = void 0; + e.flags &= ~8; + if (e.flags & 1) { + try { + ; + e.trigger(); + } catch (err) { + if (!error) error = err; + } + } + e = next; + } + } + if (error) throw error; +} +function prepareDeps(sub) { + for (let link2 = sub.deps; link2; link2 = link2.nextDep) { + link2.version = -1; + link2.prevActiveLink = link2.dep.activeLink; + link2.dep.activeLink = link2; + } +} +function cleanupDeps(sub) { + let head; + let tail = sub.depsTail; + let link2 = tail; + while (link2) { + const prev = link2.prevDep; + if (link2.version === -1) { + if (link2 === tail) tail = prev; + removeSub(link2); + removeDep(link2); + } else { + head = link2; + } + link2.dep.activeLink = link2.prevActiveLink; + link2.prevActiveLink = void 0; + link2 = prev; + } + sub.deps = head; + sub.depsTail = tail; +} +function isDirty(sub) { + for (let link2 = sub.deps; link2; link2 = link2.nextDep) { + if (link2.dep.version !== link2.version || link2.dep.computed && (refreshComputed(link2.dep.computed) || link2.dep.version !== link2.version)) { + return true; + } + } + if (sub._dirty) { + return true; + } + return false; +} +function refreshComputed(computed2) { + if (computed2.flags & 4 && !(computed2.flags & 16)) { + return; + } + computed2.flags &= ~16; + if (computed2.globalVersion === globalVersion) { + return; + } + computed2.globalVersion = globalVersion; + const dep = computed2.dep; + computed2.flags |= 2; + if (dep.version > 0 && !computed2.isSSR && computed2.deps && !isDirty(computed2)) { + computed2.flags &= ~2; + return; + } + const prevSub = activeSub; + const prevShouldTrack = shouldTrack; + activeSub = computed2; + shouldTrack = true; + try { + prepareDeps(computed2); + const value = computed2.fn(computed2._value); + if (dep.version === 0 || hasChanged(value, computed2._value)) { + computed2._value = value; + dep.version++; + } + } catch (err) { + dep.version++; + throw err; + } finally { + activeSub = prevSub; + shouldTrack = prevShouldTrack; + cleanupDeps(computed2); + computed2.flags &= ~2; + } +} +function removeSub(link2, soft = false) { + const { dep, prevSub, nextSub } = link2; + if (prevSub) { + prevSub.nextSub = nextSub; + link2.prevSub = void 0; + } + if (nextSub) { + nextSub.prevSub = prevSub; + link2.nextSub = void 0; + } + if (dep.subs === link2) { + dep.subs = prevSub; + if (!prevSub && dep.computed) { + dep.computed.flags &= ~4; + for (let l = dep.computed.deps; l; l = l.nextDep) { + removeSub(l, true); + } + } + } + if (!soft && !--dep.sc && dep.map) { + dep.map.delete(dep.key); + } +} +function removeDep(link2) { + const { prevDep, nextDep } = link2; + if (prevDep) { + prevDep.nextDep = nextDep; + link2.prevDep = void 0; + } + if (nextDep) { + nextDep.prevDep = prevDep; + link2.nextDep = void 0; + } +} +let shouldTrack = true; +const trackStack = []; +function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; +} +function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; +} +function cleanupEffect(e) { + const { cleanup } = e; + e.cleanup = void 0; + if (cleanup) { + const prevSub = activeSub; + activeSub = void 0; + try { + cleanup(); + } finally { + activeSub = prevSub; + } + } +} +let globalVersion = 0; +class Link { + constructor(sub, dep) { + this.sub = sub; + this.dep = dep; + this.version = dep.version; + this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; + } +} +class Dep { + constructor(computed2) { + this.computed = computed2; + this.version = 0; + this.activeLink = void 0; + this.subs = void 0; + this.map = void 0; + this.key = void 0; + this.sc = 0; + } + track(debugInfo) { + if (!activeSub || !shouldTrack || activeSub === this.computed) { + return; + } + let link2 = this.activeLink; + if (link2 === void 0 || link2.sub !== activeSub) { + link2 = this.activeLink = new Link(activeSub, this); + if (!activeSub.deps) { + activeSub.deps = activeSub.depsTail = link2; + } else { + link2.prevDep = activeSub.depsTail; + activeSub.depsTail.nextDep = link2; + activeSub.depsTail = link2; + } + addSub(link2); + } else if (link2.version === -1) { + link2.version = this.version; + if (link2.nextDep) { + const next = link2.nextDep; + next.prevDep = link2.prevDep; + if (link2.prevDep) { + link2.prevDep.nextDep = next; + } + link2.prevDep = activeSub.depsTail; + link2.nextDep = void 0; + activeSub.depsTail.nextDep = link2; + activeSub.depsTail = link2; + if (activeSub.deps === link2) { + activeSub.deps = next; + } + } + } + return link2; + } + trigger(debugInfo) { + this.version++; + globalVersion++; + this.notify(debugInfo); + } + notify(debugInfo) { + startBatch(); + try { + if (false) ; + for (let link2 = this.subs; link2; link2 = link2.prevSub) { + if (link2.sub.notify()) { + ; + link2.sub.dep.notify(); + } + } + } finally { + endBatch(); + } + } +} +function addSub(link2) { + link2.dep.sc++; + if (link2.sub.flags & 4) { + const computed2 = link2.dep.computed; + if (computed2 && !link2.dep.subs) { + computed2.flags |= 4 | 16; + for (let l = computed2.deps; l; l = l.nextDep) { + addSub(l); + } + } + const currentTail = link2.dep.subs; + if (currentTail !== link2) { + link2.prevSub = currentTail; + if (currentTail) currentTail.nextSub = link2; + } + link2.dep.subs = link2; + } +} +const targetMap = /* @__PURE__ */ new WeakMap(); +const ITERATE_KEY = Symbol( + "" +); +const MAP_KEY_ITERATE_KEY = Symbol( + "" +); +const ARRAY_ITERATE_KEY = Symbol( + "" +); +function track(target, type, key) { + if (shouldTrack && activeSub) { + let depsMap = targetMap.get(target); + if (!depsMap) { + targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = new Dep()); + dep.map = depsMap; + dep.key = key; + } + { + dep.track(); + } + } +} +function trigger$1(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target); + if (!depsMap) { + globalVersion++; + return; + } + const run = (dep) => { + if (dep) { + { + dep.trigger(); + } + } + }; + startBatch(); + if (type === "clear") { + depsMap.forEach(run); + } else { + const targetIsArray = isArray$3(target); + const isArrayIndex = targetIsArray && isIntegerKey(key); + if (targetIsArray && key === "length") { + const newLength = Number(newValue); + depsMap.forEach((dep, key2) => { + if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol$1(key2) && key2 >= newLength) { + run(dep); + } + }); + } else { + if (key !== void 0 || depsMap.has(void 0)) { + run(depsMap.get(key)); + } + if (isArrayIndex) { + run(depsMap.get(ARRAY_ITERATE_KEY)); + } + switch (type) { + case "add": + if (!targetIsArray) { + run(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + run(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if (isArrayIndex) { + run(depsMap.get("length")); + } + break; + case "delete": + if (!targetIsArray) { + run(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + run(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if (isMap(target)) { + run(depsMap.get(ITERATE_KEY)); + } + break; + } + } + } + endBatch(); +} +function getDepFromReactive(object, key) { + const depMap = targetMap.get(object); + return depMap && depMap.get(key); +} +function reactiveReadArray(array) { + const raw = toRaw(array); + if (raw === array) return raw; + track(raw, "iterate", ARRAY_ITERATE_KEY); + return isShallow(array) ? raw : raw.map(toReactive); +} +function shallowReadArray(arr) { + track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY); + return arr; +} +const arrayInstrumentations = { + __proto__: null, + [Symbol.iterator]() { + return iterator(this, Symbol.iterator, toReactive); + }, + concat(...args) { + return reactiveReadArray(this).concat( + ...args.map((x) => isArray$3(x) ? reactiveReadArray(x) : x) + ); + }, + entries() { + return iterator(this, "entries", (value) => { + value[1] = toReactive(value[1]); + return value; + }); + }, + every(fn, thisArg) { + return apply$1(this, "every", fn, thisArg, void 0, arguments); + }, + filter(fn, thisArg) { + return apply$1(this, "filter", fn, thisArg, (v) => v.map(toReactive), arguments); + }, + find(fn, thisArg) { + return apply$1(this, "find", fn, thisArg, toReactive, arguments); + }, + findIndex(fn, thisArg) { + return apply$1(this, "findIndex", fn, thisArg, void 0, arguments); + }, + findLast(fn, thisArg) { + return apply$1(this, "findLast", fn, thisArg, toReactive, arguments); + }, + findLastIndex(fn, thisArg) { + return apply$1(this, "findLastIndex", fn, thisArg, void 0, arguments); + }, + // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement + forEach(fn, thisArg) { + return apply$1(this, "forEach", fn, thisArg, void 0, arguments); + }, + includes(...args) { + return searchProxy(this, "includes", args); + }, + indexOf(...args) { + return searchProxy(this, "indexOf", args); + }, + join(separator) { + return reactiveReadArray(this).join(separator); + }, + // keys() iterator only reads `length`, no optimisation required + lastIndexOf(...args) { + return searchProxy(this, "lastIndexOf", args); + }, + map(fn, thisArg) { + return apply$1(this, "map", fn, thisArg, void 0, arguments); + }, + pop() { + return noTracking(this, "pop"); + }, + push(...args) { + return noTracking(this, "push", args); + }, + reduce(fn, ...args) { + return reduce(this, "reduce", fn, args); + }, + reduceRight(fn, ...args) { + return reduce(this, "reduceRight", fn, args); + }, + shift() { + return noTracking(this, "shift"); + }, + // slice could use ARRAY_ITERATE but also seems to beg for range tracking + some(fn, thisArg) { + return apply$1(this, "some", fn, thisArg, void 0, arguments); + }, + splice(...args) { + return noTracking(this, "splice", args); + }, + toReversed() { + return reactiveReadArray(this).toReversed(); + }, + toSorted(comparer) { + return reactiveReadArray(this).toSorted(comparer); + }, + toSpliced(...args) { + return reactiveReadArray(this).toSpliced(...args); + }, + unshift(...args) { + return noTracking(this, "unshift", args); + }, + values() { + return iterator(this, "values", toReactive); + } +}; +function iterator(self2, method, wrapValue) { + const arr = shallowReadArray(self2); + const iter = arr[method](); + if (arr !== self2 && !isShallow(self2)) { + iter._next = iter.next; + iter.next = () => { + const result = iter._next(); + if (result.value) { + result.value = wrapValue(result.value); + } + return result; + }; + } + return iter; +} +const arrayProto$1 = Array.prototype; +function apply$1(self2, method, fn, thisArg, wrappedRetFn, args) { + const arr = shallowReadArray(self2); + const needsWrap = arr !== self2 && !isShallow(self2); + const methodFn = arr[method]; + if (methodFn !== arrayProto$1[method]) { + const result2 = methodFn.apply(self2, args); + return needsWrap ? toReactive(result2) : result2; + } + let wrappedFn = fn; + if (arr !== self2) { + if (needsWrap) { + wrappedFn = function(item, index) { + return fn.call(this, toReactive(item), index, self2); + }; + } else if (fn.length > 2) { + wrappedFn = function(item, index) { + return fn.call(this, item, index, self2); + }; + } + } + const result = methodFn.call(arr, wrappedFn, thisArg); + return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result; +} +function reduce(self2, method, fn, args) { + const arr = shallowReadArray(self2); + let wrappedFn = fn; + if (arr !== self2) { + if (!isShallow(self2)) { + wrappedFn = function(acc, item, index) { + return fn.call(this, acc, toReactive(item), index, self2); + }; + } else if (fn.length > 3) { + wrappedFn = function(acc, item, index) { + return fn.call(this, acc, item, index, self2); + }; + } + } + return arr[method](wrappedFn, ...args); +} +function searchProxy(self2, method, args) { + const arr = toRaw(self2); + track(arr, "iterate", ARRAY_ITERATE_KEY); + const res = arr[method](...args); + if ((res === -1 || res === false) && isProxy(args[0])) { + args[0] = toRaw(args[0]); + return arr[method](...args); + } + return res; +} +function noTracking(self2, method, args = []) { + pauseTracking(); + startBatch(); + const res = toRaw(self2)[method].apply(self2, args); + endBatch(); + resetTracking(); + return res; +} +const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`); +const builtInSymbols = new Set( + /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol$1) +); +function hasOwnProperty$a(key) { + if (!isSymbol$1(key)) key = String(key); + const obj = toRaw(this); + track(obj, "has", key); + return obj.hasOwnProperty(key); +} +class BaseReactiveHandler { + constructor(_isReadonly = false, _isShallow = false) { + this._isReadonly = _isReadonly; + this._isShallow = _isShallow; + } + get(target, key, receiver) { + if (key === "__v_skip") return target["__v_skip"]; + const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_isShallow") { + return isShallow2; + } else if (key === "__v_raw") { + if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype + // this means the receiver is a user proxy of the reactive proxy + Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { + return target; + } + return; + } + const targetIsArray = isArray$3(target); + if (!isReadonly2) { + let fn; + if (targetIsArray && (fn = arrayInstrumentations[key])) { + return fn; + } + if (key === "hasOwnProperty") { + return hasOwnProperty$a; + } + } + const res = Reflect.get( + target, + key, + // if this is a proxy wrapping a ref, return methods using the raw ref + // as receiver so that we don't have to call `toRaw` on the ref in all + // its class methods + isRef(target) ? target : receiver + ); + if (isSymbol$1(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track(target, "get", key); + } + if (isShallow2) { + return res; + } + if (isRef(res)) { + return targetIsArray && isIntegerKey(key) ? res : res.value; + } + if (isObject$4(res)) { + return isReadonly2 ? readonly(res) : reactive(res); + } + return res; + } +} +class MutableReactiveHandler extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(false, isShallow2); + } + set(target, key, value, receiver) { + let oldValue = target[key]; + if (!this._isShallow) { + const isOldValueReadonly = isReadonly(oldValue); + if (!isShallow(value) && !isReadonly(value)) { + oldValue = toRaw(oldValue); + value = toRaw(value); + } + if (!isArray$3(target) && isRef(oldValue) && !isRef(value)) { + if (isOldValueReadonly) { + return false; + } else { + oldValue.value = value; + return true; + } + } + } + const hadKey = isArray$3(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); + const result = Reflect.set( + target, + key, + value, + isRef(target) ? target : receiver + ); + if (target === toRaw(receiver)) { + if (!hadKey) { + trigger$1(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger$1(target, "set", key, value); + } + } + return result; + } + deleteProperty(target, key) { + const hadKey = hasOwn(target, key); + target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger$1(target, "delete", key, void 0); + } + return result; + } + has(target, key) { + const result = Reflect.has(target, key); + if (!isSymbol$1(key) || !builtInSymbols.has(key)) { + track(target, "has", key); + } + return result; + } + ownKeys(target) { + track( + target, + "iterate", + isArray$3(target) ? "length" : ITERATE_KEY + ); + return Reflect.ownKeys(target); + } +} +class ReadonlyReactiveHandler extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(true, isShallow2); + } + set(target, key) { + return true; + } + deleteProperty(target, key) { + return true; + } +} +const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler(); +const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(); +const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true); +const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true); +const toShallow = (value) => value; +const getProto = (v) => Reflect.getPrototypeOf(v); +function createIterableMethod(method, isReadonly2, isShallow2) { + return function(...args) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const targetIsMap = isMap(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target[method](...args); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track( + rawTarget, + "iterate", + isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY + ); + return { + // iterator protocol + next() { + const { value, done } = innerIterator.next(); + return done ? { value, done } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + }; + }, + // iterable protocol + [Symbol.iterator]() { + return this; + } + }; + }; +} +function createReadonlyMethod(type) { + return function(...args) { + return type === "delete" ? false : type === "clear" ? void 0 : this; + }; +} +function createInstrumentations(readonly2, shallow) { + const instrumentations = { + get(key) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!readonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "get", key); + } + track(rawTarget, "get", rawKey); + } + const { has } = getProto(rawTarget); + const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; + if (has.call(rawTarget, key)) { + return wrap(target.get(key)); + } else if (has.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)); + } else if (target !== rawTarget) { + target.get(key); + } + }, + get size() { + const target = this["__v_raw"]; + !readonly2 && track(toRaw(target), "iterate", ITERATE_KEY); + return Reflect.get(target, "size", target); + }, + has(key) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!readonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "has", key); + } + track(rawTarget, "has", rawKey); + } + return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); + }, + forEach(callback, thisArg) { + const observed = this; + const target = observed["__v_raw"]; + const rawTarget = toRaw(target); + const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; + !readonly2 && track(rawTarget, "iterate", ITERATE_KEY); + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed); + }); + } + }; + extend$1( + instrumentations, + readonly2 ? { + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear") + } : { + add(value) { + if (!shallow && !isShallow(value) && !isReadonly(value)) { + value = toRaw(value); + } + const target = toRaw(this); + const proto = getProto(target); + const hadKey = proto.has.call(target, value); + if (!hadKey) { + target.add(value); + trigger$1(target, "add", value, value); + } + return this; + }, + set(key, value) { + if (!shallow && !isShallow(value) && !isReadonly(value)) { + value = toRaw(value); + } + const target = toRaw(this); + const { has, get: get2 } = getProto(target); + let hadKey = has.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has.call(target, key); + } + const oldValue = get2.call(target, key); + target.set(key, value); + if (!hadKey) { + trigger$1(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger$1(target, "set", key, value); + } + return this; + }, + delete(key) { + const target = toRaw(this); + const { has, get: get2 } = getProto(target); + let hadKey = has.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has.call(target, key); + } + get2 ? get2.call(target, key) : void 0; + const result = target.delete(key); + if (hadKey) { + trigger$1(target, "delete", key, void 0); + } + return result; + }, + clear() { + const target = toRaw(this); + const hadItems = target.size !== 0; + const result = target.clear(); + if (hadItems) { + trigger$1( + target, + "clear", + void 0, + void 0 + ); + } + return result; + } + } + ); + const iteratorMethods = [ + "keys", + "values", + "entries", + Symbol.iterator + ]; + iteratorMethods.forEach((method) => { + instrumentations[method] = createIterableMethod(method, readonly2, shallow); + }); + return instrumentations; +} +function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = createInstrumentations(isReadonly2, shallow); + return (target, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw") { + return target; + } + return Reflect.get( + hasOwn(instrumentations, key) && key in target ? instrumentations : target, + key, + receiver + ); + }; +} +const mutableCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, false) +}; +const shallowCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, true) +}; +const readonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, false) +}; +const shallowReadonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, true) +}; +const reactiveMap = /* @__PURE__ */ new WeakMap(); +const shallowReactiveMap = /* @__PURE__ */ new WeakMap(); +const readonlyMap = /* @__PURE__ */ new WeakMap(); +const shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); +function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +function getTargetType(value) { + return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); +} +function reactive(target) { + if (isReadonly(target)) { + return target; + } + return createReactiveObject( + target, + false, + mutableHandlers, + mutableCollectionHandlers, + reactiveMap + ); +} +function shallowReactive(target) { + return createReactiveObject( + target, + false, + shallowReactiveHandlers, + shallowCollectionHandlers, + shallowReactiveMap + ); +} +function readonly(target) { + return createReactiveObject( + target, + true, + readonlyHandlers, + readonlyCollectionHandlers, + readonlyMap + ); +} +function shallowReadonly(target) { + return createReactiveObject( + target, + true, + shallowReadonlyHandlers, + shallowReadonlyCollectionHandlers, + shallowReadonlyMap + ); +} +function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!isObject$4(target)) { + return target; + } + if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { + return target; + } + const existingProxy = proxyMap.get(target); + if (existingProxy) { + return existingProxy; + } + const targetType = getTargetType(target); + if (targetType === 0) { + return target; + } + const proxy = new Proxy( + target, + targetType === 2 ? collectionHandlers : baseHandlers + ); + proxyMap.set(target, proxy); + return proxy; +} +function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value["__v_raw"]); + } + return !!(value && value["__v_isReactive"]); +} +function isReadonly(value) { + return !!(value && value["__v_isReadonly"]); +} +function isShallow(value) { + return !!(value && value["__v_isShallow"]); +} +function isProxy(value) { + return value ? !!value["__v_raw"] : false; +} +function toRaw(observed) { + const raw = observed && observed["__v_raw"]; + return raw ? toRaw(raw) : observed; +} +function markRaw(value) { + if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) { + def$1(value, "__v_skip", true); + } + return value; +} +const toReactive = (value) => isObject$4(value) ? reactive(value) : value; +const toReadonly = (value) => isObject$4(value) ? readonly(value) : value; +function isRef(r) { + return r ? r["__v_isRef"] === true : false; +} +function ref(value) { + return createRef(value, false); +} +function shallowRef(value) { + return createRef(value, true); +} +function createRef(rawValue, shallow) { + if (isRef(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); +} +class RefImpl { + constructor(value, isShallow2) { + this.dep = new Dep(); + this["__v_isRef"] = true; + this["__v_isShallow"] = false; + this._rawValue = isShallow2 ? value : toRaw(value); + this._value = isShallow2 ? value : toReactive(value); + this["__v_isShallow"] = isShallow2; + } + get value() { + { + this.dep.track(); + } + return this._value; + } + set value(newValue) { + const oldValue = this._rawValue; + const useDirectValue = this["__v_isShallow"] || isShallow(newValue) || isReadonly(newValue); + newValue = useDirectValue ? newValue : toRaw(newValue); + if (hasChanged(newValue, oldValue)) { + this._rawValue = newValue; + this._value = useDirectValue ? newValue : toReactive(newValue); + { + this.dep.trigger(); + } + } + } +} +function unref(ref2) { + return isRef(ref2) ? ref2.value : ref2; +} +const shallowUnwrapHandlers = { + get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key]; + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } else { + return Reflect.set(target, key, value, receiver); + } + } +}; +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); +} +class ObjectRefImpl { + constructor(_object, _key, _defaultValue) { + this._object = _object; + this._key = _key; + this._defaultValue = _defaultValue; + this["__v_isRef"] = true; + this._value = void 0; + } + get value() { + const val = this._object[this._key]; + return this._value = val === void 0 ? this._defaultValue : val; + } + set value(newVal) { + this._object[this._key] = newVal; + } + get dep() { + return getDepFromReactive(toRaw(this._object), this._key); + } +} +class GetterRefImpl { + constructor(_getter) { + this._getter = _getter; + this["__v_isRef"] = true; + this["__v_isReadonly"] = true; + this._value = void 0; + } + get value() { + return this._value = this._getter(); + } +} +function toRef(source, key, defaultValue) { + if (isRef(source)) { + return source; + } else if (isFunction$2(source)) { + return new GetterRefImpl(source); + } else if (isObject$4(source) && arguments.length > 1) { + return propertyToRef(source, key, defaultValue); + } else { + return ref(source); + } +} +function propertyToRef(source, key, defaultValue) { + const val = source[key]; + return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue); +} +class ComputedRefImpl { + constructor(fn, setter, isSSR) { + this.fn = fn; + this.setter = setter; + this._value = void 0; + this.dep = new Dep(this); + this.__v_isRef = true; + this.deps = void 0; + this.depsTail = void 0; + this.flags = 16; + this.globalVersion = globalVersion - 1; + this.next = void 0; + this.effect = this; + this["__v_isReadonly"] = !setter; + this.isSSR = isSSR; + } + /** + * @internal + */ + notify() { + this.flags |= 16; + if (!(this.flags & 8) && // avoid infinite self recursion + activeSub !== this) { + batch(this, true); + return true; + } + } + get value() { + const link2 = this.dep.track(); + refreshComputed(this); + if (link2) { + link2.version = this.dep.version; + } + return this._value; + } + set value(newValue) { + if (this.setter) { + this.setter(newValue); + } + } +} +function computed$1(getterOrOptions, debugOptions, isSSR = false) { + let getter; + let setter; + if (isFunction$2(getterOrOptions)) { + getter = getterOrOptions; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + const cRef = new ComputedRefImpl(getter, setter, isSSR); + return cRef; +} +const INITIAL_WATCHER_VALUE = {}; +const cleanupMap = /* @__PURE__ */ new WeakMap(); +let activeWatcher = void 0; +function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) { + if (owner) { + let cleanups = cleanupMap.get(owner); + if (!cleanups) cleanupMap.set(owner, cleanups = []); + cleanups.push(cleanupFn); + } +} +function watch$1(source, cb, options = EMPTY_OBJ) { + const { immediate, deep, once, scheduler: scheduler2, augmentJob, call: call2 } = options; + const reactiveGetter = (source2) => { + if (deep) return source2; + if (isShallow(source2) || deep === false || deep === 0) + return traverse(source2, 1); + return traverse(source2); + }; + let effect2; + let getter; + let cleanup; + let boundCleanup; + let forceTrigger = false; + let isMultiSource = false; + if (isRef(source)) { + getter = () => source.value; + forceTrigger = isShallow(source); + } else if (isReactive(source)) { + getter = () => reactiveGetter(source); + forceTrigger = true; + } else if (isArray$3(source)) { + isMultiSource = true; + forceTrigger = source.some((s) => isReactive(s) || isShallow(s)); + getter = () => source.map((s) => { + if (isRef(s)) { + return s.value; + } else if (isReactive(s)) { + return reactiveGetter(s); + } else if (isFunction$2(s)) { + return call2 ? call2(s, 2) : s(); + } else ; + }); + } else if (isFunction$2(source)) { + if (cb) { + getter = call2 ? () => call2(source, 2) : source; + } else { + getter = () => { + if (cleanup) { + pauseTracking(); + try { + cleanup(); + } finally { + resetTracking(); + } + } + const currentEffect = activeWatcher; + activeWatcher = effect2; + try { + return call2 ? call2(source, 3, [boundCleanup]) : source(boundCleanup); + } finally { + activeWatcher = currentEffect; + } + }; + } + } else { + getter = NOOP; + } + if (cb && deep) { + const baseGetter = getter; + const depth = deep === true ? Infinity : deep; + getter = () => traverse(baseGetter(), depth); + } + const scope = getCurrentScope(); + const watchHandle = () => { + effect2.stop(); + if (scope && scope.active) { + remove(scope.effects, effect2); + } + }; + if (once && cb) { + const _cb = cb; + cb = (...args) => { + _cb(...args); + watchHandle(); + }; + } + let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; + const job = (immediateFirstRun) => { + if (!(effect2.flags & 1) || !effect2.dirty && !immediateFirstRun) { + return; + } + if (cb) { + const newValue = effect2.run(); + if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) { + if (cleanup) { + cleanup(); + } + const currentWatcher = activeWatcher; + activeWatcher = effect2; + try { + const args = [ + newValue, + // pass undefined as the old value when it's changed for the first time + oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, + boundCleanup + ]; + call2 ? call2(cb, 3, args) : ( + // @ts-expect-error + cb(...args) + ); + oldValue = newValue; + } finally { + activeWatcher = currentWatcher; + } + } + } else { + effect2.run(); + } + }; + if (augmentJob) { + augmentJob(job); + } + effect2 = new ReactiveEffect(getter); + effect2.scheduler = scheduler2 ? () => scheduler2(job, false) : job; + boundCleanup = (fn) => onWatcherCleanup(fn, false, effect2); + cleanup = effect2.onStop = () => { + const cleanups = cleanupMap.get(effect2); + if (cleanups) { + if (call2) { + call2(cleanups, 4); + } else { + for (const cleanup2 of cleanups) cleanup2(); + } + cleanupMap.delete(effect2); + } + }; + if (cb) { + if (immediate) { + job(true); + } else { + oldValue = effect2.run(); + } + } else if (scheduler2) { + scheduler2(job.bind(null, true), true); + } else { + effect2.run(); + } + watchHandle.pause = effect2.pause.bind(effect2); + watchHandle.resume = effect2.resume.bind(effect2); + watchHandle.stop = watchHandle; + return watchHandle; +} +function traverse(value, depth = Infinity, seen2) { + if (depth <= 0 || !isObject$4(value) || value["__v_skip"]) { + return value; + } + seen2 = seen2 || /* @__PURE__ */ new Set(); + if (seen2.has(value)) { + return value; + } + seen2.add(value); + depth--; + if (isRef(value)) { + traverse(value.value, depth, seen2); + } else if (isArray$3(value)) { + for (let i = 0; i < value.length; i++) { + traverse(value[i], depth, seen2); + } + } else if (isSet(value) || isMap(value)) { + value.forEach((v) => { + traverse(v, depth, seen2); + }); + } else if (isPlainObject$2(value)) { + for (const key in value) { + traverse(value[key], depth, seen2); + } + for (const key of Object.getOwnPropertySymbols(value)) { + if (Object.prototype.propertyIsEnumerable.call(value, key)) { + traverse(value[key], depth, seen2); + } + } + } + return value; +} +/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +const stack$1 = []; +let isWarning = false; +function warn$1$1(msg2, ...args) { + if (isWarning) return; + isWarning = true; + pauseTracking(); + const instance = stack$1.length ? stack$1[stack$1.length - 1].component : null; + const appWarnHandler = instance && instance.appContext.config.warnHandler; + const trace = getComponentTrace(); + if (appWarnHandler) { + callWithErrorHandling( + appWarnHandler, + instance, + 11, + [ + // eslint-disable-next-line no-restricted-syntax + msg2 + args.map((a) => { + var _a, _b; + return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); + }).join(""), + instance && instance.proxy, + trace.map( + ({ vnode: vnode2 }) => `at <${formatComponentName(instance, vnode2.type)}>` + ).join("\n"), + trace + ] + ); + } else { + const warnArgs = [`[Vue warn]: ${msg2}`, ...args]; + if (trace.length && // avoid spamming console during tests + true) { + warnArgs.push(` +`, ...formatTrace(trace)); + } + console.warn(...warnArgs); + } + resetTracking(); + isWarning = false; +} +function getComponentTrace() { + let currentVNode = stack$1[stack$1.length - 1]; + if (!currentVNode) { + return []; + } + const normalizedStack = []; + while (currentVNode) { + const last = normalizedStack[0]; + if (last && last.vnode === currentVNode) { + last.recurseCount++; + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); + } + const parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; + } + return normalizedStack; +} +function formatTrace(trace) { + const logs = []; + trace.forEach((entry, i) => { + logs.push(...i === 0 ? [] : [` +`], ...formatTraceEntry(entry)); + }); + return logs; +} +function formatTraceEntry({ vnode: vnode2, recurseCount }) { + const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; + const isRoot = vnode2.component ? vnode2.component.parent == null : false; + const open = ` at <${formatComponentName( + vnode2.component, + vnode2.type, + isRoot + )}`; + const close = `>` + postfix; + return vnode2.props ? [open, ...formatProps(vnode2.props), close] : [open + close]; +} +function formatProps(props) { + const res = []; + const keys = Object.keys(props); + keys.slice(0, 3).forEach((key) => { + res.push(...formatProp(key, props[key])); + }); + if (keys.length > 3) { + res.push(` ...`); + } + return res; +} +function formatProp(key, value, raw) { + if (isString$1(value)) { + value = JSON.stringify(value); + return raw ? value : [`${key}=${value}`]; + } else if (typeof value === "number" || typeof value === "boolean" || value == null) { + return raw ? value : [`${key}=${value}`]; + } else if (isRef(value)) { + value = formatProp(key, toRaw(value.value), true); + return raw ? value : [`${key}=Ref<`, value, `>`]; + } else if (isFunction$2(value)) { + return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; + } else { + value = toRaw(value); + return raw ? value : [`${key}=`, value]; + } +} +function callWithErrorHandling(fn, instance, type, args) { + try { + return args ? fn(...args) : fn(); + } catch (err) { + handleError(err, instance, type); + } +} +function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction$2(fn)) { + const res = callWithErrorHandling(fn, instance, type, args); + if (res && isPromise$1(res)) { + res.catch((err) => { + handleError(err, instance, type); + }); + } + return res; + } + if (isArray$3(fn)) { + const values = []; + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); + } + return values; + } +} +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null; + const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ; + if (instance) { + let cur = instance.parent; + const exposedInstance = instance.proxy; + const errorInfo = `https://vuejs.org/error-reference/#runtime-${type}`; + while (cur) { + const errorCapturedHooks = cur.ec; + if (errorCapturedHooks) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { + return; + } + } + } + cur = cur.parent; + } + if (errorHandler) { + pauseTracking(); + callWithErrorHandling(errorHandler, null, 10, [ + err, + exposedInstance, + errorInfo + ]); + resetTracking(); + return; + } + } + logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction); +} +function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) { + if (throwInProd) { + throw err; + } else { + console.error(err); + } +} +const queue = []; +let flushIndex = -1; +const pendingPostFlushCbs = []; +let activePostFlushCbs = null; +let postFlushIndex = 0; +const resolvedPromise = /* @__PURE__ */ Promise.resolve(); +let currentFlushPromise = null; +function nextTick(fn) { + const p2 = currentFlushPromise || resolvedPromise; + return fn ? p2.then(this ? fn.bind(this) : fn) : p2; +} +function findInsertionIndex$1(id) { + let start = flushIndex + 1; + let end = queue.length; + while (start < end) { + const middle = start + end >>> 1; + const middleJob = queue[middle]; + const middleJobId = getId(middleJob); + if (middleJobId < id || middleJobId === id && middleJob.flags & 2) { + start = middle + 1; + } else { + end = middle; + } + } + return start; +} +function queueJob(job) { + if (!(job.flags & 1)) { + const jobId = getId(job); + const lastJob = queue[queue.length - 1]; + if (!lastJob || // fast path when the job id is larger than the tail + !(job.flags & 2) && jobId >= getId(lastJob)) { + queue.push(job); + } else { + queue.splice(findInsertionIndex$1(jobId), 0, job); + } + job.flags |= 1; + queueFlush(); + } +} +function queueFlush() { + if (!currentFlushPromise) { + currentFlushPromise = resolvedPromise.then(flushJobs); + } +} +function queuePostFlushCb(cb) { + if (!isArray$3(cb)) { + if (activePostFlushCbs && cb.id === -1) { + activePostFlushCbs.splice(postFlushIndex + 1, 0, cb); + } else if (!(cb.flags & 1)) { + pendingPostFlushCbs.push(cb); + cb.flags |= 1; + } + } else { + pendingPostFlushCbs.push(...cb); + } + queueFlush(); +} +function flushPreFlushCbs(instance, seen2, i = flushIndex + 1) { + for (; i < queue.length; i++) { + const cb = queue[i]; + if (cb && cb.flags & 2) { + if (instance && cb.id !== instance.uid) { + continue; + } + queue.splice(i, 1); + i--; + if (cb.flags & 4) { + cb.flags &= ~1; + } + cb(); + if (!(cb.flags & 4)) { + cb.flags &= ~1; + } + } + } +} +function flushPostFlushCbs(seen2) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)].sort( + (a, b) => getId(a) - getId(b) + ); + pendingPostFlushCbs.length = 0; + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped); + return; + } + activePostFlushCbs = deduped; + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + const cb = activePostFlushCbs[postFlushIndex]; + if (cb.flags & 4) { + cb.flags &= ~1; + } + if (!(cb.flags & 8)) cb(); + cb.flags &= ~1; + } + activePostFlushCbs = null; + postFlushIndex = 0; + } +} +const getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id; +function flushJobs(seen2) { + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job && !(job.flags & 8)) { + if (false) ; + if (job.flags & 4) { + job.flags &= ~1; + } + callWithErrorHandling( + job, + job.i, + job.i ? 15 : 14 + ); + if (!(job.flags & 4)) { + job.flags &= ~1; + } + } + } + } finally { + for (; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job) { + job.flags &= ~1; + } + } + flushIndex = -1; + queue.length = 0; + flushPostFlushCbs(); + currentFlushPromise = null; + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(); + } + } +} +let currentRenderingInstance = null; +let currentScopeId = null; +function setCurrentRenderingInstance(instance) { + const prev = currentRenderingInstance; + currentRenderingInstance = instance; + currentScopeId = instance && instance.type.__scopeId || null; + return prev; +} +function withCtx(fn, ctx2 = currentRenderingInstance, isNonScopedSlot) { + if (!ctx2) return fn; + if (fn._n) { + return fn; + } + const renderFnWithContext = (...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1); + } + const prevInstance = setCurrentRenderingInstance(ctx2); + let res; + try { + res = fn(...args); + } finally { + setCurrentRenderingInstance(prevInstance); + if (renderFnWithContext._d) { + setBlockTracking(1); + } + } + return res; + }; + renderFnWithContext._n = true; + renderFnWithContext._c = true; + renderFnWithContext._d = true; + return renderFnWithContext; +} +function withDirectives(vnode2, directives2) { + if (currentRenderingInstance === null) { + return vnode2; + } + const instance = getComponentPublicInstance(currentRenderingInstance); + const bindings = vnode2.dirs || (vnode2.dirs = []); + for (let i = 0; i < directives2.length; i++) { + let [dir, value, arg, modifiers = EMPTY_OBJ] = directives2[i]; + if (dir) { + if (isFunction$2(dir)) { + dir = { + mounted: dir, + updated: dir + }; + } + if (dir.deep) { + traverse(value); + } + bindings.push({ + dir, + instance, + value, + oldValue: void 0, + arg, + modifiers + }); + } + } + return vnode2; +} +function invokeDirectiveHook(vnode2, prevVNode, instance, name2) { + const bindings = vnode2.dirs; + const oldBindings = prevVNode && prevVNode.dirs; + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i]; + if (oldBindings) { + binding.oldValue = oldBindings[i].value; + } + let hook = binding.dir[name2]; + if (hook) { + pauseTracking(); + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode2.el, + binding, + vnode2, + prevVNode + ]); + resetTracking(); + } + } +} +const TeleportEndKey = Symbol("_vte"); +const isTeleport = (type) => type.__isTeleport; +const isTeleportDisabled = (props) => props && (props.disabled || props.disabled === ""); +const isTeleportDeferred = (props) => props && (props.defer || props.defer === ""); +const isTargetSVG = (target) => typeof SVGElement !== "undefined" && target instanceof SVGElement; +const isTargetMathML = (target) => typeof MathMLElement === "function" && target instanceof MathMLElement; +const resolveTarget = (props, select) => { + const targetSelector = props && props.to; + if (isString$1(targetSelector)) { + if (!select) { + return null; + } else { + const target = select(targetSelector); + return target; + } + } else { + return targetSelector; + } +}; +const TeleportImpl = { + name: "Teleport", + __isTeleport: true, + process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace2, slotScopeIds, optimized, internals) { + const { + mc: mountChildren, + pc: patchChildren, + pbc: patchBlockChildren, + o: { insert, querySelector, createText, createComment } + } = internals; + const disabled = isTeleportDisabled(n2.props); + let { shapeFlag, children, dynamicChildren } = n2; + if (n1 == null) { + const placeholder = n2.el = createText(""); + const mainAnchor = n2.anchor = createText(""); + insert(placeholder, container, anchor); + insert(mainAnchor, container, anchor); + const mount2 = (container2, anchor2) => { + if (shapeFlag & 16) { + if (parentComponent && parentComponent.isCE) { + parentComponent.ce._teleportTarget = container2; + } + mountChildren( + children, + container2, + anchor2, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized + ); + } + }; + const mountToTarget = () => { + const target = n2.target = resolveTarget(n2.props, querySelector); + const targetAnchor = prepareAnchor(target, n2, createText, insert); + if (target) { + if (namespace2 !== "svg" && isTargetSVG(target)) { + namespace2 = "svg"; + } else if (namespace2 !== "mathml" && isTargetMathML(target)) { + namespace2 = "mathml"; + } + if (!disabled) { + mount2(target, targetAnchor); + updateCssVars(n2, false); + } + } + }; + if (disabled) { + mount2(container, mainAnchor); + updateCssVars(n2, true); + } + if (isTeleportDeferred(n2.props)) { + queuePostRenderEffect(() => { + mountToTarget(); + n2.el.__isMounted = true; + }, parentSuspense); + } else { + mountToTarget(); + } + } else { + if (isTeleportDeferred(n2.props) && !n1.el.__isMounted) { + queuePostRenderEffect(() => { + TeleportImpl.process( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized, + internals + ); + delete n1.el.__isMounted; + }, parentSuspense); + return; + } + n2.el = n1.el; + n2.targetStart = n1.targetStart; + const mainAnchor = n2.anchor = n1.anchor; + const target = n2.target = n1.target; + const targetAnchor = n2.targetAnchor = n1.targetAnchor; + const wasDisabled = isTeleportDisabled(n1.props); + const currentContainer = wasDisabled ? container : target; + const currentAnchor = wasDisabled ? mainAnchor : targetAnchor; + if (namespace2 === "svg" || isTargetSVG(target)) { + namespace2 = "svg"; + } else if (namespace2 === "mathml" || isTargetMathML(target)) { + namespace2 = "mathml"; + } + if (dynamicChildren) { + patchBlockChildren( + n1.dynamicChildren, + dynamicChildren, + currentContainer, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds + ); + traverseStaticChildren(n1, n2, true); + } else if (!optimized) { + patchChildren( + n1, + n2, + currentContainer, + currentAnchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + false + ); + } + if (disabled) { + if (!wasDisabled) { + moveTeleport( + n2, + container, + mainAnchor, + internals, + 1 + ); + } else { + if (n2.props && n1.props && n2.props.to !== n1.props.to) { + n2.props.to = n1.props.to; + } + } + } else { + if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) { + const nextTarget = n2.target = resolveTarget( + n2.props, + querySelector + ); + if (nextTarget) { + moveTeleport( + n2, + nextTarget, + null, + internals, + 0 + ); + } + } else if (wasDisabled) { + moveTeleport( + n2, + target, + targetAnchor, + internals, + 1 + ); + } + } + updateCssVars(n2, disabled); + } + }, + remove(vnode2, parentComponent, parentSuspense, { um: unmount2, o: { remove: hostRemove } }, doRemove) { + const { + shapeFlag, + children, + anchor, + targetStart, + targetAnchor, + target, + props + } = vnode2; + if (target) { + hostRemove(targetStart); + hostRemove(targetAnchor); + } + doRemove && hostRemove(anchor); + if (shapeFlag & 16) { + const shouldRemove = doRemove || !isTeleportDisabled(props); + for (let i = 0; i < children.length; i++) { + const child = children[i]; + unmount2( + child, + parentComponent, + parentSuspense, + shouldRemove, + !!child.dynamicChildren + ); + } + } + }, + move: moveTeleport, + hydrate: hydrateTeleport +}; +function moveTeleport(vnode2, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) { + if (moveType === 0) { + insert(vnode2.targetAnchor, container, parentAnchor); + } + const { el, anchor, shapeFlag, children, props } = vnode2; + const isReorder = moveType === 2; + if (isReorder) { + insert(el, container, parentAnchor); + } + if (!isReorder || isTeleportDisabled(props)) { + if (shapeFlag & 16) { + for (let i = 0; i < children.length; i++) { + move( + children[i], + container, + parentAnchor, + 2 + ); + } + } + } + if (isReorder) { + insert(anchor, container, parentAnchor); + } +} +function hydrateTeleport(node, vnode2, parentComponent, parentSuspense, slotScopeIds, optimized, { + o: { nextSibling, parentNode, querySelector, insert, createText } +}, hydrateChildren) { + const target = vnode2.target = resolveTarget( + vnode2.props, + querySelector + ); + if (target) { + const disabled = isTeleportDisabled(vnode2.props); + const targetNode = target._lpa || target.firstChild; + if (vnode2.shapeFlag & 16) { + if (disabled) { + vnode2.anchor = hydrateChildren( + nextSibling(node), + vnode2, + parentNode(node), + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + vnode2.targetStart = targetNode; + vnode2.targetAnchor = targetNode && nextSibling(targetNode); + } else { + vnode2.anchor = nextSibling(node); + let targetAnchor = targetNode; + while (targetAnchor) { + if (targetAnchor && targetAnchor.nodeType === 8) { + if (targetAnchor.data === "teleport start anchor") { + vnode2.targetStart = targetAnchor; + } else if (targetAnchor.data === "teleport anchor") { + vnode2.targetAnchor = targetAnchor; + target._lpa = vnode2.targetAnchor && nextSibling(vnode2.targetAnchor); + break; + } + } + targetAnchor = nextSibling(targetAnchor); + } + if (!vnode2.targetAnchor) { + prepareAnchor(target, vnode2, createText, insert); + } + hydrateChildren( + targetNode && nextSibling(targetNode), + vnode2, + target, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } + } + updateCssVars(vnode2, disabled); + } + return vnode2.anchor && nextSibling(vnode2.anchor); +} +const Teleport = TeleportImpl; +function updateCssVars(vnode2, isDisabled) { + const ctx2 = vnode2.ctx; + if (ctx2 && ctx2.ut) { + let node, anchor; + if (isDisabled) { + node = vnode2.el; + anchor = vnode2.anchor; + } else { + node = vnode2.targetStart; + anchor = vnode2.targetAnchor; + } + while (node && node !== anchor) { + if (node.nodeType === 1) node.setAttribute("data-v-owner", ctx2.uid); + node = node.nextSibling; + } + ctx2.ut(); + } +} +function prepareAnchor(target, vnode2, createText, insert) { + const targetStart = vnode2.targetStart = createText(""); + const targetAnchor = vnode2.targetAnchor = createText(""); + targetStart[TeleportEndKey] = targetAnchor; + if (target) { + insert(targetStart, target); + insert(targetAnchor, target); + } + return targetAnchor; +} +const leaveCbKey = Symbol("_leaveCb"); +const enterCbKey$1 = Symbol("_enterCb"); +function useTransitionState() { + const state2 = { + isMounted: false, + isLeaving: false, + isUnmounting: false, + leavingVNodes: /* @__PURE__ */ new Map() + }; + onMounted(() => { + state2.isMounted = true; + }); + onBeforeUnmount(() => { + state2.isUnmounting = true; + }); + return state2; +} +const TransitionHookValidator = [Function, Array]; +const BaseTransitionPropsValidators = { + mode: String, + appear: Boolean, + persisted: Boolean, + // enter + onBeforeEnter: TransitionHookValidator, + onEnter: TransitionHookValidator, + onAfterEnter: TransitionHookValidator, + onEnterCancelled: TransitionHookValidator, + // leave + onBeforeLeave: TransitionHookValidator, + onLeave: TransitionHookValidator, + onAfterLeave: TransitionHookValidator, + onLeaveCancelled: TransitionHookValidator, + // appear + onBeforeAppear: TransitionHookValidator, + onAppear: TransitionHookValidator, + onAfterAppear: TransitionHookValidator, + onAppearCancelled: TransitionHookValidator +}; +const recursiveGetSubtree = (instance) => { + const subTree = instance.subTree; + return subTree.component ? recursiveGetSubtree(subTree.component) : subTree; +}; +const BaseTransitionImpl = { + name: `BaseTransition`, + props: BaseTransitionPropsValidators, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const state2 = useTransitionState(); + return () => { + const children = slots.default && getTransitionRawChildren(slots.default(), true); + if (!children || !children.length) { + return; + } + const child = findNonCommentChild(children); + const rawProps = toRaw(props); + const { mode } = rawProps; + if (state2.isLeaving) { + return emptyPlaceholder(child); + } + const innerChild = getInnerChild$1(child); + if (!innerChild) { + return emptyPlaceholder(child); + } + let enterHooks = resolveTransitionHooks( + innerChild, + rawProps, + state2, + instance, + // #11061, ensure enterHooks is fresh after clone + (hooks) => enterHooks = hooks + ); + if (innerChild.type !== Comment) { + setTransitionHooks(innerChild, enterHooks); + } + let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree); + if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) { + let leavingHooks = resolveTransitionHooks( + oldInnerChild, + rawProps, + state2, + instance + ); + setTransitionHooks(oldInnerChild, leavingHooks); + if (mode === "out-in" && innerChild.type !== Comment) { + state2.isLeaving = true; + leavingHooks.afterLeave = () => { + state2.isLeaving = false; + if (!(instance.job.flags & 8)) { + instance.update(); + } + delete leavingHooks.afterLeave; + oldInnerChild = void 0; + }; + return emptyPlaceholder(child); + } else if (mode === "in-out" && innerChild.type !== Comment) { + leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { + const leavingVNodesCache = getLeavingNodesForType( + state2, + oldInnerChild + ); + leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; + el[leaveCbKey] = () => { + earlyRemove(); + el[leaveCbKey] = void 0; + delete enterHooks.delayedLeave; + oldInnerChild = void 0; + }; + enterHooks.delayedLeave = () => { + delayedLeave(); + delete enterHooks.delayedLeave; + oldInnerChild = void 0; + }; + }; + } else { + oldInnerChild = void 0; + } + } else if (oldInnerChild) { + oldInnerChild = void 0; + } + return child; + }; + } +}; +function findNonCommentChild(children) { + let child = children[0]; + if (children.length > 1) { + for (const c2 of children) { + if (c2.type !== Comment) { + child = c2; + break; + } + } + } + return child; +} +const BaseTransition = BaseTransitionImpl; +function getLeavingNodesForType(state2, vnode2) { + const { leavingVNodes } = state2; + let leavingVNodesCache = leavingVNodes.get(vnode2.type); + if (!leavingVNodesCache) { + leavingVNodesCache = /* @__PURE__ */ Object.create(null); + leavingVNodes.set(vnode2.type, leavingVNodesCache); + } + return leavingVNodesCache; +} +function resolveTransitionHooks(vnode2, props, state2, instance, postClone) { + const { + appear, + mode, + persisted = false, + onBeforeEnter, + onEnter, + onAfterEnter, + onEnterCancelled, + onBeforeLeave, + onLeave, + onAfterLeave, + onLeaveCancelled, + onBeforeAppear, + onAppear, + onAfterAppear, + onAppearCancelled + } = props; + const key = String(vnode2.key); + const leavingVNodesCache = getLeavingNodesForType(state2, vnode2); + const callHook2 = (hook, args) => { + hook && callWithAsyncErrorHandling( + hook, + instance, + 9, + args + ); + }; + const callAsyncHook = (hook, args) => { + const done = args[1]; + callHook2(hook, args); + if (isArray$3(hook)) { + if (hook.every((hook2) => hook2.length <= 1)) done(); + } else if (hook.length <= 1) { + done(); + } + }; + const hooks = { + mode, + persisted, + beforeEnter(el) { + let hook = onBeforeEnter; + if (!state2.isMounted) { + if (appear) { + hook = onBeforeAppear || onBeforeEnter; + } else { + return; + } + } + if (el[leaveCbKey]) { + el[leaveCbKey]( + true + /* cancelled */ + ); + } + const leavingVNode = leavingVNodesCache[key]; + if (leavingVNode && isSameVNodeType(vnode2, leavingVNode) && leavingVNode.el[leaveCbKey]) { + leavingVNode.el[leaveCbKey](); + } + callHook2(hook, [el]); + }, + enter(el) { + let hook = onEnter; + let afterHook = onAfterEnter; + let cancelHook = onEnterCancelled; + if (!state2.isMounted) { + if (appear) { + hook = onAppear || onEnter; + afterHook = onAfterAppear || onAfterEnter; + cancelHook = onAppearCancelled || onEnterCancelled; + } else { + return; + } + } + let called = false; + const done = el[enterCbKey$1] = (cancelled) => { + if (called) return; + called = true; + if (cancelled) { + callHook2(cancelHook, [el]); + } else { + callHook2(afterHook, [el]); + } + if (hooks.delayedLeave) { + hooks.delayedLeave(); + } + el[enterCbKey$1] = void 0; + }; + if (hook) { + callAsyncHook(hook, [el, done]); + } else { + done(); + } + }, + leave(el, remove2) { + const key2 = String(vnode2.key); + if (el[enterCbKey$1]) { + el[enterCbKey$1]( + true + /* cancelled */ + ); + } + if (state2.isUnmounting) { + return remove2(); + } + callHook2(onBeforeLeave, [el]); + let called = false; + const done = el[leaveCbKey] = (cancelled) => { + if (called) return; + called = true; + remove2(); + if (cancelled) { + callHook2(onLeaveCancelled, [el]); + } else { + callHook2(onAfterLeave, [el]); + } + el[leaveCbKey] = void 0; + if (leavingVNodesCache[key2] === vnode2) { + delete leavingVNodesCache[key2]; + } + }; + leavingVNodesCache[key2] = vnode2; + if (onLeave) { + callAsyncHook(onLeave, [el, done]); + } else { + done(); + } + }, + clone(vnode22) { + const hooks2 = resolveTransitionHooks( + vnode22, + props, + state2, + instance, + postClone + ); + if (postClone) postClone(hooks2); + return hooks2; + } + }; + return hooks; +} +function emptyPlaceholder(vnode2) { + if (isKeepAlive(vnode2)) { + vnode2 = cloneVNode(vnode2); + vnode2.children = null; + return vnode2; + } +} +function getInnerChild$1(vnode2) { + if (!isKeepAlive(vnode2)) { + if (isTeleport(vnode2.type) && vnode2.children) { + return findNonCommentChild(vnode2.children); + } + return vnode2; + } + const { shapeFlag, children } = vnode2; + if (children) { + if (shapeFlag & 16) { + return children[0]; + } + if (shapeFlag & 32 && isFunction$2(children.default)) { + return children.default(); + } + } +} +function setTransitionHooks(vnode2, hooks) { + if (vnode2.shapeFlag & 6 && vnode2.component) { + vnode2.transition = hooks; + setTransitionHooks(vnode2.component.subTree, hooks); + } else if (vnode2.shapeFlag & 128) { + vnode2.ssContent.transition = hooks.clone(vnode2.ssContent); + vnode2.ssFallback.transition = hooks.clone(vnode2.ssFallback); + } else { + vnode2.transition = hooks; + } +} +function getTransitionRawChildren(children, keepComment = false, parentKey) { + let ret = []; + let keyedFragmentCount = 0; + for (let i = 0; i < children.length; i++) { + let child = children[i]; + const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); + if (child.type === Fragment) { + if (child.patchFlag & 128) keyedFragmentCount++; + ret = ret.concat( + getTransitionRawChildren(child.children, keepComment, key) + ); + } else if (keepComment || child.type !== Comment) { + ret.push(key != null ? cloneVNode(child, { key }) : child); + } + } + if (keyedFragmentCount > 1) { + for (let i = 0; i < ret.length; i++) { + ret[i].patchFlag = -2; + } + } + return ret; +} +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function defineComponent(options, extraOptions) { + return isFunction$2(options) ? ( + // #8236: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + /* @__PURE__ */ (() => extend$1({ name: options.name }, extraOptions, { setup: options }))() + ) : options; +} +function markAsyncBoundary(instance) { + instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0]; +} +function useTemplateRef(key) { + const i = getCurrentInstance(); + const r = shallowRef(null); + if (i) { + const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs; + { + Object.defineProperty(refs, key, { + enumerable: true, + get: () => r.value, + set: (val) => r.value = val + }); + } + } + const ret = r; + return ret; +} +function setRef(rawRef, oldRawRef, parentSuspense, vnode2, isUnmount = false) { + if (isArray$3(rawRef)) { + rawRef.forEach( + (r, i) => setRef( + r, + oldRawRef && (isArray$3(oldRawRef) ? oldRawRef[i] : oldRawRef), + parentSuspense, + vnode2, + isUnmount + ) + ); + return; + } + if (isAsyncWrapper(vnode2) && !isUnmount) { + if (vnode2.shapeFlag & 512 && vnode2.type.__asyncResolved && vnode2.component.subTree.component) { + setRef(rawRef, oldRawRef, parentSuspense, vnode2.component.subTree); + } + return; + } + const refValue = vnode2.shapeFlag & 4 ? getComponentPublicInstance(vnode2.component) : vnode2.el; + const value = isUnmount ? null : refValue; + const { i: owner, r: ref3 } = rawRef; + const oldRef = oldRawRef && oldRawRef.r; + const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; + const setupState = owner.setupState; + const rawSetupState = toRaw(setupState); + const canSetSetupRef = setupState === EMPTY_OBJ ? () => false : (key) => { + return hasOwn(rawSetupState, key); + }; + if (oldRef != null && oldRef !== ref3) { + if (isString$1(oldRef)) { + refs[oldRef] = null; + if (canSetSetupRef(oldRef)) { + setupState[oldRef] = null; + } + } else if (isRef(oldRef)) { + oldRef.value = null; + } + } + if (isFunction$2(ref3)) { + callWithErrorHandling(ref3, owner, 12, [value, refs]); + } else { + const _isString = isString$1(ref3); + const _isRef = isRef(ref3); + if (_isString || _isRef) { + const doSet = () => { + if (rawRef.f) { + const existing = _isString ? canSetSetupRef(ref3) ? setupState[ref3] : refs[ref3] : ref3.value; + if (isUnmount) { + isArray$3(existing) && remove(existing, refValue); + } else { + if (!isArray$3(existing)) { + if (_isString) { + refs[ref3] = [refValue]; + if (canSetSetupRef(ref3)) { + setupState[ref3] = refs[ref3]; + } + } else { + ref3.value = [refValue]; + if (rawRef.k) refs[rawRef.k] = ref3.value; + } + } else if (!existing.includes(refValue)) { + existing.push(refValue); + } + } + } else if (_isString) { + refs[ref3] = value; + if (canSetSetupRef(ref3)) { + setupState[ref3] = value; + } + } else if (_isRef) { + ref3.value = value; + if (rawRef.k) refs[rawRef.k] = value; + } else ; + }; + if (value) { + doSet.id = -1; + queuePostRenderEffect(doSet, parentSuspense); + } else { + doSet(); + } + } + } +} +const isComment = (node) => node.nodeType === 8; +getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1)); +getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id)); +function forEachElement(node, cb) { + if (isComment(node) && node.data === "[") { + let depth = 1; + let next = node.nextSibling; + while (next) { + if (next.nodeType === 1) { + const result = cb(next); + if (result === false) { + break; + } + } else if (isComment(next)) { + if (next.data === "]") { + if (--depth === 0) break; + } else if (next.data === "[") { + depth++; + } + } + next = next.nextSibling; + } + } else { + cb(node); + } +} +const isAsyncWrapper = (i) => !!i.type.__asyncLoader; +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function defineAsyncComponent(source) { + if (isFunction$2(source)) { + source = { loader: source }; + } + const { + loader, + loadingComponent, + errorComponent, + delay = 200, + hydrate: hydrateStrategy, + timeout, + // undefined = never times out + suspensible = true, + onError: userOnError + } = source; + let pendingRequest = null; + let resolvedComp; + let retries = 0; + const retry = () => { + retries++; + pendingRequest = null; + return load(); + }; + const load = () => { + let thisRequest; + return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { + err = err instanceof Error ? err : new Error(String(err)); + if (userOnError) { + return new Promise((resolve2, reject) => { + const userRetry = () => resolve2(retry()); + const userFail = () => reject(err); + userOnError(err, userRetry, userFail, retries + 1); + }); + } else { + throw err; + } + }).then((comp) => { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest; + } + if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { + comp = comp.default; + } + resolvedComp = comp; + return comp; + })); + }; + return /* @__PURE__ */ defineComponent({ + name: "AsyncComponentWrapper", + __asyncLoader: load, + __asyncHydrate(el, instance, hydrate) { + const doHydrate = hydrateStrategy ? () => { + const teardown = hydrateStrategy( + hydrate, + (cb) => forEachElement(el, cb) + ); + if (teardown) { + (instance.bum || (instance.bum = [])).push(teardown); + } + } : hydrate; + if (resolvedComp) { + doHydrate(); + } else { + load().then(() => !instance.isUnmounted && doHydrate()); + } + }, + get __asyncResolved() { + return resolvedComp; + }, + setup() { + const instance = currentInstance; + markAsyncBoundary(instance); + if (resolvedComp) { + return () => createInnerComp(resolvedComp, instance); + } + const onError = (err) => { + pendingRequest = null; + handleError( + err, + instance, + 13, + !errorComponent + ); + }; + if (suspensible && instance.suspense || isInSSRComponentSetup) { + return load().then((comp) => { + return () => createInnerComp(comp, instance); + }).catch((err) => { + onError(err); + return () => errorComponent ? createVNode(errorComponent, { + error: err + }) : null; + }); + } + const loaded = ref(false); + const error = ref(); + const delayed = ref(!!delay); + if (delay) { + setTimeout(() => { + delayed.value = false; + }, delay); + } + if (timeout != null) { + setTimeout(() => { + if (!loaded.value && !error.value) { + const err = new Error( + `Async component timed out after ${timeout}ms.` + ); + onError(err); + error.value = err; + } + }, timeout); + } + load().then(() => { + loaded.value = true; + if (instance.parent && isKeepAlive(instance.parent.vnode)) { + instance.parent.update(); + } + }).catch((err) => { + onError(err); + error.value = err; + }); + return () => { + if (loaded.value && resolvedComp) { + return createInnerComp(resolvedComp, instance); + } else if (error.value && errorComponent) { + return createVNode(errorComponent, { + error: error.value + }); + } else if (loadingComponent && !delayed.value) { + return createVNode(loadingComponent); + } + }; + } + }); +} +function createInnerComp(comp, parent) { + const { ref: ref22, props, children, ce } = parent.vnode; + const vnode2 = createVNode(comp, props, children); + vnode2.ref = ref22; + vnode2.ce = ce; + delete parent.vnode.ce; + return vnode2; +} +const isKeepAlive = (vnode2) => vnode2.type.__isKeepAlive; +const KeepAliveImpl = { + name: `KeepAlive`, + // Marker for special handling inside the renderer. We are not using a === + // check directly on KeepAlive in the renderer, because importing it directly + // would prevent it from being tree-shaken. + __isKeepAlive: true, + props: { + include: [String, RegExp, Array], + exclude: [String, RegExp, Array], + max: [String, Number] + }, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const sharedContext = instance.ctx; + if (!sharedContext.renderer) { + return () => { + const children = slots.default && slots.default(); + return children && children.length === 1 ? children[0] : children; + }; + } + const cache2 = /* @__PURE__ */ new Map(); + const keys = /* @__PURE__ */ new Set(); + let current = null; + const parentSuspense = instance.suspense; + const { + renderer: { + p: patch, + m: move, + um: _unmount, + o: { createElement: createElement2 } + } + } = sharedContext; + const storageContainer = createElement2("div"); + sharedContext.activate = (vnode2, container, anchor, namespace2, optimized) => { + const instance2 = vnode2.component; + move(vnode2, container, anchor, 0, parentSuspense); + patch( + instance2.vnode, + vnode2, + container, + anchor, + instance2, + parentSuspense, + namespace2, + vnode2.slotScopeIds, + optimized + ); + queuePostRenderEffect(() => { + instance2.isDeactivated = false; + if (instance2.a) { + invokeArrayFns(instance2.a); + } + const vnodeHook = vnode2.props && vnode2.props.onVnodeMounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode2); + } + }, parentSuspense); + }; + sharedContext.deactivate = (vnode2) => { + const instance2 = vnode2.component; + invalidateMount(instance2.m); + invalidateMount(instance2.a); + move(vnode2, storageContainer, null, 1, parentSuspense); + queuePostRenderEffect(() => { + if (instance2.da) { + invokeArrayFns(instance2.da); + } + const vnodeHook = vnode2.props && vnode2.props.onVnodeUnmounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode2); + } + instance2.isDeactivated = true; + }, parentSuspense); + }; + function unmount2(vnode2) { + resetShapeFlag(vnode2); + _unmount(vnode2, instance, parentSuspense, true); + } + function pruneCache(filter2) { + cache2.forEach((vnode2, key) => { + const name2 = getComponentName(vnode2.type); + if (name2 && !filter2(name2)) { + pruneCacheEntry(key); + } + }); + } + function pruneCacheEntry(key) { + const cached = cache2.get(key); + if (cached && (!current || !isSameVNodeType(cached, current))) { + unmount2(cached); + } else if (current) { + resetShapeFlag(current); + } + cache2.delete(key); + keys.delete(key); + } + watch( + () => [props.include, props.exclude], + ([include, exclude]) => { + include && pruneCache((name2) => matches(include, name2)); + exclude && pruneCache((name2) => !matches(exclude, name2)); + }, + // prune post-render after `current` has been updated + { flush: "post", deep: true } + ); + let pendingCacheKey = null; + const cacheSubtree = () => { + if (pendingCacheKey != null) { + if (isSuspense(instance.subTree.type)) { + queuePostRenderEffect(() => { + cache2.set(pendingCacheKey, getInnerChild(instance.subTree)); + }, instance.subTree.suspense); + } else { + cache2.set(pendingCacheKey, getInnerChild(instance.subTree)); + } + } + }; + onMounted(cacheSubtree); + onUpdated(cacheSubtree); + onBeforeUnmount(() => { + cache2.forEach((cached) => { + const { subTree, suspense } = instance; + const vnode2 = getInnerChild(subTree); + if (cached.type === vnode2.type && cached.key === vnode2.key) { + resetShapeFlag(vnode2); + const da = vnode2.component.da; + da && queuePostRenderEffect(da, suspense); + return; + } + unmount2(cached); + }); + }); + return () => { + pendingCacheKey = null; + if (!slots.default) { + return current = null; + } + const children = slots.default(); + const rawVNode = children[0]; + if (children.length > 1) { + current = null; + return children; + } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { + current = null; + return rawVNode; + } + let vnode2 = getInnerChild(rawVNode); + if (vnode2.type === Comment) { + current = null; + return vnode2; + } + const comp = vnode2.type; + const name2 = getComponentName( + isAsyncWrapper(vnode2) ? vnode2.type.__asyncResolved || {} : comp + ); + const { include, exclude, max } = props; + if (include && (!name2 || !matches(include, name2)) || exclude && name2 && matches(exclude, name2)) { + vnode2.shapeFlag &= ~256; + current = vnode2; + return rawVNode; + } + const key = vnode2.key == null ? comp : vnode2.key; + const cachedVNode = cache2.get(key); + if (vnode2.el) { + vnode2 = cloneVNode(vnode2); + if (rawVNode.shapeFlag & 128) { + rawVNode.ssContent = vnode2; + } + } + pendingCacheKey = key; + if (cachedVNode) { + vnode2.el = cachedVNode.el; + vnode2.component = cachedVNode.component; + if (vnode2.transition) { + setTransitionHooks(vnode2, vnode2.transition); + } + vnode2.shapeFlag |= 512; + keys.delete(key); + keys.add(key); + } else { + keys.add(key); + if (max && keys.size > parseInt(max, 10)) { + pruneCacheEntry(keys.values().next().value); + } + } + vnode2.shapeFlag |= 256; + current = vnode2; + return isSuspense(rawVNode.type) ? rawVNode : vnode2; + }; + } +}; +const KeepAlive = KeepAliveImpl; +function matches(pattern, name2) { + if (isArray$3(pattern)) { + return pattern.some((p2) => matches(p2, name2)); + } else if (isString$1(pattern)) { + return pattern.split(",").includes(name2); + } else if (isRegExp$1(pattern)) { + pattern.lastIndex = 0; + return pattern.test(name2); + } + return false; +} +function onActivated(hook, target) { + registerKeepAliveHook(hook, "a", target); +} +function onDeactivated(hook, target) { + registerKeepAliveHook(hook, "da", target); +} +function registerKeepAliveHook(hook, type, target = currentInstance) { + const wrappedHook = hook.__wdc || (hook.__wdc = () => { + let current = target; + while (current) { + if (current.isDeactivated) { + return; + } + current = current.parent; + } + return hook(); + }); + injectHook(type, wrappedHook, target); + if (target) { + let current = target.parent; + while (current && current.parent) { + if (isKeepAlive(current.parent.vnode)) { + injectToKeepAliveRoot(wrappedHook, type, target, current); + } + current = current.parent; + } + } +} +function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { + const injected = injectHook( + type, + hook, + keepAliveRoot, + true + /* prepend */ + ); + onUnmounted(() => { + remove(keepAliveRoot[type], injected); + }, target); +} +function resetShapeFlag(vnode2) { + vnode2.shapeFlag &= ~256; + vnode2.shapeFlag &= ~512; +} +function getInnerChild(vnode2) { + return vnode2.shapeFlag & 128 ? vnode2.ssContent : vnode2; +} +function injectHook(type, hook, target = currentInstance, prepend = false) { + if (target) { + const hooks = target[type] || (target[type] = []); + const wrappedHook = hook.__weh || (hook.__weh = (...args) => { + pauseTracking(); + const reset = setCurrentInstance(target); + const res = callWithAsyncErrorHandling(hook, target, type, args); + reset(); + resetTracking(); + return res; + }); + if (prepend) { + hooks.unshift(wrappedHook); + } else { + hooks.push(wrappedHook); + } + return wrappedHook; + } +} +const createHook = (lifecycle) => (hook, target = currentInstance) => { + if (!isInSSRComponentSetup || lifecycle === "sp") { + injectHook(lifecycle, (...args) => hook(...args), target); + } +}; +const onBeforeMount = createHook("bm"); +const onMounted = createHook("m"); +const onBeforeUpdate = createHook( + "bu" +); +const onUpdated = createHook("u"); +const onBeforeUnmount = createHook( + "bum" +); +const onUnmounted = createHook("um"); +const onServerPrefetch = createHook( + "sp" +); +const onRenderTriggered = createHook("rtg"); +const onRenderTracked = createHook("rtc"); +function onErrorCaptured(hook, target = currentInstance) { + injectHook("ec", hook, target); +} +const COMPONENTS = "components"; +const DIRECTIVES = "directives"; +function resolveComponent(name2, maybeSelfReference) { + return resolveAsset(COMPONENTS, name2, true, maybeSelfReference) || name2; +} +const NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); +function resolveDynamicComponent(component) { + if (isString$1(component)) { + return resolveAsset(COMPONENTS, component, false) || component; + } else { + return component || NULL_DYNAMIC_COMPONENT; + } +} +function resolveDirective(name2) { + return resolveAsset(DIRECTIVES, name2); +} +function resolveAsset(type, name2, warnMissing = true, maybeSelfReference = false) { + const instance = currentRenderingInstance || currentInstance; + if (instance) { + const Component = instance.type; + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + ); + if (selfName && (selfName === name2 || selfName === camelize(name2) || selfName === capitalize(camelize(name2)))) { + return Component; + } + } + const res = ( + // local registration + // check instance[type] first which is resolved for options API + resolve(instance[type] || Component[type], name2) || // global registration + resolve(instance.appContext[type], name2) + ); + if (!res && maybeSelfReference) { + return Component; + } + return res; + } +} +function resolve(registry, name2) { + return registry && (registry[name2] || registry[camelize(name2)] || registry[capitalize(camelize(name2))]); +} +function renderList(source, renderItem, cache2, index) { + let ret; + const cached = cache2; + const sourceIsArray = isArray$3(source); + if (sourceIsArray || isString$1(source)) { + const sourceIsReactiveArray = sourceIsArray && isReactive(source); + let needsWrap = false; + if (sourceIsReactiveArray) { + needsWrap = !isShallow(source); + source = shallowReadArray(source); + } + ret = new Array(source.length); + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem( + needsWrap ? toReactive(source[i]) : source[i], + i, + void 0, + cached + ); + } + } else if (typeof source === "number") { + ret = new Array(source); + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached); + } + } else if (isObject$4(source)) { + if (source[Symbol.iterator]) { + ret = Array.from( + source, + (item, i) => renderItem(item, i, void 0, cached) + ); + } else { + const keys = Object.keys(source); + ret = new Array(keys.length); + for (let i = 0, l = keys.length; i < l; i++) { + const key = keys[i]; + ret[i] = renderItem(source[key], key, i, cached); + } + } + } else { + ret = []; + } + return ret; +} +function renderSlot(slots, name2, props = {}, fallback, noSlotted) { + if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) { + return openBlock(), createBlock( + Fragment, + null, + [createVNode("slot", props, fallback && fallback())], + 64 + ); + } + let slot = slots[name2]; + if (slot && slot._c) { + slot._d = false; + } + openBlock(); + const validSlotContent = slot && ensureValidVNode$1(slot(props)); + const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + validSlotContent && validSlotContent.key; + const rendered = createBlock( + Fragment, + { + key: (slotKey && !isSymbol$1(slotKey) ? slotKey : `_${name2}`) + // #7256 force differentiate fallback content from actual content + (!validSlotContent && fallback ? "_fb" : "") + }, + validSlotContent || (fallback ? fallback() : []), + validSlotContent && slots._ === 1 ? 64 : -2 + ); + if (rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + "-s"]; + } + if (slot && slot._c) { + slot._d = true; + } + return rendered; +} +function ensureValidVNode$1(vnodes) { + return vnodes.some((child) => { + if (!isVNode(child)) return true; + if (child.type === Comment) return false; + if (child.type === Fragment && !ensureValidVNode$1(child.children)) + return false; + return true; + }) ? vnodes : null; +} +const getPublicInstance = (i) => { + if (!i) return null; + if (isStatefulComponent(i)) return getComponentPublicInstance(i); + return getPublicInstance(i.parent); +}; +const publicPropertiesMap = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + /* @__PURE__ */ extend$1(/* @__PURE__ */ Object.create(null), { + $: (i) => i, + $el: (i) => i.vnode.el, + $data: (i) => i.data, + $props: (i) => i.props, + $attrs: (i) => i.attrs, + $slots: (i) => i.slots, + $refs: (i) => i.refs, + $parent: (i) => getPublicInstance(i.parent), + $root: (i) => getPublicInstance(i.root), + $host: (i) => i.ce, + $emit: (i) => i.emit, + $options: (i) => resolveMergedOptions(i), + $forceUpdate: (i) => i.f || (i.f = () => { + queueJob(i.update); + }), + $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), + $watch: (i) => instanceWatch.bind(i) + }) +); +const hasSetupBinding = (state2, key) => state2 !== EMPTY_OBJ && !state2.__isScriptSetup && hasOwn(state2, key); +const PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + if (key === "__v_skip") { + return true; + } + const { ctx: ctx2, setupState, data, props, accessCache, type, appContext } = instance; + let normalizedProps; + if (key[0] !== "$") { + const n = accessCache[key]; + if (n !== void 0) { + switch (n) { + case 1: + return setupState[key]; + case 2: + return data[key]; + case 4: + return ctx2[key]; + case 3: + return props[key]; + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1; + return setupState[key]; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + accessCache[key] = 2; + return data[key]; + } else if ( + // only cache other properties when instance has declared (thus stable) + // props + (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) + ) { + accessCache[key] = 3; + return props[key]; + } else if (ctx2 !== EMPTY_OBJ && hasOwn(ctx2, key)) { + accessCache[key] = 4; + return ctx2[key]; + } else if (shouldCacheAccess) { + accessCache[key] = 0; + } + } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + track(instance.attrs, "get", ""); + } + return publicGetter(instance); + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && (cssModule = cssModule[key]) + ) { + return cssModule; + } else if (ctx2 !== EMPTY_OBJ && hasOwn(ctx2, key)) { + accessCache[key] = 4; + return ctx2[key]; + } else if ( + // global properties + globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) + ) { + { + return globalProperties[key]; + } + } else ; + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx: ctx2 } = instance; + if (hasSetupBinding(setupState, key)) { + setupState[key] = value; + return true; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + data[key] = value; + return true; + } else if (hasOwn(instance.props, key)) { + return false; + } + if (key[0] === "$" && key.slice(1) in instance) { + return false; + } else { + { + ctx2[key] = value; + } + } + return true; + }, + has({ + _: { data, setupState, accessCache, ctx: ctx2, appContext, propsOptions } + }, key) { + let normalizedProps; + return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx2, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key); + }, + defineProperty(target, key, descriptor) { + if (descriptor.get != null) { + target._.accessCache[key] = 0; + } else if (hasOwn(descriptor, "value")) { + this.set(target, key, descriptor.value, null); + } + return Reflect.defineProperty(target, key, descriptor); + } +}; +function normalizePropsOrEmits(props) { + return isArray$3(props) ? props.reduce( + (normalized, p2) => (normalized[p2] = null, normalized), + {} + ) : props; +} +let shouldCacheAccess = true; +function applyOptions(instance) { + const options = resolveMergedOptions(instance); + const publicThis = instance.proxy; + const ctx2 = instance.ctx; + shouldCacheAccess = false; + if (options.beforeCreate) { + callHook$1(options.beforeCreate, instance, "bc"); + } + const { + // state + data: dataOptions, + computed: computedOptions, + methods, + watch: watchOptions, + provide: provideOptions, + inject: injectOptions, + // lifecycle + created, + beforeMount, + mounted, + beforeUpdate, + updated, + activated, + deactivated, + beforeDestroy, + beforeUnmount, + destroyed, + unmounted, + render: render2, + renderTracked, + renderTriggered, + errorCaptured, + serverPrefetch, + // public API + expose, + inheritAttrs, + // assets + components, + directives: directives2, + filters + } = options; + const checkDuplicateProperties = null; + if (injectOptions) { + resolveInjections(injectOptions, ctx2, checkDuplicateProperties); + } + if (methods) { + for (const key in methods) { + const methodHandler = methods[key]; + if (isFunction$2(methodHandler)) { + { + ctx2[key] = methodHandler.bind(publicThis); + } + } + } + } + if (dataOptions) { + const data = dataOptions.call(publicThis, publicThis); + if (!isObject$4(data)) ; + else { + instance.data = reactive(data); + } + } + shouldCacheAccess = true; + if (computedOptions) { + for (const key in computedOptions) { + const opt = computedOptions[key]; + const get2 = isFunction$2(opt) ? opt.bind(publicThis, publicThis) : isFunction$2(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP; + const set = !isFunction$2(opt) && isFunction$2(opt.set) ? opt.set.bind(publicThis) : NOOP; + const c2 = computed({ + get: get2, + set + }); + Object.defineProperty(ctx2, key, { + enumerable: true, + configurable: true, + get: () => c2.value, + set: (v) => c2.value = v + }); + } + } + if (watchOptions) { + for (const key in watchOptions) { + createWatcher(watchOptions[key], ctx2, publicThis, key); + } + } + if (provideOptions) { + const provides = isFunction$2(provideOptions) ? provideOptions.call(publicThis) : provideOptions; + Reflect.ownKeys(provides).forEach((key) => { + provide(key, provides[key]); + }); + } + if (created) { + callHook$1(created, instance, "c"); + } + function registerLifecycleHook(register2, hook) { + if (isArray$3(hook)) { + hook.forEach((_hook) => register2(_hook.bind(publicThis))); + } else if (hook) { + register2(hook.bind(publicThis)); + } + } + registerLifecycleHook(onBeforeMount, beforeMount); + registerLifecycleHook(onMounted, mounted); + registerLifecycleHook(onBeforeUpdate, beforeUpdate); + registerLifecycleHook(onUpdated, updated); + registerLifecycleHook(onActivated, activated); + registerLifecycleHook(onDeactivated, deactivated); + registerLifecycleHook(onErrorCaptured, errorCaptured); + registerLifecycleHook(onRenderTracked, renderTracked); + registerLifecycleHook(onRenderTriggered, renderTriggered); + registerLifecycleHook(onBeforeUnmount, beforeUnmount); + registerLifecycleHook(onUnmounted, unmounted); + registerLifecycleHook(onServerPrefetch, serverPrefetch); + if (isArray$3(expose)) { + if (expose.length) { + const exposed = instance.exposed || (instance.exposed = {}); + expose.forEach((key) => { + Object.defineProperty(exposed, key, { + get: () => publicThis[key], + set: (val) => publicThis[key] = val + }); + }); + } else if (!instance.exposed) { + instance.exposed = {}; + } + } + if (render2 && instance.render === NOOP) { + instance.render = render2; + } + if (inheritAttrs != null) { + instance.inheritAttrs = inheritAttrs; + } + if (components) instance.components = components; + if (directives2) instance.directives = directives2; + if (serverPrefetch) { + markAsyncBoundary(instance); + } +} +function resolveInjections(injectOptions, ctx2, checkDuplicateProperties = NOOP) { + if (isArray$3(injectOptions)) { + injectOptions = normalizeInject(injectOptions); + } + for (const key in injectOptions) { + const opt = injectOptions[key]; + let injected; + if (isObject$4(opt)) { + if ("default" in opt) { + injected = inject( + opt.from || key, + opt.default, + true + ); + } else { + injected = inject(opt.from || key); + } + } else { + injected = inject(opt); + } + if (isRef(injected)) { + Object.defineProperty(ctx2, key, { + enumerable: true, + configurable: true, + get: () => injected.value, + set: (v) => injected.value = v + }); + } else { + ctx2[key] = injected; + } + } +} +function callHook$1(hook, instance, type) { + callWithAsyncErrorHandling( + isArray$3(hook) ? hook.map((h2) => h2.bind(instance.proxy)) : hook.bind(instance.proxy), + instance, + type + ); +} +function createWatcher(raw, ctx2, publicThis, key) { + let getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key]; + if (isString$1(raw)) { + const handler = ctx2[raw]; + if (isFunction$2(handler)) { + { + watch(getter, handler); + } + } + } else if (isFunction$2(raw)) { + { + watch(getter, raw.bind(publicThis)); + } + } else if (isObject$4(raw)) { + if (isArray$3(raw)) { + raw.forEach((r) => createWatcher(r, ctx2, publicThis, key)); + } else { + const handler = isFunction$2(raw.handler) ? raw.handler.bind(publicThis) : ctx2[raw.handler]; + if (isFunction$2(handler)) { + watch(getter, handler, raw); + } + } + } else ; +} +function resolveMergedOptions(instance) { + const base2 = instance.type; + const { mixins, extends: extendsOptions } = base2; + const { + mixins: globalMixins, + optionsCache: cache2, + config: { optionMergeStrategies } + } = instance.appContext; + const cached = cache2.get(base2); + let resolved; + if (cached) { + resolved = cached; + } else if (!globalMixins.length && !mixins && !extendsOptions) { + { + resolved = base2; + } + } else { + resolved = {}; + if (globalMixins.length) { + globalMixins.forEach( + (m) => mergeOptions$1(resolved, m, optionMergeStrategies, true) + ); + } + mergeOptions$1(resolved, base2, optionMergeStrategies); + } + if (isObject$4(base2)) { + cache2.set(base2, resolved); + } + return resolved; +} +function mergeOptions$1(to, from, strats, asMixin = false) { + const { mixins, extends: extendsOptions } = from; + if (extendsOptions) { + mergeOptions$1(to, extendsOptions, strats, true); + } + if (mixins) { + mixins.forEach( + (m) => mergeOptions$1(to, m, strats, true) + ); + } + for (const key in from) { + if (asMixin && key === "expose") ; + else { + const strat = internalOptionMergeStrats[key] || strats && strats[key]; + to[key] = strat ? strat(to[key], from[key]) : from[key]; + } + } + return to; +} +const internalOptionMergeStrats = { + data: mergeDataFn, + props: mergeEmitsOrPropsOptions, + emits: mergeEmitsOrPropsOptions, + // objects + methods: mergeObjectOptions, + computed: mergeObjectOptions, + // lifecycle + beforeCreate: mergeAsArray, + created: mergeAsArray, + beforeMount: mergeAsArray, + mounted: mergeAsArray, + beforeUpdate: mergeAsArray, + updated: mergeAsArray, + beforeDestroy: mergeAsArray, + beforeUnmount: mergeAsArray, + destroyed: mergeAsArray, + unmounted: mergeAsArray, + activated: mergeAsArray, + deactivated: mergeAsArray, + errorCaptured: mergeAsArray, + serverPrefetch: mergeAsArray, + // assets + components: mergeObjectOptions, + directives: mergeObjectOptions, + // watch + watch: mergeWatchOptions, + // provide / inject + provide: mergeDataFn, + inject: mergeInject +}; +function mergeDataFn(to, from) { + if (!from) { + return to; + } + if (!to) { + return from; + } + return function mergedDataFn() { + return extend$1( + isFunction$2(to) ? to.call(this, this) : to, + isFunction$2(from) ? from.call(this, this) : from + ); + }; +} +function mergeInject(to, from) { + return mergeObjectOptions(normalizeInject(to), normalizeInject(from)); +} +function normalizeInject(raw) { + if (isArray$3(raw)) { + const res = {}; + for (let i = 0; i < raw.length; i++) { + res[raw[i]] = raw[i]; + } + return res; + } + return raw; +} +function mergeAsArray(to, from) { + return to ? [...new Set([].concat(to, from))] : from; +} +function mergeObjectOptions(to, from) { + return to ? extend$1(/* @__PURE__ */ Object.create(null), to, from) : from; +} +function mergeEmitsOrPropsOptions(to, from) { + if (to) { + if (isArray$3(to) && isArray$3(from)) { + return [.../* @__PURE__ */ new Set([...to, ...from])]; + } + return extend$1( + /* @__PURE__ */ Object.create(null), + normalizePropsOrEmits(to), + normalizePropsOrEmits(from != null ? from : {}) + ); + } else { + return from; + } +} +function mergeWatchOptions(to, from) { + if (!to) return from; + if (!from) return to; + const merged = extend$1(/* @__PURE__ */ Object.create(null), to); + for (const key in from) { + merged[key] = mergeAsArray(to[key], from[key]); + } + return merged; +} +function createAppContext() { + return { + app: null, + config: { + isNativeTag: NO, + performance: false, + globalProperties: {}, + optionMergeStrategies: {}, + errorHandler: void 0, + warnHandler: void 0, + compilerOptions: {} + }, + mixins: [], + components: {}, + directives: {}, + provides: /* @__PURE__ */ Object.create(null), + optionsCache: /* @__PURE__ */ new WeakMap(), + propsCache: /* @__PURE__ */ new WeakMap(), + emitsCache: /* @__PURE__ */ new WeakMap() + }; +} +let uid$1 = 0; +function createAppAPI(render2, hydrate) { + return function createApp2(rootComponent, rootProps = null) { + if (!isFunction$2(rootComponent)) { + rootComponent = extend$1({}, rootComponent); + } + if (rootProps != null && !isObject$4(rootProps)) { + rootProps = null; + } + const context = createAppContext(); + const installedPlugins = /* @__PURE__ */ new WeakSet(); + const pluginCleanupFns = []; + let isMounted2 = false; + const app2 = context.app = { + _uid: uid$1++, + _component: rootComponent, + _props: rootProps, + _container: null, + _context: context, + _instance: null, + version: version$1, + get config() { + return context.config; + }, + set config(v) { + }, + use(plugin2, ...options) { + if (installedPlugins.has(plugin2)) ; + else if (plugin2 && isFunction$2(plugin2.install)) { + installedPlugins.add(plugin2); + plugin2.install(app2, ...options); + } else if (isFunction$2(plugin2)) { + installedPlugins.add(plugin2); + plugin2(app2, ...options); + } else ; + return app2; + }, + mixin(mixin) { + { + if (!context.mixins.includes(mixin)) { + context.mixins.push(mixin); + } + } + return app2; + }, + component(name2, component) { + if (!component) { + return context.components[name2]; + } + context.components[name2] = component; + return app2; + }, + directive(name2, directive) { + if (!directive) { + return context.directives[name2]; + } + context.directives[name2] = directive; + return app2; + }, + mount(rootContainer, isHydrate, namespace2) { + if (!isMounted2) { + const vnode2 = app2._ceVNode || createVNode(rootComponent, rootProps); + vnode2.appContext = context; + if (namespace2 === true) { + namespace2 = "svg"; + } else if (namespace2 === false) { + namespace2 = void 0; + } + { + render2(vnode2, rootContainer, namespace2); + } + isMounted2 = true; + app2._container = rootContainer; + rootContainer.__vue_app__ = app2; + return getComponentPublicInstance(vnode2.component); + } + }, + onUnmount(cleanupFn) { + pluginCleanupFns.push(cleanupFn); + }, + unmount() { + if (isMounted2) { + callWithAsyncErrorHandling( + pluginCleanupFns, + app2._instance, + 16 + ); + render2(null, app2._container); + delete app2._container.__vue_app__; + } + }, + provide(key, value) { + context.provides[key] = value; + return app2; + }, + runWithContext(fn) { + const lastApp = currentApp; + currentApp = app2; + try { + return fn(); + } finally { + currentApp = lastApp; + } + } + }; + return app2; + }; +} +let currentApp = null; +function provide(key, value) { + if (!currentInstance) ; + else { + let provides = currentInstance.provides; + const parentProvides = currentInstance.parent && currentInstance.parent.provides; + if (parentProvides === provides) { + provides = currentInstance.provides = Object.create(parentProvides); + } + provides[key] = value; + } +} +function inject(key, defaultValue, treatDefaultAsFactory = false) { + const instance = currentInstance || currentRenderingInstance; + if (instance || currentApp) { + const provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0; + if (provides && key in provides) { + return provides[key]; + } else if (arguments.length > 1) { + return treatDefaultAsFactory && isFunction$2(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue; + } else ; + } +} +const internalObjectProto = {}; +const createInternalObject = () => Object.create(internalObjectProto); +const isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto; +function initProps(instance, rawProps, isStateful, isSSR = false) { + const props = {}; + const attrs = createInternalObject(); + instance.propsDefaults = /* @__PURE__ */ Object.create(null); + setFullProps(instance, rawProps, props, attrs); + for (const key in instance.propsOptions[0]) { + if (!(key in props)) { + props[key] = void 0; + } + } + if (isStateful) { + instance.props = isSSR ? props : shallowReactive(props); + } else { + if (!instance.type.props) { + instance.props = attrs; + } else { + instance.props = props; + } + } + instance.attrs = attrs; +} +function updateProps(instance, rawProps, rawPrevProps, optimized) { + const { + props, + attrs, + vnode: { patchFlag } + } = instance; + const rawCurrentProps = toRaw(props); + const [options] = instance.propsOptions; + let hasAttrsChanged = false; + if ( + // always force full diff in dev + // - #1942 if hmr is enabled with sfc component + // - vite#872 non-sfc component used by sfc component + (optimized || patchFlag > 0) && !(patchFlag & 16) + ) { + if (patchFlag & 8) { + const propsToUpdate = instance.vnode.dynamicProps; + for (let i = 0; i < propsToUpdate.length; i++) { + let key = propsToUpdate[i]; + if (isEmitListener(instance.emitsOptions, key)) { + continue; + } + const value = rawProps[key]; + if (options) { + if (hasOwn(attrs, key)) { + if (value !== attrs[key]) { + attrs[key] = value; + hasAttrsChanged = true; + } + } else { + const camelizedKey = camelize(key); + props[camelizedKey] = resolvePropValue( + options, + rawCurrentProps, + camelizedKey, + value, + instance, + false + ); + } + } else { + if (value !== attrs[key]) { + attrs[key] = value; + hasAttrsChanged = true; + } + } + } + } + } else { + if (setFullProps(instance, rawProps, props, attrs)) { + hasAttrsChanged = true; + } + let kebabKey; + for (const key in rawCurrentProps) { + if (!rawProps || // for camelCase + !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case + // and converted to camelCase (#955) + ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) { + if (options) { + if (rawPrevProps && // for camelCase + (rawPrevProps[key] !== void 0 || // for kebab-case + rawPrevProps[kebabKey] !== void 0)) { + props[key] = resolvePropValue( + options, + rawCurrentProps, + key, + void 0, + instance, + true + ); + } + } else { + delete props[key]; + } + } + } + if (attrs !== rawCurrentProps) { + for (const key in attrs) { + if (!rawProps || !hasOwn(rawProps, key) && true) { + delete attrs[key]; + hasAttrsChanged = true; + } + } + } + } + if (hasAttrsChanged) { + trigger$1(instance.attrs, "set", ""); + } +} +function setFullProps(instance, rawProps, props, attrs) { + const [options, needCastKeys] = instance.propsOptions; + let hasAttrsChanged = false; + let rawCastValues; + if (rawProps) { + for (let key in rawProps) { + if (isReservedProp(key)) { + continue; + } + const value = rawProps[key]; + let camelKey; + if (options && hasOwn(options, camelKey = camelize(key))) { + if (!needCastKeys || !needCastKeys.includes(camelKey)) { + props[camelKey] = value; + } else { + (rawCastValues || (rawCastValues = {}))[camelKey] = value; + } + } else if (!isEmitListener(instance.emitsOptions, key)) { + if (!(key in attrs) || value !== attrs[key]) { + attrs[key] = value; + hasAttrsChanged = true; + } + } + } + } + if (needCastKeys) { + const rawCurrentProps = toRaw(props); + const castValues = rawCastValues || EMPTY_OBJ; + for (let i = 0; i < needCastKeys.length; i++) { + const key = needCastKeys[i]; + props[key] = resolvePropValue( + options, + rawCurrentProps, + key, + castValues[key], + instance, + !hasOwn(castValues, key) + ); + } + } + return hasAttrsChanged; +} +function resolvePropValue(options, props, key, value, instance, isAbsent) { + const opt = options[key]; + if (opt != null) { + const hasDefault = hasOwn(opt, "default"); + if (hasDefault && value === void 0) { + const defaultValue = opt.default; + if (opt.type !== Function && !opt.skipFactory && isFunction$2(defaultValue)) { + const { propsDefaults } = instance; + if (key in propsDefaults) { + value = propsDefaults[key]; + } else { + const reset = setCurrentInstance(instance); + value = propsDefaults[key] = defaultValue.call( + null, + props + ); + reset(); + } + } else { + value = defaultValue; + } + if (instance.ce) { + instance.ce._setProp(key, value); + } + } + if (opt[ + 0 + /* shouldCast */ + ]) { + if (isAbsent && !hasDefault) { + value = false; + } else if (opt[ + 1 + /* shouldCastTrue */ + ] && (value === "" || value === hyphenate(key))) { + value = true; + } + } + } + return value; +} +const mixinPropsCache = /* @__PURE__ */ new WeakMap(); +function normalizePropsOptions(comp, appContext, asMixin = false) { + const cache2 = asMixin ? mixinPropsCache : appContext.propsCache; + const cached = cache2.get(comp); + if (cached) { + return cached; + } + const raw = comp.props; + const normalized = {}; + const needCastKeys = []; + let hasExtends = false; + if (!isFunction$2(comp)) { + const extendProps = (raw2) => { + hasExtends = true; + const [props, keys] = normalizePropsOptions(raw2, appContext, true); + extend$1(normalized, props); + if (keys) needCastKeys.push(...keys); + }; + if (!asMixin && appContext.mixins.length) { + appContext.mixins.forEach(extendProps); + } + if (comp.extends) { + extendProps(comp.extends); + } + if (comp.mixins) { + comp.mixins.forEach(extendProps); + } + } + if (!raw && !hasExtends) { + if (isObject$4(comp)) { + cache2.set(comp, EMPTY_ARR); + } + return EMPTY_ARR; + } + if (isArray$3(raw)) { + for (let i = 0; i < raw.length; i++) { + const normalizedKey = camelize(raw[i]); + if (validatePropName(normalizedKey)) { + normalized[normalizedKey] = EMPTY_OBJ; + } + } + } else if (raw) { + for (const key in raw) { + const normalizedKey = camelize(key); + if (validatePropName(normalizedKey)) { + const opt = raw[key]; + const prop = normalized[normalizedKey] = isArray$3(opt) || isFunction$2(opt) ? { type: opt } : extend$1({}, opt); + const propType = prop.type; + let shouldCast = false; + let shouldCastTrue = true; + if (isArray$3(propType)) { + for (let index = 0; index < propType.length; ++index) { + const type = propType[index]; + const typeName = isFunction$2(type) && type.name; + if (typeName === "Boolean") { + shouldCast = true; + break; + } else if (typeName === "String") { + shouldCastTrue = false; + } + } + } else { + shouldCast = isFunction$2(propType) && propType.name === "Boolean"; + } + prop[ + 0 + /* shouldCast */ + ] = shouldCast; + prop[ + 1 + /* shouldCastTrue */ + ] = shouldCastTrue; + if (shouldCast || hasOwn(prop, "default")) { + needCastKeys.push(normalizedKey); + } + } + } + } + const res = [normalized, needCastKeys]; + if (isObject$4(comp)) { + cache2.set(comp, res); + } + return res; +} +function validatePropName(key) { + if (key[0] !== "$" && !isReservedProp(key)) { + return true; + } + return false; +} +const isInternalKey = (key) => key[0] === "_" || key === "$stable"; +const normalizeSlotValue = (value) => isArray$3(value) ? value.map(normalizeVNode) : [normalizeVNode(value)]; +const normalizeSlot$1 = (key, rawSlot, ctx2) => { + if (rawSlot._n) { + return rawSlot; + } + const normalized = withCtx((...args) => { + if (false) ; + return normalizeSlotValue(rawSlot(...args)); + }, ctx2); + normalized._c = false; + return normalized; +}; +const normalizeObjectSlots = (rawSlots, slots, instance) => { + const ctx2 = rawSlots._ctx; + for (const key in rawSlots) { + if (isInternalKey(key)) continue; + const value = rawSlots[key]; + if (isFunction$2(value)) { + slots[key] = normalizeSlot$1(key, value, ctx2); + } else if (value != null) { + const normalized = normalizeSlotValue(value); + slots[key] = () => normalized; + } + } +}; +const normalizeVNodeSlots = (instance, children) => { + const normalized = normalizeSlotValue(children); + instance.slots.default = () => normalized; +}; +const assignSlots = (slots, children, optimized) => { + for (const key in children) { + if (optimized || key !== "_") { + slots[key] = children[key]; + } + } +}; +const initSlots = (instance, children, optimized) => { + const slots = instance.slots = createInternalObject(); + if (instance.vnode.shapeFlag & 32) { + const type = children._; + if (type) { + assignSlots(slots, children, optimized); + if (optimized) { + def$1(slots, "_", type, true); + } + } else { + normalizeObjectSlots(children, slots); + } + } else if (children) { + normalizeVNodeSlots(instance, children); + } +}; +const updateSlots = (instance, children, optimized) => { + const { vnode: vnode2, slots } = instance; + let needDeletionCheck = true; + let deletionComparisonTarget = EMPTY_OBJ; + if (vnode2.shapeFlag & 32) { + const type = children._; + if (type) { + if (optimized && type === 1) { + needDeletionCheck = false; + } else { + assignSlots(slots, children, optimized); + } + } else { + needDeletionCheck = !children.$stable; + normalizeObjectSlots(children, slots); + } + deletionComparisonTarget = children; + } else if (children) { + normalizeVNodeSlots(instance, children); + deletionComparisonTarget = { default: 1 }; + } + if (needDeletionCheck) { + for (const key in slots) { + if (!isInternalKey(key) && deletionComparisonTarget[key] == null) { + delete slots[key]; + } + } + } +}; +const queuePostRenderEffect = queueEffectWithSuspense; +function createRenderer(options) { + return baseCreateRenderer(options); +} +function baseCreateRenderer(options, createHydrationFns) { + const target = getGlobalThis(); + target.__VUE__ = true; + const { + insert: hostInsert, + remove: hostRemove, + patchProp: hostPatchProp, + createElement: hostCreateElement, + createText: hostCreateText, + createComment: hostCreateComment, + setText: hostSetText, + setElementText: hostSetElementText, + parentNode: hostParentNode, + nextSibling: hostNextSibling, + setScopeId: hostSetScopeId = NOOP, + insertStaticContent: hostInsertStaticContent + } = options; + const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace2 = void 0, slotScopeIds = null, optimized = !!n2.dynamicChildren) => { + if (n1 === n2) { + return; + } + if (n1 && !isSameVNodeType(n1, n2)) { + anchor = getNextHostNode(n1); + unmount2(n1, parentComponent, parentSuspense, true); + n1 = null; + } + if (n2.patchFlag === -2) { + optimized = false; + n2.dynamicChildren = null; + } + const { type, ref: ref3, shapeFlag } = n2; + switch (type) { + case Text: + processText(n1, n2, container, anchor); + break; + case Comment: + processCommentNode(n1, n2, container, anchor); + break; + case Static: + if (n1 == null) { + mountStaticNode(n2, container, anchor, namespace2); + } + break; + case Fragment: + processFragment( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized + ); + break; + default: + if (shapeFlag & 1) { + processElement( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized + ); + } else if (shapeFlag & 6) { + processComponent( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized + ); + } else if (shapeFlag & 64) { + type.process( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized, + internals + ); + } else if (shapeFlag & 128) { + type.process( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized, + internals + ); + } else ; + } + if (ref3 != null && parentComponent) { + setRef(ref3, n1 && n1.ref, parentSuspense, n2 || n1, !n2); + } + }; + const processText = (n1, n2, container, anchor) => { + if (n1 == null) { + hostInsert( + n2.el = hostCreateText(n2.children), + container, + anchor + ); + } else { + const el = n2.el = n1.el; + if (n2.children !== n1.children) { + hostSetText(el, n2.children); + } + } + }; + const processCommentNode = (n1, n2, container, anchor) => { + if (n1 == null) { + hostInsert( + n2.el = hostCreateComment(n2.children || ""), + container, + anchor + ); + } else { + n2.el = n1.el; + } + }; + const mountStaticNode = (n2, container, anchor, namespace2) => { + [n2.el, n2.anchor] = hostInsertStaticContent( + n2.children, + container, + anchor, + namespace2, + n2.el, + n2.anchor + ); + }; + const moveStaticNode = ({ el, anchor }, container, nextSibling) => { + let next; + while (el && el !== anchor) { + next = hostNextSibling(el); + hostInsert(el, container, nextSibling); + el = next; + } + hostInsert(anchor, container, nextSibling); + }; + const removeStaticNode = ({ el, anchor }) => { + let next; + while (el && el !== anchor) { + next = hostNextSibling(el); + hostRemove(el); + el = next; + } + hostRemove(anchor); + }; + const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace2, slotScopeIds, optimized) => { + if (n2.type === "svg") { + namespace2 = "svg"; + } else if (n2.type === "math") { + namespace2 = "mathml"; + } + if (n1 == null) { + mountElement( + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized + ); + } else { + patchElement( + n1, + n2, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized + ); + } + }; + const mountElement = (vnode2, container, anchor, parentComponent, parentSuspense, namespace2, slotScopeIds, optimized) => { + let el; + let vnodeHook; + const { props, shapeFlag, transition, dirs } = vnode2; + el = vnode2.el = hostCreateElement( + vnode2.type, + namespace2, + props && props.is, + props + ); + if (shapeFlag & 8) { + hostSetElementText(el, vnode2.children); + } else if (shapeFlag & 16) { + mountChildren( + vnode2.children, + el, + null, + parentComponent, + parentSuspense, + resolveChildrenNamespace(vnode2, namespace2), + slotScopeIds, + optimized + ); + } + if (dirs) { + invokeDirectiveHook(vnode2, null, parentComponent, "created"); + } + setScopeId(el, vnode2, vnode2.scopeId, slotScopeIds, parentComponent); + if (props) { + for (const key in props) { + if (key !== "value" && !isReservedProp(key)) { + hostPatchProp(el, key, null, props[key], namespace2, parentComponent); + } + } + if ("value" in props) { + hostPatchProp(el, "value", null, props.value, namespace2); + } + if (vnodeHook = props.onVnodeBeforeMount) { + invokeVNodeHook(vnodeHook, parentComponent, vnode2); + } + } + if (dirs) { + invokeDirectiveHook(vnode2, null, parentComponent, "beforeMount"); + } + const needCallTransitionHooks = needTransition(parentSuspense, transition); + if (needCallTransitionHooks) { + transition.beforeEnter(el); + } + hostInsert(el, container, anchor); + if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) { + queuePostRenderEffect(() => { + vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode2); + needCallTransitionHooks && transition.enter(el); + dirs && invokeDirectiveHook(vnode2, null, parentComponent, "mounted"); + }, parentSuspense); + } + }; + const setScopeId = (el, vnode2, scopeId, slotScopeIds, parentComponent) => { + if (scopeId) { + hostSetScopeId(el, scopeId); + } + if (slotScopeIds) { + for (let i = 0; i < slotScopeIds.length; i++) { + hostSetScopeId(el, slotScopeIds[i]); + } + } + if (parentComponent) { + let subTree = parentComponent.subTree; + if (vnode2 === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode2 || subTree.ssFallback === vnode2)) { + const parentVNode = parentComponent.vnode; + setScopeId( + el, + parentVNode, + parentVNode.scopeId, + parentVNode.slotScopeIds, + parentComponent.parent + ); + } + } + }; + const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace2, slotScopeIds, optimized, start = 0) => { + for (let i = start; i < children.length; i++) { + const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]); + patch( + null, + child, + container, + anchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized + ); + } + }; + const patchElement = (n1, n2, parentComponent, parentSuspense, namespace2, slotScopeIds, optimized) => { + const el = n2.el = n1.el; + let { patchFlag, dynamicChildren, dirs } = n2; + patchFlag |= n1.patchFlag & 16; + const oldProps = n1.props || EMPTY_OBJ; + const newProps = n2.props || EMPTY_OBJ; + let vnodeHook; + parentComponent && toggleRecurse(parentComponent, false); + if (vnodeHook = newProps.onVnodeBeforeUpdate) { + invokeVNodeHook(vnodeHook, parentComponent, n2, n1); + } + if (dirs) { + invokeDirectiveHook(n2, n1, parentComponent, "beforeUpdate"); + } + parentComponent && toggleRecurse(parentComponent, true); + if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) { + hostSetElementText(el, ""); + } + if (dynamicChildren) { + patchBlockChildren( + n1.dynamicChildren, + dynamicChildren, + el, + parentComponent, + parentSuspense, + resolveChildrenNamespace(n2, namespace2), + slotScopeIds + ); + } else if (!optimized) { + patchChildren( + n1, + n2, + el, + null, + parentComponent, + parentSuspense, + resolveChildrenNamespace(n2, namespace2), + slotScopeIds, + false + ); + } + if (patchFlag > 0) { + if (patchFlag & 16) { + patchProps(el, oldProps, newProps, parentComponent, namespace2); + } else { + if (patchFlag & 2) { + if (oldProps.class !== newProps.class) { + hostPatchProp(el, "class", null, newProps.class, namespace2); + } + } + if (patchFlag & 4) { + hostPatchProp(el, "style", oldProps.style, newProps.style, namespace2); + } + if (patchFlag & 8) { + const propsToUpdate = n2.dynamicProps; + for (let i = 0; i < propsToUpdate.length; i++) { + const key = propsToUpdate[i]; + const prev = oldProps[key]; + const next = newProps[key]; + if (next !== prev || key === "value") { + hostPatchProp(el, key, prev, next, namespace2, parentComponent); + } + } + } + } + if (patchFlag & 1) { + if (n1.children !== n2.children) { + hostSetElementText(el, n2.children); + } + } + } else if (!optimized && dynamicChildren == null) { + patchProps(el, oldProps, newProps, parentComponent, namespace2); + } + if ((vnodeHook = newProps.onVnodeUpdated) || dirs) { + queuePostRenderEffect(() => { + vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1); + dirs && invokeDirectiveHook(n2, n1, parentComponent, "updated"); + }, parentSuspense); + } + }; + const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace2, slotScopeIds) => { + for (let i = 0; i < newChildren.length; i++) { + const oldVNode = oldChildren[i]; + const newVNode = newChildren[i]; + const container = ( + // oldVNode may be an errored async setup() component inside Suspense + // which will not have a mounted element + oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent + // of the Fragment itself so it can move its children. + (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement + // which also requires the correct parent container + !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything. + oldVNode.shapeFlag & (6 | 64)) ? hostParentNode(oldVNode.el) : ( + // In other cases, the parent container is not actually used so we + // just pass the block element here to avoid a DOM parentNode call. + fallbackContainer + ) + ); + patch( + oldVNode, + newVNode, + container, + null, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + true + ); + } + }; + const patchProps = (el, oldProps, newProps, parentComponent, namespace2) => { + if (oldProps !== newProps) { + if (oldProps !== EMPTY_OBJ) { + for (const key in oldProps) { + if (!isReservedProp(key) && !(key in newProps)) { + hostPatchProp( + el, + key, + oldProps[key], + null, + namespace2, + parentComponent + ); + } + } + } + for (const key in newProps) { + if (isReservedProp(key)) continue; + const next = newProps[key]; + const prev = oldProps[key]; + if (next !== prev && key !== "value") { + hostPatchProp(el, key, prev, next, namespace2, parentComponent); + } + } + if ("value" in newProps) { + hostPatchProp(el, "value", oldProps.value, newProps.value, namespace2); + } + } + }; + const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace2, slotScopeIds, optimized) => { + const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(""); + const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(""); + let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2; + if (fragmentSlotScopeIds) { + slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; + } + if (n1 == null) { + hostInsert(fragmentStartAnchor, container, anchor); + hostInsert(fragmentEndAnchor, container, anchor); + mountChildren( + // #10007 + // such fragment like `<>` will be compiled into + // a fragment which doesn't have a children. + // In this case fallback to an empty array + n2.children || [], + container, + fragmentEndAnchor, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds, + optimized + ); + } else { + if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result + // of renderSlot() with no valid children + n1.dynamicChildren) { + patchBlockChildren( + n1.dynamicChildren, + dynamicChildren, + container, + parentComponent, + parentSuspense, + namespace2, + slotScopeIds + ); + if ( + // #2080 if the stable fragment has a key, it's a