diff --git a/app/Http/View/Composers/UserMenuComposer.php b/app/Http/View/Composers/UserMenuComposer.php index cffabb375..d83120b2a 100644 --- a/app/Http/View/Composers/UserMenuComposer.php +++ b/app/Http/View/Composers/UserMenuComposer.php @@ -41,7 +41,6 @@ public function compose(View $view) ['label' => trans('general.admin-panel'), 'link' => route('admin.view')], ['label' => trans('general.user-manage'), 'link' => route('admin.users.view')], ['label' => trans('general.report-manage'), 'link' => route('admin.reports.view')], - ['label' => 'Web CLI', 'link' => '#launch-cli'], ); } $menuItems = $this->filter->apply('user_menu', $menuItems, [$user]); diff --git a/package.json b/package.json index 6427df48c..8f0dd7350 100644 --- a/package.json +++ b/package.json @@ -69,18 +69,14 @@ "kleur": "^4.1.3" }, "dependencies": { - "@emotion/react": "^11.0.0", + "@emotion/react": "^11.11.4", "@emotion/styled": "^11.0.0", "@fortawesome/fontawesome-free": "^6.3.0", "@tweenjs/tween.js": "^23.1.1", "admin-lte": "^3.2.0", - "blessing-skin-shell": "^0.3.4", "bootstrap": "^5.3.3", - "cac": "6.7.14", - "cli-spinners": "^2.5.0", "clsx": "^2.1.0", "echarts": "^5.5.0", - "events": "^3.2.0", "immer": "^10.0.3", "jquery": "^3.6.0", "lodash-es": "^4.0.8", @@ -97,9 +93,7 @@ "skinview-utils": "^0.7.1", "skinview3d": "^3.0.0-alpha.1", "spectre.css": "^0.5.8", - "use-immer": "^0.9.0", - "xterm": "^5.3.0", - "xterm-addon-fit": "^0.8.0" + "use-immer": "^0.9.0" }, "devDependencies": { "@testing-library/jest-dom": "^6.4.2", @@ -110,22 +104,22 @@ "@types/js-yaml": "^4.0.9", "@types/lodash-es": "^4.0.6", "@types/prompts": "^2.0.9", - "@types/react": "^18.2.57", + "@types/react": "^18.2.62", "@types/react-autosuggest": "^10.1.11", "@types/react-dom": "^18.2.19", "@types/tween.js": "^18.5.0", "@vitejs/plugin-react-swc": "^3.6.0", - "autoprefixer": "^10.4.17", + "autoprefixer": "^10.4.18", "browserslist": "^4.23.0", "browserslist-to-esbuild": "^2.1.1", "eslint-config-xo-react": "^0.27.0", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.0", "eslint-plugin-react-hooks": "^4.6.0", "js-yaml": "^4.1.0", - "laravel-vite-plugin": "^1.0.1", + "laravel-vite-plugin": "^1.0.2", "postcss": "^8.4.35", "typescript": "^5.3.3", - "vite": "^5.1.4", + "vite": "^5.1.5", "vite-plugin-top-level-await": "^1.4.1", "vite-plugin-wasm": "^3.3.0", "vitest": "^1.3.1", diff --git a/resources/assets/src/index.tsx b/resources/assets/src/index.tsx index 95554b154..5e3397300 100644 --- a/resources/assets/src/index.tsx +++ b/resources/assets/src/index.tsx @@ -9,12 +9,6 @@ import routes from './scripts/route'; // eslint-disable-next-line @typescript-eslint/naming-convention Object.assign(window, {React, ReactDOM, $}); -const entry = document.querySelector('[href="#launch-cli"]'); -entry?.addEventListener('click', async () => { - const {launch} = await import('./scripts/cli'); - launch(); -}); - const route = routes.find(route => new RegExp(`^${route.path}$`, 'i').test(blessing.route), ); diff --git a/resources/assets/src/scripts/cli.tsx b/resources/assets/src/scripts/cli.tsx deleted file mode 100644 index 8151020ab..000000000 --- a/resources/assets/src/scripts/cli.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import {useEffect, useRef} from 'react'; -import ReactDOM from 'react-dom'; -import styled from '@emotion/styled'; -import {Terminal} from 'xterm'; -import {FitAddon} from 'xterm-addon-fit'; -import {Shell, type Stdio} from 'blessing-skin-shell'; -import 'xterm/css/xterm.css'; -import Draggable from 'react-draggable'; -import * as event from './event'; -import AptCommand from './cli/AptCommand'; -import ClosetCommand from './cli/ClosetCommand'; -import DnfCommand from './cli/DnfCommand'; -import PacmanCommand from './cli/PacmanCommand'; -import RmCommand from './cli/RmCommand'; -import * as breakpoints from '@/styles/breakpoints'; - -let launched = false; - -const TerminalContainer = styled.div` - z-index: 1040; - position: fixed; - bottom: 7vh; - user-select: none; - - .card-body { - background-color: #000; - } - - ${breakpoints.greaterThan(breakpoints.Breakpoint.xl)} { - left: 25vw; - width: 50vw; - height: 50vh; - } - - ${breakpoints.between(breakpoints.Breakpoint.md, breakpoints.Breakpoint.xl)} { - left: 5vw; - width: 90vw; - height: 40vh; - } - - ${breakpoints.lessThan(breakpoints.Breakpoint.md)} { - left: 1vw; - width: 98vw; - height: 35vh; - } -`; - -const TerminalWindow: React.FC<{onClose(): void}> = properties => { - const mount = useRef(null); - - useEffect(() => { - const element = mount.current; - if (!element) { - return; - } - - const terminal = new Terminal(); - const fitAddon = new FitAddon(); - terminal.loadAddon(fitAddon); - terminal.options.fontFamily = 'Monaco, Consolas, "Roboto Mono", "Noto Sans", "Droid Sans Mono"'; - terminal.open(element); - fitAddon.fit(); - - const programs = new Map void>(); - programs.set('apt', AptCommand); - programs.set('closet', ClosetCommand); - programs.set('dnf', DnfCommand); - programs.set('pacman', PacmanCommand); - programs.set('rm', RmCommand); - event.emit('registerCLIPrograms', programs); - - const shell = new Shell(terminal); - for (const [name, program] of programs.entries()) { - shell.addExternal(name, program); - } - - const originalLogger = console.log; - console.log = (data: string, ...arguments_: any[]) => { - const {stack} = new Error(); - if (stack?.includes('outputHelp')) { - terminal.writeln(data.replaceAll('\n', '\r\n')); - } else { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - originalLogger(data, ...arguments_); - } - }; - - const unbindData = terminal.onData(e => { - shell.input(e); - }); - const unbindKey = terminal.onKey(e => { - event.emit('terminalKeyPress', e.key); - }, - ); - launched = true; - - return () => { - unbindData.dispose(); - unbindKey.dispose(); - shell.free(); - fitAddon.dispose(); - terminal.dispose(); - console.log = originalLogger; - launched = false; - }; - }, []); - - return ( - - -
-
-

- Blessing Skin Shell -

- -
-
-
- - - ); -}; - -export function launch() { - if (launched) { - return; - } - - const container = document.createElement('div'); - document.body.append(container); - - const handleClose = () => { - ReactDOM.unmountComponentAtNode(container); - container.remove(); - }; - - ReactDOM.render(, container); -} diff --git a/resources/assets/src/scripts/cli/.eslintrc.yml b/resources/assets/src/scripts/cli/.eslintrc.yml deleted file mode 100644 index 653e29374..000000000 --- a/resources/assets/src/scripts/cli/.eslintrc.yml +++ /dev/null @@ -1,2 +0,0 @@ -rules: - '@typescript-eslint/no-empty-function': off diff --git a/resources/assets/src/scripts/cli/AptCommand.ts b/resources/assets/src/scripts/cli/AptCommand.ts deleted file mode 100644 index 2e60b4683..000000000 --- a/resources/assets/src/scripts/cli/AptCommand.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type {Stdio} from 'blessing-skin-shell'; -import cac from 'cac'; -import {install, remove} from './pluginManager'; - -export default async function apt(stdio: Stdio, arguments_: string[]) { - const program = cac('apt'); - program.help(); - - program - .command('install ', 'install a new plugin') - .action(async (plugin: string) => install(plugin, stdio)); - - program - .command('upgrade ', 'upgrade an existed plugin') - .action(async (plugin: string) => install(plugin, stdio)); - - program - .command('remove ', 'remove a plugin') - .action(async (plugin: string) => remove(plugin, stdio)); - - program.parse(['', ''].concat(arguments_), {run: false}); - await program.runMatchedCommand(); -} diff --git a/resources/assets/src/scripts/cli/ClosetCommand.ts b/resources/assets/src/scripts/cli/ClosetCommand.ts deleted file mode 100644 index 5d08fa361..000000000 --- a/resources/assets/src/scripts/cli/ClosetCommand.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type {Stdio} from 'blessing-skin-shell'; -import cac from 'cac'; -import * as fetch from '../net'; -import type {User, Texture} from '../types'; - -type Response = fetch.ResponseBody<{user: User; texture: Texture}>; - -export default async function closet(stdio: Stdio, arguments_: string[]) { - const program = cac('closet'); - program.help(); - - program - .command('add ', 'add texture to someone\'s closet') - .action(async (uid: string, tid: string) => { - const {code, data} = await fetch.post( - `/admin/closet/${uid}`, - {tid}, - ); - if (code === 0) { - const {texture, user} = data; - stdio.println( - `Texture "${texture.name}" was added to user ${user.nickname}'s closet.`, - ); - } else { - stdio.println('Error occurred.'); - } - }); - program - .command('remove ', 'remove texture from someone\'s closet') - .action(async (uid: string, tid: string) => { - const {code, data} = await fetch.del(`/admin/closet/${uid}`, { - tid, - }); - if (code === 0) { - const {texture, user} = data; - stdio.println( - `Texture "${texture.name}" was removed from user ${user.nickname}'s closet.`, - ); - } else { - stdio.println('Error occurred.'); - } - }); - - program.parse(['', ''].concat(arguments_), {run: false}); - await program.runMatchedCommand(); -} diff --git a/resources/assets/src/scripts/cli/DnfCommand.ts b/resources/assets/src/scripts/cli/DnfCommand.ts deleted file mode 100644 index b735c694c..000000000 --- a/resources/assets/src/scripts/cli/DnfCommand.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type {Stdio} from 'blessing-skin-shell'; -import cac from 'cac'; -import {install, remove} from './pluginManager'; - -export default async function dnf(stdio: Stdio, arguments_: string[]) { - const program = cac('dnf'); - program.help(); - - program - .command('install ', 'install a new plugin') - .action(async (plugin: string) => install(plugin, stdio)); - - program - .command('upgrade ', 'upgrade an existed plugin') - .action(async (plugin: string) => install(plugin, stdio)); - - program - .command('remove ', 'remove a plugin') - .action(async (plugin: string) => remove(plugin, stdio)); - - program.parse(['', ''].concat(arguments_), {run: false}); - await program.runMatchedCommand(); -} diff --git a/resources/assets/src/scripts/cli/PacmanCommand.ts b/resources/assets/src/scripts/cli/PacmanCommand.ts deleted file mode 100644 index e21fdf0c2..000000000 --- a/resources/assets/src/scripts/cli/PacmanCommand.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type {Stdio} from 'blessing-skin-shell'; -import cac from 'cac'; -import {install, remove} from './pluginManager'; - -type Options = { - sync?: string; - remove?: string; -}; - -export default async function pacman(stdio: Stdio, arguments_: string[]) { - if (arguments_.length === 0) { - stdio.println('error: no operation specified (use -h for help)'); - return; - } - - const program = cac('pacman'); - program.help(); - - program.option('-S, --sync ', 'install or upgrade a plugin'); - program.option('-R, --remove ', 'remove a plugin'); - - const {options} = program.parse(['', ''].concat(arguments_), {run: false}); - - const options_: Options = options; - /* istanbul ignore else */ - if (options_.sync) { - await install(options_.sync, stdio); - } else if (options_.remove) { - await remove(options_.remove, stdio); - } -} diff --git a/resources/assets/src/scripts/cli/RmCommand.ts b/resources/assets/src/scripts/cli/RmCommand.ts deleted file mode 100644 index b28384a4f..000000000 --- a/resources/assets/src/scripts/cli/RmCommand.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type {Stdio} from 'blessing-skin-shell'; -import cac from 'cac'; -import * as fetch from '../net'; - -type Options = { - force?: boolean; - recursive?: boolean; - help?: boolean; -}; - -export default async function rm(stdio: Stdio, arguments_: string[]) { - const program = cac('rm'); - program.help(); - - program - .command('') - .option( - '-f, --force', - 'ignore nonexistent files and arguments, never prompt', - ) - .option( - '-r, --recursive', - 'remove directories and their contents recursively', - ) - .option('--no-preserve-root', 'do not treat \'/\' specially'); - - const {options} = program.parse(['', ''].concat(arguments_), { - run: false, - }); - const path = program.args[0]; - - if (!path && !options.help) { - stdio.println('rm: missing operand'); - stdio.println('Try \'rm --help\' for more information.'); - } - - if (options.force && options.recursive && path?.startsWith('/')) { - await fetch.post('/admin/resource?clear-cache'); - } -} diff --git a/resources/assets/src/scripts/cli/Spinner.ts b/resources/assets/src/scripts/cli/Spinner.ts deleted file mode 100644 index dbe01b3d2..000000000 --- a/resources/assets/src/scripts/cli/Spinner.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type {Stdio} from 'blessing-skin-shell'; -import spinners from 'cli-spinners/spinners.json'; - -const {dots} = spinners; - -export class Spinner { - private timerId = 0; - private index = 0; - - constructor(private readonly stdio: Stdio) {} - - start(message = '') { - this.timerId = window.setInterval(() => { - this.index += 1; - this.index %= dots.frames.length; - - this.stdio.reset(); - this.stdio.print(`${dots.frames[this.index]} ${message}`); - }, dots.interval); - } - - stop(message = '') { - clearInterval(this.timerId); - this.stdio.reset(); - this.stdio.println(message); - this.stdio.print('\u001B[?25h'); - } -} diff --git a/resources/assets/src/scripts/cli/configureStdio.ts b/resources/assets/src/scripts/cli/configureStdio.ts deleted file mode 100644 index 652d6a07d..000000000 --- a/resources/assets/src/scripts/cli/configureStdio.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type {Stdio} from 'blessing-skin-shell'; -import * as event from '../event'; - -export function hackStdin() { - if (process.env.NODE_ENV === 'test') { - return process.stdin; - } - - // @ts-expect-error - return { - on(eventName: string, handler: (string_: string, key: string) => void) { - if (eventName === 'keypress') { - this._off = event.on('terminalKeyPress', (key: string) => { - handler(key, key); - }); - } - }, - isTTY: true, - setRawMode() {}, - removeListener() { - this._off(); - }, - } as NodeJS.ReadStream & {_off(): void}; -} - -export function hackStdout(stdio: Stdio) { - return { - write(message: string) { - stdio.print(message.replaceAll('\n', '\r\n')); - return true; - }, - } as NodeJS.WriteStream; -} diff --git a/resources/assets/src/scripts/cli/pluginManager.ts b/resources/assets/src/scripts/cli/pluginManager.ts deleted file mode 100644 index e191d9554..000000000 --- a/resources/assets/src/scripts/cli/pluginManager.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type {Stdio} from 'blessing-skin-shell'; -import prompts from 'prompts'; -import * as fetch from '../net'; -import {hackStdout, hackStdin} from './configureStdio'; -import {Spinner} from './Spinner'; - -export async function install(plugin: string, stdio: Stdio) { - const spinner = new Spinner(stdio); - spinner.start('Installing plugin...'); - - const {message, data} = await fetch.post< - fetch.ResponseBody<{reason?: string[]} | undefined> - >('/admin/plugins/market/download', {name: plugin}); - - spinner.stop(` ${message}`); - const reasons = data?.reason; - if (reasons) { - stdio.println(reasons.map(reason => `- ${reason}`).join('\r\n')); - } -} - -export async function remove(plugin: string, stdio: Stdio) { - const {confirm}: {confirm: boolean} = await prompts({ - name: 'confirm', - type: 'confirm', - message: `Are you sure to remove plugin "${plugin}"?`, - stdin: hackStdin(), - stdout: hackStdout(stdio), - }); - - if (!confirm) { - return; - } - - const spinner = new Spinner(stdio); - spinner.start('Uninstalling plugin...'); - - const {message} = await fetch.post( - '/admin/plugins/manage', - {action: 'delete', name: plugin}, - ); - spinner.stop(` ${message}`); -} diff --git a/resources/assets/src/scripts/cli/readline.ts b/resources/assets/src/scripts/cli/readline.ts deleted file mode 100644 index c06941ea9..000000000 --- a/resources/assets/src/scripts/cli/readline.ts +++ /dev/null @@ -1,9 +0,0 @@ -export function emitKeypressEvents() {} - -export function createInterface() { - return { - pause() {}, - resume() {}, - close() {}, - }; -} diff --git a/vite.config.ts b/vite.config.ts index 824ed9f24..9d6978e9d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -25,7 +25,6 @@ export default defineConfig({ alias: { '@/': root.pathname, readline: new URL('scripts/cli/readline.ts', root).pathname, - prompts: 'prompts/lib/index.js', }, }, publicDir: false, diff --git a/yarn.lock b/yarn.lock index 7d01af96b..d2bd5bf29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -107,10 +107,10 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/react@^11.0.0": - version "11.11.3" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25" - integrity sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA== +"@emotion/react@^11.11.4": + version "11.11.4" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" + integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.11.0" @@ -786,10 +786,10 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^18.2.57": - version "18.2.57" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.57.tgz#147b516d8bdb2900219acbfc6f939bdeecca7691" - integrity sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw== +"@types/react@^18.2.62": + version "18.2.62" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.62.tgz#2527a7a54749b1a99c87a4aa8b83e26846face38" + integrity sha512-l3f57BbaEKP0xcFzf+5qRG8/PXykZiuVM6eEoPtqBPCp6dxO3HhDkLIgIyXPhPKNAeXn3KO2pEaNgzaEo/asaw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -1205,6 +1205,17 @@ array.prototype.find@^2.2.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" +array.prototype.findlast@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36" + integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + array.prototype.findlastindex@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" @@ -1226,7 +1237,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -1236,7 +1247,17 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.1: +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== @@ -1292,13 +1313,13 @@ asynciterator.prototype@^1.0.0: dependencies: has-symbols "^1.0.3" -autoprefixer@^10.4.17: - version "10.4.17" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" - integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== +autoprefixer@^10.4.18: + version "10.4.18" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.18.tgz#fcb171a3b017be7cb5d8b7a825f5aacbf2045163" + integrity sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g== dependencies: - browserslist "^4.22.2" - caniuse-lite "^1.0.30001578" + browserslist "^4.23.0" + caniuse-lite "^1.0.30001591" fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.0.0" @@ -1335,11 +1356,6 @@ base64-js@^1.1.2, base64-js@^1.3.0: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -blessing-skin-shell@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/blessing-skin-shell/-/blessing-skin-shell-0.3.4.tgz#d6c76f85cd5021971e7e44307989f258ea69fc97" - integrity sha512-Rpfz9BskFOaVKoLnSHWFDCtECihWrxFFongbHzMfOTQ/wQJh9wADHPq+bGf1CnPAqktU2as1Rhn2cjMof/1DZg== - bootstrap-colorpicker@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/bootstrap-colorpicker/-/bootstrap-colorpicker-3.4.0.tgz#3d1873071542755a9b31cf5b314f771e2fcc7727" @@ -1441,16 +1457,6 @@ browserslist-to-esbuild@^2.1.1: dependencies: meow "^13.0.0" -browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== - dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - browserslist@^4.22.3, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" @@ -1493,7 +1499,7 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" -cac@6.7.14, cac@^6.7.14: +cac@^6.7.14: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== @@ -1523,16 +1529,16 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001565: - version "1.0.30001576" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" - integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== - -caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001587: +caniuse-lite@^1.0.30001587: version "1.0.30001589" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== +caniuse-lite@^1.0.30001591: + version "1.0.30001593" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz#7cda1d9e5b0cad6ebab4133b1f239d4ea44fe659" + integrity sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ== + chai@^4.3.10: version "4.4.1" resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" @@ -1618,11 +1624,6 @@ clean-regexp@^1.0.0: dependencies: escape-string-regexp "^1.0.5" -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - clone@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -2203,11 +2204,6 @@ ekko-lightbox@^5.3.0: resolved "https://registry.yarnpkg.com/ekko-lightbox/-/ekko-lightbox-5.3.0.tgz#fbfcd9df93a8d1cdbf8770adc8c05aaac4d24f56" integrity sha512-mbacwySuVD3Ad6F2hTkjSTvJt59bcVv2l/TmBerp4xZnLak8tPtA4AScUn4DL42c1ksTiAO6sGhJZ52P/1Qgew== -electron-to-chromium@^1.4.601: - version "1.4.629" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.629.tgz#9cbffe1b08a5627b6a25118360f7fd3965416caf" - integrity sha512-5UUkr3k3CZ/k+9Sw7vaaIMyOzMC0XbPyprKI3n0tbKDqkzTDOjK4izm7DxlkueRMim6ZZQ1ja9F7hoFVplHihA== - electron-to-chromium@^1.4.668: version "1.4.679" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.679.tgz#480f497874ce2be162c0ac271eec91918bf96247" @@ -2332,7 +2328,7 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-iterator-helpers@^1.0.12: +es-iterator-helpers@^1.0.17: version "1.0.17" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== @@ -2679,27 +2675,29 @@ eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.33.2: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== +eslint-plugin-react@^7.34.0: + version "7.34.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz#ab71484d54fc409c37025c5eca00eb4177a5e88c" + integrity sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.0.17" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.10" eslint-plugin-unicorn@^51.0.0: version "51.0.1" @@ -2912,11 +2910,6 @@ event-emitter@^0.3.5, event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -3993,10 +3986,10 @@ kleur@^3.0.3, kleur@^4.1.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== -laravel-vite-plugin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/laravel-vite-plugin/-/laravel-vite-plugin-1.0.1.tgz#b92d0c939ccd60879746b23282100131f753cec7" - integrity sha512-laLEZUnSskIDZtLb2FNRdcjsRUhh1VOVvapbVGVTeaBPJTCF/b6gbPiX2dZdcH1RKoOE0an7L+2gnInk6K33Zw== +laravel-vite-plugin@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/laravel-vite-plugin/-/laravel-vite-plugin-1.0.2.tgz#97575181a1f870532b39ab3b423b53f01385feba" + integrity sha512-Mcclml10khYzBVxDwJro8wnVDwD4i7XOSEMACQNnarvTnHjrjXLLL+B/Snif2wYAyElsOqagJZ7VAinb/2vF5g== dependencies: picocolors "^1.0.0" vite-plugin-full-reload "^1.1.0" @@ -4360,7 +4353,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: +object.entries@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== @@ -4369,7 +4362,7 @@ object.entries@^1.1.6: define-properties "^1.2.0" es-abstract "^1.22.1" -object.fromentries@^2.0.6, object.fromentries@^2.0.7: +object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== @@ -4389,7 +4382,7 @@ object.groupby@^1.0.1: es-abstract "^1.22.3" es-errors "^1.0.0" -object.hasown@^1.1.2: +object.hasown@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== @@ -4997,7 +4990,7 @@ resolve@^1.1.5, resolve@^1.10.0, resolve@^1.19.0, resolve@^1.22.2, resolve@^1.22 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4, resolve@^2.0.0-next.5: +resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== @@ -5423,7 +5416,7 @@ string-width@^7.0.0: get-east-asian-width "^1.0.0" strip-ansi "^7.1.0" -string.prototype.matchall@^4.0.8: +string.prototype.matchall@^4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== @@ -5941,7 +5934,7 @@ vite-plugin-wasm@^3.3.0: resolved "https://registry.yarnpkg.com/vite-plugin-wasm/-/vite-plugin-wasm-3.3.0.tgz#2908ef2529bf8f33f4e549c8c6fda26ad273ca15" integrity sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg== -vite@^5.0.0, vite@^5.1.4: +vite@^5.0.0: version "5.1.4" resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.4.tgz#14e9d3e7a6e488f36284ef13cebe149f060bcfb6" integrity sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg== @@ -5952,6 +5945,17 @@ vite@^5.0.0, vite@^5.1.4: optionalDependencies: fsevents "~2.3.3" +vite@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.5.tgz#bdbc2b15e8000d9cc5172f059201178f9c9de5fb" + integrity sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q== + dependencies: + esbuild "^0.19.3" + postcss "^8.4.35" + rollup "^4.2.0" + optionalDependencies: + fsevents "~2.3.3" + vitest@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.3.1.tgz#2d7e9861f030d88a4669392a4aecb40569d90937" @@ -6107,16 +6111,6 @@ xtend@^4.0.2, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xterm-addon-fit@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.8.0.tgz#48ca99015385141918f955ca7819e85f3691d35f" - integrity sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw== - -xterm@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.3.0.tgz#867daf9cc826f3d45b5377320aabd996cb0fce46" - integrity sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"