diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..6710282
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,44 @@
+name: Build
+
+on:
+ push:
+ tags:
+ - "v*"
+
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [macos-latest, windows-latest]
+
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v3
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: 20
+ cache: "yarn"
+
+ - name: Install Dependencies
+ run: yarn
+
+ - name: Build Release Files
+ run: yarn build
+ env:
+ GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
+
+ - name: Release
+ uses: softprops/action-gh-release@v1
+ with:
+ files: |
+ release/*/*.dmg
+ release/*/*.exe
+ release/*/*.blockmap
+ release/*/latest*.yml
+ draft: false
+ env:
+ GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4ca0c3c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,36 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+dist-electron
+release
+*.local
+
+# Editor directories and files
+.vscode/.debug.env
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+#lockfile
+pnpm-lock.yaml
+/test-results/
+/playwright-report/
+/playwright/.cache/
+
+
+
+/wallpaper
+/userData
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000..c483022
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+shamefully-hoist=true
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..544138b
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,3 @@
+{
+ "singleQuote": true
+}
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2876e67
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Jarvay
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0e3307b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,30 @@
+
+
+## 一个定时换壁纸的软件,你可以在不同时间段设置不同的壁纸。
+
+比如在工作日9:00-10:30显示壁纸[摸鱼中],
+10:31-11:59显示壁纸[今天吃什么],
+12:00开始显示[干饭],
+在周五整天显示[老子明天不上班]。
+
+### 支持功能
+- 支持Mac及Windows
+- 支持动态及静态壁纸
+- 支持不同屏幕显示不同壁纸
+- 支持按时间段显示固定壁纸或定时更换壁纸
+
+
+### 使用方法
+从[release](https://github.com/Jarvay/Workpaper/release)中下载并安装即可
+
diff --git a/build/icon.icns b/build/icon.icns
new file mode 100644
index 0000000..bb89c5b
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..6eaf8df
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..400ed1b
Binary files /dev/null and b/build/icon.png differ
diff --git a/cross/consts.ts b/cross/consts.ts
new file mode 100644
index 0000000..7d0b06d
--- /dev/null
+++ b/cross/consts.ts
@@ -0,0 +1,10 @@
+import { WallpaperType } from './enums';
+
+export const IMAGE_EXT_LIST = ['jpg', 'jpeg', 'png', 'heic', 'webp'];
+
+export const VIDEO_EXT_LIST = ['mp4'];
+
+export const WALLPAPER_TYPE_ROUTES = {
+ [WallpaperType.Image]: 'static',
+ [WallpaperType.Video]: 'live',
+};
diff --git a/cross/date.ts b/cross/date.ts
new file mode 100644
index 0000000..094c303
--- /dev/null
+++ b/cross/date.ts
@@ -0,0 +1,8 @@
+import dayjs from 'dayjs';
+
+export function timeToSeconds(timeStr: string) {
+ const day = '2001-01-01';
+ const dateStart = dayjs(`${day} 00:00`);
+ const timeDayjs = dayjs(`${day} ${timeStr}`);
+ return timeDayjs.diff(dateStart, 'seconds');
+}
diff --git a/cross/enums.ts b/cross/enums.ts
new file mode 100644
index 0000000..5da98c9
--- /dev/null
+++ b/cross/enums.ts
@@ -0,0 +1,81 @@
+export enum ChangeType {
+ Fixed,
+ AutoChange,
+}
+
+export enum FormMode {
+ Create,
+ Update,
+}
+
+export enum Events {
+ SelectImage = 'SelectImage',
+ SelectVideo = 'SelectVideo',
+ SelectDir = 'SelectDir',
+
+ ResetSchedule = 'ResetSchedule',
+
+ SaveRules = 'SaveRules',
+ SaveWeekdays = 'SaveWeekdays',
+
+ GetLocale = 'GetLocale',
+ SettingsChange = 'SettingsChange',
+ InitSettings = 'InitSettings',
+
+ GetPlatform = 'GetPlatform',
+
+ SetStaticWallpaper = 'SetStaticWallpaper',
+ SetLiveWallpaper = 'SetLiveWallpaper',
+ SetLiveWallpaperMuted = 'SetLiveWallpaperMuted',
+ SetLiveWallpaperVolume = 'SetLiveWallpaperVolume',
+
+ SetDBItem = 'SetDBItem',
+ GetDBItem = 'GetDBItem',
+
+ WallpaperWinReady = 'WallpaperWinReady',
+ LiveWallpaperLoaded = 'LiveWallpaperLoaded',
+ StaticWallpaperLoaded = 'StaticWallpaperLoaded',
+
+ GetVersion = 'GetVersion',
+ OpenExternal = 'OpenExternal',
+}
+
+export enum Locale {
+ zhCN = 'zhCN',
+ enUS = 'enUS',
+}
+
+export enum WindowsScaleMode {
+ Center = 'center',
+ Stretch = 'stretch',
+ Fit = 'fit',
+ Fill = 'fill',
+ Span = 'span',
+ Tile = 'tile',
+}
+
+export enum MacOSScaleMode {
+ Center = 'center',
+ Stretch = 'stretch',
+ Fit = 'fit',
+ Fill = 'fill',
+ Auto = 'auto',
+}
+
+export enum WebScaleMode {
+ Fill = 'fill',
+ Contain = 'contain',
+ Cover = 'cover',
+ None = 'none',
+ ScaleDown = 'scale-down',
+}
+
+export enum WallpaperType {
+ Image = 'Image',
+ Video = 'Video',
+}
+
+export enum WallpaperMode {
+ Replace = 'replace',
+ Cover = 'cover',
+}
diff --git a/cross/interface.ts b/cross/interface.ts
new file mode 100644
index 0000000..fe9cc14
--- /dev/null
+++ b/cross/interface.ts
@@ -0,0 +1,69 @@
+import { ModalProps } from 'antd';
+import {
+ ChangeType,
+ FormMode,
+ Locale,
+ MacOSScaleMode,
+ WallpaperMode,
+ WallpaperType,
+ WebScaleMode,
+ WindowsScaleMode,
+} from './enums';
+import { ITranslation } from './locale/i-translation';
+
+export interface ModalFormProps extends ModalProps {
+ values?: ValueType;
+ onChange?: (data?: ValueType) => Promise | void;
+ mode?: FormMode;
+}
+
+export interface Rule {
+ start: string;
+ end: string;
+ wallpaperType: WallpaperType;
+ type: ChangeType;
+ path: string;
+ paths: string[];
+ interval?: number;
+ id?: string;
+ weekdayId: Weekday['id'];
+ remark?: string;
+ isRandom?: boolean;
+ screenRandom?: boolean;
+}
+
+export interface Weekday {
+ days: number[];
+ id?: string | number;
+}
+
+export interface Settings {
+ locale: Locale;
+ scaleMode?: WindowsScaleMode | MacOSScaleMode | null;
+ webScaleMode: WebScaleMode;
+ wallpaperMode: WallpaperMode;
+ volume: number;
+ muted: boolean;
+ autoCheckUpdate: boolean;
+ openAtLogin: boolean;
+}
+
+export type TranslationFunc = (key: keyof ITranslation) => string;
+
+export interface DBData {
+ rules: Rule[];
+ weekdays: Weekday[];
+ settings: Settings;
+ currentIndex: number;
+}
+
+export interface IDBService {
+ setItem(
+ key: Key,
+ data: DBData[Key],
+ ): void | Promise;
+
+ getItem(
+ key: Key,
+ ): DBData[Key] | Promise;
+}
diff --git a/cross/locale/en/index.ts b/cross/locale/en/index.ts
new file mode 100644
index 0000000..d54df0c
--- /dev/null
+++ b/cross/locale/en/index.ts
@@ -0,0 +1,78 @@
+import { ITranslation } from '../i-translation';
+
+export const en: ITranslation = {
+ showWindow: 'Show window',
+ startAtLogin: 'Start at login',
+ exit: 'Exit',
+ debug: 'Debug',
+ help: 'Help',
+ checkUpdate: 'Check update',
+ autoCheckUpdate: 'Auto check update',
+ download: 'Download',
+ update: 'Update',
+ currentVersion: 'Current version',
+ latestVersion: 'Latest version',
+ close: 'Close',
+ wallpaperMode: 'Wallpaper Mode',
+ 'wallpaperMode.replace': 'Replace system wallpaper',
+ 'wallpaperMode.cover': 'Cover on current wallpaper',
+
+ check: 'Detail',
+ create: 'Create',
+ edit: 'Edit',
+ delete: 'Delete',
+ yes: 'Yes',
+ no: 'No',
+
+ monday: 'Mon',
+ tuesday: 'Tue',
+ wednesday: 'Wed',
+ thursday: 'Thu',
+ friday: 'Fri',
+ saturday: 'Sat',
+ sunday: 'Sun',
+
+ operationSuccess: 'Success',
+ deleteConfirmTips: 'Are you sure to delete this item?',
+ selectPeriodTips: 'Please select period',
+
+ operation: 'Operation',
+ choose: 'Choose',
+ language: 'Language',
+ settings: 'Settings',
+
+ 'rule.timeSlot': 'Time slot',
+ 'rule.period': 'Period',
+ 'rule.wallpaperType': 'Wallpaper type',
+ 'rule.wallpaperType.image': 'Image',
+ 'rule.wallpaperType.video': 'Video',
+ 'rule.type': 'Type',
+ 'rule.type.fixed': 'Fixed',
+ 'rule.type.autoChange': 'Auto change',
+ 'rule.path': 'Path/Directory',
+ 'rule.screen': 'Screen',
+ 'rule.interval': 'Change interval(seconds)',
+ 'rule.errMsg.interval.conflicts': 'Interval is conflicting',
+ 'rule.remark': 'Remark',
+ 'rule.isRandom': 'Random',
+ 'rule.screenRandom': 'Random alone every screen',
+ 'rule.addScreen': 'Add screen',
+ 'rule.paths.requiredMessage': 'Please select wallpaper',
+
+ scaleMode: 'Scale Mode',
+ 'scaleMode.default': 'Default',
+ 'scaleMode.auto': 'Auto',
+ 'scaleMode.center': 'Center',
+ 'scaleMode.fill': 'Fill',
+ 'scaleMode.fit': 'Fit',
+ 'scaleMode.span': 'Span',
+ 'scaleMode.stretch': 'Stretch',
+ 'scaleMode.tile': 'Tile',
+
+ 'webScaleMode.fill': 'Stretch',
+ 'webScaleMode.contain': 'Fit',
+ 'webScaleMode.cover': 'Fill',
+
+ 'settings.mute': 'Mute',
+ 'settings.volume': 'Volume',
+};
diff --git a/cross/locale/i-translation.ts b/cross/locale/i-translation.ts
new file mode 100644
index 0000000..76180d5
--- /dev/null
+++ b/cross/locale/i-translation.ts
@@ -0,0 +1,76 @@
+export interface ITranslation {
+ showWindow: string;
+ startAtLogin: string;
+ exit: string;
+ debug: string;
+ help: string;
+ checkUpdate: string;
+ autoCheckUpdate: string;
+ download: string;
+ update: string;
+ currentVersion: string;
+ latestVersion: string;
+ close: string;
+ wallpaperMode: string;
+ 'wallpaperMode.replace': string;
+ 'wallpaperMode.cover': string;
+
+ check: string;
+ create: string;
+ edit: string;
+ delete: string;
+ yes: string;
+ no: string;
+
+ monday: string;
+ tuesday: string;
+ wednesday: string;
+ thursday: string;
+ friday: string;
+ saturday: string;
+ sunday: string;
+
+ operationSuccess: string;
+ deleteConfirmTips: string;
+ selectPeriodTips: string;
+
+ operation: string;
+ choose: string;
+ language: string;
+ settings: string;
+
+ 'rule.timeSlot': string;
+ 'rule.period': string;
+ 'rule.wallpaperType': string;
+ 'rule.wallpaperType.image': string;
+ 'rule.wallpaperType.video': string;
+ 'rule.type': string;
+ 'rule.type.fixed': string;
+ 'rule.type.autoChange': string;
+ 'rule.path': string;
+ 'rule.screen': string;
+ 'rule.interval': string;
+ 'rule.errMsg.interval.conflicts': string;
+ 'rule.remark': string;
+ 'rule.isRandom': string;
+ 'rule.screenRandom': string;
+ 'rule.addScreen': string;
+ 'rule.paths.requiredMessage': string;
+
+ scaleMode: string;
+ 'scaleMode.default': string;
+ 'scaleMode.fill': string;
+ 'scaleMode.fit': string;
+ 'scaleMode.stretch': string;
+ 'scaleMode.center': string;
+ 'scaleMode.span': string;
+ 'scaleMode.tile': string;
+ 'scaleMode.auto': string;
+
+ 'webScaleMode.fill': string;
+ 'webScaleMode.contain': string;
+ 'webScaleMode.cover': string;
+
+ 'settings.mute': string;
+ 'settings.volume': string;
+}
diff --git a/cross/locale/index.ts b/cross/locale/index.ts
new file mode 100644
index 0000000..4419e22
--- /dev/null
+++ b/cross/locale/index.ts
@@ -0,0 +1,22 @@
+import i18n from 'i18next';
+import { initReactI18next } from 'react-i18next';
+import { en } from './en';
+import { zhCN } from './zh-cn';
+import { settingsService } from '@/services/settings';
+import { Locale } from '../enums';
+
+async function initI18next() {
+ i18n.use(initReactI18next).init({
+ resources: {
+ [Locale.enUS]: {
+ translation: en,
+ },
+ [Locale.zhCN]: {
+ translation: zhCN,
+ },
+ },
+ lng: (await settingsService.get()).locale,
+ });
+}
+
+initI18next();
diff --git a/cross/locale/zh-cn/index.ts b/cross/locale/zh-cn/index.ts
new file mode 100644
index 0000000..61ff2c4
--- /dev/null
+++ b/cross/locale/zh-cn/index.ts
@@ -0,0 +1,78 @@
+import { ITranslation } from '../i-translation';
+
+export const zhCN: ITranslation = {
+ showWindow: '显示界面',
+ startAtLogin: '开机启动',
+ exit: '退出',
+ debug: '调试',
+ help: '帮助',
+ checkUpdate: '检查更新',
+ autoCheckUpdate: '自动检查更新',
+ download: '下载',
+ update: '更新',
+ currentVersion: '当前版本',
+ latestVersion: '最新版本',
+ close: '关闭',
+ wallpaperMode: '壁纸模式',
+ 'wallpaperMode.replace': '替换原壁纸',
+ 'wallpaperMode.cover': '覆盖在原壁纸上',
+
+ check: '查看',
+ create: '创建',
+ edit: '编辑',
+ delete: '删除',
+ yes: '是',
+ no: '否',
+
+ monday: '星期一',
+ tuesday: '星期二',
+ wednesday: '星期三',
+ thursday: '星期四',
+ friday: '星期五',
+ saturday: '星期六',
+ sunday: '星期日',
+
+ operationSuccess: '操作成功',
+ deleteConfirmTips: '确定要删除此项吗?',
+ selectPeriodTips: '请选择周期',
+
+ operation: '操作',
+ choose: '选择',
+ language: '语言',
+ settings: '设置',
+
+ 'rule.timeSlot': '时间段',
+ 'rule.period': '周期',
+ 'rule.wallpaperType': '壁纸类型',
+ 'rule.wallpaperType.image': '图片',
+ 'rule.wallpaperType.video': '视频',
+ 'rule.type': '类型',
+ 'rule.type.fixed': '固定壁纸',
+ 'rule.type.autoChange': '自动换',
+ 'rule.path': '壁纸目录/路径',
+ 'rule.screen': '屏幕',
+ 'rule.interval': '更换间隔(秒)',
+ 'rule.errMsg.interval.conflicts': '时间段冲突',
+ 'rule.remark': '备注',
+ 'rule.isRandom': '随机切换',
+ 'rule.screenRandom': '屏幕各自随机',
+ 'rule.addScreen': '添加屏幕',
+ 'rule.paths.requiredMessage': '请选择壁纸',
+
+ scaleMode: '缩放模式',
+ 'scaleMode.default': '默认',
+ 'scaleMode.auto': '自动',
+ 'scaleMode.center': '居中',
+ 'scaleMode.fill': '填充',
+ 'scaleMode.fit': '适应',
+ 'scaleMode.span': '跨区',
+ 'scaleMode.stretch': '拉伸',
+ 'scaleMode.tile': '平铺',
+
+ 'webScaleMode.fill': '拉伸',
+ 'webScaleMode.contain': '适应',
+ 'webScaleMode.cover': '填充',
+
+ 'settings.mute': '静音',
+ 'settings.volume': '音量',
+};
diff --git a/electron-builder.json5 b/electron-builder.json5
new file mode 100644
index 0000000..ca66802
--- /dev/null
+++ b/electron-builder.json5
@@ -0,0 +1,47 @@
+/**
+ * @see https://www.electron.build/configuration/configuration
+ */
+{
+ "appId": "YourAppID",
+ "productName": "Workpaper",
+ "asar": true,
+ "directories": {
+ "output": "release/${version}"
+ },
+ "files": [
+ "dist-electron",
+ "dist"
+ ],
+ "mac": {
+ "artifactName": "${productName}_${version}.${ext}",
+ "target": [
+ "dmg",
+ ]
+ },
+ "win": {
+ "target": [
+ {
+ "target": "nsis",
+ "arch": [
+ "x64"
+ ]
+ }
+ ],
+ "artifactName": "${productName}_${version}.${ext}"
+ },
+ "nsis": {
+ "oneClick": false,
+ "perMachine": false,
+ "allowToChangeInstallationDirectory": true,
+ "deleteAppDataOnUninstall": false
+ },
+ "publish": [
+ "github"
+ ],
+ "extraResources": [
+ {
+ "from": "wallpaper/${platform}",
+ "to": "app/wallpaper/${platform}"
+ }
+ ]
+}
diff --git a/electron/electron-env.d.ts b/electron/electron-env.d.ts
new file mode 100644
index 0000000..2ed41e2
--- /dev/null
+++ b/electron/electron-env.d.ts
@@ -0,0 +1,11 @@
+///
+
+declare namespace NodeJS {
+ interface ProcessEnv {
+ VSCODE_DEBUG?: 'true';
+ DIST_ELECTRON: string;
+ DIST: string;
+ /** /dist/ or /public/ */
+ VITE_PUBLIC: string;
+ }
+}
diff --git a/electron/main/handlers.ts b/electron/main/handlers.ts
new file mode 100644
index 0000000..f99342c
--- /dev/null
+++ b/electron/main/handlers.ts
@@ -0,0 +1,111 @@
+import {
+ app,
+ BrowserWindow,
+ dialog,
+ ipcMain,
+ powerMonitor,
+ shell,
+} from 'electron';
+import { Events } from '../../cross/enums';
+import {
+ Rule,
+ Settings,
+ TranslationFunc,
+ Weekday,
+} from '../../cross/interface';
+import { resetSchedule } from './services/wallpaper';
+import { IMAGE_EXT_LIST, VIDEO_EXT_LIST } from '../../cross/consts';
+import { platform } from 'os';
+import { t as _t, changeLanguage } from 'i18next';
+import { configServiceMain } from './services/db-service';
+import { setLiveWallpaperVolume } from './services/wallpaper-window';
+import { setTray } from './tray';
+
+const t = _t as TranslationFunc;
+
+export function registerHandlers(createWindow: () => Promise) {
+ ipcMain.handle(Events.SelectImage, () => {
+ return dialog.showOpenDialogSync({
+ filters: [
+ { name: t('rule.wallpaperType.image'), extensions: IMAGE_EXT_LIST },
+ ],
+ properties: ['openFile'],
+ });
+ });
+
+ ipcMain.handle(Events.SelectVideo, () => {
+ return dialog.showOpenDialogSync({
+ filters: [
+ { name: t('rule.wallpaperType.video'), extensions: VIDEO_EXT_LIST },
+ ],
+ properties: ['openFile'],
+ });
+ });
+
+ ipcMain.handle(Events.SelectDir, () => {
+ return dialog.showOpenDialogSync({
+ properties: ['openDirectory'],
+ });
+ });
+
+ ipcMain.handle(Events.ResetSchedule, async (event) => {
+ await resetSchedule();
+ });
+
+ ipcMain.handle(Events.SaveRules, (event, rules: Rule[]) => {
+ configServiceMain.setItem('rules', rules);
+ });
+
+ ipcMain.handle(Events.SaveWeekdays, (event, weekdays: Weekday[]) => {
+ configServiceMain.setItem('weekdays', weekdays);
+ });
+
+ ipcMain.handle(Events.GetLocale, () => {
+ return app.getLocale();
+ });
+
+ ipcMain.handle(Events.GetPlatform, () => {
+ return platform();
+ });
+
+ ipcMain.handle(Events.SettingsChange, async (_, settings: Settings) => {
+ const oldSettings = configServiceMain.getItem('settings');
+ configServiceMain.setItem('settings', settings);
+ if (settings.locale !== oldSettings.locale) {
+ await changeLanguage(settings.locale);
+ setTray(process.env.VITE_PUBLIC, createWindow);
+ }
+ if (settings.scaleMode !== oldSettings.scaleMode) {
+ await resetSchedule();
+ }
+ });
+
+ ipcMain.handle(Events.InitSettings, (_, settings: Settings) => {
+ configServiceMain.setItem('settings', settings);
+ });
+
+ ipcMain.handle(Events.SetDBItem, (_, ...args) => {
+ const [key, data] = args;
+ configServiceMain.setItem(key, data);
+ });
+
+ ipcMain.handle(Events.GetDBItem, (_, key) => {
+ return configServiceMain.getItem(key);
+ });
+
+ ipcMain.handle(Events.SetLiveWallpaperVolume, (_, volume) => {
+ setLiveWallpaperVolume(volume);
+ });
+
+ ipcMain.handle(Events.GetVersion, () => {
+ return app.getVersion();
+ });
+
+ ipcMain.handle(Events.OpenExternal, (_, url) => {
+ shell.openExternal(url);
+ });
+
+ powerMonitor.on('resume', async () => {
+ await resetSchedule();
+ });
+}
diff --git a/electron/main/index.ts b/electron/main/index.ts
new file mode 100644
index 0000000..9c3d062
--- /dev/null
+++ b/electron/main/index.ts
@@ -0,0 +1,179 @@
+import { app, BrowserWindow, ipcMain, Menu, shell } from 'electron';
+import { release } from 'node:os';
+import { join } from 'node:path';
+import { registerHandlers } from './handlers';
+import './locale';
+import { setTray } from './tray';
+import { resetSchedule } from './services/wallpaper';
+import { indexHtml, url } from './services/utils';
+import {
+ closeWallpaperWin,
+ createWallpaperWin,
+ detachWallpaperWin,
+} from './services/wallpaper-window';
+import { t as _t } from 'i18next';
+import { TranslationFunc } from '../../cross/interface';
+import { update } from './update';
+import installExtension, {
+ REACT_DEVELOPER_TOOLS,
+} from 'electron-devtools-installer';
+import { configServiceMain } from './services/db-service';
+import { WallpaperMode } from '../../cross/enums';
+
+const t: TranslationFunc = _t;
+
+// The built directory structure
+//
+// ├─┬ dist-electron
+// │ ├─┬ main
+// │ │ └── index.js > Electron-Main
+// │ └─┬ preload
+// │ └── index.js > Preload-Scripts
+// ├─┬ dist
+// │ └── index.html > Electron-Renderer
+//
+
+// Disable GPU Acceleration for Windows 7
+if (release().startsWith('6.1')) app.disableHardwareAcceleration();
+
+// Set application name for Windows 10+ notifications
+if (process.platform === 'win32') app.setAppUserModelId(app.getName());
+
+if (!app.requestSingleInstanceLock()) {
+ app.quit();
+ process.exit(0);
+}
+
+// Remove electron security warnings
+// This warning only shows in development mode
+// Read more on https://www.electronjs.org/docs/latest/tutorial/security
+// process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'
+
+let win: BrowserWindow | null = null;
+// Here, you can also use other preload
+const preload = join(__dirname, '../preload/index.js');
+
+const template: any[] = [
+ {
+ label: t('help'),
+ role: 'help',
+ submenu: [
+ {
+ label: 'Github',
+ click: function () {
+ shell.openExternal('https://github.com/Jarvay');
+ },
+ },
+ {
+ label: t('debug'),
+ click: function () {
+ if (win !== null) win.webContents.openDevTools();
+ },
+ },
+ ],
+ },
+];
+
+async function createWindow() {
+ if (win) {
+ return win;
+ }
+
+ const menu = Menu.buildFromTemplate(template);
+ Menu.setApplicationMenu(menu);
+
+ win = new BrowserWindow({
+ title: 'Main window',
+ icon: join(process.env.VITE_PUBLIC, 'favicon.ico'),
+ maximizable: true,
+ webPreferences: {
+ preload,
+ // Warning: Enable nodeIntegration and disable contextIsolation is not secure in production
+ // Consider using contextBridge.exposeInMainWorld
+ // Read more on https://www.electronjs.org/docs/latest/tutorial/context-isolation
+ nodeIntegration: true,
+ contextIsolation: false,
+ webSecurity: false,
+ },
+ });
+
+ win.on('closed', () => {
+ win = null;
+ });
+
+ if (url) {
+ // electron-vite-vue#298
+ win.loadURL(url);
+ // Open devTool if the app is not packaged
+ win.webContents.openDevTools();
+ } else {
+ win.loadFile(indexHtml);
+ }
+
+ win.maximize();
+
+ // Test actively push message to the Electron-Renderer
+ win.webContents.on('did-finish-load', () => {});
+
+ // Make all links open with the browser, not with the application
+ win.webContents.setWindowOpenHandler(({ url }) => {
+ if (url.startsWith('https:')) shell.openExternal(url);
+ return { action: 'deny' };
+ });
+
+ // Apply electron-updater
+ update(win);
+
+ return win;
+}
+
+app.whenReady().then(async () => {
+ registerHandlers(createWindow);
+
+ setTray(process.env.VITE_PUBLIC, createWindow);
+
+ await resetSchedule();
+});
+
+app.on('window-all-closed', () => {
+ win = null;
+});
+
+app.on('second-instance', () => {
+ if (win) {
+ // Focus on the main window if the user tried to open another
+ if (win.isMinimized()) win.restore();
+ win.focus();
+ }
+});
+
+app.on('activate', () => {
+ const allWindows = BrowserWindow.getAllWindows();
+ if (allWindows.length) {
+ allWindows[0].focus();
+ } else {
+ createWindow();
+ }
+});
+
+app.on('before-quit', () => {
+ detachWallpaperWin();
+ closeWallpaperWin();
+});
+
+// New window example arg: new windows url
+ipcMain.handle('open-win', (_, arg) => {
+ const childWindow = new BrowserWindow({
+ webPreferences: {
+ preload,
+ nodeIntegration: true,
+ contextIsolation: false,
+ },
+ });
+
+ if (process.env.VITE_DEV_SERVER_URL) {
+ childWindow.loadURL(`${url}#${arg}`);
+ } else {
+ childWindow.loadFile(indexHtml, { hash: arg });
+ }
+});
diff --git a/electron/main/locale.ts b/electron/main/locale.ts
new file mode 100644
index 0000000..b67d630
--- /dev/null
+++ b/electron/main/locale.ts
@@ -0,0 +1,17 @@
+import i18n from 'i18next';
+import { Locale } from '../../cross/enums';
+import { en } from '../../cross/locale/en';
+import { zhCN } from '../../cross/locale/zh-cn';
+import { configServiceMain } from './services/db-service';
+
+i18n.init({
+ resources: {
+ [Locale.enUS]: {
+ translation: en,
+ },
+ [Locale.zhCN]: {
+ translation: zhCN,
+ },
+ },
+ lng: configServiceMain.getItem('settings')?.locale || Locale.zhCN,
+});
diff --git a/electron/main/services/db-service.ts b/electron/main/services/db-service.ts
new file mode 100644
index 0000000..896344c
--- /dev/null
+++ b/electron/main/services/db-service.ts
@@ -0,0 +1,60 @@
+import { DBData, IDBService } from '../../../cross/interface';
+import { JSONSyncPreset } from 'lowdb/node';
+import { join } from 'node:path';
+import {
+ Locale,
+ MacOSScaleMode,
+ WallpaperMode,
+ WebScaleMode,
+ WindowsScaleMode,
+} from '../../../cross/enums';
+import { LowSync } from 'lowdb';
+import { userDataDir } from './utils';
+import { platform } from 'os';
+import { merge } from 'lodash';
+
+export class DBServiceMain implements IDBService {
+ private db: LowSync;
+
+ constructor(db: LowSync) {
+ this.db = db;
+ }
+
+ setItem(key: Key, data: DBData[Key]) {
+ this.db.data[key] = data;
+ this.db.write();
+ }
+
+ getItem(key: Key) {
+ return this.db.data[key];
+ }
+}
+
+const defaultData: DBData = {
+ rules: [],
+ weekdays: [],
+ settings: {
+ locale: Locale.zhCN,
+ volume: 100,
+ muted: true,
+ scaleMode: undefined,
+ webScaleMode: WebScaleMode.Cover,
+ wallpaperMode: WallpaperMode.Cover,
+ autoCheckUpdate: true,
+ openAtLogin: true,
+ },
+ currentIndex: 0,
+};
+
+if (platform() === 'darwin') {
+ defaultData.settings.scaleMode = MacOSScaleMode.Auto;
+} else if (platform() === 'win32') {
+ defaultData.settings.scaleMode = WindowsScaleMode.Span;
+}
+
+const db = JSONSyncPreset(join(userDataDir, 'config.json'), defaultData);
+const migratedData = merge(defaultData, db.data);
+db.data = migratedData;
+db.write();
+
+export const configServiceMain = new DBServiceMain(db);
diff --git a/electron/main/services/utils.ts b/electron/main/services/utils.ts
new file mode 100644
index 0000000..9b2c455
--- /dev/null
+++ b/electron/main/services/utils.ts
@@ -0,0 +1,29 @@
+import { join } from 'node:path';
+import { app, ipcMain } from 'electron';
+import { mkdirSync } from 'node:fs';
+
+process.env.DIST_ELECTRON = join(__dirname, '../');
+process.env.DIST = join(process.env.DIST_ELECTRON, '../dist');
+process.env.VITE_PUBLIC = process.env.VITE_DEV_SERVER_URL
+ ? join(process.env.DIST_ELECTRON, '../public')
+ : process.env.DIST;
+
+export const url = process.env.VITE_DEV_SERVER_URL;
+export const indexHtml = join(process.env.DIST, 'index.html');
+
+const userDataParentDir = !app.isPackaged
+ ? app.getAppPath()
+ : app.getPath('userData');
+export const userDataDir = join(userDataParentDir, 'userData');
+
+try {
+ mkdirSync(userDataDir, {
+ recursive: true,
+ });
+} catch (e) {}
+
+export function randomByRange(min: number, max: number) {
+ const range = max - min;
+ const randNum = Math.random();
+ return min + Math.round(randNum * range);
+}
diff --git a/electron/main/services/wallpaper-window.ts b/electron/main/services/wallpaper-window.ts
new file mode 100644
index 0000000..c75d696
--- /dev/null
+++ b/electron/main/services/wallpaper-window.ts
@@ -0,0 +1,234 @@
+import {
+ BrowserWindow,
+ ipcMain,
+ screen,
+ IpcMainEvent,
+ BrowserWindowConstructorOptions,
+ Rectangle,
+ Display,
+} from 'electron';
+import { platform } from 'os';
+import { Events } from '../../../cross/enums';
+import { indexHtml, url } from './utils';
+import { Subject } from 'rxjs';
+import { omit } from 'lodash';
+
+const windowsMap: Map = new Map();
+
+const defaultWinOptions: Electron.BrowserWindowConstructorOptions = {
+ autoHideMenuBar: true,
+ frame: false,
+ focusable: false,
+ resizable: false,
+ show: false,
+ webPreferences: {
+ nodeIntegration: true,
+ webSecurity: false,
+ contextIsolation: false,
+ },
+};
+
+const subject = new Subject();
+
+function loadUrl(win: BrowserWindow, displayId: number) {
+ let pageUrl = '';
+ if (url) {
+ pageUrl = `${url}#/wallpaper/${displayId}`;
+ } else {
+ pageUrl = `file://${indexHtml}#/wallpaper/${displayId}`;
+ }
+
+ return win.loadURL(pageUrl);
+}
+
+async function createWindows(
+ displayId: number,
+ winOptions: (bounds: Rectangle) => BrowserWindowConstructorOptions,
+) {
+ if (windowsMap.size === screen.getAllDisplays().length) {
+ return;
+ }
+ const displays = screen.getAllDisplays();
+
+ const loadedDisplayIdSet: Set = new Set();
+ const loadedListener: (event: IpcMainEvent, ...args: any[]) => void = (
+ _,
+ displayId: number,
+ ) => {
+ if (loadedDisplayIdSet.size === displays.length) {
+ ipcMain.off(Events.StaticWallpaperLoaded, loadedListener);
+ ipcMain.off(Events.LiveWallpaperLoaded, loadedListener);
+ return;
+ }
+ const win = windowsMap.get(displayId) as BrowserWindow;
+
+ if (platform() === 'win32') {
+ win.maximize();
+ const { attach } = require('electron-as-wallpaper');
+ attach(win);
+ }
+ if (platform() === 'linux') {
+ win.maximize();
+ }
+ setTimeout(() => {
+ win.setOpacity(1);
+ }, 600);
+ loadedDisplayIdSet.add(displayId);
+ };
+
+ ipcMain.on(Events.StaticWallpaperLoaded, loadedListener);
+ ipcMain.on(Events.LiveWallpaperLoaded, loadedListener);
+
+ ipcMain.on(Events.WallpaperWinReady, (_, displayId) => {
+ subject.next(windowsMap.get(displayId) as BrowserWindow);
+ });
+
+ const display = screen
+ .getAllDisplays()
+ .find((item) => item.id === displayId) as Display;
+ const childWin = new BrowserWindow({
+ ...winOptions(display.bounds),
+ });
+ windowsMap.set(display.id, childWin);
+ // childWin.webContents.openDevTools();
+ // childWin.setFocusable(true);
+ childWin.setIgnoreMouseEvents(true);
+
+ await loadUrl(childWin, display.id);
+}
+
+async function createDarwinWin(displayId: number) {
+ await createWindows(displayId, ({ width, height, x, y }) => {
+ return {
+ ...defaultWinOptions,
+ fullscreen: false,
+ type: 'desktop',
+ x: x - 4,
+ y: y - 2,
+ width: width + 8,
+ height: height + 4,
+ enableLargerThanScreen: true,
+ opacity: 0,
+ transparent: true,
+ show: true,
+ };
+ });
+}
+
+async function createWin32Win(displayId: number) {
+ await createWindows(displayId, ({ width, height, x, y }) => {
+ return {
+ ...defaultWinOptions,
+ skipTaskbar: true,
+ show: true,
+ opacity: 0,
+ transparent: true,
+ x: x - 4,
+ y: y - 2,
+ width: width + 8,
+ height: height + 4,
+ };
+ });
+}
+
+async function createLinuxWin(displayId: number) {
+ await createWindows(displayId, ({ width, height, x, y }) => {
+ return {
+ ...omit(defaultWinOptions, ['frame', 'focusable', 'resizable']),
+ type: 'desktop',
+ width: width,
+ height: height,
+ opacity: 0,
+ transparent: true,
+ show: true,
+ };
+ });
+}
+
+export function createWallpaperWin(displayId: number) {
+ if (platform() === 'darwin') {
+ return createDarwinWin(displayId);
+ } else if (platform() === 'win32') {
+ return createWin32Win(displayId);
+ } else if (platform() === 'linux') {
+ return createLinuxWin(displayId);
+ }
+}
+
+export function setLiveWallpaper(paths: string[], displayId: number) {
+ paths = paths.map((path) => {
+ if (!path.startsWith('file://')) {
+ return `file://${path}`;
+ }
+ return path;
+ });
+
+ subject.subscribe({
+ next: (value) => {
+ const win = windowsMap.get(displayId);
+ if (win === value) {
+ value?.webContents.send(Events.SetLiveWallpaper, paths);
+ }
+ },
+ });
+
+ windowsMap.forEach((win, dId) => {
+ if (displayId === dId) {
+ win.webContents.send(Events.SetLiveWallpaper, paths);
+ }
+ });
+
+ return createWallpaperWin(displayId);
+}
+
+export function setStaticWallpaper(path: string, displayId: number) {
+ subject.subscribe({
+ next: (value) => {
+ const win = windowsMap.get(displayId);
+ if (win === value) {
+ value?.webContents.send(Events.SetStaticWallpaper, path);
+ }
+ },
+ });
+
+ windowsMap.forEach((win, dId) => {
+ if (displayId === dId) {
+ win.webContents.send(Events.SetStaticWallpaper, path);
+ }
+ });
+
+ return createWallpaperWin(displayId);
+}
+
+export function detachWallpaperWin() {
+ windowsMap.forEach((win) => {
+ if (platform() === 'win32') {
+ const { detach } = require('electron-as-wallpaper');
+ detach(win);
+ }
+ win.hide();
+ });
+}
+
+export function closeWallpaperWin() {
+ windowsMap.forEach((win) => {
+ win.close();
+ win.destroy();
+ if (platform() === 'win32') {
+ const { refresh } = require('electron-as-wallpaper');
+ refresh();
+ }
+ });
+}
+
+export function setLiveWallpaperMuted(muted: boolean) {
+ windowsMap.forEach((win) => {
+ win?.webContents.send(Events.SetLiveWallpaperMuted, muted);
+ });
+}
+
+export function setLiveWallpaperVolume(volume: number) {
+ windowsMap.forEach((win) => {
+ win.webContents.send(Events.SetLiveWallpaperVolume, volume);
+ });
+}
diff --git a/electron/main/services/wallpaper.ts b/electron/main/services/wallpaper.ts
new file mode 100644
index 0000000..719ec9e
--- /dev/null
+++ b/electron/main/services/wallpaper.ts
@@ -0,0 +1,223 @@
+import { readdirSync } from 'fs';
+import { join } from 'node:path';
+import { IMAGE_EXT_LIST, VIDEO_EXT_LIST } from '../../../cross/consts';
+import { Rule } from '../../../cross/interface';
+import { ChangeType, WallpaperMode, WallpaperType } from '../../../cross/enums';
+import {
+ detachWallpaperWin,
+ setLiveWallpaper,
+ setStaticWallpaper,
+} from './wallpaper-window';
+import { gracefulShutdown, RecurrenceRule, scheduleJob } from 'node-schedule';
+import { timeToSeconds } from '../../../cross/date';
+import dayjs from 'dayjs';
+import { configServiceMain } from './db-service';
+import { SetOptions } from 'wallpaper';
+import { randomByRange } from './utils';
+import { screen } from 'electron';
+import { platform } from 'os';
+
+const timerMap: Map = new Map();
+
+const typeExtMap = new Map([
+ [
+ WallpaperType.Image,
+ IMAGE_EXT_LIST.filter((ext) => {
+ return !(platform() === 'linux' && ext === 'heic');
+ }),
+ ],
+ [WallpaperType.Video, VIDEO_EXT_LIST],
+]);
+
+export async function setWallpaper(
+ rule: Rule,
+ filePath: string,
+ displayId: number,
+ currentIndex: number,
+) {
+ switch (rule.wallpaperType) {
+ case WallpaperType.Image:
+ const { wallpaperMode, scaleMode } =
+ configServiceMain.getItem('settings');
+ const wallpaper = await import('wallpaper');
+ if (wallpaperMode === WallpaperMode.Replace) {
+ await wallpaper.setWallpaper(filePath, {
+ scale: scaleMode as SetOptions['scale'],
+ screen: 'all',
+ });
+ detachWallpaperWin();
+ } else {
+ await setStaticWallpaper(filePath, displayId);
+ }
+ configServiceMain.setItem('currentIndex', currentIndex);
+ break;
+ case WallpaperType.Video:
+ await setLiveWallpaper([filePath], displayId);
+ break;
+ }
+}
+
+export async function updateWallpaper(rule: Rule, currentIndex: number) {
+ const extList = typeExtMap.get(rule.wallpaperType) as string[];
+ if (rule.type !== ChangeType.Fixed && rule.isRandom) {
+ const max = readRuleFilePaths(rule, extList).length - 1;
+ currentIndex = randomByRange(0, max);
+ }
+
+ let filePath = readRuleFilePaths(rule, extList)[currentIndex];
+
+ const displays = screen.getAllDisplays();
+ for (const display of displays) {
+ if (rule.type !== ChangeType.Fixed && rule.screenRandom) {
+ const max = readRuleFilePaths(rule, extList).length - 1;
+ currentIndex = randomByRange(0, max);
+ filePath = readRuleFilePaths(rule, extList)[currentIndex];
+ }
+ await setWallpaper(rule, filePath, display.id, currentIndex);
+ }
+}
+
+function increaseImgIndex(currentIndex: number, rule: Rule) {
+ const total = readRuleFilePaths(rule, IMAGE_EXT_LIST).length;
+
+ if (currentIndex + 1 === total) {
+ return 0;
+ }
+ return currentIndex + 1;
+}
+
+function readRuleFilePaths(rule: Rule, extList: string[]) {
+ const filePaths = readdirSync(rule.path) || [];
+ return filePaths
+ .filter((item) => !/(^|\/)\.[^\/.]/g.test(item))
+ .filter((item) => extList.some((ext) => item.endsWith(ext)))
+ .map((item) => {
+ return join(rule.path, item);
+ });
+}
+
+export async function createWallpaperTimer(rule: Rule) {
+ let currentIndex = increaseImgIndex(
+ configServiceMain.getItem('currentIndex'),
+ rule,
+ );
+ await updateWallpaper(rule, currentIndex);
+ return setInterval(
+ async () => {
+ currentIndex = increaseImgIndex(currentIndex, rule);
+ await updateWallpaper(rule, currentIndex);
+ },
+ (rule.interval || 60) * 1000,
+ );
+}
+
+function isCurrentRule(rule: Rule, day: number) {
+ let dayOfWeek = new Date().getDay();
+ dayOfWeek = dayOfWeek || 7;
+ if (dayOfWeek !== day) {
+ return false;
+ }
+
+ const now = timeToSeconds(dayjs().format('HH:mm'));
+ const start = timeToSeconds(rule.start);
+ const end = timeToSeconds(rule.end);
+ return start <= now && end >= now;
+}
+
+function getWeekdayById(id: string) {
+ return configServiceMain.getItem('weekdays').find((item) => {
+ return item.id === id;
+ });
+}
+
+export async function resetSchedule() {
+ await gracefulShutdown();
+
+ for (const timerMapElement of timerMap) {
+ const [id, timer] = timerMapElement;
+ clearInterval(timer);
+ }
+ timerMap.clear();
+
+ const rules = configServiceMain.getItem('rules');
+
+ rules.forEach((rule) => {
+ const [startHour, startMinute] = rule.start.split(':');
+ const [endHour, endMinute] = rule.end.split(':');
+
+ async function createIntervalPlan(dayOfWeek: number) {
+ clearInterval(timerMap.get(rule.id as string));
+ timerMap.set(rule.id as string, await createWallpaperTimer(rule));
+
+ const stopRule = new RecurrenceRule();
+ stopRule.second = 59;
+ stopRule.minute = endMinute;
+ stopRule.hour = endHour;
+ stopRule.dayOfWeek = dayOfWeek;
+ scheduleJob(stopRule, () => {
+ clearInterval(timerMap.get(rule.id as string));
+ });
+ }
+
+ const weekday = getWeekdayById(rule.weekdayId as string);
+ const days = weekday?.days || [];
+ days.forEach((day) => {
+ const isCurrent = isCurrentRule(rule, day);
+
+ const jobRule = new RecurrenceRule();
+ jobRule.second = 0;
+ jobRule.minute = startMinute;
+ jobRule.hour = startHour;
+ jobRule.dayOfWeek = day;
+
+ function setFixedWallpaper() {
+ let index = 0;
+ for (const display of screen.getAllDisplays()) {
+ const path = rule.paths?.[index] || rule.paths?.[0];
+ setWallpaper(rule, path, display.id, 0);
+ index++;
+ }
+ }
+
+ function setAutoChangeLiveWallpapers() {
+ let index = 0;
+ for (const display of screen.getAllDisplays()) {
+ setLiveWallpaper(readRuleFilePaths(rule, VIDEO_EXT_LIST), display.id);
+ index++;
+ }
+ }
+
+ switch (rule.type) {
+ default:
+ case ChangeType.Fixed:
+ if (isCurrent) {
+ setFixedWallpaper();
+ } else {
+ scheduleJob(jobRule, () => {
+ setFixedWallpaper();
+ });
+ }
+ break;
+ case ChangeType.AutoChange:
+ if (rule.wallpaperType === WallpaperType.Image) {
+ if (isCurrent) {
+ createIntervalPlan(day);
+ } else {
+ scheduleJob(jobRule, () => {
+ createIntervalPlan(day);
+ });
+ }
+ } else if (rule.wallpaperType === WallpaperType.Video) {
+ if (isCurrent) {
+ setAutoChangeLiveWallpapers();
+ } else {
+ scheduleJob(jobRule, () => {
+ setAutoChangeLiveWallpapers();
+ });
+ }
+ }
+ break;
+ }
+ });
+ });
+}
diff --git a/electron/main/tray.ts b/electron/main/tray.ts
new file mode 100644
index 0000000..a8da766
--- /dev/null
+++ b/electron/main/tray.ts
@@ -0,0 +1,118 @@
+import { platform } from 'os';
+import { app, BrowserWindow, Menu, Tray } from 'electron';
+import { join } from 'node:path';
+import { t as _t } from 'i18next';
+import { TranslationFunc } from '../../cross/interface';
+import { configServiceMain } from './services/db-service';
+import { setLiveWallpaperMuted } from './services/wallpaper-window';
+
+const t: TranslationFunc = _t;
+
+let tray: Tray;
+
+enum TrayMenuItem {
+ OpenAtLogin = 1,
+ Muted = 2,
+ AutoCheckUpdate = 4,
+}
+
+export function setTray(
+ publicDir: string,
+ createWindow: () => Promise,
+) {
+ const trayIcon =
+ platform() === 'win32' ? 'favicon.ico' : 'faviconTemplate.png';
+ if (!tray) {
+ tray = new Tray(join(publicDir, trayIcon));
+ }
+
+ tray.on('double-click', () => {
+ createWindow();
+ });
+
+ const openAtLogin = configServiceMain.getItem('settings').openAtLogin;
+ if (app.isPackaged) {
+ app.setLoginItemSettings({
+ openAtLogin,
+ });
+ }
+
+ const contextMenu = Menu.buildFromTemplate([
+ {
+ label: t('showWindow'),
+ type: 'normal',
+ click: () => {
+ createWindow();
+ },
+ },
+ {
+ label: t('startAtLogin'),
+ type: 'checkbox',
+ checked: openAtLogin,
+ click: () => {
+ if (app.isPackaged) {
+ const newOpenAtLogin =
+ !configServiceMain.getItem('settings').openAtLogin;
+ app.setLoginItemSettings({
+ openAtLogin: newOpenAtLogin,
+ });
+ contextMenu.items[TrayMenuItem.OpenAtLogin].checked = newOpenAtLogin;
+ tray?.setContextMenu(contextMenu);
+ configServiceMain.setItem('settings', {
+ ...configServiceMain.getItem('settings'),
+ openAtLogin: newOpenAtLogin,
+ });
+ }
+ },
+ },
+ {
+ label: t('settings.mute'),
+ type: 'checkbox',
+ checked: configServiceMain.getItem('settings').muted,
+ click: () => {
+ const muted = !configServiceMain.getItem('settings').muted;
+ contextMenu.items[TrayMenuItem.Muted].checked = muted;
+ tray?.setContextMenu(contextMenu);
+ setLiveWallpaperMuted(muted);
+ configServiceMain.setItem('settings', {
+ ...configServiceMain.getItem('settings'),
+ muted,
+ });
+ },
+ },
+ {
+ label: t('checkUpdate'),
+ type: 'normal',
+ click: async () => {
+ await createWindow();
+ },
+ },
+ {
+ label: t('autoCheckUpdate'),
+ type: 'checkbox',
+ checked: configServiceMain.getItem('settings').autoCheckUpdate,
+ click: () => {
+ const autoCheckUpdate =
+ !configServiceMain.getItem('settings').autoCheckUpdate;
+ contextMenu.items[TrayMenuItem.AutoCheckUpdate].checked =
+ autoCheckUpdate;
+ tray?.setContextMenu(contextMenu);
+ setLiveWallpaperMuted(autoCheckUpdate);
+ configServiceMain.setItem('settings', {
+ ...configServiceMain.getItem('settings'),
+ autoCheckUpdate,
+ });
+ },
+ },
+ {
+ label: t('exit'),
+ type: 'normal',
+ click: () => {
+ app.quit();
+ },
+ },
+ ]);
+ tray.setContextMenu(contextMenu);
+
+ return tray;
+}
diff --git a/electron/main/update.ts b/electron/main/update.ts
new file mode 100644
index 0000000..d363c9e
--- /dev/null
+++ b/electron/main/update.ts
@@ -0,0 +1,86 @@
+import { app, ipcMain } from 'electron';
+import {
+ type ProgressInfo,
+ type UpdateDownloadedEvent,
+ autoUpdater,
+} from 'electron-updater';
+
+export function update(win: Electron.BrowserWindow) {
+ // When set to false, the update download will be triggered through the API
+ autoUpdater.autoDownload = false;
+ autoUpdater.disableWebInstaller = false;
+ autoUpdater.allowDowngrade = false;
+
+ // start check
+ autoUpdater.on('checking-for-update', function () {
+ console.info('checking-for-update');
+ });
+ // update available
+ autoUpdater.on('update-available', (arg) => {
+ console.log('update-available', arg);
+ win.webContents.send('update-can-available', {
+ update: true,
+ version: app.getVersion(),
+ newVersion: arg?.version,
+ });
+ });
+ // update not available
+ autoUpdater.on('update-not-available', (arg) => {
+ console.log('update-not-available', arg);
+ win.webContents.send('update-can-available', {
+ update: false,
+ version: app.getVersion(),
+ newVersion: arg?.version,
+ });
+ });
+
+ // Checking for updates
+ ipcMain.handle('check-update', async () => {
+ if (!app.isPackaged) {
+ const error = new Error(
+ 'The update feature is only available after the package.',
+ );
+ return { message: error.message, error };
+ }
+
+ try {
+ return await autoUpdater.checkForUpdatesAndNotify();
+ } catch (error) {
+ return { message: 'Network error', error };
+ }
+ });
+
+ // Start downloading and feedback on progress
+ ipcMain.handle('start-download', (event) => {
+ startDownload(
+ (error, progressInfo) => {
+ if (error) {
+ // feedback download error message
+ event.sender.send('update-error', { message: error.message, error });
+ } else {
+ // feedback update progress message
+ event.sender.send('download-progress', progressInfo);
+ }
+ },
+ () => {
+ // feedback update downloaded message
+ event.sender.send('update-downloaded');
+ },
+ );
+ });
+
+ // Install now
+ ipcMain.handle('quit-and-install', () => {
+ autoUpdater.quitAndInstall(false, true);
+ });
+}
+
+function startDownload(
+ callback: (error: Error | null, info: ProgressInfo | null) => void,
+ complete: (event: UpdateDownloadedEvent) => void,
+) {
+ autoUpdater.on('download-progress', (info) => callback(null, info));
+ autoUpdater.on('error', (error) => callback(error, null));
+ autoUpdater.on('update-downloaded', complete);
+ autoUpdater.downloadUpdate();
+}
diff --git a/electron/preload/index.ts b/electron/preload/index.ts
new file mode 100644
index 0000000..ebd1e48
--- /dev/null
+++ b/electron/preload/index.ts
@@ -0,0 +1,94 @@
+function domReady(
+ condition: DocumentReadyState[] = ['complete', 'interactive'],
+) {
+ return new Promise((resolve) => {
+ if (condition.includes(document.readyState)) {
+ resolve(true);
+ } else {
+ document.addEventListener('readystatechange', () => {
+ if (condition.includes(document.readyState)) {
+ resolve(true);
+ }
+ });
+ }
+ });
+}
+
+const safeDOM = {
+ append(parent: HTMLElement, child: HTMLElement) {
+ if (!Array.from(parent.children).find((e) => e === child)) {
+ return parent.appendChild(child);
+ }
+ },
+ remove(parent: HTMLElement, child: HTMLElement) {
+ if (Array.from(parent.children).find((e) => e === child)) {
+ return parent.removeChild(child);
+ }
+ },
+};
+
+/**
+ * https://tobiasahlin.com/spinkit
+ * https://connoratherton.com/loaders
+ * https://projects.lukehaas.me/css-loaders
+ * https://matejkustec.github.io/SpinThatShit
+ */
+function useLoading() {
+ const className = `loaders-css__square-spin`;
+ const styleContent = `
+@keyframes square-spin {
+ 25% { transform: perspective(100px) rotateX(180deg) rotateY(0); }
+ 50% { transform: perspective(100px) rotateX(180deg) rotateY(180deg); }
+ 75% { transform: perspective(100px) rotateX(0) rotateY(180deg); }
+ 100% { transform: perspective(100px) rotateX(0) rotateY(0); }
+}
+.${className} > div {
+ animation-fill-mode: both;
+ width: 50px;
+ height: 50px;
+ background: #fff;
+ animation: square-spin 3s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite;
+}
+.app-loading-wrap {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: #282c34;
+ z-index: 9;
+}
+ `;
+ const oStyle = document.createElement('style');
+ const oDiv = document.createElement('div');
+
+ oStyle.id = 'app-loading-style';
+ oStyle.innerHTML = styleContent;
+ oDiv.className = 'app-loading-wrap';
+ oDiv.innerHTML = ``;
+
+ return {
+ appendLoading() {
+ safeDOM.append(document.head, oStyle);
+ safeDOM.append(document.body, oDiv);
+ },
+ removeLoading() {
+ safeDOM.remove(document.head, oStyle);
+ safeDOM.remove(document.body, oDiv);
+ },
+ };
+}
+
+// ----------------------------------------------------------------------
+
+const { appendLoading, removeLoading } = useLoading();
+domReady().then(appendLoading);
+
+window.onmessage = (ev) => {
+ ev.data.payload === 'removeLoading' && removeLoading();
+};
+
+setTimeout(removeLoading, 4999);
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..ba93854
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+ Workpaper
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..4eedb4a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "workpaper",
+ "version": "0.0.1",
+ "main": "dist-electron/main/index.js",
+ "license": "MIT",
+ "private": true,
+ "debug": {
+ "env": {
+ "VITE_DEV_SERVER_URL": "http://127.0.0.1:7777/"
+ }
+ },
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build && electron-builder",
+ "preview": "vite preview",
+ "pree2e": "vite build --mode=test",
+ "e2e": "playwright test"
+ },
+ "dependencies": {
+ "electron-as-wallpaper": "1.0.3",
+ "electron-updater": "^6.1.1",
+ "wallpaper": "^7.2.1"
+ },
+ "devDependencies": {
+ "@ant-design/icons": "^5.2.6",
+ "@playwright/test": "^1.37.1",
+ "@types/lodash": "^4.14.200",
+ "@types/node-schedule": "^2.1.2",
+ "@types/react": "^18.2.20",
+ "@types/react-dom": "^18.2.7",
+ "@vitejs/plugin-react": "^4.0.4",
+ "ahooks": "^3.7.8",
+ "animate.css": "^4.1.1",
+ "antd": "^5.10.2",
+ "autoprefixer": "^10.4.16",
+ "dayjs": "^1.11.10",
+ "electron": "29.0.0-alpha.5",
+ "electron-builder": "^24.6.3",
+ "electron-devtools-installer": "^3.2.0",
+ "i18next": "^23.6.0",
+ "less": "^4.2.0",
+ "less-loader": "^11.1.3",
+ "lodash": "^4.17.21",
+ "lowdb": "^6.1.1",
+ "mitt": "^3.0.1",
+ "node-schedule": "^2.1.1",
+ "postcss": "^8.4.31",
+ "prettier": "^3.0.3",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-i18next": "^13.3.1",
+ "react-router-dom": "^6.18.0",
+ "rxjs": "^7.8.1",
+ "tailwindcss": "^3.3.3",
+ "typescript": "^5.1.6",
+ "vite": "5.0.5",
+ "vite-plugin-electron": "^0.13.0-beta.3",
+ "vite-plugin-electron-renderer": "^0.14.5",
+ "vite-plugin-esmodule": "^1.5.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:Jarvay/workpaper.git"
+ }
+}
diff --git a/playwright.config.ts b/playwright.config.ts
new file mode 100644
index 0000000..d323551
--- /dev/null
+++ b/playwright.config.ts
@@ -0,0 +1,54 @@
+import type { PlaywrightTestConfig } from "@playwright/test";
+
+/**
+ * Read environment variables from file.
+ * https://github.com/motdotla/dotenv
+ */
+// require('dotenv').config();
+
+/**
+ * See https://playwright.dev/docs/test-configuration.
+ */
+const config: PlaywrightTestConfig = {
+ testDir: "./e2e",
+ /* Maximum time one test can run for. */
+ timeout: 30 * 1000,
+ expect: {
+ /**
+ * Maximum time expect() should wait for the condition to be met.
+ * For example in `await expect(locator).toHaveText();`
+ */
+ timeout: 5000,
+ },
+ /* Run tests in files in parallel */
+ fullyParallel: true,
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
+ forbidOnly: !!process.env.CI,
+ /* Retry on CI only */
+ retries: process.env.CI ? 2 : 0,
+ /* Opt out of parallel tests on CI. */
+ workers: process.env.CI ? 1 : undefined,
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
+ reporter: "html",
+ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
+ use: {
+ /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
+ actionTimeout: 0,
+ /* Base URL to use in actions like `await page.goto('/')`. */
+ // baseURL: 'http://localhost:3000',
+
+ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
+ trace: "on-first-retry",
+ },
+
+ /* Folder for test artifacts such as screenshots, videos, traces, etc. */
+ // outputDir: 'test-results/',
+
+ /* Run your local dev server before starting the tests */
+ // webServer: {
+ // command: 'npm run start',
+ // port: 3000,
+ // },
+};
+
+export default config;
diff --git a/postcss.config.cjs b/postcss.config.cjs
new file mode 100644
index 0000000..825cb18
--- /dev/null
+++ b/postcss.config.cjs
@@ -0,0 +1,8 @@
+module.exports = {
+ plugins: {
+ 'postcss-import': {},
+ 'tailwindcss/nesting': {},
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..906d24a
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/faviconTemplate.png b/public/faviconTemplate.png
new file mode 100644
index 0000000..62aa419
Binary files /dev/null and b/public/faviconTemplate.png differ
diff --git a/src/App.css b/src/App.css
new file mode 100644
index 0000000..22615e1
--- /dev/null
+++ b/src/App.css
@@ -0,0 +1,55 @@
+#root {
+ width: 100%;
+ height: 100vh;
+ margin: 0 auto;
+ text-align: center;
+ box-sizing: border-box;
+ overflow-y: hidden;
+}
+
+.logo-box {
+ position: relative;
+ height: 9em;
+}
+
+.logo {
+ position: absolute;
+ left: calc(50% - 4.5em);
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+ transition: filter 300ms;
+}
+
+.logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ .logo.electron {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
+
+.flex-center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 0000000..6b1a617
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,93 @@
+import './App.css';
+import { ConfigProvider, FloatButton } from 'antd';
+import zhCN from 'antd/locale/zh_CN';
+import enUS from 'antd/locale/en_US';
+import { RouterProvider } from 'react-router-dom';
+import { router } from '@/router';
+import { SettingOutlined } from '@ant-design/icons';
+import SettingsModal from '@/components/SettingsModal';
+import { useCallback, useState } from 'react';
+import { Locale } from '../cross/enums';
+import { ConfigProviderProps } from 'antd/es/config-provider';
+import { settingsService } from '@/services/settings';
+import { useMount, useUnmount } from 'ahooks';
+import { emitter } from '@/services/emitter';
+import { Settings } from '../cross/interface';
+import { ipcRenderer } from 'electron';
+
+const LOCALE_MAP = new Map([
+ [Locale.zhCN, zhCN],
+ [Locale.enUS, enUS],
+]);
+
+function App() {
+ const [settingsOpen, setSettingsOpen] = useState(false);
+ const [settingsBtnShow, setSettingsBtnShow] = useState(true);
+ const [updateAvailable, setUpdateAvailable] = useState(false);
+ const [versionInfo, setVersionInfo] = useState();
+
+ const [locale, setLocale] = useState();
+
+ const onUpdateCanAvailable = useCallback(
+ (_event: Electron.IpcRendererEvent, arg1: VersionInfo) => {
+ if (arg1.update) {
+ setUpdateAvailable(true);
+ setVersionInfo(arg1);
+ }
+ },
+ [],
+ );
+
+ useMount(async () => {
+ emitter.on('setSettingsBtnShow', (visible: boolean) => {
+ setSettingsBtnShow(visible);
+ });
+
+ const settings = await settingsService.get();
+ setLocale(LOCALE_MAP.get(settings.locale));
+
+ if (window.location.hash.includes('/wallpaper')) {
+ ipcRenderer.on('update-can-available', onUpdateCanAvailable);
+ if (settings.autoCheckUpdate) {
+ try {
+ await ipcRenderer.invoke('check-update');
+ } catch (e) {
+ console.warn(e);
+ }
+ }
+ }
+ });
+
+ useUnmount(() => {
+ ipcRenderer.off('update-can-available', onUpdateCanAvailable);
+ });
+
+ return (
+
+
+
+ <>
+ {settingsBtnShow && (
+ }
+ badge={updateAvailable ? { dot: true } : undefined}
+ onClick={() => {
+ setSettingsOpen(true);
+ }}
+ />
+ )}
+
+ setSettingsOpen(false)}
+ onChange={(settings) => {
+ setLocale(LOCALE_MAP.get(settings?.locale as Settings['locale']));
+ }}
+ versionInfo={versionInfo}
+ />
+ >
+
+ );
+}
+
+export default App;
diff --git a/src/components/CenterTable/index.tsx b/src/components/CenterTable/index.tsx
new file mode 100644
index 0000000..fed8b95
--- /dev/null
+++ b/src/components/CenterTable/index.tsx
@@ -0,0 +1,16 @@
+import React from 'react';
+import { Table } from 'antd';
+import type { TableProps } from 'antd';
+import { AnyObject } from 'antd/es/_util/type';
+
+const CenterTable = (props: TableProps) => {
+ if (Array.isArray(props.columns)) {
+ props.columns.forEach((column) => {
+ column.align = 'center';
+ });
+ }
+
+ return ;
+};
+
+export default CenterTable;
diff --git a/src/components/PageContainer/index.module.less b/src/components/PageContainer/index.module.less
new file mode 100644
index 0000000..82f0d3a
--- /dev/null
+++ b/src/components/PageContainer/index.module.less
@@ -0,0 +1,3 @@
+.app-layout {
+ padding: 2em;
+}
diff --git a/src/components/PageContainer/index.tsx b/src/components/PageContainer/index.tsx
new file mode 100644
index 0000000..b094c5c
--- /dev/null
+++ b/src/components/PageContainer/index.tsx
@@ -0,0 +1,11 @@
+import React, { ReactNode } from 'react';
+import styles from './index.module.less';
+
+export interface PageContainerProps {
+ children?: React.JSX.Element | ReactNode;
+}
+const PageContainer: React.FC = (props) => {
+ return {props.children}
;
+};
+
+export default PageContainer;
diff --git a/src/components/ScaleModeComponent/index.tsx b/src/components/ScaleModeComponent/index.tsx
new file mode 100644
index 0000000..0e1ac80
--- /dev/null
+++ b/src/components/ScaleModeComponent/index.tsx
@@ -0,0 +1,73 @@
+import React, { useState } from 'react';
+import { DefaultOptionType } from 'rc-select/lib/Select';
+import { useTranslation } from 'react-i18next';
+import { useMount } from 'ahooks';
+import { ipcRenderer } from 'electron';
+import {
+ Events,
+ MacOSScaleMode,
+ WallpaperMode,
+ WebScaleMode,
+ WindowsScaleMode,
+} from '../../../cross/enums';
+import { Settings, TranslationFunc } from '../../../cross/interface';
+import { settingsService } from '@/services/settings';
+
+export interface ScaleModeComponentProps {
+ children?: (
+ scaleModeOptions: DefaultOptionType[],
+ ) => React.ReactNode | JSX.Element;
+}
+
+const ScaleModeComponent: React.FC = (props) => {
+ const { t }: { t: TranslationFunc } = useTranslation();
+
+ const [platform, setPlatform] = useState();
+ const [settings, setSettings] = useState();
+
+ useMount(async () => {
+ setPlatform(await ipcRenderer.invoke(Events.GetPlatform));
+
+ setSettings(await settingsService.get());
+ });
+
+ let scaleModeOptions: DefaultOptionType[] = [];
+
+ if (settings?.wallpaperMode === WallpaperMode.Cover) {
+ scaleModeOptions = [
+ { label: t('scaleMode.default'), value: undefined },
+ { label: t('webScaleMode.fill'), value: WebScaleMode.Fill },
+ { label: t('webScaleMode.contain'), value: WebScaleMode.Contain },
+ { label: t('webScaleMode.cover'), value: WebScaleMode.Cover },
+ ];
+ } else {
+ switch (platform) {
+ default:
+ case 'win32':
+ scaleModeOptions = [
+ { label: t('scaleMode.default'), value: undefined },
+ { label: t('scaleMode.fit'), value: WindowsScaleMode.Fit },
+ { label: t('scaleMode.center'), value: WindowsScaleMode.Center },
+ { label: t('scaleMode.stretch'), value: WindowsScaleMode.Stretch },
+ { label: t('scaleMode.fill'), value: WindowsScaleMode.Fill },
+ { label: t('scaleMode.tile'), value: WindowsScaleMode.Tile },
+ { label: t('scaleMode.span'), value: WindowsScaleMode.Span },
+ ];
+ break;
+ case 'darwin':
+ scaleModeOptions = [
+ { label: t('scaleMode.default'), value: undefined },
+ { label: t('scaleMode.fit'), value: MacOSScaleMode.Fit },
+ { label: t('scaleMode.center'), value: MacOSScaleMode.Center },
+ { label: t('scaleMode.stretch'), value: MacOSScaleMode.Stretch },
+ { label: t('scaleMode.fill'), value: MacOSScaleMode.Fill },
+ { label: t('scaleMode.auto'), value: MacOSScaleMode.Auto },
+ ];
+ break;
+ }
+ }
+
+ return props.children?.(scaleModeOptions) || null;
+};
+
+export default ScaleModeComponent;
diff --git a/src/components/SettingsModal/index.module.less b/src/components/SettingsModal/index.module.less
new file mode 100644
index 0000000..c95d684
--- /dev/null
+++ b/src/components/SettingsModal/index.module.less
@@ -0,0 +1,3 @@
+.form-item {
+ width: 200px !important;
+}
diff --git a/src/components/SettingsModal/index.tsx b/src/components/SettingsModal/index.tsx
new file mode 100644
index 0000000..e37d258
--- /dev/null
+++ b/src/components/SettingsModal/index.tsx
@@ -0,0 +1,180 @@
+import React, { useState } from 'react';
+import { Badge, Button, Form, Modal, Select, Slider, Space } from 'antd';
+import {
+ ModalFormProps,
+ Settings,
+ TranslationFunc,
+} from '../../../cross/interface';
+import { debounce, omit } from 'lodash';
+import { useMount, useUpdateEffect } from 'ahooks';
+import { settingsService } from '@/services/settings';
+import { Events, Locale, WallpaperMode } from '../../../cross/enums';
+import { useTranslation } from 'react-i18next';
+import ScaleModeComponent from '@/components/ScaleModeComponent';
+import styles from './index.module.less';
+import { ipcRenderer } from 'electron';
+import Update from '@/components/Update';
+
+export interface SettingsModalProps extends ModalFormProps {
+ versionInfo?: VersionInfo;
+}
+
+const SettingsModal: React.FC = (props) => {
+ const [form] = Form.useForm();
+ const [version, setVersion] = useState('');
+ const [versionInfo, setVersionInfo] = useState();
+ const [settings, setSettings] = useState();
+ const [platform, setPlatform] = useState();
+
+ const { t }: { t: TranslationFunc } = useTranslation();
+
+ async function getVersion() {
+ const ver = await ipcRenderer.invoke(Events.GetVersion);
+ setVersion(ver);
+ }
+
+ useMount(async () => {
+ setPlatform(await ipcRenderer.invoke(Events.GetPlatform));
+ });
+
+ useUpdateEffect(() => {
+ if (props.open) {
+ settingsService.get().then((settings) => {
+ setSettings(settings);
+ form.resetFields();
+ form.setFieldsValue({
+ ...settings,
+ });
+ });
+
+ getVersion();
+
+ if (props.versionInfo) {
+ setVersionInfo(props.versionInfo);
+ }
+ }
+ }, [props.open]);
+
+ return (
+
+ props.onCancel?.(
+ event as React.MouseEvent,
+ )
+ }
+ >
+ {t('close')}
+
+ }
+ destroyOnClose
+ title={t('settings')}
+ >
+
+
+
+
+
+
+
+
+
+ {({ getFieldsValue }) => {
+ const { wallpaperMode } = getFieldsValue() as Settings;
+ if (
+ wallpaperMode === WallpaperMode.Replace &&
+ platform === 'linux'
+ ) {
+ return null;
+ }
+ return (
+
+ {(scaleModeOptions) => {
+ const name =
+ settings?.wallpaperMode === WallpaperMode.Cover
+ ? 'webScaleMode'
+ : 'scaleMode';
+ return (
+
+
+
+ );
+ }}
+
+ );
+ }}
+
+
+
+ {
+ ipcRenderer.invoke(Events.SetLiveWallpaperVolume, volume);
+ settingsService.get().then((settings) => {
+ settingsService.save({
+ ...settings,
+ volume,
+ });
+ });
+ }, 200)}
+ />
+
+
+
+ {version}
+
+
+
+
+ {!!versionInfo?.newVersion ? (
+
+ {versionInfo?.newVersion}
+
+ ) : (
+ -
+ )}
+
+ {
+ setVersionInfo(versionInfo);
+ }}
+ />
+
+
+
+
+ );
+};
+
+export default SettingsModal;
diff --git a/src/components/Update/index.tsx b/src/components/Update/index.tsx
new file mode 100644
index 0000000..c1c5564
--- /dev/null
+++ b/src/components/Update/index.tsx
@@ -0,0 +1,144 @@
+import React, { useCallback, useEffect, useState } from 'react';
+import { Button, message, Modal, Progress, Space } from 'antd';
+import { TranslationFunc } from '../../../cross/interface';
+import { useTranslation } from 'react-i18next';
+import { ipcRenderer } from 'electron';
+import type { ProgressInfo, UpdateCheckResult } from 'electron-updater';
+import { useMount, useUnmount, useUpdateEffect } from 'ahooks';
+import { hasIn } from 'lodash';
+import { Events } from '../../../cross/enums';
+
+interface UpdateError {
+ message: string;
+ error: Error;
+}
+
+type CheckUpdateResult = null | UpdateError | UpdateCheckResult;
+
+export interface UpdateProps {
+ onUpdateAvailable?: (versionInfo: VersionInfo) => void;
+ versionInfo?: VersionInfo;
+}
+
+const Update: React.FC = (props) => {
+ const { t }: { t: TranslationFunc } = useTranslation();
+
+ const [loading, setLoading] = useState(false);
+ const [updateAvailable, setUpdateAvailable] = useState(false);
+ const [progressModalOpen, setProgressModalOpen] = useState(false);
+ const [progress, setProgress] = useState(0);
+
+ const onUpdateCanAvailable = useCallback(
+ (_event: Electron.IpcRendererEvent, arg1: VersionInfo) => {
+ setUpdateAvailable(arg1.update);
+ props.onUpdateAvailable?.(arg1);
+ },
+ [],
+ );
+
+ const onUpdateError = useCallback(
+ (_event: Electron.IpcRendererEvent, arg1: ErrorType) => {
+ console.error('onUpdateError', arg1);
+ },
+ [],
+ );
+
+ const onDownloadProgress = useCallback(
+ (_event: Electron.IpcRendererEvent, arg1: ProgressInfo) => {
+ console.log('onDownloadProgress', arg1);
+ setProgress(Number(arg1.percent.toFixed(2)));
+ },
+ [],
+ );
+
+ const onUpdateDownloaded = useCallback(
+ (_event: Electron.IpcRendererEvent, ...args: any[]) => {
+ setProgress(100);
+ },
+ [],
+ );
+
+ useMount(() => {
+ ipcRenderer.on('update-can-available', onUpdateCanAvailable);
+ ipcRenderer.on('update-error', onUpdateError);
+ ipcRenderer.on('download-progress', onDownloadProgress);
+ ipcRenderer.on('update-downloaded', onUpdateDownloaded);
+
+ if (props.versionInfo?.update) {
+ setUpdateAvailable(true);
+ }
+ });
+
+ useUnmount(() => {
+ ipcRenderer.off('update-can-available', onUpdateCanAvailable);
+ ipcRenderer.off('update-error', onUpdateError);
+ ipcRenderer.off('download-progress', onDownloadProgress);
+ ipcRenderer.off('update-downloaded', onUpdateDownloaded);
+ });
+
+ useUpdateEffect(() => {
+ if (props.versionInfo?.update) {
+ setUpdateAvailable(true);
+ }
+ }, [props.versionInfo]);
+
+ return (
+ <>
+ {!updateAvailable ? (
+ {
+ setLoading(true);
+ const result: CheckUpdateResult =
+ await ipcRenderer.invoke('check-update');
+ setLoading(false);
+ if (!result) return;
+ if (hasIn(result, 'error') && hasIn(result, 'message')) {
+ message.error((result as UpdateError).message);
+ return;
+ }
+ }}
+ >
+ {t('checkUpdate')}
+
+ ) : (
+ {
+ setProgressModalOpen(true);
+ ipcRenderer.invoke('start-download');
+ }}
+ >
+ {t('download')}
+
+ )}
+
+ setProgressModalOpen(false)}>
+ {t('close')}
+
+ }
+ title={null}
+ >
+
+
+
+ {progress === 100 ? (
+ {
+ ipcRenderer.invoke('quit-and-install');
+ }}
+ >
+ {t('update')}
+
+ ) : null}
+
+
+ >
+ );
+};
+
+export default Update;
diff --git a/src/components/WeekComponent/index.tsx b/src/components/WeekComponent/index.tsx
new file mode 100644
index 0000000..a67796b
--- /dev/null
+++ b/src/components/WeekComponent/index.tsx
@@ -0,0 +1,37 @@
+import React from 'react';
+import { useTranslation } from 'react-i18next';
+import { SelectProps } from 'antd';
+import { DefaultOptionType } from 'rc-select/lib/Select';
+
+export interface WeekComponentProps {
+ children?: (
+ weekMap: Map,
+ weekOptions: DefaultOptionType[],
+ ) => React.ReactNode | JSX.Element;
+}
+
+const WeekComponent: React.FC = (props) => {
+ const { t } = useTranslation();
+
+ const weekMap = new Map([
+ [1, t('monday')],
+ [2, t('tuesday')],
+ [3, t('wednesday')],
+ [4, t('thursday')],
+ [5, t('friday')],
+ [6, t('saturday')],
+ [7, t('sunday')],
+ ]);
+
+ const weekOptions: DefaultOptionType[] = [];
+ weekMap.forEach((value, key, map) => {
+ weekOptions.push({
+ label: value,
+ value: key,
+ });
+ });
+
+ return props.children?.(weekMap, weekOptions) || null;
+};
+
+export default WeekComponent;
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..14bc46c
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,100 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+:root {
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-text-size-adjust: 100%;
+}
+
+a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+}
+
+a:hover {
+ color: #535bf2;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
+}
+
+h1 {
+ font-size: 3.2em;
+ line-height: 1.1;
+}
+
+button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+
+button:hover {
+ border-color: #646cff;
+}
+
+button:focus,
+button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+}
+
+code {
+ background-color: #1a1a1a;
+ padding: 2px 4px;
+ margin: 0 4px;
+ border-radius: 4px;
+}
+
+.card {
+ padding: 2em;
+}
+
+#app {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+
+ a:hover {
+ color: #747bff;
+ }
+
+ button {
+ background-color: #f9f9f9;
+ }
+
+ code {
+ background-color: #f9f9f9;
+ }
+}
diff --git a/src/main.tsx b/src/main.tsx
new file mode 100644
index 0000000..618fa0c
--- /dev/null
+++ b/src/main.tsx
@@ -0,0 +1,13 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import '../cross/locale';
+import App from './App';
+import './index.css';
+
+ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
+
+
+ ,
+);
+
+postMessage({ payload: 'removeLoading' }, '*');
diff --git a/src/pages/home/components/WeekdayModal/index.tsx b/src/pages/home/components/WeekdayModal/index.tsx
new file mode 100644
index 0000000..4a1edb9
--- /dev/null
+++ b/src/pages/home/components/WeekdayModal/index.tsx
@@ -0,0 +1,106 @@
+import React, { useState } from 'react';
+import { ModalFormProps, Weekday } from '../../../../../cross/interface';
+import { Checkbox, Form, message, Modal } from 'antd';
+import { useUpdateEffect } from 'ahooks';
+import { FormMode } from '../../../../../cross/enums';
+import { weekdayService } from '@/services/weekday';
+import WeekComponent from '@/components/WeekComponent';
+import { useTranslation } from 'react-i18next';
+import { TranslationFunc } from '../../../../../cross/interface';
+
+const WeekdayModal: React.FC = (props) => {
+ const [form] = Form.useForm();
+
+ const [existDays, setExistDays] = useState([]);
+
+ const { t }: { t: TranslationFunc } = useTranslation();
+
+ async function doCreate() {
+ try {
+ const values = await form.validateFields();
+ await weekdayService.create({
+ ...values,
+ } as Weekday);
+ await props.onChange?.();
+ message.success(t('operationSuccess'));
+ } catch (e) {
+ console.warn(e);
+ }
+ }
+
+ async function doUpdate() {
+ try {
+ const values = await form.validateFields();
+ await weekdayService.update({
+ ...props.values,
+ ...values,
+ id: props.values?.id,
+ } as Weekday);
+ await props.onChange?.();
+ message.success(t('operationSuccess'));
+ } catch (e) {
+ console.warn(e);
+ }
+ }
+
+ useUpdateEffect(() => {
+ if (props.open) {
+ form.resetFields();
+
+ weekdayService.get().then((weekdays) => {
+ const days: number[] = [];
+ weekdays
+ .filter((item) => item.id !== props.values?.id)
+ .forEach((item) => {
+ days.push(...item.days);
+ });
+
+ form.setFieldsValue({
+ days: [1, 2, 3, 4, 5, 6, 7].filter((day) => !days.includes(day)),
+ ...(props.values || {}),
+ });
+ setExistDays(days);
+ });
+ }
+ }, [props.open]);
+
+ return (
+ {
+ if (props.mode === FormMode.Create) {
+ await doCreate();
+ } else {
+ await doUpdate();
+ }
+ }}
+ {...props}
+ title={t('selectPeriodTips')}
+ width="60%"
+ >
+
+ {(weekMap, weekOptions) => {
+ return (
+
+ {
+ return {
+ label: item.label,
+ value: item.value as number,
+ disabled: existDays.includes(item.value as number),
+ };
+ })}
+ />
+
+
+ );
+ }}
+
+
+ );
+};
+
+export default WeekdayModal;
diff --git a/src/pages/home/index.tsx b/src/pages/home/index.tsx
new file mode 100644
index 0000000..da12db0
--- /dev/null
+++ b/src/pages/home/index.tsx
@@ -0,0 +1,109 @@
+import React, { useState } from 'react';
+import { Button, List, Popconfirm, Space } from 'antd';
+import WeekdayModal from './components/WeekdayModal';
+import { FormMode } from '../../../cross/enums';
+import { useMount } from 'ahooks';
+import { weekdayService } from '@/services/weekday';
+import { Link } from 'react-router-dom';
+import { useTranslation } from 'react-i18next';
+import WeekComponent from '@/components/WeekComponent';
+import { TranslationFunc, Weekday } from '../../../cross/interface';
+import { ipcRenderer } from 'electron';
+import PageContainer from '@/components/PageContainer';
+
+const Home: React.FC = () => {
+ const [dateSource, setDataSource] = useState([]);
+ const [createWeekDayOpen, setCreateWeekDayOpen] = useState(false);
+ const [updateWeekDayOpen, setUpdateWeekDayOpen] = useState(false);
+ const [currentRow, setCurrentRow] = useState();
+
+ const { t }: { t: TranslationFunc } = useTranslation();
+
+ async function refresh() {
+ setDataSource(await weekdayService.get());
+ }
+
+ useMount(() => {
+ refresh();
+
+ ipcRenderer.on('test', () => {
+ alert('test');
+ console.log('test');
+ });
+ });
+
+ return (
+
+
+
+ setCreateWeekDayOpen(true)}>
+ {t('create')}
+
+
+ {
+ setCreateWeekDayOpen(false);
+ refresh();
+ }}
+ onCancel={() => setCreateWeekDayOpen(false)}
+ />
+
+ {
+ return (
+
+ {t('check')}
+ ,
+
+ {
+ setCurrentRow(item);
+ setUpdateWeekDayOpen(true);
+ }}
+ >
+ {t('edit')}
+
+
+ setUpdateWeekDayOpen(false)}
+ onChange={async () => {
+ setUpdateWeekDayOpen(false);
+ refresh();
+ }}
+ values={currentRow}
+ />
+ ,
+ {
+ await weekdayService.delete(item?.id as string);
+ refresh();
+ }}
+ >
+ {t('delete')}
+ ,
+ ]}
+ >
+
+ {(weekMap) => {
+ return item.days.map((day) => weekMap.get(day)).join(', ');
+ }}
+
+
+ );
+ }}
+ />
+
+
+ );
+};
+
+export default Home;
diff --git a/src/pages/rule/components/WallpaperRuleModal/index.tsx b/src/pages/rule/components/WallpaperRuleModal/index.tsx
new file mode 100644
index 0000000..17568e1
--- /dev/null
+++ b/src/pages/rule/components/WallpaperRuleModal/index.tsx
@@ -0,0 +1,403 @@
+import React from 'react';
+import {
+ Button,
+ Form,
+ Image,
+ Input,
+ InputNumber,
+ message,
+ Modal,
+ Radio,
+ Space,
+ Switch,
+ TimePicker,
+} from 'antd';
+import {
+ ModalFormProps,
+ Rule,
+ TranslationFunc,
+} from '../../../../../cross/interface';
+import {
+ ChangeType,
+ Events,
+ FormMode,
+ WallpaperType,
+} from '../../../../../cross/enums';
+import { ipcRenderer } from 'electron';
+import { useUpdateEffect } from 'ahooks';
+import { ruleService } from '@/services/rule';
+import { cloneDeep, omit } from 'lodash';
+import dayjs from 'dayjs';
+import { useTranslation } from 'react-i18next';
+import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+
+const WallpaperRuleModal: React.FC<
+ ModalFormProps & { weekdayId?: string | number }
+> = (props) => {
+ const [form] = Form.useForm();
+
+ const { t }: { t: TranslationFunc } = useTranslation();
+
+ async function doCreate() {
+ try {
+ const values = await form.validateFields();
+ await ruleService.create({
+ ...omit(values, ['time']),
+ start: dayjs(values.time[0]).format('HH:mm'),
+ end: dayjs(values.time[1]).format('HH:mm'),
+ weekdayId: props.weekdayId,
+ } as Rule);
+ message.success(t('operationSuccess'));
+ await props.onChange?.();
+ } catch (e) {
+ console.warn(e);
+ }
+ }
+
+ async function doUpdate() {
+ try {
+ const values = await form.validateFields();
+ await ruleService.update({
+ ...props.values,
+ ...omit(values, ['time']),
+ start: dayjs(values.time[0]).format('HH:mm'),
+ end: dayjs(values.time[1]).format('HH:mm'),
+ } as Rule);
+ message.success(t('operationSuccess'));
+ await props.onChange?.();
+ } catch (e) {
+ console.warn(e);
+ }
+ }
+
+ useUpdateEffect(() => {
+ if (props.open) {
+ form.resetFields();
+ if (props.values) {
+ const values: any = cloneDeep(props.values);
+ values.time = [
+ dayjs(`2001-01-01 ${values.start}`),
+ dayjs(`2001-01-01 ${values.end}`),
+ ];
+ form.setFieldsValue({
+ ...(values || {}),
+ });
+ }
+ }
+ }, [props.open, props.values]);
+
+ return (
+ {
+ if (props.mode === FormMode.Create) {
+ await doCreate();
+ } else {
+ await doUpdate();
+ }
+ }}
+ >
+
+
+ );
+};
+
+export default WallpaperRuleModal;
diff --git a/src/pages/rule/index.tsx b/src/pages/rule/index.tsx
new file mode 100644
index 0000000..075778b
--- /dev/null
+++ b/src/pages/rule/index.tsx
@@ -0,0 +1,258 @@
+import React, { useState } from 'react';
+import { ruleService } from '@/services/rule';
+import { useMount, useUnmount } from 'ahooks';
+import { ipcRenderer } from 'electron';
+import {
+ ChangeType,
+ Events,
+ FormMode,
+ WallpaperType,
+} from '../../../cross/enums';
+import { ColumnsType } from 'antd/es/table/InternalTable';
+import { Button, Image, Popconfirm, Space } from 'antd';
+import WallpaperRule from './components/WallpaperRuleModal';
+import { useNavigate, useParams } from 'react-router-dom';
+import { ArrowLeftOutlined } from '@ant-design/icons';
+import { weekdayService } from '@/services/weekday';
+import { Rule, TranslationFunc, Weekday } from '../../../cross/interface';
+import { useTranslation } from 'react-i18next';
+import WeekComponent from '@/components/WeekComponent';
+import PageContainer from '@/components/PageContainer';
+import CenterTable from '@/components/CenterTable';
+
+const RuleIndex: React.FC = () => {
+ const [dataSource, setDataSource] = useState([]);
+ const [createModalOpen, setCreateModalOpen] = useState(false);
+ const [updateModalOpen, setUpdateModalOpen] = useState(false);
+ const [currentRow, setCurrentRow] = useState();
+ const [weekday, setWeekday] = useState();
+
+ const navigate = useNavigate();
+ const { id: weekdayId } = useParams();
+
+ const { t }: { t: TranslationFunc } = useTranslation();
+
+ async function refresh() {
+ const rules = await ruleService.get();
+ setDataSource(rules.filter((rule) => rule.weekdayId === weekdayId));
+ }
+
+ useMount(async () => {
+ refresh();
+ setWeekday(
+ (await weekdayService.get()).find((item) => item.id === weekdayId),
+ );
+ });
+
+ useUnmount(() => {
+ ipcRenderer.removeAllListeners(Events.ResetSchedule);
+ });
+
+ const columns: ColumnsType = [
+ {
+ title: t('rule.timeSlot'),
+ dataIndex: 'time',
+ width: 180,
+ render: (value, record) => {
+ return (
+
+ {record.start} - {record.end}
+
+ );
+ },
+ },
+ {
+ title: t('rule.period'),
+ dataIndex: 'days',
+ width: 200,
+ render: (value, record) => {
+ return (
+
+ {(weekMap) => {
+ return weekday?.days?.map((day) => weekMap.get(day)).join(', ');
+ }}
+
+ );
+ },
+ },
+ {
+ title: t('rule.wallpaperType'),
+ dataIndex: 'wallpaperType',
+ width: 120,
+ render: (value) => {
+ switch (value) {
+ default:
+ case WallpaperType.Image:
+ return t('rule.wallpaperType.image');
+ case WallpaperType.Video:
+ return t('rule.wallpaperType.video');
+ }
+ },
+ },
+ {
+ title: t('rule.type'),
+ dataIndex: 'type',
+ width: 120,
+ render: (value) => {
+ switch (value) {
+ default:
+ case ChangeType.Fixed:
+ return t('rule.type.fixed');
+ case ChangeType.AutoChange:
+ return t('rule.type.autoChange');
+ }
+ },
+ },
+ {
+ title: t('rule.path'),
+ dataIndex: 'path',
+ width: 250,
+ ellipsis: true,
+ render: (value, record) => {
+ switch (record.type) {
+ default:
+ case ChangeType.Fixed:
+ switch (record.wallpaperType) {
+ default:
+ case WallpaperType.Image:
+ return (
+
+ {record.paths?.map((item) => {
+ return (
+
+ );
+ })}
+
+ );
+ case WallpaperType.Video:
+ return (
+
+ {record.paths?.map((item) => {
+ return (
+
+ );
+ })}
+
+ );
+ }
+
+ case ChangeType.AutoChange:
+ return {value} ;
+ }
+ },
+ },
+ {
+ title: t('rule.interval'),
+ dataIndex: 'interval',
+ width: 120,
+ render: (value, record) => {
+ if (record.wallpaperType === WallpaperType.Video) {
+ return '-';
+ }
+ return value || '-';
+ },
+ },
+ {
+ title: t('rule.isRandom'),
+ dataIndex: 'isRandom',
+ width: 120,
+ render: (value) => {
+ return value ? t('yes') : t('no');
+ },
+ },
+ {
+ title: t('operation'),
+ dataIndex: 'options',
+ width: 180,
+ fixed: 'right',
+ render: (value, record) => {
+ return (
+
+ {
+ setCurrentRow(record);
+ setUpdateModalOpen(true);
+ }}
+ >
+ {t('edit')}
+
+
+ {
+ await ruleService.delete(record.id as string);
+ refresh();
+ }}
+ >
+ {t('delete')}
+
+
+ );
+ },
+ },
+ ];
+
+ return (
+
+
+
+
{
+ navigate(-1);
+ }}
+ >
+
+
+
+
setCreateModalOpen(true)}>
+ {t('create')}
+
+
+
setCreateModalOpen(false)}
+ onChange={async () => {
+ setCreateModalOpen(false);
+ refresh();
+ }}
+ />
+
+
+
+
+ setUpdateModalOpen(false)}
+ values={currentRow}
+ mode={FormMode.Update}
+ onChange={() => {
+ setUpdateModalOpen(false);
+ refresh();
+ }}
+ />
+
+
+ );
+};
+
+export default RuleIndex;
diff --git a/src/pages/wallpaper/components/LiveWallpaper/index.module.less b/src/pages/wallpaper/components/LiveWallpaper/index.module.less
new file mode 100644
index 0000000..2fbcf05
--- /dev/null
+++ b/src/pages/wallpaper/components/LiveWallpaper/index.module.less
@@ -0,0 +1,7 @@
+.live-wallpaper-container {
+ position: absolute;
+ left: 0;
+ top: 0;
+ min-width: 100vw;
+ min-height: 100vh;
+}
diff --git a/src/pages/wallpaper/components/LiveWallpaper/index.tsx b/src/pages/wallpaper/components/LiveWallpaper/index.tsx
new file mode 100644
index 0000000..6738000
--- /dev/null
+++ b/src/pages/wallpaper/components/LiveWallpaper/index.tsx
@@ -0,0 +1,102 @@
+import React, { LegacyRef, useRef, useState } from 'react';
+import { ipcRenderer, type IpcRendererEvent } from 'electron';
+import { Events, WallpaperType } from '../../../../../cross/enums';
+import { useParams } from 'react-router-dom';
+import { useMount, useUnmount, useUpdateEffect } from 'ahooks';
+import styles from './index.module.less';
+
+export interface LiveWallpaperProps {
+ style?: React.CSSProperties;
+}
+
+const LiveWallpaper: React.FC = (props) => {
+ const [paths, setPaths] = useState([]);
+ const [currentIndex, setCurrentIndex] = useState(0);
+ const { displayId } = useParams();
+
+ const videoRef = useRef();
+
+ const liveWallpaperHandler: (
+ event: IpcRendererEvent,
+ ...args: any[]
+ ) => void = (_, _paths: string[]) => {
+ setPaths(_paths);
+ setCurrentIndex(0);
+ };
+
+ const liveWallpaperMutedHandler: (
+ event: IpcRendererEvent,
+ ...args: any[]
+ ) => void = (_, muted: boolean) => {
+ if (videoRef.current) {
+ videoRef.current.muted = muted;
+ }
+ };
+
+ const liveWallpaperVolumeHandler: (
+ event: IpcRendererEvent,
+ ...args: any[]
+ ) => void = (_, volume: number) => {
+ if (videoRef.current) {
+ videoRef.current.volume = volume;
+ }
+ };
+
+ function registerLiveWallpaperEvents() {
+ ipcRenderer.on(Events.SetLiveWallpaper, liveWallpaperHandler);
+
+ ipcRenderer.on(Events.SetLiveWallpaperMuted, liveWallpaperMutedHandler);
+
+ ipcRenderer.on(Events.SetLiveWallpaperVolume, liveWallpaperVolumeHandler);
+ }
+
+ function unregisterLiveWallpaperEvents() {
+ ipcRenderer.off(Events.SetLiveWallpaper, liveWallpaperHandler);
+
+ ipcRenderer.off(Events.SetLiveWallpaperMuted, liveWallpaperMutedHandler);
+
+ ipcRenderer.off(Events.SetLiveWallpaperVolume, liveWallpaperVolumeHandler);
+ }
+
+ useMount(() => {
+ registerLiveWallpaperEvents();
+ });
+
+ useUnmount(() => {
+ unregisterLiveWallpaperEvents();
+ });
+
+ useUpdateEffect(() => {
+ if (!videoRef.current) return;
+ videoRef.current.src = paths[currentIndex];
+ videoRef.current.load();
+ videoRef.current.play();
+ }, [currentIndex]);
+
+ return (
+ {
+ if (ref) {
+ videoRef.current = ref;
+ }
+ }}
+ src={paths[0]}
+ className={styles.liveWallpaperContainer}
+ autoPlay
+ muted
+ onLoadedMetadata={() => {
+ ipcRenderer.send(Events.LiveWallpaperLoaded, Number(displayId));
+ }}
+ loop={paths.length === 1}
+ onEnded={() => {
+ if (currentIndex + 1 === paths.length) {
+ setCurrentIndex(0);
+ } else {
+ setCurrentIndex(currentIndex + 1);
+ }
+ }}
+ />
+ );
+};
+
+export default LiveWallpaper;
diff --git a/src/pages/wallpaper/components/StaticWallpaper/index.module.less b/src/pages/wallpaper/components/StaticWallpaper/index.module.less
new file mode 100644
index 0000000..b3abf19
--- /dev/null
+++ b/src/pages/wallpaper/components/StaticWallpaper/index.module.less
@@ -0,0 +1,27 @@
+.fade-in {
+ animation: fadein 800ms;
+}
+
+@keyframes fadein {
+ 0% {
+ opacity: 0
+ }
+ 50% {
+ opacity: 0.5
+ }
+ 100% {
+ opacity: 1
+ }
+}
+
+.wallpaper-container {
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ .wallpaper {
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+}
diff --git a/src/pages/wallpaper/components/StaticWallpaper/index.tsx b/src/pages/wallpaper/components/StaticWallpaper/index.tsx
new file mode 100644
index 0000000..f9d2b4b
--- /dev/null
+++ b/src/pages/wallpaper/components/StaticWallpaper/index.tsx
@@ -0,0 +1,68 @@
+import React, { useMemo, useRef, useState } from 'react';
+import { Settings } from '../../../../../cross/interface';
+import { useMount, useUpdateEffect } from 'ahooks';
+import { settingsService } from '@/services/settings';
+import { ipcRenderer } from 'electron';
+import { Events } from '../../../../../cross/enums';
+import { useParams } from 'react-router-dom';
+import styles from './index.module.less';
+
+export interface StaticWallpaperProps {
+ path?: string;
+ style?: React.CSSProperties;
+}
+
+const StaticWallpaper: React.FC = (props) => {
+ const [settings, setSettings] = useState();
+
+ const [paths, setPaths] = useState([]);
+
+ const imgRef = useRef();
+
+ const { displayId } = useParams();
+
+ useMount(async () => {
+ setSettings(await settingsService.get());
+ if (props.path) {
+ setPaths([...paths, props.path]);
+ }
+ });
+
+ useUpdateEffect(() => {
+ if (!props.path) return;
+ setPaths([...paths, props.path]);
+ }, [props.path]);
+
+ useUpdateEffect(() => {
+ setTimeout(() => {
+ if (paths.length > 3) {
+ setPaths(paths.slice(-3));
+ }
+ }, 500);
+ }, [paths]);
+
+ return (
+
+ {paths.map((item, index) => (
+
!!ref && (imgRef.current = ref)}
+ alt=""
+ src={`file://${item}`}
+ className={[styles.fadeIn, styles.wallpaper].join(' ')}
+ style={{
+ width: '100vw',
+ height: '100vh',
+ objectFit: settings?.webScaleMode,
+ zIndex: index + 5,
+ }}
+ onLoad={() => {
+ ipcRenderer.send(Events.StaticWallpaperLoaded, Number(displayId));
+ }}
+ />
+ ))}
+
+ );
+};
+
+export default StaticWallpaper;
diff --git a/src/pages/wallpaper/index.tsx b/src/pages/wallpaper/index.tsx
new file mode 100644
index 0000000..48d966e
--- /dev/null
+++ b/src/pages/wallpaper/index.tsx
@@ -0,0 +1,71 @@
+import React, { useState } from 'react';
+import { useMount, useUnmount } from 'ahooks';
+import type { IpcRendererEvent } from 'electron';
+import { ipcRenderer } from 'electron';
+import { Events, WallpaperType } from '../../../cross/enums';
+import { emitter } from '@/services/emitter';
+import LiveWallpaper from '@/pages/wallpaper/components/LiveWallpaper';
+import StaticWallpaper from '@/pages/wallpaper/components/StaticWallpaper';
+import { useParams } from 'react-router-dom';
+
+const Wallpaper: React.FC = () => {
+ const [path, setPath] = useState();
+ const [wallpaperType, setWallpaperType] = useState();
+
+ const { displayId } = useParams();
+
+ const staticWallpaperHandler: (
+ event: IpcRendererEvent,
+ ...args: any[]
+ ) => void = (_, _path: string) => {
+ setPath(_path);
+ setWallpaperType(WallpaperType.Image);
+ };
+
+ function registerStaticWallpaperEvents() {
+ ipcRenderer.on(Events.SetStaticWallpaper, staticWallpaperHandler);
+ }
+
+ function unregisterStaticWallpaperEvents() {
+ ipcRenderer.off(Events.SetStaticWallpaper, staticWallpaperHandler);
+ }
+
+ useMount(() => {
+ emitter.emit('setSettingsBtnShow', false);
+
+ registerStaticWallpaperEvents();
+
+ ipcRenderer.on(Events.SetStaticWallpaper, () => {
+ setWallpaperType(WallpaperType.Image);
+ });
+
+ ipcRenderer.on(Events.SetLiveWallpaper, () => {
+ setWallpaperType(WallpaperType.Video);
+ });
+
+ ipcRenderer.send(Events.WallpaperWinReady, Number(displayId));
+ });
+
+ useUnmount(() => {
+ unregisterStaticWallpaperEvents();
+ });
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default Wallpaper;
diff --git a/src/router.tsx b/src/router.tsx
new file mode 100644
index 0000000..5107b03
--- /dev/null
+++ b/src/router.tsx
@@ -0,0 +1,21 @@
+import { createHashRouter, RouteObject } from 'react-router-dom';
+import Home from '@/pages/home';
+import Rule from '@/pages/rule';
+import Wallpaper from '@/pages/wallpaper';
+
+export const routes: RouteObject[] = [
+ {
+ path: '/',
+ element: ,
+ },
+ {
+ path: '/weekday/:id',
+ element: ,
+ },
+ {
+ path: '/wallpaper/:displayId',
+ element: ,
+ },
+];
+
+export const router = createHashRouter(routes);
diff --git a/src/services/config-service.ts b/src/services/config-service.ts
new file mode 100644
index 0000000..a975ad2
--- /dev/null
+++ b/src/services/config-service.ts
@@ -0,0 +1,15 @@
+import { DBData, IDBService } from '../../cross/interface';
+import { ipcRenderer } from 'electron';
+import { Events } from '../../cross/enums';
+
+class ConfigServiceRenderer implements IDBService {
+ setItem(key: Key, data: DBData[Key]) {
+ return ipcRenderer.invoke(Events.SetDBItem, key, data);
+ }
+
+ async getItem(key: Key): Promise {
+ return await ipcRenderer.invoke(Events.GetDBItem, key);
+ }
+}
+
+export const configServiceRenderer = new ConfigServiceRenderer();
diff --git a/src/services/emitter.ts b/src/services/emitter.ts
new file mode 100644
index 0000000..ec35738
--- /dev/null
+++ b/src/services/emitter.ts
@@ -0,0 +1,7 @@
+import mitt from 'mitt';
+
+type Events = {
+ setSettingsBtnShow: boolean;
+};
+
+export const emitter = mitt();
diff --git a/src/services/rule.ts b/src/services/rule.ts
new file mode 100644
index 0000000..6e186cc
--- /dev/null
+++ b/src/services/rule.ts
@@ -0,0 +1,70 @@
+import { Events } from '../../cross/enums';
+import { timeToSeconds } from '../../cross/date';
+import { ipcRenderer } from 'electron';
+import { Rule } from '../../cross/interface';
+import { configServiceRenderer } from '@/services/config-service';
+
+export class RuleService {
+ public static readonly RULE_KEY = 'rule';
+
+ async save(rules: Rule[]) {
+ await configServiceRenderer.setItem('rules', rules);
+ ipcRenderer.invoke(Events.ResetSchedule);
+ }
+
+ async get() {
+ return (await configServiceRenderer.getItem('rules')) || [];
+ }
+
+ async create(rule: Rule) {
+ const rules = await this.get();
+ rule.id = String(Date.now());
+ rules.push(rule);
+ return this.save(rules);
+ }
+
+ async update(rule: Rule) {
+ const rules = await this.get();
+ rules.forEach((item, index) => {
+ if (item.id === rule.id) {
+ rules[index] = rule;
+ }
+ });
+ return this.save(rules);
+ }
+
+ async delete(id: string) {
+ let rules = await this.get();
+ rules = rules.filter((rule) => rule.id !== id);
+ return this.save(rules);
+ }
+
+ async isConflicts(
+ start: string,
+ end: string,
+ weekdayId: string,
+ id?: string,
+ ) {
+ const startSec = timeToSeconds(start);
+ const endSec = timeToSeconds(end);
+
+ const rules = await this.get();
+ return rules
+ .filter((rule) => (id ? rule.id !== id : true))
+ .filter((rule) => rule.weekdayId === weekdayId)
+ .some((rule) => {
+ const ruleStart = timeToSeconds(rule.start);
+ const ruleEnd = timeToSeconds(rule.end);
+
+ if (ruleStart <= startSec && ruleEnd >= startSec) {
+ return true;
+ } else if (ruleStart <= endSec && ruleEnd >= endSec) {
+ return true;
+ }
+
+ return false;
+ });
+ }
+}
+
+export const ruleService = new RuleService();
diff --git a/src/services/settings.ts b/src/services/settings.ts
new file mode 100644
index 0000000..7c7c6fd
--- /dev/null
+++ b/src/services/settings.ts
@@ -0,0 +1,30 @@
+import i18next from 'i18next';
+import { Events } from '../../cross/enums';
+import { ipcRenderer } from 'electron';
+import { Settings } from '../../cross/interface';
+import { configServiceRenderer } from '@/services/config-service';
+import { isEqual } from 'lodash';
+
+class SettingsService {
+ public static readonly SETTINGS_KEY = 'settings';
+
+ async save(settings: Settings, oldSettings?: Settings) {
+ if (!oldSettings) {
+ oldSettings = await this.get();
+ }
+ if (oldSettings?.locale !== settings.locale) {
+ await i18next.changeLanguage(settings.locale);
+ }
+ if (isEqual(settings, oldSettings)) {
+ await ipcRenderer.invoke(Events.InitSettings, settings);
+ } else {
+ await ipcRenderer.invoke(Events.SettingsChange, settings);
+ }
+ }
+
+ async get() {
+ return await configServiceRenderer.getItem('settings');
+ }
+}
+
+export const settingsService = new SettingsService();
diff --git a/src/services/weekday.ts b/src/services/weekday.ts
new file mode 100644
index 0000000..9c62c4f
--- /dev/null
+++ b/src/services/weekday.ts
@@ -0,0 +1,51 @@
+import { ipcRenderer } from 'electron';
+import { Events } from '../../cross/enums';
+import { Weekday } from '../../cross/interface';
+import { configServiceRenderer } from '@/services/config-service';
+import { ruleService } from '@/services/rule';
+
+export class WeekdayService {
+ public static readonly WEEKDAY_KEY = 'weekday';
+
+ save(weekdays: Weekday[]) {
+ configServiceRenderer.setItem('weekdays', weekdays);
+ ipcRenderer.invoke(Events.ResetSchedule);
+ }
+
+ get() {
+ return configServiceRenderer.getItem('weekdays');
+ }
+
+ async create(weekday: Weekday) {
+ const weekdays = await this.get();
+ weekday.id = String(Date.now());
+ weekdays.push(weekday);
+ this.save(weekdays);
+ }
+
+ async update(weekday: Weekday) {
+ const weekdays = await this.get();
+ weekdays.forEach((item, index) => {
+ if (item.id === weekday.id) {
+ weekdays[index] = weekday;
+ }
+ });
+ this.save(weekdays);
+ }
+
+ async delete(id: string) {
+ let weekdays = await this.get();
+ weekdays = weekdays.filter((weekday) => weekday.id !== id);
+
+ const rules = await ruleService.get();
+ for (const rule of rules) {
+ if (rule.weekdayId === id) {
+ await ruleService.delete(rule.id as string);
+ }
+ }
+
+ this.save(weekdays);
+ }
+}
+
+export const weekdayService = new WeekdayService();
diff --git a/src/type/electron-updater.d.ts b/src/type/electron-updater.d.ts
new file mode 100644
index 0000000..352d784
--- /dev/null
+++ b/src/type/electron-updater.d.ts
@@ -0,0 +1,10 @@
+interface VersionInfo {
+ update: boolean;
+ version: string;
+ newVersion?: string;
+}
+
+interface ErrorType {
+ message: string;
+ error: Error;
+}
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..42872c4
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,14 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ './index.html',
+ './src/**/*.{js,ts,jsx,tsx}',
+ ],
+ theme: {
+ extend: {},
+ },
+ corePlugins: {
+ preflight: false,
+ },
+ plugins: [],
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..c9c4765
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "useDefineForClassFields": true,
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
+ "allowJs": false,
+ "skipLibCheck": true,
+ "esModuleInterop": false,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "module": "ESNext",
+ "moduleResolution": "Node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+ "baseUrl": "./",
+ "paths": {
+ "@/*": [
+ "src/*"
+ ]
+ },
+ },
+ "include": ["src", "electron"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 0000000..1e7e7d6
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "module": "ESNext",
+ "moduleResolution": "Node",
+ "resolveJsonModule": true,
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts", "package.json"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..082c8d0
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,93 @@
+import { rmSync } from 'node:fs';
+import path from 'node:path';
+import { defineConfig } from 'vite';
+import react from '@vitejs/plugin-react';
+import electron from 'vite-plugin-electron';
+import renderer from 'vite-plugin-electron-renderer';
+import esModule from 'vite-plugin-esmodule';
+import pkg from './package.json';
+
+// https://vitejs.dev/config/
+export default defineConfig(({ command }) => {
+ rmSync('dist-electron', { recursive: true, force: true });
+
+ const isServe = command === 'serve';
+ const isBuild = command === 'build';
+ const sourcemap = isServe || !!process.env.VSCODE_DEBUG;
+
+ return {
+ resolve: {
+ alias: {
+ '@': path.join(__dirname, 'src'),
+ },
+ },
+ plugins: [
+ react(),
+ esModule(['wallpaper']),
+ electron([
+ {
+ // Main-Process entry file of the Electron App.
+ entry: 'electron/main/index.ts',
+ onstart(options) {
+ if (process.env.VSCODE_DEBUG) {
+ console.log(
+ /* For `.vscode/.debug.script.mjs` */ '[startup] Electron App',
+ );
+ } else {
+ options.startup();
+ }
+ },
+ vite: {
+ build: {
+ sourcemap,
+ minify: isBuild,
+ outDir: 'dist-electron/main',
+ rollupOptions: {
+ external: Object.keys(
+ 'dependencies' in pkg ? pkg.dependencies : {},
+ ),
+ },
+ },
+ },
+ },
+ {
+ entry: 'electron/preload/index.ts',
+ onstart(options) {
+ // Notify the Renderer-Process to reload the page when the Preload-Scripts build is complete,
+ // instead of restarting the entire Electron App.
+ options.reload();
+ },
+ vite: {
+ build: {
+ sourcemap: sourcemap ? 'inline' : undefined, // #332
+ minify: isBuild,
+ outDir: 'dist-electron/preload',
+ rollupOptions: {
+ external: Object.keys(
+ 'dependencies' in pkg ? pkg.dependencies : {},
+ ),
+ },
+ },
+ },
+ },
+ ]),
+ // Use Node.js API in the Renderer-process
+ renderer(),
+ ],
+ server:
+ process.env.VSCODE_DEBUG &&
+ (() => {
+ const url = new URL(pkg.debug.env.VITE_DEV_SERVER_URL);
+ return {
+ host: url.hostname,
+ port: +url.port,
+ };
+ })(),
+ clearScreen: false,
+ css: {
+ modules: {
+ localsConvention: 'camelCase',
+ },
+ },
+ };
+});
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..a1c7eee
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,4003 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"7zip-bin@~5.2.0":
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d"
+ integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==
+
+"@alloc/quick-lru@^5.2.0":
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
+ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
+
+"@ampproject/remapping@^2.2.0":
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@ant-design/colors@^7.0.0", "@ant-design/colors@^7.0.2":
+ version "7.0.2"
+ resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.0.2.tgz#c5c753a467ce8d86ba7ca4736d2c01f599bb5492"
+ integrity sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg==
+ dependencies:
+ "@ctrl/tinycolor" "^3.6.1"
+
+"@ant-design/cssinjs@^1.18.4":
+ version "1.18.4"
+ resolved "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.18.4.tgz#428411628f216acb71a2423d5332f6e6af7010b5"
+ integrity sha512-IrUAOj5TYuMG556C9gdbFuOrigyhzhU5ZYpWb3gYTxAwymVqRbvLzFCZg6OsjLBR6GhzcxYF3AhxKmjB+rA2xA==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ "@emotion/hash" "^0.8.0"
+ "@emotion/unitless" "^0.7.5"
+ classnames "^2.3.1"
+ csstype "^3.1.3"
+ rc-util "^5.35.0"
+ stylis "^4.0.13"
+
+"@ant-design/icons-svg@^4.4.0":
+ version "4.4.2"
+ resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6"
+ integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==
+
+"@ant-design/icons@^5.2.6", "@ant-design/icons@^5.3.1":
+ version "5.3.1"
+ resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.3.1.tgz#908eda82cbd455b83b30d620947ab8fbf2f4c5da"
+ integrity sha512-85zROTJCCApQn0Ee6L9561+Vd7yVKtSWNm2TpmOsYMrumchbzaRK83x1WWHv2VG+Y1ZAaKkDwcnnSPS/eSwNHA==
+ dependencies:
+ "@ant-design/colors" "^7.0.0"
+ "@ant-design/icons-svg" "^4.4.0"
+ "@babel/runtime" "^7.11.2"
+ classnames "^2.2.6"
+ rc-util "^5.31.1"
+
+"@ant-design/react-slick@~1.0.2":
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.0.2.tgz#241bb412aeacf7ff5d50c61fa5db66773fde6b56"
+ integrity sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==
+ dependencies:
+ "@babel/runtime" "^7.10.4"
+ classnames "^2.2.5"
+ json2mq "^0.2.0"
+ resize-observer-polyfill "^1.5.1"
+ throttle-debounce "^5.0.0"
+
+"@babel/code-frame@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
+ integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
+ dependencies:
+ "@babel/highlight" "^7.23.4"
+ chalk "^2.4.2"
+
+"@babel/compat-data@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
+ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
+
+"@babel/core@^7.23.5":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b"
+ integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helpers" "^7.24.0"
+ "@babel/parser" "^7.24.0"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
+"@babel/generator@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
+ integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
+ dependencies:
+ "@babel/types" "^7.23.6"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ "@jridgewell/trace-mapping" "^0.3.17"
+ jsesc "^2.5.1"
+
+"@babel/helper-compilation-targets@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
+ integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
+ dependencies:
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-validator-option" "^7.23.5"
+ browserslist "^4.22.2"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-environment-visitor@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
+ integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@babel/helper-function-name@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+ integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+ dependencies:
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.23.0"
+
+"@babel/helper-hoist-variables@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-module-imports@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
+ integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
+ dependencies:
+ "@babel/types" "^7.22.15"
+
+"@babel/helper-module-transforms@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-module-imports" "^7.22.15"
+ "@babel/helper-simple-access" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/helper-validator-identifier" "^7.22.20"
+
+"@babel/helper-plugin-utils@^7.22.5":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
+ integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
+
+"@babel/helper-simple-access@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+ integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+ integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
+ integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
+
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@babel/helper-validator-option@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
+ integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
+
+"@babel/helpers@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b"
+ integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==
+ dependencies:
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
+"@babel/highlight@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
+ integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.20"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
+ integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
+
+"@babel/plugin-transform-react-jsx-self@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9"
+ integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-react-jsx-source@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e"
+ integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e"
+ integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
+"@babel/template@^7.22.15", "@babel/template@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
+ integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
+"@babel/traverse@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e"
+ integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
+"@ctrl/tinycolor@^3.6.1":
+ version "3.6.1"
+ resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31"
+ integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
+
+"@develar/schema-utils@~2.6.5":
+ version "2.6.5"
+ resolved "https://registry.npmmirror.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6"
+ integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==
+ dependencies:
+ ajv "^6.12.0"
+ ajv-keywords "^3.4.1"
+
+"@electron/asar@^3.2.1":
+ version "3.2.9"
+ resolved "https://registry.npmmirror.com/@electron/asar/-/asar-3.2.9.tgz#7b3a1fd677b485629f334dd80ced8c85353ba7e7"
+ integrity sha512-Vu2P3X2gcZ3MY9W7yH72X9+AMXwUQZEJBrsPIbX0JsdllLtoh62/Q8Wg370/DawIEVKOyfD6KtTLo645ezqxUA==
+ dependencies:
+ commander "^5.0.0"
+ glob "^7.1.6"
+ minimatch "^3.0.4"
+
+"@electron/get@^2.0.0":
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960"
+ integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==
+ dependencies:
+ debug "^4.1.1"
+ env-paths "^2.2.0"
+ fs-extra "^8.1.0"
+ got "^11.8.5"
+ progress "^2.0.3"
+ semver "^6.2.0"
+ sumchecker "^3.0.1"
+ optionalDependencies:
+ global-agent "^3.0.0"
+
+"@electron/notarize@2.2.1":
+ version "2.2.1"
+ resolved "https://registry.npmmirror.com/@electron/notarize/-/notarize-2.2.1.tgz#d0aa6bc43cba830c41bfd840b85dbe0e273f59fe"
+ integrity sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==
+ dependencies:
+ debug "^4.1.1"
+ fs-extra "^9.0.1"
+ promise-retry "^2.0.1"
+
+"@electron/osx-sign@1.0.5":
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/@electron/osx-sign/-/osx-sign-1.0.5.tgz#0af7149f2fce44d1a8215660fd25a9fb610454d8"
+ integrity sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==
+ dependencies:
+ compare-version "^0.1.2"
+ debug "^4.3.4"
+ fs-extra "^10.0.0"
+ isbinaryfile "^4.0.8"
+ minimist "^1.2.6"
+ plist "^3.0.5"
+
+"@electron/universal@1.5.1":
+ version "1.5.1"
+ resolved "https://registry.npmmirror.com/@electron/universal/-/universal-1.5.1.tgz#f338bc5bcefef88573cf0ab1d5920fac10d06ee5"
+ integrity sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==
+ dependencies:
+ "@electron/asar" "^3.2.1"
+ "@malept/cross-spawn-promise" "^1.1.0"
+ debug "^4.3.1"
+ dir-compare "^3.0.0"
+ fs-extra "^9.0.1"
+ minimatch "^3.0.4"
+ plist "^3.0.4"
+
+"@emotion/hash@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+ integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
+"@emotion/unitless@^0.7.5":
+ version "0.7.5"
+ resolved "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@esbuild/aix-ppc64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f"
+ integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==
+
+"@esbuild/android-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4"
+ integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==
+
+"@esbuild/android-arm@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824"
+ integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==
+
+"@esbuild/android-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d"
+ integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==
+
+"@esbuild/darwin-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e"
+ integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==
+
+"@esbuild/darwin-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd"
+ integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==
+
+"@esbuild/freebsd-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487"
+ integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==
+
+"@esbuild/freebsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c"
+ integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==
+
+"@esbuild/linux-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b"
+ integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==
+
+"@esbuild/linux-arm@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef"
+ integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==
+
+"@esbuild/linux-ia32@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601"
+ integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==
+
+"@esbuild/linux-loong64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299"
+ integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==
+
+"@esbuild/linux-mips64el@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec"
+ integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==
+
+"@esbuild/linux-ppc64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8"
+ integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==
+
+"@esbuild/linux-riscv64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf"
+ integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==
+
+"@esbuild/linux-s390x@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8"
+ integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==
+
+"@esbuild/linux-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78"
+ integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==
+
+"@esbuild/netbsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b"
+ integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==
+
+"@esbuild/openbsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0"
+ integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==
+
+"@esbuild/sunos-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30"
+ integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==
+
+"@esbuild/win32-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae"
+ integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==
+
+"@esbuild/win32-ia32@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67"
+ integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==
+
+"@esbuild/win32-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae"
+ integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.5"
+ resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
+ integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.4.15"
+ resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24":
+ version "0.3.25"
+ resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@malept/cross-spawn-promise@^1.1.0":
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
+ integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==
+ dependencies:
+ cross-spawn "^7.0.1"
+
+"@malept/flatpak-bundler@^0.4.0":
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858"
+ integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==
+ dependencies:
+ debug "^4.1.1"
+ fs-extra "^9.0.0"
+ lodash "^4.17.15"
+ tmp-promise "^3.0.2"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@playwright/test@^1.37.1":
+ version "1.42.1"
+ resolved "https://registry.npmmirror.com/@playwright/test/-/test-1.42.1.tgz#9eff7417bcaa770e9e9a00439e078284b301f31c"
+ integrity sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==
+ dependencies:
+ playwright "1.42.1"
+
+"@rc-component/color-picker@~1.5.2":
+ version "1.5.3"
+ resolved "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-1.5.3.tgz#f3b0e14bb67ec5ee77d1fd5d261f63dd4fd00449"
+ integrity sha512-+tGGH3nLmYXTalVe0L8hSZNs73VTP5ueSHwUlDC77KKRaN7G4DS4wcpG5DTDzdcV/Yas+rzA6UGgIyzd8fS4cw==
+ dependencies:
+ "@babel/runtime" "^7.23.6"
+ "@ctrl/tinycolor" "^3.6.1"
+ classnames "^2.2.6"
+ rc-util "^5.38.1"
+
+"@rc-component/context@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz#dc6fb021d6773546af8f016ae4ce9aea088395e8"
+ integrity sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ rc-util "^5.27.0"
+
+"@rc-component/mini-decimal@^1.0.1":
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz#7b7a362b14a0a54cb5bc6fd2b82731f29f11d9b0"
+ integrity sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+
+"@rc-component/mutate-observer@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz#ee53cc88b78aade3cd0653609215a44779386fd8"
+ integrity sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ classnames "^2.3.2"
+ rc-util "^5.24.4"
+
+"@rc-component/portal@^1.0.0-8", "@rc-component/portal@^1.0.0-9", "@rc-component/portal@^1.0.2", "@rc-component/portal@^1.1.0", "@rc-component/portal@^1.1.1":
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/@rc-component/portal/-/portal-1.1.2.tgz#55db1e51d784e034442e9700536faaa6ab63fc71"
+ integrity sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ classnames "^2.3.2"
+ rc-util "^5.24.4"
+
+"@rc-component/tour@~1.14.2":
+ version "1.14.2"
+ resolved "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.14.2.tgz#142f0973975eb0e3af3c75aa868ffc9d8ba27cae"
+ integrity sha512-A75DZ8LVvahBIvxooj3Gvf2sxe+CGOkmzPNX7ek0i0AJHyKZ1HXe5ieIGo3m0FMdZfVOlbCJ952Duq8VKAHk6g==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ "@rc-component/portal" "^1.0.0-9"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.3.2"
+ rc-util "^5.24.4"
+
+"@rc-component/trigger@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.0.0.tgz#f3d63daea1b734ffe9cbf2e9403fae523d449a8a"
+ integrity sha512-niwKADPdY5dhdIblV6uwSayVivwo2uUISfJqri+/ovYQcH/omxDYBJKo755QKeoIIsWptxnRpgr7reEnNEZGFg==
+ dependencies:
+ "@babel/runtime" "^7.23.2"
+ "@rc-component/portal" "^1.1.0"
+ classnames "^2.3.2"
+ rc-motion "^2.0.0"
+ rc-resize-observer "^1.3.1"
+ rc-util "^5.38.0"
+
+"@remix-run/router@1.15.3":
+ version "1.15.3"
+ resolved "https://registry.npmmirror.com/@remix-run/router/-/router-1.15.3.tgz#d2509048d69dbb72d5389a14945339f1430b2d3c"
+ integrity sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==
+
+"@rollup/rollup-android-arm-eabi@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz#11aaa02a933864b87f0b31cf2b755734e1f22787"
+ integrity sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==
+
+"@rollup/rollup-android-arm64@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz#b1e606fb4b46b38dc32bf010d513449462d669e9"
+ integrity sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==
+
+"@rollup/rollup-darwin-arm64@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz#dc21df1be9402671a8b6b15a93dd5953c68ec114"
+ integrity sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==
+
+"@rollup/rollup-darwin-x64@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz#397dcc4427d774f29b9954676893574ac563bf0b"
+ integrity sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz#d851fd49d617e7792e7cde8e5a95ca51ea520fe5"
+ integrity sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==
+
+"@rollup/rollup-linux-arm64-gnu@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz#e41a271ae51f79ffee6fb2b5597cc81b4ef66ad9"
+ integrity sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==
+
+"@rollup/rollup-linux-arm64-musl@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz#d3b4cd6ef18d0aa7103129755e0c535701624fac"
+ integrity sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==
+
+"@rollup/rollup-linux-riscv64-gnu@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz#215101b2bb768cce2f2227145b8dd5c3c716c259"
+ integrity sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==
+
+"@rollup/rollup-linux-x64-gnu@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz#34a12fa305e167105eab70dbf577cd41e5199709"
+ integrity sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==
+
+"@rollup/rollup-linux-x64-musl@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz#3f000b5a92a32b844e385e1166979c87882930a3"
+ integrity sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==
+
+"@rollup/rollup-win32-arm64-msvc@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz#27977d91f5059645ebb3b7fbf4429982de2278d3"
+ integrity sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==
+
+"@rollup/rollup-win32-ia32-msvc@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz#0d252acd5af0274209c74374867ee8b949843d75"
+ integrity sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==
+
+"@rollup/rollup-win32-x64-msvc@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz#cd8d175e001c212d5ac71c7827ef1d5c5e14494c"
+ integrity sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==
+
+"@sindresorhus/is@^4.0.0":
+ version "4.6.0"
+ resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+ integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
+"@szmarczak/http-timer@^4.0.5":
+ version "4.0.6"
+ resolved "https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
+ integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
+ dependencies:
+ defer-to-connect "^2.0.0"
+
+"@tootallnate/once@2":
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+ integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
+"@types/babel__core@^7.20.5":
+ version "7.20.5"
+ resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
+ integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
+ dependencies:
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.8"
+ resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab"
+ integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.4"
+ resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
+ integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*":
+ version "7.20.5"
+ resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd"
+ integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==
+ dependencies:
+ "@babel/types" "^7.20.7"
+
+"@types/cacheable-request@^6.0.1":
+ version "6.0.3"
+ resolved "https://registry.npmmirror.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
+ integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
+ dependencies:
+ "@types/http-cache-semantics" "*"
+ "@types/keyv" "^3.1.4"
+ "@types/node" "*"
+ "@types/responselike" "^1.0.0"
+
+"@types/debug@^4.1.6":
+ version "4.1.12"
+ resolved "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917"
+ integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==
+ dependencies:
+ "@types/ms" "*"
+
+"@types/estree@1.0.5":
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
+ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
+
+"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11":
+ version "9.0.13"
+ resolved "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
+ integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
+ dependencies:
+ "@types/node" "*"
+
+"@types/http-cache-semantics@*":
+ version "4.0.4"
+ resolved "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
+ integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
+
+"@types/keyv@^3.1.4":
+ version "3.1.4"
+ resolved "https://registry.npmmirror.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+ integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/lodash@^4.14.200":
+ version "4.14.202"
+ resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8"
+ integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==
+
+"@types/ms@*":
+ version "0.7.34"
+ resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433"
+ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
+
+"@types/node-schedule@^2.1.2":
+ version "2.1.6"
+ resolved "https://registry.npmmirror.com/@types/node-schedule/-/node-schedule-2.1.6.tgz#9bf790a929735080521ef893cba7e4dce9ea14e9"
+ integrity sha512-6AlZSUiNTdaVmH5jXYxX9YgmF1zfOlbjUqw0EllTBmZCnN1R5RR/m/u3No1OiWR05bnQ4jM4/+w4FcGvkAtnKQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/node@*", "@types/node@^20.9.0":
+ version "20.11.25"
+ resolved "https://registry.npmmirror.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f"
+ integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@types/plist@^3.0.1":
+ version "3.0.5"
+ resolved "https://registry.npmmirror.com/@types/plist/-/plist-3.0.5.tgz#9a0c49c0f9886c8c8696a7904dd703f6284036e0"
+ integrity sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==
+ dependencies:
+ "@types/node" "*"
+ xmlbuilder ">=11.0.1"
+
+"@types/prop-types@*":
+ version "15.7.11"
+ resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563"
+ integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==
+
+"@types/react-dom@^18.2.7":
+ version "18.2.21"
+ resolved "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.2.21.tgz#b8c81715cebdebb2994378616a8d54ace54f043a"
+ integrity sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@^18.2.20":
+ version "18.2.64"
+ resolved "https://registry.npmmirror.com/@types/react/-/react-18.2.64.tgz#3700fbb6b2fa60a6868ec1323ae4cbd446a2197d"
+ integrity sha512-MlmPvHgjj2p3vZaxbQgFUQFvD8QiZwACfGqEdDSWou5yISWxDQ4/74nCAwsUiX7UFLKZz3BbVSPj+YxeoGGCfg==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/responselike@^1.0.0":
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
+ integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/scheduler@*":
+ version "0.16.8"
+ resolved "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff"
+ integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==
+
+"@types/verror@^1.10.3":
+ version "1.10.10"
+ resolved "https://registry.npmmirror.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087"
+ integrity sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==
+
+"@types/yauzl@^2.9.1":
+ version "2.10.3"
+ resolved "https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999"
+ integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==
+ dependencies:
+ "@types/node" "*"
+
+"@vitejs/plugin-react@^4.0.4":
+ version "4.2.1"
+ resolved "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9"
+ integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==
+ dependencies:
+ "@babel/core" "^7.23.5"
+ "@babel/plugin-transform-react-jsx-self" "^7.23.3"
+ "@babel/plugin-transform-react-jsx-source" "^7.23.3"
+ "@types/babel__core" "^7.20.5"
+ react-refresh "^0.14.0"
+
+"@xmldom/xmldom@^0.8.8":
+ version "0.8.10"
+ resolved "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
+ integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+ahooks@^3.7.8:
+ version "3.7.10"
+ resolved "https://registry.npmmirror.com/ahooks/-/ahooks-3.7.10.tgz#6ac1dfbcedff8c673367c044ffef41ffae6da483"
+ integrity sha512-/HLYif7sFA/5qSuWKrwvjDbf3bq+sdaMrUWS7XGCDRWdC2FrG/i+u5LZdakMYc6UIgJTMQ7tGiJCV7sdU4kSIw==
+ dependencies:
+ "@babel/runtime" "^7.21.0"
+ dayjs "^1.9.1"
+ intersection-observer "^0.12.0"
+ js-cookie "^2.x.x"
+ lodash "^4.17.21"
+ resize-observer-polyfill "^1.5.1"
+ screenfull "^5.0.0"
+ tslib "^2.4.1"
+
+ajv-keywords@^3.4.1:
+ version "3.5.2"
+ resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.10.0, ajv@^6.12.0:
+ version "6.12.6"
+ resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+animate.css@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075"
+ integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+antd@^5.10.2:
+ version "5.15.2"
+ resolved "https://registry.npmmirror.com/antd/-/antd-5.15.2.tgz#2d41f7f8bd0429d3fe7195eab9b5fb36b3e0f956"
+ integrity sha512-EByEiCQknPKJVYfD+zneXwEvjdFzvMw8CZrsxw9nq19ftC4uMcMkZ2irasW7RQQGg9i7XsAZpAwYz3anuFX+EA==
+ dependencies:
+ "@ant-design/colors" "^7.0.2"
+ "@ant-design/cssinjs" "^1.18.4"
+ "@ant-design/icons" "^5.3.1"
+ "@ant-design/react-slick" "~1.0.2"
+ "@babel/runtime" "^7.24.0"
+ "@ctrl/tinycolor" "^3.6.1"
+ "@rc-component/color-picker" "~1.5.2"
+ "@rc-component/mutate-observer" "^1.1.0"
+ "@rc-component/tour" "~1.14.2"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.5.1"
+ copy-to-clipboard "^3.3.3"
+ dayjs "^1.11.10"
+ qrcode.react "^3.1.0"
+ rc-cascader "~3.24.0"
+ rc-checkbox "~3.2.0"
+ rc-collapse "~3.7.2"
+ rc-dialog "~9.4.0"
+ rc-drawer "~7.1.0"
+ rc-dropdown "~4.2.0"
+ rc-field-form "~1.42.1"
+ rc-image "~7.6.0"
+ rc-input "~1.4.3"
+ rc-input-number "~9.0.0"
+ rc-mentions "~2.11.1"
+ rc-menu "~9.13.0"
+ rc-motion "^2.9.0"
+ rc-notification "~5.3.0"
+ rc-pagination "~4.0.4"
+ rc-picker "~4.3.0"
+ rc-progress "~3.5.1"
+ rc-rate "~2.12.0"
+ rc-resize-observer "^1.4.0"
+ rc-segmented "~2.3.0"
+ rc-select "~14.13.0"
+ rc-slider "~10.5.0"
+ rc-steps "~6.0.1"
+ rc-switch "~4.1.0"
+ rc-table "~7.42.0"
+ rc-tabs "~14.1.1"
+ rc-textarea "~1.6.3"
+ rc-tooltip "~6.2.0"
+ rc-tree "~5.8.5"
+ rc-tree-select "~5.19.0"
+ rc-upload "~4.5.2"
+ rc-util "^5.39.1"
+ scroll-into-view-if-needed "^3.1.0"
+ throttle-debounce "^5.0.0"
+
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+app-builder-bin@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
+ integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
+
+app-builder-lib@24.13.3:
+ version "24.13.3"
+ resolved "https://registry.npmmirror.com/app-builder-lib/-/app-builder-lib-24.13.3.tgz#36e47b65fecb8780bb73bff0fee4e0480c28274b"
+ integrity sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==
+ dependencies:
+ "@develar/schema-utils" "~2.6.5"
+ "@electron/notarize" "2.2.1"
+ "@electron/osx-sign" "1.0.5"
+ "@electron/universal" "1.5.1"
+ "@malept/flatpak-bundler" "^0.4.0"
+ "@types/fs-extra" "9.0.13"
+ async-exit-hook "^2.0.1"
+ bluebird-lst "^1.0.9"
+ builder-util "24.13.1"
+ builder-util-runtime "9.2.4"
+ chromium-pickle-js "^0.2.0"
+ debug "^4.3.4"
+ ejs "^3.1.8"
+ electron-publish "24.13.1"
+ form-data "^4.0.0"
+ fs-extra "^10.1.0"
+ hosted-git-info "^4.1.0"
+ is-ci "^3.0.0"
+ isbinaryfile "^5.0.0"
+ js-yaml "^4.1.0"
+ lazy-val "^1.0.5"
+ minimatch "^5.1.1"
+ read-config-file "6.3.2"
+ sanitize-filename "^1.6.3"
+ semver "^7.3.8"
+ tar "^6.1.12"
+ temp-file "^3.4.0"
+
+arg@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+ integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-tree-filter@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
+ integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-exit-hook@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3"
+ integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==
+
+async-validator@^4.1.0:
+ version "4.2.5"
+ resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
+ integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
+
+async@^3.2.3:
+ version "3.2.5"
+ resolved "https://registry.npmmirror.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66"
+ integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+autoprefixer@^10.4.16:
+ version "10.4.18"
+ resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.18.tgz#fcb171a3b017be7cb5d8b7a825f5aacbf2045163"
+ integrity sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==
+ dependencies:
+ browserslist "^4.23.0"
+ caniuse-lite "^1.0.30001591"
+ fraction.js "^4.3.7"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base64-js@^1.3.1, base64-js@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bluebird-lst@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.npmmirror.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c"
+ integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==
+ dependencies:
+ bluebird "^3.5.5"
+
+bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+boolean@^3.0.1:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
+ integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.2, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browserslist@^4.22.2, browserslist@^4.23.0:
+ version "4.23.0"
+ resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
+ integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
+ dependencies:
+ caniuse-lite "^1.0.30001587"
+ electron-to-chromium "^1.4.668"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
+
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
+buffer-equal@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90"
+ integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==
+
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer@^5.1.0:
+ version "5.7.1"
+ resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+builder-util-runtime@9.2.3:
+ version "9.2.3"
+ resolved "https://registry.npmmirror.com/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz#0a82c7aca8eadef46d67b353c638f052c206b83c"
+ integrity sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==
+ dependencies:
+ debug "^4.3.4"
+ sax "^1.2.4"
+
+builder-util-runtime@9.2.4:
+ version "9.2.4"
+ resolved "https://registry.npmmirror.com/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz#13cd1763da621e53458739a1e63f7fcba673c42a"
+ integrity sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==
+ dependencies:
+ debug "^4.3.4"
+ sax "^1.2.4"
+
+builder-util@24.13.1:
+ version "24.13.1"
+ resolved "https://registry.npmmirror.com/builder-util/-/builder-util-24.13.1.tgz#4a4c4f9466b016b85c6990a0ea15aa14edec6816"
+ integrity sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==
+ dependencies:
+ "7zip-bin" "~5.2.0"
+ "@types/debug" "^4.1.6"
+ app-builder-bin "4.0.0"
+ bluebird-lst "^1.0.9"
+ builder-util-runtime "9.2.4"
+ chalk "^4.1.2"
+ cross-spawn "^7.0.3"
+ debug "^4.3.4"
+ fs-extra "^10.1.0"
+ http-proxy-agent "^5.0.0"
+ https-proxy-agent "^5.0.1"
+ is-ci "^3.0.0"
+ js-yaml "^4.1.0"
+ source-map-support "^0.5.19"
+ stat-mode "^1.0.0"
+ temp-file "^3.4.0"
+
+cacheable-lookup@^5.0.3:
+ version "5.0.4"
+ resolved "https://registry.npmmirror.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+ integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
+cacheable-request@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.npmmirror.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
+ integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^4.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^6.0.1"
+ responselike "^2.0.0"
+
+camelcase-css@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001591:
+ version "1.0.30001597"
+ resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6"
+ integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.2, chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chokidar@^3.5.3:
+ version "3.6.0"
+ resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chromium-pickle-js@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
+ integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==
+
+ci-info@^3.2.0:
+ version "3.9.0"
+ resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
+ integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+
+classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
+ integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
+
+cli-truncate@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+ integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+ dependencies:
+ slice-ansi "^3.0.0"
+ string-width "^4.2.0"
+
+cliui@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
+
+clone-response@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
+ integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
+ dependencies:
+ mimic-response "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+commander@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.npmmirror.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+ integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
+compare-version@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
+ integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==
+
+compute-scroll-into-view@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz#753f11d972596558d8fe7c6bcbc8497690ab4c87"
+ integrity sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+config-file-ts@^0.2.4:
+ version "0.2.6"
+ resolved "https://registry.npmmirror.com/config-file-ts/-/config-file-ts-0.2.6.tgz#b424ff74612fb37f626d6528f08f92ddf5d22027"
+ integrity sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==
+ dependencies:
+ glob "^10.3.10"
+ typescript "^5.3.3"
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+copy-anything@^2.0.1:
+ version "2.0.6"
+ resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
+ integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
+ dependencies:
+ is-what "^3.14.1"
+
+copy-to-clipboard@^3.3.3:
+ version "3.3.3"
+ resolved "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
+ integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==
+ dependencies:
+ toggle-selection "^1.0.6"
+
+core-util-is@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+crc@^3.8.0:
+ version "3.8.0"
+ resolved "https://registry.npmmirror.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
+ integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==
+ dependencies:
+ buffer "^5.1.0"
+
+cron-parser@^4.2.0:
+ version "4.9.0"
+ resolved "https://registry.npmmirror.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5"
+ integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==
+ dependencies:
+ luxon "^3.2.1"
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+csstype@^3.0.2, csstype@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+dayjs@^1.11.10, dayjs@^1.9.1:
+ version "1.11.10"
+ resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
+ integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
+
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
+defer-to-connect@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+ integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
+define-data-property@^1.0.1:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+ integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ gopd "^1.0.1"
+
+define-properties@^1.1.3:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+ dependencies:
+ define-data-property "^1.0.1"
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+detect-node@^2.0.4:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+ integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+didyoumean@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+ integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
+dir-compare@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.npmmirror.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416"
+ integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==
+ dependencies:
+ buffer-equal "^1.0.0"
+ minimatch "^3.0.4"
+
+dlv@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+ integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+dmg-builder@24.13.3:
+ version "24.13.3"
+ resolved "https://registry.npmmirror.com/dmg-builder/-/dmg-builder-24.13.3.tgz#95d5b99c587c592f90d168a616d7ec55907c7e55"
+ integrity sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==
+ dependencies:
+ app-builder-lib "24.13.3"
+ builder-util "24.13.1"
+ builder-util-runtime "9.2.4"
+ fs-extra "^10.1.0"
+ iconv-lite "^0.6.2"
+ js-yaml "^4.1.0"
+ optionalDependencies:
+ dmg-license "^1.0.11"
+
+dmg-license@^1.0.11:
+ version "1.0.11"
+ resolved "https://registry.npmmirror.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a"
+ integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==
+ dependencies:
+ "@types/plist" "^3.0.1"
+ "@types/verror" "^1.10.3"
+ ajv "^6.10.0"
+ crc "^3.8.0"
+ iconv-corefoundation "^1.1.7"
+ plist "^3.0.4"
+ smart-buffer "^4.0.2"
+ verror "^1.10.0"
+
+dotenv-expand@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
+ integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
+
+dotenv@^9.0.2:
+ version "9.0.2"
+ resolved "https://registry.npmmirror.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05"
+ integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+ejs@^3.1.8:
+ version "3.1.9"
+ resolved "https://registry.npmmirror.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
+ integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
+ dependencies:
+ jake "^10.8.5"
+
+electron-as-wallpaper@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/electron-as-wallpaper/-/electron-as-wallpaper-1.0.3.tgz#3673829d25f33e2eaceb11e10e53c4778d4a12a3"
+ integrity sha512-6Jx3XT6hz2c+Po5skkFiX82XiaPFE012LT+x2OyKyhea4V2VEZZXpTYOOcT8W4rQLkgRR99Il7m+aETJIDApyw==
+ dependencies:
+ bindings "^1.5.0"
+ node-addon-api "^7.0.0"
+ node-api-headers "^1.0.1"
+
+electron-builder@^24.6.3:
+ version "24.13.3"
+ resolved "https://registry.npmmirror.com/electron-builder/-/electron-builder-24.13.3.tgz#c506dfebd36d9a50a83ee8aa32d803d83dbe4616"
+ integrity sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==
+ dependencies:
+ app-builder-lib "24.13.3"
+ builder-util "24.13.1"
+ builder-util-runtime "9.2.4"
+ chalk "^4.1.2"
+ dmg-builder "24.13.3"
+ fs-extra "^10.1.0"
+ is-ci "^3.0.0"
+ lazy-val "^1.0.5"
+ read-config-file "6.3.2"
+ simple-update-notifier "2.0.0"
+ yargs "^17.6.2"
+
+electron-devtools-installer@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/electron-devtools-installer/-/electron-devtools-installer-3.2.0.tgz#acc48d24eb7033fe5af284a19667e73b78d406d0"
+ integrity sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ==
+ dependencies:
+ rimraf "^3.0.2"
+ semver "^7.2.1"
+ tslib "^2.1.0"
+ unzip-crx-3 "^0.2.0"
+
+electron-publish@24.13.1:
+ version "24.13.1"
+ resolved "https://registry.npmmirror.com/electron-publish/-/electron-publish-24.13.1.tgz#57289b2f7af18737dc2ad134668cdd4a1b574a0c"
+ integrity sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==
+ dependencies:
+ "@types/fs-extra" "^9.0.11"
+ builder-util "24.13.1"
+ builder-util-runtime "9.2.4"
+ chalk "^4.1.2"
+ fs-extra "^10.1.0"
+ lazy-val "^1.0.5"
+ mime "^2.5.2"
+
+electron-to-chromium@^1.4.668:
+ version "1.4.699"
+ resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz#dd53c939e13da64e94b341e563f0a3011b4ef0e9"
+ integrity sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==
+
+electron-updater@^6.1.1:
+ version "6.1.8"
+ resolved "https://registry.npmmirror.com/electron-updater/-/electron-updater-6.1.8.tgz#17637bca165322f4e526b13c99165f43e6f697d8"
+ integrity sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==
+ dependencies:
+ builder-util-runtime "9.2.3"
+ fs-extra "^10.1.0"
+ js-yaml "^4.1.0"
+ lazy-val "^1.0.5"
+ lodash.escaperegexp "^4.1.2"
+ lodash.isequal "^4.5.0"
+ semver "^7.3.8"
+ tiny-typed-emitter "^2.1.0"
+
+electron@29.0.0-alpha.5:
+ version "29.0.0-alpha.5"
+ resolved "https://registry.npmmirror.com/electron/-/electron-29.0.0-alpha.5.tgz#0167da4019d80d90964ccea61f015b6b1cbdbdd0"
+ integrity sha512-oY1RkaYLnUJCUSBZhepusaOYXTeaV3wumPR4guf0MHT6Wws0IeMKndu+/VvElcURHoVxyej4YAfADpprwnkZ9w==
+ dependencies:
+ "@electron/get" "^2.0.0"
+ "@types/node" "^20.9.0"
+ extract-zip "^2.0.1"
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+env-paths@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+ integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+err-code@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+ integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
+errno@^0.1.1:
+ version "0.1.8"
+ resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
+ integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
+ dependencies:
+ prr "~1.0.1"
+
+es-define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
+ integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
+ dependencies:
+ get-intrinsic "^1.2.4"
+
+es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es6-error@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+ integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+
+esbuild@^0.19.3:
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04"
+ integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.19.12"
+ "@esbuild/android-arm" "0.19.12"
+ "@esbuild/android-arm64" "0.19.12"
+ "@esbuild/android-x64" "0.19.12"
+ "@esbuild/darwin-arm64" "0.19.12"
+ "@esbuild/darwin-x64" "0.19.12"
+ "@esbuild/freebsd-arm64" "0.19.12"
+ "@esbuild/freebsd-x64" "0.19.12"
+ "@esbuild/linux-arm" "0.19.12"
+ "@esbuild/linux-arm64" "0.19.12"
+ "@esbuild/linux-ia32" "0.19.12"
+ "@esbuild/linux-loong64" "0.19.12"
+ "@esbuild/linux-mips64el" "0.19.12"
+ "@esbuild/linux-ppc64" "0.19.12"
+ "@esbuild/linux-riscv64" "0.19.12"
+ "@esbuild/linux-s390x" "0.19.12"
+ "@esbuild/linux-x64" "0.19.12"
+ "@esbuild/netbsd-x64" "0.19.12"
+ "@esbuild/openbsd-x64" "0.19.12"
+ "@esbuild/sunos-x64" "0.19.12"
+ "@esbuild/win32-arm64" "0.19.12"
+ "@esbuild/win32-ia32" "0.19.12"
+ "@esbuild/win32-x64" "0.19.12"
+
+escalade@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+extract-zip@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+ integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
+ dependencies:
+ debug "^4.1.1"
+ get-stream "^5.1.0"
+ yauzl "^2.10.0"
+ optionalDependencies:
+ "@types/yauzl" "^2.9.1"
+
+extsprintf@^1.2.0:
+ version "1.4.1"
+ resolved "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+ integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fastq@^1.6.0:
+ version "1.17.1"
+ resolved "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
+ integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ dependencies:
+ reusify "^1.0.4"
+
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+ dependencies:
+ pend "~1.2.0"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+filelist@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
+ integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
+ dependencies:
+ minimatch "^5.0.1"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+foreground-child@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+ integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+fraction.js@^4.3.7:
+ version "4.3.7"
+ resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+
+fs-extra@^10.0.0, fs-extra@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^9.0.0, fs-extra@^9.0.1:
+ version "9.1.0"
+ resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@2.3.2:
+ version "2.3.2"
+ resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+fsevents@~2.3.2, fsevents@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
+ integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
+ dependencies:
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ hasown "^2.0.0"
+
+get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@^10.3.10:
+ version "10.3.10"
+ resolved "https://registry.npmmirror.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.5"
+ minimatch "^9.0.1"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
+
+glob@^7.1.3, glob@^7.1.6:
+ version "7.2.3"
+ resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-agent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
+ integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
+ dependencies:
+ boolean "^3.0.1"
+ es6-error "^4.1.1"
+ matcher "^3.0.0"
+ roarr "^2.15.3"
+ semver "^7.3.2"
+ serialize-error "^7.0.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globalthis@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+ integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+ dependencies:
+ define-properties "^1.1.3"
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
+got@^11.8.5:
+ version "11.8.6"
+ resolved "https://registry.npmmirror.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
+ integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
+ dependencies:
+ "@sindresorhus/is" "^4.0.0"
+ "@szmarczak/http-timer" "^4.0.5"
+ "@types/cacheable-request" "^6.0.1"
+ "@types/responselike" "^1.0.0"
+ cacheable-lookup "^5.0.3"
+ cacheable-request "^7.0.2"
+ decompress-response "^6.0.0"
+ http2-wrapper "^1.0.0-beta.5.2"
+ lowercase-keys "^2.0.0"
+ p-cancelable "^2.0.0"
+ responselike "^2.0.0"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+ version "4.2.11"
+ resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+ dependencies:
+ es-define-property "^1.0.0"
+
+has-proto@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
+ integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
+
+has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+hasown@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
+hosted-git-info@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
+ integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
+ dependencies:
+ lru-cache "^6.0.0"
+
+html-parse-stringify@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2"
+ integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==
+ dependencies:
+ void-elements "3.1.0"
+
+http-cache-semantics@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+ integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
+http-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+ integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+ dependencies:
+ "@tootallnate/once" "2"
+ agent-base "6"
+ debug "4"
+
+http2-wrapper@^1.0.0-beta.5.2:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+ integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+ dependencies:
+ quick-lru "^5.1.1"
+ resolve-alpn "^1.0.0"
+
+https-proxy-agent@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+i18next@^23.6.0:
+ version "23.10.1"
+ resolved "https://registry.npmmirror.com/i18next/-/i18next-23.10.1.tgz#217ce93b75edbe559ac42be00a20566b53937df6"
+ integrity sha512-NDiIzFbcs3O9PXpfhkjyf7WdqFn5Vq6mhzhtkXzj51aOcNuPNcTwuYNuXCpHsanZGHlHKL35G7huoFeVic1hng==
+ dependencies:
+ "@babel/runtime" "^7.23.2"
+
+iconv-corefoundation@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.npmmirror.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a"
+ integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==
+ dependencies:
+ cli-truncate "^2.1.0"
+ node-addon-api "^1.6.3"
+
+iconv-lite@^0.6.2, iconv-lite@^0.6.3:
+ version "0.6.3"
+ resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
+ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+image-size@~0.5.0:
+ version "0.5.5"
+ resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
+ integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
+
+immediate@~3.0.5:
+ version "3.0.6"
+ resolved "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
+ integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+intersection-observer@^0.12.0:
+ version "0.12.2"
+ resolved "https://registry.npmmirror.com/intersection-observer/-/intersection-observer-0.12.2.tgz#4a45349cc0cd91916682b1f44c28d7ec737dc375"
+ integrity sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-ci@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+ integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
+ dependencies:
+ ci-info "^3.2.0"
+
+is-core-module@^2.13.0:
+ version "2.13.1"
+ resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+ dependencies:
+ hasown "^2.0.0"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-what@^3.14.1:
+ version "3.14.1"
+ resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
+ integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isbinaryfile@^4.0.8:
+ version "4.0.10"
+ resolved "https://registry.npmmirror.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3"
+ integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==
+
+isbinaryfile@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.npmmirror.com/isbinaryfile/-/isbinaryfile-5.0.2.tgz#fe6e4dfe2e34e947ffa240c113444876ba393ae0"
+ integrity sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+jackspeak@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.npmmirror.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
+jake@^10.8.5:
+ version "10.8.7"
+ resolved "https://registry.npmmirror.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
+ integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==
+ dependencies:
+ async "^3.2.3"
+ chalk "^4.0.2"
+ filelist "^1.0.4"
+ minimatch "^3.1.2"
+
+jiti@^1.19.1:
+ version "1.21.0"
+ resolved "https://registry.npmmirror.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
+ integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
+
+js-cookie@^2.x.x:
+ version "2.2.1"
+ resolved "https://registry.npmmirror.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
+ integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stringify-safe@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+json2mq@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
+ integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==
+ dependencies:
+ string-convert "^0.2.0"
+
+json5@^2.2.0, json5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jszip@^3.1.0:
+ version "3.10.1"
+ resolved "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
+ integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==
+ dependencies:
+ lie "~3.3.0"
+ pako "~1.0.2"
+ readable-stream "~2.3.6"
+ setimmediate "^1.0.5"
+
+keyv@^4.0.0:
+ version "4.5.4"
+ resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+lazy-val@^1.0.4, lazy-val@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
+ integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
+
+less-loader@^11.1.3:
+ version "11.1.4"
+ resolved "https://registry.npmmirror.com/less-loader/-/less-loader-11.1.4.tgz#e8a070844efaefbe59b978acaf57b9d3e868cf08"
+ integrity sha512-6/GrYaB6QcW6Vj+/9ZPgKKs6G10YZai/l/eJ4SLwbzqNTBsAqt5hSLVF47TgsiBxV1P6eAU0GYRH3YRuQU9V3A==
+
+less@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/less/-/less-4.2.0.tgz#cbefbfaa14a4cd388e2099b2b51f956e1465c450"
+ integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==
+ dependencies:
+ copy-anything "^2.0.1"
+ parse-node-version "^1.0.1"
+ tslib "^2.3.0"
+ optionalDependencies:
+ errno "^0.1.1"
+ graceful-fs "^4.1.2"
+ image-size "~0.5.0"
+ make-dir "^2.1.0"
+ mime "^1.4.1"
+ needle "^3.1.0"
+ source-map "~0.6.0"
+
+lib-esm@~0.4.0:
+ version "0.4.2"
+ resolved "https://registry.npmmirror.com/lib-esm/-/lib-esm-0.4.2.tgz#1f08ad1750b46c47d371d4f7e1a772b56db3324d"
+ integrity sha512-VGqaEGuryUbT7FLGxXg46nrSzkhLzyk+JQjYoYEORH5UtdIu3yf6DCOqh65FOR3bWOHHGINQH/vR5YGGIFBgJw==
+
+lie@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
+ integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
+ dependencies:
+ immediate "~3.0.5"
+
+lilconfig@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
+ integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+
+lilconfig@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3"
+ integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+lodash.escaperegexp@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347"
+ integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==
+
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
+
+lodash@^4.17.15, lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+long-timeout@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514"
+ integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==
+
+loose-envify@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lowdb@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.npmmirror.com/lowdb/-/lowdb-6.1.1.tgz#fb3c66a116b0ef799641f677676071661f6804f4"
+ integrity sha512-HO13FCxI8SCwfj2JRXOKgXggxnmfSc+l0aJsZ5I34X3pwzG/DPBSKyKu3Zkgg/pNmx854SVgE2la0oUeh6wzNw==
+ dependencies:
+ steno "^3.1.1"
+
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+"lru-cache@^9.1.1 || ^10.0.0":
+ version "10.2.0"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
+ integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
+
+luxon@^3.2.1:
+ version "3.4.4"
+ resolved "https://registry.npmmirror.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af"
+ integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==
+
+make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+matcher@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
+ integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
+ dependencies:
+ escape-string-regexp "^4.0.0"
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4, micromatch@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mime@^1.4.1:
+ version "1.6.0"
+ resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.5.2:
+ version "2.6.0"
+ resolved "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+ integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+
+mimic-response@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^5.0.1, minimatch@^5.1.1:
+ version "5.1.6"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+ integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^9.0.1:
+ version "9.0.3"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+minipass@^3.0.0:
+ version "3.3.6"
+ resolved "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+ integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+ dependencies:
+ yallist "^4.0.0"
+
+minipass@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+ integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+ version "7.0.4"
+ resolved "https://registry.npmmirror.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+
+minizlib@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+ integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
+mitt@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
+ integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
+
+mkdirp@^0.5.1:
+ version "0.5.6"
+ resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
+ integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+ dependencies:
+ minimist "^1.2.6"
+
+mkdirp@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
+needle@^3.1.0:
+ version "3.3.1"
+ resolved "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz#63f75aec580c2e77e209f3f324e2cdf3d29bd049"
+ integrity sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==
+ dependencies:
+ iconv-lite "^0.6.3"
+ sax "^1.2.4"
+
+node-addon-api@^1.6.3:
+ version "1.7.2"
+ resolved "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d"
+ integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==
+
+node-addon-api@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb"
+ integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==
+
+node-api-headers@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/node-api-headers/-/node-api-headers-1.1.0.tgz#3f9dd7bb10b29e1c3e3db675979605a308b2373c"
+ integrity sha512-ucQW+SbYCUPfprvmzBsnjT034IGRB2XK8rRc78BgjNKhTdFKgAwAmgW704bKIBmcYW48it0Gkjpkd39Azrwquw==
+
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
+node-schedule@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/node-schedule/-/node-schedule-2.1.1.tgz#6958b2c5af8834954f69bb0a7a97c62b97185de3"
+ integrity sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==
+ dependencies:
+ cron-parser "^4.2.0"
+ long-timeout "0.1.1"
+ sorted-array-functions "^1.3.0"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+normalize-url@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+ integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+object-assign@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-hash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+ integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+p-cancelable@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+ integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
+
+pako@~1.0.2:
+ version "1.0.11"
+ resolved "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parse-node-version@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
+ integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+ integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+ dependencies:
+ lru-cache "^9.1.1 || ^10.0.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pirates@^4.0.1:
+ version "4.0.6"
+ resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
+
+playwright-core@1.42.1:
+ version "1.42.1"
+ resolved "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.42.1.tgz#13c150b93c940a3280ab1d3fbc945bc855c9459e"
+ integrity sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==
+
+playwright@1.42.1:
+ version "1.42.1"
+ resolved "https://registry.npmmirror.com/playwright/-/playwright-1.42.1.tgz#79c828b51fe3830211137550542426111dc8239f"
+ integrity sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==
+ dependencies:
+ playwright-core "1.42.1"
+ optionalDependencies:
+ fsevents "2.3.2"
+
+plist@^3.0.4, plist@^3.0.5:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
+ integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==
+ dependencies:
+ "@xmldom/xmldom" "^0.8.8"
+ base64-js "^1.5.1"
+ xmlbuilder "^15.1.1"
+
+postcss-import@^15.1.0:
+ version "15.1.0"
+ resolved "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
+ integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
+ dependencies:
+ postcss-value-parser "^4.0.0"
+ read-cache "^1.0.0"
+ resolve "^1.1.7"
+
+postcss-js@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
+ integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
+ dependencies:
+ camelcase-css "^2.0.1"
+
+postcss-load-config@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
+ integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
+ dependencies:
+ lilconfig "^3.0.0"
+ yaml "^2.3.4"
+
+postcss-nested@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
+ integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==
+ dependencies:
+ postcss-selector-parser "^6.0.11"
+
+postcss-selector-parser@^6.0.11:
+ version "6.0.15"
+ resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535"
+ integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.32:
+ version "8.4.35"
+ resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7"
+ integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+prettier@^3.0.3:
+ version "3.2.5"
+ resolved "https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
+ integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+progress@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-retry@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+ integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+ dependencies:
+ err-code "^2.0.2"
+ retry "^0.12.0"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+qrcode.react@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/qrcode.react/-/qrcode.react-3.1.0.tgz#5c91ddc0340f768316fbdb8fff2765134c2aecd8"
+ integrity sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+ integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+rc-cascader@~3.24.0:
+ version "3.24.0"
+ resolved "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.24.0.tgz#f43f06233b89b7b46005c19f3233068c5b379b24"
+ integrity sha512-NwkYsVULA61S085jbOYbq8Z7leyIxVmLwf+71mWLjA3kCfUf/rAKC0WfjQbqBDaLGlU9d4z1EzyPaHBKLYWv6A==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+ array-tree-filter "^2.1.0"
+ classnames "^2.3.1"
+ rc-select "~14.13.0"
+ rc-tree "~5.8.1"
+ rc-util "^5.37.0"
+
+rc-checkbox@~3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.2.0.tgz#04f83b7f2bf63eaf0e2da25e947b88a0a6321b5a"
+ integrity sha512-8inzw4y9dAhZmv/Ydl59Qdy5tdp9CKg4oPVcRigi+ga/yKPZS5m5SyyQPtYSgbcqHRYOdUhiPSeKfktc76du1A==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.3.2"
+ rc-util "^5.25.2"
+
+rc-collapse@~3.7.2:
+ version "3.7.2"
+ resolved "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.7.2.tgz#d11538ff9c705a5c988d9a4dfcc051a919692fe3"
+ integrity sha512-ZRw6ipDyOnfLFySxAiCMdbHtb5ePAsB9mT17PA6y1mRD/W6KHRaZeb5qK/X9xDV1CqgyxMpzw0VdS74PCcUk4A==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^2.3.4"
+ rc-util "^5.27.0"
+
+rc-dialog@~9.4.0:
+ version "9.4.0"
+ resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.4.0.tgz#194c107d34cb36a56f1db4a49dc73f6d59eeae85"
+ integrity sha512-AScCexaLACvf8KZRqCPz12BJ8olszXOS4lKlkMyzDQHS1m0zj1KZMYgmMCh39ee0Dcv8kyrj8mTqxuLyhH+QuQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/portal" "^1.0.0-8"
+ classnames "^2.2.6"
+ rc-motion "^2.3.0"
+ rc-util "^5.21.0"
+
+rc-drawer@~7.1.0:
+ version "7.1.0"
+ resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-7.1.0.tgz#2beabb8bab1784aea255d0d850bc206c3dc715da"
+ integrity sha512-nBE1rF5iZvpavoyqhSSz2mk/yANltA7g3aF0U45xkx381n3we/RKs9cJfNKp9mSWCedOKWt9FLEwZDaAaOGn2w==
+ dependencies:
+ "@babel/runtime" "^7.23.9"
+ "@rc-component/portal" "^1.1.1"
+ classnames "^2.2.6"
+ rc-motion "^2.6.1"
+ rc-util "^5.38.1"
+
+rc-dropdown@~4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.0.tgz#c6052fcfe9c701487b141e411cdc277dc7c6f061"
+ integrity sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.2.6"
+ rc-util "^5.17.0"
+
+rc-field-form@~1.42.1:
+ version "1.42.1"
+ resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.42.1.tgz#70a1c479a1c011b28375bd129d2e9366ed0a1757"
+ integrity sha512-SqiEmWNP+I61Lt80+ofPvT+3l8Ij6vb35IS+x14gheVnCJN0SRnOwEgsqCEB5FslT7xqjUqDnU845hRZ1jzlAA==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ async-validator "^4.1.0"
+ rc-util "^5.32.2"
+
+rc-image@~7.6.0:
+ version "7.6.0"
+ resolved "https://registry.npmmirror.com/rc-image/-/rc-image-7.6.0.tgz#2867087b77c8595ea9eb37d18ca863e47904b191"
+ integrity sha512-tL3Rvd1sS+frZQ01i+tkeUPaOeFz2iG9/scAt/Cfs0hyCRVA/w0Pu1J/JxIX8blalvmHE0bZQRYdOmRAzWu4Hg==
+ dependencies:
+ "@babel/runtime" "^7.11.2"
+ "@rc-component/portal" "^1.0.2"
+ classnames "^2.2.6"
+ rc-dialog "~9.4.0"
+ rc-motion "^2.6.2"
+ rc-util "^5.34.1"
+
+rc-input-number@~9.0.0:
+ version "9.0.0"
+ resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.0.0.tgz#47da6eaf95b0cf566fcdf68196c4dc82b8c8f166"
+ integrity sha512-RfcDBDdWFFetouWFXBA+WPEC8LzBXyngr9b+yTLVIygfFu7HiLRGn/s/v9wwno94X7KFvnb28FNynMGj9XJlDQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/mini-decimal" "^1.0.1"
+ classnames "^2.2.5"
+ rc-input "~1.4.0"
+ rc-util "^5.28.0"
+
+rc-input@~1.4.0, rc-input@~1.4.3:
+ version "1.4.4"
+ resolved "https://registry.npmmirror.com/rc-input/-/rc-input-1.4.4.tgz#e8502f09cbb21e569dcb10dd775123dc40d5b2a0"
+ integrity sha512-kYdx3+Nom0Dfi8GJq+mbzV7w1UCOI1C0+3TA21+ZR3wdtJCpFzeEsa1zxhTGK+igOsXL3F7W/ec2lI6JUJRVLQ==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-util "^5.18.1"
+
+rc-mentions@~2.11.1:
+ version "2.11.1"
+ resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.11.1.tgz#3e742d4b558965701021cff75b84af6cd4744ed3"
+ integrity sha512-upb4AK1SRFql7qGnbLEvJqLMugVVIyjmwBJW9L0eLoN9po4JmJZaBzmKA4089fNtsU8k6l/tdZiVafyooeKnLw==
+ dependencies:
+ "@babel/runtime" "^7.22.5"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.2.6"
+ rc-input "~1.4.0"
+ rc-menu "~9.13.0"
+ rc-textarea "~1.6.1"
+ rc-util "^5.34.1"
+
+rc-menu@~9.13.0:
+ version "9.13.0"
+ resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.13.0.tgz#55426531af5fd0a2a0e0a50020cbd002b231edf9"
+ integrity sha512-1l8ooCB3HcYJKCltC/s7OxRKRjgymdl9htrCeGZcXNaMct0RxZRK6OPV3lPhVksIvAGMgzPd54ClpZ5J4b8cZA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "2.x"
+ rc-motion "^2.4.3"
+ rc-overflow "^1.3.1"
+ rc-util "^5.27.0"
+
+rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.0.tgz#9e18a1b8d61e528a97369cf9a7601e9b29205710"
+ integrity sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-util "^5.21.0"
+
+rc-notification@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-5.3.0.tgz#e31c86fe2350598ade8cff383babd1befa7a94fe"
+ integrity sha512-WCf0uCOkZ3HGfF0p1H4Sgt7aWfipxORWTPp7o6prA3vxwtWhtug3GfpYls1pnBp4WA+j8vGIi5c2/hQRpGzPcQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^2.9.0"
+ rc-util "^5.20.1"
+
+rc-overflow@^1.3.1, rc-overflow@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.3.2.tgz#72ee49e85a1308d8d4e3bd53285dc1f3e0bcce2c"
+ integrity sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-resize-observer "^1.0.0"
+ rc-util "^5.37.0"
+
+rc-pagination@~4.0.4:
+ version "4.0.4"
+ resolved "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-4.0.4.tgz#ea401388ae86eac17ed5b41212d487f12b65b773"
+ integrity sha512-GGrLT4NgG6wgJpT/hHIpL9nELv27A1XbSZzECIuQBQTVSf4xGKxWr6I/jhpRPauYEWEbWVw22ObG6tJQqwJqWQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.3.2"
+ rc-util "^5.38.0"
+
+rc-picker@~4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.3.0.tgz#920e89093d0f7e31443718ad822dd97118ad84f4"
+ integrity sha512-bQNB/+NdW55jlQ5lPnNqF5J90Tq4SihLbAF7tzPBvGDJyoYmDgwLm4FN0ZB3Ot9i1v6vJY/1mgqZZTT9jbYc5w==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.2.1"
+ rc-overflow "^1.3.2"
+ rc-resize-observer "^1.4.0"
+ rc-util "^5.38.1"
+
+rc-progress@~3.5.1:
+ version "3.5.1"
+ resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.5.1.tgz#a3cdfd2fe04eb5c3d43fa1c69e7dd70c73b102ae"
+ integrity sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.6"
+ rc-util "^5.16.1"
+
+rc-rate@~2.12.0:
+ version "2.12.0"
+ resolved "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.12.0.tgz#0182deffed3b009cdcc61660da8746c39ed91ed5"
+ integrity sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.5"
+ rc-util "^5.0.1"
+
+rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.3.1, rc-resize-observer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz#7bba61e6b3c604834980647cce6451914750d0cc"
+ integrity sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==
+ dependencies:
+ "@babel/runtime" "^7.20.7"
+ classnames "^2.2.1"
+ rc-util "^5.38.0"
+ resize-observer-polyfill "^1.5.1"
+
+rc-segmented@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.3.0.tgz#b3fe080fb434a266c02e30bb62a47d2c6e094341"
+ integrity sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-motion "^2.4.4"
+ rc-util "^5.17.0"
+
+rc-select@~14.13.0:
+ version "14.13.0"
+ resolved "https://registry.npmmirror.com/rc-select/-/rc-select-14.13.0.tgz#5f343d18398833e0fe44a060a17a8dc1775cb650"
+ integrity sha512-ew34FsaqHokK4dxVrcIxSYrgWJ2XJYlkk32eiOIiEo3GkHUExdCzmozMYaUc2P67c5QJRUvvY0uqCs3QG67h5A==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "2.x"
+ rc-motion "^2.0.1"
+ rc-overflow "^1.3.1"
+ rc-util "^5.16.1"
+ rc-virtual-list "^3.5.2"
+
+rc-slider@~10.5.0:
+ version "10.5.0"
+ resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-10.5.0.tgz#1bd4853d114cb3403b67c485125887adb6a2a117"
+ integrity sha512-xiYght50cvoODZYI43v3Ylsqiw14+D7ELsgzR40boDZaya1HFa1Etnv9MDkQE8X/UrXAffwv2AcNAhslgYuDTw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.5"
+ rc-util "^5.27.0"
+
+rc-steps@~6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.1.tgz#c2136cd0087733f6d509209a84a5c80dc29a274d"
+ integrity sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==
+ dependencies:
+ "@babel/runtime" "^7.16.7"
+ classnames "^2.2.3"
+ rc-util "^5.16.1"
+
+rc-switch@~4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/rc-switch/-/rc-switch-4.1.0.tgz#f37d81b4e0c5afd1274fd85367b17306bf25e7d7"
+ integrity sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==
+ dependencies:
+ "@babel/runtime" "^7.21.0"
+ classnames "^2.2.1"
+ rc-util "^5.30.0"
+
+rc-table@~7.42.0:
+ version "7.42.0"
+ resolved "https://registry.npmmirror.com/rc-table/-/rc-table-7.42.0.tgz#94a2ce0c76b38336ed04a69587ad264bfc533805"
+ integrity sha512-GwHV9Zs3HvWxBkoXatO/IeKoElzy3Ojf3dcyw1Rj3cyQVb+ZHtexslKdyzsrKRPJ0mUa62BoX+ZAg3zgTEql8w==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/context" "^1.4.0"
+ classnames "^2.2.5"
+ rc-resize-observer "^1.1.0"
+ rc-util "^5.37.0"
+ rc-virtual-list "^3.11.1"
+
+rc-tabs@~14.1.1:
+ version "14.1.1"
+ resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-14.1.1.tgz#f49467feb69af0156c7864d04c21396e4c5c7911"
+ integrity sha512-5nOr9PVpJy2SWHTLgv1+kESDOb0tFzl0cYU9r9d8LfL0Wg9i/n1B558rmkxdQHgBwMqxmwoyPSAbQROxMQe8nw==
+ dependencies:
+ "@babel/runtime" "^7.11.2"
+ classnames "2.x"
+ rc-dropdown "~4.2.0"
+ rc-menu "~9.13.0"
+ rc-motion "^2.6.2"
+ rc-resize-observer "^1.0.0"
+ rc-util "^5.34.1"
+
+rc-textarea@~1.6.1, rc-textarea@~1.6.3:
+ version "1.6.3"
+ resolved "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.6.3.tgz#3f294fdf5dfadbe9d0e7b695cea4da557728a9be"
+ integrity sha512-8k7+8Y2GJ/cQLiClFMg8kUXOOdvcFQrnGeSchOvI2ZMIVvX5a3zQpLxoODL0HTrvU63fPkRmMuqaEcOF9dQemA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+ rc-input "~1.4.0"
+ rc-resize-observer "^1.0.0"
+ rc-util "^5.27.0"
+
+rc-tooltip@~6.2.0:
+ version "6.2.0"
+ resolved "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.2.0.tgz#4dd7575674137a5b14f118a5c16435d3f5e4a9c9"
+ integrity sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw==
+ dependencies:
+ "@babel/runtime" "^7.11.2"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.3.1"
+
+rc-tree-select@~5.19.0:
+ version "5.19.0"
+ resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.19.0.tgz#1da83694ffeeeed7ba5e4bd49a1d7df48501677d"
+ integrity sha512-f4l5EsmSGF3ggj76YTzKNPY9SnXfFaer7ZccTSGb3urUf54L+cCqyT+UsPr+S5TAr8mZSxJ7g3CgkCe+cVQ6sw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-select "~14.13.0"
+ rc-tree "~5.8.1"
+ rc-util "^5.16.1"
+
+rc-tree@~5.8.1, rc-tree@~5.8.5:
+ version "5.8.5"
+ resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.8.5.tgz#f714a383be27bd87366cf32f7f85b2af1fbae6b6"
+ integrity sha512-PRfcZtVDNkR7oh26RuNe1hpw11c1wfgzwmPFL0lnxGnYefe9lDAO6cg5wJKIAwyXFVt5zHgpjYmaz0CPy1ZtKg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^2.0.1"
+ rc-util "^5.16.1"
+ rc-virtual-list "^3.5.1"
+
+rc-upload@~4.5.2:
+ version "4.5.2"
+ resolved "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.5.2.tgz#ea493fbaaf57d9369ee954b20e1d8bc35c818a1a"
+ integrity sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ classnames "^2.2.5"
+ rc-util "^5.2.0"
+
+rc-util@^5.0.1, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.28.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.39.1:
+ version "5.39.1"
+ resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.39.1.tgz#7bca4fb55e20add0eef5c23166cd9f9e5f51a8a1"
+ integrity sha512-OW/ERynNDgNr4y0oiFmtes3rbEamXw7GHGbkbNd9iRr7kgT03T6fT0b9WpJ3mbxKhyOcAHnGcIoh5u/cjrC2OQ==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ react-is "^18.2.0"
+
+rc-virtual-list@^3.11.1, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2:
+ version "3.11.4"
+ resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.11.4.tgz#d0a8937843160b7b00d5586854290bf56d396af7"
+ integrity sha512-NbBi0fvyIu26gP69nQBiWgUMTPX3mr4FcuBQiVqagU0BnuX8WQkiivnMs105JROeuUIFczLrlgUhLQwTWV1XDA==
+ dependencies:
+ "@babel/runtime" "^7.20.0"
+ classnames "^2.2.6"
+ rc-resize-observer "^1.0.0"
+ rc-util "^5.36.0"
+
+react-dom@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.npmmirror.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
+ dependencies:
+ loose-envify "^1.1.0"
+ scheduler "^0.23.0"
+
+react-i18next@^13.3.1:
+ version "13.5.0"
+ resolved "https://registry.npmmirror.com/react-i18next/-/react-i18next-13.5.0.tgz#44198f747628267a115c565f0c736a50a76b1ab0"
+ integrity sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==
+ dependencies:
+ "@babel/runtime" "^7.22.5"
+ html-parse-stringify "^3.0.1"
+
+react-is@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+ integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
+react-refresh@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e"
+ integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==
+
+react-router-dom@^6.18.0:
+ version "6.22.3"
+ resolved "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.22.3.tgz#9781415667fd1361a475146c5826d9f16752a691"
+ integrity sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==
+ dependencies:
+ "@remix-run/router" "1.15.3"
+ react-router "6.22.3"
+
+react-router@6.22.3:
+ version "6.22.3"
+ resolved "https://registry.npmmirror.com/react-router/-/react-router-6.22.3.tgz#9d9142f35e08be08c736a2082db5f0c9540a885e"
+ integrity sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==
+ dependencies:
+ "@remix-run/router" "1.15.3"
+
+react@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.npmmirror.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+read-cache@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+ integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+ dependencies:
+ pify "^2.3.0"
+
+read-config-file@6.3.2:
+ version "6.3.2"
+ resolved "https://registry.npmmirror.com/read-config-file/-/read-config-file-6.3.2.tgz#556891aa6ffabced916ed57457cb192e61880411"
+ integrity sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==
+ dependencies:
+ config-file-ts "^0.2.4"
+ dotenv "^9.0.2"
+ dotenv-expand "^5.1.0"
+ js-yaml "^4.1.0"
+ json5 "^2.2.0"
+ lazy-val "^1.0.4"
+
+readable-stream@~2.3.6:
+ version "2.3.8"
+ resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+ integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+regenerator-runtime@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
+ integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+resize-observer-polyfill@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+ integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
+resolve-alpn@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+ integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
+resolve@^1.1.7, resolve@^1.22.2:
+ version "1.22.8"
+ resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+responselike@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
+ integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
+ dependencies:
+ lowercase-keys "^2.0.0"
+
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+roarr@^2.15.3:
+ version "2.15.4"
+ resolved "https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
+ integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
+ dependencies:
+ boolean "^3.0.1"
+ detect-node "^2.0.4"
+ globalthis "^1.0.1"
+ json-stringify-safe "^5.0.1"
+ semver-compare "^1.0.0"
+ sprintf-js "^1.1.2"
+
+rollup@^4.2.0:
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/rollup/-/rollup-4.12.1.tgz#0659cb02551cde4c5b210e9bd3af050b5b5b415d"
+ integrity sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==
+ dependencies:
+ "@types/estree" "1.0.5"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.12.1"
+ "@rollup/rollup-android-arm64" "4.12.1"
+ "@rollup/rollup-darwin-arm64" "4.12.1"
+ "@rollup/rollup-darwin-x64" "4.12.1"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.12.1"
+ "@rollup/rollup-linux-arm64-gnu" "4.12.1"
+ "@rollup/rollup-linux-arm64-musl" "4.12.1"
+ "@rollup/rollup-linux-riscv64-gnu" "4.12.1"
+ "@rollup/rollup-linux-x64-gnu" "4.12.1"
+ "@rollup/rollup-linux-x64-musl" "4.12.1"
+ "@rollup/rollup-win32-arm64-msvc" "4.12.1"
+ "@rollup/rollup-win32-ia32-msvc" "4.12.1"
+ "@rollup/rollup-win32-x64-msvc" "4.12.1"
+ fsevents "~2.3.2"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+rxjs@^7.8.1:
+ version "7.8.1"
+ resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
+ integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
+ dependencies:
+ tslib "^2.1.0"
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+"safer-buffer@>= 2.1.2 < 3.0.0":
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sanitize-filename@^1.6.3:
+ version "1.6.3"
+ resolved "https://registry.npmmirror.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378"
+ integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==
+ dependencies:
+ truncate-utf8-bytes "^1.0.0"
+
+sax@^1.2.4:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0"
+ integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==
+
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
+ dependencies:
+ loose-envify "^1.1.0"
+
+screenfull@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba"
+ integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==
+
+scroll-into-view-if-needed@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz#fa9524518c799b45a2ef6bbffb92bcad0296d01f"
+ integrity sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==
+ dependencies:
+ compute-scroll-into-view "^3.0.2"
+
+semver-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
+
+semver@^5.6.0:
+ version "5.7.2"
+ resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+ integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
+semver@^6.2.0, semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.2.1, semver@^7.3.2, semver@^7.3.8, semver@^7.5.3:
+ version "7.6.0"
+ resolved "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+serialize-error@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmmirror.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
+ integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
+ dependencies:
+ type-fest "^0.13.1"
+
+setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+simple-update-notifier@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
+ integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
+ dependencies:
+ semver "^7.5.3"
+
+slice-ansi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+ integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+smart-buffer@^4.0.2:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+ integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+sorted-array-functions@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5"
+ integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==
+
+source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+source-map-support@^0.5.19:
+ version "0.5.21"
+ resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sprintf-js@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
+ integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
+
+stat-mode@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
+ integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==
+
+steno@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/steno/-/steno-3.2.0.tgz#6c043aa57b3e7984396f00359c4db1e09a5dccbf"
+ integrity sha512-zPKkv+LqoYffxrtD0GIVA08DvF6v1dW02qpP5XnERoobq9g3MKcTSBTi08gbGNFMNRo3TQV/6kBw811T1LUhKg==
+
+string-convert@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
+ integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==
+
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+stylis@^4.0.13:
+ version "4.3.1"
+ resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.1.tgz#ed8a9ebf9f76fe1e12d462f5cc3c4c980b23a7eb"
+ integrity sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==
+
+sucrase@^3.32.0:
+ version "3.35.0"
+ resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
+ integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.2"
+ commander "^4.0.0"
+ glob "^10.3.10"
+ lines-and-columns "^1.1.6"
+ mz "^2.7.0"
+ pirates "^4.0.1"
+ ts-interface-checker "^0.1.9"
+
+sumchecker@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
+ integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
+ dependencies:
+ debug "^4.1.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tailwindcss@^3.3.3:
+ version "3.4.1"
+ resolved "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d"
+ integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==
+ dependencies:
+ "@alloc/quick-lru" "^5.2.0"
+ arg "^5.0.2"
+ chokidar "^3.5.3"
+ didyoumean "^1.2.2"
+ dlv "^1.1.3"
+ fast-glob "^3.3.0"
+ glob-parent "^6.0.2"
+ is-glob "^4.0.3"
+ jiti "^1.19.1"
+ lilconfig "^2.1.0"
+ micromatch "^4.0.5"
+ normalize-path "^3.0.0"
+ object-hash "^3.0.0"
+ picocolors "^1.0.0"
+ postcss "^8.4.23"
+ postcss-import "^15.1.0"
+ postcss-js "^4.0.1"
+ postcss-load-config "^4.0.1"
+ postcss-nested "^6.0.1"
+ postcss-selector-parser "^6.0.11"
+ resolve "^1.22.2"
+ sucrase "^3.32.0"
+
+tar@^6.1.12:
+ version "6.2.0"
+ resolved "https://registry.npmmirror.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73"
+ integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^5.0.0"
+ minizlib "^2.1.1"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
+temp-file@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.npmmirror.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7"
+ integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==
+ dependencies:
+ async-exit-hook "^2.0.1"
+ fs-extra "^10.0.0"
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
+throttle-debounce@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz#a17a4039e82a2ed38a5e7268e4132d6960d41933"
+ integrity sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==
+
+tiny-typed-emitter@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5"
+ integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==
+
+tmp-promise@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.npmmirror.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7"
+ integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==
+ dependencies:
+ tmp "^0.2.0"
+
+tmp@^0.2.0:
+ version "0.2.3"
+ resolved "https://registry.npmmirror.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae"
+ integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+toggle-selection@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
+ integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==
+
+truncate-utf8-bytes@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
+ integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==
+ dependencies:
+ utf8-byte-length "^1.0.1"
+
+ts-interface-checker@^0.1.9:
+ version "0.1.13"
+ resolved "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
+ integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
+tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.1:
+ version "2.6.2"
+ resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+ integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
+type-fest@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+ integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+
+typescript@^5.1.6, typescript@^5.3.3:
+ version "5.4.2"
+ resolved "https://registry.npmmirror.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372"
+ integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==
+
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
+ integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
+
+unzip-crx-3@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz#d5324147b104a8aed9ae8639c95521f6f7cda292"
+ integrity sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==
+ dependencies:
+ jszip "^3.1.0"
+ mkdirp "^0.5.1"
+ yaku "^0.16.6"
+
+update-browserslist-db@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+utf8-byte-length@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
+ integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==
+
+util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+verror@^1.10.0:
+ version "1.10.1"
+ resolved "https://registry.npmmirror.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
+ integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vite-plugin-electron-renderer@^0.14.5:
+ version "0.14.5"
+ resolved "https://registry.npmmirror.com/vite-plugin-electron-renderer/-/vite-plugin-electron-renderer-0.14.5.tgz#2ac36f31773cb23a09353fabb6fb788bdad94f50"
+ integrity sha512-EQ7ORuPp8vFPCqfuGnVo7d36fXS0IFH4/RUlKb1drseix3TQEPcgwEuFADdXBxRgqMp70njz/1m0kdf5lEsm8w==
+
+vite-plugin-electron@^0.13.0-beta.3:
+ version "0.13.0-beta.3"
+ resolved "https://registry.npmmirror.com/vite-plugin-electron/-/vite-plugin-electron-0.13.0-beta.3.tgz#60433333d9a13291cbb225b0597fefa599d845a3"
+ integrity sha512-e4Zc5bom42YwrMq5DmdBFQOXeIfEt3nihIGZfLSzsR04YOnpfyQapHT5CH1jhvoWYJ2uOT2K99CRzpQqwsP7JQ==
+
+vite-plugin-esmodule@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.npmmirror.com/vite-plugin-esmodule/-/vite-plugin-esmodule-1.5.0.tgz#f80950f8d1a0f0693a7fdfa2b1be8bd7ae64906c"
+ integrity sha512-H8eHn4uWhVPaWIS/2P+uVIV84a0CanhgE6/MgKb6l1VoQwna/RU/mUzYbXrPeYEac04+kOe+9NHwI6Yvceo8sQ==
+ dependencies:
+ lib-esm "~0.4.0"
+ vite-plugin-optimizer "~1.4.2"
+
+vite-plugin-optimizer@~1.4.2:
+ version "1.4.3"
+ resolved "https://registry.npmmirror.com/vite-plugin-optimizer/-/vite-plugin-optimizer-1.4.3.tgz#0a44c40676c7f76f795401c4c92841876bd0ff61"
+ integrity sha512-m1AFakemDxSNIwxsTYykBFuQxkKJLI8207RNAg33N5km2aE29cP+Jt41xbfdrALOU2VKYWGFlBz64GMbIser4A==
+
+vite@5.0.5:
+ version "5.0.5"
+ resolved "https://registry.npmmirror.com/vite/-/vite-5.0.5.tgz#3eebe3698e3b32cea36350f58879258fec858a3c"
+ integrity sha512-OekeWqR9Ls56f3zd4CaxzbbS11gqYkEiBtnWFFgYR2WV8oPJRRKq0mpskYy/XaoCL3L7VINDhqqOMNDiYdGvGg==
+ dependencies:
+ esbuild "^0.19.3"
+ postcss "^8.4.32"
+ rollup "^4.2.0"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+void-elements@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
+ integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==
+
+wallpaper@^7.2.1:
+ version "7.2.1"
+ resolved "https://registry.yarnpkg.com/wallpaper/-/wallpaper-7.2.1.tgz#f6ee0314d3d2ca7b53990f1f4a64b1e725966698"
+ integrity sha512-fqAhFSF/BVg+F7Hj+9xOnDWZMM20rjuDTYtietso4P8gYOPOBzJyzbJEDocDfoCgzDV5a1x68u54/ICr70mpPw==
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1:
+ version "15.1.1"
+ resolved "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
+ integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yaku@^0.16.6:
+ version "0.16.7"
+ resolved "https://registry.npmmirror.com/yaku/-/yaku-0.16.7.tgz#1d195c78aa9b5bf8479c895b9504fd4f0847984e"
+ integrity sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^2.3.4:
+ version "2.4.1"
+ resolved "https://registry.npmmirror.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed"
+ integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==
+
+yargs-parser@^21.1.1:
+ version "21.1.1"
+ resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@^17.6.2:
+ version "17.7.2"
+ resolved "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
+yauzl@^2.10.0:
+ version "2.10.0"
+ resolved "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"